lame-3.100/000755 001751 001751 00000000000 13170221266 014063 5ustar00netchildnetchild000000 000000 lame-3.100/README000644 001751 001751 00000003263 13144574734 014763 0ustar00netchildnetchild000000 000000 LAME 3.xx LAME Ain't an MP3 Encoder http://lame.sf.net May 2011 Originally developed by Mike Cheng (www.uq.net.au/~zzmcheng) and was latter developed by Mark Taylor (www.mp3dev.org). Currently maintained by The LAME Project. This code is distributed under the GNU LIBRARY GENERAL PUBLIC LICENSE (LGPL, see www.gnu.org), version 2. As LAME may contain software for which some companies may claim software patents, if you are in a location where software patents are recognized, it is suggested that you seek legal advice before deploying and/or redistributing LAME. In particular, it is suggested to visit http://www.mp3licensing.com/ if it applies to your jurisdiction. ============================================================================ see the file "INSTALL" for installation (compiling) instructions. see the file "USAGE" for the most up-to-date guide to the command line options. see the file "LICENSE" for details on how to use LAME in non-GPL programs. see the file "HACKING" if you are interested in working on LAME see the file "API" for details of the LAME encoding library API There is HTML documentation and a man page in the doc directory. ============================================================================ LAME uses the MPGLIB decoding engine, from the mpg123 package, written by: Michael Hipp (www.mpg123.de) MPGLIB is released under the GPL. Copyrights (c) 1999-2011 by The LAME Project Copyrights (c) 1999,2000,2001 by Mark Taylor Copyrights (c) 1998 by Michael Cheng Copyrights (c) 1995,1996,1997 by Michael Hipp: mpglib As well as additional copyrights as documented in the source code. lame-3.100/HACKING000644 001751 001751 00000007667 13144574734 015106 0ustar00netchildnetchild000000 000000 First, see the file STYLEGUIDE ************************************************************************ TESTING ======= If you make changes, please test. There is a python script in the test/ directory which will compare two versions of lame using a bunch of CBR and ABR options. To run this script, copy your favorite (and short!) wav file to the lame/test directory, and run: % cd lame/test % ./lametest.py [-w] CBRABR.op castanets.wav lame_orig lame_new ************************************************************************ LAME API ======== For a general outline of the code, see the file API. Also, frontend/main.c is a simple front end to libmp3lame.a The guts of the code are called from lame_encode_buffer(). lame_encode_buffer() handles buffering and resampling, and then calls lame_encode_frame() for each frame. lame_encode_frame() looks like this: lame_encode_frame_mp3(): l3psycho_anal() compute masking thresholds mdct_sub() compute MDCT coefficients iteration_loop() choose scalefactors (via iteration) which determine noise shapping, and choose best huffman tables for lossless compression format_bitstream format the bitstream. when data+headers are complete, output to internal bit buffer. copy_buffer() copy internal bit buffer into user's mp3 buffer ************************************************************************ ADDING NEW OPTIONS ================== control variable goes in lame_global_flags struct. Assume the variable is called 'new_variable'. You also need to write (in set_get.c): lame_set_new_variable() lame_get_new_variable() And then document the variable in the file USAGE as well as the output of "lame --longhelp" And add a "--option" style command line option to enable this variable in parse.c Note: for experimental features that you need to call from the frontend but that should not be part of the official API, see the section at the end of set_get.c. These functions should *NOT* be prototyped in lame.h (since that would indicate to the world that they are part of the API). ************************************************************************ THREADSAFE: =========== Lame should now be thread safe and re-entrant. The only problem seems to be some OS's allocate small stacks (< 128K) to threads launched by applications, and this is not enough for LAME. Fix is to increase the stack space, or move some of our automatic variables onto the heap with by using bug-proof malloc()'s and free(). ************************************************************************ Global Variables: ================= There are two types of global variables. All data in both structs is initialized to zero. 1. lame_global_flags *gfp These are input parameters which are set by the calling program, and some information which the calling program may be interested in. This struct instantiated by the call to lame_init(). 2. lame_internal_flags *gfc Most global variables go here. All internal data not set by the user. All 'static' data from old non-reentrant code should be moved here. Defined in util.h. Data for which the size is known in advance should be explicitly declaired (for example, float xr[576]); Data which needs to be malloc'd is handled by: 1. in lame_init_params(), malloc the data 2. be sure to free the data in freegfc() If the data to be malloc'd is large and only used in certain conditions (like resampling), use the following: this has the disadvantage that it is hard to catch and return error flags all the way back up the call stack. 1. Add an initialization variable to the gfc struct: lame_init_resample 2. In the resample routine, there should be some code like this: if (0==gfc->lame_init_resample) { gfc->lame_init_resample=1; /* initialization code: malloc() data, etc */ } 3. The data should be free'd in the routine freegfc(). lame-3.100/aclocal.m4000644 001751 001751 00001537106 13144610167 015743 0ustar00netchildnetchild000000 000000 # generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) # lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) # lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([AM_WITH_DMALLOC], [AC_MSG_CHECKING([if malloc debugging is wanted]) AC_ARG_WITH([dmalloc], [AS_HELP_STRING([--with-dmalloc], [use dmalloc, as in http://www.dmalloc.com])], [if test "$withval" = yes; then AC_MSG_RESULT([yes]) AC_DEFINE([WITH_DMALLOC], [1], [Define if using the dmalloc debugging malloc package]) LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else AC_MSG_RESULT([no]) fi], [AC_MSG_RESULT([no])]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) lame-3.100/vc_solution/000755 001751 001751 00000000000 13170221266 016427 5ustar00netchildnetchild000000 000000 lame-3.100/compile000755 001751 001751 00000016326 13126231407 015450 0ustar00netchildnetchild000000 000000 #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/debian/000755 001751 001751 00000000000 13170220201 015271 5ustar00netchildnetchild000000 000000 lame-3.100/ChangeLog000644 001751 001751 00003404470 13170220617 015650 0ustar00netchildnetchild000000 000000 ChangeLog for LAME -==================- - All dates/times are in GMT. - This file contains the complete changelog, even commit logs of non official branches. An entry of the form "filename (branchname):" may not apply to the source you get with this package. - Generated from cvs log entries (cvs2cl --gmt -S --branches --no-wrap --header ChangeLog.header) -- 2017-10-13 20:22 aleidinger * vc_solution/Makefile.in: update 2017-10-13 20:21 aleidinger * vc_solution/Makefile.am: list each file explicitely, make dist does not like globs. 2017-10-13 20:16 aleidinger * testcase.mp3: Update testcase for 3.100 release. Build on FreeBSD 64bit, clang 5.0.0, no advanced compiler flags/optimisations. 2017-10-10 19:31 aleidinger * ChangeLog: update 2017-09-26 12:25 robert * frontend/parse.c: forcing MS for j-stereo mode only 2017-09-26 12:14 robert * Dll/BladeMP3EncDLL.c, frontend/parse.c, libmp3lame/lame.c: forcing MS for j-stereo mode only 2017-09-26 10:31 robert * libmp3lame/lame.c: set 'use of safe joint' for joint-stereo only, (only effects a bit in vbr tag, sometimes) 2017-09-21 11:00 robert * libmp3lame/: gain_analysis.c, machine.h: + fix multiple_of macro 2017-09-19 16:58 robert * libmp3lame/version.h: release candidate 2017-09-19 16:57 robert * frontend/parse.c: patch for bug #484: Lame doesn't recognize user locale correctly 2017-09-06 19:40 aleidinger * ChangeLog: update 2017-09-06 19:38 aleidinger * libmp3lame/psymodel.c: Add missing (at least in FreeBSD) include for FLT_EPSILON. 2017-09-06 15:07 robert * frontend/get_audio.c, libmp3lame/fft.c, libmp3lame/gain_analysis.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/interface.c, mpglib/tabinit.c: small fixes 2017-08-31 14:14 robert * frontend/lame_main.c, include/lame.def, include/lame.h, include/libmp3lame.sym, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/set_get.c: another go to fix bug #474: Buffer Overflow possible when input sample rate very low - do_copy_buffer did not check buffer size, when size was zero! 0 was a bad choice for the purpose of not checking, because it was possible to get there, even when checking was demeanded! 2017-08-30 20:48 robert * libmp3lame/lame.c: fix for bug #474: Buffer Overflow possible when input sample rate very low When the input sample rate is very low, like 1 Hz, resampling to 8 kHz can result in a buffer overflow. Found by Gustavo Grieco. 2017-08-30 14:11 robert * frontend/: lame_main.c, parse.c, parse.h: fix for bug #473: Buffer Overflow possible in lame_main.c - replaced parse_nogap_filename by generateOutPath (now there is only one function building the output file names) - all nogap file names are now build before any encoding starts - decode and nogap are no valid combination of arguments anymore, wouldn't work as expected 2017-08-28 15:39 robert * libmp3lame/id3tag.c: fix for bug #472: NULL Pointer Dereference in id3v2AddAudioDuration - plus some more pointer checks 2017-08-28 12:48 robert * frontend/gtkanal.c: fixing resource leak, hip deocder wasn't closed on quit 2017-08-26 13:20 robert * libmp3lame/: lame.c, set_get.c: lame_init_params: - removed some impossible returns 2017-08-26 10:54 robert * libmp3lame/encoder.c: more of psy downgrade 2017-08-24 20:43 robert * frontend/mp3rtp.c: - free was called twice for some argument c-string 2017-08-23 13:22 robert * mpglib/: interface.c, layer1.c: hip layer 1 decode: testing for illegal bit allocation value 2017-08-22 23:31 robert * mpglib/layer2.c: fix for bug #470: global-buffer-overflow mpglib/layer2.c:144 II_step_one 2017-08-22 19:44 robert * libmp3lame/: id3tag.c, id3tag.h, util.c: id3v2: set 'language'property to a valid language code (COMM field) 2017-08-22 16:02 robert * doc/html/history.html, frontend/get_audio.c, frontend/lame_main.c: fixing bug i#434: --clipdetect scale suggestion unaware of --scale input value 2017-08-21 17:10 robert * frontend/get_audio.c: fix for bug #469 Unable to build without mpglib 2017-08-20 20:06 robert * mpglib/layer3.c: It looks like 'intensity stereo' decoding is broken. This change prevents a buffer overflow (read) and instead prints an indication, that there is something wrong. 2017-08-20 13:56 robert * mpglib/layer3.c: fixing map for mixed-block band infos 2017-08-19 20:17 robert * mpglib/layer3.c: fix for #467: stack-buffer-overflow mpglib/layer3.c:945 III_dequantize_sample fix for #468 global-buffer-overflow mpglib/layer3.c:1244 III_i_stereo 2017-08-19 14:20 robert * mpglib/common.c: fix for bug #465: global-buffer-overflow layer2.c:144 II_step_one - mpeg-2.5 is only supported by Layer3 2017-08-19 12:51 aleidinger * ChangeLog: update 2017-08-18 22:06 robert * mpglib/layer3.c: fix for bug #466: "stack-buffer-overflow in ./mpglib/layer3.c:1264 III_i_stereo" 2017-08-18 21:56 robert * frontend/: get_audio.c, lame_main.c: fix for bug #464: attempting double-free 2017-08-15 19:51 robert * libmp3lame/set_get.c: estimation of total number of frames changed 2017-08-15 15:40 aleidinger * make_changelog.sh: add comment how to generate the input file 2017-08-15 15:35 aleidinger * ChangeLog: update ChangeLog 2017-08-15 15:20 aleidinger * Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/Makefile.in, macosx/English.lproj/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, vc_solution/Makefile.in: regenerate 2017-08-15 15:16 aleidinger * aclocal.m4, configure: regenerate 2017-08-15 15:16 aleidinger * configure.in: Improve compiler version detection (clang changed version string). Add some future GCC versions in the optimisation part. 2017-08-15 15:15 aleidinger * include/lame.def: Add lame_encode_buffer_interleaved_int() by Michael Fink. LAME Patch #27. 2017-08-15 14:51 aleidinger * include/lame.h, include/libmp3lame.sym, libmp3lame/lame.c: patch #27: Add lame_encode_buffer_interleaved_int() by Michael Fink 2017-08-15 14:46 aleidinger * compile, config.sub, depcomp, install-sh, missing, frontend/depcomp, libmp3lame/depcomp, misc/depcomp, mpglib/depcomp: update to a more recent autotools version 2017-08-13 16:18 robert * libmp3lame/set_get.c: prevent some rare overflow in estimation of total number of frames in case samplerate-out is higher than samplerate-in (it is a visual glitch only) 2017-08-13 13:57 robert * doc/html/history.html, frontend/get_audio.c, libmp3lame/version.h: - sanity check when reading pcm data, avoid buffer overflow - version 3.100 beta 0 2017-08-12 18:56 robert * frontend/get_audio.c, frontend/lame_main.c, frontend/main.c, mpglib/common.c, mpglib/interface.c: - avoid calling exit in library - free up resources after error condition in frontend 2017-08-12 18:14 robert * mpglib/layer3.c: - workaround for heap corruption while decoding layer3 - some fix for mpeg2.5 decoding with mixed block feature, taken from Takehiro's branch 2017-08-08 17:52 robert * doc/man/lame.1: fix typo 2017-08-08 13:56 robert * doc/html/history.html, libmp3lame/vector/xmm_quantize_sub.c: Fix for bug ticket [ #449 ] Make sure functions with SSE instructions maintain their own properly aligned stack. Thanks to Fabian Greffrath 2017-08-08 13:26 robert * doc/html/history.html, mpglib/interface.c: Fix for bug ticket #445: dereference of a null pointer possible in loop. Thanks to Renu Tyagi 2017-08-08 12:40 robert * doc/html/history.html, frontend/lame_main.c: Fix for bug ticket #447: Fix dereference NULL and Buffer not NULL terminated issues. Thanks to Surabhi Mishra 2017-08-06 18:15 robert * frontend/get_audio.c, libmp3lame/VbrTag.c, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/util.h: in case of illegal sample rate and number of channel, let lame print an error message 2017-08-03 13:07 rjamorim * HACKING, INSTALL, LICENSE, README, README.WINGTK, TODO: Typos, formatting, grammar... 2017-08-03 13:06 rjamorim * ACM/lame.ico: Updated icon to the current LAME logo 2017-08-03 12:32 rjamorim * USAGE: Updated USAGE: fixed typos, formatting, some grammar 2017-08-02 19:56 robert * doc/html/history.html: - reverting psymodel to that of version 3.99.5 - changing version back to 3.99.5 to ease binary mp3 file comparisons with version 3.99.5 Committed on the Free edition of March Hare Software CVSNT Client. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ 2017-08-02 19:48 robert * libmp3lame/: psymodel.c, quantize.c, quantize_pvt.c, util.h, version.h: - reverting psymodel to that of version 3.99.5 - changing version back to 3.99.5 to ease binary mp3 file comparisons with version 3.99.5 Committed on the Free edition of March Hare Software CVSNT Client. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ 2016-01-29 21:36 aleidinger * ChangeLog: update history 2016-01-29 21:06 aleidinger * aclocal.m4, config.h.in, config.sub, Makefile.in, compile, config.guess, depcomp, install-sh, ltmain.sh, missing, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, frontend/depcomp, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/depcomp, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/Makefile.in, macosx/English.lproj/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in, misc/depcomp, mpglib/Makefile.in, mpglib/depcomp, vc_solution/Makefile.in, configure: regen 2016-01-29 21:06 aleidinger * HACKING, Makefile.MSVC, Makefile.am.global, Makefile.unix, configure.in, Dll/Makefile.mingw32, libmp3lame/Makefile.am: - better check for SSE intrinsics [1] - don't define NDEBUG in release builds -> asserts trigger segfaults even in release builds -> quick and user-unfriendly fix until user-fiendly error checks are implemented - fix spelling mistakes in HACKING file [2] - enable cross-compiling for mingw [3] - fix linker path for libmpelame for mingw [3] - fix out-of-source-tree builds [4] - update files to automake 1.15, autconf 2.69 - update compiler version detection (detect clang and add optimization for at least 3.7.x) Submitted by: dim@FreeBSD.org [1], FreeBSD PR 206620 tridecethtwelve@users.sf.net [2] LAME patch #68 bardware@users.sf.net [3] LAME patch #70 m-a@users.sf.net [4] LAmE patch #67 2015-05-11 07:01 rbrito * libmp3lame/lame.c: libmp3lame: Remove redundant check for invalid sample rates. Thanks Fabian Greffrath for letting me know that I screwed up. :) Signed-off-by: Rogério Brito 2015-04-28 22:12 rbrito * libmp3lame/lame.c: libmp3lame: Add check for negative number of channels. Thanks to Maks Naumov and Fabian Greffrath for the contribution. 2015-04-28 22:07 rbrito * libmp3lame/util.c: libmp3lame: Fix decision if sample rate ratio is an integer value or not. From Fabian Greffrath's original description: If the sample rate of the input file is sufficiently close to an integer multiple of the output sample rate, the value of the intratio variable is calculated incorrectly. This leads to further values being miscalculated up to the joff variable which is used as an index to dereference the esv->blackfilt array. This leads top an overflow and causes a segmentation fault. See https://bugs.debian.org/778529 for a discussion. 2015-04-28 22:03 rbrito * frontend/get_audio.c: frontend: Avoid division by zero. Avoid malformed wav causing floating point exception (integer divide by zero). Kindly contributed by Fabian Greffrath . See https://bugs.debian.org/777159 for a discussion. 2015-02-21 23:03 rbrito * test/lametest.py: test: lametest: Some more PEP-8 love. This is mostly regarding not having parentheses around boolean expressions. 2015-02-21 22:57 rbrito * test/lametest.py: test: lametest: Add some PEP-8 love. 2015-02-21 22:49 rbrito * test/lametest.py: test: lametest: Fix some trailing whitespace. 2015-02-21 22:35 rbrito * libmp3lame/lame.c: Add check for invalid input sample rate. Patch by Maks Naumov , forwared to me by Fabian Greffrath from the Debian packaging. Thanks for the contribution! 2014-10-01 17:54 jaz001 * doc/html/links.html: links update. 2014-01-28 14:48 robert * frontend/get_audio.c, frontend/main.c, libmp3lame/lame.c, libmp3lame/machine.h, Makefile.MSVC: some minor changes: - do not disable replaygain calc and find peak sample, when not writing LAME info header (patch tracker item #66) - remove deprecated linker option from Makefile.MSVC (bug tracker item #442) 2013-12-17 11:24 robert * frontend/get_audio.c, frontend/main.h, frontend/parse.c, libmp3lame/gain_analysis.c, libmp3lame/id3tag.h, libmp3lame/machine.h, libmp3lame/psymodel.c: applying submitted patches #64: fixes undefined references when compiling with mingw32 (send by Patrick) #59: changes static_assert into a more portable form (send by Doug Cook) #55: fixes issues with wave files >2GB (send by lvqcl) plus some minor changes to reduce compiler warnings with GCC v4.7.1 2013-12-08 19:49 jaz001 * LICENSE, USAGE, doc/html/detailed.html, doc/man/lame.1, frontend/parse.c: Documentation updates: -q setting rewording in all docs general updates in USAGE and man page. Small updates in the --help, --longhelp , and --preset help 2013-06-12 09:16 rbrito * aclocal.m4, configure.in, doc/html/Makefile.am, doc/man/Makefile.am, libmp3lame/i386/Makefile.am: Make autotools files compatible with automake >= 1.12 Newer autotools versions don't seem to support ansi2knr, which is probably not a problem, given the last decades of compilers accepting ANSI C (and the rest of the LAME code being written in ANSI C itself). This fixes ticket #60, with a patch of Brennan Shacklett, from the Gentoo community. 2013-06-12 09:06 rbrito * aclocal.m4, configure.in, doc/html/Makefile.am: Kill spurious trailing whitespace from some files. 2013-06-11 08:41 rbrito * frontend/brhist.c: frontend: brhist: Fix type of formatting string parameter. 2013-06-11 08:41 rbrito * frontend/get_audio.c: frontend: get_audio: Add missing formatting string parameter. 2013-06-11 08:19 rbrito * Dll/Example.cpp: Dll/Example.cpp: Remove (some) spurious whitespace. 2013-06-11 08:19 rbrito * Dll/Example.cpp: Dll/Example.cpp: Remove resource leaks in example code. 2013-06-11 07:26 rbrito * config.guess, config.sub: config.{sub,guess}: Update files to pick up newer arches. This closes ticket #406. Perhaps a better solution would be to rewrite part of our autotools system, but, then, perhaps not. 2013-06-11 06:46 rbrito * include/libmp3lame.sym: libmp3lame: Regenerate libmp3lame.sym from header file. Part of patch submitted by Reimar Döffinger on ticket #63. We should review this to check if there are any symbols that we don't want exported. 2013-06-11 06:45 rbrito * libmp3lame/Makefile.am: libmp3lame: Consider the symbols in libmp3lame.sym. This is part of the patch sent by Reimar Döffinger in ticket #63. 2013-03-20 20:38 robert * frontend/timestatus.c, doc/html/history.html: fix for tracker item 3608583: input file name displayed with wrong character encoding (windows) 2012-10-25 18:46 robert * doc/html/history.html, frontend/lame_main.c, frontend/main.c, frontend/parse.c: fix for tracker item 3580176: environment variable LAMEOPT doesn't work anymore 2012-10-13 14:10 robert * doc/html/history.html, frontend/parse.c: fix for tracker item 3544957: scale (empty) silent encode without warning switches with missing argument values will be ignored. (Those with integer or floating point values, at least) 2012-10-13 11:50 robert * doc/html/history.html, frontend/parse.c: fix for tracker item 3565659: no progress indication with pipe input :( 2012-10-13 10:36 robert * doc/html/history.html, frontend/parse.c: fix for tracker item 3567844: problem with Tag genre 2012-10-13 09:33 robert * doc/html/history.html, frontend/parse.c: fix for tracker item ID 3558466: Bug in path handling 2012-10-09 21:39 robert * libmp3lame/version.h: bump version 2012-10-09 21:37 robert * libmp3lame/: psymodel.c, util.h: trying to improve strong tonal samples (lead-voice.wav) 2012-10-09 21:35 robert * frontend/parse.c: ignore developer-only switches, but parse them for command line compatibility reasons 2012-10-06 15:54 robert * libmp3lame/psymodel.c: - code refactorings - changed "mask adding", get the max of 3 different ones 2012-10-06 11:44 robert * frontend/parse.c, libmp3lame/presets.c: + new command line option "--gain x", more convenient to adjust replay gain, just use whatever decibel value LAME reported before. + out-dir option mentioned in long help text 2012-07-19 20:57 robert * doc/html/history.html, frontend/get_audio.c, mpglib/interface.c, libmp3lame/version.h: Improved detection of MPEG audio data in RIFF WAVE files. see tracker item 3545112: Invalid sampling detection 2012-07-11 18:31 jaz001 * doc/html/: detailed.html, usage.html: Updates to reflect recent changes in hydrogenaudio wiki. 2012-06-19 00:15 rbrito * doc/html/history.html: Update the HTML changelog. 2012-06-19 00:00 rbrito * Makefile.am, configure.in: Don't use use the debian directory as build target. Include debian as extra directory instead of directory part of subdirectories used in build. Patch stolen from: http://anonscm.debian.org/gitweb/?p=pkg-multimedia/lame.git;a=tree;f=debian/patches 2012-06-18 20:52 rbrito * libmp3lame/i386/Makefile.am: libmp3lame: Fix possible race condition causing build failures. This was discovered in automated builds by the Debian project and the patch provided is by Andres Mejia . Please, note that only part of the patch (the one touching Makefile.am) was applied, since the changes in Makefile.in should be picked up when regenerating files with autotools. Signed-off-by: Rogério Brito 2012-06-18 20:51 rbrito * acinclude.m4: acinclude.m4: Include GTK-1 autoconf directives in build system. Resurrect knowledge of how to deal with GTK1. This was transplanted back from aclocal.m4 with a patch provided by Andres Mejia , from Debian's packaging of lame, even though the original code is attributed to Owen Taylor and dated 97-11-3. Anyway, with this part not lost again, we can easily regenerate autotools' files with a simple `autoconf -vfi` invocation. Signed-off-by: Rogério Brito 2012-06-18 20:48 rbrito * configure.in: configure.in: Rewrap for (human) legibility. This also helps by being diff-friendly if we change only one of the parts of a long line. Signed-off-by: Rogério Brito 2012-02-28 19:07 robert * doc/html/history.html: bug-fix release 3.99.5 2012-02-28 18:57 robert * ChangeLog, configure, configure.in, testcase.mp3, doc/html/history.html (lame3_99): bug-fix release 3.99.5 2012-02-19 00:02 robert * libmp3lame/: gain_analysis.c, machine.h: rearranging gain analysis kernel table and calc loops to allow better code vectorization 2012-02-18 13:08 robert * frontend/get_audio.c, frontend/lame_main.c, frontend/main.c, frontend/parse.c, libmp3lame/mpglib_interface.c, mpglib/layer2.c: removing VC11 x86-64 compiler warnings 2012-02-14 14:24 robert * libmp3lame/: VbrTag.c, bitstream.c, encoder.c, id3tag.c, lame.c, machine.h, mpglib_interface.c, psymodel.c, util.c, util.h: some code refactorings 2012-02-14 11:06 robert * ChangeLog, doc/html/history.html (lame3_99), ChangeLog, doc/html/history.html: updating history/changelog 2012-02-11 12:11 robert * frontend/get_audio.c: Bug fix for tracker item ID: 3486753 Artifacts at the beginning of decoded file 2012-02-11 12:10 robert * mpglib/layer3.c: some hidden global temporary variable removed, could have been some multi threading issue 2012-02-11 12:00 robert * frontend/get_audio.c (lame3_99): Bug fix for tracker item ID: 3486753 Artifacts at the beginning of decoded file 2012-02-11 11:03 robert * mpglib/layer3.c (lame3_99): some hidden global temporary variable removed, could have been some multi threading issue 2012-02-10 18:13 rbrito * config.h.in, configure.in: autotools: Fix compilation on alpha using proper ifdef guards. Thanks to Andres Mejia for the patch (with minor whitespace adjustments). 2012-02-10 18:11 rbrito * doc/html/history.html: doc: Correctly spell Fabian Greffrath's name to give proper credit. 2012-02-10 18:06 rbrito * config.h.in, configure.in (lame3_99): autotools: Fix compilation on alpha using proper ifdef guards. Thanks to Andres Mejia for the patch (with minor whitespace adjustments). 2012-02-10 18:05 rbrito * doc/html/history.html (lame3_99): doc: Correctly spell Fabian Greffrath's name to give proper credit. 2012-02-07 13:52 robert * configMS.h (lame3_99), configMS.h: reduce compiler warnings for SSE2 build with VC 11 2012-02-07 13:40 robert * configMS.h, frontend/parse.c, libmp3lame/l3side.h, libmp3lame/machine.h, libmp3lame/quantize_pvt.c, libmp3lame/vbrquantize.c, libmp3lame/version.h (lame3_99): - workaround for cygwin build problem - fix "fast floating point math" problem (possible bitrate bloat on quiet pieces) 2012-02-07 13:36 robert * configMS.h, libmp3lame/l3side.h, libmp3lame/machine.h, libmp3lame/quantize_pvt.c, libmp3lame/vbrquantize.c: - workaround for cygwin build problem - fix "fast floating point math" problem (possible bitrate bloat on quiet pieces) 2012-01-25 13:01 robert * ChangeLog, doc/html/history.html: updating Changelog and History 2012-01-25 12:47 robert * configure, configure.in, testcase.mp3 (lame3_99): Bug-fix release 3.99.4 2012-01-25 12:33 robert * ChangeLog, testcase.mp3, doc/html/history.html (lame3_99): updating history and changelog 2012-01-19 14:27 robert * frontend/parse.c (lame3_99): fix for tracker item ID: 3475581 - lame crashes at .w64 input file 2012-01-19 12:15 robert * frontend/parse.c: fix for tracker item ID: 3475581 - lame crashes at .w64 input file 2012-01-08 23:49 robert * include/lame.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/util.c, libmp3lame/version.h (lame3_99), include/lame.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/quantize_pvt.c, libmp3lame/util.c: Addressing things brought to attention by tracker item ID: 3463197: 3.99.x problem WFED and PCST frames + WFED and PCST frames can now be added, to tag podcasts iTunes recognizes + USER frames are now supported + COMM frames can now have a description, when passed via --tv "COMM==" - possible divide-by-zero exception should be fixed - adding malformed user-defined-frames could result in abnormal program termination, fixed 2011-12-04 12:35 robert * libmp3lame/: lame.rc (lame3_99), lame.rc: re tracker ID: 3449748 Incomplete resource definition file A translation value seems to be mandatory by convention. 2011-11-26 19:49 robert * ChangeLog, configure, configure.in (lame3_99): releasing 3.99.3 2011-11-26 18:26 robert * doc/html/history.html, libmp3lame/id3tag.c: bug fix for tracker item ID: 3441349: --tg does not handle genre number when adding unicode tag 2011-11-26 18:15 robert * doc/html/history.html, libmp3lame/id3tag.c, libmp3lame/version.h (lame3_99): bug fix for tracker item ID: 3441349: --tg does not handle genre number when adding unicode tag 2011-11-18 09:51 robert * doc/html/history.html, libmp3lame/VbrTag.c, libmp3lame/version.c: merge with 3.99 branch modifications 2011-11-18 09:39 robert * ChangeLog (lame3_99): releasing 3.99.2 2011-11-18 09:30 robert * configure, configure.in (lame3_99): releasing 3.99.2 stable 2011-11-18 09:18 robert * testcase.mp3, doc/html/history.html, libmp3lame/VbrTag.c, libmp3lame/version.c, libmp3lame/version.h (lame3_99): Due to some bugs in 3rd party HW/SW decoders, those were not be able to make use of LAME's extended info tag anymore, resulting in problems with things like gapless playback. 2011-11-18 08:38 robert * frontend/: get_audio.c, get_audio.h, lame_main.c (lame3_99): copy old id3v2 tag 2011-11-10 21:39 robert * libmp3lame/version.c (lame3_99): small fix 2011-11-10 18:46 robert * libmp3lame/version.c: small fix 2011-11-10 13:19 robert * frontend/: get_audio.c, get_audio.h, lame_main.c: when transcoding, copy old id3v2 tag. feature requests: ID: 1985551 lame --pass-ID3-tags-unscathed ID: 977304 ID3 tags lost when transcoding 2011-11-09 00:15 robert * libmp3lame/: quantize.c, quantize_pvt.c: aiming for a more balanced bit reservoir usage 2011-11-08 19:36 robert * libmp3lame/quantize_pvt.c: at lower sample rates, make a cut at last usable scalefactor band 2011-11-08 18:19 robert * libmp3lame/quantize.c: 8kHz mpeg2.5 uses fewer scale factor bands. 2011-11-06 18:34 robert * libmp3lame/encoder.c: use same meaning of PE in cbr and vbr modes 2011-11-05 17:53 robert * configure, configure.in, doc/html/history.html, libmp3lame/version.h: main-branch open for next development cycle 2011-11-05 17:33 robert * ChangeLog, configure, configure.in (lame3_99): releasing 3.99.1 2011-11-05 17:00 robert * doc/html/history.html, libmp3lame/version.h (lame3_99): releasing 3.99.1 stable 2011-11-05 16:32 robert * misc/: Makefile.am, Makefile.in: adding mk_mp3.sh to dist files 2011-11-02 00:20 robert * Makefile.MSVC, libmp3lame/machine.h: fixing vc6 compile problem, VC6 seems to miss exporting some inline functions from math.h. 2011-11-01 19:50 robert * libmp3lame/id3tag.c: oops, fixing writing unicode strings in id3tags 2011-11-01 16:59 robert * doc/html/history.html, frontend/parse.c, libmp3lame/id3tag.c: Fixes for several issues with ID3v2 unicode tags, using Big-Endian text encodings. Because of several other software (like Windows Media Player), LAME writes Little-Endian unicode tags only. Thanks to Taihei Monma, for reporting these issues. Tracker items: [ 3431203, 3431222, 3431241 ] 2011-10-18 21:54 robert * Dll/BladeMP3EncDLL.h: Fixing typedef HBE_STREAM, has to be a pointer type. 2011-10-18 21:51 robert * libmp3lame/: lame.c, util.c: Fixing a small display problem for x64 platform 2011-10-17 23:15 robert * libmp3lame/id3tag.c: bug fix: ID3 tags are always added 2011-10-16 13:09 robert * frontend/: Makefile.am, Makefile.in: file rtp.h was missing in distribution list 2011-10-15 15:46 robert * doc/html/history.html: Updating history 2011-10-15 14:37 robert * ChangeLog: updating Changelog 2011-10-15 14:31 robert * testcase.mp3, debian/Makefile.am, debian/Makefile.in, doc/html/detailed.html, libmp3lame/version.h: preparing release 2011-10-15 12:38 robert * misc/mk_mp3.sh: updating script for building mp3 collection from lossless archive 2011-10-06 23:12 robert * ChangeLog: updating changelog 2011-10-06 23:07 robert * frontend/: get_audio.c, parse.c: let iconv use transliteration 2011-10-04 15:37 robert * frontend/parse.c: fixing compiler warning 2011-10-04 11:42 robert * frontend/: get_audio.c, lame_main.c, main.h, parse.c: using our input file reading functions when reading from stdin allow -s to overwrite input samplerate for non RAW input files too 2011-10-03 13:28 robert * doc/html/history.html, frontend/lame_main.c: fix for tracker item ID: 3034259 Fix for confusing fatal error: can't update LAME-tag frame! 2011-10-03 13:22 robert * libmp3lame/id3tag.c, frontend/parse.c: making sure, the id3v1 tags get filled 2011-10-02 21:45 robert * doc/html/history.html, frontend/get_audio.c: Bug fix for tracker item ID: 3368977 Wave Parser doesn't pad chunks 2011-10-02 18:39 robert * frontend/: portableio.c, portableio.h: removing portableio.[ch] files, not needed anymore 2011-10-02 18:24 robert * frontend/parse.c, libmp3lame/id3tag.c: fixing some compiler warnings 2011-10-02 17:13 robert * Makefile.MSVC, frontend/Makefile.am, frontend/Makefile.in, frontend/get_audio.c, frontend/mp3rtp.c, Makefile.unix, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_lame_mp3rtp.vcproj, vc_solution/vc9_lame_mp3x.vcproj: replacing "portableio" by own code in get_audio.c 2011-10-02 14:52 robert * doc/html/detailed.html, doc/man/lame.1, libmp3lame/id3tag.c, frontend/main.c, frontend/main.h, frontend/parse.c, include/lame.def, include/lame.h: clearify, unicode tags are utf-16 2011-09-28 19:11 robert * doc/html/history.html, libmp3lame/id3tag.c, frontend/parse.c, vc_solution/vc9_lame.sln, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_lame_mp3rtp.vcproj, vc_solution/vc9_lame_mp3x.vcproj, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj, vc_solution/vc9_mpglib.vcproj: bug fix for tracker item 3395813: id3tag_set_fieldvalue for URL link frames Broken now one can add URL link frames to the ID3v2 tag, like: --tv "WOAR=www.mypage.com" --tv "WXXX=get remixes here=www.dj.org" 2011-09-25 17:08 robert * libmp3lame/version.h: increasing patch level 2011-07-26 11:48 rbrito * frontend/parse.c: frontend: Update licensing message. Patch supplied by Andres Mejia according to previous discussions in the mailing lists `lame-dev` and `pkg-multimedia-maintainers`. http://lists.alioth.debian.org/pipermail/pkg-multimedia-maintainers/2011-July/020417.html 2011-06-17 06:22 aleidinger * Makefile.am.global: Remove ansi2knr part. It will be deprecated and subsequently removed from automake. Notified by: Stefano Lattarini 2011-05-24 20:45 robert * Makefile.unix, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c: small change in addition of simultaneous maskings 2011-05-24 20:40 robert * mpglib/layer2.c: workaround for tracker item 3301963:"assertion failed in layer 2 decoding" 2011-05-07 16:05 rbrito * README, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.h, Dll/Example.cpp, debian/copyright, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.c, frontend/gpkplotting.h, frontend/gtkanal.c, frontend/gtkanal.h, frontend/lame_main.c, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/main.h, frontend/mp3rtp.c, frontend/parse.c, frontend/rtp.c, frontend/rtp.h, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.h, libmp3lame/id3tag.c, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/vector/lame_intrin.h, libmp3lame/vector/xmm_quantize_sub.c, test/lame_test.cpp: Make explicit that the licence is the Library GPLv2. According to Jonas Smedegaard, there is no Lesser GPLv2, only Lesser GPLv2.1. Thanks to Andres. 2011-05-07 15:56 rbrito * frontend/parse.c: Fix some warnings in 64-bit arches. Changing s/size_t/unsigned int/ This should not be a problem with the variables in question, as they can't be much larger than what an unsigned int is able to hold. Patch from: http://git.debian.org/?p=pkg-multimedia/lame.git;a=blob;f=debian/patches/07-field-width-fix.patch Sent by Andres. 2011-05-07 15:44 rbrito * configure.in: Work round buggy softfloat optimization in ARM EABI compilers. A bug present in gcc-4.[123] up to 4.3.3 makes a buggy optimization for single-precision floats when -ffinite-math-only (enabled by -ffast-math) Refer to the following. https://sourceforge.net/tracker/index.php?func=detail&aid=2681646&group_id=290&atid=100290 https://trac.xiph.org/ticket/1526 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39501 Thanks to Andres Mejia. This fixes SF bug 2681646. 2011-05-07 15:35 rbrito * libmp3lame/i386/nasm.h: Disable executable patch. Patch from Russell Coker to disable executable stack from Christian Marillat's packaging. Sent by Andres Mejia. 2011-05-07 01:23 rbrito * README: Tweak slightly the disclaimer of patents from the README file. This change was proposed by me with suggestions made by Andres Mejia. 2011-05-06 20:14 rbrito * libmp3lame/lame.c: libmp3lame: lame: Put some parentheses to shut up some static analysis tools. The statement frames_left -= ((frame_num != gfc->ov_enc.frame_number) ? 1 : 0); could probably be written as frames_left -= (frame_num != gfc->ov_enc.frame_number); unless we know of some platform where a boolean evaluation does not result in a 1 in case of it being true. 2011-05-06 19:59 rbrito * README: Remove problematic restriction to the LGPL, to make it legally OK. Also update the copyright years of the LAME team. 2011-04-20 13:03 aleidinger * config.rpath: looks like this is needed now 2011-04-20 12:52 aleidinger * aclocal.m4, Makefile.in, configure, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/Makefile.in, macosx/English.lproj/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, vc_solution/Makefile.in, config.h.in: regen 2011-04-20 12:51 aleidinger * configure.in: - correct the VBR check message to something more correct (curses) - check for libiconv and use it in the frontend 2011-04-19 15:36 robert * doc/man/lame.1, frontend/parse.c: lame(1) manpage patch - ID: 3161674 Typo in --longhelp - ID: 3288886 replaced strnicmp, isn't portable 2011-04-15 20:17 robert * libmp3lame/lame.c: Bug fix: when aborting an encode before any samples were fed into the encoder, an assert was falsely triggered. 2011-04-14 20:48 robert * frontend/parse.c: Allow -Z switch in none alpha builds (for now) 2011-04-14 19:36 robert * doc/html/history.html, frontend/parse.c, libmp3lame/presets.c, libmp3lame/version.h: 3.99 beta phase 2011-04-08 23:50 robert * misc/mk_mp3.sh: mk_mp3.sh - script to encode and tag CDs 2011-04-08 22:55 robert * libmp3lame/psymodel.c: some code cleanup: unused vars, defines, etc. 2011-04-08 19:26 robert * frontend/: lame_main.c, main.c, main.h: Unicode support for extra options passed via environment varialbe LAMEOPT 2011-04-07 23:03 robert * frontend/get_audio.c: quick fix for tracker item 3277412: Segmentation fault at layer2.c:105 with --decode (problem sample contains multiple ID3v2 tags) 2011-04-07 23:01 robert * libmp3lame/: psymodel.c, util.h: - some code cleanup - calculate short block thm from long blocks, in case we eventually may need it for pre-echo control of the next granule 2011-04-05 19:17 jaz001 * doc/html/detailed.html: corrected spelling. 2011-04-04 19:40 robert * libmp3lame/psymodel.c: small update for the pre-echo control 2011-04-04 11:49 aleidinger * ChangeLog: Update upto now. 2011-04-04 11:48 aleidinger * make_changelog.sh: Add the script to generate the changelog, not added to Makefile.am as it does not make sense to distribute it. I keep the "cvs log" output in '../log_output', the script expects it there. 2011-04-04 09:54 aleidinger * Makefile.in, config.h.in, configure, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/Makefile.in, macosx/English.lproj/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, vc_solution/Makefile.in: regen 2011-04-04 09:51 aleidinger * aclocal.m4: regen 2011-04-04 09:49 aleidinger * configure.in: - depend upon at least autoconf 2.68, this should fix the variable type size check in configure on Windows (mingw) - readd check for termcap lib (needed for brhist) - remove float8 (requested by Robert Hegemann) - my gcc moans about -march=generic not being supported (anymore), use 'native' instead of 'generic' in one place 2011-04-04 09:45 aleidinger * Makefile.am.global: Depend upon automake 1.11. 2011-04-04 09:42 aleidinger * libmp3lame/i386/Makefile.am: Create the directory in any case, seems to prevent a race condition. 2011-04-04 09:41 aleidinger * configMS.h: Remove superflous brhist define. 2011-04-04 09:40 aleidinger * INSTALL: Remove superflous explication about brhist switch. 2011-04-04 09:36 aleidinger * depcomp, install-sh, ltmain.sh, missing, frontend/depcomp, libmp3lame/depcomp, misc/depcomp, mpglib/depcomp: Update files from automake 1.11 and libtool 2.2.10. 2011-04-03 22:26 robert * libmp3lame/: psymodel.c, version.h: pre-echo control for short blocks is dependent on previous frame. maybe we can relax it later, to speed-up things again. 2011-03-25 19:57 robert * frontend/parse.c: dropping note about mpglib being GPL, because we use HIP for decoding. 2011-03-24 20:19 robert * doc/html/detailed.html, doc/man/lame.1, frontend/parse.c, libmp3lame/id3tag.c: new switches controlling the string encoding mode for ID3v2 tags: --id3v2-latin1 turns on ID3v2 tags, text encoding ISO-8859-1 --id3v2-ucs2 turns on ID3v2 only tags, text encoding UCS-2 Similar experimental switches removed. 2011-03-24 10:25 robert * doc/html/history.html: fixing glitch in Joseph's name 2011-03-24 10:21 robert * doc/html/history.html: updating history with info about latest changes 2011-03-22 20:35 robert * ChangeLog, libmp3lame/version.h: updating ChangeLog 2011-03-05 20:05 robert * libmp3lame/: presets.c, quantize_pvt.c: adapting some parameters for vbr-old/cbr/abr, because of the now used psy model 2011-03-05 18:54 robert * libmp3lame/: encoder.c, presets.c, psymodel.c, quantize_pvt.c: now all modes use the same (latest) psy model code cleanup 2011-03-05 14:06 robert * mpglib/layer3.c: fix for a possible out of bounds array access re ID: 3091776 crash at III_dequantize_sample This bug may be fixed now, don't have original problem sample to be sure. 2011-03-02 16:56 rbrito * debian/changelog: debian: Update changelog. 2011-03-02 16:56 rbrito * debian/changelog: Put my SF email or we get warnings from lintian. 2011-03-02 16:54 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.9.1 2011-03-02 16:54 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.9.0 2011-03-02 16:54 rbrito * debian/control: Remove unused Conflicts: and Replaces: fields. They were never part of any stable release and 3rd party sites were, perhaps, faster than us in providing changed packages (when the packaging was not up-to-date). 2011-03-02 16:53 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.8.4 2011-03-02 16:53 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.8.3 2011-03-02 16:52 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.8.2 2011-03-02 16:52 rbrito * debian/control: Verified that the packaging conforms to the Policy version 3.8.1.0 2011-03-02 16:52 rbrito * debian/control: Fix lintian's debhelper-but-no-misc-depends from the binary packages. 2011-03-02 16:51 rbrito * debian/changelog: Update debian/changelog. 2011-03-02 16:50 rbrito * debian/control: debian/control: Change B-D on nasm to allow any i386 platform (no amd64, though). 2011-03-02 16:50 rbrito * debian/control: debian/control: Rewrap the Build-Depends field for legibility. This also buys us some diff-friendliness. 2011-03-02 16:48 rbrito * debian/: changelog, rules: debian: Transition to the debhelper 7 format. This format is easier to manage and other people should find it easy to adapt to downstream necessities. 2011-03-01 00:34 robert * testcase.mp3, libmp3lame/lame.c, libmp3lame/vbrquantize.c: - new VBR: mpeg2.5 at 8 kHz doesn't use some scalefactor bands 2011-02-27 21:08 robert * libmp3lame/lame.c: small update for q_map 2011-02-27 01:52 robert * libmp3lame/: lame.c, presets.c: last patch made manual lowpass setting impossable (for VBR) 2011-02-27 00:52 robert * Makefile.unix, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/version.h: make use of resampling at lower VBR quality levels 2011-02-22 19:00 robert * libmp3lame/: bitstream.c, encoder.c, lame.c, psymodel.c, quantize.c, quantize_pvt.c, version.h: Starting to use newer VBR psy-model for CBR and ABR encoding too bug tracker ID: 3187397 - Strange compression behavior 2011-02-22 17:58 robert * libmp3lame/: bitstream.c, lame.c, presets.c, psymodel.c, quantize_pvt.c, version.c: some code cleanup 2011-02-13 22:54 rbrito * frontend/brhist.c: frontend: remove unused variable and computation from brhist.c 2011-02-13 16:36 robert * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, version.h: make vbr_mt the default vbr mode 2011-02-13 13:50 robert * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/set_get.c: new mono encoding switches: -ml encodes left channel only -mr encodes right channel only 2011-02-12 16:16 robert * frontend/main.h, libmp3lame/presets.c, libmp3lame/vbrquantize.c: small fixes for compiler warnings (vbrquantize.c) bug fix, out of bounds memory write 2011-02-11 20:17 robert * libmp3lame/: lame.c, presets.c, psymodel.c, quantize.c, vbrquantize.c, version.h: - reintroduction of fast encoding mode (-q7 / -f) (vbr_mt / vbr_mtrh) - minor fix for sfb21 encoding (vbr_mt / vbr_mrth) - small tunings 2010-12-08 15:28 robert * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: fixing some compile issues when compiling as C++ code bug tracker ID: 3125235: make -f Makefile.mingw32 fails 2010-12-05 12:25 robert * Dll/BladeMP3EncDLL.c: fixing some compile issues when compiling as C++ code bug tracker ID: 3125235: make -f Makefile.mingw32 fails 2010-12-04 20:43 jaz001 * doc/html/detailed.html: spelling and better description on -b, -F and -t settings 2010-12-04 13:30 robert * libmp3lame/gain_analysis.h: fixing some compile issues with strict compiler settings. bug tracker ID: 3025801: gain_analysis.h needs int constants 2010-12-04 12:55 robert * Dll/BladeMP3EncDLL.c: fixing some compile issues with strict compiler settings. bug tracker ID: 3125235: make -f Makefile.mingw32 fails 2010-12-03 19:46 jaz001 * doc/html/about.html: fixed listening tests URL. 2010-11-21 20:45 jaz001 * doc/html/: detailed.html, usage.html: yet more small detail changes. 2010-11-21 20:31 jaz001 * doc/html/detailed.html: more details about the q switch and the vbr-new/old some formating changes 2010-11-21 20:07 jaz001 * doc/html/: abr.html, cbr.html, detailed.html, usage.html: updates/fixes to the documentation. 2010-10-30 13:21 robert * Makefile.am, Makefile.in, lame_vc8.sln, Dll/LameDll_vc8.vcproj, Dll/Makefile.am, Dll/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, frontend/lame_vc8.vcproj, frontend/mp3x_vc8.vcproj, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/libmp3lame_vc8.vcproj, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/mpglib_vc8.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj: VC8 no more 2010-09-30 20:58 jaz001 * doc/html/: Makefile.am, Makefile.in: fixed the erroneous naming of files. (fixes: 3078255) 2010-08-29 05:45 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): reduce table size by merging escHB[512](short) and escLen[512](char) into escHBL[512](unsigned short). 2010-08-29 05:16 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): move code to update bitstream position out of loop. 2010-08-17 23:39 rbrito * README: Put a notice that Mark Taylor is not the current maintainer, but The LAME team is. 2010-08-17 23:36 rbrito * README: Update the URL to point to the Sourceforge webpage. 2010-08-17 23:35 rbrito * README: Update the date of the README file. 2010-08-17 23:34 rbrito * README: Cosmetic: delete trailing whitespaces. 2010-08-17 23:32 rbrito * README: Remove duplicate copyright entry for Mark Taylor. 2010-08-17 23:32 rbrito * README: Update copyright years of the LAME Project. 2010-07-09 18:59 jaz001 * doc/html/: basic.html, examples.html, id3.html, lame.css, modes.html, node6.html, switchs.html: delete old documentation 2010-07-09 18:58 jaz001 * doc/html/detailed.html: added anchors to the descriptions, so that one can link to them with an URL. Corrected a few errors. 2010-06-11 17:44 jaz001 * doc/html/: Makefile.am, about.html, abr.html, cbr.html, contact.html, contributors.html, detailed.html, index.html, introduction.html, links.html, list.html, ms_stereo.html, usage.html, vbr.html, images/logo.gif, images/valid-css.png, images/valid-xhtml10.png, styles/lame.css: Initial commit of the new documentation. Makefile.in should be regenerated. 2010-06-07 00:18 robert * libmp3lame/: presets.c, psymodel.c: something to try later 2010-06-06 19:20 robert * frontend/rtp.c: fix compile problem on Linux system 2010-06-06 01:04 robert * libmp3lame/: encoder.c, lame.c, lame_global_flags.h, presets.c, psymodel.c, quantize.c, quantize_pvt.c, set_get.c, util.h, version.h: some further tweaking of vbr new 2010-06-01 21:55 robert * libmp3lame/: lame.c, presets.c, quantize.c, quantize_pvt.c, quantize_pvt.h, util.h, version.h: more tuning on vbr_mt 2010-06-01 18:51 robert * libmp3lame/: bitstream.c, lame.c: changing default buffer constraint for vbr_mt 2010-06-01 16:21 robert * libmp3lame/lame.c: fixing some compiler warnings 2010-06-01 15:59 robert * frontend/get_audio.c, frontend/get_audio.h, frontend/lametime.c, frontend/lametime.h, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/version.h: some work on VBR scale tuning, accessible with --vbr-new 2010-05-02 20:29 robert * frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/util.c, libmp3lame/version.h: work-in-progress: VBR scale tuning 2010-04-29 00:29 robert * libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, frontend/parse.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/util.h, libmp3lame/version.h: some work on VBR scale tuning, accessible with --vbr-new 2010-04-15 10:44 robert * libmp3lame/: lame.c, VbrTag.c, util.h: - calculate input transform matrix once on initialization - calculate clip detect even when scaling was set; else one doesn't notice that clipping still might happen. 2010-04-14 09:38 robert * libmp3lame/i386/: Makefile.in (lame3_98), Makefile.in: Bug fix for tracker item ID: 2986823: Error when building Lame with NASM support -still exists 2010-04-11 15:46 robert * Makefile.MSVC, libmp3lame/lame.rc, libmp3lame/set_get.h: adding version/icon resource to VC6 binary builds 2010-04-11 13:07 robert * libmp3lame/lame.c, include/lame.def, include/lame.h: add encoding functions passing double precision pcm values ( +/- 1 fulll scale) 2010-04-09 21:51 robert * doc/html/switchs.html, doc/man/lame.1, frontend/get_audio.c, frontend/main.h, frontend/parse.c: - unicode filenames now working with libsndfile on MS-Windows - presets use the default VBR engine, no need for extra parameter "fast" 2010-04-08 11:07 robert * frontend/get_audio.c, frontend/get_audio.h, frontend/lame_main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, libmp3lame/id3tag.c, libmp3lame/version.h: enabling to read OGG Vorbis files via libsndfile 2010-04-06 11:13 robert * libmp3lame/id3tag.c, frontend/lame_main.c, libmp3lame/lame.c, frontend/get_audio.h, frontend/parse.c, include/lame.def, include/lame.h: - preparing to use ieee float [-1,+1] as internal pcm sample representation in LAME frontend - removing id3v2 picture size limit - fixing id3v2 TXXX frame storage 2010-03-23 11:22 robert * include/lame.h: small typo 2010-03-22 23:12 robert * libmp3lame/: quantize.c, version.h: vbrnew: pad frame to build up bitrservoir 2010-03-22 20:48 robert * ChangeLog (lame3_98): updating Changelog 2010-03-22 20:28 robert * doc/html/: history.html (lame3_98), history.html: updating latest changes 2010-03-22 20:25 robert * configure, configure.in (lame3_98): Update version number in preparation for release. 2010-03-22 20:19 robert * doc/html/: history.html (lame3_98), history.html: updating latest changes 2010-03-22 20:08 robert * dshow/: Mpegac.cpp, Mpegac.h, Property.rc, README (lame3_98): Joseph Flynn's direct show improvements 2010-03-22 19:44 robert * vc_solution/vc9_mpglib.vcproj: adding header file to project 2010-03-22 14:43 robert * mpglib/: README (lame3_98), AUTHORS, README: update licence information/header in decoder files 2010-03-22 14:30 robert * mpglib/common.c (lame3_98), LICENSE, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/dct64_i386.h, mpglib/decode_i386.c, mpglib/decode_i386.h, mpglib/huffman.h, mpglib/interface.c, mpglib/interface.h, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c, mpglib/tabinit.h: update licence information/header in decoder files 2010-03-22 14:17 robert * mpglib/AUTHORS, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/dct64_i386.h, mpglib/decode_i386.c, mpglib/decode_i386.h, mpglib/huffman.h, mpglib/interface.c, mpglib/interface.h, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c, mpglib/tabinit.h, LICENSE (lame3_98): update licence information/header in decoder files 2010-03-22 11:49 robert * vc_solution/vc9_mpglib.vcproj (lame3_98): adding header file to project 2010-03-21 22:22 robert * frontend/parse.c, libmp3lame/set_get.c, mpglib/common.c, mpglib/layer3.c: minor changes 2010-03-21 22:18 robert * libmp3lame/reservoir.c: Bug fix for tracker item ID: 2973877: A problem regarding the new drain code 2010-03-21 12:34 robert * libmp3lame/version.h (lame3_98): Update version number in preparation for release. 2010-03-21 12:28 robert * debian/: Makefile.am, Makefile.in (lame3_98): Bug fix for tracker item ID: 2964898: Missing debian/compat 2010-03-21 12:15 robert * libmp3lame/util.c (lame3_98): Bug fix for tracker item ID 2963080: Missing #ifdef/#endif in util.c ? 2010-03-21 12:11 robert * libmp3lame/reservoir.c (lame3_98): Bug fix for tracker item ID: 2973877: A problem regarding the new drain code 2010-03-15 01:32 robert * frontend/gtkanal.c, vc_solution/vc9_lame.sln, vc_solution/vc9_lame_mp3x.vcproj: it makes no sense, to link mp3x against libmp3lame.dll, because of strong dependencies between them. (pinfo struct) 2010-03-15 01:07 robert * libmp3lame/bitstream.c, libmp3lame/lame.c, frontend/parse.c, include/lame.def, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/util.c: access functions for bitrate and samplerate tables. exporting of global vars doesn't work well with DLLs. 2010-03-14 22:47 robert * frontend/get_audio.c, frontend/lame_main.c, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/timestatus.c, libmp3lame/set_get.h, vc_solution/vc9_lame.sln: some code refactorings 2010-03-14 19:48 robert * frontend/timestatus.c, libmp3lame/lame.rc, vc_solution/vc9_lame_mp3x.vcproj: adding resource file containing version and program icon to MP3x project 2010-03-14 17:23 robert * Makefile.MSVC, Makefile.unix, configure.in, frontend/Makefile.am, frontend/Makefile.in, frontend/brhist.c, frontend/lame_main.c, frontend/timestatus.c, include/Makefile.am, include/libmp3lame.sym, vc_solution/Makefile.am: BRHIST is mandatory Layer1 and Layer2 decoding is mandatory adding libmp3lame.sym file, to use with libtool, declares exported symbols 2010-03-14 16:15 robert * frontend/mp3rtp.c, libmp3lame/set_get.c: fixing some compiler warnings 2010-03-14 15:39 robert * testcase.mp3, frontend/main.c, frontend/timestatus.c, libmp3lame/encoder.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h: trying to get rid of remaining GCC compiler warnings 2010-03-13 21:10 robert * Makefile.MSVC: additional target mp3rtp 2010-03-13 20:45 robert * frontend/Makefile.am, frontend/lame_main.c, frontend/main.c, Makefile.MSVC, Makefile.unix, frontend/Makefile.in, frontend/lame_vc8.vcproj, frontend/mp3rtp.c, frontend/mp3x.c, frontend/mp3x_vc8.vcproj, vc_solution/vc9_lame.sln, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_lame_mp3rtp.vcproj, vc_solution/vc9_lame_mp3x.vcproj: main.c is now entry point for all frontend programs similar to mp3x and mp3rtp, there is now lame_main.c for lame 2010-03-13 01:49 robert * doc/html/history.html: support for WAVE_FORMAT_IEEE_FLOAT 2010-03-13 01:17 robert * frontend/get_audio.c: support for WAVE_FORMAT_IEEE_FLOAT (for reading via libsndfile) 2010-03-12 14:00 robert * frontend/get_audio.c: support for WAVE_FORMAT_IEEE_FLOAT (for reading) 2010-03-11 00:59 robert * frontend/console.c, frontend/get_audio.c, frontend/main.c, frontend/main.h, frontend/mp3rtp.c, frontend/parse.c, frontend/rtp.c, frontend/timestatus.c, include/lame.def, include/lame.h, libmp3lame/id3tag.h: experimental unicode support on Windows OS 2010-03-10 01:41 robert * frontend/: main.c, timestatus.c: Starting with Unicode support for LAME on Windows 2010-03-10 00:43 robert * frontend/timestatus.c: small fix for time status display during encoding 2010-03-10 00:35 robert * frontend/: get_audio.c, main.c, timestatus.c, timestatus.h: display of estimated number of frames should be more accurate now, even when re-encoding mp3->mp3 2010-03-09 00:03 robert * libmp3lame/set_get.c: calculation of totalframes more in line with current enc-delay+padding 2010-03-08 00:17 robert * frontend/get_audio.c, frontend/main.c, frontend/timestatus.c, libmp3lame/bitstream.c, libmp3lame/util.h: - reducing some warnings - lame_get_totalframes still returns wrong estimate when re-encoding 2010-03-07 21:14 robert * frontend/: get_audio.c, get_audio.h, main.c, mp3rtp.c, mp3x.c, timestatus.c: some more code refactoring to clean up encoder/decoder loops 2010-03-06 21:34 robert * doc/html/history.html: Bug fix for tracker item ID: 2962223: Encoder delay and padding values ignored when transcoding 2010-03-06 21:30 robert * frontend/: get_audio.c, main.c: Bug fix for tracker item ID: 2962223: Encoder delay and padding values ignored when transcoding 2010-03-06 02:15 robert * frontend/: get_audio.c, get_audio.h, main.c, parse.c: some code refactorings 2010-03-05 02:01 robert * doc/html/history.html: updating history text 2010-03-04 21:37 robert * frontend/rtp.c: cleanup some pre-processor code 2010-03-04 20:03 robert * frontend/rtp.c: more work on mp3rtp 2010-03-04 19:42 robert * frontend/: mp3rtp.c, rtp.c, rtp.h: more work on mp3rtp should compile with VC9 and GCC now 2010-03-04 16:38 robert * frontend/mp3rtp.c, include/lame.def, frontend/rtp.c, frontend/rtp.h, vc_solution/vc9_lame.sln, vc_solution/vc9_lame_mp3rtp.vcproj: mp3rtp compiles with VC9 now 2010-03-04 09:32 robert * vc_solution/vc9_lame_mp3rtp.vcproj: adding mp3rtp project to VC solution 2010-03-04 09:23 robert * vc_solution/vc9_lame.sln: adding mp3rtp project to VC solution 2010-03-03 00:32 robert * mpglib/: layer3.c, mpglib.h: Eliminated some remaining global variable in layer3 decoder code. 2010-03-02 01:21 robert * frontend/: brhist.h, console.h, get_audio.c, gtkanal.c, lametime.h, main.c, main.h, mp3rtp.c, parse.c, parse.h, portableio.h, timestatus.c, timestatus.h: some code refactoring 2010-02-28 17:22 robert * ChangeLog: updating Changelog 2010-02-28 16:52 robert * libmp3lame/bitstream.c: For free format mp3 above 320 kbps, the maximum allowed bits was limited too far. 2010-02-27 03:57 robert * dshow/: dshow.dsp, dshow.dsw (lame3_98): Fixing line ending problem in VC project files, when checked out via make dist. 2010-02-27 03:18 robert * doc/html/history.html: updating history text 2010-02-27 02:58 robert * ChangeLog (lame3_98): updating Changelog 2010-02-27 02:51 robert * doc/html/history.html (lame3_98): updating history text 2010-02-26 23:23 robert * Dll/: Example_vc6.dsp, LameDll_vc6.dsp (lame3_98): Bug fix for tracker ID: 2688413 lib name problem in VS6 2010-02-26 22:59 robert * dshow/dshow.dsw (lame3_98): seems dshow workspace got messed up some time ago 2010-02-26 22:33 robert * Makefile.am, Makefile.in (lame3_98): add some missing files used by "make dist" to the configure magic 2010-02-26 22:24 robert * libmp3lame/: Makefile.in, Makefile.am (lame3_98): add some missing files used by "make dist" to the configure magic 2010-02-26 03:40 robert * include/Makefile.am, include/Makefile.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/lame.rc (lame3_98): adding some files missing after "make dist" 2010-02-26 03:04 robert * Makefile.in (lame3_98): adding vc_solution path to configure magic 2010-02-26 02:49 robert * configure, mpglib/Makefile.in (lame3_98): adding vc_solution path to configure magic 2010-02-26 01:59 robert * Makefile.am, configure.in (lame3_98): adding vc_solution dir, used for "make dist" 2010-02-26 01:56 robert * vc_solution/: Makefile.am, Makefile.in (lame3_98): initial check in, used by "make dist" 2010-02-26 00:55 robert * libmp3lame/i386/: Makefile.am (lame3_98), Makefile.am: Tracker item ID: 2807676: Error when building Lame with NASM support Patch reported by Bernhard Doebler. 2010-02-25 23:33 robert * testcase.mp3 (lame3_98): updating testcase for 3.98.3 2010-02-24 08:54 rbrito * debian/: changelog, control, copyright, rules (lame3_98): Update the debian packaging for the new release. 2010-02-20 21:19 robert * test/lame_test.cpp, vc_solution/vc9_lame_clients.sln, vc_solution/vc9_lame_test.vcproj: adding some small LAME test project. 2010-02-20 21:08 robert * libmp3lame/: lame.c (lame3_98), lame.c: Bug fix for tracker ID: 2824296 wrong enc_padding value in LAME 3.99a & 3.98.3 (from CVS) 2010-02-20 21:01 robert * libmp3lame/VbrTag.c (lame3_98): Bug fix for tracker ID: 2872590 LameTAG: "Music length" missmatch in Lame3.98 2010-02-20 20:58 robert * libmp3lame/VbrTag.c: Bug fix for tracker ID: 2872590 LameTAG: "Music length" missmatch in Lame3.98 2010-02-19 00:44 robert * libmp3lame/: id3tag.c (lame3_98), id3tag.c: Bug fix for tracker ID: 2887359 Wrong length in ID3v2 tag when num_samples isn't set 2010-02-19 00:30 robert * Dll/: BladeMP3EncDLL.c (lame3_98), BladeMP3EncDLL.c: Bug fix for tracker ID: 2893101 Access Violation in BladeMP3EncDLL if UNICODE was defined. 2010-02-19 00:03 robert * doc/man/: lame.1 (lame3_98), lame.1: Bug fix for tracker ID: 2928684 Error in man page about "fast insane" 2010-02-18 22:42 robert * libmp3lame/reservoir.c (lame3_98): Revisiting the FhG decoder problem (FhG V1.5 build 50, ships with MS Windows): enabling the new drain code seems to solve that issue better, than restricting the buffer size. 2010-02-13 23:21 robert * frontend/brhist.c, frontend/console.h, frontend/get_audio.c, frontend/parse.c, frontend/timestatus.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/lame.c, libmp3lame/reservoir.c, libmp3lame/version.h: Revisiting the FhG decoder problem (FhG V1.5 build 50, ships with MS Windows): enabling the new drain code seems to solve that issue better, than restricting the buffer size. 2010-02-06 23:01 robert * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/reservoir.c, libmp3lame/set_get.c, libmp3lame/util.h: added new switch for control buffer constraint 2009-12-12 15:28 robert * frontend/console.c: increasing size of term_buff array, it might have become too small by now 2009-12-11 23:19 robert * libmp3lame/util.c: small issue,: if-def out hip functions, when not using decode-on-the-fly 2009-12-11 22:44 robert * frontend/parse.c (lame3_98): Tracker ID: 2891879 Because of Windows API change, there was a problem with prority switch. Should work again. 2009-12-11 22:30 robert * frontend/parse.c: Tracker ID: 2891879 Because of Windows API change, there was a problem with prority switch. Should work again. 2009-11-22 22:29 rbrito * debian/rules: Enable the frontend to be dynamically linked to libmp3lame. 2009-11-22 22:09 rbrito * debian/lame.doc-base: Fix correct section of doc-base. 2009-11-22 21:27 rbrito * debian/changelog: Consolidate changelog entries. 2009-11-22 21:18 rbrito * debian/source/format: Part of migration to new format (3.0 quilt) of Debian packages. 2009-09-17 06:42 rbrito * debian/lame.doc-base: Update the section field. 2009-09-17 05:54 rbrito * debian/lame.doc-base: Include Debian's doc-base configuration. 2009-05-16 10:20 rbrito * debian/rules: Revert cleaning of files in the debian/rules file. 2009-05-16 10:19 rbrito * debian/: Makefile.am, rules: Update the list of files in Makefile.am 2009-05-15 23:09 robert * mpglib/: interface.c, layer1.c, layer1.h, layer2.c, layer2.h, layer3.c, layer3.h: trying to handle the case, when audio data exceeds frame size 2009-05-15 23:05 robert * libmp3lame/: bitstream.c, lame.c: starting to demangle bitstream buffer handling from postprocessing features like "clip detect" and "replaygain". 2009-05-10 22:08 jwflynn1 * dshow/Mpegac.h: minor correction 2009-05-10 22:06 jwflynn1 * dshow/Mpegac.cpp: Allocator buffer count on the output pin had been hardcoded to 1. This was changed so that it will now attempt to use the buffer count suggested by the downstream filter or default to 1 if none is specified. 2009-05-02 13:45 rbrito * debian/: lame.files, libmp3lame0-dev.docs, libmp3lame0-dev.files, libmp3lame0.files: Remove obsolete files. We need to fix the auto* files to use the new files. 2009-05-02 13:44 rbrito * debian/: changelog, compat, control, lame.install, libmp3lame-dev.install, libmp3lame0.install, rules: Update Debian/Ubuntu packaging. Add new files. 2009-04-20 21:47 robert * frontend/parse.c, frontend/portableio.c, mpglib/common.c, mpglib/common.h, mpglib/layer1.c, mpglib/layer2.c, vc_solution/vc9_lame_config.vsprops, frontend/console.c, frontend/get_audio.c, frontend/main.c, libmp3lame/fft.c: fixing some more compiler warnings 2009-04-20 05:39 rbrito * debian/: changelog, control, copyright, rules, watch: Updating the Debian packaging and doing some investigation regarding symbols. 2009-04-19 22:17 robert * libmp3lame/id3tag.c, libmp3lame/takehiro.c, mpglib/layer1.c: reducing compiler warnings 2009-04-19 18:10 robert * mpglib/: interface.c, layer2.c: Starting to fix decoding bugs. 2009-04-18 18:33 robert * libmp3lame/lame.rc, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/mpg123.h: Starting to fix decoding bugs. 2009-04-17 22:21 robert * frontend/console.c, frontend/console.h, frontend/get_audio.c, frontend/main.c, frontend/parse.c, frontend/timestatus.c, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/interface.c, mpglib/mpglib.h: commandline option 'quiet' should suppress any message now 2009-04-17 11:24 robert * frontend/get_audio.c, include/lame.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/common.c, mpglib/common.h, mpglib/interface.c, mpglib/layer3.c, mpglib/mpglib.h: replaced fprintf calls by lame reporting function calls. this allows to silence decoder. (it used to spit out error messages to stderr) 2009-04-11 16:04 jwflynn1 * dshow/README: [no log message] 2009-04-11 15:59 jwflynn1 * dshow/Mpegac.cpp: - Added support for the DirectShow IAMStreamConfig Interface to the LAME encoder filter output pin. - Modified the DirectShow filter registration section so that the LAME Encoder filter is correctly registered in the Audio Compressors filter category. This will allow third-party encoding applications using the DirectShow System Device Enumerator Interface to correctly detect the LAME encoder when querying the Audio Compressors filter group. - Modified the filter registration information so that the MP3 audio subtype is correctly reported as being supported on the encoder output pin. This will allow third-party encoding applications using the DirectShow IFilterMapper2 Interface to recognize that the LAME encoder supports MP3 output. - Altered the Filter Merit Value that was being used when the filter was registered so that it is now using the standard DirectShow compressor filter merit value of MERIT_DO_NOT_USE (0x200000). Previously, the filter was being registered using a value of MERIT_SW_COMPRESSOR (0x100000), which was at a lower priority (i.e. worse priority) than MERIT_DO_NOT_USE. This prevented the LAME Encoder filter from being selected for use by some third-party encoding applications. - Added code to calculate the frame length of the audio frames used for the nBlockSize element of the WAVEFORMATEX output structure. Previously this value was simply hard-coded to 1. 2009-04-11 15:51 jwflynn1 * dshow/Mpegac.h: Added support for the DirectShow IAMStreamConfig Interface 2009-04-11 15:47 jwflynn1 * dshow/Property.rc: Updated the embedded "FileVersion" and "ProductVersion" fields 2009-03-31 22:37 robert * libmp3lame/: util.c, util.h (lame3_98), util.c, util.h: fix for tracker item 2723518: resampling in 3.98 and 3.99alpha 2009-03-30 19:48 robert * libmp3lame/lame.c (lame3_98): ensure we padd at least 288 samples 2009-03-30 14:38 robert * libmp3lame/lame.c: ensure we pad with 288 samples at least 2009-03-30 13:42 robert * frontend/: main.c, main.h, parse.c: commandline option "--swap-channel" added, as requested. see item: 1118412 2009-03-29 18:28 robert * libmp3lame/psymodel.c: take away sandpaper safety margin for lower samplerates. It seems samplerates which have convolution bands containing single lines are affected only (at least I don't have any testcase for lower samplerates to justify the safety margin right now) 2009-03-29 17:35 robert * libmp3lame/: lame.c, util.c, util.h: workaround for FFMPEG bug, which uses to call lame_encode_flush more than once in loop 2009-03-29 14:43 robert * libmp3lame/lame.c (lame3_98): workaround for FFMPEG bug, which uses to call lame_encode_flush more than once in loop 2009-03-28 22:09 robert * libmp3lame/lame.c (lame3_98): avoid extra frame at end 2009-03-02 23:27 robert * libmp3lame/VbrTag.c: GetVbrTag only works for Layer3, so ignore it when Layer1 or 2. 2009-02-14 21:59 robert * Makefile.unix: adding CFG=RH_INTEL for Intel C(++) compiler setup 2009-02-13 15:03 robert * libmp3lame/fft.c, libmp3lame/vector/xmm_quantize_sub.c, vc_solution/vc9_libmp3lame.vcproj: fix crash in VC9 Release Build 2009-02-13 03:47 robert * libmp3lame/takehiro.c, vc_solution/arch_sse2.vsprops, libmp3lame/fft.c, libmp3lame/quantize.c: small changes 2009-02-12 14:31 robert * libmp3lame/: quantize.c, takehiro.c, vector/xmm_quantize_sub.c: some tiny changes 2009-02-12 11:35 robert * libmp3lame/fft.c, libmp3lame/vector/lame_intrin.h, libmp3lame/vector/xmm_quantize_sub.c, vc_solution/arch_sse2.vsprops: first try to add fht using SSE intrinsics 2009-02-11 00:22 robert * vc_solution/vc9_lame_config.vsprops: adding configuration for SSE2 target architectures 2009-02-07 11:18 robert * Dll/: Makefile.mingw32 (lame3_98), Makefile.mingw32: applying patch from item tracker: [ 2406420 ] compile lame_enc.dll under cygwin 2009-02-07 00:44 robert * libmp3lame/: id3tag.c, vector/xmm_quantize_sub.c: small changes 2009-02-06 23:27 robert * libmp3lame/id3tag.c: silence some GCC compiler warning 2009-02-06 23:26 robert * libmp3lame/: VbrTag.c, lame.c: bug-fix: low bitrate CBR incorrectly tried to write LAME-Tag; var inconsistency 2009-02-06 23:22 robert * libmp3lame/vector/xmm_quantize_sub.c: - fix compiler warning about strict-aliasing problem - fix possible use of uninitialized vars 2009-02-06 23:20 robert * Makefile.unix: adding work-configuration for SSE2 optimization under SuSE 32bit 2009-02-06 00:21 robert * vc_solution/: arch_nasm.vsprops, arch_sse2.vsprops, arch_x87.vsprops, vc9_lame_lame.vcproj, vc9_lame_mp3x.vcproj, vc9_libmp3lame.vcproj, vc9_libmp3lame_dll.vcproj, vc9_mpglib.vcproj: adding configuration for SSE2 target architectures 2009-02-06 00:16 robert * configMS.h, libmp3lame/vbrquantize.c, vc_solution/vc9_lame.sln, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_lame_mp3x.vcproj, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj, vc_solution/vc9_mpglib.vcproj: adding configuration for SSE2 target architectures 2009-01-18 15:57 robert * frontend/get_audio.c, frontend/gtkanal.c, frontend/lametime.c, frontend/main.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/vector/xmm_quantize_sub.c, mpglib/interface.c, mpglib/mpglib.h: replacing C++ style comments by C style comments 2009-01-18 15:44 robert * libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/psymodel.c, frontend/get_audio.c, frontend/gtkanal.c, frontend/lametime.c, frontend/main.c, include/lame.h, libmp3lame/quantize_pvt.c, libmp3lame/vector/xmm_quantize_sub.c, mpglib/interface.c, mpglib/mpglib.h (lame3_98): replacing C++ style comments by C style comments 2009-01-18 13:59 robert * doc/: html/switchs.html, man/lame.1 (lame3_98), html/switchs.html, man/lame.1: fix for bug tracker item [ 2051870 ] documentation clarifications 2009-01-18 13:10 robert * doc/man/: lame.1 (lame3_98), lame.1: fix for bug tracker item 2423650 2008-12-26 11:58 robert * libmp3lame/: presets.c, psymodel.c: disabling testcode 2008-12-02 03:23 robert * libmp3lame/: presets.c, psymodel.c: testing some low quality tuning (VBR-new only) 2008-11-30 00:20 robert * Makefile.unix, libmp3lame/presets.c, libmp3lame/psymodel.c: testing some different short block switching and change in masking tonal samples (VBR-NEW only) 2008-11-09 14:14 robert * vc_solution/Makefile.in (lame3_98): file Makefile.in was added on branch lame3_98 on 2010-02-26 01:56:52 +0000 2008-11-09 14:13 aleidinger * ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/English.lproj/Makefile.in, Makefile.in, libmp3lame/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, vc_solution/Makefile.in, macosx/Makefile.in: regen 2008-11-09 14:11 aleidinger * config.h.in, aclocal.m4, configure: regen (with autoconf 2.62) 2008-11-09 14:10 aleidinger * libmp3lame/Makefile.am: Add missing files, remove deleted ones. 2008-11-09 14:06 robert * vc_solution/Makefile.am (lame3_98): file Makefile.am was added on branch lame3_98 on 2010-02-26 01:56:52 +0000 2008-11-09 14:06 aleidinger * vc_solution/Makefile.am: Add missing automake Makefile. 2008-11-09 14:05 aleidinger * configure.in: Add possibility to build frontends with dynamic libmp3lame. 2008-11-09 14:00 aleidinger * frontend/Makefile.am: Remove -static in preparation for corresponding configure option. 2008-11-09 13:56 aleidinger * ltmain.sh: Update to version from libtool 1.5.26. 2008-11-09 13:50 aleidinger * Makefile.am, ACM/Makefile.am, ACM/ADbg/Makefile.am, ACM/tinyxml/Makefile.am, Dll/Makefile.am, debian/Makefile.am, dshow/Makefile.am, frontend/Makefile.am, include/Makefile.am, libmp3lame/i386/Makefile.am, mpglib/Makefile.am: Add files which are new, and remove deleted ones. 2008-11-06 07:10 rbrito * doc/html/history.html: Update history file with my changes. 2008-11-06 06:56 rbrito * debian/rules: Actually remove the rpath issue part. 2008-11-06 06:55 rbrito * debian/: changelog, control: Include suggestions of Fabian on the packaging. Clean up the packaging a bit. Update the mainline version package. 2008-11-02 15:26 robert * libmp3lame/: quantize_pvt.c, version.h: start of 3.99 development cycle: - demangling "calc_xmin" 2008-11-01 21:39 robert * ACM/lameACM_vc7.vcproj, ACM/ADbg/ADbg_vc7.vcproj, ACM/tinyxml/tinyxml_vc7.vcproj, dshow/Mpegac.cpp, dshow/REG.CPP, dshow/REG.H, dshow/aboutprp.cpp: - Name clash with our CRegKey class and ATL::CRegKey class solved by putting ours in namespace Lame. 2008-11-01 21:21 robert * vc_solution/: vc9_lame_acm.vcproj, vc9_lame_acm_adbg.vcproj, vc9_lame_acm_tinyxml.vcproj, vc9_lame_dll.vcproj, vc9_lame_dll_example.vcproj, vc9_lame_dshow.vcproj, vc9_lame_lame.vcproj, vc9_lame_mp3x.vcproj, vc9_libmp3lame.vcproj, vc9_libmp3lame_dll.vcproj, vc9_mpglib.vcproj: moving common VS projects settings into own property page 2008-11-01 20:41 robert * ACM/ACM.cpp, ACM/ACMStream.cpp, ACM/AEncodeProperties.cpp, ACM/lameACM.def, dshow/Mpegac.cpp, dshow/aboutprp.cpp, vc_solution/vc9_lame_acm.vcproj, vc_solution/vc9_lame_acm_adbg.vcproj, vc_solution/vc9_lame_acm_tinyxml.vcproj, vc_solution/vc9_lame_config.vsprops, vc_solution/vc9_lame_dll.vcproj, vc_solution/vc9_lame_dll_example.vcproj, vc_solution/vc9_lame_dshow.vcproj, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_lame_mp3x.vcproj, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj, vc_solution/vc9_mpglib.vcproj (lame3_98): moving common VS projects settings into own property page 2008-11-01 13:32 robert * dshow/Mpegac.cpp, dshow/REG.CPP, dshow/REG.H, vc_solution/vc9_lame_acm.vcproj, vc_solution/vc9_lame_acm_adbg.vcproj, vc_solution/vc9_lame_acm_tinyxml.vcproj, vc_solution/vc9_lame_dll.vcproj, vc_solution/vc9_lame_dll_example.vcproj, vc_solution/vc9_lame_dshow.vcproj (lame3_98): - VC6 upgrade property pages removed, not needed - Name clash with our CRegKey class and ATL::CRegKey class solved by putting ours in namespace Lame. 2008-10-23 23:35 robert * mpglib/: README, TODO, common.c, common.h, dct64_i386.c, dct64_i386.h, decode_i386.c, decode_i386.h, huffman.h, interface.c, interface.h, l2tables.h, layer1.c, layer1.h, layer2.c, layer2.h, layer3.c, layer3.h, mpg123.h, mpglib.h, tabinit.c, tabinit.h (lame3_98): exchanging mpglib by libhip from main-branch 2008-10-23 23:26 robert * mpglib/: common.c, common.h, dct64_i386.c, dct64_i386.h, decode_i386.c, decode_i386.h, huffman.h, interface.c, interface.h, l2tables.h, layer1.c, layer1.h, layer2.c, layer2.h, layer3.c, layer3.h, mpg123.h, mpglib.h, tabinit.c, tabinit.h: fixing indentation 2008-10-23 23:17 robert * frontend/brhist.h, frontend/get_audio.c, frontend/get_audio.h, frontend/main.c, frontend/main.h, frontend/portableio.c, frontend/portableio.h, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/dct64_i386.h, mpglib/decode_i386.c, mpglib/decode_i386.h, mpglib/huffman.h, mpglib/interface.c, mpglib/interface.h, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/tabinit.c, mpglib/tabinit.h: removing some tabs preparing for indent 2008-10-21 23:09 robert * mpglib/: TODO, interface.c, layer3.c, mpg123.h, mpglib.h: re-applying some of our changes to decoding lib 2008-10-21 22:35 robert * mpglib/: README, common.c, common.h, dct64_i386.c, dct64_i386.h, decode_i386.c, decode_i386.h, huffman.h, interface.c, interface.h, l2tables.h, layer1.c, layer1.h, layer2.c, layer2.h, layer3.c, layer3.h, mpg123.h, mpglib.h, tabinit.c, tabinit.h: replacing mpglib by libhip 2008-10-21 22:34 robert * include/lame.h: fix small issues with C99 2008-10-21 22:06 robert * include/lame.h (lame3_98): fix small issues with C99 2008-10-12 19:46 robert * libmp3lame/version.h (lame3_98), libmp3lame/lame.rc, libmp3lame/logoe.ico, libmp3lame/version.c, libmp3lame/version.h, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj: Adding resources to EXE and DLL 2008-10-12 19:33 robert * libmp3lame/lame.rc, libmp3lame/logoe.ico, libmp3lame/version.c, libmp3lame/version.h, vc_solution/vc9_lame_lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj (lame3_98): Adding resources to EXE and DLL 2008-10-11 19:12 robert * ChangeLog (lame3_98): updating Changelog 2008-10-11 19:08 robert * frontend/gtkanal.c, libmp3lame/mpglib_interface.c, libmp3lame/util.h (lame3_98): fixing mp3x build 2008-10-11 18:58 robert * frontend/gtkanal.c, libmp3lame/mpglib_interface.c, libmp3lame/util.h: fixing mp3x build 2008-10-11 18:04 robert * doc/html/history.html, frontend/get_audio.c, frontend/gtkanal.c, frontend/parse.c, libmp3lame/bitstream.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/.cvsignore, mpglib/common.c, mpglib/interface.c, mpglib/layer3.c, mpglib/mpg123.h, mpglib/mpglib.h, include/lame.def, include/lame.h, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj (lame3_98), doc/html/history.html, frontend/gtkanal.c, include/lame.def, include/lame.h, libmp3lame/id3tag.c, libmp3lame/mpglib_interface.c, mpglib/layer3.c, mpglib/mpglib.h, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj: Library API change: lame_decode functions are now obsolete but still present, please use hip_decode instead. The reason for this change is: lame_decode functions use a single global variable within the library to store decoder setup, hip_decode functions don't. The encoder now uses hip_decode internally and it is now possible to use clipdetect feature while reencoding mp3 to mp3. 2008-10-07 21:57 robert * doc/html/history.html, frontend/parse.c: - let ignore-tag-errors effect albumart option too - updating history 2008-10-07 20:24 robert * doc/html/history.html, frontend/parse.c, libmp3lame/version.h (lame3_98): - let ignore-tag-errors effect albumart option too - updating history 2008-09-22 20:21 robert * libmp3lame/: takehiro.c, version.h (lame3_98): source merging resultet in bug: loop var was incremented twice now fixed 2008-09-21 15:53 robert * testcase.mp3 (lame3_98): updating testcase.mp3 to current version 2008-09-21 15:51 robert * ChangeLog (lame3_98): updating Changelog of branch lame3_98 2008-09-21 15:29 robert * doc/man/lame.1: fixing Rogerios patch 2008-09-19 07:30 rbrito * debian/: changelog, control, rules (lame3_98): Various improvements to the packaging. Thanks to Fabian. 2008-09-19 07:08 rbrito * doc/man/lame.1 (lame3_98): Remove warnings from nroff while processing the manpage. 2008-09-19 07:02 rbrito * doc/man/lame.1: Fixing warnings generated by nroff. 2008-09-14 15:21 robert * frontend/parse.c: replacing stricmp by local_strcasecmp 2008-09-14 11:54 robert * doc/html/history.html, doc/html/id3.html, doc/man/lame.1, frontend/parse.c, libmp3lame/id3tag.c, USAGE: Fixing some ID3 tagging issues: - some sloppier search for genre names - new switch --pad-id3v2-size which allows some user defined padding 2008-09-14 11:51 robert * doc/html/history.html, doc/html/id3.html, doc/man/lame.1, frontend/parse.c, include/lame.def, include/lame.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, USAGE (lame3_98): Fixing some ID3 tagging issues: - some sloppier search for genre names - new switch --pad-id3v2-size which allows some user defined padding 2008-09-13 21:44 robert * doc/html/id3.html, libmp3lame/id3tag.c (lame3_98): fixing typo 2008-09-12 19:41 robert * libmp3lame/id3tag.c, libmp3lame/id3tag.h, frontend/parse.c, include/lame.def, include/lame.h: new frontend switch "--pad-id3v2-size ": allow id3v2 padding of 0 to 128000 bytes 2008-09-11 00:49 robert * frontend/parse.c: replace common suffixes by MP3/WAV when no output filename was given 2008-09-08 22:46 robert * frontend/main.c, frontend/parse.c, include/lame.h, libmp3lame/mpglib_interface.c: eleminating some compiler warnings 2008-08-31 19:35 robert * libmp3lame/i386/nasm.h (lame3_98): fixing the fix to get it assemble for ELF again 2008-08-31 19:31 robert * include/lame.h, libmp3lame/i386/nasm.h: fixing the fix to get it assembling for ELF again 2008-08-31 17:52 robert * include/lame.h: remove some debugging noise 2008-08-31 16:14 robert * frontend/get_audio.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/util.c, libmp3lame/util.h, frontend/gtkanal.c, frontend/parse.c, include/lame.def, include/lame.h, mpglib/layer3.c, mpglib/mpglib.h: Fix for API problem: lame decoding functionality used one global data structure in libmp3lame for all decoding ativities. This is a big problem with dynamic linking! New API functions added, which use handles to work with. Old API functions are still there, but are deprecated. 2008-08-31 12:26 robert * libmp3lame/i386/: choose_table.nas, fft3dn.nas, fftsse.nas, nasm.h (lame3_98), choose_table.nas, fft3dn.nas, fftsse.nas, nasm.h: fixing none PIC assembling problem 2008-08-27 10:27 rbrito * libmp3lame/i386/: Makefile.am, choose_table.nas, fft3dn.nas, fftsse.nas, nasm.h: Committing the changes from Gentoo and PaX Team to the HEAD. 2008-08-25 12:57 rbrito * debian/changelog, libmp3lame/i386/choose_table.nas, libmp3lame/i386/fft3dn.nas, libmp3lame/i386/fftsse.nas (lame3_98): Fix text relocations and update debian changelog. Thanks to the PaX Team and Gentoo people. 2008-08-25 12:43 rbrito * libmp3lame/i386/nasm.h (lame3_98): Fix to executable stack (thanks to Gentoo people) 2008-08-25 12:38 rbrito * libmp3lame/i386/Makefile.am (lame3_98): Fixes building of asm with libtool 2.2 (thanks to Gentoo people) 2008-08-16 12:48 robert * doc/man/: lame.1 (lame3_98), lame.1: adding MPEG-2.5 bitrate table 2008-08-13 21:01 robert * libmp3lame/tables.h: revert 2008-08-13 20:38 robert * libmp3lame/: tables.c, tables.h: fix compilation via configure/make 2008-08-11 20:55 robert * libmp3lame/: takehiro.c (lame3_98), takehiro.c: loop rewritten; result of discussion with Michael Stoner 2008-08-08 20:34 robert * libmp3lame/takehiro.c: tiny speed-up 2008-08-07 20:55 robert * Makefile.unix, doc/html/switchs.html, doc/man/lame.1, frontend/parse.c, libmp3lame/lame.c: making some switches developer only switches 2008-08-07 14:53 robert * mpglib/: .cvsignore, common.c, dct64_i386.h, huffman.h, interface.c, l2tables.h, layer1.h, mpg123.h, mpglib.h, tabinit.h: sync with HIP development 2008-08-07 14:52 robert * libmp3lame/lame.c: we did init bitstream (Xing header) before final decisions were made 2008-08-06 17:12 robert * frontend/parse.c (lame3_98): add proper file closing 2008-08-06 17:12 robert * doc/html/history.html, frontend/parse.c: fix for tracker item [ 2039648 ] potential memory leak in parse_args() function in parse.c 2008-08-06 17:06 robert * doc/html/history.html, frontend/parse.c (lame3_98): fix for tracker item [ 2039648 ] potential memory leak in parse_args() function in parse.c 2008-08-06 16:14 robert * frontend/parse.c: internal switches are available only when compiled with preprocessor symbol _ALLOW_INTERNAL_OPTIONS defined. 2008-08-06 16:10 robert * USAGE, doc/html/switchs.html, frontend/parse.c, doc/man/lame.1: removing some obsolete switches 2008-08-06 15:57 robert * USAGE (lame3_98): removing some obsolete switches 2008-08-06 15:52 robert * doc/man/lame.1 (lame3_98): removing some obsolete switches 2008-08-06 15:35 robert * frontend/parse.c (lame3_98): removing some obsolete switches 2008-08-06 15:24 robert * doc/html/switchs.html (lame3_98): removing internal switches 2008-08-06 11:55 robert * libmp3lame/presets.c (lame3_98): keeping "sfb21mod" as in 3.98 release 2008-08-05 17:45 robert * doc/html/history.html, frontend/parse.c, libmp3lame/lame.c: fix for bugtracker item [ 2029282 ] Frequency filtering API broken in 3.98 2008-08-05 17:26 robert * doc/html/history.html, frontend/parse.c, libmp3lame/lame.c (lame3_98): bug fix for tracker item [ 2029282 ] Frequency filtering API broken in 3.98 2008-08-05 14:19 robert * doc/html/history.html: updating history 2008-08-05 14:16 robert * HACKING, Makefile.unix, configure.in, debian/changelog, debian/rules, doc/html/history.html, doc/man/lame.1, frontend/mp3rtp.c, frontend/rtp.c, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/gain_analysis.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/util.c, libmp3lame/vbrquantize.c, libmp3lame/version.h, misc/abx.c (lame3_98): bug fixes from main branch 2008-08-05 12:33 robert * libmp3lame/id3tag.c: fix for bug: LAME writes ID3v2 tag when some ID3v1 field length is too short to hold the text, even in case ID3v1 only is specified. 2008-08-05 12:32 robert * libmp3lame/: bitstream.c, util.h, vbrquantize.c: changes after doing some linting 2008-08-04 19:53 robert * libmp3lame/: bitstream.c, VbrTag.c, encoder.c, encoder.h, fft.c, fft.h, gain_analysis.c, gain_analysis.h, id3tag.c, id3tag.h, lame-analysis.h, lame.c, machine.h, mpglib_interface.c, presets.c, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, set_get.c, tables.c, tables.h, takehiro.c, util.c, util.h, vbrquantize.c, vbrquantize.h, VbrTag.h: changes after doing some linting 2008-07-28 17:18 robert * libmp3lame/lame.c, misc/abx.c: fixing swapped parameters on calloc call 2008-07-28 16:57 robert * libmp3lame/psymodel.c: fixing small typo 2008-07-28 16:38 robert * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/machine.h, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: reorganizing the huge lame_internal_flags structure 2008-07-23 14:59 robert * libmp3lame/util.c: removed extra line. tracker item: [ 2022101 ] tiny bug(?) in fill_buffer_resample() 2008-07-23 14:46 robert * libmp3lame/lame.c: fix for tracker item: [ 2022035 ] encoder_padding value and resampling 2008-07-19 13:34 rbrito * HACKING: Fixed HACKING documentation. 2008-07-19 13:09 rbrito * HACKING: Fix documentation for set_get/get_set confusion. 2008-07-19 12:54 rbrito * doc/html/history.html, frontend/mp3rtp.c, frontend/rtp.c: Fixed compilation of mp3rtp and closed bug on sourceforge tracker. 2008-07-18 22:43 robert * libmp3lame/: VbrTag.c, quantize_pvt.h, encoder.c, gain_analysis.c, id3tag.c, psymodel.c, quantize.c, quantize_pvt.c, vbrquantize.c, bitstream.c: - removing some unused variables - fix a possible 'divide by zero' in vbrpsy_mask_add 2008-07-12 15:59 rbrito * Makefile.unix: Tidying up the Makefile.unix file. Possibly more to come. 2008-07-12 14:32 rbrito * debian/changelog: Mention changes to the build system on debian/ubuntu/whatever systems. 2008-07-12 14:28 rbrito * debian/rules: Include changes so that the linker only includes libraries directly needed. 2008-07-12 14:26 rbrito * Makefile.unix: Include a clue for emacs to know that this is a makefile. 2008-07-08 07:14 rbrito * doc/man/lame.1: Small updates to the manpage 2008-07-07 23:50 robert * doc/html/history.html, libmp3lame/presets.c: linear interpolate preset param sf21mod 2008-07-07 10:20 rbrito * Makefile.unix: Fixed typo in one option. 2008-07-07 09:32 rbrito * Makefile.unix: Include flags for compilation for newer machines running Linux. Comment the use of gtk1.2 for Linux at least (don't know about *BSD). 2008-07-07 02:18 rbrito * doc/html/history.html: Many fixes to the HTML file (too numerous to mention here). Now, it validates at w3.org (and let us keep it this way, please). 2008-07-07 00:17 rbrito * misc/abx.c: Finally fix the endianness issue and be able to close the reported bug. 2008-07-07 00:16 rbrito * misc/abx.c: Fix a memory leak (detected by running valgrind). 2008-07-07 00:14 rbrito * misc/abx.c: Remove inactive/commented coded that doesn't seem to be necessary. 2008-07-05 11:51 robert * lame_clients_vc6.dsw, lame_projects_vc6.dsp, lame_vc6.dsw: we don't support VC6 anymore 2008-07-05 07:50 robert * ACM/lameACM_vc6.dsp, ACM/ADbg/ADbg.dsp, ACM/tinyxml/test.dsp, ACM/tinyxml/test.dsw, ACM/tinyxml/tinyxml.dsp, Dll/Example_vc6.dsp, Dll/Example_vc6.dsw, Dll/LameDll_vc6.dsp, dshow/dshow.dsp, dshow/dshow.dsw, frontend/lame_vc6.dsp, frontend/mp3x_vc6.dsp, libmp3lame/libmp3lame_dll_vc6.dsp, libmp3lame/libmp3lame_vc6.dsp, mpglib/mpglib_vc6.dsp: we don't support VC6 anymore 2008-07-05 07:38 robert * libmp3lame/version.h, configure.in: Main branch at 3.99 alpha 2008-07-03 22:04 robert * libmp3lame/version.h (lame3_98): preparing release 2008-06-30 23:31 robert * configMS.h, dshow/Property.rc, dshow/aboutprp.cpp: updating LAME version property 2008-06-29 21:40 rbrito * configure, configure.in, debian/changelog: New updated options for compiling with expopt (to be cleaned up latter). Fixes to the Debian packaging for the pending release. 2008-06-29 03:25 rbrito * doc/html/history.html: Fixed my name on an older entry of the history. 2008-06-28 22:36 robert * doc/html/: Makefile.am, Makefile.in: removing presets.html, it is not in repository anymore 2008-06-27 20:47 robert * Makefile.unix, testcase.mp3: updating testcase for 3.98 stable release 2008-06-26 21:26 robert * vc_solution/: vc9_lame.sln, vc9_lame_acm.vcproj, vc9_lame_acm_adbg.vcproj, vc9_lame_acm_tinyxml.vcproj, vc9_lame_dll.vcproj, vc9_lame_dll_example.vcproj, vc9_lame_dshow.vcproj, vc9_lame_lame.vcproj, vc9_lame_mp3x.vcproj, vc9_libmp3lame.vcproj, vc9_libmp3lame_dll.vcproj, vc9_mpglib.vcproj: removing blanks from configuration and project names (because of NASM rule) 2008-06-26 10:26 bouvigne * doc/html/index.html, doc/html/presets.html, doc/man/lame.1, frontend/parse.c: simplified --preset docs 2008-06-26 10:09 bouvigne * doc/html/: history.html, index.html: updated the html docs for 3.98 2008-06-26 08:57 bouvigne * libmp3lame/psymodel.c: revert my calc_energy changes 2008-06-25 21:59 robert * mpglib/: layer2.c, layer3.c, mpg123.h: cosmetic changes, some more compiler (gcc) warnings eliminated 2008-06-25 12:45 aleidinger * ChangeLog: recent changes 2008-06-25 12:43 aleidinger * doc/html/history.html: a little bit of history 2008-06-25 12:40 aleidinger * configure: regen 2008-06-25 12:37 aleidinger * configure.in: fix --diable-cpml switch 2008-06-25 12:17 aleidinger * mpglib/Makefile.in, Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, macosx/Makefile.in, macosx/English.lproj/Makefile.in, macosx/LAME.xcodeproj/Makefile.in, misc/Makefile.in: regen (math lib change) 2008-06-25 12:13 aleidinger * configure.in: export the math lib, allow to disable the use of the alpha optimized math lib 2008-06-25 12:12 aleidinger * libmp3lame/Makefile.am: add the math lib explicitely to the build of the lib 2008-06-25 08:20 robert * frontend/parse.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/interface.h, mpglib/layer1.c, mpglib/layer2.c, mpglib/mpglib.h: Some cosmetic changes, now the vc9 compiles the workspace vc9_lame without any warning 2008-06-24 19:07 rbrito * doc/html/history.html: Add some modifications of mine to the history 2008-06-24 18:39 rbrito * debian/: changelog, control, rules: Updates to the Debian packaging. 2008-06-24 17:06 rbrito * misc/abx.c: Quick and dirty fix for some memory leak (detected via Valgrind). 2008-06-22 18:39 robert * doc/html/: history.html, contributors.html: tracker item [ lame-Patches-1990643 ] DShow direct file writer output patch by Anton Sergunov (setosha) 2008-06-22 18:31 robert * dshow/: Encoder.cpp, Encoder.h, Mpegac.cpp, Mpegac.h: tracker item [ lame-Patches-1990643 ] DShow direct file writer output patch by Anton Sergunov (setosha) 2008-06-22 18:29 robert * vc_solution/: vc9_lame_acm.vcproj, vc9_lame_acm_adbg.vcproj, vc9_lame_acm_tinyxml.vcproj, vc9_lame_dll_example.vcproj, vc9_lame_dshow.vcproj: linking against multithreaded (debug) DLL 2008-06-17 20:57 robert * frontend/parse.c, libmp3lame/presets.c: bug fix: preset INSANE wasn't a CBR preset anymore, but preset help said it should be 2008-06-10 19:24 rbrito * misc/abx.c: Fixes for consistency (lack of PATH on some commands) 2008-06-10 19:14 rbrito * misc/abx.c: Removing spurious whitespaces at the end of lines. 2008-06-10 16:10 rbrito * misc/abx.c: Corrected the abx.c file to work on Linux x86-64 (it should work on ia32 too). I think that I can remove latter the commented lines. They were prejudicial to playing the file on Linux (i.e., a 1min file was played in less than 5s, which is not exactly something that useful for doing an abx test). 2008-05-24 08:40 aleidinger * ChangeLog: Add nearly a year of history. 2008-05-24 08:37 aleidinger * Makefile.in, configure: regen 2008-05-24 08:31 aleidinger * macosx/: Makefile.in, English.lproj/Makefile.in, LAME.xcodeproj/Makefile.in: regen 2008-05-24 08:28 aleidinger * configure.in, macosx/Makefile.am, macosx/English.lproj/Makefile.am, macosx/LAME.xcodeproj/Makefile.am: Add some more macosx stuff 2008-05-22 17:32 audiofileeng * macosx/: English.lproj/InfoPlist.strings, LAME.xcodeproj/project.pbxproj: adding files in subdirectories in macosx 2008-05-22 06:26 aleidinger * Makefile.am, configure.in, macosx/Makefile.am: add the new macosx directory 2008-05-21 03:05 audiofileeng * macosx/: Info.plist, LAME_Prefix.pch: added XCode framework project for Mac OS X 2008-05-19 07:41 bouvigne * libmp3lame/: psymodel.c, util.h: faster calc_energy: don't loop if there is a single line within the band 2008-05-18 17:49 bouvigne * libmp3lame/psymodel.c: faster calc_energy: dont' loop if there is a single line within the band 2008-05-14 07:43 rbrito * debian/watch: New file for detecting new versions of the package. 2008-05-14 07:42 rbrito * debian/: changelog, control, copyright, lame.docs, libmp3lame0-dev.docs, libmp3lame0-dev.files, rules: Updates to the Debian packaging. 2008-04-28 20:32 robert * frontend/get_audio.c: fixing LIBSNDFILE compile problem found by Rogério Brito 2008-04-23 01:50 robert * frontend/main.c, frontend/parse.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/machine.h, libmp3lame/psymodel.c: fix for bug-tracker item:[ 1948101 ] Memory not freed (lame-3.97, lame-3.98b8) plus, we didn't call lame_close in decode-only case 2008-04-22 23:01 robert * libmp3lame/machine.h, libmp3lame/newmdct.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, mpglib/interface.c, mpglib/layer1.c: fixing a problem if you are using --fast-math compiler switch 2008-04-13 22:03 robert * doc/html/history.html, libmp3lame/version.h: updating history, we are now at 3.98 beta 8 2008-04-13 21:27 robert * frontend/get_audio.c, frontend/main.h, frontend/parse.c, libmp3lame/psymodel.c: found some problem in Naoki's additive masking code and fixed it for VBR_NEW 2008-04-13 13:45 robert * testcase.mp3, frontend/get_audio.c: changed compile-time test for machine byte order into run-time test, this should solve issues PPC users seem to have 2008-04-13 02:52 robert * libmp3lame/psymodel.c: some SNR testcode to try with -Z3 2008-04-12 18:18 robert * frontend/parse.c, frontend/timestatus.c, include/lame.def, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/gain_analysis.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c: extended VBR quality scale: 0, ..., 9.999 as floating point value 2008-04-06 15:07 robert * doc/html/history.html, frontend/main.c: updating history.html 2008-04-06 02:38 robert * libmp3lame/lame_global_flags.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/version.h, mpglib/layer3.c: some simpler spreading function for VBR NEW 2008-04-05 17:38 robert * Makefile.unix, frontend/brhist.c, frontend/brhist.h, frontend/main.c, frontend/parse.c, frontend/timestatus.c: removing "#ifdef/#endif" from code bocks, which were always compiled in 2008-04-05 17:13 robert * lame.spec.in, debian/copyright, libmp3lame/id3tag.c, misc/abx.c, misc/lameGUI.html: changing some links from "www.mp3dev.org/mp3" to "www.mp3dev.org" and from "www.sulaco.org/mp3" to "www.mp3dev.org" 2008-03-20 22:28 robert * include/lame.h: keep 'lame_mp3_tags_fid' alive at least for next stable release 2008-03-12 11:23 robert * libmp3lame/psymodel.c, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj, vc_solution/vc9_mpglib.vcproj: bug fix: stack corruption in vbrpsy_compute_masking_s 2008-03-11 21:57 robert * libmp3lame/: set_get.c, vbrquantize.c: fixing some more compiler warnings 2008-03-11 21:17 robert * libmp3lame/VbrTag.c, libmp3lame/fft.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/quantize.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, vc_solution/vc9_libmp3lame.vcproj, vc_solution/vc9_libmp3lame_dll.vcproj: fixing some more compiler warnings 2008-03-11 00:56 robert * libmp3lame/set_get.c: fixing some more compiler warnings 2008-03-11 00:21 robert * vc_solution/vc9_libmp3lame.vcproj: update for nasm file config 2008-03-10 23:47 robert * libmp3lame/: bitstream.c, encoder.c, gain_analysis.c, id3tag.c, lame.c, machine.h, mpglib_interface.c, newmdct.c, psymodel.c, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, set_get.c, util.h, vbrquantize.c, vbrquantize.h: fixing some compiler warnings 2008-03-09 22:37 robert * frontend/parse.c: for now, keep old ID3 tag switches passing raw character encoded strings some experimental switches for Linux systems: (ID3v1/ID3v2) --lTtitle --lArtist --lAlbum --lGenre --lComment --lFieldvalue (ID3v2) --uTitle --uArtist --uAlbum --uGenre --uComment 2008-03-09 22:29 robert * include/lame.h: under Linux we need some C-library includes here (why not on Win32?) 2008-03-09 19:31 robert * libmp3lame/: takehiro.c, vbrquantize.c: fixing some compiler warnings about: - integer constant overflow - signed/unsigned mismatch 2008-03-09 17:13 robert * Dll/BladeMP3EncDLL.c, dshow/aboutprp.cpp, frontend/brhist.c, frontend/mp3x.c, frontend/parse.c, include/lame.h: removing unneccessary stdlib includes from lame.h 2008-03-09 16:33 robert * vc_solution/: vc9_lame_lame.vcproj, vc9_libmp3lame.vcproj, vc9_libmp3lame_dll.vcproj, vc9_nasm.rules: adding NASM build rule 2008-02-23 20:58 robert * frontend/parse.c, libmp3lame/id3tag.c: adding ICONV character conversion (NOT for WIN32), because ID3 tags have to be in ISO Latin-1 or UCS-2 text encoding. Previously we wrote bytes into ID3 tags, as we got them from the commandline, in locale text encoding. There are some experimental switches to store UCS-2 encoded ID3 tags: --uArtist, --uAlbum, --uTitle, --uGenre and --uComment 2008-02-23 12:58 robert * libmp3lame/: id3tag.c, id3tag.h, util.c: locate and replace {TXXX,COMM} field if LANGUAGE and DESCRIPTION match new one 2008-02-22 02:48 robert * libmp3lame/: id3tag.c, id3tag.h, util.c: preparing unicode id3v2 tags 2008-02-22 02:38 robert * libmp3lame/: lame.c, vbrquantize.c, version.c: fixing some compiler warnings 2008-02-20 03:04 robert * vc_solution/vc9_lame_dll_example.vcproj: VC9 Solution files 2008-02-20 02:40 robert * vc_solution/vc9_lame_dshow.vcproj: VC9 Solution files 2008-02-20 01:53 robert * vc_solution/vc9_lame_acm.vcproj: VC9 Solution files 2008-02-20 00:38 robert * vc_solution/: .cvsignore, vc9_lame.sln, vc9_lame_acm.vcproj, vc9_lame_acm_adbg.vcproj, vc9_lame_acm_tinyxml.vcproj, vc9_lame_clients.sln, vc9_lame_dll.vcproj, vc9_lame_dll_example.vcproj, vc9_lame_dshow.vcproj, vc9_lame_lame.vcproj, vc9_lame_mp3x.vcproj, vc9_libmp3lame.vcproj, vc9_libmp3lame_dll.vcproj, vc9_mpglib.vcproj: VC9 Solution files 2008-02-15 01:27 robert * Dll/BladeMP3EncDLL.c: use new API function for LAME-tag frame update 2008-02-15 00:23 robert * libmp3lame/VbrTag.c: let the dummy Xing frame have a valid mp3 sync word 2008-02-10 18:38 robert * libmp3lame/id3tag.c, include/lame.def, include/lame.h: fixes: id3tag.c - some block scope missing lame.h, lame.def: - some exported function was missing 2008-02-10 17:35 robert * frontend/main.c, include/lame.def, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/version.h: Adding some new API functions - to en-/dis- able automatic ID3 tag writing into audio stream (default on): void CDECL lame_set_write_id3tag_automatic(lame_global_flags * gfp, int); int CDECL lame_get_write_id3tag_automatic(lame_global_flags const* gfp); - to query ID3 tags into a buffer: size_t CDECL lame_get_id3v1_tag( lame_global_flags * gfp, unsigned char* buffer, size_t size); size_t CDECL lame_get_id3v2_tag( lame_global_flags * gfp, unsigned char* buffer, size_t size); - to query the final Xing/LAME tag frame into a buffer: size_t CDECL lame_get_lametag_frame( const lame_global_flags *, unsigned char* buffer, size_t size); Those new functions allow to encode a complete input file into RAM first, before writing it into a file/socket/whatever... 2008-02-03 14:28 robert * libmp3lame/psymodel.c: VBRPSY: don't use ATH in 'additive masking' function 2008-01-09 20:46 rbrito * debian/: changelog, compat, control, rules: Updated the Debian packaging. 2008-01-06 16:46 robert * libmp3lame/: lame.c, quantize.c: VBR-NEW can be mixed with free format now. The result will be a free format stream using VBR-NEW quantization routine. note: following free format bitrates are maximum bitrates which make sense: samplerate: 8 11 12 16 22 24 32 44 48 kbps 109 151 164 218 301 327 435 600 640(652) Using the maximum bitrate one may look and see how the VBR code behaves when the bitrate pressure is lowered to the theoretical minimum, like: lame -V0 -b600 --freeformat x.wav x.mp3 2008-01-03 00:03 aleidinger * configure: regenerate with autoconf 2.61 2008-01-03 00:02 aleidinger * Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regenerate with automake 1.10 2008-01-03 00:01 aleidinger * aclocal.m4: update with stuff from more recent autotools 2008-01-03 00:00 aleidinger * ltmain.sh: update to a libtool 1.5.24 version 2008-01-02 23:58 aleidinger * configure.in: After installing sndfile: - fix SNDFILE_xxx Give a better failure description for some errors (sizeof check). If there are intXX_t but no uintXX_t, use the intXX_t with "unsigned" instead of trying to find the right K&R-C integral type. Use macho as the format type for NASM on OSX, but disable the nasm use by default there, as there seems to be a problem with the nasm code on OSX. 2008-01-02 22:00 aleidinger * configure.in: - If SNDFILE_xxx are defined and the fileio is sndfile, then assume the user is knowing what he does (some systems don't have pkg-config but have sndfile). - Fix the problem case where SNDFILE_CFLAGS has spaces at the beginning. 2008-01-02 20:30 robert * libmp3lame/id3tag.c: fix for tracker item: [ 1861450 ] TLEN tag fixed on encode from stdin with ID3v2 tags 2007-12-26 22:04 robert * ACM/ACMStream.cpp, Dll/BladeMP3EncDLL.c: removing obsolete function calls 2007-12-26 13:12 robert * Makefile.MSVC, frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/util.h: removing dead code 2007-12-25 16:15 robert * libmp3lame/vbrquantize.c: some small code simplification 2007-12-25 00:16 robert * libmp3lame/: presets.c, psymodel.c: clean code from obsolete branches 2007-12-24 16:00 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: - removing legacy ISO quantization code - vbr-new now has only two -qx settings left: q0 and q5 - vbr-new can't use legacy GPSYCHO anymore TODO: + remove legacy GPSYCHO code, as we don't use it anymore + remove superflouos psy-model selection switches + remove superflouos psy-model configuration switches like --cwlimit 2007-12-20 14:44 robert * libmp3lame/vbrquantize.c: in rare cases, where one channel is completely zero, some illegal "scalefactor selection info" might be used in VBR-NEW. fixed 2007-12-17 20:54 robert * doc/html/history.html: fixing typo 2007-12-17 00:08 robert * libmp3lame/vbrquantize.c: fixing typo 2007-12-16 17:56 robert * doc/html/history.html, libmp3lame/psymodel.c: disabling the use of the "interchannel masking feature" in dual-channel case 2007-12-16 17:18 robert * libmp3lame/: psymodel.c, vbrquantize.c: VBR-NEW: -quantization: another "out of bits" strategy -psymodel: dropped "inter channel effect", because the effect doesn't save many bits, but raises the chance of annoying artefacts a lot. 2007-12-14 02:52 robert * libmp3lame/psymodel.c: found new test sample SNAPS which needs some more short blocks 2007-12-09 22:47 robert * libmp3lame/: encoder.c, lame.c, presets.c, psymodel.c, psymodel.h, quantize_pvt.c, util.h: merger from test branch: - features a new psy model, a modification from NSPSY VBR NEW uses the new psy model, unless you call lame with --nspsytune, or the developer only switch --psymodel x, with x in {1,2} features of the new psy model: - speed: it does determine the resulting block type before doing the fft and other psy stuff and will calc long/short blocks only as necessary - interchannel masking effect: it will be calculated after the mid-side fix and it's working on convolution bands, instead of scalefactor bands - mid-side fix: calculated on convolution bands, instead of sf bands - mask_adjust feature: it's now used earlier in the convolution calculation 2007-12-09 17:06 robert * libmp3lame/psymodel.c (rh0710_test): some fixes, ie. the short block pre-echo control was applied twice 2007-12-08 23:27 robert * libmp3lame/: encoder.c, lame.c, presets.c, psymodel.c, psymodel.h, quantize_pvt.c, util.h (rh0710_test): modified psy model for vbr-new 2007-11-26 00:14 robert * Makefile.unix, frontend/get_audio.c, frontend/parse.c, libmp3lame/psymodel.c, libmp3lame/vbrquantize.c: psymodel.c: - bug fix in init_numlines: it returned sometimes a too large npart_[sl] - fixing some more compiler warnings get_audio.c: - some fix in error-report in case of unsupported input format 2007-11-25 23:38 robert * Makefile.unix, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.h, libmp3lame/util.h, libmp3lame/vbrquantize.c (rh0710_test): re-tuning 2007-11-21 21:30 robert * libmp3lame/: quantize.c, quantize_pvt.h: bug fix for bin_search_StepSize. It returned illegal values, leading to assertion failures in fast encoding mode, which only adjusts global step size. 2007-11-12 10:46 robert * libmp3lame/: psymodel.c, util.h, vbrquantize.c (rh0710_test): - inter channel masking now on convolution bands - mid/side fix now on convolution bands 2007-11-08 01:13 robert * Makefile.unix, frontend/parse.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c (rh0710_test): moving masking_lower adjustment into psymodel.c (for vbr-new) 2007-11-03 14:04 robert * frontend/get_audio.c, libmp3lame/presets.c, libmp3lame/psymodel.c (rh0710_test): limiting the sandpaper-noise hack to the minval range (ca. 1.2 kHz) 2007-11-01 20:28 robert * doc/man/lame.1, frontend/get_audio.c, frontend/parse.c (rh0710_test): adding main branch fixes 2007-11-01 19:52 robert * frontend/get_audio.c: enabling --signed / --unsigned switches for 8 bit raw pcm input data 2007-11-01 19:25 robert * frontend/: get_audio.c, parse.c: [ 1823881 ] lame 3.97 produces complete garbage now invalid WAV/AIFF files are rejected, instead of trying to encode them as raw pcm files. 2007-11-01 19:23 robert * doc/man/lame.1: [ 1158193 ] Man page doesn't tell about stereo format in raw [ 1158253 ] Data format is not described in the manpage added some info to manpage 2007-11-01 19:16 robert * libmp3lame/lame.c: bitrate_index may have been uninitialized under some rare circumstances 2007-10-25 01:59 robert * libmp3lame/lame.c (rh0710_test): fixing some bad initialed value gfc->bitrate_index 2007-10-24 02:04 robert * libmp3lame/psymodel.c: back to the roots. Maybe I'll branch from here 2007-10-23 23:23 robert * libmp3lame/vbrquantize.c: turn of scalefac scale feature 2007-10-23 02:46 robert * libmp3lame/psymodel.c: yeah, ok it's C and not C++ open block scope for local variable 2007-10-23 02:31 robert * libmp3lame/: psymodel.c, vbrquantize.c: dropping Naoki's idea of "simultaneous masking addition" for the newer VBR code for now 2007-10-22 12:00 robert * libmp3lame/: presets.c, psymodel.c: re-establishing previous mask adjustments 2007-10-21 00:45 robert * libmp3lame/: lame.c, presets.c, psymodel.c, quantize.c, version.h: recalibration of VBR new's compression level settings, because of recent bug fixes 2007-10-19 00:10 robert * Makefile.unix: moving GTK config script to MP3x target compilation, it's not needed outside MP3x 2007-10-18 02:54 robert * frontend/get_audio.c: seems, VC compiler doesn't like redundant semicolon, fixed 2007-10-18 02:09 robert * libmp3lame/: machine.h, psymodel.c, quantize.c, set_get.c: PSY: the newer vbr code uses tonalality estimation from long blocks for short blocks 2007-10-16 01:07 robert * doc/html/history.html, frontend/get_audio.c: Fix for bugtracker item: [ 1813496 ] AIFF parsing bug 2007-10-14 20:18 robert * frontend/get_audio.c, libmp3lame/id3tag.h, libmp3lame/util.c: some more compiler and compiler-warning fixes 2007-10-14 19:54 robert * frontend/get_audio.c, frontend/get_audio.h, frontend/mp3x.c, frontend/parse.c, frontend/portableio.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vector/xmm_quantize_sub.c: eliminating some of the several hundred compiler warnings 2007-10-14 14:16 robert * doc/html/history.html: updating history to latest changes: - bug fix scalefactor selection in vbr new code - feature added: WAVE_FORMAT_EXTENSIBLE 2007-10-14 13:33 robert * frontend/get_audio.c: feature request [ 1811483 ] WAVE_FORMAT_EXTENSIBLE support We still support PCM wave files only with our little wave reader, it is just that we now accept them when written in wave format extensible. 2007-10-13 20:34 robert * libmp3lame/vbrquantize.c: Bug-fix: the quantization-find-routine could under some circumstances return some way too large quantization step size. For example, the song Piku from The Chemical Brothers had almost 550 scalefactors wrong. For most songs this fix makes no difference. 2007-10-08 20:59 robert * frontend/brhist.c: replaced variable 'lines' by 'lines_used', because term.h has some macro definition for 'lines'. 2007-09-29 19:17 robert * libmp3lame/vbrquantize.c: - Removing dead code. - Avoiding unnecessary search for quantization step sizes. This speeds-up lower quality encodings. If energy is below masking threshold, the resulting step size will be at 255. So no need to search what we already know. 2007-08-29 13:44 aleidinger * configure: regen 2007-08-29 13:43 aleidinger * configure.in: Don't change the include/library path, if there's no corresponding soundfile path set. This is supposed to fix the compile problem with soundfile Rogério sees on Debian. 2007-08-20 21:54 robert * Makefile.MSVC: removing duplicate target_dir references 2007-08-12 18:30 robert * Makefile.MSVC: let targets link against multi threaded C-library 2007-08-12 00:07 robert * doc/html/history.html, libmp3lame/vbrquantize.c, libmp3lame/version.h: small speedup in VBR NEW we are now at 3.98 beta 5, a release candidate for 3.98 stable? 2007-08-11 23:06 robert * testcase.mp3: updating "testcase.mp3" for LAME 3.98 beta 5 2007-08-11 21:44 robert * libmp3lame/psymodel.c: Short block masking: the CBR/ABR code seems to rely on the old masking definition. The VBR NEW code on the other hand needs the lowered masking. 2007-07-30 06:51 aleidinger * ChangeLog: Add the changelog for the last ~10 months. 2007-07-30 06:39 aleidinger * configure: regen with autoconf 2.61 2007-07-30 06:37 aleidinger * configure.in: oops, previous fix for the gcc version pattern matching was wrong... 2007-07-30 06:30 aleidinger * configure.in: - fix the pattern matching for the gcc version check - improve the optimization stuff for gcc 4.x 2007-07-30 06:28 aleidinger * config.h.in: regen with autoconf 2.61 2007-07-30 06:28 aleidinger * Makefile.in, aclocal.m4, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, libmp3lame/vector/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen with automake 1.10 2007-07-29 22:46 robert * doc/html/history.html: adding latest bug fixes to history 2007-07-29 22:07 robert * ACM/ADbg/ADbg.dsp, frontend/lame_vc6.dsp, dshow/dshow.dsp, include/lame.def, lame_vc6.dsw, ACM/lameACM_vc6.dsp, Dll/LameDll_vc6.dsp, ACM/tinyxml/tinyxml.dsp, frontend/mp3x_vc6.dsp, libmp3lame/libmp3lame_dll_vc6.dsp, libmp3lame/libmp3lame_vc6.dsp, mpglib/mpglib_vc6.dsp: updating VC6 project files from MSDN: DLLs should be linking against multi-threaded MS VC rountime library 2007-07-29 16:02 robert * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Fixing a possible resource leak 2007-07-28 12:48 aleidinger * configure: regen (new LAME version) 2007-07-28 00:41 robert * frontend/get_audio.c: task tracker item [ 1445175 ] Input being stdin fails in Windows on WAV files and item [ 1576370 ] Fix for piping in a non PCM file via stdin under Windows The workaround tests the actual file descriptor being a pipe or not. In case being a pipe, the number of bytes to skip are simply read. 2007-07-27 08:49 bouvigne * README: 3.98 2007-07-24 17:46 bouvigne * frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.c, frontend/gpkplotting.h, frontend/gtkanal.c, frontend/gtkanal.h, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.h, libmp3lame/id3tag.c, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/vector/lame_intrin.h, libmp3lame/vector/xmm_quantize_sub.c: Library GPL -> Lesser GPL 2007-07-24 15:26 robert * frontend/: get_audio.c, parse.c: bug item [ 1160757 ] --big-endian and --little-endian don't work with -m s -a and item [ 1160741 ] --big-endian and --little-endian are swapped the --big-endian/--little-endian switches do now work with our minimal wave and pcm reader too. The problems reported in the above bug tracker items should be solved now 2007-07-22 18:49 robert * libmp3lame/lame.c: bug fix: [ 1746336 ] Incorrect Bitrate with ABR und --resample, LAME 3.98b4 There was a typo in patch Revision 1.294 "restrict mpeg 2.5 to 64kbps" which set the average bitrate up to the maximum allowed bitrate. 2007-07-20 23:23 robert * libmp3lame/bitstream.c: fixing task tracker item: [ 1755981 ] Percent signs in print format not escaped 2007-07-16 20:06 bouvigne * include/lame.h: gpl -> lgpl (we forgot about it a long time ago) 2007-07-10 21:05 robert * dshow/Property.rc: updating version info 2007-07-01 20:05 robert * mpglib/: common.c, common.h, interface.c, layer1.c, layer2.c, layer2.h, mpg123.h: we will always use Layer1 and 2 decoding 2007-07-01 16:17 robert * doc/html/history.html: word wrapping fixed 2007-07-01 16:16 robert * doc/html/history.html: adding latest changes for Task tracker item [ 1719593 ] and [ 1742623 ] 2007-07-01 14:39 robert * frontend/: get_audio.c, get_audio.h, gtkanal.c, main.c, parse.c: trying to fix Bugs item #1742623 2007-06-30 17:14 robert * USAGE, frontend/parse.c, include/lame.h, libmp3lame/id3tag.c: bug fix: [ 1719593 ] Track numbers > 255 not allowed even with --id3v2-only 2007-06-27 21:23 robert * configMS.h, configure.in: changing version number 3.97 to 3.98 2007-06-27 21:22 robert * include/lame.def: adding newly id3tag functions to DLL export definition 2007-06-26 01:33 robert * libmp3lame/VbrTag.c: I missed the swapped arguments in the patch by Jonathan Stott, now fixed. 2007-06-26 00:57 robert * doc/html/contributors.html, doc/html/history.html, libmp3lame/VbrTag.c, libmp3lame/lame.c: Patch by Jonathan Stott: Bug tracker items: [ 1590693 ] ID3v2 tag not writing, [ 1636267 ] ID3v2 tags overwritten If the output file is opened 'write-only', then LAME can't update the LAME tag. In this case LAME silently overwrote the first bytes of the file and an optional ID3v2 tag disappeared. Now an error message will be printed and no data is written in this case. 2007-06-23 18:43 robert * libmp3lame/: id3tag.c, util.c, util.h: fixing another possible memory leak 2007-06-23 17:39 robert * frontend/main.c, frontend/parse.c, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/util.c, libmp3lame/version.h: Some simplifications on ID3 tag usage: - specifying an unlisted ID3v1 genre does not count as an error anymore, it is mapped to "Other" and passed as-is to an ID3v2 genre tag - an ID3 track argument is passed directly to an ID3v2 TRCK tag, allowing for example "002/012" 2007-06-23 15:16 robert * libmp3lame/: id3tag.c, util.c: Now ID3 tag are local copies of given parameters. This allows to pass strings located on the program stack and you don't have to think about the lifetime of your strings you pass as arguments. 2007-06-23 13:27 robert * libmp3lame/util.c: Bug fix: Nyaochi's "ID3v2 extension" patches introduced some memory leaks 2007-06-04 22:31 robert * doc/html/history.html: ups: moved history entry "TLEN bug" up into correct list 2007-06-04 22:25 robert * doc/html/history.html: added: bugfix TLEN computation 2007-06-04 22:04 robert * libmp3lame/id3tag.c: bug fix: [ 1730875 ] TLEN calculation wrong fixing the calculation of "playlength in ms" written into the ID3v2 tag TLEN 2007-05-25 03:38 robert * libmp3lame/vbrquantize.c: VBR_NEW: more tuned 'out of bits' strategy 2007-05-24 13:26 bouvigne * doc/html/contributors.html, doc/html/history.html, doc/html/id3.html, doc/man/lame.1, frontend/parse.c: support for total tracks count in the frontend (id3 tags) 2007-05-24 13:10 bouvigne * libmp3lame/id3tag.c: adding a total track count should add an id3 V2 tag 2007-05-24 12:58 bouvigne * doc/html/history.html, doc/html/id3.html, frontend/main.c, frontend/parse.c, frontend/parse.h, include/lame.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h: Albumart (APIC ID3v2.3 frame) patch by Nyaochi 2007-05-24 12:29 bouvigne * doc/html/contributors.html, doc/html/history.html, doc/html/id3.html, frontend/parse.c, include/lame.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h: Ability to set user-defined ID3v2.3 frame (patch from Nyaochi) 2007-05-23 14:44 bouvigne * doc/html/: contributors.html, history.html, index.html: Updated history 2007-05-22 10:10 robert * libmp3lame/: quantize.c, quantize_pvt.c, version.h: ok, now the real bug fix, forget the last commit: the ABR routine did not apply format specific bitrate constrains when allocating bits; now it does 2007-05-22 08:39 robert * libmp3lame/: quantize.c, quantize_pvt.c: bug fix: reduce side was given a too large 'max bits' parameter, resulting in assertion aborts 2007-05-21 22:20 robert * libmp3lame/: lame.c, util.c, util.h: bug fix for feature request: "adjust user min/max bitrate if outside of allowed range (ex: -V9 -B320) Requested by Benski" Some input files with unusual sample frequencies couldn't be encoded at CBR anymore, no matter what resample/bitrate options where passed to LAME. (Testsample: FX319.WAV) 2007-05-20 18:07 robert * libmp3lame/: quantize.c, quantize_pvt.c, util.h, vbrquantize.c, version.h: VBR_NEW: 'out of bits' situation improved 2007-05-17 22:25 robert * ACM/ACM.cpp, libmp3lame/VbrTag.c: Bugs item #1693461: fixing memory leaks in LAME ACM 2007-05-16 02:43 robert * libmp3lame/version.h: we are now at 3.98 beta 1 (of many more to come) 2007-05-16 01:30 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: - some code clean-up - bug fix: in rare cases 'on_pe' returned target bits violating the 4095 bit maximum constrain for a granule - VBR-NEW: modified strategy to handle 'out of bits' cases 2007-05-13 18:31 robert * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, encoder.c, id3tag.c, lame_global_flags.h, util.h, version.h: bug fix: [ 1711980 ] LAME writes invalid Xing header when ID3 tags exist 2007-03-12 21:56 bouvigne * libmp3lame/util.c: adjust user min/max bitrate if outside of allowed range (ex: -V9 -B320) Requested by Benski 2007-01-13 18:02 robert * libmp3lame/util.h: bug fix. bug tracker entry: [ 1634092 ] encoder.c doesn't compile with --disable-brhist 2007-01-13 17:58 robert * libmp3lame/: encoder.c, lame.c: bug fix. bug tracker entry: [ 1634092 ] encoder.c doesn't compile with --disable-brhist 2007-01-09 23:10 robert * Makefile.unix: adding vector/xmm_quantize_sub.c 2007-01-09 22:24 bouvigne * libmp3lame/libmp3lame_vc8.vcproj: directory x86_64 -> vector 2007-01-09 12:02 aleidinger * libmp3lame/: lame.c, mpglib_interface.c, psymodel.c: fix the easy warnings 2007-01-09 10:31 aleidinger * libmp3lame/quantize.c: include the right intrinsics header and only if we need it 2007-01-09 10:29 aleidinger * Makefile.MSVC: use the code in the vector directory 2007-01-09 10:25 aleidinger * Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, configure: regen 2007-01-09 10:23 aleidinger * libmp3lame/i386/Makefile.am: the quoting does not work out as expected, remove it 2007-01-09 10:22 aleidinger * libmp3lame/: lame.c, quantize.c: remove the CPUCCODE check, it is not needed anymore 2007-01-09 10:21 aleidinger * config.h.in: regen 2007-01-09 10:20 aleidinger * configure.in: Use the vector lib on amd64 and x86. This only works with gcc when -msse is specified in CFLAGS at configure time. Currently I get a sigbus with gcc 3.4.6 with the vector lib. Remove the HAVE_GTK define, it is not used anymore. 2007-01-09 10:18 aleidinger * libmp3lame/Makefile.am: add the vector lib and remove the x86_64 part 2007-01-09 10:15 aleidinger * libmp3lame/vector/: Makefile.am, Makefile.in, lame_intrin.h, xmm_quantize_sub.c: this is a copy of the x86_64 parts with modified automake stuff 2007-01-07 21:28 robert * Makefile.MSVC: do not build legacy BLame DLL on make target all 2007-01-07 20:00 aleidinger * libmp3lame/i386/Makefile.in: regen 2007-01-07 20:00 aleidinger * libmp3lame/i386/Makefile.am: fftsse.nas is used now. 2007-01-07 18:03 robert * lame_vc6.dsw, frontend/lame_vc6.dsp, frontend/mp3x_vc6.dsp, libmp3lame/libmp3lame_dll_vc6.dsp, libmp3lame/libmp3lame_vc6.dsp, mpglib/mpglib_vc6.dsp: VC6 project files updated, added project to generate Libmp3lame-dynamic.lib/dll 2007-01-07 14:51 robert * Makefile.MSVC: Makefile with some basic Libmp3lame-dynamic.lib generation ability 2007-01-07 14:31 robert * include/lame.def: export definition for Libmp3lame-dynamic.lib 2007-01-07 14:30 robert * libmp3lame/fft.c, Makefile.unix, frontend/parse.c, include/lame.h, libmp3lame/lame.c, mpglib/mpg123.h: adding FFTSSE assembler code to the HAVE_NASM conditional code 2007-01-07 14:28 robert * .cvsignore, lame_clients_vc6.dsw, frontend/.cvsignore: collecting all LAME client projects in lame_clients_vc6.dsw workspace. 2007-01-07 14:24 robert * dshow/: dshow.dsp, README: DirectShow Filter links against Libmp3lame-dynamic.lib now 2007-01-07 14:23 robert * Dll/LameDll_vc6.dsp: BLAME DLL links against Libmp3lame-dynamic.lib now 2007-01-07 14:21 robert * ACM/: lameACM_vc6.dsp, ADbg/ADbg.dsp, tinyxml/tinyxml.dsp: ACM links against Libmp3lame-dynamic.lib now 2006-12-28 21:56 robert * Dll/BladeMP3EncDLL.c: we are now at 3.98a11 2006-12-28 21:49 robert * dshow/dshow.dsp: we are now at 3.98a11 2006-12-28 21:44 robert * libmp3lame/version.h: we are now at 3.98a11 2006-12-28 21:41 robert * doc/html/history.html: update history 2006-12-28 20:41 robert * dshow/: Encoder.cpp, Encoder.h, Property.rc, dshow.dsp, dshow.dsw: DirectShow filter uses LAME Library API now 2006-12-27 22:19 robert * libmp3lame/reservoir.c: small change in the bitreservoir handling, enable the old --strictly-enforce-ISO switch again 2006-12-27 22:09 robert * doc/html/history.html: updating history entries 2006-12-25 21:37 robert * ACM/: ACM.cpp, ACM.h, ACMStream.cpp, ACMStream.h, AEncodeProperties.cpp, DecodeStream.h, acm.rc, lameACM_vc6.dsp, main.cpp: some changes, now I can compile the ACM stuff at least 2006-12-25 16:15 robert * libmp3lame/reservoir.c: relaxing the FhG bitreservoir restriction a little bit: at 320 kbps it seems to be possible to use the reservoir if we limit it to almost the size of bits used for sideinfo 2006-12-21 09:15 aleidinger * Makefile.in, ACM/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, ACM/ADbg/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, libmp3lame/i386/Makefile.in, configure: regen 2006-12-21 09:14 aleidinger * libmp3lame/Makefile.am: Handle CPU specific C code in a generic way. 2006-12-21 09:09 aleidinger * libmp3lame/i386/Makefile.am: Quote some parts in case directory names contain spaces. 2006-12-21 09:07 aleidinger * aclocal.m4, config.h.in: regen 2006-12-21 09:04 aleidinger * configure.in: Additional stuff for x86_64. First cut... 2006-12-21 09:03 aleidinger * acinclude.m4: Properly quote some parts according to the new rules auf aclocal. 2006-12-21 09:00 aleidinger * libmp3lame/: lame.c, quantize.c: On x86 we also have the xmmintrin header, but we don't use such code there. So not only check for the header, but also for a CPUCCODE define. This may be refined later depending on further inline C code showing up or not. 2006-12-21 02:18 robert * libmp3lame/: machine.h, version.h: we are now at patch level 10 2006-12-21 02:17 robert * libmp3lame/psymodel.c: fixing some divide by zero error 2006-12-20 00:17 robert * frontend/: get_audio.c, parse.c: let LAME be more strict when it comes to unrecognized program options or unsupported input file formats 2006-12-19 18:50 bouvigne * libmp3lame/libmp3lame_vc8.vcproj: include paths 2006-12-19 01:23 robert * frontend/parse.c: add some help text entries 2006-12-19 01:23 robert * libmp3lame/lame.c: disabling temporal masking effect by default for vbr-mtrh, it works against other tunings in this mode 2006-12-18 23:11 robert * libmp3lame/psymodel.c: fixing some index problems in convolution loops 2006-12-17 23:21 robert * libmp3lame/version.h: we are at 3.98 alpha 9 2006-12-17 21:16 robert * libmp3lame/psymodel.c: fixing two possible out of range index errors accessing fftenergy array for GPSYCHO too 2006-12-17 20:53 robert * libmp3lame/: psymodel.c, util.h: fixing two possible out of range index errors accessing fftenergy array convert partition to scalefac: as we replaced ISO tables with own calculations we forgot to add proper weightening for the convolution band where the transition from one scalefactor to th next scalefactor happens. Now added. 2006-12-17 20:49 robert * libmp3lame/bitstream.c: assert didn't match valid input range: bitrate 8 - 640 kbps 2006-12-15 22:16 robert * libmp3lame/version.h: we are now at 3.98 alpha 8 2006-12-15 22:15 robert * libmp3lame/psymodel.c: 2 bug fixes a) in some cases we did access uninitialized data in conversion from partition bands to scalefac bands b) in nsspy-code the conversion from partition to scalefac bands for short blocks did not match the long block case, nor gpsycho. 2006-12-07 10:50 robert * frontend/main.c, libmp3lame/util.c: disabling the "process affinity kludge" 2006-11-27 20:28 robert * libmp3lame/lame.c: - removed unused function parameter nVbrScale in function PutVbrTag 2006-11-20 20:02 robert * libmp3lame/: VbrTag.c, VbrTag.h: - removed unused function parameter nVbrScale in function PutVbrTag - reduced compilation warnings 2006-11-15 02:25 robert * libmp3lame/lame.c: bug fix: [ 1596306 ] lame 3.97: "fatal error during initialization" with this wav an invalid MPEG samplerate was returned by optimum_samplefreq function 2006-11-15 02:21 robert * Makefile.MSVC, libmp3lame/quantize.c: fixing compile problem with quantize_sub.c 2006-11-12 11:44 bouvigne * doc/html/history.html: history 2006-11-11 17:58 bouvigne * libmp3lame/: libmp3lame_vc8.vcproj, quantize.c: intrinsics functions are now in a separate directory (as in v4) 2006-11-11 17:32 bouvigne * frontend/mp3x_vc8.vcproj: bring back mp3x to life (vc8) 2006-11-11 17:14 bouvigne * README.WINGTK, lame_vc8.sln, Dll/LameDll_vc8.vcproj, frontend/lame_vc8.vcproj, libmp3lame/libmp3lame_vc8.vcproj, mpglib/mpglib_vc8.vcproj: bring back mp3x to life (vc8) 2006-11-08 01:53 robert * frontend/: get_audio.c, main.c, main.h, parse.c: feature request: [ 1588283 ] Flushing output stream in lame.exe 'flush' option added 2006-11-07 01:35 robert * libmp3lame/: gain_analysis.c, id3tag.c, lame_global_flags.h, util.c: fixing some compiler warnings, removing some unused lame_global_flags elements 2006-11-07 00:36 robert * libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize.c, frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/set_get.c, libmp3lame/util.h: removing dead code: side channel sparsing didn't work as hoped 2006-11-06 22:39 robert * frontend/: brhist.c, get_audio.c, parse.c: eliminating some compiler warnings 2006-11-05 18:54 robert * frontend/console.c: bug tracker item: [ 1585942 ] lame not --silent when TERM not set in case LAME was build with TERMCAP defined and no TERM environment is defined, now we do not issue an error message and silently fallback to the default behaviour as if LAME was compiled without TERMCAP defined. 2006-11-05 17:49 robert * frontend/timestatus.c: include string header file added unused variable removed in encoder_progress_end 2006-11-05 16:08 robert * frontend/: main.c, timestatus.c, timestatus.h: refactoring progress display code out of encoding loop it's located in timestatus.c now Windows specific: fixed parameter type for SetProcessAffinityMask Gabriel: do we need similar things for Win64 too? 2006-11-05 13:37 robert * frontend/console.c: dead code removed 2006-11-05 02:30 robert * libmp3lame/libmp3lame_vc8.vcproj: using fftsse.nas 2006-11-05 01:55 robert * Makefile.MSVC: using fftsse.nas 2006-11-04 18:59 robert * Makefile.MSVC, Makefile.unix, frontend/parse.c, libmp3lame/fft.c, libmp3lame/lame.c, libmp3lame/version.h, libmp3lame/i386/fft3dn.nas, libmp3lame/i386/fftsse.nas, libmp3lame/i386/nasm.h: we are now at patch level 7 changes in lame frontend switches -k removed, call lowpass and highpass if you need to change them --short/noshort/allshort - degraded into DEVELOPER ONLY switches normal users shouldn't use them -X -Z degraded to DEVELOPER ONLY switches -X is too tough to communicate to end users -Z isn't used actualy fft3dnow and fftsse nasm code taken from LAME4 branch but not added to the configure stuff/VC project files 2006-10-18 20:29 bouvigne * Dll/LameDll_vc8.vcproj: added back the .def config 2006-10-05 21:07 bouvigne * libmp3lame/lame.c: error in a test (noticed by Robert) 2006-09-30 19:55 kylev * lame.spec.in: we distribute a .gz, not a .bz2, and there really isn't a public URL for the file 2006-09-30 15:35 aleidinger * configure.in: Only check for sndfile if it is requested. 2006-09-30 15:35 aleidinger * Makefile.in, Dll/Makefile.in, frontend/Makefile.in, libmp3lame/Makefile.in, mpglib/Makefile.in, configure: regen 2006-09-30 09:17 bouvigne * Makefile.am, Dll/Makefile.am, frontend/Makefile.am, libmp3lame/Makefile.am, mpglib/Makefile.am: updated the .am files to change vc7 to vc8 2006-09-24 16:17 bouvigne * doc/html/history.html: updated history 2006-09-23 22:02 bouvigne * libmp3lame/version.h (lame3_97): 3.97 release 2006-09-23 21:46 bouvigne * doc/html/history.html: release 3.97 2006-09-23 19:30 aleidinger * configure: regen 2006-09-23 19:29 aleidinger * config.h.in, configure.in: check for xmmintrin.h 2006-09-23 08:42 bouvigne * configMS.h (lame3_97): borland config (from main branch) 2006-09-23 08:25 bouvigne * Dll/: BladeMP3EncDLL.c (lame3_97), BladeMP3EncDLL.c: fix in boolean comparison for Delphi progs (bug #1536751) 2006-09-23 08:01 bouvigne * doc/html/: history.html, index.html (lame3_97): 3.97 2006-09-22 19:18 aleidinger * ChangeLog: update from CVS history 2006-09-22 18:51 aleidinger * configMS.h: Borland C seems to follow the lead of MSC. Bug ID: 1563522 2006-09-10 14:25 bouvigne * frontend/parse.c, libmp3lame/lame.c, libmp3lame/tables.c, libmp3lame/util.c: restrict mpeg 2.5 to 64kbps 2006-09-03 15:07 bouvigne * lame_vc7.sln, Dll/LameDll_vc7.vcproj, frontend/lame_vc7.vcproj, frontend/mp3x_vc7.vcproj, libmp3lame/libmp3lame_vc7.vcproj, mpglib/mpglib_vc7.vcproj: removed unmaintained VC7 project files 2006-08-18 18:22 bouvigne * doc/html/history.html, libmp3lame/psymodel.c, libmp3lame/version.h (lame3_97): backported the workaround against short block detection issue 2006-08-06 16:44 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): update ATH adjustment algorithm. - if the block type is short, do not use ATH adjustment with equal pressure curve, because the curve is not exact for impulse-like signal. 2006-07-30 13:53 bouvigne * configMS.h, libmp3lame/util.c: enable SSE code when using x64 2006-07-30 09:51 bouvigne * lame_vc8.sln, Dll/LameDll_vc8.vcproj, frontend/lame_vc8.vcproj, libmp3lame/libmp3lame_vc8.vcproj, mpglib/mpglib_vc8.vcproj: x64 builds 2006-07-30 09:32 bouvigne * Dll/LameDll_vc8.vcproj: updated project 2006-07-30 09:11 bouvigne * lame_vc8.sln, Dll/LameDll_vc8.vcproj: added lame DLL VC8 project 2006-07-14 16:06 bouvigne * lame_vc8.sln, frontend/lame_vc8.vcproj, libmp3lame/libmp3lame_vc8.vcproj, mpglib/mpglib_vc8.vcproj: VC8 projects 2006-07-14 15:58 bouvigne * libmp3lame/psymodel.c: slight change in the short block detection safety threshold 2006-06-28 23:05 robert * libmp3lame/lame.c: full outer loop search disabled because of audible distortions it may generate 2006-06-28 21:05 robert * libmp3lame/psymodel.c: normalizing the spreading function (vbr-new) 2006-06-24 15:19 robert * libmp3lame/: lame.c, quantize_pvt.c, version.h: enabling the conditional RH_ATHAA_FIX code for vbr-new we are now at patch level 6 2006-06-24 01:57 robert * libmp3lame/: lame.c, quantize_pvt.c: tuning ATHAA_FIX for high quality VBR new presets 2006-06-23 23:40 robert * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, vbrquantize.c: tuning ATHAA_FIX for midrange VBR new presets 2006-06-23 23:09 robert * libmp3lame/machine.h: always compile in assertions for alpha builds 2006-06-23 23:06 robert * Makefile.MSVC: updating LibSndFile support, it's used by default now 2006-06-23 20:52 aleidinger * libmp3lame/version.h: bump the patchlevel for the updated sndfile support 2006-06-23 20:49 aleidinger * doc/html/history.html: document the updated libsndfile support 2006-06-23 20:46 aleidinger * Makefile.in, aclocal.m4, configure, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen 2006-06-23 20:40 aleidinger * frontend/get_audio.c, configure.in, frontend/Makefile.am: Add support for a recent sndfile library. Submitted by: Erik de Castro Lopo (sndfile author) 2006-06-18 23:02 robert * libmp3lame/lame.c: developer only switch "--tune x" mow modifies current mask_adjust settings instead of assigning x to it 2006-06-18 21:32 robert * Makefile.unix, libmp3lame/quantize.h: adding RH_TEST_ATHAA_FIX to the Makefile config RH matching declaration and implementation of trancate_smallsspectrums 2006-06-18 20:49 robert * libmp3lame/bitstream.c: fixing asserts 2006-06-18 20:48 robert * libmp3lame/psymodel.c: bugfix: in NSPSY highpass filter, out of bounds access in fircoef bugfix: loss of fraction in equal loudness weighting 2006-06-18 19:20 robert * libmp3lame/quantize_pvt.c: small update to the ATHAA problem fix 2006-06-18 18:16 robert * Makefile.MSVC, libmp3lame/machine.h, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c: trying to fix ATHAA problem for low volume files to enable the code, one has to define RH_TEST_ATHAA_FIX at compile time 2006-06-18 16:45 robert * frontend/gtkanal.c: needs console.h 2006-06-18 16:44 robert * libmp3lame/bitstream.c: fixed assertion 2006-06-16 00:16 robert * libmp3lame/quantize.c, libmp3lame/util.h, mpglib/interface.c: few more include dependencies sorted 2006-06-15 23:51 robert * frontend/gtkanal.c, frontend/mp3x.c, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/gain_analysis.c, libmp3lame/gain_analysis.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/lameerror.h, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/version.h, mpglib/interface.c, mpglib/layer3.c, mpglib/mpglib.h: some more header dependencies, indentation 2006-06-15 23:07 robert * libmp3lame/: VbrTag.h, bitstream.c, bitstream.h, encoder.c, encoder.h, fft.c, fft.h, gain_analysis.c, gain_analysis.h, lame.c, libmp3lame_vc6.dsp, machine.h, mpglib_interface.c, newmdct.c, presets.c, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, reservoir.c, reservoir.h, tables.c, takehiro.c, util.c, util.h, vbrquantize.c, vbrquantize.h, version.c, version.h: making arguments and variables const where possible 2006-06-15 16:03 robert * libmp3lame/: VbrTag.c, VbrTag.h, bitstream.c, bitstream.h, encoder.c, encoder.h, fft.c, fft.h, gain_analysis.h, id3tag.c, id3tag.h, l3side.h, lame-analysis.h, lame.c, lame_global_flags.h, machine.h, mpglib_interface.c, newmdct.c, presets.c, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, reservoir.c, set_get.c, set_get.h, tables.c, tables.h, takehiro.c, util.c, util.h, vbrquantize.c, version.c: tried to avoid includes within include headers to make dependencies more obvious 2006-06-03 13:34 aleidinger * ChangeLog: Add nearly a year of history. 2006-06-03 13:14 aleidinger * doc/html/history.html: add todays history 2006-06-03 13:12 aleidinger * ltconfig, mkinstalldirs, stamp-h.in: Remove obsolete files (at least after the use of the new autotools, they are not created anymore). 2006-06-03 13:11 aleidinger * configure, config.h.in: Update to: - libtool 1.5.22 - automake 1.9 - autoconf 2.59 2006-06-03 13:07 aleidinger * libmp3lame/i386/Makefile.am, Makefile.am.global, configure.in, aclocal.m4, ltmain.sh, Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: Update to: - libtool 1.5.22 - automake 1.9 - autoconf 2.59 2006-06-03 13:03 aleidinger * libmp3lame/lame.c: - Fix bug introduced in last revision. - Don't segfault in lame_close() in case of an error on initialisation. 2006-06-03 11:41 aleidinger * libmp3lame/lame.c: Plug some memory leaks in the error case. Noticed by: Christophe Fergeau SF-Bug: 1443630 2006-06-03 11:05 aleidinger * lame.spec.in: - Remove requirements for specific gcc versions, since modern ones "just work". - Remove out-dated hyper-optimizations (some of which weren't valid compiler flags anymore). - Update to current RPM techniques and macros (inspired by freshrpms.net spec). Submitted by: Kyle VanderBeek SF-Patch: 1488468 2006-05-04 19:50 bouvigne * libmp3lame/: reservoir.c, version.h: restrict max mp3 buf to solve compatibility issue with FhG directshow filter 2006-05-04 19:43 bouvigne * libmp3lame/psymodel.c: attack detection: workaround against "low freq" periodic signals (like trumpet) 2006-04-16 12:18 takehiro * configure (takehiro-2002_05_07-experimental): regen 2006-04-16 09:02 takehiro * configure.in: better socket library configuration. 2006-04-16 08:23 takehiro * configure.in (takehiro-2002_05_07-experimental): better socket function configuration. 2006-04-16 07:06 takehiro * config.h.in, configure.in: remove winsock check. It seems we do not need it anymore. 2006-04-09 16:12 takehiro * libmp3lame/.cvsignore (takehiro-2002_05_07-experimental): ignore pkgconfig file. 2006-04-09 16:11 takehiro * Makefile.in, configure, configure.in, testcase.mp3, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/libmp3lame.pc.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): prepare for pkgconfig support 2006-04-08 11:57 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): tirivial hack of huffman coding with ESC code. 2006-04-08 11:54 takehiro * libmp3lame/: machine.h, psymodel.c (takehiro-2002_05_07-experimental): add alignment macro for not gcc environment 2006-04-08 09:08 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): supress magic numbers 2006-04-08 07:46 takehiro * mpglib/: common.c, interface.c (takehiro-2002_05_07-experimental): suppress warnings 2006-04-08 07:46 takehiro * libmp3lame/: lame.c, set_get.c, set_get.h, tags.c (takehiro-2002_05_07-experimental): supress warnings 2006-04-08 07:45 takehiro * frontend/: gtkanal.c, mp3x.c (takehiro-2002_05_07-experimental): supress singed/unsigned warnings with gcc4.x 2006-04-08 07:45 takehiro * configure.in (takehiro-2002_05_07-experimental): add one more warning option 2006-04-08 07:44 takehiro * doc/html/id3.html (takehiro-2002_05_07-experimental): fix typos 2006-04-08 07:16 takehiro * libmp3lame/: bitstream.c, gain_analysis.c, quantize.c, util.c, util.h (takehiro-2002_05_07-experimental): fix singed/unsigned warning with gcc4.x 2006-04-08 07:14 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix alignment error when gcc4.x with SSE enabled build 2006-04-08 07:13 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): fix typos in genre list. suppress signed/unsigned warining with gcc4.x 2006-04-08 07:12 takehiro * libmp3lame/id3tag.c: fix genre tag spelling as reported by CrazySoul 2006-04-08 07:08 takehiro * doc/html/id3.html: fix spelling as reported by CrazySoul 2006-02-18 16:35 takehiro * frontend/get_audio.c: remove redundant description. 2006-02-18 16:35 takehiro * frontend/main.c: fix decoding problem when the output is stdout, reported by john.edwards33 (sf.net bugid #1430719) 2006-02-03 06:52 vitaly-ivanov * dshow/README: typo fix 2006-02-02 21:04 robert * frontend/parse.c (lame3_97): "console_printf" replaced by "printf" 2006-01-30 15:41 takehiro * frontend/get_audio.c: fix error message when unsupported format AIFF file. (related bugid #1414515, http://sourceforge.net/tracker/index.php?func=detail&aid=1414515&group_id=290&atid=100290 ) 2006-01-22 17:52 robert * include/lame.h, libmp3lame/encoder.c, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/util.h, libmp3lame/version.h: bug fixes: psy code used long block ATH in short block case workaround: quantization routines of new vbr code failed on strong tonal samples, due to over optimistic masking promises from psy model 2006-01-21 16:39 takehiro * frontend/: get_audio.c, get_audio.h, main.c, parse.c (takehiro-2002_05_07-experimental): prepare for RIFF-wave MP3 file. 2006-01-21 16:29 takehiro * libmp3lame/id3tag.c (lame3_97): backport of rev 1.28 - patch #1379187, "id3tag_write_v2 doesn't allocate enough memory for track" 2006-01-21 13:10 takehiro * libmp3lame/id3tag.c: patch #1379187, "id3tag_write_v2 doesn't allocate enough memory for track" 2005-12-21 21:40 robert * frontend/: parse.c (lame3_97), parse.c: bug fix: implementation of the priority commandline switch did not what the documentation says (windows only) 2005-12-18 18:49 robert * frontend/: brhist.c, main.c (lame3_97): fixing some display glitch for very long input files 2005-12-18 18:39 robert * Makefile.unix, configMS.h (lame3_97): fixing some gcc 4.0.2 compiler issues to get LAME compiled again 2005-12-18 18:26 robert * frontend/brhist.c: fixing display glitch with very long files 2005-12-05 15:57 takehiro * libmp3lame/id3tag.c: fix id3v2 genre tag problem, reported by wylda@volny. now LAME won't crash with "--id3v2-only --tg 14". 2005-11-29 21:21 robert * frontend/: mp3rtp.c, mp3x.c: commit was pending, needed for John33's decoding patch 2005-11-29 19:49 robert * doc/html/history.html: updating history 2005-11-28 10:09 vitaly-ivanov * dshow/: Encoder.h, Mpegac.cpp, Mpegac.h, PropPage.cpp, PropPage.h, PropPage_adv.cpp, PropPage_adv.h, Property.rc, README, iaudioprops.h, resource.h: Property page update - moved "set duration" check box to the advanced page, added "allow sample overlap" check box (uncheck it if downstream filter is Avi Mux, otherwise use it for better video/audio synchronization - especially when capturing). Copying terms update (README file) 2005-11-27 15:02 bouvigne * libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/lame.c, doc/html/history.html, libmp3lame/VbrTag.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, doc/man/lame.1, frontend/parse.c: merge from 3.97 branch 2005-11-27 14:47 bouvigne * doc/html/history.html, libmp3lame/gain_analysis.c (lame3_97): hack against replayGain slowness on silent parts 2005-11-27 10:20 bouvigne * libmp3lame/VbrTag.c (lame3_97): fixed Xing/Info tag parsing 2005-11-26 18:43 bouvigne * libmp3lame/version.h (lame3_97): 3.97b2 2005-11-26 18:43 bouvigne * doc/html/history.html (lame3_97): history 2005-11-26 18:37 bouvigne * libmp3lame/: reservoir.c, set_get.c (lame3_97): reinstated bit reservoir for 320kbps 2005-11-26 14:21 bouvigne * libmp3lame/presets.c (lame3_97): slight change of athaa in V5 2005-11-26 14:19 bouvigne * frontend/parse.c (lame3_97): restored availability of athaa-sensitivity in command line frontend, as it was available in 3.96 release 2005-11-22 22:15 robert * frontend/: console.c, console.h, get_audio.c, get_audio.h, gtkanal.c, lametime.c, main.c, main.h, parse.c, rtp.c: John33's lame decoding fix 2005-11-20 14:25 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): fix built problem on Sun Studio 10, reported by Moinak Ghosh 2005-11-20 14:24 takehiro * libmp3lame/gain_analysis.c: fix built problem with Sun Studio 10, reported by Moinak Ghosh 2005-11-20 14:08 bouvigne * libmp3lame/: VbrTag.c, bitstream.c, encoder.c, fft.c, lame.c, mpglib_interface.c, newmdct.c, presets.c, psymodel.c, quantize.c, quantize_pvt.c, reservoir.c, set_get.c, takehiro.c, util.c, vbrquantize.c (lame3_97): updated copyrights 2005-11-12 18:52 bouvigne * libmp3lame/gain_analysis.c: speedup of silent parts analysis 2005-11-12 18:33 bouvigne * doc/html/history.html: history from 3.97 branch 2005-11-12 18:21 bouvigne * Makefile.MSVC: added console.c 2005-11-09 18:56 aleidinger * frontend/rtp.c: Fix bug #1349332 2005-11-09 18:40 aleidinger * libmp3lame/id3tag.c: Fix bug #1351021. 2005-11-06 17:41 bouvigne * doc/html/history.html, libmp3lame/lame.c, libmp3lame/quantize.c (lame3_97): fixes from main branch 2005-11-05 16:35 aleidinger * doc/html/history.html: add todays work 2005-11-05 16:20 aleidinger * libmp3lame/: id3tag.c, id3tag.h: Add support for total number of tracks per album. Submitted by: Kyle VanderBeek While I'm here add some abort() calls in case we overflow some arrays (this is only compile tested, so pass me the pointy hat if it fails). 2005-11-05 15:54 aleidinger * libmp3lame/id3tag.c: Add id3v2 TLEN support. Submitted by: Linus Walleij 2005-11-05 15:52 aleidinger * frontend/console.c: some compilers really want the void nowadays... 2005-11-05 15:51 aleidinger * frontend/Makefile.in: regen 2005-11-05 15:49 aleidinger * frontend/console.h: make some pseudo prototypes to real prototypes (fixes gcc warnings) 2005-11-05 15:48 aleidinger * frontend/Makefile.am: console.[ch] is now mandatory, so build it 2005-11-05 15:47 aleidinger * include/lame.h: remove redundant function prototypes (we need only one prototype) 2005-11-01 20:17 robert * frontend/console.c: bug fix: FILE pointer may be NULL for DEBUGF 2005-11-01 13:54 robert * frontend/: mp3rtp.c, rtp.c: getting mp3rtp working again 2005-11-01 13:10 robert * frontend/mp3x.c: replacing (f)printf by console_printf, error_printf and report_printf. fixes the problem that some messages would be send to stdout instead of stderr. added internal switch '--debug-file ', allows to debug the code more comfortably by writing DEBUGF(xyz) at code hot spots. 2005-11-01 13:01 robert * frontend/: .indent.pro, amiga_mpega.c, brhist.c, brhist.h, console.c, console.h, get_audio.c, get_audio.h, gpkplotting.c, gpkplotting.h, gtkanal.c, gtkanal.h, lame_vc6.dsp, lame_vc7.vcproj, lametime.c, lametime.h, main.c, main.h, mp3rtp.c, mp3x.c, mp3x_vc6.dsp, mp3x_vc7.vcproj, parse.c, parse.h, portableio.c, portableio.h, rtp.c, rtp.h, timestatus.c, timestatus.h: replacing (f)printf by console_printf, error_printf and report_printf. fixes the problem that some messages would be send to stdout instead of stderr. added internal switch '--debug-file ', allows to debug the code more comfortably by writing DEBUGF(xyz) at code hot spots. 2005-11-01 12:51 robert * Makefile.unix, configMS.h: [no log message] 2005-10-31 13:02 bouvigne * libmp3lame/quantize.c: fixed bug 1227632 2005-10-31 13:01 bouvigne * libmp3lame/lame.c: fixed bug 1337556 2005-10-31 13:00 bouvigne * frontend/main.c: spelling of Takehiro's name 2005-10-10 07:05 rbrito * COPYING, debian/changelog, debian/copyright, debian/rules, doc/man/lame.1: Updated manpage to include accented characters; Updated debian packaging; Updated documentation to include the new FSF address. 2005-10-01 09:03 takehiro * lame.spec.in (takehiro-2002_05_07-experimental): update configure options 2005-09-29 21:21 robert * libmp3lame/i386/: fft3dn.nas (lame3_97), fft3dn.nas: taken from lame4 branch: fix possible link problem on cygwin 2005-09-25 22:09 glessard * libmp3lame/quantize.c: GCC 4 on OS X was choking on line 615. Given the assignment on line 630, clearly 'work' isn't a pointer to an array of constants anyway. 2005-09-24 10:20 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): suppress warnings for YASM. 2005-09-24 10:20 takehiro * libmp3lame/i386/nasm.h (takehiro-2002_05_07-experimental): added LINUX detection for non-executable stack suuport. 2005-09-24 09:34 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): simplify drain_into_ancillary() 2005-09-24 08:45 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): small optimization 2005-09-24 08:28 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): fixed window shape when mixed_block_flag is enabled. 2005-09-24 08:01 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): Now LAME4 does not use MMX when SSE2 is available. 2005-09-24 07:54 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): added TODO as comments 2005-09-22 16:00 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-09-22 15:48 takehiro * configure.in (takehiro-2002_05_07-experimental): fix when without nasm 2005-09-22 14:03 takehiro * configure.in (takehiro-2002_05_07-experimental): i*86-linux detection for NASM code not to mark "exectable stack" 2005-09-22 13:50 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): cache gfc->bitidx value. 2005-09-20 19:51 robert * libmp3lame/util.c: fix wrong typing 2005-09-20 19:41 robert * libmp3lame/: quantize.c, vbrquantize.c, vbrquantize.h: moved loop from quantize.c to vbrquantize.c 2005-09-20 19:38 robert * libmp3lame/: util.h, util.c: malloc with n-bytes alignment 2005-09-20 09:19 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: added internal developer switch to select between ISO and x^3/4 quantization --quantization-type n n=0: no change, n=1: ISO, n=2: x^3/4 2005-09-18 22:57 robert * libmp3lame/: vbrquantize.c, vbrquantize.h, version.h: vbr new noise shaping: let lame abort in exceptional cases now on alpha 2 2005-09-18 21:38 robert * libmp3lame/: encoder.c, lame.c, quantize.c, quantize.h, util.h, vbrquantize.c: vbr-new: bug fix for "searchGlobalStepSizeMax" demangling vbr_old and vbr_new code 2005-09-14 17:24 takehiro * configure.in (takehiro-2002_05_07-experimental): clean up assembler code support. - nasmw support on cygwin. - clean up yasm support, as I decided not to use yasm on x86-64. - do not set "not exectable stack" flag not on linux environment. 2005-09-13 15:38 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): code clean up 2005-09-12 15:51 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): better region division point for lossless coding. 2005-09-12 01:38 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): code clean up. 2005-09-11 17:12 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix assertion failure at lossless coding. 2005-09-11 17:07 takehiro * libmp3lame/: encoder.h, tables.c, takehiro.c (takehiro-2002_05_07-experimental): more efficient lossless coding when without brute force search. And it makes little speed improvement when with brute force search. 2005-09-11 10:20 bouvigne * libmp3lame/version.h: welcome to 3.98 2005-09-11 09:57 bouvigne * lame_vc7.sln: missing file 2005-09-11 09:14 bouvigne * libmp3lame/version.h: 3.97b 2005-09-11 07:35 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): experimental SSE2 support for calc_sfb_noise_fast. but because it slows down the VBR encoding on Celeron-M, it is not enabled by default. 2005-09-10 17:08 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): more efficient lossless coding, especially for low bitrate. 2005-09-08 22:57 takehiro * doc/html/history.html: fixed style. 2005-09-08 22:57 takehiro * doc/html/history.html: added my changes for 3.97. 2005-09-08 02:44 rbrito * doc/man/lame.1: Fixed typo. 2005-09-07 21:15 bouvigne * testcase.mp3: updated testcase for 3.97b1 2005-09-06 18:24 bouvigne * doc/html/history.html: typo 2005-09-06 15:34 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix assertion failure in lossless coding. 2005-09-05 21:24 bouvigne * doc/html/: history.html, index.html: updated history for 3.97b 2005-09-05 20:49 bouvigne * frontend/parse.c: -Vx short help 2005-09-05 04:29 rbrito * debian/: changelog, rules: Update generation of package with full optimization, now that compilation with GCC 4 works. 2005-09-05 01:55 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): always use adaptive cutoff 2005-09-05 01:52 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): optimized calc_sfb_noise_fast(). Exit the loop as soon as it detect the audible noise. 2005-09-04 19:52 aleidinger * ChangeLog: Update with recent history. 2005-09-04 19:45 aleidinger * configure: Regen. 2005-09-04 19:35 aleidinger * config.h.in: Add the bits for largefile support. Submitted by: Diego "Flameeyes" Pettenò Bug ID: 1271744 2005-09-04 19:11 aleidinger * configure.in: Remove some flags which gcc 4.x doesn't understand anymore. Noticed by: Rogério Brito 2005-09-04 19:05 aleidinger * aclocal.m4, config.h.in, Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: Regen. 2005-09-04 19:05 aleidinger * depcomp, install-sh, ltmain.sh, missing, mkinstalldirs, frontend/depcomp, libmp3lame/depcomp, misc/depcomp, mpglib/depcomp: Update to recent autotools. 2005-09-04 19:02 aleidinger * frontend/Makefile.am: Play catchup with the autotools. 2005-09-04 18:54 aleidinger * configure.in: Initialize autoconf correctly (with lame mailinglist address). 2005-09-04 16:19 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix adptive threshold calculation. 2005-09-04 12:03 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): little bit better lossless coding 2005-09-04 11:52 rbrito * doc/man/lame.1: Fixed typo in manpage. 2005-09-04 07:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): better skip method for not audible scalefactor band. 2005-09-04 06:56 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not calculate not audible scalefactor band. 2005-09-04 06:16 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): forgot to commit when adding sfb energy caching. sorry. 2005-09-04 03:10 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): caching sfb energy = sum of xr^2 2005-09-04 03:09 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): suppress conditional jump 2005-09-04 02:21 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): better pipelining and use of pshufd in ix_max_SSE2 2005-09-04 02:09 takehiro * libmp3lame/: tables.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): SSE2 version of ix_max() 2005-09-04 02:08 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): trivial optimization 2005-09-03 15:38 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): clean up coding. 2005-09-03 14:49 takehiro * libmp3lame/: quantize.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): changed parameter of xrmax_MMX() 2005-09-03 13:38 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): trivial optimization 2005-09-03 13:31 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): added sumofsqr_SSE() for ia32 2005-09-03 13:10 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): use aligned memory access 2005-09-03 12:45 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): use SSE register for data backup. 2005-09-03 12:28 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): xrmax_SSE() support on x86_64 2005-09-03 11:16 takehiro * libmp3lame/: quantize.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): SSE version of xrmax() 2005-09-02 18:09 bouvigne * frontend/parse.c: fixed a stupid bug with --preset medium/standard/extreme 2005-09-02 17:16 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): changed default setting of replaygain analysis, "enable fast" -> "disable all". 2005-09-01 18:12 bouvigne * libmp3lame/VbrTag.c: 320kbps cbr was flagged as "non optimal" in the info header 2005-08-31 16:21 takehiro * libmp3lame/quantize.c, libmp3lame/lame-analysis.h, frontend/gtkanal.c (takehiro-2002_05_07-experimental): display how many bits used in the "large value" region and count1 region. 2005-08-28 17:30 bouvigne * frontend/parse.c, libmp3lame/version.h: Changed the way "--preset xxx" is handled, as I've seen many users passing "--preset standard --vbr-new". Presets are now evaluated during initialisation, so this kind of command line now properly works. 2005-08-28 17:02 bouvigne * libmp3lame/lame.c, Makefile.MSVC, libmp3lame/version.c, libmp3lame/version.h, frontend/parse.c: 64bits build from within win64 platform sdk 2005-08-28 12:19 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): use 128bit constants 2005-08-28 12:11 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): better pipelining 2005-08-27 12:03 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): use cos(2x) = cos(x)*cos(x) - sin(x)*sin(x) = 1 - 2*sin(x)*sin(x) 2005-08-27 08:25 takehiro * configure, configure.in: fix for configure problem reported by Steven P. Ulrick. 2005-08-27 08:10 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): clean up. 2005-08-27 07:58 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): clean up counter register usage 2005-08-25 16:28 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): suppress table size 2005-08-25 12:14 takehiro * debian/: Makefile.am, Makefile.in: follow the file name change. 2005-08-23 15:50 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): new tonality -> masking ratio conversion method and masking ratio limitation in the lower frequency region. 2005-08-23 14:15 takehiro * libmp3lame/: encoder.h, lame.c, newmdct.c, psymodel.c, tables.c (takehiro-2002_05_07-experimental): rename internal variable name, start_sfb_* -> max_sfb_* update verbose print of internal setting. 2005-08-22 16:20 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): do not call best_scalefac_store() when no noise shaping, becase in such case all the scalefac values are always zero. 2005-08-22 15:21 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): do not calculate MDCT beyond cutoff even when adaptive cutoff is enabled. 2005-08-22 13:47 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): display internal setting for "adaptive lowpass cutoff" 2005-08-22 13:46 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): fix "optimal setting" flag is always cleared when the input file is below 32kH 2005-08-22 13:11 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): do not process filtering when no filter enabled. 2005-08-21 17:32 bouvigne * Makefile.am, ACM/Makefile.am, ACM/lameACM_vc7.vcproj, ACM/ADbg/ADbg_vc7.vcproj, ACM/ADbg/Makefile.am, ACM/tinyxml/Makefile.am, ACM/tinyxml/tinyxml_vc7.vcproj, Dll/LameDll_vc7.vcproj, Dll/Makefile.am, frontend/Makefile.am, frontend/lame_vc7.vcproj, frontend/mp3x_vc7.vcproj, libmp3lame/Makefile.am, libmp3lame/libmp3lame_vc7.vcproj, mpglib/Makefile.am, mpglib/mpglib_vc7.vcproj: added project files for VC7 2005-08-21 17:00 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): use adaptive cutoff when no lowpass filter setting ("-k" option) 2005-08-21 15:25 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix default cutoff setting when adaptive cutoff. 2005-08-21 14:15 takehiro * libmp3lame/: encoder.h, lame.c, psymodel.c, quantize.c, tables.c (takehiro-2002_05_07-experimental): adaptive cutoff frequency calculation. very experimental and not works correctly (of course is not enabled by default) 2005-08-21 08:40 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): revive -q settings for VBR/ABR 2005-08-21 08:05 takehiro * libmp3lame/i386/: fftsse.nas, quantSSE.nas (takehiro-2002_05_07-experimental): clean up 2005-08-21 06:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): clean up x86_64 code. 2005-08-21 06:09 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): use loopalign instead of align 2005-08-21 05:54 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): use movlps instead of movups 2005-08-21 05:42 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): trivial 2005-08-21 04:50 takehiro * libmp3lame/i386/: choose_table.nas, quantSSE.nas (takehiro-2002_05_07-experimental): small asm-coding hack. 2005-08-21 03:32 takehiro * libmp3lame/: encoder.h, tags.c (takehiro-2002_05_07-experimental): Support generic genre name like "MyOriginalGenre" (bugid #1265218 @ sf.net) 2005-08-20 18:34 takehiro * libmp3lame/i386/fftsse.nas (takehiro-2002_05_07-experimental): clean up. 2005-08-20 18:05 takehiro * libmp3lame/: util.c, util.h (takehiro-2002_05_07-experimental): one more support for SSE on x86_64 2005-08-20 18:01 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): ASM code support for x86_64 environment (only tested with FedoraCore3@cf.sf.net) 2005-08-20 17:48 bouvigne * doc/html/switchs.html: typo 2005-08-20 16:47 takehiro * configure, configure.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): auto* things for x86_64 related files. 2005-08-20 14:21 takehiro * libmp3lame/i386/ssesub.c (takehiro-2002_05_07-experimental): remove unused files/dirs 2005-08-20 13:42 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): remove redundant operation and fix comments. 2005-08-20 11:32 takehiro * libmp3lame/: lame.c, psymodel.c, util.h (takehiro-2002_05_07-experimental): modification related to asm version of lr2ms (forgot to commit. oops) 2005-08-20 09:25 takehiro * libmp3lame/: util.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): SSE version of LR -> MS. gains 1% speed. 2005-08-20 08:49 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial optimization 2005-08-16 07:56 rbrito * debian/: changelog, control: Make libmp3lame0 provide and replace liblame0, not conflict with it. 2005-08-16 07:11 rbrito * debian/: changelog, control, libmp3lame0-dev.files: Fixed development package to not include shared libraries. Other misc fixes. Yet more to come. 2005-08-16 01:42 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimized pow075() for generic CPU. remove C++ style comments. 2005-08-15 04:25 rbrito * debian/: changelog, control, liblame0-dev.docs, liblame0-dev.files, liblame0.files, libmp3lame0-dev.docs, libmp3lame0-dev.files, libmp3lame0.files, rules: Update Debian packaging so that the library packages follow the SONAME rules. Also incorporate some changes from Christian Marillat's packages in the basic lame package. More changes to come soon. 2005-08-14 07:05 takehiro * libmp3lame/: bitstream.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): trivial optimization 2005-08-13 14:12 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h (takehiro-2002_05_07-experimental): optimize quad-code writing routine. 2005-08-13 12:09 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): move the comments at more suitable place. 2005-08-13 12:08 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial optimizations. 2005-08-13 09:17 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): faster count bits for quad-code region. 2005-08-11 14:43 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): reduce memory access by caching data to be written. 2005-08-10 15:22 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): caching huffman code to be written to reduce bitwise operation. 2005-08-10 14:55 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): more pruning at lossless coding. same result, faster calculation. 2005-08-08 17:22 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): one more pruning of lossless coding. 2005-08-08 16:33 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimize speed of lossless coding with better pruning. 2005-08-07 14:07 takehiro * doc/man/lame.1: when the input is raw, the input file will be treated as native endian. (bugid 1158189) 2005-08-07 13:24 bouvigne * doc/html/switchs.html: update of stereo modes description 2005-08-07 12:34 takehiro * configure, aclocal.m4 (takehiro-2002_05_07-experimental): regen 2005-08-07 10:44 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): surpress memcpy 2005-08-07 09:37 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix debug build 2005-08-06 17:29 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): reduce table size. 2005-08-06 17:20 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): surpress warnings 2005-08-06 17:14 takehiro * libmp3lame/tables.h (takehiro-2002_05_07-experimental): fix comments 2005-08-06 14:51 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix typo. 2005-08-06 06:37 takehiro * libmp3lame/: psymodel.c, i386/ssesub.c (takehiro-2002_05_07-experimental): trivial 2005-08-06 06:09 takehiro * libmp3lame/: machine.h, tables.c, tables.h (takehiro-2002_05_07-experimental): cleanup and suppress memory usage when SMALL_CACHE and IEEE754 2005-08-06 04:46 takehiro * frontend/timestatus.c (takehiro-2002_05_07-experimental): fix --nohist switch. 2005-08-05 15:22 takehiro * doc/man/lame.1: added "per sample" for the description of --bitwidth option. (bugid #1158196) 2005-08-05 09:22 vitaly-ivanov * dshow/: Mpegac.cpp, Mpegac.h: Another timestamp fix. Added additional resynchronization points (now there are 4 resynch points) in order to implement absolutely accurate in-out synchronization 2005-08-04 15:15 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix MPEG2 Layer3 VBR encoding (correct form of rev.1.178.2.223). 2005-08-04 14:56 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix short block encoding. It may select the subblock gain which makes quantized values larger than the IXMAX. 2005-08-04 14:01 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): revert last (rev.1.178.2.223) changes. 2005-08-04 14:00 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not use preflag when MPEG2 2005-08-04 11:27 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix for MPEG2 VBR coding. Still MPEG2-VBR needs many tweaking. 2005-08-04 06:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial simplification. 2005-08-04 02:30 takehiro * libmp3lame/: encoder.h, lame.c (takehiro-2002_05_07-experimental): fix bitrate histgram display when mono. 2005-08-04 01:42 rbrito * debian/: changelog, control, rules: Updates for Debian packaging. 2005-08-04 01:40 rbrito * doc/man/lame.1: Documentation of switches: --{un,}signed and --{big,little}-endian. 2005-08-03 14:40 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): supress warnings on 64bit environment. 2005-08-03 14:04 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): more clean up when with --nohist or --silent. 2005-08-03 07:11 takehiro * libmp3lame/i386/nasm.h (takehiro-2002_05_07-experimental): Add magic words from libflac to tell LAME does not need exectable stack. 2005-08-02 13:30 takehiro * frontend/main.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix brhist display when CBR 2005-08-01 17:16 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): update comments 2005-08-01 15:51 takehiro * libmp3lame/: quantize.c, tables.c (takehiro-2002_05_07-experimental): more MAX_BITS off-by-one fixes, including comments. 2005-08-01 13:10 vitaly-ivanov * dshow/: Mpegac.cpp, Property.rc: Output timestamps fix. There was a serious bug when input audio samples had time gaps between each other - DirectShow timestamps for output samples were calculated wrong in this case 2005-08-01 07:06 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): fix off by one of MAX_BITS. 2005-08-01 06:30 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): supress table size. 2005-07-30 16:30 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not use 4096 bits/granule limits when not strict ISO mode. 2005-07-28 13:05 rbrito * doc/html/: basic.html, contributors.html, examples.html, history.html, id3.html, switchs.html: Minor spelling corrections and other fixes to documentation. 2005-07-28 13:02 rbrito * debian/rules: Safe version for compilation with GCC 4. 2005-07-27 21:49 rbrito * doc/html/: presets.html, switchs.html: Spelling fixes for documentation. 2005-07-27 21:38 rbrito * doc/man/lame.1: Include description of the "medium" preset in the manpage. Fix some spelling errors on the manpage. 2005-07-27 08:43 rbrito * debian/changelog, debian/control, debian/lame.manpages, debian/rules, doc/man/lame.1: Small fixes for lame manpage to make lintian happy. More updates to come. 2005-07-27 07:41 rbrito * debian/changelog: Preparation for the new beta release. More changes to come. 2005-07-26 23:31 takehiro * config.h.in, configure.in, frontend/main.c (takehiro-2002_05_07-experimental): experimental patch to autodetect UTF-8 ID3v2 tag by Edmund GRIMLEY EVANS. 2005-07-26 13:59 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix 4096bits limits for one _granule_ when VBR. old code mistook it for one _channel and granule_. 2005-07-24 16:54 takehiro * libmp3lame/: lame.c, psymodel.c, util.h (takehiro-2002_05_07-experimental): suppress warnings 2005-07-24 16:52 takehiro * libmp3lame/: lame.c, psymodel.c, util.c (takehiro-2002_05_07-experimental): added lr2ms() function and use it. This is the preparation for future asm-optimizations. 2005-07-24 16:51 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fixed reservoir limitation setup. 2005-07-24 16:49 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): added some comments arround the bit reservoir. 2005-07-24 16:28 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): [no log message] 2005-07-24 16:11 takehiro * libmp3lame/: lame.c, quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): SSE2 version of quntize_ISO (from gogo) 2005-07-24 13:02 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix bit/byte confusion. 2005-07-20 14:30 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fixed compilation problem on some OS which has a "trancate" 2005-07-20 14:22 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): update comments. 2005-07-16 08:30 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): fixed tarck tag ID. 2005-07-16 08:04 takehiro * frontend/parse.c, include/lame.h, libmp3lame/encoder.h, libmp3lame/tags.c (takehiro-2002_05_07-experimental): ID3 tag update. - merged UTF-8 patch from egrimleyevans (http://sourceforge.net/tracker/index.php?func=detail&aid=1192706&group_id=290&atid=300290) - Fixed ID3v1 track number tag. When the track number is larger than 255, it was recoded as "track number % 256" in the ID3v1. - Changed internal track number representation to char* from int. It may allow to use "leading zero" track number in ID3v2 tag, like "01/23". 2005-07-16 07:30 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): added "--ignore-tag-errors" to the usage message 2005-07-10 16:13 bouvigne * libmp3lame/: presets.c, version.h: alpha 11: update of abr/cbr 160-320 2005-06-29 12:26 vitaly-ivanov * dshow/: Encoder.cpp, PropPage.cpp, PropPage_adv.cpp, Property.rc: Joint / Standard stereo selection fix. Got rid of automatic joint stereo encoding when the bit rate is relatively low, now it's up to the user 2005-06-25 08:14 vitaly-ivanov * dshow/: Encoder.h, Property.rc, aboutprp.cpp, .cvsignore: [no log message] 2005-06-24 10:03 vitaly-ivanov * dshow/: .cvsignore, Encoder.cpp, Encoder.h, Mpegac.cpp, Mpegac.def, Mpegac.h, PropPage.cpp, PropPage.h, PropPage_adv.cpp, PropPage_adv.h, Property.rc, README, REG.CPP, UIDS.H, aboutprp.cpp, aboutprp.h, dshow.dsp, dshow.dsw, iaudioprops.h, resource.h: [no log message] 2005-06-24 09:37 vitaly-ivanov * dshow/REG.H: [no log message] 2005-06-04 16:06 takehiro * libmp3lame/i386/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): fix for configure with --disable-shared. 2005-05-29 16:41 takehiro * Makefile.in, aclocal.m4, configure, ltmain.sh, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen with automake1.9.5 2005-05-29 16:40 takehiro * libmp3lame/: tables.c, psymodel.c (takehiro-2002_05_07-experimental): psymodel parameter tuning (1) 2005-05-29 16:10 takehiro * debian/: changelog, control: fixed version number (upstream -> downstream) patch from Jack, from http://sourceforge.net/tracker/index.php?func=detail&aid=1201172&group_id=290&atid=100290 2005-05-29 15:59 takehiro * debian/rules (takehiro-2002_05_07-experimental): added files to remove when clean. 2005-05-29 14:43 takehiro * libmp3lame/: tables.c, takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): fix sing handling. It somtime makes assertion failure on MMX2 supported machines. 2005-05-29 14:40 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimized init_global_gain(), by initializing gi->count1, gi->big_values only when it is "really" needed. 2005-05-25 14:17 takehiro * frontend/: get_audio.c, parse.c: fixed output message even when "--silent" (bug #1145932) 2005-05-25 13:56 takehiro * libmp3lame/lame.c: fix format strings to print out the "float" value. (bug #1207470) 2005-05-25 13:47 takehiro * frontend/parse.c: removed -Z option description, which has no effects currently. 2005-05-21 09:07 takehiro * libmp3lame/: psymodel.c, psymodel.h, tables.c (takehiro-2002_05_07-experimental): suppress magic number. 2005-05-20 14:46 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): clean up the new workarround for the frequency resolution in the lower frequency. 2005-05-17 15:46 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): Do not calculate the simultaneous masking in the lower frequency, where the frequency resolution is not sufficient. This is a temporaly code. This should be done by changing the spread function. 2005-05-14 17:45 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): dirty hack arround truncate() 2005-05-14 16:28 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): reduce division by changing log(x/y) -> log(x) - log(y), part 2. supress magic numbers. 2005-05-14 16:27 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix assertion failure when a quantized value exceeds IXMAX(8206) 2005-05-14 13:47 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-05-14 13:16 takehiro * configure.in (takehiro-2002_05_07-experimental): remove some optimization options which is not supported by gcc4. 2005-05-14 12:31 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): fix debug built problem on the machine without memset() 2005-05-14 08:00 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): changed log(x/y) as log(x)-log(y), when FAST_LOG. 2005-05-14 06:53 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix built problem when USE_IEEE754_HACK but not USE_FAST_LOG. 2005-05-14 03:43 takehiro * debian/: changelog, control (takehiro-2002_05_07-experimental): patch from Jack (jablko), including the bug report #1201172 2005-05-12 17:40 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): supress magic numbers 2005-05-11 15:51 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): for better portability, do not use "long long", use uint64_t instead. 2005-05-11 15:50 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): remove unused portion of window coefs. 2005-05-11 15:14 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): optimizing mask_add(), part 2. - faster log() -> trncate() calculation for IEEE754 HACK. 2005-05-11 14:59 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): optimizing mask_add() (part 1) 2005-05-10 17:24 takehiro * libmp3lame/: psymodel.c, machine.h (takehiro-2002_05_07-experimental): optimizing PE calculation. 2005-05-10 17:10 takehiro * libmp3lame/: tables.c, machine.h (takehiro-2002_05_07-experimental): use integer calculation @ fast_log2(). This is a preparation for farther speed optimizations. 2005-05-06 01:06 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix typo. 2005-05-04 17:21 takehiro * libmp3lame/tables.h (takehiro-2002_05_07-experimental): fix typo 2005-05-04 17:01 takehiro * configure (takehiro-2002_05_07-experimental): regen by hand. 2005-05-04 17:00 takehiro * configure.in (takehiro-2002_05_07-experimental): - do not use "-march" option for the case of cross build. - added comments about SPARC + IEEE754 hack 2005-05-04 16:58 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): update x^(3/4) hack. - use IEEE754 HACK version of fabs() - better "digital silent" detection. not use sum, but use maximum. 2005-05-04 16:57 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): common expression reduction. 2005-04-26 16:08 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix selection of the band to increase the scalefactor, when all the band have no audible noise. 2005-04-25 16:35 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix handling of SCALEFAC_ANYTHING_GOES in calc_noise(). This sometimes makes assertion failure when with --substep option. 2005-04-24 10:28 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix it skips clipping when with --decode option. 2005-04-23 18:25 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): clean up. 2005-04-23 18:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): Handmade aprox. code to calculate x^(3/4) for IEEE754 machines. On MacOSX + G4, the speed gain is arround 14% ! 2005-04-23 15:31 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): supress warnings 2005-04-23 15:11 takehiro * testcase.mp3, frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, frontend/main.c, include/lame.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): use floating values for the data between frontend and encoding core. 2005-04-23 10:10 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): prevent to re-initialization. 2005-04-23 10:08 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): add error check for lame_decoe_init() fix comment. 2005-04-23 09:57 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): clean up 2005-04-23 09:56 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): clean up endianness. fix mp3 decoding. 2005-04-23 08:42 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tuning masking parameter balance for long/short blocks. 2005-04-23 08:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix memory copy size in CBR_2nd_iteration(). This bug causes assertion failure when CBR with -h option. 2005-04-23 08:07 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): reduce memory copy size. 2005-04-23 07:57 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): little bit better initial value for quantization factor search. 2005-04-23 07:55 takehiro * libmp3lame/: quantize.c, quantize_pvt.h (takehiro-2002_05_07-experimental): reduce memory copy size. 2005-04-22 17:39 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): supress warnings with GCC4.0 2005-04-21 16:36 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): oops, stupid bug in loop counter... sorry. 2005-04-21 15:42 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): improve the spreading function for the lower frequency, where the resolution of frequency is not sufficient for phsycho-analysis. 2005-04-21 15:36 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): clean up. 2005-04-21 15:03 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): verbose the configuration message. 2005-04-17 17:28 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): clean up arround lame_print_internals() 2005-04-17 16:16 takehiro * frontend/: get_audio.c, get_audio.h, main.c, main.h, parse.c (takehiro-2002_05_07-experimental): clean up endianness detection and configuration. 2005-04-17 15:49 takehiro * frontend/: get_audio.c, get_audio.h (takehiro-2002_05_07-experimental): clean up MAX_U_32_NUM definition 2005-04-17 15:42 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): general clean up. 2005-04-17 15:35 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix assertion failure when CBR encoding. 2005-04-17 12:49 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): clean up options. - make some options as experimental. - fix floating point/integer argument. 2005-04-17 11:01 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimized best_huffman_divide(), by removing needless call of choose_table(). 2005-04-16 15:58 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): general clean up. - supress magic numbers - use putbits16() instead of putbits24(), where it can. - trivial loop counter optimization 2005-04-16 13:55 takehiro * testcase.mp3, libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): ATH value adjustment for M/S channels. 2005-04-16 13:53 takehiro * libmp3lame/bitstream.c, frontend/brhist.c, frontend/main.c (takehiro-2002_05_07-experimental): supress warnings 2005-04-16 10:42 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): reduce conditional jumps 2005-04-16 10:42 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): added (FLOAT) cast in fast_log() macros. 2005-04-13 14:12 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): oops, I disabled the new code... 2005-04-13 14:11 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): one more fix for the delay. 2005-04-13 13:50 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix frame delay 2005-04-13 13:41 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimize lossless coding efficiency and speed (mainly for low bitrate). 2005-04-09 17:50 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): optimized bitstream copy code. 2005-04-09 17:29 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): one more reduction of needless divide point search in best_huffman_divide() 2005-04-09 09:58 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): prevent needless search of best_huffman_divide(). 2005-04-04 01:20 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimize best_scalefac_store() - only call noquant_count_bits() when it is really needed. - skip the band with the SCALEFAC_ANYTHING_GOES. 2005-04-03 18:28 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): little bit better lossless coding. 2005-04-03 18:27 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): make assertion condition strictly. 2005-04-03 17:42 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): one more off by one... oops. 2005-04-03 17:24 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix off-by-one bug. 2005-04-03 12:25 takehiro * libmp3lame/: quantize.c, quantize_pvt.h (takehiro-2002_05_07-experimental): use the theoretical minimum value of xr34. 2005-04-03 11:57 takehiro * frontend/: gtkanal.c, mp3x.c (takehiro-2002_05_07-experimental): fix (part of) mp3x display delay problem 2005-04-03 11:32 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix table selection 2005-04-03 05:50 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): reduce calling ixmax() and simplify count_bits() 2005-04-02 18:32 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): potential fix for floating point exception when analysing MPEG2 Layer3 encoding by mp3x. 2005-04-02 17:06 takehiro * frontend/timestatus.c (takehiro-2002_05_07-experimental): reduce calling GetRealTime() 2005-04-02 16:45 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): Try to find the better quantization factor in the higher frequncy band, even when it fails to encode without the noise in the lower frequency band. 2005-04-02 16:21 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): simplify the loop condition. 2005-04-02 14:54 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): do not use putbits24(), where the length to write is lesser than 18. 2005-04-02 14:02 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix off-by-one bug in best_huffman_divide() 2005-04-02 12:21 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix comments and reduce the table size. 2005-04-02 12:13 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): simplify cont_bit_noESC_from4() and add comments. 2005-04-02 11:56 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): remove needless memory clear. 2005-04-02 07:28 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): Now alpha 14. - Dramatical VBR speed improvement. 10-20% on typical archtecture (i86, Alpha, Sparc), and 95% on G4. CBR also gains but it is little (2% on the typical arch, 30% on G4). - New and improved ATH level autoadjustment. - Use subblock gain more (CBR and VBR). - Fix quantization bug in count1 region, which causes annoying noise in high-freq. 2005-04-02 07:16 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): supress magic numbers. 2005-03-29 15:07 takehiro * libmp3lame/: machine.h, quantize.c, tables.c, takehiro.c (takehiro-2002_05_07-experimental): supress magic numbers. 2005-03-28 17:26 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): it seems thmath.h decreases spped very much on Alpha system. 2005-03-28 16:58 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix debug/release build is reverted and warnings 2005-03-28 16:57 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): fix built on 64bit machines (I checked it on Alpha and AMD64) 2005-03-28 09:44 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): adjust message width 2005-03-28 03:51 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): fix SCALEFAC_ANYTHING_GOES bug finally! now it gains speed improvement arround 15%. and fix count1 region quantization. 2005-03-28 03:50 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added alignment check when debug build. 2005-03-27 17:48 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix treatment of scale factor band with "anything goes". But it seems there're still bugs arround it. 2005-03-27 16:45 takehiro * libmp3lame/: machine.h, quantize.c, quantize_pvt.h, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): fix it may use preflag on short blocks. use integer value of quantization adjustments. 2005-03-27 15:22 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fix comments one more. 2005-03-27 11:57 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fixed comments 2005-03-27 09:32 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): code clean up. 2005-03-26 19:58 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): fix comment 2005-03-26 19:54 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not call scale_bitcounter() to check the scalefac values is valid or not. (spped up arround 1.5%) 2005-03-26 19:37 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it recognize (scalefac=SCALEFAC_ANYTHING_GOES) + (subblock gain = 2) as not an amplified band. 2005-03-26 10:39 takehiro * libmp3lame/: quantize.c, quantize_pvt.h (takehiro-2002_05_07-experimental): suppress magic numbers 2005-03-26 09:48 takehiro * frontend/: main.c, timestatus.c (takehiro-2002_05_07-experimental): reduce calling lame_get_frameNum() 2005-03-23 03:08 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use subblock_gain more when VBR. 2005-03-23 03:06 takehiro * libmp3lame/: machine.h, tables.c (takehiro-2002_05_07-experimental): cleanup 2005-03-22 16:58 takehiro * libmp3lame/: tables.c, takehiro.c, tables.h (takehiro-2002_05_07-experimental): make scfsi_band[] as static variable. 2005-03-22 13:42 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove gabages. oops... 2005-03-22 13:40 takehiro * libmp3lame/: quantize_pvt.h, tables.c (takehiro-2002_05_07-experimental): more precise ROUNDFAC definition. 2005-03-22 07:13 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix built problem on old (not C99) compilers. 2005-03-21 16:24 takehiro * libmp3lame/: encoder.h, quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): reduce memory copy size. 2005-03-21 14:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): Fix loop variable initialization. This will fix decreasing bitrate too much on VBR. Zerofy "not audible" region at first to increase the speed. 2005-03-20 17:28 bouvigne * libmp3lame/: encoder.c, lame.c, presets.c, quantize.c, quantize.h: allow masking adjustements in ABR/CBR 2005-03-19 18:34 bouvigne * libmp3lame/version.h: alpha 10 2005-03-19 17:51 bouvigne * libmp3lame/presets.c: updated vbr 0/1/2/3 presets 2005-03-19 16:09 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix MPEG2/Layer3 encoding. 2005-03-19 16:05 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2005-03-19 16:04 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): try to use "preflag" more often. 2005-03-19 15:04 bouvigne * libmp3lame/quantize_pvt.c: also use nssfb21 in short blocks 2005-03-19 15:03 bouvigne * libmp3lame/quantize.c: typo 2005-03-19 14:44 bouvigne * libmp3lame/quantize.c: updated psfb21 analog silence detection 2005-03-19 10:41 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): improve (lossless) scalefactor compression 2005-03-19 09:43 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): supress magic numbers 2005-03-19 08:48 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): reduce table size. 2005-03-19 08:21 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-03-19 08:08 takehiro * configure.in (takehiro-2002_05_07-experimental): fix CPU specific optimization option. 2005-03-19 07:33 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial optimization 2005-03-18 16:31 takehiro * libmp3lame/: bitstream.c, machine.h, psymodel.c, quantize.c (takehiro-2002_05_07-experimental): sign bit hack for IEEE754 2005-03-18 16:03 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): simplify 2005-03-18 13:24 takehiro * debian/: control, rules (takehiro-2002_05_07-experimental): sync with the HEAD. 2005-03-18 05:26 rbrito * debian/changelog, debian/control, debian/rules, doc/man/lame.1: Slight modifications to debian packaging (with more to come). Minor changes to the frontend manpage. 2005-03-17 16:46 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added (FLOAT) cast (I hope this is last). 2005-03-17 16:41 takehiro * libmp3lame/: gain_analysis.c, lame.c, psymodel.c, quantize.c, tags.c (takehiro-2002_05_07-experimental): added "(FLOAT)" cast remove redundant #include 2005-03-17 15:03 takehiro * frontend/rtp.c (takehiro-2002_05_07-experimental): fix build problem on cygwin. 2005-03-17 14:34 takehiro * config.h.in, configure (takehiro-2002_05_07-experimental): regen 2005-03-17 14:28 takehiro * configure.in (takehiro-2002_05_07-experimental): do not check the winsocket. this is the preparation for fixing bugid #1164417 2005-03-16 16:07 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): IEEE754 hack for quantizing 0/1 region. 2005-03-16 14:53 takehiro * config.h.in, configure (takehiro-2002_05_07-experimental): regen 2005-03-16 14:52 takehiro * configure.in, libmp3lame/machine.h (takehiro-2002_05_07-experimental): check tgmath.h and use it. 2005-03-15 16:31 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): do not output error message when with --silent. 2005-03-15 15:49 takehiro * configure (takehiro-2002_05_07-experimental): regen. 2005-03-15 15:48 takehiro * configure.in (takehiro-2002_05_07-experimental): play with compiler options on G4. I've got 14% gain from it. 2005-03-15 15:37 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): supress warning. 2005-03-15 00:26 robert * libmp3lame/vbrquantize.c: yet another -Y thing: calc_xmin does not compute upto max_nonzero_coeff in the -Y case. 2005-03-14 22:32 robert * libmp3lame/vbrquantize.c: bugfix for vbr-new when sub block gain violates IXMAXVAL constrain in -Y case 2005-03-14 21:53 robert * libmp3lame/quantize_pvt.c: removed an assert in calc_noise_core_c cod_info->count1 == 0 seems to be a common case 2005-03-14 15:18 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial clean up. 2005-03-14 14:53 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): Separate preflag check from scale bit counting. It changes preflag, but it is undesirable for VBR encoding. 2005-03-14 14:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): IEEE754 hack for quantization in count1 region. 2005-03-14 13:31 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): display 'LR+i' as '%' character. 2005-03-13 17:20 robert * libmp3lame/presets.c: removing placebo -bx from fast presets it's a placebo with vbr-old too, but keep it that way a little bit longer 2005-03-13 17:14 takehiro * configure.in, configure (takehiro-2002_05_07-experimental): yasm needs -m amd64 to output the elf64 objects. 2005-03-13 17:11 takehiro * libmp3lame/i386/: cpua.nas, nasm.h (takehiro-2002_05_07-experimental): now it can be compiled on x86-64 linux (FC3). but still remains lot of work... 2005-03-13 17:01 robert * frontend/mp3x.c: forgot to commit this one, removed unused parameter from usage parameter list 2005-03-13 14:46 robert * libmp3lame/: encoder.c, set_get.c, version.c, version.h: removing unused ATH auto adjust types. JDs is now the only one 2005-03-13 14:43 robert * ACM/ACM.cpp: version 2005-03-13 14:42 robert * frontend/: main.c, parse.c, parse.h: print helptext for internal switches only when internal switches are available 2005-03-13 12:58 takehiro * libmp3lame/i386/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): changed include path option, -i -> -I 2005-03-13 12:31 takehiro * libmp3lame/: lame.c, i386/Makefile.am, i386/Makefile.in, i386/cpu_feat.nas, i386/cpua.nas (takehiro-2002_05_07-experimental): changed CPU feature detection code (which is from GOGO3), because the old one uses pushad/popad which is not supported on x86-64. 2005-03-13 10:16 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-03-13 10:15 takehiro * configure.in (takehiro-2002_05_07-experimental): added yasm check, to prepare for asm code on i86_64. 2005-03-12 23:01 robert * libmp3lame/vbrquantize.c: vbr-new: fixing the -Y bug, that sfb21 wasn't quantized at all 2005-03-12 20:41 takehiro * libmp3lame/: bitstream.c, encoder.h, takehiro.c (takehiro-2002_05_07-experimental): simplify scfsi[] flag. 2005-03-12 20:41 takehiro * libmp3lame/: machine.h, psymodel.c, quantize.c (takehiro-2002_05_07-experimental): clean up "(double)" cast. 2005-03-12 18:12 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): oops. too much optimized... gi->scalefac[0] may be lesser than 0. 2005-03-12 17:39 bouvigne * libmp3lame/lame.c: fix: q2 and higher were NOT enabling substep shaping 2 2005-03-12 17:38 bouvigne * mpglib/mpg123.h: fix for replaygain-accurate 2005-03-12 17:17 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix "stupid" message when -S (bugid #1145932) 2005-03-12 13:58 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): follow variable type change 2005-03-12 13:54 takehiro * configure, configure.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): added ppc directory 2005-03-12 12:35 takehiro * libmp3lame/: bitstream.c, encoder.h, quantize_pvt.h, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): reduce variable size and changed these order, to archive better cache performance. 2005-03-11 19:26 takehiro * libmp3lame/: psymodel.c, psymodel.h, quantize.c, quantize_pvt.h (takehiro-2002_05_07-experimental): added "(FLOAT)" cast. 2005-03-11 17:45 takehiro * mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen 2005-03-11 17:44 takehiro * mpglib/Makefile.am (takehiro-2002_05_07-experimental): added layer[123].h to the distribution. 2005-03-11 17:18 takehiro * Makefile.in, aclocal.m4, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen with the latest gtk.m4 2005-03-11 16:49 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): use max value of loudness. 2005-03-11 16:06 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix a comment 2005-03-11 15:31 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): ATH value should be always same value whatever the value of ATHAdjustLimit is. 2005-03-11 15:29 takehiro * libmp3lame/: psymodel.c, version.h (takehiro-2002_05_07-experimental): implement tonality-aware ATH adjustment. 2005-03-11 15:28 takehiro * libmp3lame/psymodel.h (takehiro-2002_05_07-experimental): enlarge ATH adjustment range to clarify the flaw of ATH adjustment algorithm. 2005-03-11 13:58 takehiro * debian/Makefile.in (takehiro-2002_05_07-experimental): regen... soryy I made it on cygwin... 2005-03-11 11:14 takehiro * libmp3lame/: bitstream.c, newmdct.c, takehiro.c (takehiro-2002_05_07-experimental): added "(FLOAT)" cast. 2005-03-11 10:27 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): remove C++ style comments 2005-03-11 10:18 takehiro * libmp3lame/tables.h (takehiro-2002_05_07-experimental): make sfBandIndex[] as static. 2005-03-11 10:11 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): fix build problem when without decoder (--disable-decoder) 2005-03-11 09:41 takehiro * configMS.h (takehiro-2002_05_07-experimental): fix build problem with Makefile.unix 2005-03-11 09:40 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): supress warnings when without decoder (--disable-decoder) 2005-03-11 09:40 takehiro * frontend/: brhist.c, brhist.h (takehiro-2002_05_07-experimental): make Console_IO as static. 2005-03-11 09:38 takehiro * Makefile.unix (takehiro-2002_05_07-experimental): TAKEHIRO_IEEE754_HACK -> USE_IEEE754_HACK 2005-03-11 09:29 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): remove redundant pragma. this one is declared in configMS.h 2005-03-11 03:06 takehiro * Makefile.in, ACM/Makefile.in (takehiro-2002_05_07-experimental): regen 2005-03-11 03:05 takehiro * ACM/Makefile.am (takehiro-2002_05_07-experimental): remove unused file 2005-03-08 23:07 robert * Makefile.unix, frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/presets.c, libmp3lame/set_get.c, libmp3lame/util.h: removing some unused member of lame_internal_flags structure 2005-03-06 18:59 bouvigne * libmp3lame/takehiro.c: faster noquant_count_bits 2005-03-06 16:56 bouvigne * doc/html/history.html: history 2005-03-06 16:17 bouvigne * libmp3lame/: presets.c, version.h: updated V3 and V2 presets 2005-03-06 13:17 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): changed 2.0f -> (FLOAT)2.0, for --enable-all-double 2005-03-05 18:26 bouvigne * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c, vbrquantize.c: slightly faster quantization (not totally sure if it is really faster) Also fixed a severe bug in ISO quantization when not using the IEEE hack 2005-03-05 13:45 bouvigne * configMS.h, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/util.h: update of the intrinsics coding style 2005-03-05 12:40 bouvigne * libmp3lame/quantize_pvt.c: minor speed increase in calc_noise 2005-03-03 17:01 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): fix IS ratio display. 2005-03-03 16:59 takehiro * frontend/: main.c, timestatus.c (takehiro-2002_05_07-experimental): print out histgram even when CBR encoding. 2005-03-02 17:50 takehiro * config.h.in (takehiro-2002_05_07-experimental): regen 2005-03-02 17:46 takehiro * configure, configure.in (takehiro-2002_05_07-experimental): fix --enable-double-float does not work at all. 2005-03-02 17:01 takehiro * config.h.in (takehiro-2002_05_07-experimental): the previous one contains gabages... regen. 2005-03-02 16:59 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): fix debug build on some non-x86 linux machines. 2005-03-02 16:58 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix for some 64bit machines (ie. Alpha) 2005-03-02 15:35 takehiro * configure, config.h.in (takehiro-2002_05_07-experimental): regen 2005-03-01 16:59 takehiro * configure.in (takehiro-2002_05_07-experimental): add check for vecLib/vDSP.h, to prepare for Altivec optimization. 2005-02-28 22:45 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h, util.h: calc_noise is back to the C version 2005-02-28 16:52 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): some IEEE754 hack for the CPU with small cache. 2005-02-27 22:03 bouvigne * libmp3lame/quantize_pvt.c: calc_noise: fixed an assertion failure in frames with no big_values 2005-02-27 20:43 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h, util.h: sse version of calc_noise (speedup is very small) 2005-02-27 17:40 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it sometimes fail to encode the short block. 2005-02-27 15:08 bouvigne * configMS.h, libmp3lame/quantize.c, libmp3lame/util.h: slightly faster init_xrpow_core_sse 2005-02-27 14:25 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): now alpha13 - replaygain radio/accurate is implemented. * including replaygain support even when the input is mp3 file. this is not supported on the current LAME3.x - support "TLEN" ID3v2 tag. - fix frame # estimation when the input is mp3. - fix VBR tag infomation leakage. - fix mpeg1 layer1,2 decoder bug. - Robert's new eye candy for the frontend. - one more reentrant work for the MP3 decoder - SSE version of FFT, done by Gilad Raichshtain - small optimizations. but replaygain makes it slow down much, the optimizations are hidden by it... - some PPC code added from Robert Stiles and Hans-Peter Dusel. But not work at all, at least currently. 2005-02-27 14:16 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): sync with the main branch. - Robert's new eye candy. 2005-02-26 14:06 takehiro * frontend/: brhist.c, main.c, main.h, parse.c, timestatus.c (takehiro-2002_05_07-experimental): fix duplicated variable of "brhist" 2005-02-26 09:38 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): added TLEN tag when id3v2 tag is used. (RFE #1064076) 2005-02-26 06:21 takehiro * frontend/get_audio.c: fix mp3 frame # estimation (bugid #934072). 2005-02-26 05:41 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix # of mp3 frames estimation (bugid #934072). 2005-02-25 19:01 bouvigne * configMS.h: intrinsics support for ICL 2005-02-25 01:21 robert * frontend/: brhist.c, timestatus.c: RH_HIST: don't print unused channel modes and block types 2005-02-24 00:27 robert * frontend/brhist.c: fix scrolling problem I introduced with the last commit 2005-02-23 17:58 bouvigne * libmp3lame/quantize_pvt.c: slightly faster calc_noise 2005-02-22 02:06 robert * libmp3lame/psymodel.c: Compile time option to enable GPSYCHO like block type switching in NSPSYTUNE. Due to differences in convolution, the switching does not happen exactly as in GPSYCHO. (disabled by default, edit psymodel.c to activate) 2005-02-19 22:47 robert * frontend/: brhist.c, brhist.h, main.c: some statistics about block type distribution 2005-02-19 18:48 bouvigne * configMS.h: conditionnal intrinsics support for MSVC (probably also works for ICL) 2005-02-19 15:32 bouvigne * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, util.h: SSE intrinsic version of init_xrpow It is now using 1% of total time (using 4% in the standard version) 2005-02-15 06:39 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix for old compilers. 2005-02-14 17:01 takehiro * TODO (takehiro-2002_05_07-experimental): added MP3 transcoding TODO. 2005-02-14 15:46 takehiro * libmp3lame/tags.c, testcase.mp3 (takehiro-2002_05_07-experimental): fix information leakage when VBR tag write out. 2005-02-14 15:14 takehiro * Makefile.am, Makefile.in, testcase.mp3 (takehiro-2002_05_07-experimental): added tag itself to test when "make test" 2005-02-14 13:15 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix it crashes with floating point exception when without --clipdetect option. 2005-02-14 13:12 takehiro * libmp3lame/: bitstream.c, encoder.h, tags.c (takehiro-2002_05_07-experimental): make the clip detection work. 2005-02-14 13:11 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): do not use "double" 2005-02-14 12:58 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2005-02-14 12:54 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): clean up. - remove duplicated pragma. - do not unroll manually. 2005-02-13 16:35 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): make it reentrant. 2005-02-13 14:42 bouvigne * libmp3lame/psymodel.c: minor speedup 2005-02-12 16:51 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): oops, enbugged... now --replaygain-accurate runs (at least it does not crash). 2005-02-12 16:31 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix decoder initialization when --replaygain-accurate. 2005-02-12 16:30 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): cleanup 2005-02-12 15:59 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): prepare for --replaygain-accurate. only preparation. not works. 2005-02-12 15:58 takehiro * include/lame.h (takehiro-2002_05_07-experimental): added/cleaned up the replaygain related APIs. 2005-02-12 08:32 takehiro * frontend/main.c, frontend/main.h, frontend/parse.c, libmp3lame/bitstream.c, libmp3lame/encoder.h, libmp3lame/gain_analysis.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): replaygain support (1) - fast replaygain now works. 2005-02-09 01:45 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): code simplification 2005-02-08 11:06 takehiro * libmp3lame/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): fix mingw build problem, as is done on the main branch by Robert. 2005-02-07 22:02 robert * configure.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in: fixing mingw32 configure problems 2005-02-07 13:45 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): added (FLOAT) cast to the floating point constants.(one more) 2005-02-07 12:28 takehiro * libmp3lame/: encoder.h, lame.c (takehiro-2002_05_07-experimental): reduce malloc/free as is done in the main branch by Robert. 2005-02-06 23:05 robert * libmp3lame/: quantize.c, vbrquantize.c, vbrquantize.h: some MSVC warning level 4 issues resolved 2005-02-06 20:23 robert * libmp3lame/: quantize.c, takehiro.c, vbrquantize.c: resolved compiler warnings 2005-02-06 19:49 robert * libmp3lame/: lame.c, machine.h, quantize_pvt.c, util.c, util.h, vbrquantize.c: lame.c: fixed lost break in lame_init_parms reduced calloc/free calls (where called once per frame, now once per run) machine.h: removed IIPOW20 util.c, util.h: removed VBR_t, added in_buffer_[0/1] to lame_internal_flags vbrquantize.c: fixed some small rounding problem in quantize routines 2005-02-05 14:14 robert * libmp3lame/vbrquantize.c: eleminating dead code expanding preprocessor defines works probably not with GPsycho anymore, but NSPSYTUNE only (G.not tested) doesn't try to use 126 bits at minimum per granule anymore, less bloating on mono like signals where the difference signal is almost zero. 2005-02-05 13:32 bouvigne * libmp3lame/version.h: bumped alpha 2005-02-05 13:31 bouvigne * libmp3lame/lame.c: enabled ath adjustment for abr/cbr 2005-02-04 18:34 bouvigne * libmp3lame/lame.c: sorry, I shouldn't have commited this one 2005-02-02 04:35 takehiro * include/lame.h (takehiro-2002_05_07-experimental): remove comma, which is not allowed in C++ (but allowed in C) 2005-02-02 04:11 takehiro * libmp3lame/: psymodel.c, set_get.c (takehiro-2002_05_07-experimental): reduce warning when with "-W" option. 2005-02-01 10:29 bouvigne * libmp3lame/: bitstream.c, lame.c, takehiro.c: reduced warnings 2005-01-30 22:31 robert * Makefile.unix, libmp3lame/vbrquantize.c: scalefactor allocation should work now as expected 2005-01-30 22:27 robert * libmp3lame/: machine.h, quantize_pvt.c, quantize_pvt.h: off by one bug: we do access iipow20 by values in [0,Q_MAX2] inclusive, that makes Q_MAX2+1 entries in total 2005-01-30 19:34 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): there's no GPSYCHO. 2005-01-30 19:13 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-01-30 19:13 takehiro * configure.in (takehiro-2002_05_07-experimental): fix automatic CPU specific optimization on cygwin. 2005-01-30 18:01 takehiro * configure (takehiro-2002_05_07-experimental): regen. 2005-01-30 18:00 takehiro * configure.in (takehiro-2002_05_07-experimental): hope this will fix the build failure on MinGW + NASM 2005-01-30 16:00 takehiro * libmp3lame/: encoder.h, lame.c, tables.c (takehiro-2002_05_07-experimental): optimize the layout of the coefficients for resampling. 2005-01-30 15:51 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix it outputs message even when with --silent. 2005-01-30 14:49 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): added cast to the floating point constants (one more) 2005-01-30 14:42 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): added cast to floating point constants. 2005-01-30 12:31 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use bit-consumption to estimate the "goodness" of quantization, as is done in LAME 3.x. 2005-01-29 19:40 bouvigne * libmp3lame/presets.c: updated vbr presets 9 to 4 2005-01-29 18:42 bouvigne * libmp3lame/takehiro.c: fixed a crash 2005-01-29 18:11 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h, takehiro.c: quantize_xrpow: also re-use previously computed data in short blocks 2005-01-25 21:47 bouvigne * libmp3lame/quantize.c: X9: more bits into reservoir 2005-01-23 18:07 takehiro * frontend/parse.c, include/lame.h, libmp3lame/encoder.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): added replaygain/nogap API added replaygain commandline option. 2005-01-23 18:07 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): cosmetic 2005-01-23 18:06 takehiro * HACKING (takehiro-2002_05_07-experimental): update current state. 2005-01-23 16:25 bouvigne * libmp3lame/takehiro.c: oops, quantize_xrpow optimization has been accidentally disabled in november 2005-01-23 14:27 bouvigne * libmp3lame/lame.c: reinstated old q1 (increase only 1 sf per iteration) 2005-01-22 18:15 bouvigne * libmp3lame/quantize_pvt.c: problem with q1 and q0 finally found. I am unable to trace it prior to "the big 3.94 merge". 2005-01-22 09:19 takehiro * libmp3lame/: tags.c, tags.h (takehiro-2002_05_07-experimental): fix for unsigned/singed comparison warning. 2005-01-20 17:10 takehiro * libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): added fftsse.nas support /\\ - \\/ 2005-01-20 17:07 takehiro * Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): support SSE version of FFT. 2005-01-20 16:38 takehiro * libmp3lame/quantize.c: to clarify the relationship of "if-then-else" and suppress warnings from gcc, added braces. 2005-01-20 16:35 takehiro * libmp3lame/i386/: Makefile.am, Makefile.in, choose_table.nas, fftsse.nas, ffttbl.nas (takehiro-2002_05_07-experimental): clean up. remove unused code and tables, and update comments. 2005-01-20 16:28 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): cosmetic 2005-01-20 16:28 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization 2005-01-19 16:08 takehiro * libmp3lame/: tables.c, i386/Makefile.am, i386/Makefile.in, i386/fftsse.nas, i386/ffttbl.nas (takehiro-2002_05_07-experimental): patched version of FHT_SSE (by Gilad Raichshtain). and support code for it (by me). 2005-01-18 07:04 takehiro * libmp3lame/bitstream.c, frontend/get_audio.c (takehiro-2002_05_07-experimental): suppress warnings on MSVC6 2005-01-16 18:19 takehiro * libmp3lame/bitstream.c, libmp3lame/lame.c, mpglib/interface.h (takehiro-2002_05_07-experimental): fix for when --disable-decoder 2005-01-16 18:12 takehiro * mpglib/interface.h (takehiro-2002_05_07-experimental): added prototype declaration of decode_init_for_replaygain() 2005-01-16 18:08 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix memory leak when RG used. This is enbugged by the previos commit. 2005-01-16 18:00 takehiro * libmp3lame/: bitstream.c, lame.c, mpglib_interface.c (takehiro-2002_05_07-experimental): prepare for ReplayGain merge. 2005-01-15 18:12 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): to prevent a floating point exception, add a limit to retry. 2005-01-15 18:10 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial optimization 2005-01-15 17:15 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): use libsndfile when input is unknown RIFF-wave format 2005-01-15 14:15 takehiro * libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): libmp3lame/version.c was removed. 2005-01-15 14:08 takehiro * .cvsignore (takehiro-2002_05_07-experimental): added configure-stamp 2005-01-15 14:07 takehiro * TODO (takehiro-2002_05_07-experimental): update frontend TODO. 2005-01-15 14:02 takehiro * Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): libmp3lame/version.c was removed. 2005-01-15 12:56 takehiro * configure (takehiro-2002_05_07-experimental): regen 2005-01-15 12:56 takehiro * configure.in (takehiro-2002_05_07-experimental): always use libsndfile if it is found. 2005-01-15 12:30 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix mp3 input....oops. 2005-01-15 12:27 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix endianness of RIFF wave PCM. 2005-01-15 12:05 takehiro * frontend/: get_audio.c, get_audio.h, gtkanal.c, main.c, main.h, parse.c (takehiro-2002_05_07-experimental): cleaning up LIBSNDFILE, part 3. use libsndfile only when the frontend does not know how to handle the input file format. 2005-01-15 10:54 takehiro * frontend/rtp.h (takehiro-2002_05_07-experimental): make them static 2005-01-15 10:53 takehiro * frontend/mp3rtp.c (takehiro-2002_05_07-experimental): make those which can be static as static. 2005-01-15 09:43 takehiro * frontend/: get_audio.c, parse.c (takehiro-2002_05_07-experimental): clean up arround libsndfile, part 2. 2005-01-15 09:30 takehiro * frontend/: get_audio.c, get_audio.h (takehiro-2002_05_07-experimental): part of cleaning up LIBSNDFILE 2005-01-15 07:25 takehiro * frontend/: get_audio.c, get_audio.h, gtkanal.c, parse.c (takehiro-2002_05_07-experimental): clean up MPEG Layer 1,2,3 input 2005-01-13 19:18 bouvigne * libmp3lame/version.h: bump alpha 2005-01-13 19:17 bouvigne * libmp3lame/: quantize.c, quantize_pvt.h: use bits in quant_comp 2005-01-13 18:54 bouvigne * libmp3lame/presets.c: updated ath values for abr/cbr 2005-01-13 18:20 bouvigne * frontend/gtkanal.c, libmp3lame/lame-analysis.h, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h: Replaced X9 by the former X10 (ssd). The abr/cbr modes are using this comparison 2005-01-13 16:28 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix rounding of bitrate calculation 2005-01-12 18:24 takehiro * mpglib/: common.c, layer1.c, layer2.c (takehiro-2002_05_07-experimental): patches from the latest debian package, including some boundary check code. 2005-01-10 17:38 takehiro * libmp3lame/: lame.c, quantize.c, quantize.h (takehiro-2002_05_07-experimental): changed one function name, iteration_loop -> CBR_iteration_loop 2005-01-10 17:11 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix it always output the banner even when with --silent/--quiet. 2005-01-10 14:48 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): testcase for alpha12 2005-01-10 13:17 takehiro * libmp3lame/quantize_pvt.h (takehiro-2002_05_07-experimental): remove outdated comments 2005-01-10 13:16 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): update alpha version and psymodel version - fix too much slow down with higher VBR quality (like -V0) - changed long/short block switching code. 2005-01-10 13:13 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): changed VBR strategy to prevent "slow down" when the higher quality (like -V0) is selected. When we cannot encode the frame without noticible distortion with the allowed bitrate, simply encode the frame with the highest allowed bitrate. 2005-01-10 13:10 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it abort when higher VBR. enbug at the previous comit. sorry. 2005-01-10 12:38 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): for better error message 2005-01-10 12:21 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): better use of "anything goes" scalefactor band when VBR. faster and smaller bitrate without any quality regression (theoretically) 2005-01-10 10:06 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): changed block switching to use "sum" of energy in subblocks, instead of their "max". and improve comments. 2005-01-10 09:23 takehiro * libmp3lame/quantize_pvt.c: seems it cannot build on Linux and some Unix. to fix this, I changed max() -> Max(). 2005-01-09 17:31 bouvigne * frontend/gtkanal.c, libmp3lame/lame-analysis.h: display SSD in mp3x 2005-01-09 17:31 bouvigne * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: do not compute noise if best quant has no distorted band and current quant is bigger than the best one 2005-01-09 09:19 takehiro * frontend/: get_audio.h, gtkanal.c, mp3x.c (takehiro-2002_05_07-experimental): cosmetic changes (fix comments and so on) 2005-01-09 09:14 takehiro * frontend/mp3rtp.c (takehiro-2002_05_07-experimental): clean up, mainly fixing comments 2005-01-09 09:06 takehiro * libmp3lame/: Makefile.am, Makefile.in, set_get.c, version.c (takehiro-2002_05_07-experimental): merged version.c into set_get.c and fixed comments (there's no GPSYCHO support) 2005-01-08 11:47 bouvigne * libmp3lame/version.h: bumped alpha 2005-01-08 11:46 bouvigne * libmp3lame/psymodel.c: limited ATH effect in short blocks. This is fundamentally wrong, but otherwise it produces bad quality 2005-01-08 10:58 bouvigne * libmp3lame/: lame.c, presets.c, quantize.c, quantize_pvt.c, quantize_pvt.h: updated VBR presets to match the cbr/abr changes (also corrected the --cbr behavior) 2005-01-08 10:56 bouvigne * doc/html/history.html: history 2005-01-05 14:23 takehiro * frontend/: main.c, main.h, mp3x.c, parse.c (takehiro-2002_05_07-experimental): remove "lame_XXX" function to separate name space 2005-01-05 11:08 takehiro * TODO (takehiro-2002_05_07-experimental): updated. BTW, it seems plusv site is vanished... 2005-01-01 18:19 takehiro * configure, configure.in (takehiro-2002_05_07-experimental): adjust spacing 2004-12-31 14:42 takehiro * frontend/: get_audio.c, main.c, main.h, parse.c (takehiro-2002_05_07-experimental): one more clean up arround get_audio 2004-12-31 14:33 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): simplify 2004-12-31 12:22 takehiro * frontend/.cvsignore (takehiro-2002_05_07-experimental): added mp3rtp to ignore 2004-12-31 12:07 takehiro * frontend/main.c: merge 1.73.2.34 -> 1.73.2.35 fix it outputs CR even when --silent/--quiet (bug #973302) 2004-12-31 11:56 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix it outputs CR even when --silent/--quiet (bug #973302) 2004-12-31 11:26 takehiro * frontend/mp3rtp.c: fix buffer overrun(same in my experimental branch). 2004-12-31 11:23 takehiro * frontend/mp3rtp.c (takehiro-2002_05_07-experimental): fix buffer overrun(related to bug #1036590) # but still it does not work correctly 2004-12-31 07:37 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): adjust ABR quality/bitrate control 2004-12-27 16:13 bouvigne * libmp3lame/lame.c: cbr/abr: adjusted lowpass 2004-12-27 15:32 bouvigne * libmp3lame/presets.c: abr/cbr: adjusted m/s and short/long 2004-12-27 10:03 takehiro * config.h.in (takehiro-2002_05_07-experimental): added for large(>2GB) file support. 2004-12-19 18:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix scalefactor band region... oops. 2004-12-19 18:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix the calculation of scalefactor value when VBR. In the band whose allowed noise threshold is very high, we do not need to encode the quantized values. Now LAME uses it properly. 2004-12-19 17:16 takehiro * libmp3lame/quantize_pvt.h (takehiro-2002_05_07-experimental): added parenthis to avoid some side effects. 2004-12-13 18:16 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): changed the order of members to localize the write access of memory. 2004-12-13 18:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): added hard limits of threshold for ABR, to prevent too much degration 2004-12-13 17:45 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it sometimes slows down too much. 2004-12-13 17:16 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): change threshold for short blocks same as that of long blocks. 2004-12-13 17:04 takehiro * config.h.in (takehiro-2002_05_07-experimental): TAKEHIRO_IEEE754 -> USE_IEEE754 2004-12-13 15:09 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-12-13 14:01 takehiro * DEFINES, Makefile.MSVC, configMS.h, configure.in, libmp3lame/bitstream.c, libmp3lame/machine.h, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): TAKEHIRO_IEEE754_HACK -> USE_IEEE754_HACK 2004-12-13 14:01 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): changed a commet. 2004-12-13 12:40 takehiro * mpglib/layer3.c (takehiro-2002_05_07-experimental): fix MPEG2 decoding, from foobar2k 2004-12-12 18:08 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): use MDCT filter in -q5 and the better. 2004-12-12 17:52 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix typo 2004-12-12 17:52 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix table value initialization. 2004-12-12 17:51 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): fix filtering not working completely... oops. 2004-12-12 10:57 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): fix comment 2004-12-12 10:47 takehiro * libmp3lame/: encoder.h, lame.c, newmdct.c, tables.c (takehiro-2002_05_07-experimental): new filtering algorithm. Better resolution (110Hz @ fs=44.1kHz) and "not" slow much. but not enabled by default. 2004-12-12 08:26 takehiro * libmp3lame/i386/ssesub.c (takehiro-2002_05_07-experimental): test implementation of SSE support with imtrinsic. TODO: - how to build it and configure support ? - need more functions to implement. 2004-12-10 17:56 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization in lossless coding. 2004-12-10 02:35 takehiro * libmp3lame/: encoder.h, lame.c, tables.c, i386/choose_table.nas, i386/cpu_feat.nas (takehiro-2002_05_07-experimental): MMX2 support 2004-12-10 00:21 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-12-09 17:36 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): cosmetic changes & reduce warnings. 2004-12-09 17:29 takehiro * libmp3lame/: quantize.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): MMX version of xr_max() make VBR/ABR 1% faster. 2004-12-09 17:05 takehiro * configure.in (takehiro-2002_05_07-experimental): merge from main branch. - changed words; "default: foobar" -> "default=foobar" - enable bitrate histogram by default 2004-12-05 18:10 takehiro * libmp3lame/: bitstream.c, takehiro.c (takehiro-2002_05_07-experimental): fix encoding failure of velvet.wav with CBR 128 2004-12-05 18:09 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): cosmetic change 2004-12-05 17:59 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): considering the shape of window function when long/short block switching. 2004-12-05 12:18 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen with "tag fixed" version. 2004-12-05 12:16 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): fix VBR(LAME) tag contains a gabage. 2004-12-02 16:29 takehiro * frontend/.indent.pro, libmp3lame/.indent.pro, misc/.indent.pro (takehiro-2002_05_07-experimental): I think no one uses .indent.pro so I remove them. 2004-12-02 16:27 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): better threshold controll for ABR. 2004-11-30 19:00 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it may overflow 2004-11-30 18:57 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): VBR speed optimization 2004-11-30 18:55 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix assertion 2004-11-30 18:54 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): optimization by changing table values. 2004-11-30 10:19 takehiro * configMS.h (takehiro-2002_05_07-experimental): fix for MSVC "inline" keyword 2004-11-30 09:39 takehiro * libmp3lame/: encoder.h, lame.c (takehiro-2002_05_07-experimental): precalculate width information 2004-11-30 08:58 takehiro * libmp3lame/: encoder.h, lame.c, quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): table size reduction 2004-11-30 08:55 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): clean up. 2004-11-30 07:59 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): generalized signbits encoding hack for IEEE754 2004-11-30 07:52 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): IEEE754 hack for sign bit. 2004-11-30 07:41 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix decoding... oops... 2004-11-30 01:07 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): cleanup 2004-11-30 01:05 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): tuning VBR scalefactor prediction and fix treatment of almost silent scalefactor. 2004-11-29 23:41 takehiro * libmp3lame/psymodel.c: fix ATHlower is always "0". 2004-11-29 18:01 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): fix comments 2004-11-29 18:01 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): changed VBR scalefactor prediction method. use "previous" scalefactor's values as predicted value. 2004-11-29 16:46 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix for out of memory. 2004-11-29 04:51 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): remove unused definitions 2004-11-29 04:51 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): remove console.h 2004-11-28 19:10 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h, takehiro.c: some FLOAT -> int 2004-11-28 19:09 takehiro * frontend/: Makefile.am, Makefile.in, console.c, console.h (takehiro-2002_05_07-experimental): remove unused files. 2004-11-28 18:21 takehiro * Dll/BladeMP3EncDLL.c: added brancket to fix bugid#1003342 on sf.net 2004-11-28 17:15 takehiro * frontend/get_audio.c, frontend/parse.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): "-s" option is now prior to the frequency data in .wav file header. 2004-11-28 15:21 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): changed double constants into FLOAT type 2004-11-28 14:47 takehiro * libmp3lame/: lame.c, mpglib_interface.c, quantize.c, takehiro.c (takehiro-2002_05_07-experimental): To optimize more, changed sign of gfc->width[] (now they are minus value) 2004-11-28 14:24 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization 2004-11-28 14:09 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization 2004-11-28 14:01 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): now ABR is based on VBR, so the -q setting has no meaning. 2004-11-28 13:58 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): changed table type int -> char, to avoid cache line conflict. 2004-11-28 13:40 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): little bit optimizing 2004-11-28 12:58 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-11-28 12:57 takehiro * configure.in (takehiro-2002_05_07-experimental): oops... use "-mcpu" and "-mtune" by checking gcc version. 2004-11-28 11:38 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): use calculation instead of table. (encoding results may be different from previous versions, but that's "lossless" difference) 2004-11-28 11:06 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): make them static 2004-11-28 10:33 takehiro * configure, configure.in (takehiro-2002_05_07-experimental): changed -mcpu -> -mtune, because newer gcc doesn't like -mcpu. 2004-11-28 08:47 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-11-28 08:47 takehiro * configure.in (takehiro-2002_05_07-experimental): changed optimization option 2004-11-27 19:43 takehiro * Makefile.MSVC, Makefile.in, Makefile.unix, aclocal.m4, configure, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, frontend/get_audio.c, frontend/get_audio.h, frontend/lame_vc6.dsp, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x_vc6.dsp, frontend/portableio.c, frontend/portableio.h, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): remove portableio.[ch] use automake 1.9.2 to regen the auto* stuffs. 2004-11-27 17:28 takehiro * frontend/: get_audio.c, portableio.c, portableio.h (takehiro-2002_05_07-experimental): remove Read32BitsHighLow() 2004-11-27 17:21 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix file size reading 2004-11-27 17:21 takehiro * frontend/: portableio.c, portableio.h (takehiro-2002_05_07-experimental): remove unused functions. 2004-11-27 09:57 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): remove AIFF support from LAME standard input code. if you need an AIFF support, use libsndfile instead. 2004-11-23 18:38 takehiro * configure, configure.in, frontend/get_audio.c (takehiro-2002_05_07-experimental): support libsndfile 1.0.x (and remove support that of 0.x) 2004-11-23 15:18 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization. 2004-11-23 15:18 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): - ABR quality adjustment. (oops, I forget to commit in the previous one) 2004-11-23 15:17 takehiro * libmp3lame/: quantize.c, encoder.h (takehiro-2002_05_07-experimental): - ABR quality adjustment (little bit). - manually inlining finish_VBR_coding() 2004-11-23 09:46 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): supress magic numbers 2004-11-23 08:27 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization by reducing branch. 2004-11-21 18:45 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): now alpha 11, including new ABR 2004-11-21 18:45 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): clean up 2004-11-21 18:41 takehiro * libmp3lame/: encoder.h, quantize.c (takehiro-2002_05_07-experimental): brand new ABR algorith. - simply adjust the psycho-threshold by checking (target bitrate) vs. (current bitrate) 2004-11-21 18:32 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): fix VBR tag is completely messed up! 2004-11-21 12:28 takehiro * libmp3lame/: bitstream.c, encoder.h, lame.c, psymodel.c, quantize.c, quantize_pvt.h, tables.c (takehiro-2002_05_07-experimental): simplify the initialization of gr_info[][] 2004-11-21 12:26 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): cosmetic change 2004-11-21 12:25 takehiro * libmp3lame/tables.h (takehiro-2002_05_07-experimental): changed comments 2004-11-21 12:23 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): optimize in the case of width = 2. 2004-11-21 10:45 takehiro * frontend/: get_audio.c, get_audio.h, main.c (takehiro-2002_05_07-experimental): use 32bit input even when MP3 decoding, to prepare better precision mp3 decoder. remove "get_audio16()" function, because now it is not needed at all. 2004-11-20 18:43 takehiro * frontend/: gtkanal.c, main.c (takehiro-2002_05_07-experimental): To make mp3x use 32bit integer encoding interface. Because it has used 16bit interface, it could not analyze the 32bit input data. Now it is fixed. 2004-11-20 11:49 takehiro * frontend/gpkplotting.c (takehiro-2002_05_07-experimental): merge from main branch. - more explicit display of noise values 2004-11-17 19:54 bouvigne * libmp3lame/: quantize.c, util.h: noise shaping type 3: amplify bands within 50% of distortion, then refine by amplifying the most distorted band 2004-10-24 14:26 bouvigne * libmp3lame/version.h: bump alpha 2004-10-24 14:25 bouvigne * libmp3lame/lame.c: reworked -q values: noise_shaping_amp 2 removed full Huffman search removed in q0 full outer loop search enabled in q0 2004-10-24 14:21 bouvigne * libmp3lame/: quantize.c, util.h: full outer loop search: allows to search for better quantization until global_gain==255 2004-09-18 10:20 takehiro * ACM/ACM.cpp (takehiro-2002_05_07-experimental): sync with main branch (r1.17) - fix by Dmitriy Startsev 2004-09-18 10:09 takehiro * Dll/BladeMP3EncDLL.c (takehiro-2002_05_07-experimental): fix bug item #1003342 2004-08-19 19:49 bouvigne * doc/html/history.html: added 3.96.1 2004-08-19 19:36 bouvigne * doc/html/modes.html: spelling, clarifications 2004-07-28 20:33 robert * configure, configure.in (RELEASE__3_96-bugfix-branch): updating configure to version number 3.96.1 2004-07-21 18:59 bouvigne * doc/html/: history.html, index.html (RELEASE__3_96-bugfix-branch): updated for 3.96.1 2004-07-21 18:52 bouvigne * ACM/: ACM.cpp, ACMStream.cpp, acm.rc (RELEASE__3_96-bugfix-branch): sync fixes from main branch 2004-07-21 18:46 bouvigne * ACM/ACM.cpp: fix by Dmitriy Startsev 2004-07-11 18:12 bouvigne * ACM/acm.rc: updated version number because of recent fixes 2004-07-11 18:11 bouvigne * ACM/ACMStream.cpp: fixed a potential crash 2004-07-11 18:05 bouvigne * ACM/ACM.cpp: Should fix the display issue under win95 2004-07-11 17:11 bouvigne * ACM/ACM.cpp: fix crash when used through directshow. It still does not work in this configuration, but at least it does not crash anymore. 2004-06-27 19:32 robert * libmp3lame/psymodel.c (RELEASE__3_96-bugfix-branch): fixed short block detection using mid and side channels 2004-06-27 13:02 bouvigne * libmp3lame/psymodel.c: fixed short block detection using mid and side channels 2004-06-26 17:08 robert * Makefile.unix, ACM/ACM.cpp, libmp3lame/gain_analysis.c, libmp3lame/gain_analysis.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/version.h (RELEASE__3_96-bugfix-branch): back porting some bug fixes into 3.96 stable branch patch by takehiro: fix bug id 921798 http://sourceforge.net/tracker/index.php?func=detail&aid=921798&group_id=290&atid=100290 This is reported as bug for "BCC", but it may happen for every compiler. patch by olcios: A better fix for the FP x86 problem. Provided by Andrew Church. Modified by olcios. patch by bouvigne: restored use of padding when not using bit reservoir patch by robert: bug fix for lame crashing occasionally when using --vbr-new 2004-06-26 15:35 bouvigne * libmp3lame/encoder.c: lame_encode_frame_init 2004-06-20 17:28 bouvigne * doc/html/history.html, libmp3lame/lame.c: restored use of padding when not using bit reservoir 2004-06-18 19:15 bouvigne * libmp3lame/: bitstream.c, encoder.c, l3side.h, lame.c, mpglib_interface.c, newmdct.c, psymodel.c, quantize.c, quantize_pvt.c, quantize_pvt.h, reservoir.c, takehiro.c, util.c, VbrTag.c, util.h, vbrquantize.c, vbrquantize.h, version.h: FLOAT8 -> FLOAT 2004-06-06 15:31 bouvigne * frontend/: gpkplotting.c, gtkanal.c: more explicit display of noise values 2004-06-06 14:15 bouvigne * frontend/gtkanal.c: display more scalefactor band splitting lines. (as in exp branch) 2004-06-06 09:48 bouvigne * doc/html/history.html: history 2004-06-05 15:46 bouvigne * libmp3lame/quantize.c: small speedup: init_xrpow only up to max non-zero coeff 2004-05-31 17:35 bouvigne * libmp3lame/takehiro.c: reduced the number of calls to quantization function 2004-05-27 23:55 robert * libmp3lame/version.h: now at 3.97 alpha 2 2004-05-27 23:52 robert * libmp3lame/: takehiro.c, vbrquantize.c: bug fix for lame crashing occasionally when using --vbr-new PS: scalefactor allocation is still not optimal 2004-05-26 21:37 bouvigne * libmp3lame/takehiro.c: fixed a stupid bug 2004-05-26 21:04 bouvigne * libmp3lame/takehiro.c: fixed a bug in quantize_xrpow, but it is still crashing Oddly, cbr/abr are working fine, and low vbr settings are also working fine. -V2 is not working 2004-05-23 13:16 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h, takehiro.c, util.h: Use function pointer to select between quantization methods. This should ease plugin of vectorized versions 2004-05-23 12:47 bouvigne * libmp3lame/takehiro.c: factorized code which is selecting which lines to quantize 2004-05-23 12:43 bouvigne * configMS.h: version 2004-05-23 06:23 takehiro * libmp3lame/: tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): make some tables as static 2004-05-23 04:23 takehiro * libmp3lame/i386/: choose_table.nas, fft3dn.nas, quantSSE.nas (takehiro-2002_05_07-experimental): fix possible link problem on cygwin 2004-05-22 16:18 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): fix cygwin build 2004-05-22 14:26 takehiro * libmp3lame/: encoder.h, quantize_pvt.h, tables.c, takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): reduce MMX code, because C code is faster than asm one :p and trivial coding tweaks. 2004-05-22 14:02 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimization by reducing conditional jumps 2004-05-22 13:53 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): optimization by changing multiply -> shift 2004-05-22 10:54 takehiro * libmp3lame/: takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): faster choose_table_*() implimentation. use cached value of ix_max(). 2004-05-22 09:14 takehiro * libmp3lame/: takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): changed choose_table_*() API, for further optimizations. 2004-05-16 16:57 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): choose_from2 is only used when table=1 or 3. 2004-05-16 16:54 takehiro * libmp3lame/tags.c (takehiro-2002_05_07-experimental): added ReplayGain tag output. 2004-05-16 16:49 takehiro * include/lame.h, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/tags.c (takehiro-2002_05_07-experimental): Changed API of tag-output function making it possible to return the error code. and clean up arround tag output code. 2004-05-16 16:47 takehiro * libmp3lame/gain_analysis.c (takehiro-2002_05_07-experimental): cosmetic 2004-05-16 16:46 takehiro * frontend/: get_audio.c, main.c, portableio.c, portableio.h (takehiro-2002_05_07-experimental): trivial 2004-05-16 12:48 takehiro * Makefile.unix (takehiro-2002_05_07-experimental): to follow that amiga_mpega.c is removed. 2004-05-16 12:47 takehiro * frontend/Makefile.in (takehiro-2002_05_07-experimental): regen 2004-05-15 13:06 takehiro * Makefile.MSVC, libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): added gain_analysis.[ch] 2004-05-15 13:04 takehiro * ACM/LameACM.inf (takehiro-2002_05_07-experimental): (very experimental thing) added "register/unregister program" 2004-05-15 13:03 takehiro * ACM/TODO (takehiro-2002_05_07-experimental): it always "preset" so the itmes are removed. 2004-05-15 12:58 takehiro * Makefile.unix (takehiro-2002_05_07-experimental): fix testcase added gain_analysis 2004-05-15 10:37 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): cosmetic 2004-05-15 10:09 takehiro * frontend/: Makefile.am, amiga_mpega.c (takehiro-2002_05_07-experimental): do not use amiga_mpega.c. use mpg123 instead. 2004-05-15 08:56 takehiro * libmp3lame/: bitstream.c, encoder.h, gain_analysis.c (takehiro-2002_05_07-experimental): added replaygain calculation code. (but not enabled yet) 2004-05-14 19:29 aleidinger * Makefile.in, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen with new auto* version 2004-05-14 19:26 aleidinger * configure: regen with new auto* version 2004-05-14 19:22 aleidinger * aclocal.m4: regen with new auto* version 2004-05-14 19:20 aleidinger * frontend/depcomp, libmp3lame/depcomp, mpglib/depcomp, depcomp, install-sh, missing: update to a new version 2004-05-14 19:12 aleidinger * testcase.mp3: update it to have a more sane number 2004-05-14 19:11 aleidinger * Makefile.am: Tell the users that they do not have to care about the output of make test. 2004-05-14 17:29 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2004-05-14 17:11 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): reduce warning 2004-05-14 16:55 takehiro * libmp3lame/Makefile.am (takehiro-2002_05_07-experimental): added gain_analysis.[ch] 2004-05-05 06:34 takehiro * libmp3lame/: lame.c, mpglib_interface.c (takehiro-2002_05_07-experimental): free the decoding work area of replaygain analysis. 2004-05-05 06:29 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix memory leakage when it uses decoding functions. 2004-05-05 06:29 takehiro * libmp3lame/: gain_analysis.c, gain_analysis.h (takehiro-2002_05_07-experimental): sync with the latest version 2004-05-05 06:27 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): fix for the machine without memset() 2004-05-05 06:23 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix for the machine without memset() 2004-05-05 06:22 takehiro * frontend/: get_audio.c, main.c (takehiro-2002_05_07-experimental): one more AIFF cleanup 2004-05-05 06:18 takehiro * frontend/: get_audio.c, get_audio.h, portableio.h (takehiro-2002_05_07-experimental): clean up AIFF related code. but still it cannot read AIFF file... 2004-05-05 06:02 takehiro * frontend/: get_audio.c, get_audio.h, main.c, mp3rtp.c (takehiro-2002_05_07-experimental): reduce warning 2004-05-05 05:55 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): remove AMIGA_MPEG support. use mpg123 instead. 2004-04-25 13:08 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix "stop/plot" button working. Thanx reporting, Gaby. 2004-04-25 12:42 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix obvious bugs... 2004-04-25 12:33 bouvigne * frontend/gtkanal.c: fixed mp3x monopolizing processor in its idle loop 2004-04-25 10:18 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): merged into lame.c 2004-04-25 10:07 takehiro * libmp3lame/: Makefile.in, libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): regen 2004-04-25 09:47 takehiro * Makefile.MSVC, Makefile.unix, frontend/brhist.c, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/encoder.h, libmp3lame/lame.c (takehiro-2002_05_07-experimental): merged encoder.c into lame.c. remove lame_bitrate_kpbs(). use bitrate_table[][] directly instead of it. 2004-04-25 09:06 takehiro * libmp3lame/: encoder.h, quantize.c (takehiro-2002_05_07-experimental): reduce memory usage by moving maxXR[] from gi to gfc. 2004-04-25 06:13 takehiro * libmp3lame/psymodel.c: fix bug id 921798 http://sourceforge.net/tracker/index.php?func=detail&aid=921798&group_id=290&atid=100290 This is reported as bug for "BCC", but it may happen for every compiler. 2004-04-24 18:29 olcios * libmp3lame/gain_analysis.h: changed some constants' types to long 2004-04-24 17:47 olcios * libmp3lame/: gain_analysis.c, gain_analysis.h: A better fix for the FP x86 problem. Provided by Andrew Church. Modified by olcios. 2004-04-24 17:02 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix it access to the log2tab[LARGE_BITS] 2004-04-24 16:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it always use the bit pressure algorith for short blocks on long blocks. 2004-04-24 16:42 takehiro * TODO (takehiro-2002_05_07-experimental): remove one mp3x TODO item (but still many TODOs about mp3x...) 2004-04-24 16:33 takehiro * testcase.mp3, include/lame.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/tags.c (takehiro-2002_05_07-experimental): one more error code clean up. 2004-04-24 16:31 takehiro * mpglib/: interface.c, layer3.c (takehiro-2002_05_07-experimental): cosmetic change and comment style fix. 2004-04-24 16:30 takehiro * mpglib/mpglib.h (takehiro-2002_05_07-experimental): patch from Dmitriy Startsev. (yes, this is from Dmitriy... sorry) 2004-04-24 16:27 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): to check the "free-ed memory access" 2004-04-24 16:26 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix mp3x cannot displays short mp3 file (it segfaults). 2004-04-24 13:36 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix flush code 2004-04-24 13:09 takehiro * include/lame.h, libmp3lame/lame.c (takehiro-2002_05_07-experimental): update error code. 2004-04-24 11:09 takehiro * libmp3lame/: bitstream.c, encoder.h, quantize.c (takehiro-2002_05_07-experimental): fix comments and cosmetic change 2004-04-24 10:44 takehiro * libmp3lame/: bitstream.c, lame.c, tags.c, tags.h, util.c (takehiro-2002_05_07-experimental): fix CRC calculation remove redundant include added some comments about flushing 2004-04-24 10:40 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): remove commnts, which are the same as in lame.h 2004-04-24 10:39 takehiro * libmp3lame/psymodel.c, libmp3lame/quantize.c, include/lame.h, libmp3lame/encoder.c (takehiro-2002_05_07-experimental): cosmetic 2004-04-18 18:11 takehiro * libmp3lame/: lame.c, tables.c, tags.c, util.c, util.h (takehiro-2002_05_07-experimental): clean up arround VBR Tag frame size. clean up arround "POSTDELAY" 2004-04-18 17:30 takehiro * Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): follow the filename changes 2004-04-18 17:24 takehiro * libmp3lame/: util.c, util.h (takehiro-2002_05_07-experimental): fix build problem on Linux 2004-04-18 17:16 takehiro * libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): follow the file name change. 2004-04-18 17:10 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): remove redundant include 2004-04-18 17:10 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2004-04-18 17:09 takehiro * libmp3lame/: Makefile.am, VbrTag.c, VbrTag.h, bitstream.c, bitstream.h, encoder.c, id3tag.c, id3tag.h, lame.c, tags.c, tags.h, util.c, util.h (takehiro-2002_05_07-experimental): merged "VbrTag.c" and "id3tag.c" into one (tags.c) merged "VbrTag.h" and "id3tag.h" into one (tags.h) simplify the CRC related code. 2004-04-18 12:59 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): fix mpglib problem. The patch is from Kristian Hermansen. (forwarded by Dmitriy Startsev) 2004-04-18 12:43 takehiro * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, encoder.c, encoder.h, id3tag.c, id3tag.h, lame.c, newmdct.c, psymodel.c, quantize_pvt.h, tables.c, tables.h (takehiro-2002_05_07-experimental): * large clean up arround Tags and Header. - directly output the Tags/Headers instead of using add_dummy_byte() reduce memory usage by using "union" 2004-04-18 11:42 takehiro * TODO (takehiro-2002_05_07-experimental): added MP3X bug as TODO. 2004-04-18 11:11 takehiro * libmp3lame/: VbrTag.c, bitstream.c, encoder.c, encoder.h, lame.c, newmdct.c, psymodel.c, quantize.c, tables.c, takehiro.c, util.h (takehiro-2002_05_07-experimental): clean up lame_t structure. 2004-04-18 10:32 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix MP3X monopolizing the processor in its idle loop. 2004-04-14 22:15 robert * frontend/get_audio.c, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c: fixing the decoding issue with the reported "Christmas" song. I've taken Takehiro's modifications and getting the same output as he does on his 4.0 branch. Imho this is not the best solution to the given problem, but it works for now. 2004-04-14 16:48 takehiro * Dll/BladeMP3EncDLL.c (takehiro-2002_05_07-experimental): fix build problem reported by PAN-san. 2004-04-13 17:21 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix fatal bug in scalefactor value lossless coding. 2004-04-12 12:29 aleidinger * debian/lame.docs: PRESETS.draft does not exists anymore. 2004-04-11 18:16 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): adjust ATH adjustment. 2004-04-11 18:15 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix "1 sample" delay 2004-04-11 17:24 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix mp3x FFT energy display. 2004-04-11 15:39 glessard * frontend/main.c, include/lame.h, libmp3lame/set_get.c: Added two sets of set/get functions to the API. They modify and read the nogap_total and nogap_current variables of the internal_flags struct. Added calls to these functions to the gapless-encoding loop of the frontend. 2004-04-11 15:06 aleidinger * ChangeLog: update 2004-04-11 15:04 aleidinger * configure: regen 2004-04-11 15:00 aleidinger * config.h.in: Add some missing LARGEFILE pieces. This patch is also in the generated lame-3.96 tarball, it just enters the CVS repository for 3.97 for organizational reasons. 2004-04-11 14:58 aleidinger * configure.in: Welcome to lame 3.97. 2004-04-11 14:27 takehiro * libmp3lame/: encoder.c, encoder.h, lame.c, set_get.c, tables.c (takehiro-2002_05_07-experimental): merged gfc->num_channels & gfc->channels_in some trivial clean up. 2004-04-11 13:54 takehiro * libmp3lame/VbrTag.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/util.c, libmp3lame/util.h, include/lame.h (takehiro-2002_05_07-experimental): changed error/debug/normal message output code. 2004-04-11 13:10 takehiro * debian/: changelog, lame.docs, rules (takehiro-2002_05_07-experimental): updated for lame4 2004-04-11 13:09 takehiro * libmp3lame/: encoder.c, encoder.h, lame.c, mpglib_interface.c, tables.c (takehiro-2002_05_07-experimental): clean up the members of structure lame_t. 2004-04-11 13:08 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): fix build problem when --disable-analysis-hook 2004-04-11 13:05 bouvigne * libmp3lame/version.h: 3.97a1 2004-04-11 13:03 bouvigne * libmp3lame/version.h: release 3.96 2004-04-11 13:03 bouvigne * doc/html/history.html: history 2004-04-11 13:02 bouvigne * debian/changelog: updated debian changelog 2004-04-11 13:01 bouvigne * libmp3lame/presets.c: use X9 to select abr/cbr quantization, use sfscale up to 160kbps 2004-04-11 12:50 bouvigne * Makefile.in: manually updated Makefile.in 2004-04-11 12:12 takehiro * configure (takehiro-2002_05_07-experimental): regen (by hand) 2004-04-11 12:10 takehiro * configure.in (takehiro-2002_05_07-experimental): fix confusion arround "decoder" and "decode" 2004-04-11 11:58 takehiro * libmp3lame/lame-analysis.h, frontend/gtkanal.c (takehiro-2002_05_07-experimental): trivial 2004-04-11 11:57 takehiro * libmp3lame/: encoder.c, encoder.h, lame.c (takehiro-2002_05_07-experimental): one more fix for "very the beginig samples" 2004-04-11 11:55 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it sometimes goes into infinite loop when with i-stereo. 2004-04-10 16:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix mp3x display delay. 2004-04-10 16:56 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): remove redandunt code. 2004-04-10 16:48 takehiro * libmp3lame/: encoder.c, encoder.h, lame.c, newmdct.c, psymodel.c, quantize.c, set_get.c (takehiro-2002_05_07-experimental): fix "start" delay and reduce buffer size. still there's known bugs in mp3x and the tail part encoding. 2004-04-10 16:15 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix trivial bug when stereo input 2004-04-10 15:43 takehiro * frontend/: get_audio.c, get_audio.h, gtkanal.c, lametime.c, lametime.h, main.c, mp3rtp.c (takehiro-2002_05_07-experimental): frontend code fix and clean up. - fix it cut the beginning 17 samples when input is .wav file. - fix function names. remove "lame_" prefix from the functions which is not LAME API. - and some trivial clean up. 2004-04-10 13:23 takehiro * frontend/gpkplotting.c (takehiro-2002_05_07-experimental): remove unused definition 2004-04-10 12:08 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): clarify the comment 2004-04-04 15:13 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): reduce POSTDELAY when MPEG2 layer3 2004-04-04 12:49 takehiro * frontend/parse.c, include/lame.h, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): rename ns-(bass|alto|treble) options and their implementation. 2004-04-04 12:45 takehiro * mpglib/layer3.c (takehiro-2002_05_07-experimental): always support MPEG1. 2004-04-04 12:33 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial 2004-04-04 11:55 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization 2004-04-04 11:54 takehiro * libmp3lame/: util.c, machine.h (takehiro-2002_05_07-experimental): include file clean up. 2004-04-04 11:52 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): replace snprintf() with strncat() and so on, for some old systems. 2004-04-03 19:30 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): work arround for short blocks with i-stereo bug. and some simplification of i-stereo code. 2004-04-03 19:25 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): display more scalefactor band splitting lines. 2004-04-03 17:35 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix uninitialized memory access (found by valgrind). 2004-04-03 17:28 bouvigne * frontend/gtkanal.c, libmp3lame/lame-analysis.h, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h: Add X9 quantization selection method. It increases applaud.wav substancially. Not enabled by default 2004-04-03 17:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): try to find better scalefactor combination when i-stereo. 2004-04-03 17:07 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): remove one condition which is always stisfied. 2004-04-03 13:17 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): better bit allocation when substep noise shaping. 2004-04-02 16:37 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix "all even" hack. 2004-04-02 15:54 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): better bit allocation for CBR. - increase bit allocation on start/end blocks, where the effect of best_huffman_divide() is very weak. - increase bit allocation when --substep is enabled. some trivial clean up. 2004-03-30 15:49 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix it sometimes crashes with -q0 or -q1 + CBR 2004-03-28 16:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial simplification 2004-03-28 13:11 bouvigne * libmp3lame/version.h: 3.96 beta 2 2004-03-28 13:10 bouvigne * doc/html/history.html: history 2004-03-28 13:10 bouvigne * libmp3lame/presets.c: updated minimal bitrate for V1 and V2 2004-03-28 12:41 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): reduce array size 2004-03-28 12:16 takehiro * libmp3lame/: bitstream.c, encoder.c, encoder.h, lame.c, quantize.c, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): warning fix, cleanup, and cosmetic change. 2004-03-28 12:16 takehiro * TODO (takehiro-2002_05_07-experimental): there is already VC6 project file. We (maybe) need .net project/solution file. 2004-03-28 11:29 takehiro * frontend/mp3x.c, include/lame.h, libmp3lame/lame.c, libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): remove lame_encode_finish() API 2004-03-28 11:28 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fixed mixed block statics trivial optimization/clean up 2004-03-27 17:08 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): - use calc_sfb_noise() and calc_sfb_noise_fast() do not return minus value. - little better CBR_2nd_bitalloc() 2004-03-27 14:50 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): reduce table size. 2004-03-27 14:49 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix warnings 2004-03-27 12:38 takehiro * libmp3lame/: bitstream.c, quantize.c (takehiro-2002_05_07-experimental): cosmetic 2004-03-27 11:18 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h (takehiro-2002_05_07-experimental): simplification arround huffman code output 2004-03-27 09:47 takehiro * libmp3lame/: bitstream.c, quantize.c, quantize_pvt.h, tables.c, takehiro.c (takehiro-2002_05_07-experimental): clean up. fix warning and trivial optimizations. 2004-03-27 08:31 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2004-03-27 07:48 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): simplify the code arround huffman coding with the escape sequence. 2004-03-23 22:17 robert * libmp3lame/vbrquantize.c, Makefile.unix: rewritten vbr-new the scalefactor allocation functions take into account now, that some minimal scalefactor has to be used (the less IXMAX_VAL case) the output of vbr-new is not bit identical to previous ones, but the code is much more straight forward now. 2004-03-23 22:11 robert * libmp3lame/util.c: patch for resampling code, found by Takehiro this patch removes some unneccessary integer rounding resulting mp3s where bit identical, but resampling is faster now 2004-03-23 03:07 olcios * frontend/parse.c: fixed a compile-time issue in --longhelp 2004-03-23 01:57 olcios * USAGE, doc/html/switchs.html, doc/man/lame.1, frontend/main.c, frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/util.h: 1. added --noreplaygain switch that disables RG 2. added --replaygain-fast switch that complements --replaygain-accurate. The new switch is enabled by default in the frontend. 3. Made RG analysis no longer default in libmp3lib. RG can still be fully controlled via the libmp3lib interface, but for other interfaces, like DLL or ACM, that provide no RG control, RG analysis is now _disabled_. 4. updated documentation 2004-03-21 17:53 takehiro * frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/lame.c, libmp3lame/version.c, mpglib/interface.c (takehiro-2002_05_07-experimental): more API clean up and cosmetic changes. 2004-03-21 17:51 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): faster float comparison when FLOAT is float. some cosmetic changes 2004-03-21 17:14 takehiro * libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/id3tag.c, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, mpglib/interface.c (takehiro-2002_05_07-experimental): clean up APIs and variable names (to fix warnings when -Wshadow) 2004-03-21 16:27 takehiro * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/id3tag.c, libmp3lame/lame-analysis.h, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/version.h (takehiro-2002_05_07-experimental): cosmetic 2004-03-21 15:51 takehiro * libmp3lame/: machine.h, psymodel.c, quantize_pvt.h (takehiro-2002_05_07-experimental): clean up arround IEEE754 hack. 2004-03-21 15:47 takehiro * libmp3lame/: VbrTag.c, encoder.h (takehiro-2002_05_07-experimental): remove unused "nogap" related variables. 2004-03-21 15:41 takehiro * libmp3lame/: VbrTag.c, encoder.c, encoder.h (takehiro-2002_05_07-experimental): fix invalid vbr header output when ABR. merge gfc->frameNum and gfc->nVbrNumFrames. 2004-03-21 14:51 takehiro * libmp3lame/: encoder.h, psymodel.c, psymodel.h, quantize.c (takehiro-2002_05_07-experimental): remove magic numbers 2004-03-21 14:32 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): header file style/comment fix. 2004-03-21 14:32 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial 2004-03-21 14:31 takehiro * mpglib/: layer3.c, mpg123.h (takehiro-2002_05_07-experimental): trivial optimization 2004-03-21 14:31 takehiro * include/lame.h (takehiro-2002_05_07-experimental): remove obsolete API. 2004-03-21 13:51 takehiro * ACM/DecodeStream.h, frontend/gtkanal.c, frontend/mp3x.c, frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/id3tag.c, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/version.c, mpglib/layer3.c, mpglib/mpglib.h (takehiro-2002_05_07-experimental): clean up header files. 2004-03-21 13:00 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): new testcase 2004-03-21 12:37 takehiro * libmp3lame/: encoder.c, quantize.c, quantize.h (takehiro-2002_05_07-experimental): clean up APIs of set_frame_pinfo() 2004-03-21 12:34 takehiro * libmp3lame/: lame.c, set_get.c, util.h (takehiro-2002_05_07-experimental): clean up arround buffer flush. and remove "mf_samples_to_encode" from lame_t. 2004-03-21 12:33 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): trivial clean up 2004-03-21 11:55 takehiro * libmp3lame/: encoder.c, lame.c, quantize.c, tables.c, util.h (takehiro-2002_05_07-experimental): clean up and "possible" bug of resampling code. - calculate resampling value with "sample_t" instead of "int". - moved resampling initialization code into tables.c 2004-03-21 10:37 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): oops, remove gabage... 2004-03-21 10:34 takehiro * libmp3lame/: encoder.c, psymodel.c, psymodel.h (takehiro-2002_05_07-experimental): clean up internal APIs 2004-03-21 10:33 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix prototype declaration, to clarify all the ASM code cannot run when FLOAT!=float 2004-03-21 07:12 takehiro * libmp3lame/: lame.c, util.c (takehiro-2002_05_07-experimental): header file clean up (I hope it works...) 2004-03-21 07:10 takehiro * libmp3lame/: encoder.c, lame.c, util.h (takehiro-2002_05_07-experimental): do not use calloc in lame_encode_* functions. and moved some functions for better conjunctions. 2004-03-21 07:09 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial 2004-03-21 05:08 takehiro * ACM/main.cpp (takehiro-2002_05_07-experimental): fix build problem on mingw 2004-03-20 17:28 takehiro * libmp3lame/: lame.c, util.c, util.h (takehiro-2002_05_07-experimental): move fill_buffer() function and make it static and bit optimizing. 2004-03-20 16:04 takehiro * libmp3lame/: quantize.c, util.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): Faster quantization code, based on the ideas from the main line (done by Gaby). about 2% faster on VBR. The same algorithm can be applied to the CBR, but currently is not. 2004-03-19 22:09 olcios * libmp3lame/gain_analysis.c: changed the pre-processor condition related to the x86's extended FP bug when compiled by GCC with optimizations 2004-03-19 18:18 olcios * libmp3lame/gain_analysis.c: improved comment 2004-03-19 13:17 olcios * libmp3lame/gain_analysis.c: workaround for the gcc ceil() bug when compiled with optimizations 2004-03-18 22:00 olcios * libmp3lame/gain_analysis.h: fixed compile-time problem with uint32_t on gcc 2004-03-18 16:11 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix uninitialized memory access. 2004-03-18 14:27 aleidinger * libmp3lame/: gain_analysis.c, gain_analysis.h: Replace Uint32_t and Int32_t with uint32_t and int32_t. There are only few instances of them used, so there's no need to typedef new types for them. I hope this fixes problems on OSX reported on lame-dev. While I'm here, fix a cast (rgData->sampleWindow is long, not int). 2004-03-17 18:56 aleidinger * libmp3lame/: bitstream.c, gain_analysis.c, gain_analysis.h, lame.c: - remove config.h (prerequisite) include from gain_analysis.h - make sure prerequisites get included in every file before gain_analysis.h 2004-03-14 18:22 bouvigne * libmp3lame/gain_analysis.h: solved the potential data type problem 2004-03-14 17:13 takehiro * frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/layer3.c, mpglib/mpg123.h, mpglib/tabinit.c (takehiro-2002_05_07-experimental): cosmetic changes. 2004-03-14 16:19 takehiro * ACM/readme.txt (takehiro-2002_05_07-experimental): sync main branch 2004-03-14 16:18 takehiro * ACM/ACMStream.cpp (takehiro-2002_05_07-experimental): sync main branch. 2004-03-14 16:15 takehiro * libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): fix MSVC6+NASM compilation 2004-03-14 16:00 takehiro * ACM/main.cpp (takehiro-2002_05_07-experimental): oops, I removed too much. 2004-03-14 13:47 takehiro * frontend/brhist.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c (takehiro-2002_05_07-experimental): cosmetic and reduce warnings 2004-03-14 12:46 takehiro * libmp3lame/: bitstream.h, machine.h, psymodel.c, quantize_pvt.h, tables.c, util.h (takehiro-2002_05_07-experimental): fix build problem on vanilla(without ICC) VC6. better ATH handling for psymodel and some minor cosmetic change 2004-03-14 12:44 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): cosmetic 2004-03-14 12:43 takehiro * libmp3lame/: gain_analysis.c, gain_analysis.h (takehiro-2002_05_07-experimental): backport from the main branch. (only copied. not working currently). 2004-03-14 11:50 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): better 8kHz/128kbps bit allocation. 2004-03-14 06:17 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): sync main branch (fix freeformat decoding bug done by Robert Hegemann) 2004-03-13 14:06 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix a warning. 2004-03-13 13:00 takehiro * Dll/BladeMP3EncDLL.c (takehiro-2002_05_07-experimental): fix build problem on VC6+debug mode 2004-03-13 12:59 takehiro * libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): fix build problem on VC6 2004-03-11 23:43 olcios * libmp3lame/bitstream.c: fixed a bug related to the usage of mpglib when decoding on the fly 2004-03-11 19:35 olcios * libmp3lame/lame.c: fixed compile-time problem when mpglib is disabled 2004-03-10 20:49 robert * doc/html/: contributors.html, history.html: history 2004-03-10 00:50 robert * mpglib/interface.c: patch for freeformat decoding bug 2004-03-09 19:04 bouvigne * libmp3lame/lame.c: typo 2004-03-09 00:35 robert * libmp3lame/vbrquantize.c: found a sample which did not give bit identical result with the previous patch. found out why and corrected it, so now the results for find_scalefac_ave_[x34|ISO] are identical to the original code, but --preset fast standard is ~7 percent faster now. 2004-03-08 04:13 takehiro * mpglib/layer1.c (takehiro-2002_05_07-experimental): fix layer1 compilation problem. 2004-03-08 04:12 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): remove unused label 2004-03-08 04:04 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix alignment work and build problem with icl(MS-Windows) 2004-03-08 00:54 robert * libmp3lame/vbrquantize.c: faster "find_scalefac_ave_[x34|ISO]": this patch gave bit identical results on all tested samples compared to previous version, so I'm pretty much confident that I don't introduce a new bug here. the speeding up of this functions results in an overall speed increase of almost 7 percent for --preset fast standard 2004-03-07 23:55 robert * Makefile.unix, Makefile.MSVC: in case of single precision (FLOAT8==float) we have to make sure that the mpglib uses REAL==float too. otherwise the decoder will moan about too small buffers 2004-03-07 14:18 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): no Xing-VBR header except layer 3 2004-03-06 17:52 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix it ignores --scale option. 2004-03-06 17:37 takehiro * libmp3lame/i386/fft3dn.nas (takehiro-2002_05_07-experimental): remove Japanese comments. 2004-03-06 16:32 takehiro * libmp3lame/: psymodel.h, tables.c (takehiro-2002_05_07-experimental): revert the last psymodel change, and implement the better way to archive more precise frequency analysis in the lower frequency region. This is done by changing frequency -> bark conversion equation. 2004-03-06 16:02 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): remove Jananese comments. 2004-03-06 15:36 bouvigne * libmp3lame/version.h: entering beta stage 2004-03-06 15:34 bouvigne * doc/html/history.html: history 2004-03-01 22:21 robert * configMS.h, libmp3lame/version.h: we are now at 3.96 alpha 4 2004-03-01 22:20 robert * libmp3lame/psymodel.c: bug fix: the highly optimized loops did an off by one access resulting in often invalid energy and threshold calculations. (both psy models affected). added a workaround and some assertions. 2004-03-01 15:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix for testcase... (oops, simple mistake) 2004-02-29 19:55 robert * libmp3lame/: bitstream.c, takehiro.c: fixing the "huffman decode overrun" and "mp3x problem" 2004-02-29 18:20 bouvigne * doc/html/: contributors.html, history.html: no message 2004-02-29 18:12 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix for 8kHz with 128kbps. 2004-02-29 17:58 takehiro * libmp3lame/: psymodel.c, psymodel.h, tables.c, util.h (takehiro-2002_05_07-experimental): better partitioning for psymodel calculation (very much experimental!) 2004-02-29 17:17 takehiro * mpglib/layer1.c: fix layer1 decoding bug 2004-02-29 17:16 takehiro * mpglib/layer1.c (takehiro-2002_05_07-experimental): fix monural file decoding bug in layer1, reported by Goran Markovic. 2004-02-26 17:20 takehiro * frontend/get_audio.c: fixed Layer2 decoding bug reported by Goran Markovic 2004-02-26 16:31 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fixed Layer2 decoding issue, reported by Goran Markovic. 2004-02-25 22:10 robert * libmp3lame/util.c: fixing some aliasing problem in fastlog2 calculation 2004-02-25 21:46 robert * libmp3lame/vbrquantize.c: getting rid of a warning about a function being defined but not used 2004-02-25 21:46 robert * libmp3lame/gain_analysis.c: fixing code relying on compiler implementation details 2004-02-25 21:41 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/VbrTag.c, libmp3lame/set_get.c, libmp3lame/util.c: getting rid of some compiler warnings: - about too long string constants - about C++ stylish comments there is still a warning about the use of a C99 hexadecimal floating constant in portableio.c. will this compile on older C-compilers? 2004-02-24 02:18 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): testcase with new huffman coding. 2004-02-24 01:57 olcios * libmp3lame/lame.c: fixed a bug with --resample and ReplayGain analysis of input data. With certain parameters the data sent to analysis was mangled (some samples missing, some doubled, some in the wrong order). With most natural music the error wasn't vast (below 1dB), but with e.g. a sine wave the gain error was audible. 2004-02-23 19:48 bouvigne * libmp3lame/gain_analysis.h: now works under gcc, but I am not sure about the typedefs on different platforms. 2004-02-23 18:53 bouvigne * libmp3lame/: gain_analysis.h, util.h: moved replaygain_t to gain_analysis.h 2004-02-23 14:50 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): improve lossless coding when all the quantized values in the same scalefactor band are even number. 2004-02-22 21:17 bouvigne * libmp3lame/: bitstream.c, gain_analysis.c, gain_analysis.h, lame.c, util.c, util.h: made ReplayGain reentrant 2004-02-22 21:16 bouvigne * libmp3lame/quantize_pvt.c: yet another "usefullsize" bug (found by passing the python tests) 2004-02-22 21:14 bouvigne * test/: CBRABR.op, VBR.op, misc.op, shortCBRABR.op, shortVBR.op: Updated test files. As the cbr/abr and vbr ones are quite long, I also added some short ones. 2004-02-17 00:37 robert * libmp3lame/lame.c: bug fix: in mono mode all block type where of short type due to forced block type coupling 2004-02-16 21:51 robert * libmp3lame/gain_analysis.c: bug fix by John Edwards (48 kHz replay gain segmentation fault) 2004-02-15 21:39 robert * libmp3lame/: lame.c, vbrquantize.c: standard ISO quantization for vbr-mtrh 2004-02-15 19:05 robert * libmp3lame/: lame.c, takehiro.c: bug fix: usefullsize may become negativ due to some optimizations 2004-02-15 13:09 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): sprintf -> snprintf and some trivial clean up. 2004-02-15 01:20 robert * libmp3lame/takehiro.c: a simple -V9 -f line lets LAME crash, there seems to be something wrong with scalefactor width at least my inserted assertions indicate this 2004-02-10 02:04 robert * libmp3lame/vbrquantize.c: try to make some use of max_nonzero_coeff in vbr-mtrh 2004-02-08 21:58 takehiro * frontend/: brhist.c, get_audio.c, get_audio.h, gtkanal.c, lame.dsp, main.c, mp3rtp.c, parse.c, timestatus.c, timestatus.h (takehiro-2002_05_07-experimental): misc clean ups. - gfp/gfc things - mp3 decoding patch from Dmitriy Startsev - remove an old file 2004-02-08 21:57 takehiro * mpglib/interface.c (takehiro-2002_05_07-experimental): mp3 decoding patch from Dmitriy Startsev 2004-02-08 19:00 bouvigne * libmp3lame/presets.c: reduced the number of short blocks 2004-02-08 14:08 bouvigne * Makefile.am, lame.dsw: removed old workspace 2004-02-08 12:44 bouvigne * libmp3lame/: quantize_pvt.c, takehiro.c: inverted a while statement, some int ->unsigned. I hope that they will be safe this time. 2004-02-08 03:10 robert * libmp3lame/takehiro.c: sorry Gabriel, reverting your signed->unsigned patch due to exceptions while encoding awe32_20sec.wav using --preset standard 2004-02-08 03:06 robert * libmp3lame/quantize_pvt.c: sorry Gabriel, reverting your signed->unsigned patch because of exceptions in awe32_20sec.wav using --preset standard 2004-02-08 03:01 robert * libmp3lame/vbrquantize.c: bug fix: scalefactors may have been read from uninitialized memory 2004-02-08 02:12 robert * libmp3lame/: takehiro.c, vbrquantize.c: calculating xrpow_max for vbr_mtrh too 2004-02-07 19:38 bouvigne * libmp3lame/: quantize_pvt.c, takehiro.c: some int -> unsigned int 2004-02-06 16:56 takehiro * frontend/get_audio.c, mpglib/interface.c: mp3 decoding patch from Dmitriy Startsev 2004-02-04 20:17 bouvigne * libmp3lame/version.h: bump alpha because of the fixed crash 2004-02-04 20:16 bouvigne * libmp3lame/takehiro.c: fixed a crash in quantize_xrpow occuring when using low bitrates (32kbps) 2004-02-02 15:20 olcios * USAGE, doc/html/switchs.html: reworded the RG part. Discussed with: Alexander Leidinger 2004-02-02 14:17 olcios * testcase.mp3: oops, committed an experimental file, reverting back to 1.80 2004-02-02 13:28 aleidinger * configure: regen 2004-02-02 13:25 aleidinger * configure.in: Add a check for 64 bit off_t's ("LARGEFILE" support). This may not be enough as lame uses ints and longs where other types may be more correct, but it may work in some cases. HOWTO provided by: Dan Nelson 2004-02-02 13:02 aleidinger * doc/man/lame.1: - reformatted the replaygain part (less than 80 characters per line) - reworded some parts - add a note about the decoder requierement for the --decode, --replaygain-accurate and --clipdetect options Discussed with: Aleksander Korzynski 2004-02-02 12:58 aleidinger * config.h.in, configure: regen 2004-02-02 12:57 aleidinger * configMS.h: Add the DECODE_ON_THE_FLY define in the HAVE_MPGLIB case. 2004-02-02 12:57 aleidinger * configure.in, include/lame.h: - enable bitrate histogram by default discussed with Gabriel in Sept. 03 - define DECODE_ON_THE_FLY for the replaygain feature in the HAVE_MPGLIB case too (moved from include/lame.h, I think it's cleaner this way) discussed with Aleksander Korzynski 2004-02-02 12:38 aleidinger * libmp3lame/id3tag.c: Patch from Ti Kan : ---snip--- Below is a patch to make Lame 3.95.1 compile and run on AIX, HP-UX, IRIX, Solaris, UnixWare, SCO Open Server and SunOS 4.1.x. The change involves the call to snprintf() in libmp3lame/id3tag.c., but snprintf() is not available on many of these platforms. I know that in general replacing snprintf() with sprintf() removes a layer of string buffer overflow protection, but in this case it should be safe because the size of string is bounded. ---snip--- 2004-01-31 20:05 olcios * testcase.mp3, frontend/main.c, libmp3lame/lame.c: disabled peak sample detection when LAME tag is not written into the file 2004-01-29 16:39 bouvigne * doc/html/history.html: history 2004-01-29 16:31 bouvigne * libmp3lame/version.h: bump alpha because of the fixed crashes 2004-01-29 16:26 bouvigne * libmp3lame/takehiro.c: fixed bug #886989 2004-01-26 14:00 olcios * USAGE, doc/html/switchs.html, doc/man/lame.1, frontend/parse.c: updated documentation and --longhelp on RG 2004-01-26 12:05 olcios * frontend/main.c, frontend/main.h, frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/util.h: removed ReportLameTagProgress (it is not LAME API). Fixed --replaygain-accurate and --clipdetect. 2004-01-25 10:12 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): fix a bug when the malloc is failed. 2004-01-25 10:06 takehiro * libmp3lame/: lame.c, VbrTag.c (takehiro-2002_05_07-experimental): fix id3v2 tag output 2004-01-25 10:05 takehiro * libmp3lame/: VbrTag.h, id3tag.c, id3tag.h, quantize.h (takehiro-2002_05_07-experimental): trivial 2004-01-25 08:44 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): fix total track number buffer overrun bug. 2004-01-25 08:34 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): remove unused prototype 2004-01-25 08:33 takehiro * frontend/parse.c, libmp3lame/id3tag.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): total track ID3 tag, requested at sf.net (Request ID #630803) http://sourceforge.net/tracker/index.php?func=detail&aid=630803&group_id=290&atid=350290 2004-01-25 08:30 takehiro * lame_vc6.dsw (takehiro-2002_05_07-experimental): sync with the main branch.(related mp3x projects) 2004-01-25 08:28 takehiro * frontend/lame.dsw (takehiro-2002_05_07-experimental): remove old files. 2004-01-25 05:45 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): added message about "--preset medium" 2004-01-24 17:37 takehiro * ACM/: ACM.cpp, ACM.h, ACMStream.cpp, ACMStream.h, AEncodeProperties.cpp, DecodeStream.cpp, main.cpp (takehiro-2002_05_07-experimental): fix build problem(I hope...) 2004-01-24 17:31 takehiro * frontend/main.h (takehiro-2002_05_07-experimental): sync the main branch. - include limits.h only when there's the header. 2004-01-24 17:28 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): sync with the main branch. - remove message output during reading AIFF file. 2004-01-21 13:50 aleidinger * Makefile.in, ACM/Makefile.in, Dll/Makefile.in, frontend/Makefile.in, libmp3lame/Makefile.in, mpglib/Makefile.in: regen 2004-01-21 13:48 aleidinger * frontend/main.h: only include limits.h if it is present on the system 2004-01-21 10:17 bouvigne * libmp3lame/quantize.c: missing {} in last fix 2004-01-21 09:41 bouvigne * ACM/ACM.dsw, ACM/Makefile.am, ACM/lameACM.dsp, Makefile.B32, Makefile.DJGPP, Makefile.am, PRESETS.draft, README.B32, README.DJGPP, Dll/Example.dsp, Dll/Example.dsw, Dll/MP3EncDll.dsp, Dll/MP3EncDll.dsw, Dll/Makefile.am, frontend/Makefile.am, frontend/lame.dsp, frontend/lame.dsw, frontend/mp3x.dsp, frontend/mp3x.dsw, libmp3lame/Makefile.am, libmp3lame/libmp3lame.dsp, mpglib/Makefile.am, mpglib/mpglib.dsp: removed old unmaintained files 2004-01-20 18:41 bouvigne * libmp3lame/quantize.c: fixed a crash: sometimes quantization could overflow because of big xr_pow values 2004-01-20 17:04 takehiro * Dll/Makefile.mingw32 (takehiro-2002_05_07-experimental): remove unused include path 2004-01-20 16:24 takehiro * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h, Example.cpp, Makefile.mingw32 (takehiro-2002_05_07-experimental): DLL build and minor message fix. but we may need API fix, too... 2004-01-20 06:22 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): do not include "internal" header file. 2004-01-18 15:54 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-01-18 15:52 takehiro * config.h.in, configure.in, mac/Precompile_Common.h (takehiro-2002_05_07-experimental): remove ieee754_float64_t 2004-01-18 13:51 takehiro * frontend/gtkanal.c, libmp3lame/quantize.c (takehiro-2002_05_07-experimental): mp3x: fix mean bits display when mono or mpeg2 2004-01-18 13:48 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): make it sure not to call "experimental" switches when it is not DEBUG mode or ALPHA version. 2004-01-18 13:21 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix typo 2004-01-18 12:52 takehiro * Makefile.am, Makefile.in, PRESETS.draft, lame.dsw, ACM/ACM.dsw, ACM/Makefile.am, ACM/Makefile.in, ACM/lameACM.dsp, Dll/Example.dsp, Dll/Example.dsw, Dll/MP3EncDll.dsp, Dll/MP3EncDll.dsw, Dll/Makefile.am, Dll/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, frontend/mp3x.dsp, frontend/mp3x.dsw, frontend/mp3x_vc6.dsp, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/libmp3lame.dsp, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/mpglib.dsp (takehiro-2002_05_07-experimental): remove all the outdated files. copied mp3x_vc6.dsp from main branch. 2004-01-18 12:51 takehiro * libmp3lame/: quantize.c, lame.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-18 12:47 takehiro * configure (takehiro-2002_05_07-experimental): regen 2004-01-18 12:47 takehiro * config.h.in, configure.in, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): replace "unsigned long long" -> "uint64_t" 2004-01-18 12:46 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-17 18:33 takehiro * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, mpglib/interface.c (takehiro-2002_05_07-experimental): moved VBR header related code. now the vbr header structure is in lame.h. This means applications can use the VBR header information via it. 2004-01-17 18:21 takehiro * libmp3lame/lame-analysis.h (takehiro-2002_05_07-experimental): remove unused definition 2004-01-17 18:19 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-17 18:14 takehiro * libmp3lame/: bitstream.c, lame.c (takehiro-2002_05_07-experimental): fix assert() condition. remove unused function. 2004-01-17 18:08 takehiro * frontend/main.c, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h (takehiro-2002_05_07-experimental): remove ReportLameTagProgress(). it is not LAME API at all... 2004-01-17 18:07 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-17 17:56 takehiro * libmp3lame/: encoder.h, lame.c, machine.h, util.h (takehiro-2002_05_07-experimental): include file clean up. 2004-01-17 17:44 takehiro * libmp3lame/mpglib_interface.c, mpglib/interface.c, mpglib/interface.h, mpglib/mpglib.h (takehiro-2002_05_07-experimental): changed InitMP3() and ExitMP3() API. 2004-01-17 17:37 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): remove freegfc() prototype 2004-01-17 17:35 takehiro * libmp3lame/: util.c, lame.c (takehiro-2002_05_07-experimental): simplify freegfc() 2004-01-17 17:04 takehiro * frontend/brhist.c, frontend/console.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/main.c, frontend/mp3rtp.c, frontend/rtp.c, include/lame.h, libmp3lame/lame-analysis.h, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, mpglib/common.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/mpg123.h (takehiro-2002_05_07-experimental): renamed "stereo" -> "channels" to make things more clear. remove unused definitions. 2004-01-17 14:25 takehiro * README.B32, README.DJGPP (takehiro-2002_05_07-experimental): too much old. removed. 2004-01-17 14:23 takehiro * API, HACKING, ACM/ACMStream.h, ACM/DecodeStream.h, Dll/BladeMP3EncDLL.c, Dll/Makefile.mingw32, dshow/Encoder.h, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, frontend/gtkanal.h, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/parse.h, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/libmp3lame_vc6.dsp, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/interface.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h (takehiro-2002_05_07-experimental): Large API clean up. To make MP3 decoding function reentrant, we need to replace the all API... all the variables are now marked as "INTERNAL" and applications cannot access them directly. "lame_global_flags" structure is removed. Use "lame_t" instead. 2004-01-17 14:11 takehiro * Makefile.B32, Makefile.DJGPP (takehiro-2002_05_07-experimental): They are too much outdated. removed. 2004-01-17 11:34 takehiro * config.h.in, configure.in, frontend/brhist.c, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/portableio.c, libmp3lame/mpglib_interface.c, mac/Precompile_Common.h, mpglib/common.c, mpglib/interface.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/mpg123.h (takehiro-2002_05_07-experimental): cleanup. remove unused functions/definitions. 2004-01-17 10:51 takehiro * frontend/parse.h (takehiro-2002_05_07-experimental): fix warning 2004-01-17 10:45 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): fix usage message of --priority 2004-01-17 10:17 takehiro * frontend/get_audio.c, frontend/main.c, frontend/parse.c, frontend/portableio.c, frontend/portableio.h, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/lame.c, libmp3lame/tables.c, mpglib/common.c, mpglib/common.h, mpglib/tabinit.c (takehiro-2002_05_07-experimental): remove unused code and old APIs. make some functions/arrays static. 2004-01-17 09:35 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix it does not write id3v2 at all. make bitrate table static. 2004-01-15 19:05 aleidinger * frontend/parse.c: We should not need errno... introduced in the last commit, remove it. 2004-01-15 19:04 aleidinger * frontend/parse.c: Different fix for the priority parsing bug, uses less code. Tested by: Gabriel 2004-01-15 13:54 bouvigne * doc/html/history.html, ACM/TODO, doc/html/index.html, doc/html/switchs.html: doc, history 2004-01-15 11:15 bouvigne * include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: made lame.h identical with or without DECODE_ON_THE_FLY. made gfp identical with or without DECODE_ON_THE_FLY. 2004-01-15 01:24 olcios * USAGE, frontend/parse.c, libmp3lame/lame.c: changed the behaviour of --clipdetect to force RG analysis on decoded data (not input data). Updated --longhelp and documentation 2004-01-14 14:38 bouvigne * libmp3lame/psymodel.c: minor code change in mask_add 2004-01-14 14:16 bouvigne * libmp3lame/psymodel.c: minor code change in mask_add 2004-01-13 19:23 bouvigne * frontend/parse.c: isnumber ->is_number 2004-01-13 18:35 glessard * frontend/get_audio.c: Removed a spurious fprintf that occurred during AIFF-C decoding. 2004-01-13 17:36 bouvigne * USAGE: ReplayGain ->89dB 2004-01-13 17:30 takehiro * frontend/get_audio.c: fix mp3 decoding... 2004-01-13 13:30 bouvigne * frontend/parse.c: fixed issue when --priority is not followed by a number but by another argument. Btw, the situation is the same with a lot of other settings. 2004-01-13 12:36 bouvigne * libmp3lame/version.h: 3.96a1 2004-01-12 18:09 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): bit better diveding point of huffman coding. 2004-01-12 17:23 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2004-01-12 16:54 takehiro * libmp3lame/: lame.c, quantize.c, set_get.c, util.h (takehiro-2002_05_07-experimental): implement lame_set_maskingadjust() and lame_set_maskingadjust_short() as is in LAME3.x branch. get_XX functions are not yet coded. 2004-01-12 16:50 takehiro * libmp3lame/: lame.c, set_get.c, tables.c (takehiro-2002_05_07-experimental): fix it ignores --athlower and --athcurve option (always use default setting) and clean up ATH related functions. 2004-01-12 14:49 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): better mp3 file header analysis (and bugfix). 2004-01-12 13:44 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): consider subblock position when calculating the PE value (usually, subblock 3 needs more bits than subblock 1) 2004-01-12 13:40 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-12 09:03 bouvigne * doc/html/history.html: history 2004-01-12 08:59 bouvigne * libmp3lame/gain_analysis.c: changed RG level to 89dB 2004-01-12 08:42 bouvigne * libmp3lame/version.h: back into 3.95 because of the fixed crash 2004-01-12 08:41 bouvigne * libmp3lame/takehiro.c: fixed a potential crash with fast vbr (introduced by myself) 2004-01-12 07:17 takehiro * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): added "--sameblock" option, to help the playback problems on some buggy decoders.(like some DVD/CD-R mp3 player) 2004-01-12 06:50 takehiro * frontend/parse.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): clean up quality setting. 2004-01-11 15:39 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix for short block i-stereo band mis-selection. 2004-01-11 15:01 bouvigne * libmp3lame/lame.c: small cleanup in the lowpass/samplefreq selection code 2004-01-11 14:39 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): quick fix for i-stereo. it accidentially uses i-stereo on the scalefactor where we do not want to use (and where we do not set the direction). 2004-01-11 14:04 takehiro * config.h.in, configure (takehiro-2002_05_07-experimental): regen 2004-01-11 13:37 takehiro * configure.in, mac/Precompile_Common.h (takehiro-2002_05_07-experimental): remove IEEE854_float80 2004-01-11 12:46 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen 2004-01-11 12:45 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix the fatal reservoir usage bug. - meaning of "--nores" was opposite. - it does not use reservoir at all when VBR. 2004-01-11 12:02 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): fix Tag problem when CBR. 2004-01-11 12:01 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): cosmetic 2004-01-11 11:56 takehiro * frontend/mp3rtp.c (takehiro-2002_05_07-experimental): rtp cannot send vbr header. 2004-01-11 11:37 takehiro * libmp3lame/: VbrTag.c, VbrTag.h (takehiro-2002_05_07-experimental): make PutLameVBR() as static 2004-01-11 11:22 aleidinger * configure: regen 2004-01-11 11:20 aleidinger * configure.in: Welcome to 3.96. 2004-01-11 10:21 bouvigne * libmp3lame/version.h: We are now in 3.96 2004-01-11 10:03 takehiro * frontend/: get_audio.c, get_audio.h (takehiro-2002_05_07-experimental): ignore the MPEG header whose layer is not same as the filename. 2004-01-11 09:56 takehiro * frontend/get_audio.h (takehiro-2002_05_07-experimental): fix build problem with libsndfile. 2004-01-11 02:21 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove unused tables. 2004-01-11 01:19 takehiro * testcase.mp3, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): choose from 4 code table when ixmax = 2, 3, ..., 7 2004-01-10 22:47 takehiro * libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): cosmetic 2004-01-10 21:20 olcios * doc/html/history.html: cosmetic 2004-01-10 20:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix mp3x sometimes crashes. 2004-01-10 20:31 takehiro * configure (takehiro-2002_05_07-experimental): regen by hand 2004-01-10 20:29 takehiro * Makefile.B32, Makefile.unix, config.h.in, configure.in, frontend/mp3x.dsp (takehiro-2002_05_07-experimental): remove symbol HAVE_GTK 2004-01-10 20:20 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial 2004-01-10 20:16 takehiro * frontend/mp3x.c, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/set_get.h, mpglib/layer3.c (takehiro-2002_05_07-experimental): clean up and fix analyzer hook related code. 2004-01-10 20:15 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial 2004-01-10 19:34 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h, takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): clean up huffman coding tables. 2004-01-10 19:24 takehiro * testcase.mp3, libmp3lame/bitstream.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): little bit better huffman coding when ix_max = 2 2004-01-10 18:25 takehiro * testcase.mp3, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/i386/choose_table.nas (takehiro-2002_05_07-experimental): little bit better huffman coding when ix_max is 1. 2004-01-10 17:28 olcios * USAGE: cosmetic change 2004-01-10 16:14 takehiro * libmp3lame/lame.c: fix the display of lowpass fileter config. 2004-01-10 16:01 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): main line merge. - Gaby's VBRtag fix (do not include the vbr header into the vbr seek table as it breaks a player). 2004-01-10 15:57 takehiro * ACM/ACMStream.cpp (takehiro-2002_05_07-experimental): main line merge - Gaby's buffer size fix. 2004-01-10 12:59 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): added one more error check. 2004-01-10 12:31 takehiro * TODO (takehiro-2002_05_07-experimental): update 2004-01-10 12:29 aleidinger * testcase.mp3: testcase for 3.95 2004-01-10 12:29 takehiro * doc/html/history.html: added mpglib fix 2004-01-10 12:18 aleidinger * ChangeLog: update CVS history 2004-01-10 12:13 aleidinger * libmp3lame/version.h: Preperation for 3.95 RELEASE. Please notify me and Gabriel in case you change something from this point in time upto the 3.96 version bump. 2004-01-10 12:10 aleidinger * doc/html/history.html: faster on PPC 2004-01-10 12:03 aleidinger * libmp3lame/util.h: do not use FastLog implicitely 2004-01-10 12:02 aleidinger * configMS.h: explicit use of FastLog 2004-01-10 11:42 aleidinger * configure: regen 2004-01-10 11:35 aleidinger * configure.in: - use the IEEE 754 hack and FastLog on x86 and PPC only - make the use of FastLog explicit PPC performance: 1GHz G4 "Standard" : 396 s (100%) FastLog : 371 s ( 93%) FastLog, 754 : 365 s ( 92%) 754 : 388 s ( 98%) 2GHz G5 (dual), cbr, vbr "Standard" : 166 s (100%), 328 s (100%) FastLog : 169 s (102%), 338 s (102%) FastLog, 754 : 148 s ( 90%), 288 s ( 88%) 754 : 145 s ( 87%), 279 s ( 85%) On a G5 we shouldn't use FastLog (I assume highly optimized for G5 log*() routines in the standard math library), but configure doesn't know ATM how do check for a G5. 2004-01-10 10:38 takehiro * frontend/get_audio.c: backport from my experimental branch to fix the crash when invalid input. 2004-01-10 10:27 takehiro * mpglib/: common.c, interface.c, layer1.c, layer3.c: backport from my experimenhtal branch, to fix the crash when invalid input. 2004-01-10 09:55 takehiro * doc/html/history.html: effetc->affect reported at sf.net (BugID #867502) 2004-01-08 19:55 olcios * libmp3lame/gain_analysis.c: comment update (clarification) 2004-01-08 19:14 olcios * USAGE: Removed --replaygain from USAGE, because it had been defaulted and the option removed from LAME. Updated information on --replaygain-accurate. 2004-01-08 15:58 bouvigne * configMS.h, doc/html/history.html, doc/html/index.html: predicted release date: January 11th 2004-01-07 17:58 aleidinger * frontend/Makefile.in: regen 2004-01-07 17:57 aleidinger * frontend/Makefile.am: Add mp3x_vc6.dsp. Requested by: Gabriel 2004-01-07 17:35 bouvigne * README.WINGTK, lame_vc6.dsw, frontend/lame_vc6.dsp, frontend/mp3x_vc6.dsp, libmp3lame/libmp3lame_vc6.dsp, mpglib/mpglib_vc6.dsp: added back mp3x to the VC6 projects 2004-01-07 15:57 aleidinger * configure: regen 2004-01-07 15:51 aleidinger * configure.in: - bump version to 3.95 - disable layer1 decoding by default - reword the layer options and some option descriptions - enable the use of the fast log function on every CPU (for x86 this is implicit by the ieee hack) 2004-01-07 15:26 aleidinger * config.h.in: add the fast log option 2004-01-07 13:26 bouvigne * mpglib/mpglib_vc6.dsp: disable layer I 2004-01-06 14:38 bouvigne * libmp3lame/version.h: bump alpha 2004-01-06 13:53 bouvigne * libmp3lame/VbrTag.c: do not include the vbr header into the vbr seek table as it breaks a player 2004-01-05 18:58 takehiro * libmp3lame/: lame.c, quantize.c, tables.c (takehiro-2002_05_07-experimental): fix ABR bitrate changed VBR quality <-> compression ratio mapping. changed gfc->masking_lower setting 2004-01-05 17:51 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix a warning. reduce prefetch length. 2004-01-05 16:25 bouvigne * doc/html/history.html: history 2004-01-05 16:19 bouvigne * ACM/ACMStream.cpp: fixed a buffer requirement error 2004-01-05 09:45 bouvigne * libmp3lame/: l3side.h, quantize.c, takehiro.c: faster count_bits 2004-01-05 07:35 takehiro * mpglib/common.c (takehiro-2002_05_07-experimental): one more fix for seg.fault 2004-01-05 07:30 takehiro * mpglib/common.c (takehiro-2002_05_07-experimental): fix seg.fault (not good way, indeed) 2004-01-05 07:16 takehiro * configure.in (takehiro-2002_05_07-experimental): fix typo and disable LAYER1 decoding by default. 2004-01-05 07:15 takehiro * libmp3lame/i386/Makefile.in, configure (takehiro-2002_05_07-experimental): regen 2004-01-05 07:14 takehiro * libmp3lame/i386/Makefile.am (takehiro-2002_05_07-experimental): fix build problem 2004-01-05 06:47 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): more strict syncword check when no LAYER1/2 support. 2004-01-04 19:45 takehiro * libmp3lame/: lame.c, tables.c, util.h (takehiro-2002_05_07-experimental): finished fixing mono encoding (initialization problem of inter-channel masking value) remove useless code in stereo->mono mix down. fix ATH adjustment code initialization. 2004-01-04 17:35 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix mono-mode bitrate selection. 2004-01-04 15:39 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix the condition to use freeformat or not. 2004-01-04 11:04 bouvigne * libmp3lame/lame.c: corrected -k 2004-01-03 17:08 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): trivial clean up and fix comments. 2004-01-03 16:47 bouvigne * doc/html/history.html: history 2004-01-03 16:22 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix possible highpass filter display problem. 2004-01-03 16:17 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): changed short block switching threshold for 8/16 kbps. 2004-01-03 04:11 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix "FATAL" typo. some code clean up. 2004-01-03 04:10 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix for mono encoding. 2004-01-02 19:53 bouvigne * libmp3lame/lame.c: changed quality mapping 2004-01-02 19:51 bouvigne * libmp3lame/takehiro.c: faster count_bits 2004-01-02 19:49 bouvigne * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c, vbrquantize.c: Faster quantizations Only 5% speedup when using Takehiro's ieee754 hack, but about 60% speedup otherwise. (Should please Mac users) 2004-01-02 09:02 takehiro * mpglib/common.c (takehiro-2002_05_07-experimental): check emphasis bits in mpeg header. 2004-01-01 17:52 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): fix warning on mingw (and probabry VC) 2004-01-01 17:51 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): changed function name, lame_decode_fromfile -> decode_fromfile because it is not LAME standard API. 2004-01-01 17:23 takehiro * mpglib/layer1.c (takehiro-2002_05_07-experimental): fix stereo value handling. 2004-01-01 15:22 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix location where emphasis is recorded. 2004-01-01 15:21 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): prepare for better MP3 header detection. 2003-12-31 19:07 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix assertion condition. fix i-stereo bit usage counting. 2003-12-31 04:27 takehiro * libmp3lame/: encoder.c, lame.c, psymodel.c, quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-12-30 19:10 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up.(code to check the MAX_BITS is moved) 2003-12-30 18:52 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): ok, new years present. here goes alpha10! 2003-12-30 18:47 takehiro * ACM/ddk/.cvsignore (takehiro-2002_05_07-experimental): added to ignore Makefile 2003-12-30 18:46 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it makes invalid mp3 file when 320kbps. 2003-12-30 18:45 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): added one more check. trivial coding clean up. 2003-12-30 17:12 takehiro * Makefile.in, aclocal.m4, configure, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/ddk/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen with automake1.7.9, autoconf 2.59 on cygwin. 2003-12-30 13:03 takehiro * testcase.mp3, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): trivial clean up. 2003-12-30 12:28 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix masking_lower hadling 2003-12-30 12:26 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): do not store FFT value when not using analyzer 2003-12-30 10:23 takehiro * configure, ACM/Makefile.in, ACM/ddk/Makefile.in (takehiro-2002_05_07-experimental): regen 2003-12-30 10:19 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial optimization 2003-12-29 18:45 takehiro * libmp3lame/: lame.c, psymodel.c, quantize.c, tables.c, util.h (takehiro-2002_05_07-experimental): hadling masking_lower is moved to quantize.c from psymodel.c fix bug in threshold calculation of short block last sfb. better intensity stereo band selection.(do not use IS at lower frequency) fix comments 2003-12-29 18:09 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): omit MDCT calculation beyond cutoff. The gain(for MDCT) is arround 15% when 18kHz cutoff. 2003-12-29 08:05 takehiro * libmp3lame/: set_get.c, tables.c (takehiro-2002_05_07-experimental): reservoir size fix for 320kbps over. 2003-12-29 08:05 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): added one error check. 2003-12-28 15:41 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix reservoir max size configuration. 2003-12-28 13:57 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix free format detection. 320kbps is not always free format. 2003-12-28 12:48 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix MPEG2 scalefactor output. 2003-12-28 12:47 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): better error detection for debug mode. 2003-12-28 12:11 takehiro * frontend/parse.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix -k option. 2003-12-28 11:49 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix warning 2003-12-28 11:48 takehiro * libmp3lame/: psymodel.c, psymodel.h, quantize.c, tables.c (takehiro-2002_05_07-experimental): many cosmetic change and clean up. 2003-12-27 17:45 takehiro * libmp3lame/: psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): use more fine resolution infomation for block switching. 2003-12-27 14:55 takehiro * testcase.mp3, libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): update testcase clean up psymodel.c 2003-12-27 14:24 takehiro * frontend/gtkanal.c, libmp3lame/encoder.c, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/util.h, libmp3lame/version.h (takehiro-2002_05_07-experimental): now psymodel version 0.91-3 - new ATH adjustment. * ATH adjustment per channel, not per granule. - display ATH adjustment value in mp3x. - new long/short block switching code. * now it is aware of post masking. * switch to short block when post echo may happen. - better long->short masking (threshold/energy) conversion. 2003-12-23 10:29 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): added one comment. 2003-12-23 10:22 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial clean up. 2003-12-23 10:13 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tuning/fixing norm[] values of the spreading function. 2003-12-22 16:36 bouvigne * doc/html/history.html: history 2003-12-22 09:44 bouvigne * libmp3lame/quantize_pvt.c: reduced warnings 2003-12-21 18:41 bouvigne * frontend/: get_audio.c, main.c, parse.c: reduced warnings 2003-12-21 18:14 bouvigne * libmp3lame/: encoder.c, psymodel.c, psymodel.h, quantize.c, quantize_pvt.c, quantize_pvt.h, util.h: FLOAT8 -> FLOAT 2003-12-21 16:09 takehiro * libmp3lame/: psymodel.c, psymodel.h, tables.c (takehiro-2002_05_07-experimental): safer threshold calculation arround attack detected position. 2003-12-21 15:12 takehiro * configure.in, ACM/Makefile.am (takehiro-2002_05_07-experimental): added ACM/ddk directory 2003-12-21 15:06 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): update comment as is done in main line. 2003-12-21 15:03 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix short block ATH scaling and masking threshold. 2003-12-21 13:30 takehiro * libmp3lame/: psymodel.c, lame.c, tables.c (takehiro-2002_05_07-experimental): - temporal masking aware short/long block switching. - tuning reduce side value. - fixed long->short block threshold conversion factor. - fixed array declaration bug in short block threshold calculation. 2003-12-21 12:46 bouvigne * libmp3lame/: encoder.c, lame.c, presets.c, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, util.h: FLOAT8 -> FLOAT 2003-12-21 12:30 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove bval_width[] related code. 2003-12-21 12:25 takehiro * mpglib/layer3.c (takehiro-2002_05_07-experimental): fix 8kbps decode bug (backport from main line) 2003-12-21 10:16 bouvigne * libmp3lame/: VbrTag.c, lame.c, psymodel.c, util.c, util.h: FLOAT8 -> FLOAT 2003-12-20 14:48 bouvigne * libmp3lame/psymodel.c: fixed calc_interchannel_masking when encoding to mono 2003-12-20 14:33 bouvigne * libmp3lame/lame.c: fixed lowpass value for high bitrate vbr profiles 2003-12-20 14:31 bouvigne * libmp3lame/version.h: Using 3.95 as version number. We will decide latter what to choose about version numbers 2003-12-19 13:55 bouvigne * libmp3lame/version.h: Moved back to 3.94b in order to not have some 3.95b spreading on the web. We now have to decide if we should go in the 3.94release direction or in the 3.95b direction 2003-12-18 18:47 bouvigne * libmp3lame/version.h: welcome in 3.95 2003-12-18 17:13 aleidinger * ChangeLog: ChangeLog for 3.94b. 2003-12-18 15:46 bouvigne * libmp3lame/version.h: 3.94b 2003-12-18 12:54 aleidinger * frontend/get_audio.c: Takehiro noticed a bug in the pipe fix, it results in a click sound at the end of the encoding of BlackBirds.wav. This fix is a merge from the experimental branch and doesn't seem to be harmful while encoding over a pipe, but I'm not sure if I was able to reproduce the situation where the original fix was needed. I've tested: mkfifo pipetest lame -preset 96 pipetest pipetest.mp3 other shell: cat wav >pipetest 2003-12-17 18:45 bouvigne * frontend/parse.c: help 2003-12-17 11:52 bouvigne * libmp3lame/psymodel.c: updated comment regarding spreading function 2003-12-15 17:07 bouvigne * mpglib/layer3.c: fixed 8kHz decoding 2003-12-15 11:48 takehiro * ACM/ddk/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): sync with main line 2003-12-14 17:56 takehiro * TODO (takehiro-2002_05_07-experimental): added some new items. - highpass filter for psycho-analysis. - temporal-masking-aware block switching. 2003-12-14 17:52 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): clean up s3_func() (no results difference) remove normalization and bark width consideration. # hehe, it's now obvious to see which frequency makes strong masking :p 2003-12-12 18:22 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): coding style update. check the INFO sub-chunk in LIST chunk. 2003-12-12 18:21 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix it treat the chunk after data chunk as part of data chunk. 2003-12-12 17:24 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): trivial style update (including comment style, etc). 2003-12-12 16:52 takehiro * libmp3lame/: psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): remove nb_1 from gfc. 2003-12-12 16:15 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix last change (oops, I checked-in the wrong version...) 2003-12-12 16:12 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix bit reservoir handling when looooooooow bit rate. 2003-12-12 14:31 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial clean up 2003-12-12 14:31 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): added error check code. 2003-12-12 13:29 takehiro * frontend/main.c, frontend/main.h, frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): clean up variables in gfc and gfp. 2003-12-09 17:22 olcios * frontend/parse.c: Fixed typo. 2003-12-09 17:19 olcios * frontend/parse.c: Fixed an error message. 2003-12-09 16:08 aleidinger * ACM/Makefile.in: regen 2003-12-09 16:01 aleidinger * configure: regen 2003-12-09 15:51 aleidinger * ACM/ddk/Makefile.in: Add the autoconf Makefile. 2003-12-09 15:49 aleidinger * configure.in: Add the ACM/ddk subdirectory. 2003-12-09 15:49 aleidinger * ACM/Makefile.am: Add the ddk subdirectory. 2003-12-09 15:48 aleidinger * ACM/ddk/Makefile.am: Add an automake Makefile. 2003-12-09 15:06 bouvigne * libmp3lame/version.h: Bump alpha 2003-12-09 15:05 bouvigne * frontend/parse.c: do not display --r3mix in help 2003-12-09 15:03 bouvigne * doc/html/history.html: 3.94 release date? 2003-12-09 14:59 bouvigne * doc/html/: basic.html, examples.html, history.html, index.html, modes.html, presets.html, switchs.html: 3.94 documentation 2003-12-08 16:52 bouvigne * libmp3lame/VbrTag.c: Use integer format for ReplayGain peak value 2003-12-06 20:54 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial optimization. 2003-12-06 20:10 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): make best_huffman_divide() as static. make it do not call best_huffman_divide() twice when vbr. 2003-12-06 19:00 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): fix warning of quantize_sfb_3DN() prototype declaration. fix pseudo half step bug on 3DNow!/SSE machines. 2003-12-06 17:17 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): remove experimental switches from context structure. 2003-12-06 13:37 takehiro * libmp3lame/: psymodel.c, quantize.c, quantize_pvt.h (takehiro-2002_05_07-experimental): trivial clean up 2003-12-06 11:10 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): reduce subblock gain value. 2003-12-06 07:01 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): VBR code update. - fixed sf value range limit(not fatal, but possible quality degrade in higher VBR quality mode). - adjust the initiail value of scalefactor search for speed up(arround 1 or 2%).CVS: ---------------------------------------------------------------------- 2003-12-05 12:49 aleidinger * libmp3lame/i386/Makefile.in: add missing " 2003-12-04 12:26 aleidinger * libmp3lame/i386/Makefile.in: nasm -> NASM fix 2003-12-03 16:35 takehiro * testcase.mp3, libmp3lame/quantize.c (takehiro-2002_05_07-experimental): changed short block noise estimation (max noise -> sum noise). 2003-12-03 15:32 takehiro * frontend/rtp.c (takehiro-2002_05_07-experimental): sync with main line. 2003-12-03 03:09 olcios * include/lame.h: comments / doc 2003-12-03 02:18 olcios * frontend/get_audio.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c: Brought back the possibility to run lame_decode_init() more than once 2003-12-03 01:44 olcios * frontend/get_audio.c, frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/set_get.c: Made it impossible to simultaneously use mp3 input and decoding on the fly. 2003-12-01 17:45 takehiro * configure, Dll/Makefile.in, frontend/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen 2003-12-01 17:44 takehiro * libmp3lame/i386/Makefile.am (takehiro-2002_05_07-experimental): backport Alex's dirty hack, which is less dirty than mine :) 2003-12-01 17:43 takehiro * ltmain.sh (takehiro-2002_05_07-experimental): replaced the one from libtool 1.5 2003-12-01 15:45 takehiro * frontend/depcomp, libmp3lame/depcomp, misc/depcomp, mpglib/depcomp (takehiro-2002_05_07-experimental): removed unused file (build system uses ../depcomp) 2003-11-29 12:14 aleidinger * ChangeLog: update 2003-11-29 12:10 aleidinger * test/cvscheck.sh: add the automated test script which mt used to run every day 2003-11-29 12:09 aleidinger * configure: regen with autoconf 2.57 2003-11-29 12:06 aleidinger * ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen with automake 1.7 2003-11-29 12:05 aleidinger * configure.in: - Check for some features a little bit earlier. - Fix a AC_DEFINE so the newer tools don't moan. 2003-11-29 12:03 aleidinger * libmp3lame/i386/Makefile.am: HACK HACK HACK, UGLY UGLY HACK! make this work with libtool 1.5 If anybody knows how do this in a more sane way, please teach me how to do it. 2003-11-29 12:01 aleidinger * ltmain.sh: update with libtool 1.5 version 2003-11-29 12:00 aleidinger * aclocal.m4: update with newer autotools 2003-11-29 11:59 aleidinger * config.h.in: add some missing undefs 2003-11-29 11:16 aleidinger * frontend/rtp.c: fix some errors which are new with gcc 3.x 2003-11-29 09:49 aleidinger * frontend/depcomp, libmp3lame/depcomp, mpglib/depcomp: use the ones provided by automake 1.7 2003-11-29 09:45 aleidinger * missing, mkinstalldirs, depcomp, install-sh: use the ones provided by automake 1.7 2003-11-29 09:44 aleidinger * config.guess, config.sub: use the ones provided with libtool 1.5 2003-11-28 18:23 takehiro * frontend/brhist.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/tables.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): clean up bitrate histgram code. 2003-11-28 17:53 takehiro * libmp3lame/: bitstream.c, lame.c, quantize.c, util.h (takehiro-2002_05_07-experimental): remove unused definition (resample_t) rename Bit_stream_struct -> bit_stream_t 2003-11-28 17:30 takehiro * libmp3lame/: VbrTag.c, lame.c, lame_global_flags.h, set_get.c, tables.c, util.h (takehiro-2002_05_07-experimental): move and rename "gfp->exp_nspsytune" => "gfc->nsPsy.tune" 2003-11-28 17:20 takehiro * libmp3lame/: psymodel.c, quantize.c, util.h (takehiro-2002_05_07-experimental): remove "ath_over" from III_psy_ratio 2003-11-28 17:17 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): make lame_decode1_headersB_clipchoice() as static 2003-11-28 16:48 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): remove unused code 2003-11-28 16:46 takehiro * libmp3lame/: util.c, util.h, i386/cpu_feat.nas (takehiro-2002_05_07-experimental): simplify the CPU feature detection code. 2003-11-28 16:42 takehiro * TODO (takehiro-2002_05_07-experimental): divide TODO item about encoding quality problem into 2 piece. 2003-11-28 16:38 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix comments. 2003-11-28 16:24 takehiro * libmp3lame/: encoder.c, lame.c (takehiro-2002_05_07-experimental): trivial 2003-11-28 16:24 takehiro * libmp3lame/: quantize.c, quantize.h (takehiro-2002_05_07-experimental): fix warning simplify the code. 2003-11-28 16:11 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): sync main branch (lowpass adjustment when mono) and trivial clean up. 2003-11-28 16:04 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove unused definition 2003-11-28 16:03 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): do not use reservoir when -q 9 2003-11-28 15:58 takehiro * USAGE (takehiro-2002_05_07-experimental): remove documents about removed options 2003-11-28 15:53 takehiro * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): clean up VBR finish code and remove "-F" option. LAME always use VBR_hard_min now. The option is quite "FAQ"ed and hacky/dirty work arround to conceal the psymodel flaw. 2003-11-28 15:34 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): changed ResvFrameBegin() arguments. 2003-11-28 15:29 takehiro * libmp3lame/: VbrTag.c, encoder.c, quantize.c, quantize.h (takehiro-2002_05_07-experimental): clean up pinfo setting code (for analyzer) 2003-11-28 15:16 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial simplification. 2003-11-28 15:16 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): make gcd() as static. 2003-11-28 15:02 takehiro * TODO (takehiro-2002_05_07-experimental): resampling code bug is fixed. 2003-11-28 15:01 takehiro * libmp3lame/: lame.c, util.c, util.h (takehiro-2002_05_07-experimental): make fill_buffer_resample as static function. fix the bug in resampling (like from 44099 to 44100) and remove work arround code. 2003-11-28 14:27 bouvigne * libmp3lame/set_get.c: Disabled replaygain decode because it crashes when using mp3 input 2003-11-28 12:22 takehiro * libmp3lame/: psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): simplify the loudness approx code. 2003-11-27 12:27 takehiro * ACM/ddk/msacmdrv.h (takehiro-2002_05_07-experimental): sync with mainline 2003-11-27 12:20 takehiro * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, tables.c, takehiro.c (takehiro-2002_05_07-experimental): simplify the function interfaces. remove unused definitions. trivial style update. 2003-11-27 08:24 bouvigne * ACM/: readme.txt, ddk/msacmdrv.h: Allow compilation of ACM codec without Microsoft platform DDK 2003-11-26 13:06 bouvigne * lame_vc6.dsw: Updated ACM dependencies 2003-11-25 17:32 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial 2003-11-25 17:22 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): loop hoisting: loop for writing sideinfo and loop for writing part2/part2_3 is now integrated. 2003-11-25 17:14 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial 2003-11-25 17:13 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix byte/bit confusion. 2003-11-25 16:53 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): do not write magic strings in the post drain part. 2003-11-25 16:48 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix, config.h.in, configure, configure.in (takehiro-2002_05_07-experimental): update build-system related files for new asm code. (I hope they runs correctly) 2003-11-25 16:43 takehiro * frontend/gtkanal.c, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix mp3x block-type display 2003-11-25 15:55 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): psymodel.h is not system header file. 2003-11-25 15:52 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): remove priority setting code. we already have a --priority switch on Windows environment, so we do not need it. 2003-11-25 15:43 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): one more... 2003-11-25 15:20 takehiro * libmp3lame/: bitstream.c, bitstream.h, quantize.c, tables.c, util.h (takehiro-2002_05_07-experimental): more simplification arround bit stream write out code. 2003-11-24 18:26 takehiro * libmp3lame/: bitstream.c, tables.c, util.h (takehiro-2002_05_07-experimental): clean up bitstream write out code. - header(side info) output code is now very simplified. - variable length bitstream output code is now simple and fast. 2003-11-24 17:05 bouvigne * libmp3lame/lame.c: Do not compute ReplayGain when not using vbr header 2003-11-24 16:13 takehiro * libmp3lame/: bitstream.c, tables.c, util.h (takehiro-2002_05_07-experimental): simplify the bitstream output code. 2003-11-24 14:42 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): added SSE version of quantize_ISO() 2003-11-24 13:52 bouvigne * libmp3lame/lame.c: Reduced bandwith when encoding in mono 2003-11-24 13:39 bouvigne * libmp3lame/lame.c: Fixed low bitrates lowpass and sampling rate values (I probably broke it recently) 2003-11-23 20:13 takehiro * frontend/gtkanal.c, libmp3lame/encoder.c, libmp3lame/lame-analysis.h (takehiro-2002_05_07-experimental): update mp3x display (arround block switching parameter). 2003-11-23 20:05 takehiro * frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/tables.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): remvoe unused features and variables - ms_sparsing() - tune() 2003-11-23 19:47 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/util.h (takehiro-2002_05_07-experimental): now it always uses same short block switching threshold for L/R/M channel and S channel. 2003-11-23 19:41 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-23 19:31 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): short block threshold tuning. (of course, need more...) 2003-11-23 11:22 takehiro * libmp3lame/: encoder.c, psymodel.c (takehiro-2002_05_07-experimental): clean up mode extension update code. 2003-11-23 10:45 takehiro * libmp3lame/: bitstream.c, tables.c, util.h (takehiro-2002_05_07-experimental): simplify bitstream writing code. 2003-11-23 10:27 takehiro * libmp3lame/: bitstream.c, psymodel.c (takehiro-2002_05_07-experimental): trivial clean up. 2003-11-23 10:04 takehiro * libmp3lame/encoder.h (takehiro-2002_05_07-experimental): fix comments and comment out the unused definitions. 2003-11-23 10:03 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-23 10:03 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): fix and simplify the usage message. 2003-11-23 09:47 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): clean up block type update code 2003-11-23 09:46 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-23 09:14 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fix for MPEG2.5 (for the case band width = 2) 2003-11-23 09:09 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): clean up writing table-id code. 2003-11-23 09:08 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-23 08:36 takehiro * libmp3lame/i386/fft3dn.nas (takehiro-2002_05_07-experimental): remove unused code. 2003-11-22 19:41 takehiro * libmp3lame/: bitstream.c, util.h (takehiro-2002_05_07-experimental): optimize bitstream output code. 2003-11-22 19:14 takehiro * libmp3lame/i386/: fft.nas, ffttbl.nas (takehiro-2002_05_07-experimental): remove unused files 2003-11-22 19:14 takehiro * libmp3lame/i386/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): remove unused extra-dist files 2003-11-22 18:58 takehiro * libmp3lame/: bitstream.c, util.h (takehiro-2002_05_07-experimental): optimize writeheader() 2003-11-22 18:39 takehiro * ACM/TODO (takehiro-2002_05_07-experimental): update 2003-11-22 18:39 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of count1 region quantization 2003-11-22 18:12 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix message. 2003-11-22 18:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-22 18:09 takehiro * libmp3lame/version.c (takehiro-2002_05_07-experimental): added version string to SSE and E3DNow. 2003-11-22 17:43 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix ABR mode sometimes uses 640kbps (!) 2003-11-22 17:40 takehiro * libmp3lame/: lame.c, tables.c, i386/fft3dn.nas (takehiro-2002_05_07-experimental): E3DNow! version of fht() 2003-11-22 17:39 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial cleanup 2003-11-22 13:30 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): clean up and merge CBR/ABR code. 2003-11-22 13:19 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of quantize_ISO() 2003-11-22 13:03 takehiro * Dll/Example_vc6.dsw (takehiro-2002_05_07-experimental): sync main branch - Corrected the dll example project 2003-11-22 09:03 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2003-11-22 08:45 takehiro * libmp3lame/: quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): fix warning and build problem 2003-11-22 07:57 takehiro * Dll/MP3export.pas (takehiro-2002_05_07-experimental): sync main branch. - fix calling convention 2003-11-22 07:56 takehiro * Dll/BladeMP3EncDLL.def (takehiro-2002_05_07-experimental): added some interface. 2003-11-22 07:55 takehiro * Dll/BladeMP3EncDLL.c (takehiro-2002_05_07-experimental): sync main branch - display issue fix. 2003-11-22 07:51 takehiro * Dll/Makefile.am (takehiro-2002_05_07-experimental): sync main branch. - added files for vc6 and mingw. 2003-11-21 17:07 bouvigne * Dll/BladeMP3EncDLL.c: Display issues 2003-11-21 17:03 takehiro * libmp3lame/: quantize.c, takehiro.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of quantization. and some asm code optimization/clean up. 2003-11-21 16:50 bouvigne * Dll/BladeMP3EncDLL.c: Minor corrections 2003-11-20 16:04 bouvigne * Dll/MP3export.pas: Fixed calling convention 2003-11-20 13:30 bouvigne * Dll/Example_vc6.dsw: Corrected the dll example project 2003-11-20 11:16 bouvigne * frontend/get_audio.c, frontend/main.c, frontend/parse.c, include/lame.h, libmp3lame/set_get.c: Changed some Vorbis messages 2003-11-20 11:08 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: Removed mode_automs 2003-11-20 10:57 bouvigne * libmp3lame/: fft.c, lame.c, util.c, util.h: Removed CPU_features.i387 2003-11-20 10:46 bouvigne * libmp3lame/presets.c: Aliased r3mix to vbr-mtrh V3 2003-11-19 13:00 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: anihilated streaming/radio/portable named presets, leaving only the -Vx 2003-11-18 16:18 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix warning 2003-11-18 16:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): new reservoir handling code for ABR. 2003-11-18 15:37 takehiro * testcase.mp3, libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): simplify the sign hadling code. 2003-11-18 15:29 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): simplify the error check code. 2003-11-18 15:21 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): optimize self check code. 2003-11-18 14:03 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): For better/faster encoding, narrowen the frequency region when lower -q. 2003-11-18 13:59 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2003-11-18 13:57 takehiro * libmp3lame/: bitstream.c, quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): fix bit overflow when i-stereo tuning CBR bit allocation (on_pe() function) clean up finish_iteratio_one(). 2003-11-18 13:20 bouvigne * libmp3lame/presets.c: low vbr-mtrh presets 2003-11-18 12:52 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen 2003-11-18 12:51 takehiro * libmp3lame/: lame.c, quantize.c, util.h (takehiro-2002_05_07-experimental): fix CBR_2nd_bitalloc() (it may makes invalid mp3 frame). remapping -q setting. old -q2 is now -q1 enable CBR_2nd_bitalloc() when -q 0,1 and 2 2003-11-18 12:22 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-18 12:18 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): new CBR bit allocation/reservoir handling code. still need tuning (there remains some killer samples), but usually brings better result. 2003-11-17 02:31 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix substep noise shaping. 2003-11-16 18:07 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix possible bit counting bug when CBR and higher -q option. 2003-11-16 18:05 takehiro * libmp3lame/: lame.c, util.c, util.h (takehiro-2002_05_07-experimental): do not display the CPU have i387. 2003-11-16 17:57 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix typo 2003-11-16 17:02 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix mp3x display. 2003-11-16 16:11 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix ID3v2 tag length when --keeptag. 2003-11-16 12:43 takehiro * frontend/: get_audio.c, get_audio.h, main.c (takehiro-2002_05_07-experimental): now --keeptag keeps ID3v2 tag when transcoding. 2003-11-16 11:04 takehiro * libmp3lame/: lame.c, machine.h, psymodel.c, set_get.c, tables.c, util.c, util.h, version.c (takehiro-2002_05_07-experimental): update comment style (// -> /* */) 2003-11-16 11:04 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial optimization. 2003-11-16 10:47 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix one more l3_enc initialization 2003-11-16 10:31 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fix segmentation fault especially when higher VBR quality like -V0. 2003-11-16 10:12 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix trivial(but fatal) bug in short block threshold calculation loop... 2003-11-16 10:08 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix count1 bit-counting (we must zered all zero region because we use 4-stride in count1 region). 2003-11-16 09:55 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix i-stereo+VBR fails to encode (internal buffer inconsistency). 2003-11-15 18:15 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): optimize Huffmancode() by dividing it into tableindex > 15 or not. 2003-11-15 18:14 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen 2003-11-15 17:07 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): fix warning 2003-11-15 17:05 takehiro * libmp3lame/: lame.c, quantize.c, quantize_pvt.h, takehiro.c, util.h (takehiro-2002_05_07-experimental): always use quantize_best() except init_globalgain(). and some code clean up. 2003-11-15 11:21 takehiro * configure: regen 2003-11-15 11:14 takehiro * configure.in: fix migw build(as is done in the experimental branch) 2003-11-15 10:50 takehiro * frontend/get_audio.c: fix ambiguous message (Bug ID #830035) 2003-11-14 16:13 bouvigne * libmp3lame/lame.c: use presets by default when using vbr-mtrh 2003-11-14 13:24 bouvigne * libmp3lame/presets.c: vbr-mtrh high vbr presets 2003-11-12 17:12 takehiro * libmp3lame/: lame.c, util.c, util.h (takehiro-2002_05_07-experimental): check and display if the CPU supports Extended 3DNow! (no E3DNow! code available yet.) 2003-11-12 15:47 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fix build problem for newer NASM ... 2003-11-12 06:43 takehiro * libmp3lame/i386/quantSSE.nas (takehiro-2002_05_07-experimental): fix build problem (on some old nasm) 2003-11-12 06:43 takehiro * libmp3lame/i386/cpu_feat.nas (takehiro-2002_05_07-experimental): fix build problem 2003-11-11 04:27 takehiro * libmp3lame/i386/cpu_feat.nas (takehiro-2002_05_07-experimental): added Extended 3DNow! check code. 2003-11-11 04:26 takehiro * libmp3lame/: lame.c, quantize.c, util.c, util.h, i386/cpu_feat.nas (takehiro-2002_05_07-experimental): sync main branch (SIMD->SSE change) 2003-11-10 15:41 bouvigne * libmp3lame/: fft.c, lame.c, util.c, util.h, i386/cpu_feat.nas: SIMD->SSE 2003-11-10 15:31 bouvigne * libmp3lame/: lame.c, presets.c: Add missing values for vbr_rh -Vx scale 2003-11-10 15:27 takehiro * libmp3lame/i386/fft3dn.nas: fix cygwin build (with nasm) 2003-11-10 15:27 takehiro * libmp3lame/i386/fft3dn.nas (takehiro-2002_05_07-experimental): fix cygwin build with nasm 2003-11-10 14:58 bouvigne * libmp3lame/: lame.c, presets.c: fix lowpass values for low vbr presets 2003-11-10 12:06 bouvigne * libmp3lame/: lame.c, presets.c, set_get.c: Use presets by default when using vbr_rh 2003-11-09 17:40 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix warning 2003-11-09 17:38 takehiro * libmp3lame/: quantize.c, tables.c, tables.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of calc_sfb_noise() (for CBR/VBR/ABR) and simplify the look up table structure. 2003-11-09 15:28 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of calc_sfb_noise_fast() (for VBR) 2003-11-09 14:35 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not call CBR_2nd_bitalloc() when -q >= 6. sometimes it results in an invalid mp3 file. 2003-11-09 14:34 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): revert some part of 1.110.2.190->1.110.2.191. 2003-11-09 09:43 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): 3DNow! version of calc_noise() 2003-11-09 09:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-11-09 07:54 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove fftsse, fftfpu related code. 2003-11-09 06:24 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): always use -q 5 when VBR because VBR mode needs -q 5 (higher -q setting makes no output change and lower -q setting sometimes makes it to encode invalid mp3 file) 2003-11-08 17:51 takehiro * libmp3lame/: takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): revert part of last change, because it may seg-faults when -q 6,7,8,9 2003-11-08 17:45 takehiro * libmp3lame/: quantize.c, takehiro.c, i386/choose_table.nas (takehiro-2002_05_07-experimental): changed quantization code. Now it quantizes >8191+15 values into 8191+15. 2003-11-08 17:44 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix precision problem. 2003-11-08 16:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): VBR code cleanup and fix minor bug - when there's not enough bits, it may decrease bitrate too much. 2003-11-08 07:00 takehiro * libmp3lame/i386/: fftfpu.nas, fftsse.nas (takehiro-2002_05_07-experimental): I cannot make it work and run faster than compiler output. so I removed. 2003-11-07 16:52 takehiro * libmp3lame/: encoder.c, takehiro.c (takehiro-2002_05_07-experimental): trivial code clean up 2003-11-07 16:46 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): optimization - precalc adjusted ATH and use them when mask_add() 2003-11-07 14:54 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): optimize asm code by dirty hack 2003-11-07 14:53 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial optimization(loop hoist) 2003-11-07 14:37 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix VBR mode... 2003-11-06 17:37 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix trivial bug when non-nasm case 2003-11-06 17:18 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix substep shaping. 2003-11-06 17:13 takehiro * libmp3lame/: psymodel.c, quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): - prevent "double ATH handling" problem. - new xr^(3/4) code for 3DNow! (From the latest gogo) - added multiplication function to sumofsqr_3DN() 2003-11-05 17:13 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimize calc_noise() at "0 or 1" region 2003-11-05 14:03 bouvigne * libmp3lame/: presets.c, psymodel.c: Use Vx scale for presets 2003-11-03 23:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix subblock_gain is not used(it ignores the switch). added ugly optimization arround calc_sfb_noise() and calc_sfb_noise_fast(). 2003-11-03 22:54 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): clean up substep shaping code bit. 2003-11-03 18:41 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use 3DNow! more. 2003-11-03 18:16 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): trivial bug fix... 2003-11-03 18:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it always uses substep noise shaping (it ignore the option) when VBR. 2003-11-03 18:09 takehiro * libmp3lame/: quantize.c, i386/quantSSE.nas (takehiro-2002_05_07-experimental): added pow075_3DN (3DNow! version of calculating xr^(3/4)) added "sum x^2" code for 3DNow! and use it. 2003-11-03 17:44 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): considering the Fourier analysis limitation, it should estimate loudness of lower frequency region when ATH adjustment. 2003-11-03 15:00 bouvigne * libmp3lame/: lame.c, presets.c: allow vbr presets to not be enforced (preparative work before defaulting) 2003-11-03 14:04 takehiro * testcase.mp3, libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix infinite loop when short blocks. (oops, trivial bug...) 2003-11-02 12:10 takehiro * libmp3lame/: machine.h, quantize.c, quantize_pvt.h, takehiro.c, util.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): Precalculate the fabs(xr). moved xr34[] and absxr[](=fabs(xr)) into gfc. better alignment work for the compiler not support "align". 2003-11-01 20:06 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): more comments update and clean up 2003-11-01 19:50 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimize substep noise shaping (trancate_smallspectrums()) and count_bits() related code. 2003-11-01 19:30 takehiro * libmp3lame/: quantize.c, util.h (takehiro-2002_05_07-experimental): clean up(fix comments and misleading variable names). 2003-11-01 19:14 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): more clean up. 2003-11-01 18:47 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): clean up the comments 2003-11-01 18:33 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): more coding style and comment clean up. do not quantize all the band in CBR_2nd_bitalloc(). this increase the speed and fix bug when -q6,7,8 2003-11-01 18:16 takehiro * libmp3lame/: bitstream.c, quantize.c, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): general code clean up reduce division in calc_noise() 2003-11-01 14:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix bug in sfb21 handling code(it mistook dB scale and real scale). 2003-11-01 12:44 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): coding clean up 2003-10-30 15:29 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): optimize quantization of "must be quantized to 0 or 1" region. 2003-10-30 15:28 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added new setting, "-q 6" 2003-10-30 14:57 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix small quantization bug in VBR. 2003-10-30 14:17 takehiro * libmp3lame/: encoder.c, quantize.c (takehiro-2002_05_07-experimental): fix low bitrate and intensity stereo. 2003-10-30 13:09 bouvigne * libmp3lame/lame.c: Moved replaygain analysis after resampling. It was causing problems when used with non standard sampling frequencies. 2003-10-27 15:57 takehiro * configure.in, configure (takehiro-2002_05_07-experimental): added to use TAKEHIRO_IEEE754_HACK on AMD64 machines. 2003-10-26 17:58 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen 2003-10-26 16:50 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): update -q mapping and comment. now -q0/-q1 is same as -q2 (-h) 2003-10-26 16:26 takehiro * libmp3lame/: lame.c, util.c, util.h (takehiro-2002_05_07-experimental): more alignment work. 2003-10-26 16:26 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimize calc_noise(). as in main branch, it re-uses the previous calc_noise result where its scalefactor value is not changed 2003-10-26 15:22 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added "SIMD (asm used)" message 2003-10-26 15:22 takehiro * libmp3lame/: quantize.c, machine.h (takehiro-2002_05_07-experimental): more alignment work. 2003-10-26 14:54 takehiro * libmp3lame/: machine.h, util.h (takehiro-2002_05_07-experimental): alignment work 2003-10-26 14:48 takehiro * libmp3lame/: quantize.c, takehiro.c, util.h, i386/Makefile.am, i386/Makefile.in, i386/nasm.h, i386/quantSSE.nas (takehiro-2002_05_07-experimental): SSE version of calculate xr^(3/4), from gogo-no-coda. 2003-10-26 14:46 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial optimization. 2003-10-26 12:44 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/tables.c, libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): update substep noise shaping. - pseudo half step is now default when -q 0 to 4. - in VBR mode, use substep noise shaping if 320kbps is not enough. - changed behaivior of --substep option (see the usage message) 2003-10-26 11:52 takehiro * libmp3lame/: encoder.c, quantize.c (takehiro-2002_05_07-experimental): more generalized optimization by using gfc->xrMaxNum. - we can also use it now with VBR. 2003-10-26 11:27 takehiro * frontend/mp3x.c, include/lame.h (takehiro-2002_05_07-experimental): fix build problem... 2003-10-26 07:43 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use adjust_global_gain() function when pseudohalf step noise shaping. fix it sometimes exceed the global_gain limit. 2003-10-26 07:38 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix build problem when with DECODE_ON_THE_FLY 2003-10-26 07:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix when subblock_gain or scalefactor_scale is used. 2003-10-25 20:53 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): re-quantizing only on the sfb where "distortion" is found. (faster !) revert "double"->"FLOAT" conversion. - it makes some problems on the machine of which FLOAT is REALLY FLOAT (only 32it precision) 2003-10-25 19:54 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimize/debug gi->xrNumMax usage. 2003-10-25 19:45 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): added loop break code by looking the noise in sfb21 because there's no sfb value and we can do nothing with it. 2003-10-25 19:30 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): off by one of max bitrate in VBR. 2003-10-25 19:28 takehiro * libmp3lame/: bitstream.c, bitstream.h, encoder.c, lame.c, set_get.c (takehiro-2002_05_07-experimental): clean up 2003-10-25 19:28 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix VBR/ABR with --nores encode. and clean up reservoir code. 2003-10-25 19:27 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): fix VbrInit code. 2003-10-25 18:12 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): fix dependency (remove reservoir.c) 2003-10-25 18:10 takehiro * libmp3lame/: encoder.c, lame.c, lame_global_flags.h, mpglib_interface.c, psymodel.c, quantize.c, quantize.h, set_get.c, util.h (takehiro-2002_05_07-experimental): analysis hook code clean up. 2003-10-25 18:10 takehiro * TODO (takehiro-2002_05_07-experimental): added decoder thread unsafe problem. 2003-10-25 18:02 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): fix build problem 2003-10-25 15:52 takehiro * configure, configure.in, libmp3lame/machine.h (takehiro-2002_05_07-experimental): remove --enable-all-float option from configure, and make --enable-double-float instead. 2003-10-25 07:31 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): faster calc_noise() by using max number of xr. 2003-10-25 07:15 takehiro * libmp3lame/: encoder.c, quantize.c, tables.c, takehiro.c, util.h (takehiro-2002_05_07-experimental): precise number of max xr for long blocks. (faster CBR/ABR) code clean up. 2003-10-25 06:31 takehiro * TODO (takehiro-2002_05_07-experimental): added mp3x bug. 2003-10-23 12:09 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: presets 2003-10-22 16:22 takehiro * libmp3lame/: encoder.c, quantize.c, takehiro.c, util.h (takehiro-2002_05_07-experimental): count bits/quantization optimization. - do not quantize/search all zero region where obviously all zero region. (use previous quantization result to determine the region) 2003-10-22 13:55 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): remove unused definition 2003-10-22 10:21 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): changed "double" -> "FLOAT" 2003-10-22 10:17 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix sometimes preflag does not decrease the bitrate. 2003-10-22 10:16 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up 2003-10-22 08:26 takehiro * libmp3lame/takehiro.c: fix assertion failure reported by Gabriel. 2003-10-22 07:33 takehiro * libmp3lame/bitstream.c: better debug message 2003-10-22 07:11 takehiro * libmp3lame/: libmp3lame.dsp, libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): update for reservoir code clean up. 2003-10-21 16:31 takehiro * libmp3lame/: bitstream.c, bitstream.h, id3tag.c (takehiro-2002_05_07-experimental): one more clean up 2003-10-21 16:31 takehiro * DEFINES, TODO (takehiro-2002_05_07-experimental): NEW_DRAIN is now defaulted and it solves wmp6.4 problem 2003-10-21 16:22 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): remove duplicated error check make NEW_DRAIN as default code clean up. 2003-10-21 09:05 bouvigne * libmp3lame/: set_get.c, set_get.h, vbrquantize.c: cleanup 2003-10-20 16:10 olcios * doc/html/history.html: Added the word "Radio" to the description of the ReplayGain contribution, as it is actually the "Radio" ReplayGain that is computed. 2003-10-20 15:02 takehiro * libmp3lame/: VbrTag.c, VbrTag.h, encoder.c (takehiro-2002_05_07-experimental): clean up VBRTAG related code. - now the tag is same when --freeformat 128 and when -b 128 - do not make seek table when CBR 2003-10-20 13:19 takehiro * libmp3lame/: Makefile.am, Makefile.in, VbrTag.c, bitstream.c, quantize.c, quantize_pvt.h, reservoir.c, reservoir.h, tables.c, util.h (takehiro-2002_05_07-experimental): large clean up arround reservoir related code 2003-10-20 12:30 bouvigne * doc/html/history.html: history 2003-10-20 11:08 bouvigne * libmp3lame/version.h: bump alpha 2003-10-20 07:20 bouvigne * libmp3lame/quantize_pvt.c: fixed build problem 2003-10-19 23:26 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix comments. 2003-10-19 17:19 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2003-10-19 17:12 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplify the short block noise calculation. 2003-10-19 16:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix VBR when i-stereo and completely mono. 2003-10-19 14:14 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): update 2003-10-19 14:05 takehiro * libmp3lame/: machine.h, mpglib_interface.c, newmdct.c, quantize.c, tables.c, util.c (takehiro-2002_05_07-experimental): remove FLOAT8 at all. 2003-10-19 14:04 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): "floating" scalefactor optimization when preflag is enabled. 2003-10-19 13:42 takehiro * libmp3lame/: bitstream.c, quantize.c, tables.c, takehiro.c (takehiro-2002_05_07-experimental): fix MPEG2 Layer3 scalefactor store code. - fix i-stereo mode. - fix preflag usage. 2003-10-19 13:13 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): remove unused member 2003-10-19 12:50 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): Fix subband filtering initialization code. I hope this solves "very the 1st frame" problem. 2003-10-19 12:20 takehiro * libmp3lame/: bitstream.c, takehiro.c (takehiro-2002_05_07-experimental): use preflag when MPEG2 added istereo bitstream output code when MPEG2 (only output code. not support at the bit-allocation). 2003-10-19 11:41 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): oops, I checked in the wrong version ... 2003-10-19 11:39 takehiro * TODO (takehiro-2002_05_07-experimental): update 2003-10-19 11:37 takehiro * libmp3lame/: encoder.c, lame.c, newmdct.c, psymodel.c, psymodel.h (takehiro-2002_05_07-experimental): fix very the 1st frame encoding. at least MPEG2 Layer3 works, but still there's problem... 2003-10-19 06:24 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix warning when not HAVE_GTK 2003-10-19 04:45 takehiro * TODO (takehiro-2002_05_07-experimental): updated and renumbered. 2003-10-19 04:42 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix max sfb value when preflag+IS 2003-10-19 04:41 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): update comment 2003-10-18 18:05 takehiro * libmp3lame/: encoder.c, quantize.c, tables.c, util.c, util.h (takehiro-2002_05_07-experimental): small clean ups and remove outdated comments. 2003-10-18 17:19 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.h, libmp3lame/set_get.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): use always max_noise as the noise estimation and remove the "quantcomp" selection 2003-10-18 16:54 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): clean up and simplify bin_search_StepSize(). 2003-10-18 16:46 takehiro * libmp3lame/: bitstream.c, quantize.c, reservoir.c, reservoir.h (takehiro-2002_05_07-experimental): fix for NEW_DRAIN fix for target bitrate display in mp3x and code clean up. 2003-10-18 16:17 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): small clean up 2003-10-18 16:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): widen the scalefactor search range when VBR. and use previous frame information to find the scalefactor. 2003-10-18 13:44 takehiro * libmp3lame/: VbrTag.c, VbrTag.h, bitstream.c, lame.c, psymodel.c, quantize.c, util.c, util.h (takehiro-2002_05_07-experimental): fix warnings 2003-10-18 13:43 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): short block threshold tuning. 2003-10-18 12:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix it sometimes drains too much bits into the ancillary. 2003-10-18 10:42 takehiro * TODO (takehiro-2002_05_07-experimental): added quality problem. 2003-10-17 14:39 bouvigne * libmp3lame/: quantize_pvt.c, quantize_pvt.h: One more speedup in calc_noise, but the function is now a little messy 2003-10-17 13:50 bouvigne * configMS.h: updated version number 2003-10-17 11:49 bouvigne * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: Speedup calc_noise (about 5-10%) by re-using noise values per sfb between successive calls 2003-10-16 15:36 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tuning short block masking threshold calculation. 2003-10-16 15:12 takehiro * libmp3lame/: bitstream.c, encoder.h, newmdct.c, psymodel.c (takehiro-2002_05_07-experimental): simplify the block type update code. 2003-10-16 15:10 takehiro * libmp3lame/: lame.c, quantize.c, tables.c (takehiro-2002_05_07-experimental): trivial coding clean up. 2003-10-16 13:26 bouvigne * libmp3lame/: VbrTag.c, presets.c: Put preset used in tag even when just using -b or --abr 2003-10-16 12:55 bouvigne * libmp3lame/VbrTag.c: fixed a Lame header bug: -b xxx --preset yyy was putting xxx as minimum bitrate value in the tag instead of the value defined in the preset yyy 2003-10-16 01:32 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix warning when not DEBUG mode 2003-10-16 01:30 takehiro * libmp3lame/: encoder.c, lame.c, psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): one more cleanup 2003-10-14 17:56 takehiro * libmp3lame/: encoder.c, lame-analysis.h, psymodel.c, util.h (takehiro-2002_05_07-experimental): one more general code clean up. 2003-10-14 17:37 takehiro * testcase.mp3, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/quantize.c, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/tables.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): general clean up. 2003-10-14 16:57 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): write down "i-stereo used or not" to LAME tag. 2003-10-14 16:56 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): remove automs code 2003-10-14 16:54 takehiro * testcase.mp3, frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove lame_(set|get)_automs remove "-m a" option simplify when no psymodel case (but it has bug in reservoir handling.) 2003-10-14 16:46 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): compress "floating" scalefactors 2003-10-14 12:56 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): treat "LR-i" as same as "LR" when display LR/MS history bar. 2003-10-14 12:23 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix MS_MD_LR_LR will never be selected ... 2003-10-14 12:21 takehiro * libmp3lame/: lame.c, psymodel.c (takehiro-2002_05_07-experimental): update mode/block type selection (mode_ext) code. - now it uses "START-STOP" block type transition. - istereo selection code is now simplified. - and small general code clean ups. 2003-10-13 17:56 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): clean up istereo related code. 2003-10-13 17:52 takehiro * Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): fix testcase failure when not HAVE_GTK 2003-10-13 17:27 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix mp3x sometime assertion failure. 2003-10-13 17:21 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix it forgot to reset the istereo usage sfb when LR_I -> LR_MS 2003-10-13 15:57 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): widen the sf search range on short block. some code clean up. 2003-10-13 15:56 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): tuning tonality estimation of "middle" frequency area. 2003-10-13 15:25 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): clean up VBR code. 2003-10-13 13:50 takehiro * TODO (takehiro-2002_05_07-experimental): update with alpha 9 2003-10-13 13:48 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): nuke ".raw" from output filename. fix possible buffer overrun. 2003-10-13 13:26 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use substep noise shaping even when short block. do not substep noise shaping on digital silent channel. 2003-10-13 13:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): init code optimization (do not calculate xr^(3/4) beyond cutoff). 2003-10-13 13:19 takehiro * libmp3lame/: lame.c, tables.c (takehiro-2002_05_07-experimental): use same ath adjustment code for VBR/CBR/ABR 2003-10-13 11:05 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix LR-i stereo selection on short blocks. (I forgot to commit this in alpha9) 2003-10-13 11:02 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix comment. 2003-10-13 10:20 takehiro * testcase.mp3, libmp3lame/version.h (takehiro-2002_05_07-experimental): here goes alpha9 2003-10-13 10:19 takehiro * libmp3lame/: encoder.c, lame.c, quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): clean up preflag/istereo code. 2003-10-13 10:17 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): one more fix about i-stereo aging bug. 2003-10-13 09:53 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): fix --allshort and --shortthreshold 2003-10-11 20:17 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): changed variable name, cod_info_w -> gi_w 2003-10-11 20:11 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): use best_scalefac when istereo. 2003-10-11 19:45 takehiro * libmp3lame/: lame.c, tables.c, util.h (takehiro-2002_05_07-experimental): clean up ATH adjustment code. 2003-10-11 19:45 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do not use athAdjust() 2003-10-11 19:36 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): prepare for "START-STOP" sequence. 2003-10-11 15:11 takehiro * libmp3lame/: encoder.c, psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): fix i-stereo aging bug. 2003-10-11 14:11 takehiro * libmp3lame/: encoder.c, psymodel.c, psymodel.h, quantize.c, quantize.h, util.h (takehiro-2002_05_07-experimental): trivial optimization (more and more) 2003-10-11 13:42 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): trivial optimization 2003-10-11 13:39 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial clean up 2003-10-11 13:19 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): use subblock_gain and scalefac_scale when i-stereo and CBR/ABR. 2003-10-11 13:13 takehiro * libmp3lame/: quantize.c, tables.c (takehiro-2002_05_07-experimental): i-stereo with VBR. 2003-10-11 11:21 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): work arround for mono-input problem when istereo. 2003-10-11 11:09 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix cutoff when i-stereo enabled but not using istereo frame. 2003-10-11 11:05 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): make check_istereo() to be aware of the cutoff. 2003-10-11 10:34 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix off by one bug in loop_break() 2003-10-11 10:29 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix off by one bug in PE calculation (and some code clean up). 2003-10-06 05:09 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): istereo selection code optimization 2003-10-06 04:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix scalefactor breakage when istereo case 2003-10-05 18:08 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): reduce istereo usage ratio. 2003-10-05 18:04 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): small clean up 2003-10-05 17:59 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): sync with main branch - Gaby's freeformat vbrtag fix(rev 1.67->1.68). 2003-10-05 17:48 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix LR-i mode selection. 2003-10-05 17:05 takehiro * testcase.mp3, frontend/gtkanal.c, libmp3lame/encoder.c, libmp3lame/quantize.c, libmp3lame/quantize.h (takehiro-2002_05_07-experimental): general mp3x cleanup. 2003-10-05 16:36 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): remove magic numbers 2003-10-05 14:17 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): pe -> bit-allocation update.(revert old one) 2003-10-05 13:59 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix when almost mono input. 2003-10-05 13:29 takehiro * libmp3lame/: quantize.c, tables.c (takehiro-2002_05_07-experimental): one more --athonly hack. 2003-10-05 13:21 takehiro * libmp3lame/: quantize.c, tables.c (takehiro-2002_05_07-experimental): simplify calc_xmin when "ATH only". 2003-10-05 12:15 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix sfb buffer overrun when i-stereo. 2003-10-05 11:54 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): update the algorithm to select the sfb where it uses i-stereo. 2003-10-05 10:37 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix short block cutoff sfb calculation. 2003-10-04 18:27 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): small optimization - noise calculation in "all zero" region. - sfb21 shaping aware loop_break() 2003-10-04 18:26 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): small clean up 2003-10-04 16:57 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): VBR quality over 9 (not tuned yet at all). 2003-10-04 16:52 takehiro * libmp3lame/: tables.c, util.h, encoder.c, psymodel.c (takehiro-2002_05_07-experimental): make it default to do noise shaping in sfb21. cutoff-aware PE(perceptual entropy) calculation. 2003-10-02 09:25 takehiro * frontend/parse.c: fix build problem.(I made a mistake when back porting ...) 2003-10-01 16:13 takehiro * mpglib/layer3.c (takehiro-2002_05_07-experimental): fix build problem 2003-09-29 17:47 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): tonality estimation tuning ... still need more. 2003-09-29 14:00 takehiro * configure (takehiro-2002_05_07-experimental): regen 2003-09-29 00:35 takehiro * configure.in (takehiro-2002_05_07-experimental): fix typo 2003-09-28 16:44 takehiro * configMS.h (takehiro-2002_05_07-experimental): fix version 2003-09-28 16:42 takehiro * USAGE (takehiro-2002_05_07-experimental): small update. 2003-09-28 16:32 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): re-enable scfsi usage. 2003-09-28 16:30 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): use scalefactor() macro more. 2003-09-28 16:19 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tonality estimation fix #1 - safer tonality estimation at lower frequency. - tuned sine wave (arround 20Hz) with the option "-v --substep 1" - we still need tuning sine wave arround 1kHz. 2003-09-27 18:39 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): "smoothing" the istereo/narrow-stereo/reduce-side values for default setting. and code clean up. 2003-09-27 18:11 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): many small clean up. and mp3x update. - display number of scalefactor bands with a distortion. - display total noise. 2003-09-27 17:15 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix display of istereo-ratio and reduce-side factor 2003-09-27 17:14 takehiro * libmp3lame/lame-analysis.h (takehiro-2002_05_07-experimental): remove unused definition 2003-09-27 17:14 takehiro * INSTALL (takehiro-2002_05_07-experimental): updated for LAME4 - remove outdated compile time options including configure option. 2003-09-27 15:50 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix narrow stereo default setting bug. 2003-09-27 13:13 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): It assumes the noise is monotonic function of the scalefactor, but it is not true. To fix it, I added CBR_2nd_bitalloc() function. 2003-09-27 13:05 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix "%" display. 2003-09-27 09:58 takehiro * frontend/parse.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): added --reduce-side option added to display side-channel pe reduction factor and narrowen stereo factor, when --verbose. 2003-09-27 08:24 takehiro * libmp3lame/: lame.c, psymodel.c, quantize.c, set_get.c, set_get.h, util.h (takehiro-2002_05_07-experimental): reduce_ratio option to control MS/LR ratio. need more tuning. 2003-09-27 06:16 takehiro * frontend/parse.c: added priority control on WIN32, backport from experimental branch. 2003-09-26 13:52 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): remove outdated comment. 2003-09-26 03:50 takehiro * TODO (takehiro-2002_05_07-experimental): updated 2003-09-25 16:27 takehiro * frontend/parse.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/set_get.h, libmp3lame/util.h (takehiro-2002_05_07-experimental): - added --narrowen-stereo option - use narrowen stereo default when lower than 90kbps. 2003-09-25 15:54 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): added priority control option on MS-Windows. (request #649324 @ sf.net) 2003-09-25 13:21 takehiro * configure (takehiro-2002_05_07-experimental): regen by hand. 2003-09-25 13:21 takehiro * configure.in (takehiro-2002_05_07-experimental): fix typo 2003-09-25 13:15 takehiro * libmp3lame/i386/Makefile.in (takehiro-2002_05_07-experimental): fix automake bug by hand (work arround) 2003-09-24 23:18 takehiro * Makefile.in, aclocal.m4, config.guess, config.sub, configure, depcomp, install-sh, missing, mkinstalldirs, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, frontend/rtp.c, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen with aclocl-1.7, automake-1.7, autoconf-2.57 2003-09-24 23:15 takehiro * configure.in (takehiro-2002_05_07-experimental): fixed mingw build. - socket patch from leighsmith, patch ID #809315 @ sf.net socket function is not mandatory when mp3rtp is not built. - bug report from gadibergman, Bug ID #809678 @ sf.net 2003-09-23 18:29 takehiro * DEFINES (takehiro-2002_05_07-experimental): updated 2003-09-23 18:04 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): it sometime goes into infinite loop when imcomplete wave file... 2003-09-23 17:28 takehiro * libmp3lame/: encoder.c, quantize.c (takehiro-2002_05_07-experimental): added "narrow stereo image" function. I will add new "right" switch to enable it, but till then, use -X n (0 2003-08-10 12:48 bouvigne * include/lame.h, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/psymodel.h, libmp3lame/set_get.c, libmp3lame/set_get.h: use presets by default for abr/cbr 2003-08-10 10:11 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2003-08-10 10:09 takehiro * libmp3lame/: libmp3lame.dsp, libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): new interface to change internal flags 2003-08-10 10:06 takehiro * libmp3lame/Makefile.am (takehiro-2002_05_07-experimental): new interface to change internal flags. 2003-08-10 10:05 takehiro * libmp3lame/lame.c, libmp3lame/set_get.c, frontend/parse.c, include/lame.h, libmp3lame/set_get.h (takehiro-2002_05_07-experimental): sync with main branch and fix comments. - changed API name - hidden "internal" flags when stable release (when it will be...) 2003-08-10 10:03 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): fix comment. 2003-08-10 10:03 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix it may use i-stereo at sfb21. 2003-08-10 10:00 takehiro * debian/: control, copyright, lame.docs, lame.files, rules (takehiro-2002_05_07-experimental): sync with main branch, except changelog itself. 2003-08-09 18:55 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix for when there's no LIST chunk. 2003-08-09 12:54 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): fix warning one more. 2003-08-09 12:00 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): fix aliasing warning 2003-08-09 11:30 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): added definition for MSVC (as Gabriel did in main branch) 2003-07-16 01:29 rbrito * debian/: changelog, control, copyright, lame.docs, lame.files, rules: Updated debian packaging. 2003-07-13 10:11 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): RIFF->ID3Tag conversion patch from Charlie Lenahan 2003-07-11 16:35 aleidinger * doc/html/id3.html, doc/man/lame.1, frontend/parse.c: Add --ignore-tag-errors, mostly submitted by Adam Luter . 2003-06-29 15:43 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): revert the latest psymodel update... 2003-06-15 16:52 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): trivial coding style update (comment style change, // ... -> /* ... */ ) 2003-06-15 16:48 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): do not output unused information to avoid any confusion. 2003-06-15 15:28 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix almost all the VBR infinite loop problem (I hope) general code simplification 2003-06-14 17:52 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplified VBR code. 2003-06-14 17:36 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplify the VBR code. fix more infinite loop in VBR, but still .... 2003-06-14 14:34 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix method 2 of substep shaping. added VBR_3rd_bitalloc() to reduce bitrate little bit. 2003-06-14 14:33 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): one more safer tonality estimation in lower frequency, especially for human voice. 2003-06-14 14:32 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): trivial simplification 2003-06-14 09:32 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix compilation problem on MSVC reported by Yaroslav Efimov 2003-06-14 07:40 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix possible VBR infinite loop... but there are still problems. 2003-06-08 18:19 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix VBR code assumes noise<->scalefactor is a monotonic function. some trivial style update 2003-06-08 17:05 takehiro * include/lame.h, frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): remove nspsytune2 2003-06-08 16:58 takehiro * include/lame.h, frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): always use ATH adaptive adjustment 2003-06-08 16:56 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial clean up 2003-06-08 16:40 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): experimental LR-i check code (not enabled yet) 2003-06-04 17:47 takehiro * Dll/BladeMP3EncDLL.c (takehiro-2002_05_07-experimental): sync main branch 2003-06-04 17:42 takehiro * Dll/BladeMP3EncDLL.c: fix quality setting API(patch for BugID 746439 at sf.net, reported by mikokong). 2003-06-01 18:22 aleidinger * libmp3lame/Makefile.in: regen 2003-06-01 18:22 aleidinger * libmp3lame/Makefile.am: add new private header 2003-06-01 17:20 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/libmp3lame_vc6.dsp, libmp3lame/presets.c, libmp3lame/set_get.c, libmp3lame/set_get.h: private header for internal set/get interfaces 2003-06-01 16:12 bouvigne * libmp3lame/id3tag.c: let's use snprintf, with a define for msvc 2003-06-01 12:34 takehiro * libmp3lame/: lame.c, takehiro.c (takehiro-2002_05_07-experimental): trivial simplification 2003-06-01 12:25 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): added --is-ratio switches to set the is-ratio. remove descriptions about -X,-Y and -Z. 2003-06-01 12:24 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added istereo-ratio to display. 2003-06-01 12:19 takehiro * TODO (takehiro-2002_05_07-experimental): update TODOs and categorize them. 2003-06-01 09:16 takehiro * libmp3lame/: lame.c, quantize.c (takehiro-2002_05_07-experimental): tuning lower bitrate (arround 64kbps). - improve pe -> bit allocation - changed cutoff, short-threshold. 2003-06-01 09:14 bouvigne * libmp3lame/VbrTag.c: fix seek table for freeformat There is still something strange because with -b128 and -b128 --freeformat I do not get the same seek table 2003-06-01 09:06 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): scfsi debug. - it forgot to initialize scfsi flag when it changes "not istereo" frame to "istereo" frame. - when scfsi is not used at all, do not re-calculate the how many bits are needed to store the scalefactors. 2003-05-31 18:28 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): initialize gfc->l3_side.is_start_sfb_l/s in case not using istereo. 2003-05-31 18:19 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): do not do the istereo related processes when dual stereo mode. 2003-05-31 14:05 bouvigne * libmp3lame/id3tag.c: ID3 TAG of "Encoder name", backported from experimental branch. Btw snprintf does not exist under msvc, so I used sprintf. 2003-05-31 13:52 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): sync with the main branch (fix VBR tag when freeformat by Gabriel) 2003-05-31 13:30 takehiro * libmp3lame/id3tag.c (takehiro-2002_05_07-experimental): ID3 TAG of "Encoder name". This is based on the patch from danchr, at http://www.hydrogenaudio.org/index.php?act=ST&f=15&t=9858& 2003-05-31 13:16 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): do not use istereo when "analog-monaural". 2003-05-25 17:00 takehiro * libmp3lame/: encoder.c, psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): fix i-stereo frame timing delay. do not use i-stereo when completely mono. 2003-05-25 15:34 bouvigne * libmp3lame/VbrTag.c: corrected the bitrate index of LAME tag in case of freeformat, but the seek table is still wrong 2003-05-25 13:21 takehiro * Makefile.in, debian/Makefile.in (takehiro-2002_05_07-experimental): regen 2003-05-25 13:14 takehiro * Makefile.am, debian/Makefile.am (takehiro-2002_05_07-experimental): moved dist-hook, as is in the head branch. 2003-05-25 13:09 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix initialization of "istereo used band" when istereo is not used at all. 2003-05-25 13:04 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix istereo stereo image bug when mono. 2003-05-25 12:28 takehiro * include/lame.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): psymodel for i-stereo. determine which sfb to use i-stereo by checking similarity of the masking/energy ratios. 2003-05-25 07:31 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimize CBR/VBR mode pe<->bit allocation trivial simplification arround VBR. 2003-05-25 03:25 takehiro * libmp3lame/: encoder.c, psymodel.c (takehiro-2002_05_07-experimental): i-stereo improvement. - auto switching LR-i <=> MS-i - i-stereo aware pe calculation 2003-05-25 01:19 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): added i-stereo frame count display. 2003-05-25 00:59 takehiro * TODO (takehiro-2002_05_07-experimental): slightly updated about i-stereo. 2003-05-20 12:19 aleidinger * debian/Makefile.in, configure: regen 2003-05-20 12:17 aleidinger * aclocal.m4: remove gtk12-config 2003-05-20 12:14 aleidinger * Makefile.am, debian/Makefile.am: move the dist-hook into the directory where the action happens 2003-05-20 12:13 aleidinger * configure.in: some enhancements for compiler problems and detection of the right size of some types 2003-05-19 04:20 takehiro * configure (takehiro-2002_05_07-experimental): regen 2003-05-19 04:19 takehiro * Makefile.in, aclocal.m4, config.guess, config.sub, ltmain.sh, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): regen with libtool-1.4.2/automake-1.5 to fix nasm enabled build 2003-05-19 04:17 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix compilation problem on "old" compilers 2003-05-19 04:09 takehiro * .cvsignore (takehiro-2002_05_07-experimental): added stamp-h?, remove stamp-h1 2003-05-18 17:20 takehiro * libmp3lame/: bitstream.c, encoder.c, lame.c, lame_global_flags.h, psymodel.c, quantize.c, tables.c, takehiro.c, util.h, version.h (takehiro-2002_05_07-experimental): initial support of intensity stereo for lower bitrate it will be enabled when 64-112kbps by default. now bump up the alpha7. 2003-05-18 16:13 takehiro * libmp3lame/version.c (takehiro-2002_05_07-experimental): when NASM is not enabled, do not print message about "MMX" or "3dNow!" 2003-05-18 15:05 takehiro * Makefile.am: added chmod +x debian/rules when make dist. 2003-05-18 15:03 takehiro * Makefile.am, Makefile.in, misc/Makefile.am, misc/Makefile.in (takehiro-2002_05_07-experimental): moved lame.bat added "chmod +x debian/rules" when "make dist" to resolve BugID #578129 2003-05-18 14:15 takehiro * Dll/BladeMP3EncDLL.h: patch from sf.net, Dll compile with gcc. 2003-05-18 07:04 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix for the environment which "long" is 64bit. 2003-05-18 03:45 takehiro * frontend/parse.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): simplify the opening message 2003-05-18 02:35 takehiro * frontend/: main.h, parse.c (takehiro-2002_05_07-experimental): trivial change and fix warnings 2003-05-18 02:34 takehiro * config.guess (takehiro-2002_05_07-experimental): oops, I overwrote the older file. revert. 2003-05-18 02:31 takehiro * config.sub (takehiro-2002_05_07-experimental): oops, I overwrite the older file. 2003-05-18 02:27 takehiro * stamp-h.in (takehiro-2002_05_07-experimental): removed 2003-05-18 02:21 takehiro * USAGE (takehiro-2002_05_07-experimental): remove -d and --voice changed recommended setting 2003-05-17 18:49 takehiro * frontend/: main.c, mp3x.c, parse.c (takehiro-2002_05_07-experimental): simplify the startup messages fix typo in warning mesage 2003-05-17 18:35 takehiro * frontend/parse.c, include/lame.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): remove all the presets 2003-05-17 17:55 takehiro * acconfig.h, ltconfig (takehiro-2002_05_07-experimental): removed 2003-05-17 17:51 takehiro * configure (takehiro-2002_05_07-experimental): regen 2003-05-17 17:50 takehiro * Makefile.in, aclocal.m4, config.guess, config.h.in, config.sub, configure.in, ltmain.sh, ACM/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, mac/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, libmp3lame/i386/Makefile.in (takehiro-2002_05_07-experimental): regen with autoconf-2.54, automake-1.6, libtool-1.4 2003-05-17 17:22 takehiro * Dll/BladeMP3EncDLL.h (takehiro-2002_05_07-experimental): BladeMP3EncDLL.h patch for GCC from sf.net 2003-05-15 17:04 takehiro * frontend/lametime.c (takehiro-2002_05_07-experimental): Fix for SunOS 4, reported by Ti Kan. 2003-05-15 17:02 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix for sunos 4.x, reported by Ti Kan. 2003-05-15 16:57 takehiro * configure.in, frontend/brhist.c (takehiro-2002_05_07-experimental): fix for BSDI, which does not have term.h (reported by Ti Kan) 2003-05-15 16:55 takehiro * lame.bat, misc/lame.bat (takehiro-2002_05_07-experimental): moved lame.bat into misc directory 2003-05-15 15:09 takehiro * libmp3lame/: psymodel.c, psymodel.h, tables.c (takehiro-2002_05_07-experimental): trivial clean up. 2003-05-15 15:08 takehiro * include/lame.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): remove set_preset_* functions public. 2003-05-15 15:07 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): new pseudo sfb21 ath handling code (of course, experimental) 2003-05-15 14:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): Partial fix of VBR code assuming the qunatizing noise always increase when the scalefactor increase. This makes reduce bitrate arround 40kbps with bloat_test.wav. This fix is not perfect, because it still assumes the qunatizing noise always decrease when the scalefactor decrease. 2003-05-15 12:48 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): update default short block threshold 2003-05-15 12:04 takehiro * libmp3lame/: psymodel.c, psymodel.h (takehiro-2002_05_07-experimental): tuning MSFIX value with creaking.wav simplified and ATH aware msfix() routine. 2003-05-11 15:03 bouvigne * libmp3lame/presets.c: updated low bitrate presets. Considering quality, we have: ns1 comp1 > ns1 comp3 >ns2 comp3 >ns2 comp1 2003-05-11 13:15 bouvigne * libmp3lame/lame.c, frontend/parse.c, include/lame.h, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: --sfscale, inhibited -Z 2003-05-11 11:33 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, lame.c (takehiro-2002_05_07-experimental): simplified calc_noise() and better_quant(). update comments. tuning ABR/CBR 64/80/192/224 kbps. 2003-05-11 10:18 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): added comments on vbr code (from main branch). trivial simplification in find_scalefac() prepare for fixing VBR code assumes "quantize noise always decrease when scalefactor decrease". 2003-05-11 09:49 bouvigne * libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/set_get.c, frontend/parse.c, include/lame.h, libmp3lame/util.h: --sbgain 2003-05-10 17:56 takehiro * testcase.mp3, frontend/parse.c, libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix for -k option (reported by Robert. thanx) 2003-05-09 14:06 aleidinger * frontend/: main.c, lametime.c: Fix on SunOs 4, Submitted by: Ti Kan 2003-05-09 13:44 aleidinger * frontend/brhist.c: fix on BSD/OS 3.x, Submitted by: Ti Kan 2003-05-09 13:14 bouvigne * libmp3lame/quantize.c: re-enabling the psfb12 analog silence detection. This time, the coeffs should be correct. However, the coding gain is now quite small 2003-05-08 12:58 bouvigne * libmp3lame/quantize.c: I am disabling the code for psfb12 analog silence detection, as it produces some kind of dropouts. It probably means that there is a bug somewhere inside. 2003-05-04 15:36 bouvigne * libmp3lame/version.h: bump alpha 2003-05-04 15:35 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: working on presets 2003-05-03 14:34 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: ability to set vbr smooth (for vbr-mtrh) 2003-05-02 17:38 bouvigne * frontend/parse.c: internal command line options only available in debug or in alpha. This way we should not be worried again by users using non docummented options: they will not be available for them 2003-05-02 16:18 bouvigne * libmp3lame/vbrquantize.c: comments based on some mails exchanged with Robert 2003-05-01 15:23 bouvigne * libmp3lame/lame.c: maskingadjust/maskingadjust_short available for vbr-mtrh 2003-04-27 15:18 bouvigne * libmp3lame/: encoder.h, l3side.h, lame.c, quantize.c, quantize_pvt.c, util.h: Analog silence detection in partitionned sfb21 or sfb12 for short blocks 2003-04-20 17:32 bouvigne * libmp3lame/presets.c: changed short block quantization comparison to method 0 for abr/cbr on medium bitrates (because of spahm, fatboy and the likes) , as suggested by Takehiro. 2003-04-20 17:03 bouvigne * libmp3lame/version.h: bump alpha 2003-04-20 16:56 bouvigne * libmp3lame/quantize.c: trivial coding change in psfb21_analogsilence 2003-04-20 16:25 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): bump up alpha version 2003-04-20 16:25 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): safer tonality estimation for lower frequency, for better human voice encoding. prevent frequent much MS/LR switching. 2003-04-20 16:22 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tuning ATH scaling. 2003-04-20 15:57 bouvigne * include/lame.h, frontend/parse.c, libmp3lame/presets.c: presets (testing) 2003-04-20 13:28 bouvigne * libmp3lame/: lame.c, util.c, util.h: simplified prototype of FindNearestBitrate 2003-04-20 12:58 bouvigne * libmp3lame/presets.c: preset insane is now aliased to preset 320 2003-04-20 12:53 bouvigne * include/lame.h, frontend/parse.c, libmp3lame/presets.c: removed some old experimental presets 2003-04-20 12:33 bouvigne * libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/presets.c, frontend/parse.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: removed presetTune struct 2003-04-19 16:34 bouvigne * libmp3lame/presets.c: fixed medium bitrates cbr/abr presets 2003-04-19 10:19 bouvigne * TODO: updated the TODO file 2003-04-12 13:47 bouvigne * doc/html/: contributors.html, history.html: history 2003-04-12 10:20 bouvigne * libmp3lame/lame.c, include/lame.h, frontend/parse.c: enable fast replaygain analysis by default define DECODE_ON_THE_FLY if compiled with mpglib 2003-04-07 10:14 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): fix build problem 2003-04-07 00:57 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial simplification 2003-04-06 12:03 takehiro * libmp3lame/: lame.c, set_get.c (takehiro-2002_05_07-experimental): fix higher bitrate CBR/ABR preset first attempt of tuning VBR preset fix athaa_sensitivity display and code (there was some confusion arround dB/power) fix warning of some compare. 2003-04-06 12:00 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix masking handling code for pre-echo prevention works too much aggressively. 2003-04-06 11:59 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): tuning ATH value of MDCT region. 2003-04-05 17:56 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): added ATHlower to display when verbose mode. 2003-04-05 17:20 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): improve short block "pre-surge" masking control. and simplify the code. 2003-04-05 17:19 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix 1st frame psycho analysis. 2003-04-05 16:03 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): update lower bitrate ABR/CBR preset. remove outdated comments 2003-03-31 16:32 takehiro * libmp3lame/: psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): - remove long block pre-echo handling code (we don't need it when nspsytune). - fix the lowpass filter index to determine L/R channnel long/short block switching. - lower the lowpass filter index to determine long/short block. 2003-03-30 15:11 bouvigne * include/lame.h, frontend/parse.c, libmp3lame/presets.c: presets portable/portable1 2003-03-24 21:21 bouvigne * libmp3lame/version.h: bump alpha 2003-03-24 21:19 bouvigne * include/lame.h, frontend/parse.c, libmp3lame/presets.c: presets 2003-03-24 20:32 bouvigne * libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h, include/lame.h, frontend/parse.c: maskingadjust/maskingadjustshort for vbr-rh 2003-03-18 15:56 takehiro * libmp3lame/: VbrTag.c, encoder.c, util.c (takehiro-2002_05_07-experimental): trivial coding change 2003-03-16 18:02 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): update comments and clean up. 2003-03-16 17:53 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): new bs.totbit overflow handling strategy 2003-03-16 17:53 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): remove quantize cmpare method 3 and 10. update comments of over_noise and tot_noise. 2003-03-16 17:51 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): trivial coding style update 2003-03-08 13:56 takehiro * libmp3lame/: util.c, lame.c (takehiro-2002_05_07-experimental): - fix to work --quantcomp/--shortthreshold(it was ignored and LAME uses always the default) - bit clean up resample. 2003-03-08 10:28 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplify the inc_subblock_gain() by using table. 2003-03-04 18:00 takehiro * libmp3lame/: bitstream.c, encoder.c, tables.c, tables.h, takehiro.c, util.h (takehiro-2002_05_07-experimental): large clean up arround bit stream code. much simple, faster and small. fix and optimize MPEG2/2.5 scalefactor value recoding code there's still some problem using table 1 and sometime makes invalid bitstream... 2003-03-03 18:54 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): MPEG2/2.5 scalefactor bit recording optimization. - now it try to use table 1 - much simplified code. 2003-03-03 18:01 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix gr_info initilization when MPEG2/2.5, short blocks. 2003-03-03 17:59 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix best_huffman_divide() sometime fails the assertion. do not use "extra" preflag when MPEG2/2.5 (it fails to record scalefactors) simplify the scale_bitcount_lsf() 2003-03-03 17:13 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): large clean up and simplification.(result is not changed) 2003-03-03 17:08 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): general clean up and simplification. 2003-03-03 17:04 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial optimization (use shift instead of division) 2003-03-03 10:02 takehiro * libmp3lame/: util.h, tables.c, psymodel.c (takehiro-2002_05_07-experimental): first attempt of block switching for not 44.1kHz. - use "variable" lowpass index for "constant" lowpass frequency. 2003-03-03 04:14 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): tuning long/short threshold for arround 128kbps. clean up scaling related code. 2003-03-03 04:12 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial optimization 2003-03-03 02:48 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): revert substep=2 tuning. 2003-03-02 18:08 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): comment style update. some code simplification 2003-03-02 17:56 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial style change 2003-03-02 17:53 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): all "cod_info" are changed "gi" precisely change the scalefactor when substep = 2 simplify the pinfo calculation(for mp3x) 2003-03-02 17:50 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): all "cod_info" is changed to "gi" optimized best_huffman_divide() little. update comments. 2003-03-02 16:40 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): comment update 2003-03-02 16:40 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): tuning trancation threshold used in pseudo half step method. more simplication and comment updation. 2003-03-02 16:03 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): update comments and simplification. teration_finish_one() is moved from quantize.c to takehiro.c for better conjunction. 2003-03-02 16:01 takehiro * libmp3lame/: tables.c, machine.h, tables.h (takehiro-2002_05_07-experimental): remove IIPOW20() related macro/arrays, all of which are not used. 2003-03-02 15:08 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): more clean up and simplification. 2003-03-02 15:06 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix warning. 2003-03-02 15:05 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): fix prototype. 2003-03-02 14:53 takehiro * libmp3lame/: lame.c, quantize.c, quantize_pvt.h, takehiro.c, util.h (takehiro-2002_05_07-experimental): large simplification mainly arround scale_bitcount() 2003-03-02 11:39 takehiro * libmp3lame/: reservoir.c, reservoir.h (takehiro-2002_05_07-experimental): changed ResvAdjust() as macro. 2003-03-02 11:35 takehiro * libmp3lame/: VbrTag.c, id3tag.h, util.h (takehiro-2002_05_07-experimental): simplify the tag related header files. 2003-03-02 11:20 takehiro * libmp3lame/: tables.c, takehiro.c, version.c (takehiro-2002_05_07-experimental): build problem fix when NASM is not enabled 2003-03-02 11:19 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): one more initialization simplification. 2003-03-02 11:13 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): simplify the default setting choosing method. - use optimum_samplefreq() to determine the output sampling rate, as suggested by Gabriel. - use MMX_choose_table always if it uses NASM. 2003-02-27 17:57 bouvigne * libmp3lame/libmp3lame_vc6.dsp: fix MSVC build (replay gain) 2003-02-27 17:46 bouvigne * libmp3lame/: encoder.h, l3side.h, lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, util.c, util.h: analog silence detection in partitionned sfb21 2003-02-27 03:55 takehiro * libmp3lame/: lame.c, quantize.c (takehiro-2002_05_07-experimental): some substep=2 optimization. - only do substep-shaping in the last quantization step. 2003-02-27 03:45 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix amp_scalefac_bands loop exit condition. 2003-02-27 03:38 takehiro * libmp3lame/: psymodel.c, util.h, tables.c, takehiro.c (takehiro-2002_05_07-experimental): optimized little on the case not NASM enabled. 2003-02-24 03:21 takehiro * include/lame.h, libmp3lame/lame.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): more ABR/CBR default mode setting (use ABR/CBR preset) 2003-02-23 18:32 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): sync with the mainline (average compression ratio of VBR mode). 2003-02-23 18:30 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix quantize_xrpow_ISO() as same as in quantize_xrpow() 2003-02-23 18:22 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix short block window ID initialization. 2003-02-23 17:16 takehiro * libmp3lame/: set_get.c, lame.c (takehiro-2002_05_07-experimental): always uses abr/cbr preset, when abr/cbr coding. The cutoff frequency is changed as is in the main branch. 2003-02-23 16:30 olcios * libmp3lame/lame.c: fixed bug with --resample and --replaygain (input data analysis) 2003-02-23 16:27 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplify amp_scalefac_bands() 2003-02-23 16:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): simplify inc_subblock_gain() 2003-02-23 16:07 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix sfb21 does not quantize if some case. 2003-02-23 10:29 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): general clean up and optimization. - amplify band selection cleanup - skip amplify-method 1 when the max_noise is already lesser than 1.0 - clean up substep shaping in VBR mode 2003-02-22 19:06 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): new optimized noise shaping strategy. start with "sparse" noise_shaping_amp method and retry with the finer method, when we continuously failed. This makes CBR/ABR coding quite faster. comment style update.(// -> /* */) 2003-02-22 19:03 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): clean up init_gr_info 2003-02-22 17:20 takehiro * config.guess, config.sub (takehiro-2002_05_07-experimental): sync with the mainline. - update config files (by CISC) 2003-02-22 17:01 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix VBR code for new quantize strategy. 2003-02-22 02:21 olcios * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix, USAGE, configMS.h, frontend/parse.c, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/gain_analysis.c, libmp3lame/gain_analysis.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/util.h: ReplayGain analysis of a single file (RadioGain) 2003-02-21 15:54 cisc * config.guess, config.sub: Update to latest config files to support more hosts/targets. 2003-02-21 04:53 takehiro * libmp3lame/: machine.h, quantize.c, tables.c, tables.h, takehiro.c (takehiro-2002_05_07-experimental): new quantization strategy. - the code handling quantization factor moved to quantize_xrpow() and quantize_xrpow_ISO(). This is preparing for "quantizing only the scalefactor band whose q-factor is changed" and so on. - now xrpow[] is constant. 2003-02-21 04:50 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): clean up initialization 2003-02-21 01:36 takehiro * libmp3lame/: mpglib_interface.c, util.h (takehiro-2002_05_07-experimental): sync mainline. - changed comment style (// -> /* */) by Robert. - Extending mpglib by the option to return unclipped floating-point values of samples by olcios. 2003-02-20 23:13 takehiro * libmp3lame/: takehiro.c, quantize_pvt.h (takehiro-2002_05_07-experimental): optimized quantization - remove QUANTFAC() macro. - check the max value in quantization routine (loop hoisting) 2003-02-20 22:43 takehiro * mpglib/: common.c, decode_i386.c, decode_i386.h, huffman.h, interface.c, interface.h, l2tables.h, layer1.c, layer2.c, layer2.h, layer3.c, layer3.h (takehiro-2002_05_07-experimental): sync mainline. - changed comment style (// -> /* */) by Robert. - Extending mpglib by the option to return unclipped floating-point values of samples by olcios. 2003-02-19 19:46 olcios * libmp3lame/mpglib_interface.c, libmp3lame/util.h, mpglib/decode_i386.c, mpglib/decode_i386.h, mpglib/interface.c, mpglib/interface.h, mpglib/layer3.c, mpglib/layer3.h: Extending mpglib by the option to return unclipped floating-point values of samples. 2003-02-19 16:40 takehiro * libmp3lame/: quantize.c, set_get.c (takehiro-2002_05_07-experimental): ATH related tuning for ABR/CBR preset. ABR bit-allocation tuning on short blocks 2003-02-19 12:14 takehiro * libmp3lame/presets.c: fix comment style. ( // -> /* */ ) 2003-02-19 12:10 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): cleanup and ABR 128-160kbps shortthreshold change. 2003-02-19 10:05 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix comments 2003-02-19 09:48 takehiro * libmp3lame/: encoder.c, tables.c, util.h (takehiro-2002_05_07-experimental): remove PE FIR filter. It does not work now. 2003-02-18 14:49 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): on short blocks, use subblock gain first, instead of scalefac_scale 2003-02-18 14:46 takehiro * libmp3lame/: psymodel.c, quantize.c (takehiro-2002_05_07-experimental): update PE calculation and pe based bit allocation(CBR,ABR) do not spend too much on short blocks. 2003-02-18 14:41 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): remove SNR parameter (attack position aware masking calculation code will replace this). 2003-02-18 01:11 olcios * Makefile.DJGPP: Workaround for a problem with make clean, regarding long filenames on some systems. 2003-02-17 01:02 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix threshold at [SBMAX_s-1] of short blocks 2003-02-16 19:07 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): one and one more brand-new S(L-R) channel short block switching strategy 2003-02-16 18:53 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up in bitpressure_strategy() 2003-02-16 18:53 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix overflow in pulse-like signal detection. 2003-02-16 18:46 bouvigne * libmp3lame/presets.c: cbr/abr presets (still not finished?) 2003-02-16 18:40 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): ATH value scaling clean up and one more revert short block strategy... 2003-02-16 18:07 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): clean up arround initialization of short blocks. 2003-02-16 18:06 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): trivial clean up in inc_scalefac_scale() 2003-02-16 18:05 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): better verbose mode printing 2003-02-16 13:23 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): bump up alpha5 2003-02-16 13:22 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): update testcase 2003-02-16 13:20 takehiro * frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): ATH related code clean up (always use ATH type 4). 2003-02-16 13:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): better noise estimation 2003-02-16 13:14 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): optimized calc_xmin() 2003-02-16 08:38 takehiro * libmp3lame/psymodel.c: PE calculation improvement (backported from experimental branch). Better pe calculation for nspsytune. This brings - better MS/LR switching - better reservoir handling (brings better ABR/CBR result) I hope the trouble on "SeriousTrouble.wav" is partially fixed (not perfect ?). 2003-02-16 08:25 takehiro * libmp3lame/quantize_pvt.h: fix build problem (calc_xmin() prototype fix) 2003-02-16 08:22 takehiro * libmp3lame/quantize.c: fix one more subblock_gain handling code. 2003-02-15 14:07 bouvigne * libmp3lame/quantize.c: init max_nonzero_coeff to 575 instead of 0 2003-02-14 17:41 bouvigne * libmp3lame/: l3side.h, quantize.c, quantize_pvt.c, takehiro.c: do not calc noise in upper 0 part 2003-02-10 03:26 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix long->short masking threshold conversion (still experimental). revert S(L-R) channel blocktype switching strategy. 1st attempt of short block pre-echo prevention code(lessen masking before the surge on shortblocks, for preecho prevention). 2003-02-10 03:21 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): verbose mode:added if it uses subblock gain or not. 2003-02-09 18:01 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): one more tuning short block noise calculation - max_noise handling fix. changed quantcomp_s and quamtcomp - use quantcomp_s only for short blocks. (do not use for start/end) 2003-02-09 17:43 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): reduce memory copy in best_huffman_divide() 2003-02-09 16:46 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): oops, fix short block noise calculation... 2003-02-09 16:41 takehiro * frontend/gtkanal.c, libmp3lame/lame-analysis.h, libmp3lame/psymodel.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): changed mp3x "surge intensity" display. fix psymodel mis-enables the short blocks when MS stereo. changed short blcok setting strategy on the S(L-R) channel. Although this brings better LR/MS handling for fatboy.wav et.al., this is not true idea but work arround. we should get better ns_msfix(). simplify the surge detection in psymodel.c added comments on psymodel.c for mp3x display and the window position. 2003-02-09 16:36 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): trivial simplification 2003-02-09 16:35 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): new calc noise for short blocks. it calculates the sum of noise in 3 subblocks at same frequency region. I hope this makes --quantcomp hack obsolete. 2003-02-09 15:19 takehiro * include/lame.h (takehiro-2002_05_07-experimental): sync main: comments update by Mark. 2003-02-09 12:36 bouvigne * libmp3lame/quantize_pvt.c: revert speedup 2003-02-09 01:25 markt * include/lame.h: added a comment about reading the file API 2003-02-08 17:46 bouvigne * libmp3lame/: presets.c, version.h: presets 2003-02-08 13:53 bouvigne * libmp3lame/quantize_pvt.c: small speedup 2003-02-08 09:51 takehiro * frontend/main.c: trivial simplification 2003-02-08 07:22 takehiro * include/lame.h (takehiro-2002_05_07-experimental): sync main line: comments about lame_init() 2003-02-07 18:17 bouvigne * DEFINES: KLEMM_44 2003-02-06 20:04 markt * include/lame.h: updated comments about lame_init() from Kendrick Hamilton 2003-02-06 06:29 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix analog silence detection 2003-02-05 09:27 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen 2003-02-05 09:26 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix subband filtering (always mono...) 2003-02-04 18:27 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix --keeptag option 2003-02-04 17:16 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): oops, trivial mistake... 2003-02-04 17:11 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): some tuning arround attack threshold. not so far from good... 2003-02-04 17:10 takehiro * libmp3lame/: psymodel.c, psymodel.h (takehiro-2002_05_07-experimental): update comment and remove unused lines. 2003-02-04 17:01 takehiro * testcase.mp3, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/tables.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): use subband filter sample to determine block type. it still remains parameter tuning, but it works. 2003-02-04 16:11 takehiro * libmp3lame/: encoder.c, newmdct.c, newmdct.h, psymodel.c, psymodel.h, tables.c, tables.h, util.h (takehiro-2002_05_07-experimental): prepare for using subband filtered samples to determine block switching. This will archive faster, and better block switching. And using this, we can get more precise short block threshold calculation, I hope. 2003-02-04 16:00 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix comment and trivial optimization. 2003-02-04 15:59 takehiro * configure.in (takehiro-2002_05_07-experimental): regen 2003-02-04 15:59 takehiro * configure (takehiro-2002_05_07-experimental): to avoid confusion, make version 4.00 2003-02-04 15:01 takehiro * frontend/: brhist.c, console.c, gtkanal.c, main.c, parse.c, rtp.c, timestatus.c (takehiro-2002_05_07-experimental): sync with main - comment fix // -> /* */ - nogap related updates 2003-02-04 13:18 takehiro * libmp3lame/lame.c, libmp3lame/util.h, include/lame.h (takehiro-2002_05_07-experimental): sync main. - remove coding_t - update comment 2003-02-03 18:41 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): remove unused code 2003-02-03 18:40 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): sync with the head. 2003-02-03 18:29 takehiro * frontend/: get_audio.c, main.h, parse.c (takehiro-2002_05_07-experimental): added --keeptag option and clean up tag copy code. currently it works only with ID3v1. 2003-02-02 18:51 bouvigne * libmp3lame/version.h: bump alpha 2003-02-02 18:50 bouvigne * libmp3lame/lame.c, libmp3lame/lame_global_flags.h, include/lame.h, libmp3lame/presets.c, libmp3lame/set_get.c, frontend/parse.c: preset medium 2003-02-02 17:30 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): keep id3tag when reencoding mp3(experimental). 1. it sometimes mis-recognize the tag. (but this is the same behavior of madplay) 2. we should add some option to enable/disable this function. after 2 is solved, I will backport it to the head branch. 2003-02-02 17:15 takehiro * frontend/: get_audio.c, gtkanal.c (takehiro-2002_05_07-experimental): trivial comment/style update 2003-02-02 17:10 bouvigne * libmp3lame/: lame.c, util.c, util.h: removed KLEMM_44 2003-02-02 15:50 bouvigne * libmp3lame/: lame.c, util.h: removed useless structure (coding_t) 2003-02-02 14:45 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: presets: standard should be fine, working on medium 2003-02-02 10:15 bouvigne * libmp3lame/psymodel.c: comments regarding TMN and NMT (thank you Takehiro) 2003-02-01 21:59 takehiro * libmp3lame/: encoder.c, lame.c, newmdct.c, util.h (takehiro-2002_05_07-experimental): prepare for subband filter output to determine long/short block switching. - subband filtering in next frame. - encode delay setting 2003-02-01 20:06 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): precise error message about nspsytune2 2003-02-01 11:49 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): clean up and optimization. 2003-01-30 12:13 takehiro * frontend/get_audio.c: bit better mp3 input file sync. but we need one more for Chris.mp3.... 2003-01-30 08:48 markt * libmp3lame/: encoder.c, lame.c: Formula for the amount of data that had to be in the buffer before it could be encoded was incorrect. Old formula (for the polyphase filterbank) was: old formula: 286+576*(1+gfc->mode_gr) = 2014 (MPEG1) Correct formula is: 512+framesize -32 = 1632 Best way to see this is to go through window_subband() in newmdct.c It access samples x[32*i] through x[510+32*i] for i=0..17. So our old condition was too conservative. However, the FFT still requires 1904 samples, so the net change is just to lower the requirement from 2014 to 1904. 2003-01-28 03:12 takehiro * libmp3lame/lame-analysis.h (takehiro-2002_05_07-experimental): fix build problem on not HAVE_GTK environment 2003-01-28 00:29 markt * libmp3lame/lame.c: short blocks are coupled, even in regular stereo mode. This is to fix bugs reported in several different hardware decoders. see comments in lame.c 2003-01-27 12:22 takehiro * libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): added comments ... 2003-01-27 11:39 takehiro * libmp3lame/VbrTag.c: fix warning(added return value) 2003-01-26 17:37 takehiro * frontend/get_audio.c: added ID3tag v2 skipping function. 2003-01-26 12:37 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): tuned long block PE calculation parameter. 2003-01-26 12:09 bouvigne * libmp3lame/version.h: bumped alpha 2003-01-26 12:08 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: presets (under testing) 2003-01-26 12:02 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): tuned short block PE calculation parameter. 2003-01-26 11:31 bouvigne * libmp3lame/lame.c: verbose 2003-01-26 10:04 takehiro * libmp3lame/: takehiro.c, quantize_pvt.h (takehiro-2002_05_07-experimental): fix wrong "const" declaration. 2003-01-25 11:02 bouvigne * libmp3lame/: lame.c, quantize.c: changed -q mapping 2003-01-24 19:26 bouvigne * doc/html/history.html: history 2003-01-22 17:15 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix best_huffman_divide MPEG2 short block treatment. This is the same bug in count_bits(). 2003-01-22 15:38 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): remove inner loop iteration limit (age) and some simple optimization. 2003-01-21 02:45 takehiro * frontend/: parse.c (takehiro-2002_05_07-experimental), parse.c: added \n in --preset help 2003-01-20 18:09 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: presets (under testing) 2003-01-19 15:55 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/presets.c: presets (under testing) 2003-01-19 09:13 takehiro * libmp3lame/: encoder.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): fix fatal bit-counting bug in MPEG2/2.5 short block. 2003-01-19 06:30 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): oops, type mismatch... 2003-01-18 14:44 takehiro * include/lame.h (takehiro-2002_05_07-experimental): added new API, lame_set_use_subblockgain() to set if it uses subblock gain or not. 2003-01-18 14:42 takehiro * frontend/parse.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): added "--sfscale" and "--sbgain" options. This is replacement of old ambiguous "-Z" option. 2003-01-13 16:34 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): use --preset insane when --preset 320 2003-01-13 13:19 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): 10th quantcomp method, based on 3rd method, but uses over_noise instead of tot_noise. 2003-01-13 13:11 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix fatal bug which happens when the last partition is wider than the last scalefactor band. 2003-01-13 11:46 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): fix "off by one" in short block masking calculation. 2003-01-13 11:45 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): use automatic resample even when ABR. 2003-01-13 11:34 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): changed DEBUGF -> printf (to fix debug build). vorbis removing related fix. 2003-01-13 08:53 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): oops... fix auto short block switching threshold adjustment. 2003-01-13 08:43 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): oops... fix --quantcomp option. 2003-01-13 00:49 glessard * frontend/: get_audio.c, main.c, main.h, parse.c: NOGAP-related changes. - added '-T' option to force VBR/INFO tag inclusion. - moved a VBR/INFO tag inclusion decision to parse.c, eliminating the use of a global variable across modules. - fixed reading of multiple little-endian AIFF-C files in get_audio.c. For those files, 'swapbytes' was getting toggled for each file opened in the sequence, so only every other output file was correct. 2003-01-12 15:18 takehiro * frontend/parse.c, include/lame.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): added --quantcomp option. 2003-01-12 12:37 takehiro * libmp3lame/: VbrTag.c, lame_global_flags.h, util.c (takehiro-2002_05_07-experimental): sync with the head arround VbrTag. 2003-01-12 12:35 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): ABR/CBR preset sync with the head branch. 2003-01-12 12:33 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): trivial cleanup 2003-01-11 18:40 bouvigne * libmp3lame/presets.c: low bitrates presets 2003-01-11 17:56 markt * libmp3lame/: VbrTag.c, lame_global_flags.h, util.c: reorganized VBR tag initialization code so that it could be reset/initialized several times (for use when encoding in nogap mode) 2003-01-11 17:42 markt * libmp3lame/lame_global_flags.h: removed comment within comment delimiter 2003-01-11 17:41 markt * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/lame_global_flags.h: cleaned up some comments about VBR tags being written to the mp3 file after internal data structures are free (this has not been true for a long time) na 2003-01-11 15:43 bouvigne * libmp3lame/presets.c: low bitrates presets 2003-01-11 13:05 takehiro * libmp3lame/: encoder.c, quantize.c, quantize.h (takehiro-2002_05_07-experimental): remove an unused argument of VBR_iteration() 2003-01-11 12:55 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix mono ABR/VBR encoding 2003-01-11 12:46 takehiro * libmp3lame/lame.c: fix ath curve initialization. 2003-01-11 12:25 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix config print code 2003-01-11 11:10 takehiro * frontend/rtp.c (takehiro-2002_05_07-experimental): sync with the head branch - Include alloca.h if neccessary. (by Alex) 2003-01-11 11:09 takehiro * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): sync with the head branch - GB's Ability to change ath4 shape independantly from vbr_q 2003-01-11 11:08 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): sync with the head branch (GB's change, "Add the Info frame to the number of frames reported by the Info/vbr tag") 2003-01-11 11:07 takehiro * USAGE (takehiro-2002_05_07-experimental): update bit. 2003-01-11 11:06 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): use "safe" way of short block long->short threshold conversion better ns_msfix by using the fatc that noise in sfb couldn't exceed its energy. do not use ns_msfix when we used msfix. do not long block msfix when the block IS short. 2003-01-11 04:16 markt * frontend/main.c, libmp3lame/VbrTag.c: in nogap mode, with VBR tags, we were calling init_bitstream() (which resets VBR tag data) before writing the VBR tag data. This is now fixed, but there is still a bug when initializing the VBR data for the 2nd (or more) encoding in the nogap series. 2003-01-10 21:22 markt * frontend/parse.c: forgot a \n in the --longhelp documentation 2003-01-10 20:18 markt * USAGE: note that --voice option is obsolete 2003-01-10 20:12 markt * frontend/: main.c, main.h, parse.c: added the "--nogaptags" option. this will allow VBR tags even for gapless encoding. The default behavoir is to disable tags for gapless encoding. 2003-01-10 20:07 markt * frontend/parse.c, libmp3lame/VbrTag.c: Updated the TOC calculation in the VBR tag to also count the size of the VBR tag itself. This is to make the VBR tag consistent with the recent change in the VBR frame count (changed so that it also counts the VBR tag as a frame) 2003-01-10 19:06 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): fix usage message arround ns(-bass|-alto|-treble|-sfb21|msfix). 2003-01-10 18:58 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): trivial cleanup (when JOINT_STEREO and no-psymodel, it is always MS stereo) 2003-01-10 18:57 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix some initilization when ABR. (It seems ATH-adjust type 3 does not works fine with ABR mode ...) 2003-01-05 16:49 takehiro * libmp3lame/version.c (takehiro-2002_05_07-experimental): fix compiling error(oops, trivial mistake...) 2003-01-05 16:36 takehiro * libmp3lame/: lame.c, psymodel.c, quantize.c, tables.c, util.h (takehiro-2002_05_07-experimental): - use ns-(bass|alto|treble|sfb21) in psymodel. And now ATH values are not affected by these values. - sfb21 aware pe(perceptual entropy) calculation. I hope it brings better LR/MS switching, but CBR/ABR is now not good as it was because of this. I'm afraid it needs overhaul.... - analog silence detection code is moved to pecalc_[ls] functions. 2003-01-05 14:56 takehiro * libmp3lame/version.c (takehiro-2002_05_07-experimental): removed unused code 2003-01-05 08:15 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): one more fix for inc_subblock_gain(). and some clean up. 2003-01-05 08:14 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): pe calculation of over 16kHz region. 2003-01-05 07:22 takehiro * libmp3lame/: lame-analysis.h, quantize.h (takehiro-2002_05_07-experimental): move set_frame_pinfo() definition to fix mp3x built 2003-01-05 07:21 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): remove unused code to fix mp3x built 2003-01-05 04:28 takehiro * DEFINES (takehiro-2002_05_07-experimental): completely updated (from Alex's comment). 2003-01-05 04:11 takehiro * libmp3lame/: bitstream.c, encoder.c, quantize.c, reservoir.c, reservoir.h (takehiro-2002_05_07-experimental): - general clean up mainly arround reservoir. - use faster and not exact quantizing method for the 1st step of VBR. (It estimates scalefactor step roughly and not needed exactness) 2003-01-05 03:36 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): remove u_char definition (sync head branch) 2003-01-02 18:42 bouvigne * libmp3lame/psymodel.c: In psymodel_init set blocktype_old to NORM_TYPE because the VBR header is long blocks. This might be the problem encountered in some WMP 6.4 2003-01-02 18:37 bouvigne * libmp3lame/VbrTag.c: Add the Info frame to the number of frames reported by the Info/vbr tag 2003-01-02 18:30 bouvigne * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h, vbrquantize.c: reduced 63 warnings to 55 under visual c++. Those were mainly differences between function prototypes in declarations and implementations. 2003-01-02 18:27 bouvigne * libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/util.c, libmp3lame/util.h, frontend/parse.c, include/lame.h: Ability to change ath4 shape independantly from vbr_q 2003-01-01 16:14 aleidinger * libmp3lame/machine.h: Removed u_char typedefs, u_char is not used in the tree (according to grep -r u_char). 2003-01-01 16:12 aleidinger * frontend/rtp.c: Include alloca.h if neccessary. Noticed by: Tomi Vainio 2002-12-31 14:00 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/libmp3lame.dsp, libmp3lame/libmp3lame_vc6.dsp (takehiro-2002_05_07-experimental): vbrquantize.[ch] and quantize_pvt.c is merged into quantize.c 2002-12-31 13:58 takehiro * libmp3lame/: bitstream.c, encoder.c, lame.c, lame_global_flags.h, reservoir.c, tables.c, util.c, util.h, version.h (takehiro-2002_05_07-experimental): general cleanup gfp->VBR_mean_bitrate_kbps and gfp->brate is merged. init_bit_stream_w is moved to lame.c from bitstream.c FindNearestBitrate(), map2MP3Frequency(), SmpFrqIndex() are moved to lame.c from util.c fix VBR lowest/highest bitrate in mono-mode now alpha 4 2002-12-31 13:56 takehiro * libmp3lame/: quantize.c, vbrquantize.c, vbrquantize.h, quantize.h, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): removed analog silence related code in calc_xmin(). ABR/CBR code integration. caller of init_outer_loop() and calc_xmin() is moved to outer_loop() off by one fix of global_gain (from the mainline), in outer_loop() new vbr code. but still needs more fix. remove unused code in VBR_prepare() vbrquantize.[ch] and quantize_pvt.c is merged into quantize.c one more inc_subblock_gain() fix. 2002-12-31 13:53 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): some cleanup arround pointer. analog silence detection in psymodel.c. skip short block FFT calculation of joint stereo, if it is not needed. 2002-12-29 16:48 takehiro * frontend/main.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/reservoir.c, libmp3lame/set_get.c, libmp3lame/tables.c (takehiro-2002_05_07-experimental): cleanups - all vbr modes are into one. - more initilization code organization experimental tuning of short block switching threshold in ABR presets. 2002-12-29 16:44 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): update mainly due to long->short threshold convertion 2002-12-29 09:09 takehiro * include/lame.h (takehiro-2002_05_07-experimental): follow new APIs 2002-12-29 08:57 takehiro * libmp3lame/: VbrTag.c, bitstream.c, encoder.c, lame.c, lame_global_flags.h, machine.h, psymodel.c, psymodel.h, tables.c, tables.h, util.c, util.h, version.h (takehiro-2002_05_07-experimental): general cleanups - removed KLEMM_44 (I plan to replace the resampling code with ssrc) - VBR/CBR/ABR related initialization cleanup - moved initialization related code in lame.c/util.c -> tables.c - most of "preset" settings are defaulted. experimenal tuning - substep method and use_scalefac_scale setting are removed from -q option mapping 2002-12-29 08:51 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): - simplify/removed not needed VBR code. *** There is still problem which it assumes the quantization noise is *** monotone function of the scalefactor(quantization factor). 2002-12-29 08:49 takehiro * libmp3lame/: lame-analysis.h, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): - use athAdjust() always (in quantize.c) - removed unused quantcomp_method 2002-12-29 08:43 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): * follow API changes. * clean up options. added options --shortthreshold removed options --r3mix, --phone, --voice, --radio, --tape, --cd, --studio, --cwlimit, --nspsytune, --vbr-old, --vbr-new, --vbr-mrth --short changed options --allshort, --noshort (implemented by shortthreshold API) 2002-12-29 08:40 takehiro * libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/libmp3lame_vc6.dsp, libmp3lame/presets.c, libmp3lame/set_get.c, Makefile.DJGPP, Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): presets.c is merged into set_get.c API change - CHANGED: expX -> "quantocomp_method" - CHANGED: expZ -> "use_large_scalefac" - REMOVED: cwlimit related APIs - REMOVED: short blocks on/off/forced APIs - NEW: short blocks switching threshold API 2002-12-27 04:42 takehiro * libmp3lame/psymodel.c: use ATH value as short block masking lower limit. 2002-12-27 04:21 takehiro * frontend/parse.c, include/lame.h, libmp3lame/set_get.c, libmp3lame/version.h: new option --shortthreshold and bump up version number(alpha 8) and new psymodel version(0.90) for ATHadjust aware psymodel 2002-12-27 04:17 takehiro * libmp3lame/psymodel.c: fix assertion failure (oops, my mistake in ATH handling change) 2002-12-26 05:43 takehiro * libmp3lame/: lame.c, psymodel.c, psymodel.h: cleanup psymodel initialization preparing for --shortthreshold option. 2002-12-25 12:13 takehiro * libmp3lame/: psymodel.c, quantize.c, set_get.c, util.h, vbrquantize.c: ATH handling fix and simplification. - use ATH adjust in ns_msfix(), mask_add(), and masking lower limit calculation. - all ATH adjust related thresholding(ns_msfix, quantcompare and scalefac_scale) is removed. 2002-12-21 07:12 takehiro * libmp3lame/: psymodel.c, quantize.c, quantize_pvt.c, tables.c (takehiro-2002_05_07-experimental): masking_lower related fix for shortblock ATH handling and clean up. 2002-12-21 07:10 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): trivial style change 2002-12-21 05:52 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial optimization (when joint stereo, it is always STEREO and channels_out = 2) 2002-12-21 05:51 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix it uses LR threshold for MS when -m f 2002-12-21 05:45 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): zero prevention (adding 1e-37) is not needed. 2002-12-21 04:55 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): fix for removing vorbis support 2002-12-21 04:53 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): short block ATH scaling fix. 2002-12-18 16:29 takehiro * libmp3lame/libmp3lame_vc6.dsp: removed tools.h 2002-12-18 16:27 takehiro * libmp3lame/: Makefile.am, Makefile.in, debugscalefac.c, tools.c, tools.h: remove unused files and regen Makefile 2002-12-16 19:02 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix inc_subblock_gain() to properly handle sfb12 (16kHz over region) MDCT coefs. 2002-12-16 18:46 takehiro * libmp3lame/quantize.c: oops, I checked in the wrong version... 2002-12-16 18:45 takehiro * libmp3lame/quantize.c: fix inc_subblock_gain() to properly handle sfb12 (16kHz over region) MDCT coefs. 2002-12-16 18:14 takehiro * libmp3lame/: psymodel.c, tables.c, util.h (takehiro-2002_05_07-experimental): initial attempt to long->short masking threshold conversion fix FFT routine selection code. adjust masking threshold scaling for VBR. fix ATH handling for long block masking threshold. 2002-12-16 18:10 takehiro * libmp3lame/: encoder.c, lame-analysis.h (takehiro-2002_05_07-experimental): mp3x displays MS/LR masking pe difference 2002-12-15 17:46 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): cleanup related removing vbr-old 2002-12-15 17:39 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): cleanup related removing vbr-old 2002-12-15 17:37 takehiro * libmp3lame/lame_global_flags.h (takehiro-2002_05_07-experimental): remove an unused variable 2002-12-15 17:36 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix short block scaling for ATH handling 2002-12-15 16:25 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix fatal short block ATH handling... 2002-12-15 12:56 bouvigne * libmp3lame/lame.c, frontend/parse.c: warning about alpha versions 2002-12-15 11:59 takehiro * ACM/ACMStream.cpp: fix access violation when LAME failed to initilize. I hope this fixes BUG ID 646894 (at sf.net). 2002-12-15 11:11 takehiro * libmp3lame/lame.c: fix warning (reported at sf.net by krick.) 2002-12-15 11:10 takehiro * libmp3lame/: util.h, takehiro.c: fix warning (reported at sf.net by krick. 2002-12-15 10:07 takehiro * libmp3lame/: presets.c, quantize.c (takehiro-2002_05_07-experimental): remove vbr-old and its presets 2002-12-15 09:47 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): adjust masking threshold for new mask_add() strategy. 2002-12-15 09:11 takehiro * libmp3lame/lame.c: fix -q0 convined with --substep x option. 2002-12-15 08:56 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix: fix for vorbis support remove (I hope) 2002-12-14 19:19 robert * ChangeLog, Makefile.MSVC, lame.bat, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/util.c, misc/lame4dos.bat, misc/mlame: removed my email address 2002-12-14 18:56 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix for ATH handling and short block VBR threshold. 2002-12-14 17:38 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): more fix for msfix and its comment. 2002-12-14 11:08 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix better ns_msfix (and better MS/LR switching). 2002-12-14 08:01 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix msfix for symmetric L/R treatment. 2002-12-13 17:48 takehiro * libmp3lame/quantize.c: off by one fix for global_gain. 2002-12-13 17:42 takehiro * libmp3lame/: encoder.h, psymodel.c, quantize.c, set_get.c, tables.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): ATH adjustment related code cleanup (for mostly preset). and possible fix for "global_gain > 255" (backport from mainline). 2002-12-13 16:58 takehiro * configure, frontend/main.h, libmp3lame/Makefile.in: remove vorbis support and regen. 2002-12-13 16:54 takehiro * configure.in, config.h.in, frontend/get_audio.c, frontend/main.c, frontend/parse.c, libmp3lame/Makefile.am, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/vorbis_interface.c: remove vorbis support. 2002-12-13 14:34 takehiro * libmp3lame/lame.c: fix for 64bit environment, reported by Tomi Vainio 2002-12-09 19:00 bouvigne * libmp3lame/: quantize.c, version.h: fixed the quant_comp problem (probably introduced by me) so bump the alpha version number 2002-12-08 17:40 takehiro * libmp3lame/version.h: now 3.94 alpha 6 - changed default block switching threshold - fixed mpglib crash. 2002-12-08 17:35 takehiro * libmp3lame/psymodel.c: changed long/short block switching threshold. 2002-12-08 17:23 takehiro * testcase.mp3: new testcase for the new default cutoff frequency. 2002-12-08 17:07 takehiro * mpglib/interface.c: null pointer check patch from Peter Pawlowski , to prevent the random crash. 2002-12-08 17:02 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.am, Makefile.in, Makefile.unix, configMS.h, configure, configure.in, testcase.mp3, frontend/brhist.c, frontend/brhist.h, frontend/console.c, frontend/console.h, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.h, frontend/gtkanal.c, frontend/gtkanal.h, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/parse.h, frontend/portableio.h, frontend/rtp.c, frontend/rtp.h, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/gain_analysis.c, libmp3lame/gain_analysis.h, libmp3lame/id3tag.h, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/libmp3lame.dsp, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/vorbis_interface.c, libmp3lame/i386/Makefile.am, libmp3lame/i386/Makefile.in, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.h, mpglib/decode_i386.h, mpglib/huffman.h, mpglib/interface.c, mpglib/interface.h, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.h: overwrite by takehiro_stable branch. 2002-12-08 16:59 takehiro * mac/.cvsignore: added 2002-12-02 20:26 bouvigne * libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/presets.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, include/lame.h, frontend/parse.c (takehiro-stable-2002_10_15): quant_comp and quant_comp_short 2002-12-01 17:47 takehiro * libmp3lame/version.h (takehiro-stable-2002_10_15): now alpha4 - fix -q0 and -q1 - -X and -Z option update I think we should "-X1,0" as default for ABR/CBR/VBR-old, including all presets. (except fast presets) please test and tell your result. 2002-12-01 17:43 takehiro * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize.c (takehiro-stable-2002_10_15): added "-Z -1" to enable scalefactor scale only(disable subblock gain) 2002-12-01 16:32 aleidinger * ChangeLog: update for 3.93.1 2002-12-01 16:18 aleidinger * configure: regen 2002-12-01 16:15 aleidinger * configure.in: change version to 3.93.1 2002-12-01 16:12 aleidinger * configure: regen 2002-12-01 16:10 aleidinger * doc/html/history.html: sync with webpages 2002-12-01 16:06 aleidinger * configure.in: Check for socket() in libsocket if it isn't in libc so rtp can get compiled on Solaris. Noticed by: "Niki W. Waibel" While I'm here, bail out if some other functions aren't there. 2002-12-01 15:42 takehiro * libmp3lame/lame.c (takehiro-stable-2002_10_15): fix -q0 and -q1. This makes -q0 very very slow. 2002-12-01 15:36 takehiro * frontend/parse.c, include/lame.h, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/vbrquantize.c (takehiro-stable-2002_10_15): now you can specify the method how to compare the quantization for long/short block independently by -X option.(-X n,m) 2002-12-01 13:18 takehiro * libmp3lame/set_get.c (takehiro-stable-2002_10_15): fix comment 2002-11-30 18:18 bouvigne * libmp3lame/version.h: version 2002-11-29 17:07 bouvigne * Dll/BladeMP3EncDLL.def: dll exports 2002-11-28 21:05 bouvigne * doc/html/: history.html, index.html: docs 2002-11-28 18:06 bouvigne * libmp3lame/version.h: go back to 3.93 2002-11-28 18:04 bouvigne * libmp3lame/lame.c: revert back q0 to q1 state (due to reports about quality problems) 2002-11-26 15:45 takehiro * libmp3lame/version.h (takehiro-stable-2002_10_15): alpha4 solves the fatal error in outer_loop(). it should not select the data whose global_gain is greater than 255. 2002-11-25 18:00 bouvigne * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: sync presets with the executable front-end and libmp3lame 2002-11-25 01:36 takehiro * libmp3lame/: Makefile.am, Makefile.in (takehiro-stable-2002_10_15): fix build problem 2002-11-24 18:37 takehiro * libmp3lame/quantize.c (takehiro-stable-2002_10_15): Fix not to select the data whose global_gain is greater than 255. and inner_loop() manual inlining. This fix is based on the R.A.F.'s bug report at HA. Thanx R.A.F. 2002-11-23 18:54 bouvigne * libmp3lame/psymodel.c: quick fix of nspsytune 2002-11-17 16:39 takehiro * libmp3lame/.indent.pro (takehiro-stable-2002_10_15): I forgot to sync this with the head branch. 2002-11-17 16:34 takehiro * Makefile.in, configure, Dll/Makefile.in, libmp3lame/Makefile.in (takehiro-stable-2002_10_15): regen (by hand :p) 2002-11-17 16:33 takehiro * ChangeLog, ChangeLog.header, Makefile.am, configure.in, Dll/Makefile.am, libmp3lame/Makefile.am (takehiro-stable-2002_10_15): sync with head branch (releasing 3.93 related things). 2002-11-17 15:59 takehiro * doc/html/history.html (takehiro-stable-2002_10_15): copy from webpage/history.html 2002-11-17 11:11 aleidinger * configure.in, libmp3lame/version.h: We are now at 3.94alpha... 2002-11-17 10:41 aleidinger * doc/html/history.html: Copy history from webpage. 2002-11-17 10:29 aleidinger * ChangeLog: ChangeLog for 3.93. 2002-11-17 10:25 aleidinger * Dll/Makefile.in, Makefile.in: regen 2002-11-17 10:24 aleidinger * Makefile.am: Add lame.dsw. 2002-11-17 10:23 aleidinger * Dll/Makefile.am: Oops... add missing backslash. 2002-11-17 10:18 aleidinger * Dll/Makefile.in, libmp3lame/Makefile.in: regen 2002-11-17 10:16 aleidinger * libmp3lame/Makefile.am: Add gain_analysis.[ch] to the distributed files. 2002-11-17 10:11 aleidinger * Dll/Makefile.am: Add some missing files. 2002-11-17 10:09 aleidinger * configure: gtk12-config -> gtk-config 2002-11-17 10:05 aleidinger * testcase.mp3: "Official" testcase.mp3 for this release. 2002-11-17 09:51 aleidinger * ChangeLog.header: Add some information about branches. 2002-11-17 09:46 aleidinger * libmp3lame/version.h: We are at 3.93-RELEASE now... 2002-11-17 09:45 aleidinger * doc/man/lame.1, frontend/parse.c: Warn about fast presets. 2002-11-16 13:07 takehiro * configure (takehiro-2002_05_07-experimental): remove vorbis related things 2002-11-16 12:44 takehiro * configure.in (takehiro-2002_05_07-experimental): removed vorbis related thing 2002-11-16 10:07 bouvigne * doc/html/presets.html: warning about fast presets 2002-11-13 20:56 bouvigne * libmp3lame/: lame.c, presets.c, util.c, util.h (takehiro-stable-2002_10_15): change of the default lowpass values (will break testcases) 2002-11-13 20:24 bouvigne * libmp3lame/: lame.c, presets.c: rollback of lowpass change before release 2002-11-10 12:41 takehiro * libmp3lame/: encoder.c, psymodel.c, quantize.c (takehiro-2002_05_07-experimental): prepare for intensity-stereo. 2002-11-10 12:40 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): some trivial optimizations and make some functions static. 2002-11-10 12:39 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): trivial macro fix 2002-11-10 12:38 takehiro * libmp3lame/newmdct.c (takehiro-2002_05_07-experimental): optimize subband filter (lowpass/highpass). 2002-11-10 12:36 takehiro * libmp3lame/i386/: choose_table.nas, fft3dn.nas (takehiro-2002_05_07-experimental): align -> loopalign better labeling 2002-11-10 08:24 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): - more db2pow() macro use - remove traditional code(which do nothing) 2002-11-10 08:23 takehiro * libmp3lame/psymodel.h (takehiro-2002_05_07-experimental): fix warning 2002-11-10 07:55 takehiro * frontend/main.c, frontend/parse.c, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/vorbis_interface.c (takehiro-2002_05_07-experimental): remove vorbis support, which is too much outdated. 2002-11-10 07:53 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial optimization 2002-11-09 18:45 takehiro * libmp3lame/: psymodel.c, tables.c (takehiro-2002_05_07-experimental): - optimize ATH handling in mask_add() by changing ATH.cb[] scaling. - more faster long block masking threshold calculation. 2002-11-09 18:43 takehiro * libmp3lame/: encoder.c, takehiro.c (takehiro-2002_05_07-experimental): cleanup START/STOP type bit calculation 2002-11-09 18:42 takehiro * libmp3lame/i386/: choose_table.nas, nasm.h (takehiro-2002_05_07-experimental): some sync with GOGO. 2002-11-09 12:34 takehiro * libmp3lame/: encoder.c, machine.h, quantize.c, set_get.c, tables.c (takehiro-2002_05_07-experimental): clean up decibel -> power conversion 2002-11-09 12:33 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): clean up FFT related code. more acculate condition check whether we need short block masking calculation. FIR filter loop unrolling 2002-11-07 18:47 bouvigne * libmp3lame/: lame.c, presets.c, util.c, util.h: change of the default lowpass values (will break testcases) 2002-11-04 16:59 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): optimize long block masking ratio calculation (partition -> scalefactor band transformation) 2002-11-04 16:49 takehiro * testcase.mp3, libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix short block masking calcultion(patition to scalefactor band transformation) and trivial cleanups, as is always :) 2002-11-04 16:00 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix mp3x FFT display. 2002-11-04 15:56 takehiro * testcase.mp3, libmp3lame/encoder.c, libmp3lame/psymodel.c, libmp3lame/reservoir.c, libmp3lame/version.h (takehiro-2002_05_07-experimental): now here goes alpha 2. - some trivial optimizaions and cleanups on psymodel. - cleanup mp3x arround 2002-11-04 13:53 takehiro * libmp3lame/: VbrTag.h, encoder.c, lame-analysis.h, machine.h, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, set_get.c, tables.c, takehiro.c, util.h (takehiro-2002_05_07-experimental): large cleanup mainly arround psymodel (continue) - removed all temporary masking related code, because now I found all the temporal masking code is completely messed up. - do not calculate short block masking ratio when it is not needed. - mp3x FFT energy display fix. - better perceptual entropy calculation, by using ATH. - some include file clean up. - some trivial code cleanup arround quantize/bit counting. 2002-11-04 13:49 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix -q 4 setting. 2002-11-04 13:48 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix FFT energy display. 2002-11-03 17:56 takehiro * testcase.mp3 (takehiro-2002_05_07-experimental): regen with new psymodel, which increases encode delay. 2002-11-03 17:30 takehiro * libmp3lame/: Makefile.am, Makefile.in, encoder.c, encoder.h, l3side.h, lame-analysis.h, lame.c, lame_global_flags.h, newmdct.c, psymodel.c, psymodel.h, quantize.c, quantize_pvt.h, set_get.c, tables.c, takehiro.c, util.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): large cleanup, mainly on PSYMODEL calculation. - it calculates masking ratio/pe/tot_energy/block_type/frame_type next FRAME, not next GRANULE. it increases the encoding delay, but code is very simple. - "allow different block_type in each channel (L/R)" could be archived even when joint stereo. - l3side.h is merged into util.h - MPEG2/2.5, mp3x's display may corrupt (not tested much). 2002-11-03 17:23 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): trivial 2002-11-03 17:22 takehiro * frontend/: gpkplotting.c, gpkplotting.h, gtkanal.c (takehiro-2002_05_07-experimental): fix for mp3x MDCT original value display 2002-11-03 17:00 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): fix abr preset 2002-11-03 16:55 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): fix for not --enable-all-float 2002-11-02 17:47 takehiro * libmp3lame/: lame.c, util.h (takehiro-2002_05_07-experimental): trivial cleanup 2002-11-02 17:30 takehiro * libmp3lame/: encoder.c, lame.c, presets.c, psymodel.c, quantize.c, quantize_pvt.h, set_get.c, tables.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): cleanup arround preset. - merged adaptive ATH and msfix parameter into "normal" setting. - simplified how to compare the quantization/scalefactor. 2002-11-02 17:26 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): remove unused prototype. 2002-11-02 15:50 takehiro * libmp3lame/: encoder.c, set_get.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): remove meaningless variables in preset modes. 2002-11-02 12:26 takehiro * libmp3lame/: VbrTag.c, lame.c, presets.c, quantize.c, tables.c, util.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): - -q option remapping. new very old(-3.92) old(3.93) 9 8,9 8,9 8 7 7 7 5,6 5,6 5,6 2,3,4 3,4 4 2 + --substep 5 3 + --substep 5 3 2 + --substep 7 3 + --substep 7 2 cannot emulate 2 + --substep 7 1 cannot emulate 1 + --substep 7 0 cannot emulate 0 + --substep 7 - fast_log2() optimization and cleanup. 2002-11-02 12:18 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): ATH adjustment aware masking calculation in mask_add() and ms_fix(). 2002-10-31 14:56 takehiro * libmp3lame/tables.c (takehiro-2002_05_07-experimental): trivial cleanup 2002-10-31 14:27 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): some precision fix(maybe) 2002-10-31 14:26 takehiro * doc/html/presets.html (takehiro-2002_05_07-experimental): sync with mainline and added some DM presets. 2002-10-28 11:25 takehiro * libmp3lame/: encoder.c, psymodel.h, psymodel.c (takehiro-2002_05_07-experimental): now psymodel never return error. 2002-10-28 11:15 takehiro * testcase.mp3, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/l3side.h, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h (takehiro-2002_05_07-experimental): changed FLOAT8 -> FLOAT (except one subband filter coefs, which is defined as "double" in spec). 2002-10-28 11:12 takehiro * mpglib/layer3.c (takehiro-2002_05_07-experimental): fix mpglib crash bug, from Mathew Hendry. 2002-10-28 11:09 takehiro * frontend/portableio.h (takehiro-2002_05_07-experimental): remove cvs log. 2002-10-28 10:43 takehiro * libmp3lame/: encoder.c, psymodel.c, psymodel.h, tables.c, util.h (takehiro-2002_05_07-experimental): remove unused variables 2002-10-28 10:01 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix long/short typo. 2002-10-28 10:00 takehiro * include/lame.h (takehiro-2002_05_07-experimental): added new preset definition 2002-10-27 14:37 aleidinger * configure: regen 2002-10-27 14:36 aleidinger * configure.in: Forced commit: last commit was - remove -funroll-loops as suggested in the nearby comment Noticed by: takehiro 2002-10-27 14:32 aleidinger * configure.in: remove options as suggested in the nearby comment; Noticed by: takehiro 2002-10-27 13:38 takehiro * libmp3lame/: encoder.c, lame.c, lame_global_flags.h, machine.h, newmdct.c, newmdct.h, presets.c, psymodel.c, psymodel.h, quantize.c, set_get.c, tables.c, util.h (takehiro-2002_05_07-experimental): large update. - sync mainline, * side channel sparsing * new presets, dm-radio and so on. * blocktype histgram * fix arround FLOAT_MAX * tuning substep noise shaping start frequency - large code simplification * cod_info initialization code is moved to encoder.c * faster psymodel calculation. 2002-10-27 13:33 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): sync mainline - fix arround sfb21 and smoothing method 2 2002-10-27 13:32 takehiro * libmp3lame/version.h (takehiro-2002_05_07-experimental): To avoid confusing, named it as lame4.0 2002-10-27 13:30 takehiro * frontend/: get_audio.c, get_audio.h, main.c, main.h, mp3rtp.c, mp3x.c, parse.c, parse.h, timestatus.h (takehiro-2002_05_07-experimental): sync mainline - fix arround PATHNAMELEN - new presets - fix warnings - fix --silent option - new option "side channel sparsing" 2002-10-27 13:29 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): - sync mainline (block type histgram, build fix for cygwin) 2002-10-27 13:26 takehiro * configure (takehiro-2002_05_07-experimental): regen 2002-10-27 13:26 takehiro * configure.in, doc/html/Makefile.am, doc/html/Makefile.in, doc/html/contributors.html, doc/html/index.html, doc/man/lame.1 (takehiro-2002_05_07-experimental): sync mainline 2002-10-27 12:19 robert * frontend/portableio.h (takehiro-stable-2002_10_15): do we need logging of cvs commits in source files? small fixes in comments due to cvs log entries 2002-10-27 08:17 takehiro * libmp3lame/version.h (takehiro-stable-2002_10_15): bump up version number. alpha3 contains - tuning substep noise shpaing (by me, Takehiro) - added side channel sparsing (by Robert) 2002-10-26 20:41 robert * configMS.h, frontend/amiga_mpega.c, frontend/brhist.c, frontend/brhist.h, frontend/console.c, frontend/console.h, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.c, frontend/gpkplotting.h, frontend/gtkanal.c, frontend/gtkanal.h, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/main.h, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/parse.h, frontend/portableio.c, frontend/portableio.h, frontend/rtp.c, frontend/rtp.h, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/gain_analysis.c, libmp3lame/gain_analysis.h, libmp3lame/id3tag.c, libmp3lame/id3tag.h, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/presets.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/set_get.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/vorbis_interface.c, mpglib/common.c, mpglib/common.h, mpglib/dct64_i386.c, mpglib/dct64_i386.h, mpglib/decode_i386.c, mpglib/decode_i386.h, mpglib/huffman.h, mpglib/interface.c, mpglib/interface.h, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/layer3.c, mpglib/layer3.h, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c, mpglib/tabinit.h (takehiro-stable-2002_10_15): changed C++ comments into C style comments for configMS.h include/*.h frontend/*.[ch] mpglib/*.[ch] libmp3lame/*.[ch] 2002-10-26 18:53 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2002-10-26 18:52 takehiro * libmp3lame/: Makefile.am, debugscalefac.c (takehiro-2002_05_07-experimental): remove unused debugscalefac.c 2002-10-26 18:51 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): fix build problem 2002-10-26 16:48 takehiro * libmp3lame/presets.c (takehiro-stable-2002_10_15): added interchannel masking to dm-radio-fast preset, too. 2002-10-26 16:47 takehiro * libmp3lame/presets.c (takehiro-stable-2002_10_15): lower bitrate adjustment and added inter-channel masking for dm-radio preset. 2002-10-26 16:32 takehiro * libmp3lame/quantize.c (takehiro-stable-2002_10_15): tuned substep-noise-shaping start frequency of short block (--substep 5). 2002-10-26 12:31 takehiro * libmp3lame/quantize.c (takehiro-stable-2002_10_15): fix for not C99 C compiler 2002-10-26 12:29 takehiro * configure (takehiro-stable-2002_10_15): regen 2002-10-26 12:29 takehiro * configure.in (takehiro-stable-2002_10_15): sync with mainline and added fix for "-funroll-loops" bug on gcc3.0.* 2002-10-26 12:20 takehiro * frontend/parse.c (takehiro-stable-2002_10_15): sync mainline... --silent + input from stdin fix. 2002-10-24 00:04 robert * libmp3lame/: vbrquantize.c (takehiro-stable-2002_10_15), vbrquantize.c: bug fix in vbr-new possible division by zero 2002-10-23 23:43 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h (takehiro-stable-2002_10_15): added mid/side channel sparsing --ms-sparsing n | n=0 disable / n=1 mode 1 / n=2 mode 2 --ms-sparse_low x | default 9 dB --ms-sparse_high x | default 3 dB 2002-10-21 01:27 markt * frontend/parse.c: truely silent when input is stdin patch committed 2002-10-20 15:38 takehiro * libmp3lame/psymodel.c (takehiro-stable-2002_10_15): fix possible float exception 2002-10-20 15:36 takehiro * libmp3lame/version.h (takehiro-stable-2002_10_15): bump up the alpha2 2002-10-20 15:35 takehiro * libmp3lame/psymodel.c (takehiro-stable-2002_10_15): fix minor boundary check and remove unused variable. 2002-10-20 13:42 takehiro * doc/: html/Makefile.am, html/Makefile.in, html/contributors.html, html/index.html, html/presets.html, man/lame.1 (takehiro-stable-2002_10_15): sync with mainline 2002-10-20 13:31 takehiro * libmp3lame/quantize.c (takehiro-stable-2002_10_15): work arround of --substep for Tom's Diner. 2002-10-20 13:09 takehiro * libmp3lame/psymodel.c (takehiro-stable-2002_10_15): faster mask_add() 2002-10-20 12:31 takehiro * libmp3lame/: psymodel.c, quantize_pvt.c, util.h (takehiro-stable-2002_10_15): more optimized usage of FAST_LOG(). 2002-10-20 11:39 takehiro * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c (takehiro-stable-2002_10_15): removed mixed block related switches, which is "not" as stable as releasing. fix block type decision code when LR/MS change occurs. 2002-10-20 08:41 takehiro * libmp3lame/machine.h (takehiro-stable-2002_10_15): float max should be arround 1e38 or so. 2002-10-20 08:39 takehiro * include/lame.h, libmp3lame/set_get.c (takehiro-stable-2002_10_15): re-introduce the padding related functions/definitions for backward compatibility. 2002-10-20 08:38 takehiro * frontend/: get_audio.c, get_audio.h, main.c, main.h, mp3rtp.c, mp3x.c, parse.c, parse.h, timestatus.h (takehiro-stable-2002_10_15): sync mainline. - PATHLEN related fix. - reduce warning. 2002-10-20 08:37 takehiro * frontend/brhist.c (takehiro-stable-2002_10_15): fix for cygwin build. 2002-10-20 07:34 takehiro * libmp3lame/psymodel.c (takehiro-stable-2002_10_15): improve attack detection and added release detection for L/S switching. 2002-10-20 07:27 takehiro * libmp3lame/psymodel.c (takehiro-stable-2002_10_15): fix warning. 2002-10-20 07:21 takehiro * frontend/parse.c, include/lame.h, libmp3lame/presets.c (takehiro-stable-2002_10_15): added some presetes for syncing DM series. fix --preset medium to use -q3, not -q2. 2002-10-20 07:18 takehiro * libmp3lame/vbrquantize.c (takehiro-stable-2002_10_15): sync mainline. XXL is defaulted. 2002-10-19 02:11 robert * frontend/brhist.c: little bit prettier printing of block types stats 2002-10-19 02:10 robert * frontend/brhist.c (takehiro-stable-2002_10_15): little bit prettier printing of block type stats 2002-10-18 23:54 robert * frontend/brhist.c, frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/util.h (takehiro-stable-2002_10_15): merger from main branch: simple statistics of block types used (seeing with --brief / --verbose) 2002-10-18 22:54 robert * frontend/brhist.c, frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: added some simple statistics about block types used: added lame_block_type_hist() and lame_bitrate_block_type_hist() to API using new switch --brief will show one line of percentage types used using switch --verbose will show in more detail used block types 2002-10-17 17:05 bouvigne * frontend/parse.c: removed some unused functions 2002-10-17 13:03 aleidinger * include/lame.h: correct comment about *_bWriteVbrTag() 2002-10-16 21:13 robert * libmp3lame/vbrquantize.c: fixing compiler warnings (unused code removed), some clean up 2002-10-16 18:01 bouvigne * frontend/get_audio.c, frontend/get_audio.h, frontend/parse.c, frontend/parse.h, frontend/timestatus.h, include/lame.h, libmp3lame/set_get.c, libmp3lame/takehiro.c: minor code cleanups in order to reduce warnings 2002-10-15 22:45 robert * frontend/main.h, libmp3lame/machine.h (takehiro-stable-2002_10_15): fixing Win32 issues 2002-10-15 22:02 robert * libmp3lame/: encoder.c, version.h (takehiro-stable-2002_10_15): Takehiro I hope you don't mind, but I bump the version to 94 alpha 1 to avoid confusions if binaries are shown up at HA 2002-10-15 21:29 robert * libmp3lame/vbrquantize.c (takehiro-stable-2002_10_15): fix for --vbr-new -Y crash we have to calc xr34 for the whole range, for sfb21 too 2002-10-15 19:16 robert * Makefile.unix, libmp3lame/psymodel.c, libmp3lame/util.h: reenentrant fix for loudness approx. 2002-10-15 17:07 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): fix short block with -X 0(vbr smooth method 1), especially for --r3mix. 2002-10-15 16:35 takehiro * libmp3lame/vbrquantize.c (takehiro-stable-2002_10_15): fix short block with -X 0(vbr smooth method 1), especially for --r3mix. 2002-10-15 15:39 takehiro * frontend/main.h, libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix for no-GTK, and on windows (same as what I've done mainline). 2002-10-15 15:37 takehiro * frontend/main.h (takehiro-stable-2002_10_15): ooops, I missed "n". 2002-10-15 15:35 takehiro * libmp3lame/lame.c (takehiro-stable-2002_10_15): fix for no-GTK environment. 2002-10-15 15:30 takehiro * libmp3lame/machine.h (takehiro-2002_05_07-experimental): fix arround FLT_MAX/FLOAT_MAX (I hope) 2002-10-15 15:24 aleidinger * configure.in: different way of specifying the gcc version in the sparc section, the did not worked because autoconf does some nasty things with [ and ] 2002-10-15 11:30 aleidinger * doc/man/lame.1: catch up with HTML docs 2002-10-15 09:54 aleidinger * doc/html/Makefile.in: regen 2002-10-15 09:54 aleidinger * doc/html/Makefile.am: add presets.html 2002-10-15 09:53 aleidinger * doc/html/presets.html: typo fix 2002-10-15 09:50 aleidinger * configure: regen 2002-10-15 09:49 aleidinger * configure.in: Use sparc optimization on gcc 3.[123456]. Submitted by: "Spud McDuck" 2002-10-15 09:33 aleidinger * frontend/: brhist.c, main.c, main.h, mp3rtp.c, mp3x.c, parse.c: PATH_MAX is in POSIX.1 (does not include the trailing NUL, so add +1), not MAXPATHLEN 2002-10-14 20:06 bouvigne * doc/html/: contributors.html, index.html, presets.html: html docs 2002-10-14 16:28 takehiro * testcase.mp3 (takehiro-stable-2002_10_15): update testcase. 2002-10-14 16:25 takehiro * libmp3lame/: psymodel.c, util.h (takehiro-stable-2002_10_15): reenentrant fix for loudness approx. 2002-10-14 16:06 takehiro * Makefile.B32, Makefile.DJGPP, libmp3lame/libmp3lame.dsp (takehiro-stable-2002_10_15): build environment related file update. I could not test them, but I hope it works. 2002-10-14 15:53 takehiro * frontend/parse.c (takehiro-2002_05_07-experimental): obsoleted --cwlimit option. 2002-10-14 15:53 takehiro * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): update Makefiles sync with Makefile.am 2002-10-13 20:35 takehiro * libmp3lame/: Makefile.am, Makefile.in, encoder.c, fft.c, fft.h, lame.c, lame_global_flags.h, libmp3lame.dsp, libmp3lame_vc6.dsp, psymodel.c, psymodel.h, quantize.c, quantize_pvt.c, quantize_pvt.h, set_get.c, tables.c, tables.h, takehiro.c, util.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): bunch of cleanup for next generation LAME :) - goodbye gpsycho. only nspsy is supported. - functions related the initilization are moved to tables.c - some functions in quantize_pvt.c are moved to quantize.c - functions in fft.c moved to psymodel.c and fft.[ch] are removed - fix ATH-adjust to reentrant. 2002-10-13 17:30 takehiro * libmp3lame/: VbrTag.c, lame.c, lame_global_flags.h, set_get.c (takehiro-2002_05_07-experimental): sync the head. record preset parameter in LAME tag. 2002-10-13 15:52 takehiro * frontend/main.h (takehiro-2002_05_07-experimental): sync with the head branch. 2002-10-13 15:48 takehiro * libmp3lame/: lame.c, psymodel.c, quantize_pvt.c, set_get.c, util.h (takehiro-2002_05_07-experimental): - tuned impulse like signal detection of threshold calculation. - block switching tuning, for impulse like signal by using maximum of filtered signal, not by sum of its energy. - MP3X: print block switching factor(attack_intensity) instead of mx, for nspsytune mode. - small optimization for ns_firfilter - prepare for faster nspsy. calculate the blocktype first, and after it, only calculate the threshold for that blocktype. - clean up nspsy variables (remove unused variables). - calc_noise optimization for nspsy. 2002-10-13 11:36 robert * Makefile.MSVC, Makefile.unix (takehiro-2002_05_07-experimental): removed scalar.obj from targets 2002-10-13 08:10 takehiro * libmp3lame/: encoder.c, lame.c (takehiro-2002_05_07-experimental): oops, I mis-check in th one older version ;( 2002-10-13 07:58 takehiro * libmp3lame/: encoder.c, lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, tables.h (takehiro-2002_05_07-experimental): trivial changes. - cleanup initilization code. - better conjunctions of functions. 2002-10-09 17:27 takehiro * libmp3lame/encoder.c, libmp3lame/lame.c, frontend/parse.c, include/lame.h, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): large cleanup arround padding - padding mode is always set by suitable one. - gfp->padding_type and the functions to set/get it are removed. unused function optimum_samplefreq() is removed. 2002-10-09 17:24 takehiro * libmp3lame/i386/: Makefile.am, Makefile.in, scalar.nas (takehiro-2002_05_07-experimental): remove scalar.nas 2002-10-09 17:22 takehiro * configure (takehiro-2002_05_07-experimental): regen 2002-10-09 17:22 takehiro * configure.in (takehiro-2002_05_07-experimental): fix extopt for gcc 3.1/3.2 2002-10-08 19:30 bouvigne * libmp3lame/: VbrTag.c, lame.c, lame_global_flags.h, set_get.c: preset info stored into Info tag 2002-10-08 17:43 bouvigne * frontend/main.h: win32 build fix 2002-10-08 13:59 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2002-10-08 13:59 takehiro * libmp3lame/: Makefile.am, tools.c, tools.h, util.c (takehiro-2002_05_07-experimental): removed unused tools.[hc] 2002-10-08 13:38 takehiro * configure (takehiro-2002_05_07-experimental): regen once more :( 2002-10-08 13:35 takehiro * configure (takehiro-2002_05_07-experimental): regen 2002-10-08 13:34 takehiro * ltconfig, acinclude.m4, configure.in (takehiro-2002_05_07-experimental): sync the head branch. fix gcc options for gcc3.1 after and 3.0.x 2002-10-08 13:30 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2002-10-08 13:19 takehiro * frontend/: main.c, main.h, mp3rtp.c, mp3x.c, parse.c (takehiro-2002_05_07-experimental): sync the head branch. - MAXPATHLEN related fix. - sizeof(short) related fix. 2002-10-08 13:18 takehiro * libmp3lame/lameerror.h, include/lame.h, libmp3lame/Makefile.am (takehiro-2002_05_07-experimental): moved error code definitions into lame.h 2002-10-08 12:58 takehiro * frontend/main.c: sync my branch: fix warning of ReportLameTagProgress() definition 2002-10-08 12:51 takehiro * libmp3lame/VbrTag.c (takehiro-2002_05_07-experimental): remove unneeded include 2002-10-08 12:50 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix NO_PAD 2002-10-08 09:09 aleidinger * configure: regen 2002-10-08 08:59 aleidinger * ChangeLog: update with uptodate data 2002-10-08 08:57 aleidinger * ChangeLog.header: add info how to show the branches in the ChangeLog 2002-10-08 08:53 aleidinger * libmp3lame/version.h: bump alpha version 2002-10-08 08:51 aleidinger * configure.in: replace the -pipe hack for mips-sgi-irix with a test for GNU ld (sorry, I forgot who submitted it) 2002-10-08 08:50 aleidinger * acinclude.m4: actually commit the generated file with the alignment fix for 64 bit architectures 2002-10-08 08:50 aleidinger * ltconfig: improved "deplibs_check_method" for freebsd-elf 2002-10-08 08:44 aleidinger * frontend/: main.c, main.h, mp3rtp.c, mp3x.c, parse.c: - spell MAX_NAME_LEN the POSIX way (MAXPATHLEN) and make sure we have a fallback if it doesn't get defined (please test this on Windows) - fix for sizeof(short int) != sizeof(int) in mp3rtp.c Patches based upon bugreport from Greg Lehey and fixes in the FreeBSD ports collection from Mikhail Teterin . 2002-10-07 16:47 takehiro * libmp3lame/: encoder.c, lame.c, psymodel.c (takehiro-2002_05_07-experimental): fix warnings 2002-10-07 16:46 takehiro * frontend/main.c (takehiro-2002_05_07-experimental): fix warning 2002-10-07 14:24 takehiro * libmp3lame/: lame.c, psymodel.c, set_get.c, util.h (takehiro-2002_05_07-experimental): more nspsytune optimization. - use FAST_LOG10 instead of log. this may change the result little bit, but I think that is rare case and no problem about the quality. - presetTune.athadjust_msfix is moved to nsPsy.athadjust_msfix - nsPsy.safejoint is removed. 2002-10-07 13:41 takehiro * libmp3lame/: psymodel.c, util.h (takehiro-2002_05_07-experimental): more cleanup of perceptual entropy calculation. - it calculates only one of the long/short block pe, after the block type is detemined. 2002-10-07 13:38 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): fix warning 2002-10-07 12:49 takehiro * libmp3lame/: psymodel.c, quantize_pvt.c, set_get.c, util.h (takehiro-2002_05_07-experimental): trivial code optimizations, no result changes. - gfp->ATHlower is now stored the number multiplied by -0.1. - nspsytune optimization * precalculate the 1.0/numlines_l[] * cleanup perceptual entropy storing method and loop hoisting. * unrolling tonality calculation loop. 2002-10-07 09:13 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): oops, fix build when BRHIST is enabled. 2002-10-07 09:11 takehiro * frontend/brhist.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/util.h (takehiro-2002_05_07-experimental): clean up bitrate histgram. And do not compile the brhist-related code when "./configure --without-brhist" 2002-10-07 09:09 takehiro * frontend/get_audio.c (takehiro-2002_05_07-experimental): fix warning 2002-10-07 08:57 takehiro * libmp3lame/: encoder.c, fft.c, presets.c, psymodel.c, set_get.c, util.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): small code cleanups. all of them does not change the result. - better conjunctions. * updateStats() is moved from util.c to encoder.c * select_kth_int() is moved from util.c to vbrquantize.c - fft window function table is moved from gfc to static variable in fft.c. once apon a time, the window function is differed from nspsy/gpsy, so the table should be stored separetedly for each encoding entity. but now, it is unified and we can unify the table function. - presetTune.attackthre and presetTune.attackthre_s are moved to nsPsy. 2002-10-06 18:14 takehiro * libmp3lame/: psymodel.c, quantize.c, util.h, vbrquantize.c (takehiro-2002_05_07-experimental): preset clean up. - use the current block_type itself to determine the quantization result comparing method. - remove presetTune.quantcomp_current. - changed presetTune.attackthresh and presetTune.attackthresh_s type (int -> FLOAT). I think the 1st one is BUG of preset, affected all preset modes. It determines how to compare the quantized spectrums by the blocktype of 1st granule of the next frames, last channel (R or S), for all the channel and all the granule. 2002-10-06 18:06 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): due to the nspsy long/short switching mode fix, attack threshold should be tuned again.I used awe32, fatboy, DEATH2, and other "normal" samples to determine the threshold. now awe32 is not killer sample of --preset standard, I think. # but the bitrate is increased, of course. and it seems vangelis1.wav needs some more tuning, but I am so sleeeeeeepy. 2002-10-06 16:46 takehiro * libmp3lame/: encoder.c, psymodel.c (takehiro-2002_05_07-experimental): - make adjust_ATH() static and cleanup (include Gabriel's clean up in the head branch) - padding code clean up - block type code cleanup - ATH related initialization code is moved to psymodel.c 2002-10-06 16:43 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): sync with the head branch (Gabriel's code cleanup... remove "historical" code) 2002-10-06 16:40 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): sync with head.(code cleanup by Gabriel) 2002-09-30 16:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): moved substep shaping position. bit slower but better quality for higher bitrate (especially for the case 320kbps is not enough). 2002-09-30 16:57 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): fix substep 2, 3, 6, and 7. (working area allocation) 2002-09-30 16:49 bouvigne * libmp3lame/: encoder.c, quantize.c, util.c: some code cleanups 2002-09-30 16:28 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix mdct filter coefs, for -k option(thanx reporting, Robert). 2002-09-29 15:38 takehiro * frontend/brhist.c (takehiro-2002_05_07-experimental): fix cygwin build 2002-09-29 06:02 takehiro * libmp3lame/reservoir.c (takehiro-2002_05_07-experimental): sync with the head branch. - bit reservoir handling of freeformat. 2002-09-28 16:12 takehiro * libmp3lame/: util.h, vbrquantize.c (takehiro-2002_05_07-experimental): small optimizations for --vbr-new - gfc->VBR->scratch is moved to the local variable. - remove quality mapping(directly switch statement) - code clean up. 2002-09-28 13:27 takehiro * libmp3lame/: quantize.c, vbrquantize.c (takehiro-2002_05_07-experimental): - sync --vbr-new with the head branch. - better substep shaping for --vbr-new. - the meaning of best huffman coding with --vbr-new is bit different from that of head tree. 2002-09-28 10:36 takehiro * frontend/get_audio.c, frontend/parse.c, include/lame.h (takehiro-2002_05_07-experimental): fix warnings. 2002-09-28 10:36 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): make select_kth() static function. 2002-09-28 10:26 takehiro * Makefile.DJGPP, Makefile.MSVC, Makefile.am, Makefile.in, README.DJGPP, configure, configure.in, testcase.mp3, ACM/ACMStream.cpp, ACM/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.def, Dll/BladeMP3EncDLL.h, Dll/Example.cpp, Dll/Example_vc6.dsp, Dll/Example_vc6.dsw, Dll/LameDLLInterface.htm, Dll/LameDll_vc6.dsp, Dll/Makefile.in, debian/Makefile.in, debian/changelog, debian/rules, doc/Makefile.in, doc/html/Makefile.in, doc/html/contributors.html, doc/html/history.html, doc/html/index.html, doc/html/switchs.html, doc/man/Makefile.in, doc/man/lame.1, dshow/Encoder.cpp, dshow/Makefile.in, frontend/get_audio.c, frontend/parse.c, include/Makefile.in, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/presets.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in (takehiro-2002_05_07-experimental): large sync with the head branch. almost all the code is now synced with the head. 2002-09-28 09:30 takehiro * libmp3lame/VbrTag.c: remove some #include (these header files are included from VbrTag.h.) 2002-09-28 09:23 takehiro * libmp3lame/: encoder.c, lame.c, psymodel.c (takehiro-2002_05_07-experimental): fix all known problems on my tree (I hope). - fix mishandling of long/short block type when storing pe[]. - fix psymodel initialization (array index initialization), which fixes floating exception in psymodel.c. - one more preecho prevention code fix. - sync with my psymodel patch in the head branch and small improvement. - implement better block type restriction (when MS, both channels should be same block type, but when LR, it is not needed). - faster FIR filter for pe[] adjustment in encoder.c. 2002-09-28 09:16 takehiro * libmp3lame/bitstream.c (takehiro-2002_05_07-experimental): zeroed all ancillary area, when the debug mode. 2002-09-23 07:00 bouvigne * include/lame.h: presets (sorry, this part was missing) 2002-09-22 16:53 bouvigne * frontend/parse.c, libmp3lame/presets.c: presets 2002-09-21 00:31 markt * libmp3lame/quantize_pvt.c: fixed bug which was causing the calc_noise assert failure. 2002-09-19 20:39 robert * libmp3lame/: encoder.c, lame.c, quantize.c, util.h (takehiro-2002_05_07-experimental): merger from mainline: undo of broken VBR min fill patch padding code clean up 2002-09-16 16:28 takehiro * configure, configure.in: we don't want to run the X :) 2002-09-16 07:43 takehiro * frontend/: brhist.c, console.c (takehiro-2002_05_07-experimental): sync with head branch. - Mark's compilation fix. - Alex's warning fix on 64bit environment. 2002-09-16 07:25 takehiro * aclocal.m4 (takehiro-2002_05_07-experimental): sync with the head branch. - prevent unaligned access on some 64 bit arches, by Alexander (and Ti.) 2002-09-15 17:47 bouvigne * libmp3lame/: reservoir.c, set_get.c: Relax of freeformat reservoir after discussion with Robert 2002-09-13 20:04 markt * frontend/brhist.c: This code: #if defined(HAVE_TERMCAP_H) # include #elif defined(HAVE_NCURSES_TERMCAP_H) # include #endif changed to: #if defined(HAVE_NCURSES_TERMCAP_H) # include #elif defined(HAVE_TERMCAP_H) # include #endif because on my system, both TERMCAP and NCURSES_TERMCAP were defined by configure, but term.h and termcap.h have conflicts, whileterm.h and ncurses/termcap.h works fine. 2002-09-09 21:43 robert * frontend/parse.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/psymodel.c: lame.c, encoder.c: fix padding oddities psymodel.c: fix nspsy code for all/no short blocks parse.c: -d now obsolete 2002-09-08 06:36 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): one more sync with head branch (ms energy ratio). 2002-09-07 12:39 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): sync with the head branch psymodel fix. 2002-09-06 11:11 aleidinger * configure: regen 2002-09-06 10:53 aleidinger * configure.in: - no opts if non empty cflags and no expopt - accumulate-outgoing-args is x86 only Noticed by: Atro Tossavainen - IRIX-gcc doesn't like '-pipe' Noticed by: Atro Tossavainen 2002-09-06 09:24 aleidinger * frontend/: brhist.c, console.c: try to include the right headers for the tgetstr prototype; should fix problems on 64bit arches Noticed by: Atro Tossavainen Ti Kan Tested by: Ti Kan 2002-09-06 09:22 aleidinger * aclocal.m4: prevent unaligned access on some 64 bit arches Noticed by: Ti Kan Tested by: Ti Kan 2002-09-05 16:53 bouvigne * libmp3lame/: reservoir.c, set_get.c: free format fix 2002-09-03 11:34 aleidinger * frontend/parse.c: 1 argument too much for fprintf 2002-09-03 11:18 aleidinger * doc/man/lame.1: add --noasm 2002-09-02 12:02 takehiro * doc/html/history.html: added my psymodel change, and so on. 2002-09-02 11:56 takehiro * testcase.mp3: regen with the latest LAME after psymodel was fixed. This is produced by the LAME with ./configure --enable-nasm --enable-debug --enable-mp3x, compiled gcc 3.1.1, on linux2.4.19, glibc2.2.2, Duron 1GHz(3DNow! is enabled). 2002-09-02 11:51 takehiro * libmp3lame/lame.c: fix for Tru64 UNIX build, reported by Ti Kan. 2002-09-01 16:08 bouvigne * doc/html/contributors.html, doc/html/history.html, doc/html/index.html, doc/html/switchs.html, frontend/parse.c: docs 2002-09-01 16:03 takehiro * libmp3lame/psymodel.c: fix small psymodel bugs since long time ago(some of them are since 3.70 era...) - highpass filter of MS energy calculation to neglect the DC. - always do the Robert's short block pre-echo prevention and fix its initialization (the fix is only for nspsy). - fix energy and threshold of DC and the highest freq. element are halven. - fix nspsytune FIR filter length 2002-08-30 20:52 robert * Makefile.MSVC: MSVC: fix "-GX" typo ICL: allow special compiles for PII and PIII 2002-08-27 22:43 rbrito * debian/: changelog, rules: Update Debian packaging. More changes to come. 2002-08-26 20:38 robert * libmp3lame/: lame.c, quantize.c, util.h: undo of VBR bitres min fill patch 2002-08-25 20:17 bouvigne * frontend/parse.c: merge of alt presets 2002-08-25 15:09 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): do substep noise shaping in ABR mode, including bitrate compensation. 2002-08-25 15:08 takehiro * libmp3lame/util.c (takehiro-2002_05_07-experimental): trivial coding optimization of fast_log2 2002-08-25 15:08 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): revert some FAST_LOG usage. It sometime happens SIGFPE(overflow). 2002-08-25 10:54 takehiro * libmp3lame/: quantize.c, reservoir.c (takehiro-2002_05_07-experimental): Tuning the bit reservoir filling rate when substep noise shaping method 1, and do not substep noise shaping if the bit reservoir is almost full. 2002-08-24 19:20 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): minor fix for global_gain limitation. 2002-08-24 17:28 takehiro * libmp3lame/: VbrTag.c, lame.c (takehiro-2002_05_07-experimental): sync main tree. - portability fix for sunos 4.x by Alexander Leidinger. 2002-08-24 17:25 takehiro * libmp3lame/set_get.c (takehiro-2002_05_07-experimental): quick fix of warning. 2002-08-24 17:23 takehiro * libmp3lame/: quantize.c, set_get.c (takehiro-2002_05_07-experimental): do not do the substep noise shaping when the block type is SHORT, because it seems short block threshold calculation is very buggy (both of ns/gpsycho). new option: --substep 4,5,6,7 force substep shaping even on the SHORT block. 2002-08-24 17:12 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): use FAST_LOG() more. minimize the ns_hpfsmpl[] array. better ns_hpfsmpl[] calculation. 2002-08-24 17:10 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): use of FAST_LOG() more for faster encoding 2002-08-24 17:09 takehiro * libmp3lame/presets.c (takehiro-2002_05_07-experimental): I forgot to change the default quality setting of abr mode, when I remap the quality <-> actual setting. 2002-08-24 16:08 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): revert some GTK change to fix the mp3x spectrum display of short block. 2002-08-20 16:59 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): fix mp3x spectrum display 2002-08-20 16:51 takehiro * libmp3lame/: psymodel.c, util.h (takehiro-2002_05_07-experimental): fix mp3x pe[] display. 2002-08-20 16:28 takehiro * libmp3lame/encoder.c: fix mp3x spectrum display 2002-08-20 16:09 takehiro * libmp3lame/lame.c (takehiro-2002_05_07-experimental): fix SIGFPE (divided by 0) of filter init. 2002-08-20 13:03 takehiro * libmp3lame/: lame.c, newmdct.c, util.h (takehiro-2002_05_07-experimental): cleanup polyphase filtering. - highpass/lowpass coefs. are integrated into one array. - reordered gfc members to get better cache performance. - remove gfc->is_mpeg1 2002-08-20 12:59 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): remove gfc->is_mpeg1 2002-08-20 12:58 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): cleanup arround cw_lower_index 2002-08-20 12:58 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): remove some debug code. remove gfc->is_mpeg1 2002-08-20 12:45 takehiro * libmp3lame/: bitstream.c, tables.c, tables.h (takehiro-2002_05_07-experimental): moved scfsi_band[] into tables.c 2002-08-19 15:09 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): better preflag use by using "all zero" band. this breaks testcase little bit(make test). 2002-08-19 04:57 takehiro * libmp3lame/: psymodel.c, util.h (takehiro-2002_05_07-experimental): psymodel.c cleanup (2) - remove some constants (bu_?, npart_?_orig, SNR_s, w1_?, w2_?) from gfc. - do always short block preecho prevention. this makes some breaks for testcase(make test). - do always normalize the s3_ss by SNR_s[] for faster calculation for gpsycho. - optimize tonality computation for gpsycho. - FFT/energy computation code of [g|ns]psy are integrated. - GTK code cleanup - make a new constants bm_?, band middle position table in gfc. - cleranup table initialization code. 2002-08-19 04:47 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): trivial cleanup arround joint stereo/GTK code 2002-08-17 16:41 takehiro * libmp3lame/: psymodel.c, util.h (takehiro-2002_05_07-experimental): more psymodel cleanup. - GTK compilation fix - fix mistake of wsamp_l and wsamp_L - little block_type_set() cleanup - gfc->energy[] and energy_s[] are removed. 2002-08-17 16:37 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): trivial 2002-08-17 07:09 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): divide psymodel.c into manageable pieces (1) and some optimization/simplification. 2002-08-14 04:02 takehiro * libmp3lame/encoder.c (takehiro-2002_05_07-experimental): small fixes. - variable type change of PE calculation. - make it allow the mixed block limitation of MP3 - cleanup the block type code. 2002-08-14 03:59 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): ci to avoid losing works. - short block detection cleanup and bug fix, for nspsytune (1st attempt) - preliminal mixed block detection code. 2002-08-14 03:57 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): optimize calc_xmin() and changed ATH normalization for it. 2002-08-08 09:03 aleidinger * Makefile.in: regen 2002-08-08 09:00 aleidinger * Makefile.am: Add lame.spec to the distribution tarball, as suggested in bug #580586 2002-08-08 08:48 aleidinger * README.DJGPP, Makefile.DJGPP: Fix from Peder Hedlund, see bug #590981. 2002-08-05 18:04 afaber * Dll/BladeMP3EncDLL.c: Fixed crashing problem when the INFO TAG was written while it should not 2002-08-02 20:53 afaber * Dll/BladeMP3EncDLL.c: Some code clarifications (remarks from Martin Ruckert) 2002-08-02 20:52 afaber * Dll/LameDLLInterface.htm: Small textual changes (remarks from Martin Ruckert) 2002-07-30 20:24 aleidinger * frontend/get_audio.c, libmp3lame/VbrTag.c, libmp3lame/lame.c: Portability fixes for SunOS 4.x. 2002-07-30 08:28 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): merge short/long block code (preparing mixed block support) 2002-07-28 09:56 takehiro * Makefile.am, Makefile.in, aclocal.m4, config.h.in, configure, configure.in, libmp3lame/VbrTag.h (takehiro-2002_05_07-experimental): more sync. arround configure stuff. 2002-07-28 09:52 takehiro * mac/.cvsignore (takehiro-2002_05_07-experimental): ignore Makefile et al. 2002-07-28 09:24 takehiro * frontend/get_audio.c, include/lame.h, libmp3lame/mpglib_interface.c (takehiro-2002_05_07-experimental): syncing. - fix mpeg decoding memory leak. - lame.h comment fix. 2002-07-28 09:18 takehiro * include/lame.h: fix unclosed comment fix typo 2002-07-28 09:08 takehiro * libmp3lame/: presets.c, set_get.c (takehiro-2002_05_07-experimental): more sync with main tree about preset API. 2002-07-28 09:07 takehiro * include/lame.h (takehiro-2002_05_07-experimental): fix warning 2002-07-28 09:06 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): simplify the code. disabled substep method 2 and 3 for vbr-new (forced to change method 1) 2002-07-28 06:59 rbrito * debian/changelog: Updating debian/changelog's reported version. 2002-07-27 10:35 afaber * Dll/: Example.cpp, Example_vc6.dsp, Example_vc6.dsw: Added example VC6 project files, updated Example.cpp file 2002-07-27 07:41 takehiro * API, DEFINES, INSTALL, Makefile.am, Makefile.unix, lame.spec.in, ltmain.sh (takehiro-2002_05_07-experimental): sync with main tree. no effects the quality. 2002-07-27 07:39 takehiro * frontend/: Makefile.in, timestatus.c (takehiro-2002_05_07-experimental): sync with main tree. time status rollback and newly regened Makefile.in 2002-07-27 07:03 takehiro * include/lame.h (takehiro-2002_05_07-experimental): sync with main tree. changed comment style, // to /* */ 2002-07-27 06:59 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): fix cygwin/vc compilation problem. some speed improvement for --substep. 2002-07-27 06:54 takehiro * libmp3lame/presets.c (takehiro-2002_05_07-experimental): sync with main tree. 2002-07-26 22:27 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.def, BladeMP3EncDLL.h: changes to support encoding of multiple streams 2002-07-26 18:56 markt * frontend/get_audio.c, include/lame.h, libmp3lame/mpglib_interface.c: memory leak in multiple decodes fixed. 2002-07-26 08:18 takehiro * mac/: LAME Carbon Debug.pch, LAME Carbon Final.pch, LAME Classic Debug.pch, LAME Classic Final.pch, LAME_Carbon_Debug.pch, LAME_Carbon_Final.pch, LAME_Classic_Debug.pch, LAME_Classic_Final.pch, Makefile.am (takehiro-2002_05_07-experimental): sync with main tree. (changed file name) 2002-07-21 22:11 takehiro * libmp3lame/: Makefile.am, quantize.c (takehiro-2002_05_07-experimental): fix and cleanup of "pseudo substep" method 1 and 3. revert Robert's change of VBR bitresevoir handling code. 2002-07-21 15:15 aleidinger * include/lame.h: ANSIfy comments. Requested by Ti Kan for xmcd 2002-07-21 12:17 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, set_get.c, takehiro.c (takehiro-2002_05_07-experimental): implement pseudo substep noise shaping method 1 and 3. - it reduces about 3% of bitrate without losing any quality (theoretically), for vbr mode. - fix "off by one" bug of IPOW[] - fix comment and substep method range check in set_get.c WARNING:there's some bug in the combination of --vbr-new and --substep. 2002-07-21 12:11 takehiro * libmp3lame/: lame.c, util.c (takehiro-2002_05_07-experimental): sync with main tree: scaling bug fix. 2002-07-21 12:10 takehiro * mac/: Makefile.am, Makefile.in (takehiro-2002_05_07-experimental): sync with main tree: added Makefile.* 2002-07-21 12:09 takehiro * libmp3lame/util.h (takehiro-2002_05_07-experimental): sync with main tree: use FASTLOG as defaulted. 2002-07-19 17:20 afaber * Dll/LameDll_vc6.dsp: added ,HAVE_NASM,MMX_choose_table defines to project file, since beGetBersion did not report that the DLL was compiled with MMX enabled 2002-07-15 21:22 markt * libmp3lame/: util.c, util.h: enabled domd's fast_log code 2002-07-15 00:52 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): one more fix for pe[] calculation of nspsytune. 2002-07-14 10:41 takehiro * frontend/gtkanal.c (takehiro-2002_05_07-experimental): fix mp3x "bit assumption(of frame)" display imcompatibility of main tree. 2002-07-14 10:36 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): fix mp3x "bit assumption" display imcompatibility of main tree. 2002-07-14 10:19 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): fix enbug of pe[] calculation for nspsytune. prepare for nspsytune cleanup. 2002-07-13 08:10 aleidinger * configure, libmp3lame/Makefile.in: regen 2002-07-13 08:09 aleidinger * configure.in: Some fixes in the compiler options, removed superfluous BeOS section. 2002-07-13 08:08 aleidinger * libmp3lame/Makefile.am: Fixes for BeOS (and perhaps other arches) to allow the build of a shared lib. Submitted by: Andrew Bachmann 2002-07-05 15:17 afaber * Dll/LameDLLInterface.htm: fixe a couple of typos' 2002-07-03 22:28 afaber * Dll/BladeMP3EncDLL.c: fixed minor problems with the ALT-PRESET CBR/ABR modes 2002-07-03 21:14 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: avoid crash in beWriteVbrTag when gfp is not allocated, fixed return value of beWriteVbrTag in *.h file 2002-06-29 12:29 aleidinger * libmp3lame/: lame.c, util.c: Patch from Simon Blandford : ---snip--- The problem: When in MONO mode, LAME merges the two channels before the left/right scaling. The left scale acts on the remaining signal and the right scale is ignored. The solution: The scaling operation is simply moved before the channel merge operation. Also, all these operations are moved before the re-sample operation otherwise the signal would have be re-sampled on two channels even in MONO mode which would be a waste of CPU time. ---snip--- 2002-06-23 16:07 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): fix mp3x display of threshold level (blue/green bar in FFT window). use FAST_LOG10 in klemm's penalties() function. trivial fix of max_noise initialization (do not effect anything but for the consistency of comment). 2002-06-23 16:04 takehiro * libmp3lame/Makefile.in (takehiro-2002_05_07-experimental): regen 2002-06-23 14:40 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): fix max_noise initilization and trivial coding style change 2002-06-23 12:56 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): fix mp3x display of max_noise, tot_noise, over_noise 2002-06-23 12:56 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): trivial 2002-06-23 08:30 takehiro * libmp3lame/: lame.c, psymodel.c, quantize_pvt.c, util.c, util.h (takehiro-2002_05_07-experimental): more faster pe[] calculation on nspsy. sync with main tree: - domd's faster LOG and psymodel_ns optimization 2002-06-23 06:19 takehiro * include/lame.h, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): sync with main tree. - fixed return type of lame_get_interChRation() 2002-06-23 05:53 takehiro * libmp3lame/: Makefile.am, Makefile.in, libmp3lame_vc6.dsp, pcm.c, pcm.h (takehiro-2002_05_07-experimental): sync with main tree. - remove pcm.[ch] 2002-06-17 17:19 domd * DEFINES: added USE_FAST_LOG define 2002-06-16 20:16 domd * libmp3lame/psymodel.c: optimizations on mask_add and L3psycho_anal_ns 2002-06-16 20:14 domd * libmp3lame/quantize_pvt.c: optimization : use of FAST_LOG10 macro in calc_noise 2002-06-16 20:13 domd * libmp3lame/: lame.c, util.c, util.h: added the FAST_LOG10 and FAST_LOG macros 2002-06-15 17:56 markt * Dll/BladeMP3EncDLL.c: added missing ")" 2002-06-12 18:41 markt * dshow/Encoder.cpp: directshow, like ACM, cannot support INFO tag. INFO tag disabled in dshow code. 2002-06-12 18:36 markt * ACM/ACMStream.cpp: added note about INFO tag not possible when using ACM codec, since ACM has no mechanism to rewind output stream when encoding is finished. 2002-06-12 18:27 markt * API, Dll/BladeMP3EncDLL.c, Dll/Example.cpp, Dll/LameDLLInterface.htm: updated documentation (API and DLL) to clarify that INFO tag must be written unless explicitly disabled. 2002-06-11 09:21 aleidinger * configure: gtk-config fix (oops... sorry) 2002-06-09 16:01 takehiro * include/lame.h, libmp3lame/set_get.c: fix return type of lame_get_interChRatio() 2002-06-04 19:16 bouvigne * libmp3lame/psymodel.c: merged little part of Dom's speed optimization 2002-06-04 15:04 aleidinger * configure: regen 2002-06-04 15:03 aleidinger * configure.in: -maccumulate-outgoing-args is x86 only Reported by: "Spud McDuck" 2002-06-02 19:09 aleidinger * configure: regen 2002-06-02 19:08 aleidinger * config.h.in, configure.in: damn autoconf, hopefully this version works as intended 2002-06-02 17:02 aleidinger * configure: regen 2002-06-02 17:00 aleidinger * configure.in: use "else if ... fi" instead of "elif ..." 2002-06-02 17:00 aleidinger * libmp3lame/Makefile.in: regen (removal of pcm.[ch]) 2002-06-02 14:50 robert * libmp3lame/: Makefile.in, libmp3lame_vc6.dsp: moved unused code pcm.[ch] into the Attic interested parties will find it there 2002-06-02 14:45 robert * libmp3lame/: Makefile.am, pcm.c, pcm.h: moved unused code pcm.[ch] into the Attic interested parties will find it there 2002-06-02 14:20 aleidinger * configure: regen + perl -pi -e 's:--no-verify::' configure Does anyone know how to do this with autoconf directly? 2002-06-02 14:17 aleidinger * aclocal.m4: undo last commit, wrong file and wrong commit message 2002-06-02 14:16 aleidinger * acconfig.h: not needed anymore 2002-06-02 14:15 aleidinger * Makefile.in: regen after removal of aclocal.m4 2002-06-02 14:13 aleidinger * config.h.in: regen 2002-06-02 14:13 aleidinger * configure.in: - redo {,u}int{8,16,32,64}_t stuff with new autoconf 2.53 macros - fix code which sets experimental options Thanks to: Akos Maroy - fix GCC_version for 3.1 Thanks to: Akos Maroy - further autoconf 2.53 updates - minor fixes 2002-06-02 14:10 aleidinger * aclocal.m4: is not needed anymore 2002-06-02 12:21 aleidinger * aclocal.m4: update to autoconf 2.53 2002-06-02 12:17 aleidinger * libmp3lame/: VbrTag.c, VbrTag.h, pcm.c, pcm.h, util.h: add some includes 2002-05-28 08:28 aleidinger * configure: regen 2002-05-28 08:24 aleidinger * ACM/Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, ACM/ADbg/Makefile.in, ACM/tinyxml/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, libmp3lame/i386/Makefile.in: regen 2002-05-28 08:07 aleidinger * configure.in: - update to autoconf 2.53 - add ultrasparc detection and compiler switches in case of gcc 3.1 2002-05-28 08:04 aleidinger * Makefile.in: regen 2002-05-28 08:04 aleidinger * Makefile.am: add mac subdir 2002-05-28 08:03 aleidinger * mac/Makefile.in: generated Makefile.in 2002-05-28 07:52 aleidinger * mac/Makefile.am: add automake clue 2002-05-28 07:48 aleidinger * mac/: LAME Carbon Debug.pch, LAME Carbon Final.pch, LAME Classic Debug.pch, LAME Classic Final.pch, LAME_Carbon_Debug.pch, LAME_Carbon_Final.pch, LAME_Classic_Debug.pch, LAME_Classic_Final.pch: rename files because of automake (space to underscore conversation) 2002-05-26 15:52 takehiro * libmp3lame/: lame.c, quantize.c, takehiro.c, util.h (takehiro-2002_05_07-experimental): sync with main tree, except arround vbrquantize.c. - it calls best_huffman_divide() twice. - *_block_sf() are out of sync. 2002-05-25 23:30 markt * libmp3lame/lame.c: fixed a mono encoding bug found by Justin Schoeman For single channel input, the 2nd channel was still required to exit and have as much data as the 1st channel becaus of memcpy's (even though this data was never used) 2002-05-24 17:28 markt * Dll/BladeMP3EncDLL.c, libmp3lame/lame.c: removed all references to "sample_t" from the DLL. someone put in a call to lame_encode_buffer_sample_t (not a public interface to libmp3lame) when they should have used lame_encode_buffer_float(), since they were assuming 'sample_t' was a float. 2002-05-20 22:21 robert * libmp3lame/: lame.c, quantize.c, util.h: VBR bitreservoir minimum filling depending on back pointer from largest frame allowed 2002-05-20 18:22 robert * Makefile.unix, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/vbrquantize.c: Makefile.unix: -malign-double enabled, helps memcpy lame.c: new experimental -X{5,9} settings for --vbr-new quantize.c: build up bit reservoir for VBR, allows to limit max frame size with -Bxxx without a too large quality impact vbrquantize.c: fixing sfb21 issues: -Y did not show the wanted effect xxx_block_xr34: replaced copy loop by memcpy, not faster but makes things more obvious some very minor speed ups 2002-05-19 22:11 markt * frontend/timestatus.c: initialize ellapsed time counter to 0. 2002-05-19 22:03 robert * libmp3lame/: quantize.c, vbrquantize.c: avoid calling best_huffman_divide twice for vbr-new 2002-05-19 16:43 takehiro * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame_global_flags.h, libmp3lame/presets.c, libmp3lame/set_get.c (takehiro-2002_05_07-experimental): experimental mixed block support. "--mixedblock" option to use it. currently, it uses mixed blocks on all short/start/end blocks. this is very bad idea. we need a proper psymodel. till we make it, this option is used only for the testing purpose. 2002-05-19 16:38 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): trivial optimization arround nspsytune 2002-05-19 15:13 takehiro * libmp3lame/psymodel.c (takehiro-2002_05_07-experimental): merged little part of Dom's speed optimization. 2002-05-18 17:39 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): preparing for mixed block of bitpressure_strategy() 2002-05-18 17:33 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): remove magic numbers and prepare for mixed block. 2002-05-18 16:54 takehiro * libmp3lame/: machine.h, newmdct.c, vbrquantize.c (takehiro-2002_05_07-experimental): fully cosmetic... changed INLINE -> inline 2002-05-18 16:53 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): prepare for the substep noise shaping method 1 and 3. 2002-05-18 16:15 takehiro * libmp3lame/: quantize.c, takehiro.c (takehiro-2002_05_07-experimental): trivial optimizations 2002-05-18 16:08 takehiro * libmp3lame/: machine.h, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): clean up table initialization and bit size optimization. - remove magic number "128". (and changed 116) - we don't need to prepare the both of adj43[] and adj43asm[]. prepare only one of them, if we use asm code or not. 2002-05-18 16:00 takehiro * libmp3lame/: bitstream.c, takehiro.c (takehiro-2002_05_07-experimental): use scfsi more. if all quantized value is 0, we can use scalefactor with not only 0 but also any number and in such a situation, we can use the scfsi. 2002-05-18 15:09 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): don't compile some code if analyzer is not needed. 2002-05-18 15:07 takehiro * libmp3lame/: machine.h, quantize_pvt.c, quantize_pvt.h, vbrquantize.c (takehiro-2002_05_07-experimental): optimization arround vbr_new with the new data structure. - merged short_block_xr34() and long_block_xr34() into block_xr34() and clean up - changed IIPOW20[] and remove some condition code. 2002-05-18 13:59 takehiro * libmp3lame/: quantize.c, set_get.c, util.h (takehiro-2002_05_07-experimental): arroud substep noise shaping. - prepare for "method 3". - start with "pseudo half shaped" state, if we use the method 2 or 3. 2002-05-18 13:50 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, set_get.c (takehiro-2002_05_07-experimental): simple calc_noise() optimization (remove one log()) fix quatn_compare() when alt-preset. 2002-05-18 12:11 takehiro * libmp3lame/quantize_pvt.c (takehiro-2002_05_07-experimental): oops, fix calc_noise() bugfix :) 2002-05-18 12:10 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): trivial optimization by loop unrolling 2002-05-18 11:38 takehiro * libmp3lame/: machine.h, quantize.c, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): quick fix for "calc_noise_bug" reported by Mark. 2002-05-18 11:09 takehiro * libmp3lame/: lame.c, presets.c, set_get.c (takehiro-2002_05_07-experimental): changed alt-preset-* and comments to follow the change of quality setting. 2002-05-18 11:07 takehiro * libmp3lame/: machine.h, quantize.c (takehiro-2002_05_07-experimental): fix floating exception when global_gain > 255u. it frequently happens when best_huffman == 2 2002-05-18 10:25 takehiro * libmp3lame/: lame-analysis.h, lame.c, quantize.c, util.h (takehiro-2002_05_07-experimental): sync with main tree. - uped READ_AHEAD from 10 to 40 for the frame analyzer (By Mark) - removed warning when using -Y (By Robert) - removed unused bitpressure strategie 2 (VBR) (By Robert) 2002-05-14 21:32 robert * libmp3lame/: lame.c, quantize.c, util.h, vbrquantize.c, vbrquantize.h: removed warning when using -Y removed unused bitpressure strategie 2 (VBR) 2002-05-14 21:02 robert * libmp3lame/.indent.pro: changing max line length from 80 to 100 chars 2002-05-14 16:23 markt * frontend/timestatus.c: added comment about clock rollover check 2002-05-14 16:19 markt * frontend/: lametime.c, timestatus.c: put in rollover check in frontend cpu/wall clock timing routines. didn't we used to have this? user reported (on a 35min encode) that the output of clock() (of type clock_t) was rolling over and becoming negative. On his system, clock_t is a signed 32 bit int. 2002-05-12 18:47 markt * INSTALL: removed info about vorbis encoding from INSTALL 2002-05-12 18:01 markt * ltmain.sh: applied patch to ltmain.sh from sourceforge.net bug report. it passes LDFLAGS on to the linker? *** ltmain.sh.org Sun Oct 22 14:06:32 2000 --- ltmain.sh Sun Apr 28 11:56:54 2002 *************** *** 818,824 **** convenience= old_convenience= deplibs= ! linkopts= if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var --- 818,824 ---- convenience= old_convenience= deplibs= ! linkopts="$LDFLAGS" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var 2002-05-12 17:20 markt * include/lame.h, libmp3lame/lame-analysis.h: added documentation to lame.h for lame_decode* functions uped READ_AHEAD from 10 to 40 for the frame analyzer 2002-05-12 13:52 takehiro * libmp3lame/: bitstream.c, l3side.h, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, util.h, vbrquantize.c, vbrquantize.h (takehiro-2002_05_07-experimental): big data structure update (2) - this is very alpha. check is not done yet, but I should have sleep tonight :p - "make test" runs fine. but mp3x, vbr-new needs more test. abr mode aborts floating exception. - almost all the structured data, like l3_xmin, scalefac, distort, ... are now simple FLOAT8/integer array. - calc_noise() and so on is very simple code and very fast, because we can handle the long/short block by same code, - new member "window" and "width" are added to gr_info. 2002-05-12 09:30 takehiro * libmp3lame/quantize.c: fix inc_scalefac_scale() ignoring preflag. 2002-05-12 08:29 takehiro * Makefile.in (takehiro-2002_05_07-experimental): regen(forgot to check in) 2002-05-12 08:02 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): trivial cleanup 2002-05-12 08:02 takehiro * libmp3lame/reservoir.c (takehiro-2002_05_07-experimental): because #define NORES is not working as it was, I remove it. 2002-05-12 07:48 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): fix mp3x scalefactor display when scfsi used and cleanup on set_pinfo(). fix warning arround calc_klemm_noise(). 2002-05-12 07:30 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h (takehiro-2002_05_07-experimental): noise calculation cleanup. - delayed calculation of klemm_noise and it is shared to store in max_noise. - max_noise, tot_noise and over_noise are now "B" order, not "dB". 2002-05-11 18:49 markt * lame.spec.in: new lame.spec.in file from Yosi. 2002-05-11 18:29 markt * libmp3lame/: quantize.c, quantize_pvt.c: applied Takehiro's bug fix for single channel bit reservoir usage for pre-echo control. 2002-05-11 18:28 takehiro * Makefile.am, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/reservoir.c, libmp3lame/takehiro.c, libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): not testing much, but I think now best_huffman_divide==2 works. - default quality setting is changed to 3, and "make test" is done with that. - quality setting 0,1, and 2 with CBR/ABR/VBR-old mode uses best_huffman_divide==2. - best_scalefac_store() is not called in inner loop. - "lame -q 2 foo.wav foo.mp3" runs about half or more slower speed than that of "lame -q 3 ..." 2002-05-11 17:26 takehiro * libmp3lame/: quantize_pvt.c, quantize_pvt.h, takehiro.c (takehiro-2002_05_07-experimental): combination of small patches mainly to get more tight coupling/inlining optimization. - in quantize_pvt.c, some functions are now static. - some "char" type table is now "int" - quantize_xrpow*() are moved from quantize_pvt.c to takehiro.c, and they are static function. - slen1_tab[] and slen2_tab[] are moved to takehiro.c 2002-05-11 16:42 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): oops, checked in the older one. fix CBR bit allocation. 2002-05-11 16:28 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h, reservoir.c, reservoir.h (takehiro-2002_05_07-experimental): fix --vbr-old for newer resovoir handling code. now it produces bit-by-bit identical from the main branch with my "limited test". 2002-05-11 14:39 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): sync with main tree - Robert's modification, 'more time consuming strategy to handle the case when more bits used than available' 2002-05-11 14:12 takehiro * libmp3lame/: quantize.c, vbrquantize.c (takehiro-2002_05_07-experimental): fix vbr-new arround bin_search_stepsize(). it ignores part2_length to calculate cod_info->part2_3_length. consider part2_length inside of bin_search_stepsize(), not caller side. 2002-05-11 13:49 takehiro * libmp3lame/vbrquantize.c (takehiro-2002_05_07-experimental): fix for vbr-new to work with new bin_search_stepsize() 2002-05-09 23:25 robert * libmp3lame/vbrquantize.c: vbr-new: more time consuming strategy to handle the case when more bits used than available 2002-05-08 22:28 takehiro * libmp3lame/quantize_pvt.h (takehiro-2002_05_07-experimental): oops I missed the merging. 2002-05-08 22:27 takehiro * libmp3lame/: lame.c, quantize.c, quantize_pvt.h, util.h (takehiro-2002_05_07-experimental): bin_stepsearch() hack. separete stepsize for each channel that we will use next frame little bit faster. 2002-05-08 21:30 takehiro * libmp3lame/takehiro.c (takehiro-2002_05_07-experimental): fix warning 2002-05-08 21:07 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, vbrquantize.c (takehiro-2002_05_07-experimental): sync with robert's latest patch on mainline. - allow best huffman divide to be used in vbr-new - moved ms_convert() 2002-05-08 21:00 takehiro * libmp3lame/quantize.c (takehiro-2002_05_07-experimental): monoraul bitallocation patch. thanx Robert to revert. and sorry for the trouble. I made my own branch and check the code on this. if I get the "bit-by-bit identical" output, I will merge the branch. I will follow the main line changes as possible. till then, bye for now. see you later, at the merging time. 2002-05-07 23:08 robert * libmp3lame/: quantize_pvt.h, vbrquantize.c: allow best huffman divide to be used in vbr-new 2002-05-07 21:24 robert * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: moved the tiny function ms_convert from quantize_pvt.c to quantize.c--the only client for it--giving a little speed increase 2002-05-07 21:11 robert * libmp3lame/: quantize.c, quantize_pvt.h, vbrquantize.c: better decoupling of vbrquantize.c and quantice.c 2002-05-07 20:21 robert * libmp3lame/: bitstream.h, quantize_pvt.h, reservoir.h, util.h: sorry Takehiro, we are back to the last known working version from Sunday 13:35 UTC now 2002-05-07 20:15 robert * libmp3lame/: bitstream.c, encoder.c, quantize.c, quantize_pvt.c, reservoir.c, takehiro.c, util.c, vbrquantize.c: sorry Takehiro, we are back to the last known working version from Sunday 13:35 UTC now 2002-05-06 16:03 takehiro * libmp3lame/quantize.c: fix for new reservoir handling code with my ABR patch. we don't need the totbits, because the reservoir size is reduced in ResvAdjust() in gr/ch loop and reservoir handler uses it. 2002-05-06 15:49 takehiro * ACM/: .cvsignore, ADbg/.cvsignore, tinyxml/.cvsignore: added cvsignore to ignore Makefile, etc. 2002-05-06 15:30 takehiro * include/lame.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/quantize.c, libmp3lame/reservoir.c: cleanup. remove a compiling problem and some warnings. 2002-05-05 18:34 takehiro * libmp3lame/quantize.c: one more outer_loop() fix for VBR. 2002-05-05 18:18 takehiro * libmp3lame/quantize.c: outer_loop() fix for vbr_rh and vbr_mtrh 2002-05-05 17:37 takehiro * libmp3lame/quantize_pvt.c: update comment 2002-05-05 17:17 takehiro * libmp3lame/: bitstream.c, bitstream.h, encoder.c, quantize.c, reservoir.c, util.c, util.h: cleanup arround getframebits(). 2002-05-05 16:50 takehiro * libmp3lame/: quantize.c, reservoir.c: fix NORES_TEST. and works not only for CBR (don't tell me that's useful :p) 2002-05-05 16:40 takehiro * libmp3lame/: quantize.c, reservoir.c, reservoir.h: oops, I mis-checked in the old files. this is real one. 2002-05-05 16:29 takehiro * libmp3lame/: quantize_pvt.c, reservoir.c, reservoir.h: clean up arround reservoir. 2002-05-05 15:47 takehiro * libmp3lame/: quantize.c, reservoir.c, reservoir.h: trivial cleanup of arround resvoir. 2002-05-05 15:34 takehiro * libmp3lame/quantize.c: cleanup arround inc_scalefac_scale() with new cod_info strcture. 2002-05-05 14:35 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: cleanup arround calc_noise() with new cod_info strcture. 2002-05-05 13:59 takehiro * libmp3lame/: quantize.c, quantize_pvt.h, takehiro.c, vbrquantize.c: more cleanup of new cod_info structure, arround count_bits() 2002-05-05 13:48 takehiro * libmp3lame/: quantize.c, quantize_pvt.h: inner_loop() is now static function. 2002-05-05 13:43 takehiro * libmp3lame/: quantize.c, vbrquantize.c: changed outer_loop() algorithm. it needs lesser copy and runs faster. - try with new scalefactor combination on work area, and if we get the better result, copy it to the returning area. - make bin_search_StepSize() return the global_gain which assures targ_bits > found_bits. 2002-05-05 13:33 robert * libmp3lame/: quantize.c, vbrquantize.c, vbrquantize.h: some clean-up in parameter passings due to recent change in cod_info structure 2002-05-05 13:01 robert * libmp3lame/: encoder.c, quantize.c, quantize.h, vbrquantize.c, vbrquantize.h: removed again some unused code I thought that was removed some long time ago 2002-05-05 11:58 takehiro * libmp3lame/: bitstream.c, encoder.c, l3side.h, quantize.c: bit cleanup. removed window_switching_flag in l3side. 2002-05-05 11:53 takehiro * libmp3lame/: quantize.c, quantize.h, vbrquantize.c: To fix it does not call the "freorder" and to support for mixed block, the vbrquantize.c uses init_outer_loop()/init_xrpow() in quantize.c to initializatoin. this may fix the MPEG2 problem (but not tested). 2002-05-04 22:49 markt * configure, testcase.mp3: updated testcase.mp3 2002-05-04 15:48 takehiro * libmp3lame/: encoder.c, quantize.c, util.c, util.h: clean up and speed up (optimize for new data structure). - devided init_outer_loop() into init_outer_loop() and init_xrpow(). This makes it easy to use GOGO-no-coda's xrpow calculation routine. # thanx Robert, your fix makes me aware my mistake in VBR mode. - restoring duplicated data of VBR loop are removed. more mixed_block prepare. freorder() in util.c and its caller in encoder.c are moved into init_outer_loop() in quantize_pvt.c 2002-05-04 15:36 takehiro * libmp3lame/quantize.c: trivial optimization 2002-05-04 14:54 takehiro * libmp3lame/: bitstream.c, quantize.c, quantize_pvt.c, vbrquantize.c: the signess process of l3_enc[] are moved from quantize*.c to bistream.c. bit faster, much simpler. 2002-05-04 13:58 takehiro * libmp3lame/quantize_pvt.c: removed unused variables. 2002-05-04 13:55 takehiro * libmp3lame/: quantize.c, quantize_pvt.c: removed log calculation of klemm_noise in main loop 2002-05-04 09:30 afaber * ChangeLog, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.h: Added quality setting to lame_enc.dll interface 2002-04-30 22:20 robert * libmp3lame/version.h: 3.93 alpha 1 -> 3.93 alpha 2 2002-04-30 22:00 robert * libmp3lame/: quantize.c, quantize_pvt.c: fixing latest floating point exceptions I got for some days within the calc noise routine 2002-04-28 08:15 takehiro * libmp3lame/quantize_pvt.c: Mark, because max_noise is initialized with 1E-20 and refreshes Max(max_noise, sfb_noise), so it will never lesser than 1e-20. 2002-04-27 21:15 takehiro * libmp3lame/takehiro.c: bit faster best_huffman_divide(). - use the pointer to the structure, not structure itself. 2002-04-27 20:58 takehiro * configure, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/l3side.h, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/takehiro.c, libmp3lame/vbrquantize.c, libmp3lame/vbrquantize.h: large data structure update (1) - mdct values (xr), encoded values (l3_enc), and scalefactors (scalefac) are in the gr_info structure. - it runs faster. - reduce stack size but require large III_side_info_t and lame_global_flags. 2002-04-27 20:41 takehiro * libmp3lame/machine.h: fix --enable-all-float. when it enabled, FLOAT8_MAX should be FLT_MAX about 1e37, not 1e99. 2002-04-27 18:24 takehiro * libmp3lame/bitstream.c: trivial 2002-04-24 11:10 aleidinger * Makefile.unix: add a mingw comment from Hubert Hanghofer 2002-04-22 17:51 markt * libmp3lame/quantize_pvt.c: Takehiro, when you changed this code: res->max_noise = 10.*log10(Max(1e-20,max_noise )); res->klemm_noise = 10.*log10(Max(1e-20,klemm_noise)); to: res->max_noise = 10.*log10(max_noise); res->klemm_noise = 10.*log10(klemm_noise); I started getting FPE (I always compile with --enable-debug which aborts on FPE). I went ahead and changed it back- it should have little effect. 2002-04-21 20:31 afaber * Dll/BladeMP3EncDLL.c: Added additional debug flags 2002-04-21 18:10 takehiro * libmp3lame/l3side.h: remove unused definition 2002-04-21 18:05 takehiro * libmp3lame/lame.c: fix typo 2002-04-21 17:33 takehiro * libmp3lame/lame.c: trivial(reduce magic number) 2002-04-21 17:03 afaber * Dll/BladeMP3EncDLL.c: Avoid the VBR Tag space was written when VBR method was disabled (caused empty frame in fornt of MPEG stream for certain CBR settings) 2002-04-21 16:56 takehiro * frontend/parse.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/takehiro.c, libmp3lame/util.h: new option, --substep, pseudo substep noise shaping now works. - new set_get function, lame_set_substep(), lame_get_substep() - final fix of "do substep" region of selected scalefactor. - noise_shaping_amp == 3 is removed and the method of how to use substep is selecte by the new member "substep" in structure "lame_internal_flags". 2002-04-21 13:57 takehiro * libmp3lame/bitstream.c: trivial optimization: gfp/gfc cleanup 2002-04-20 22:31 robert * Makefile.unix: [no log message] 2002-04-20 20:40 takehiro * libmp3lame/: bitstream.c, encoder.c, l3side.h, newmdct.c, quantize.c, quantize_pvt.c, takehiro.c, vbrquantize.c: simplify the structure. l3_side->gr[gr].ch[ch].tt is now known as l3_side->tt[gr][ch]. 2002-04-20 20:31 takehiro * libmp3lame/l3side.h: fix misleading indent 2002-04-20 20:28 takehiro * libmp3lame/takehiro.c: prepare for mixed block support: count_bits() and best_scalefac_store(). fix bug of noise_shaping_amp==3 on a long block. 2002-04-20 20:17 takehiro * libmp3lame/quantize.c: more mixed_block preparation: inc_scalefac_scale(), amp_scalefac_bands() 2002-04-20 20:16 takehiro * libmp3lame/quantize_pvt.c: for better mixed_blcok support, make calc_xmin() use cod_info->sfb_lmax, etc. 2002-04-20 19:54 takehiro * libmp3lame/quantize.c: fix mixed mode (long block max sfb) 2002-04-20 19:50 takehiro * libmp3lame/: l3side.h, quantize.c, quantize_pvt.c: more generalized mixed_block support and considering in MPEG2/2.5 - added new members to cod_info. psy_lmax and psy_smax. 2002-04-20 19:39 takehiro * libmp3lame/quantize.c: we don't need two elements of l3_xmin. 2002-04-20 19:34 takehiro * libmp3lame/quantize_pvt.c: - calc_xmin() supports mixed_block noise calculation. - mixed_block parameter(long block end point and short block start point) fix for calc_noise() 2002-04-20 18:51 takehiro * libmp3lame/quantize_pvt.c: calc_noise() supports mixed_block noise calculation. 2002-04-20 18:40 takehiro * libmp3lame/quantize_pvt.c: remove out-of-date comments 2002-04-20 18:37 takehiro * libmp3lame/: machine.h, quantize_pvt.c: first step of clean up calc_noise() for preparing mixed block support. - removed unused variables - make the two loops (long and short) same structure. 2002-04-20 11:49 robux4 * ACM/lameACM.dsp: Added the preset to compile the project (not used... yet) 2002-04-19 14:51 bouvigne * Dll/BladeMP3EncDLL.c: Now the dll should properly applying mono and resampling settings even if presets are used 2002-04-19 11:23 bouvigne * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: alt-presets now used from inside libmp3lame 2002-04-17 22:13 robert * Makefile.unix: missing presets.c added 2002-04-17 08:11 aleidinger * configure: regen 2002-04-17 08:08 aleidinger * configure.in: bump version 2002-04-16 19:47 markt * testcase.mp3: updated testcases (just because CVS version bumped up to 3.93alpha) 2002-04-15 18:36 markt * libmp3lame/version.h: updated version to 3.93 alpha 1 2002-04-15 16:42 bouvigne * frontend/parse.c, libmp3lame/presets.c: abr presets now into libmp3lame 2002-04-15 11:51 bouvigne * frontend/parse.c: --cbr 2002-04-15 11:42 bouvigne * libmp3lame/lame.c: 3dnow identification 2002-04-15 08:16 aleidinger * Makefile.in, configure: regen 2002-04-15 06:58 markt * Makefile.in, configure, debian/Makefile.in: got automake 1.5 and ran it: 2002-04-15 06:57 markt * debian/Makefile.am: updated debian/Makefile.am but my version of automake is too old: debian/Makefile.am:5: require version 1.5, but have 1.4-p5 2002-04-15 06:47 markt * testcase.mp3, doc/html/history.html, libmp3lame/version.h: bumped up version number to 3.92 for release 2002-04-15 06:46 markt * ChangeLog: ran cvs2cl.pl 2002-04-14 12:21 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.def, BladeMP3EncDLL.h: Added strict-iso option to the interface, added output samplerate parameter to the debug log file 2002-04-12 19:44 markt * libmp3lame/bitstream.c: added message regarding "internal buffer inconsistency error" to printout: ERRORF(gfc,"This is a fatal error. It has several possible causes:"); ERRORF(gfc,"90% LAME compiled with buggy version of gcc using advanced optimizations"); ERRORF(gfc," 9% Your system is overclocked"); ERRORF(gfc," 1% bug in LAME encoding library"); 2002-04-10 12:55 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: --noasm option 2002-04-10 06:37 bouvigne * Makefile.MSVC: presets.c 2002-04-09 15:43 bouvigne * Dll/BladeMP3EncDLL.c: dm presets in the dll are now used from initialized from inside libmp3lame 2002-04-09 15:28 aleidinger * libmp3lame/Makefile.in: regen 2002-04-09 14:46 bouvigne * frontend/parse.c, include/lame.h, libmp3lame/Makefile.am, libmp3lame/libmp3lame_vc6.dsp, libmp3lame/presets.c, libmp3lame/set_get.c: vbr presets are now part of libmp3lame 2002-04-09 11:56 bouvigne * frontend/parse.c: --cbr switch 2002-04-08 20:30 robux4 * ACM/acm.rc: minor change on the DLL versioning 2002-04-08 18:43 robux4 * ACM/: ACM.cpp, AEncodeProperties.cpp: Added some new defines that might not be in all platform DDKs (just in case) 2002-04-08 18:41 aleidinger * Makefile.in, ACM/Makefile.in: regen 2002-04-08 18:41 aleidinger * Makefile.am, ACM/Makefile.am: add new vc6 file 2002-04-08 12:43 bouvigne * lame_vc6.dsw, ACM/lameACM_vc6.dsp: added ACM codec to vc6 workspace 2002-04-08 09:56 bouvigne * lame_projects_vc6.dsp, lame_vc6.dsw: dummy project to generate all lame projects (select lame_projects in the workspace) 2002-04-07 14:09 robux4 * ACM/TODO: Removed the things already done 2002-04-07 14:07 robux4 * ACM/: ACM.cpp, AEncodeProperties.cpp, lameACM.dsp: Clicking on the LAME URL will open the default browser 2002-04-07 13:31 robux4 * ACM/: AEncodeProperties.cpp, AEncodeProperties.h: Added tool-tips to the configuration dialog 2002-04-07 12:28 robux4 * ACM/: ACM.cpp, acm.rc: Improved LAME version display 2002-04-07 10:17 robux4 * ACM/: AEncodeProperties.cpp, AEncodeProperties.h, acm.rc, lame_acm.xml, resource.h: ABR support now complete 2002-04-06 14:12 aleidinger * lame.bat: bugfix, sorry, lost the mail for it 2002-04-06 14:10 aleidinger * Makefile.in, ACM/Makefile.in, ACM/tinyxml/Makefile.in, Dll/Makefile.in, frontend/Makefile.in, libmp3lame/Makefile.in, mpglib/Makefile.in, configure: regen 2002-04-06 14:09 aleidinger * configure.in: add tinyxml directory 2002-04-06 14:08 aleidinger * Makefile.am, ACM/Makefile.am, ACM/tinyxml/Makefile.am, Dll/Makefile.am, frontend/Makefile.am, libmp3lame/Makefile.am, mpglib/Makefile.am: add new files 2002-04-06 14:01 robux4 * ACM/: ACM.cpp, ACM.h, ACMStream.cpp, ACMStream.h: Encoding in ABR is starting to work the different format strings are sorted correctly 2002-04-06 11:34 robux4 * ACM/: ACM.cpp, ACM.h, AEncodeProperties.cpp, AEncodeProperties.h, acm.rc, resource.h: First part of the ABR support (missing use ABR settings on encoding when applied, configuration of ABR params) 2002-04-06 11:32 robux4 * ACM/tinyxml/: readme.txt, tinyxml.cpp, tinyxml.dsp, tinyxml.h, tinyxmlparser.cpp, xmltest.cpp: Updated with version 2.0 beta 2002-04-04 13:35 bouvigne * lame_vc6.dsw, Dll/LameDll_vc6.dsp, frontend/lame_vc6.dsp, libmp3lame/libmp3lame_vc6.dsp, mpglib/mpglib_vc6.dsp: I was annoyed to not be able to open the VC projects in vc6, so I added vc6 ones 2002-03-22 18:29 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Added lame presets to DLL interface 2002-03-16 00:26 robert * Makefile.MSVC: no fast float to int conversion (Intel compiler) 2002-03-16 00:21 robert * Makefile.MSVC, frontend/parse.c: fix for Win2k path seperator issue found by Peter Hartley 2002-03-15 23:16 robert * libmp3lame/quantize.c: bugfix, confusion about sideinfo length found by "Kei Ishida" 2002-03-06 00:02 robert * lame.dsw: VC Workspace for all(?) targets 2002-03-03 18:57 aleidinger * libmp3lame/psymodel.c: remove /* withhin comment 2002-03-03 18:38 markt * TODO: msvc6 notes 2002-02-22 11:53 shibatch * libmp3lame/quantize_pvt.c: mp3x now displays quantization noise correctly when using nspsytune. 2002-02-21 00:54 rbrito * debian/: changelog, control, copyright, lame-dev.docs, lame-dev.files, lame-extras.files, lame.docs, liblame0-dev.docs, liblame0-dev.files, liblame0.files, rules: Reorganization of the lame/debian directory for generating packages closer to what the Debian Policy specifies. Still not there (the liblame0 package still has a dreaded -rpath and thus, is not lintian clean). 2002-02-17 15:24 takehiro * doc/html/: history.html, switchs.html: fix option description, and changed & to & 2002-02-17 14:22 takehiro * libmp3lame/psymodel.c: now inter-channel masking works even when without --nspsytune or with -m s 2002-02-17 13:59 takehiro * libmp3lame/psymodel.c: fix for --enable-all-float. 2002-02-17 13:55 takehiro * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/util.h: added inter channel masking effect. gfp->interChRatio is the ratio of inter-channel masking effect, which could be indicated by --interch X option. The default value is 0.0, which means there's no inter-channel masking effect. I think ratio = 0.01 is OK for lower bitrates (like under 128kbps), for like old days songs by the Beatles. 2002-02-17 13:30 bouvigne * frontend/parse.c: presets down to 8kbps 2002-02-17 08:12 takehiro * libmp3lame/util.h: prepare for the interchannel masking and substep noise shaping. 2002-02-16 17:19 robux4 * ACM/tinyxml/: Makefile.tinyxml, changes.txt, dox, makedistlinux, makedistwin.bat, readme.txt, tinyxml.cpp, tinyxml.dsp, tinyxml.h, tinyxmlerror.cpp, tinyxmlparser.cpp, xmltest.cpp: Update with newer version of TinyXML 2002-02-15 11:42 shibatch * frontend/parse.c, libmp3lame/psymodel.c: Now, nspsytune2 should work, maybe... 2002-02-14 15:38 shibatch * libmp3lame/: lame.c, psymodel.c, util.h: Preparation work for nspsytune2. 2002-02-13 16:30 aleidinger * frontend/rtp.h: compile fix for gcc 3.x from Len Walter 2002-02-09 18:51 markt * frontend/gtkanal.c: added preflag count to statics window in mp3x 2002-02-07 11:58 shibatch * libmp3lame/lame.c, libmp3lame/lame_global_flags.h, frontend/parse.c, include/lame.h, libmp3lame/set_get.c: preparation work for nspsytune2 2002-02-04 17:10 markt * TODO, libmp3lame/util.c: temporary fix for resampling code. downsampling from 44101 to 44100 causes a seg fault. Workaround in place for now: resampling disabled if input/output samplerates agree to 4 digits. 2002-02-01 18:58 markt * INSTALL, TODO: minor edits 2002-02-01 17:41 markt * TODO: added notes about building a working, all encompasing MSVC6 workspace to TODO list 2002-02-01 17:37 markt * INSTALL: added nots about the ACM codec and directshow filter to INSTALL 2002-02-01 17:08 robux4 * ACM/ACM.cpp: Correct a problem when more than 2 channels are involved 2002-01-31 21:17 robux4 * libmp3lame/lame.c: Less memory copying on interleaved buffer 2002-01-31 21:03 uid32249 * ACM/tinyxml/: Makefile, Makefile.tinyxml: replace Makefile with Makefile.tinyxml 2002-01-30 23:25 robux4 * ACM/: ACM.cpp, acm.rc: resolved FhG incompatibility, first beta version (can go public), no decoding yet 2002-01-29 21:20 robux4 * ACM/: ACM.cpp, TODO, acm.rc: update version and removed unused buffers 2002-01-29 20:51 robux4 * ACM/lameACM.dsp: build with special dynamic memory handling for ACM 2002-01-29 20:37 robux4 * configMS.h, ACM/ACM.cpp, ACM/ACMStream.cpp, ACM/main.cpp: More debugging, special dynamic memory handling for ACM 2002-01-28 22:33 ivanski * mac/LAME.mcp: CW6 Project File 2002-01-28 22:13 ivanski * mac/: .DS_Store, LAME Carbon Debug.pch, LAME Carbon Final.pch, LAME Classic Debug.pch, LAME Classic Final.pch, MacDLLMain.c, Precompile_Common.h: Initial revision 2002-01-28 22:13 ivanski * mac/: .DS_Store, LAME Carbon Debug.pch, LAME Carbon Final.pch, LAME Classic Debug.pch, LAME Classic Final.pch, MacDLLMain.c, Precompile_Common.h: Mac support 2002-01-28 20:12 robux4 * ACM/: TODO, acm.rc: more TODO, added icon credit 2002-01-28 18:18 markt * libmp3lame/lame.c, test/CBRABR.op: set devault qval to 2 for CBR and ABR. 2002-01-25 18:18 robux4 * ACM/: TODO, lame.ico: new icon, more to do 2002-01-25 17:51 robux4 * ACM/: ACM.cpp, ACM.h, AEncodeProperties.cpp, DecodeStream.cpp, acm.rc: version 0.7.6, improved the smart output mode, corrected a config saving bug 2002-01-25 17:47 robux4 * ACM/ADbg/: ADbg.cpp, ADbg.h: more explicit cast 2002-01-25 11:27 aleidinger * misc/Makefile.in: regen 2002-01-25 11:23 aleidinger * misc/Makefile.am: add lameid3.pl 2002-01-25 11:22 aleidinger * doc/man/lame.1: some fixes 2002-01-24 19:38 robux4 * ACM/: ACM.cpp, ACM.h, ACMStream.cpp, AEncodeProperties.cpp, AEncodeProperties.h, TODO, acm.rc, lameACM.dsp, lame_acm.xml, main.cpp, resource.h: introducing smart output mode, clean dialog boxes, config saving/loading now works 2002-01-23 20:51 robux4 * ACM/DecodeStream.cpp: correct a build problem when ENABLE_DECODING is not defined 2002-01-23 20:45 robux4 * ACM/readme.txt: More doc on the release files 2002-01-23 20:40 robux4 * ACM/ADbg/ADbg.dsp: removed a minor build problem 2002-01-23 20:39 robux4 * ACM/: ACM.cpp, ACM.dsw, ACM.h, ACMStream.cpp, ACMStream.h, AEncodeProperties.cpp, AEncodeProperties.h, DecodeStream.cpp, DecodeStream.h, LameACM.inf, TODO, acm.rc, lameACM.dsp, lame_acm.xml, readme.txt, resource.h, tinyxml/Makefile, tinyxml/changes.txt, tinyxml/readme.txt, tinyxml/test.dsp, tinyxml/test.dsw, tinyxml/tinyxml.cpp, tinyxml/tinyxml.dsp, tinyxml/tinyxml.h, tinyxml/tinyxmlerror.cpp, tinyxml/tinyxmlparser.cpp, tinyxml/xmltest.cpp: Initial configuration dialog and XML config saving, initial decoding support (not working yet) 2002-01-23 20:32 robux4 * mpglib/interface.h: better handling of C++ include 2002-01-23 01:23 markt * lame.spec.in: commiting Yosi's new lame.spec.in file 2002-01-22 19:45 robux4 * ACM/: ACM.cpp, ACM.dsw, ACM.h, ACMStream.cpp, ACMStream.h, LameACM.inf, TODO, acm.rc, adebug.h, lameACM.def, lameACM.dsp, main.cpp, readme.txt: clean the code, put LGPL license, add mpglib to the build 2002-01-21 21:33 markt * TODO, configure, configure.in: added MAX OSX patch from sf bugtrack page 2002-01-21 20:24 markt * USAGE, misc/lameid3.pl: added lameid3.pl script to misc directory. (use to reencode mp3's and preserve id3 tags) 2002-01-20 19:29 robux4 * libmp3lame/util.h: Better C++ handling 2002-01-20 19:25 robux4 * Dll/BladeMP3EncDLL.h: Better C++ handling 2002-01-20 15:05 aleidinger * configure: regen (ACM) 2002-01-20 15:05 aleidinger * configure.in: Add ACM directory 2002-01-20 15:04 aleidinger * ACM/Makefile.in: Add generated autoconf glue 2002-01-20 14:59 aleidinger * ACM/ADbg/Makefile.in: Add generated autoconf glueACM/Makefile.in 2002-01-20 14:58 aleidinger * ACM/: Makefile.am, ADbg/Makefile.am: Add automake clue (for make dist) 2002-01-20 14:56 robux4 * ACM/lameACM.dsp: Eanble correct nasm support 2002-01-20 14:03 robux4 * ACM/: ADbg/ADbg.cpp, ADbg/ADbg.dsp, ADbg/ADbg.h, ACM.cpp, ACM.dsw, ACM.h, ACMStream.cpp, ACMStream.h, LameACM.inf, acm.rc, adebug.h, lame.ico, lameACM.def, lameACM.dsp, main.cpp, readme.txt, resource.h: Initial ACM support 2002-01-19 11:52 bouvigne * README, TODO: updated TODO 2002-01-17 16:43 aleidinger * Makefile.unix: NASM for Windows fixes (Hubert Hanghofer) 2002-01-17 13:42 aleidinger * configure: regen 2002-01-17 13:42 aleidinger * configure.in: - Update gcc 3.x and --enable-expopt=full flags based upon suggestions and benchmarks from Hubert Hanghofer and Craig Okruhlica . - Remove gcc flags which are marked 'experimental' in the gcc 3.0.3 documentation (noticed by Hubert Hanghofer). - Add comment what "expopt" means, and what it doesn't mean. 2002-01-17 13:42 aleidinger * Makefile.unix: - Update MINGW part pased upon patches and comments from Hubert Hanghofer . - Some minor changes for consistency. Note: this file is superseded by configure, except for systems where configure didn't work, so if something is broken you have to send patches. 2002-01-17 05:08 takehiro * libmp3lame/i386/.cvsignore: added *.lo 2002-01-09 12:09 takehiro * debian/.cvsignore, dshow/.cvsignore: added autogen Makefile to ignore 2002-01-09 12:09 takehiro * frontend/.cvsignore, libmp3lame/.cvsignore, mpglib/.cvsignore: added *.il, for the intel compiler with ipo option 2002-01-07 15:51 aleidinger * configure: oops, forgot to s/gtk12-config/gtk-config/ 2002-01-07 15:48 aleidinger * configure: regen 2002-01-07 15:48 aleidinger * configure.in: add gcc 3 specific optimizations, based upon suggestions by Sébastien FORESTIER 2002-01-07 10:35 aleidinger * configure, frontend/Makefile.in: regen: Fix Cygwin and HPUX problems. 2002-01-07 10:34 aleidinger * configure.in, frontend/Makefile.am: Fix Cygwin and HPUX problems. 2002-01-01 16:55 robert * misc/lame4dos.bat: modified some remark 2001-12-30 23:54 markt * doc/html/history.html: updated hostory.html from master copy in webpages project 2001-12-29 17:36 takehiro * doc/html/history.html: fix option for pseudo-half step quantization 2001-12-29 16:23 aleidinger * configure: regen: Welcome to 3.92 2001-12-29 16:21 aleidinger * configMS.h, configure.in, libmp3lame/version.h: Welcome to 3.92 2001-12-29 15:45 aleidinger * doc/html/history.html: sync with webpages/history.html 2001-12-28 18:55 takehiro * .cvsignore: added stamp-h1 2001-12-28 12:47 aleidinger * Dll/Example.dsp, Dll/MP3EncDll.dsp, dshow/dshow.dsp, frontend/lame.dsp, libmp3lame/libmp3lame.dsp, dshow/dshow.dsw, mpglib/mpglib.dsp: unix->dos 2001-12-27 16:12 aleidinger * doc/man/lame.1: add --alt-preset 2001-12-27 12:50 aleidinger * misc/Makefile.in: regen: add missing files to the distribution 2001-12-27 12:49 aleidinger * misc/Makefile.am: add missing files to the distribution 2001-12-23 20:19 dibrom * libmp3lame/set_get.c: disable noise shaping 2 for "fast" extreme mode also 2001-12-23 20:11 dibrom * libmp3lame/: set_get.c, vbrquantize.c: fix small bug and completely disable noise_shaping 2 with "fast" mode until a better solution can be found. 2001-12-23 12:25 aleidinger * misc/Makefile.in: regen: add some files to the distribution 2001-12-23 12:22 aleidinger * misc/Makefile.am: add auenc, mugeco,sh and mlame to distrib 2001-12-22 13:32 aleidinger * DEFINES: document NON_LINEAR_PSYMODEL, remove KLEMM_43 2001-12-22 13:29 aleidinger * libmp3lame/psymodel.c: non linear psymodel (disabled by default) for GPSYCHO (nspsytune is untouched) 2001-12-22 13:27 aleidinger * configure: regen: Welcome to v3.91 2001-12-22 13:26 aleidinger * configMS.h, configure.in, libmp3lame/version.h: Welcome to v3.91 2001-12-21 15:09 aleidinger * libmp3lame/machine.h: add icc check 2001-12-21 15:05 aleidinger * libmp3lame/Makefile.in: regen: (add vbrquantize.h) 2001-12-21 15:05 aleidinger * libmp3lame/Makefile.am: add vbrquantize.h 2001-12-21 11:58 jd- * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.def, BladeMP3EncDLL.h: Added DLL interface function beEncodeChunkFloatS16NI for floating point audio Samples are input within the range +/- 32768, in non-interleaved channels 2001-12-21 03:29 markt * testcase.mp3: updated testcase 2001-12-21 03:29 markt * libmp3lame/: version.c, version.h: updated version to lame 3.90 2001-12-20 23:11 markt * ChangeLog: update changelog 2001-12-20 08:44 dibrom * libmp3lame/encoder.c: no message 2001-12-20 08:33 dibrom * libmp3lame/: encoder.c, set_get.c, util.h, vbrquantize.c: improved quality of "fast" modes in certain situations 2001-12-18 17:44 dibrom * frontend/parse.c: removed bitrate compensation stuff for the abr bitrates since it appears no longer necessary 2001-12-18 17:28 dibrom * doc/html/switchs.html: added --alt-preset to the list of switches 2001-12-18 17:13 dibrom * doc/html/history.html: documented many changes which have been made over 3.90 2001-12-18 16:27 dibrom * frontend/parse.c: small tweak to "standard" preset 2001-12-18 16:14 dibrom * libmp3lame/: psymodel.c, quantize.c, set_get.c, util.h, vbrquantize.c: small quality improvement for "extreme" and "insane", more bitrate tunings for "extreme" -- should average to 256kbps more often 2001-12-18 11:16 aleidinger * configure: regen: vorbis changes 2001-12-18 11:14 aleidinger * configure.in: - Change vorbis default to disabled - Added -logg in the vorbis case (seems to be needed, I haven't tested it) 2001-12-18 11:13 aleidinger * libmp3lame/vorbis_interface.c: Try to unbreak vorbis support (it can't get worser). You may need the vorbis source and add -I/path/to/vorbis_src/includes/ to CFLAGS prior to running configure Tested by: Jonathan Ryshpan on RedHat 7.2 Submitted by: Cyrille Lefevre via FreeBSD problem report 2001-12-17 04:40 markt * libmp3lame/quantize.c: Minor changes to Gabriel's adjustment for ABR bitrate. Updated testcases. Added the following comments: /* res_factor is the percentage of the target bitrate that should be used on average. the remaining bits are added to the bitreservoir and used for difficult to encode frames. Since we are tracking the average bitrate, we should adjust res_factor "on the fly", increasing it if the average bitrate is greater than the requested bitrate, and decreasing it otherwise. Reasonable ranges are from .9 to 1.0 Until we get the above suggestion working, we use the following tuning: compression ratio res_factor 5.5 (256kbps) 1.0 no need for bitreservoir 11 (128kbps) .93 7% held for reservoir with linear interpolation for other values. */ res_factor = .93 + .07 * (11.0 - gfp->compression_ratio) / (11.0 - 5.5); 2001-12-16 16:00 bouvigne * libmp3lame/quantize.c: better abr bitrate approximation (will break abr testcases) 2001-12-15 07:31 dibrom * libmp3lame/: psymodel.c, set_get.c, util.h, vbrquantize.c: More tunings for "fast" options for "standard" and "extreme" modes. 2001-12-14 16:27 dibrom * libmp3lame/set_get.c: small tweak to "extreme" mode 2001-12-14 07:00 dibrom * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: - changed --dm-presets to --alt-presets - modified preset system - applied tunings to vbr and psymodel, especially with --alt-preset standard, improves many difficult clips over the default vbr modes/presets (even those such as --r3mix) such as impulse cases (fatboy, spahm, them, gbtinc, ravebase, etc), pre-echo cases (castanets, death2, florida_seq, etc), tonality/js cases (2nd_vent, serioustrouble, bloodline, etc), low volume clips (piano, rach_original), many clips with problems with noise shaping 2, and much much more. Practically all cases should be equal or improved in quality. - added --no-preset-tune to disable tunings for --alt-preset "modes" 2001-12-03 18:15 markt * USAGE, frontend/parse.c: updated descriptions of some command line options, as per Dmitry 2001-11-30 18:35 markt * lame.spec.in: patch from lassauge@mail.dotcom.fr for lame.spec.in file. 2001-11-30 18:05 markt * include/lame.h, libmp3lame/lame.c: added lame_encode_buffer_long2(), since lame_encode_buffer_long() had a scaling which restricted the precision of the input to the same as if the input was 'short int' decided to leave the original routine, on the off chance there is some program out there which uses it. 2001-11-28 12:30 aleidinger * Makefile.in: regen 2001-11-28 12:29 aleidinger * Makefile.am: change description of make test 2001-11-26 15:21 takehiro * libmp3lame/takehiro.c: tuning of "pseudo half step noise shaping" with listening test. and it works now even when scalefac_scale == 1 2001-11-26 15:19 takehiro * libmp3lame/: psymodel.c, VbrTag.c: fix warning 2001-11-26 11:00 aleidinger * libmp3lame/version.h: Bump alpha version. 2001-11-25 15:24 takehiro * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, takehiro.c, util.h: new noise shaping algorithm(pseudo half step noise shaping) it brings slow but more accurate noise shaping. enables with -q0 when CBR 2001-11-19 21:26 markt * frontend/parse.c, libmp3lame/encoder.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: Reverted CVS back to before "gglower" option was added. --scale is a better way to do this, and contrary to Hans' claims, --scale is also lossless. 2001-11-18 22:44 robert * frontend/parse.c, libmp3lame/encoder.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: patch by Hans van der Heijden, original email: Datum: Sun, 18 Nov 2001 20:13:11 +0100 Von: "Hans van der Heijden" An: Hi Robert, For the first time, I compiled Lame, being a non-programmer (well, my work involves programming, but that's a world apart with logic symbols, not C language). Because sometimes I have the urge to try something with the sourcecode. I'd like to add a switch to avoid the use of --scale for preventing clipping. It manipulates global_gain, similar as the mp3gain tool does, but this would be much more convenient of course (and better quality-wise, being 'lossless'). Since I have no programming experience, can you take a look if I implemented it correctly? The switch is called --gglower x, where each x-step stands for 1,5 dB. gg is short for global gain. So for example, --gglower 1 will decrease the output volume with 1,5 dB (0,841). I would probably use this by default, it will be enough to prevent clipping for all but the oddest samples/settings. I did a lot of copy/pasting from the --athlower switch, otherwise I probably couldn't figure it all out! Files involved are parse.c, lame_global_flags.h, set_get.c, lame.h and bitstream.c. I attached these files, if you search in each for 'gglower' you'll find the added code. Files came from the 11 Nov CVS. Also attached is a cygwin lame.exe if you like to play with it. Let's add it to CVS if it's OK (don't know how to do that myself, have to tell Mark?). Bye, Hans 2001-11-17 11:17 aleidinger * Dll/Example.cpp, Makefile.unix, Dll/Makefile.mingw32: some mingw fixes from Vladislav Naumov 2001-11-14 16:25 aleidinger * include/lame.h: fixes in comments 2001-11-12 21:58 robert * libmp3lame/lame.c: [no log message] 2001-11-12 17:36 aleidinger * include/lame.h: spelling fixes in comments 2001-11-11 22:13 afaber * Dll/BladeMP3EncDLL.c: fixed bugs: 451879 and 438835 2001-11-11 15:08 aleidinger * doc/man/Makefile.in, configure: regen 2001-11-11 15:06 aleidinger * libmp3lame/bitstream.c: add CVS Id 2001-11-11 14:57 aleidinger * Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen 2001-11-11 14:53 aleidinger * configure.in, frontend/Makefile.am: bugfix: --disable-{mp3x,mp3rtp} had build them add: --disable-fontend 2001-11-11 14:48 aleidinger * include/lame.h, libmp3lame/version.c, libmp3lame/version.h: remove mp3x version, it doesn't belong into the lib (this breaks every app which uses the function, but mp3x should be the only app which uses it, so this is ok because I moved it into gtkanal.c) 2001-11-11 14:47 aleidinger * frontend/gtkanal.c: move mp3x version here (from libmp3lame/version.[ch]) 2001-11-11 11:31 aleidinger * libmp3lame/Makefile.in: regen 2001-11-11 11:30 aleidinger * libmp3lame/Makefile.am: add missing headers 2001-11-10 14:25 aleidinger * libmp3lame/VbrTag.c: at least fix the bus error on SPARC until Roel or someone else decides if we should fix it in another way 2001-11-06 14:43 aleidinger * doc/html/switchs.html: resample only for encoding 2001-11-06 12:41 aleidinger * doc/man/lame.1: athaa fixes, resample only for encoding 2001-11-06 01:31 jd- * frontend/parse.c: Cleaned up preset help; send explicitly requested help to stdout, not stderr. Modularized original presets, with aliases to preserve the original behavior. 2001-11-05 15:26 dibrom * frontend/parse.c: modify lowpass values for dm-preset abr mode 2001-11-05 05:46 dibrom * frontend/parse.c: Updated dm-presets 2001-11-05 05:20 markt * testcase.mp3, libmp3lame/encoder.h: updated padding at end of MP3 to be 1152 samples. So the last frame containing real data will always be followed by a frame containing silence. (since most decoders will only decode the second to last frame) 2001-11-04 23:42 robert * Makefile.MSVC: lost i added 2001-11-04 23:39 robert * Makefile.MSVC: optimizing some intel compile flags 2001-11-04 18:51 robert * configMS.h: moved MSVC specific #pragma into MSVC section 2001-11-04 18:50 robert * libmp3lame/quantize.h, DEFINES: removed MAXQUANTERROR precompiler define 2001-11-04 18:48 robert * frontend/parse.c, include/lame.h: we don't want to make Naoki's msfix part of the API at this time, removed from lame.h again. parse.c compilation was broken by JD's presets_alias function. 2001-11-04 18:31 robert * libmp3lame/: encoder.c, quantize.c, vbrquantize.c, vbrquantize.h: removed MAXQUANTERROR precompiler define 2001-11-04 18:20 dibrom * frontend/parse.c: update dm-presets.. more to come shortly 2001-11-04 18:19 dibrom * include/lame.h: added msfix 2001-11-04 17:28 robert * include/lame.h, libmp3lame/lame.c: --vbr-mtrh is now known as --vbr-new 2001-11-04 17:22 robert * Dll/BladeMP3EncDLL.c: --vbr-mtrh is now known as --vbr-new 2001-11-04 13:39 aleidinger * libmp3lame/set_get.c: some fixes in the comments 2001-11-04 13:39 aleidinger * frontend/parse.c: mark --{voice,radio,cd,studio,phone} as deprecated 2001-11-04 13:33 aleidinger * doc/man/lame.1: remove --voice (deprecated) 2001-11-04 13:01 jd- * frontend/parse.c: Moved "--dm-preset *" preset profiles to "--preset dm-*". Added code for aliasing presets to multiple broad or narrow purpose labels. 2001-11-04 08:37 jd- * frontend/parse.c: Allow specifying the r3mix preset with "--preset r3mix" for consistency 2001-11-03 10:51 jd- * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: Renamed experimental switch "--ath-adjust" to "--athaa-type" for consistency. All switches directly affecting ATH auto-adjustment begin with "--athaa-*". 2001-11-03 09:31 jd- * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/util.h: Added a bit of documentation to the long help. To better reflect purpose, renamed adapt-thres-type and adapt-thres-level to athaa-loudapprox and athaa-sensitivity, respectively. 2001-10-30 20:31 markt * libmp3lame/VbrTag.c: When determining enc_delay and enc_padding from VBR header, check for reasonable values. 2001-10-29 22:00 markt * frontend/get_audio.c, frontend/main.c, frontend/main.h, frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, mpglib/interface.c, mpglib/mpglib.h: VbrTag.c: GetVBRTag() updated to parse enc_delay, enc_padding fields enc_delay is used by 'lame --decode' to determine how many samples to skip at the beginning during decoding. 2001-10-29 20:01 markt * frontend/main.c: for --nogap option, do not allow Xing VBR tag. We should also not allow id3 tags and --nogap, but the are not turned on by default, and it is more than a 3 line fix :-) 2001-10-29 08:41 bouvigne * libmp3lame/: gain_analysis.c, gain_analysis.h: adding gain analysis files 2001-10-29 06:08 markt * frontend/main.c, libmp3lame/VbrTag.c, libmp3lame/lame_global_flags.h, mpglib/interface.c: --nogap and --nogapout fixed in frontend. didn't check if output is really gapless - hopefully no bugs have crept into that while --nogap was broken. 2001-10-28 22:24 markt * libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame_global_flags.h, libmp3lame/tables.c, libmp3lame/util.c, mpglib/interface.c: Fixed bug in VbrTag.c which is why Xing tag was broken for MPEG2 files. This code: if( h_id == 0 ) pTagData->samprate >>= 1; was, for unknown reasons, cutting the samplrate down by a factor of two for MPEG2, causing the framesize of the Xing header to be too large, causing it to overwrite the first valid MP3 frame. 2001-10-25 11:54 roelvdb * libmp3lame/VbrTag.c: undo previous edit, misunderstanding 2001-10-24 23:59 roelvdb * libmp3lame/VbrTag.c: if ABR, {store bitrate <=255} else { use 4 low bits to store bitrateindex so "-b" for VBR(/CBR) is known. 0F for freeformat} 2001-10-24 20:45 markt * testcase.mp3: updated testcases 2001-10-24 16:33 aleidinger * doc/man/lame.1: sync with HTML 2001-10-24 12:44 bouvigne * doc/html/: basic.html, examples.html, history.html, node6.html, switchs.html: doc fixes 2001-10-24 12:32 bouvigne * doc/html/switchs.html: a small athtype doc modif 2001-10-23 16:35 bouvigne * doc/html/switchs.html: fixes from Dmitry 2001-10-23 16:17 bouvigne * doc/html/switchs.html: fixes from Alexander 2001-10-23 14:06 aleidinger * doc/man/lame.1: add line breaks, expand examples section, add ID3 section, fixes 2001-10-23 14:06 aleidinger * frontend/main.c: fix for cygwin/mingw from egor duda 2001-10-22 21:31 roelvdb * libmp3lame/VbrTag.c: no message 2001-10-22 13:25 aleidinger * doc/man/lame.1: update based on HTML version 2001-10-21 17:00 bouvigne * doc/html/: basic.html, switchs.html: doc 2001-10-20 16:32 aleidinger * Makefile.unix: Submitted by: "Vladislav Naumov" I canged number 2 of his fixes to be equal to configure.in (-O3 is the highest official supportes optimization option, some of the options are superfluous (because they are included in -O3), some may perhaps change the ABI (ABI, not API!), e.g. -malign-*). Quote: 1. NOUNIXCMD = YES (don't use shell & sed) 2. CC_OPTS are set to produce optimized code. Somewhat faster. 3. frontend_sources & lib_sources are now fixed. GNU Make version 3.79.1 croaked about recursive variable. 4. ASFLAGS are correctly set, 'make -fMakefile.unix UNAME=MSDOS HAVE_NASM=YES' works smoothly (if you have nasm.exe, of course :)) 2001-10-20 16:28 aleidinger * Dll/Makefile.mingw32: Submitted by: "Vladislav Naumov" Quote: This makefile compiles lame_enc.dll with mingw32 (and possibly cygwin) Of course, you must first build ../libmp3lame/libmp3lame.a. liblame_enc.a can be used to link the lame_enc.dll to your programs. Tested with EAC 0.9pb9 (my own favorite, http://www.exactaudiocopy.de/). 2001-10-19 17:39 bouvigne * libmp3lame/VbrTag.c: headering... 2001-10-18 19:55 bouvigne * doc/html/switchs.html, frontend/parse.c: documenting...hopefully nearly finished 2001-10-17 19:29 robert * frontend/main.c: patch by Gian-Carlo Pascutto I saw someone reported a problem with my --nogapout switch on the mailinglist. I have done a quick attempt to fix the problems (and address another potential one). I haven't actually tested the fixes, but I'm reasonably sure they are correct, or at least they show how to address the problem. 2001-10-17 13:23 roelvdb * libmp3lame/VbrTag.c: after discussing with Gabriel added some more AQ flag refinements (--athonly,--noath,--scale-*, free format) and made #define MAXFRAMESIZE 2880, because LAME used to fill the freeformat 640 LAME Tag with junk at the end. 2001-10-17 11:31 aleidinger * configMS.h: fix VERSION after last commit 2001-10-17 01:41 roelvdb * libmp3lame/VbrTag.c: added overflow protection to that lowpass field in the LAME Tag, just in case someone enters a very high lowpass value. 2001-10-17 01:18 roelvdb * libmp3lame/lame.c: 44.1kHz: instead of "transition band: 22228 Hz - 22761 Hz" lowpass filter, "-b320 -a" (mono) will now give "transition band: 21517 Hz - 22050 Hz" (as in the stereo case) likewise on other samplerates. I can imagine this can be done in a much more intelligent fashion. also commented out a bit of similar code that seems obsolete now? 2001-10-16 18:49 bouvigne * doc/html/switchs.html: documenting - not finished 2001-10-16 18:07 afaber * configMS.h, include/lame.h, libmp3lame/VbrTag.h, libmp3lame/bitstream.c, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/util.h: Fixed some compiler warnings (mainly differences between function declaration and definition) 2001-10-16 15:00 roelvdb * libmp3lame/VbrTag.c: added the needed "else", fixed lowpass, added -V0/V1, --nores, -k, ... 2001-10-16 10:35 bouvigne * doc/html/history.html: history 2001-10-15 13:44 roelvdb * libmp3lame/VbrTag.c: fixed a wrong bracket causing >=256 CBR not to be AQ added ABR>=256 S as AQ, consistent with CBR >=256S 2001-10-13 19:00 markt * testcase.mp3: updated testcases 2001-10-13 14:02 aleidinger * include/lame.h, frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c, libmp3lame/util.c: add --scale-l and --scale-r options Requested by: fasttimes@mochamail.com Written by: mp3gain@hotmail.com 2001-10-13 14:00 aleidinger * doc/man/lame.1: update from "lame --longhelp" 2001-10-13 14:00 aleidinger * USAGE, doc/html/switchs.html: add --scale-l, --scale-r 2001-10-12 18:39 bouvigne * doc/html/: index.html, switchs.html: a few doc updates - not yet finished 2001-10-11 20:06 bouvigne * USAGE, doc/html/basic.html, doc/html/examples.html, doc/html/history.html, doc/html/id3.html, doc/html/modes.html, doc/html/node6.html, doc/html/switchs.html: [no log message] 2001-10-11 12:21 aleidinger * libmp3lame/: encoder.c, util.h: fix misunderstanding of gfc->padding 2001-10-10 02:17 roelvdb * libmp3lame/: VbrTag.c, lame.c: consequence, it's "LAME Tag", longhelp said Xing header 2001-10-10 02:15 roelvdb * frontend/parse.c: consequence, it's "LAME Tag" 2001-10-10 02:00 roelvdb * frontend/main.c: added 13 " if (silent < 10) "s to make "lame --decode --quiet" really silent. there's still a LF I can't locate though... 2001-10-10 01:42 roelvdb * Dll/BladeMP3EncDLL.c: removed experimental X from --r3mix 2001-10-09 23:09 roelvdb * libmp3lame/VbrTag.c: adds delays/padding to tag, no range check and tested exclusively on windows 2001-10-09 22:34 roelvdb * frontend/parse.c: test commit CVS to fix --r3mix size increase (robert identified is as -X being used) 2001-10-09 14:30 aleidinger * libmp3lame/version.h: bump alpha version 2001-10-09 14:26 aleidinger * Dll/BladeMP3EncDLL.c, frontend/parse.c, libmp3lame/VbrTag.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/util.h: Use the official enum names from lame.h instead of numbers or defines. 2001-10-08 12:54 bouvigne * libmp3lame/util.c: athtype fix 2001-10-06 19:25 markt * include/lame.h: added notes about scaling. there are some inconsistencies in the API: lame_encode_buffer() takes short int as input, range +/- 32768 lame_encode_float() takes float, but data must be in the range +/- 32768 lame_encode_double() takes double, but data must be in the range +/- 32768 lame_encode_int() takes int, but data must be in the range of 'int' for 32bit ints, this is +/- 2147483684 2001-10-06 19:17 markt * frontend/get_audio.c: updated error messages we now support 8,16,24 and 32 bit input 2001-10-06 19:05 markt * frontend/get_audio.c, frontend/gtkanal.c, frontend/parse.c, include/lame.h, libmp3lame/lame.c: added support for 24 and 32 bit when not using libsndfile. jd had already added the code to do this, just had to make the libsndfile --bitwidth option available when not using libsndfile. Also updated unpack_read_samples to support 32bit. Could not test this since I dont have any 24 bit files, and sox cant seem to create them. 2001-10-05 22:43 robert * libmp3lame/: lame.c, machine.h, quantize_pvt.c, quantize_pvt.h, vbrquantize.c: using -Xn similar to the old code to select different noise measurings with the newer VBR code. the actual mapping is not final yet. 2001-10-05 13:00 bouvigne * libmp3lame/util.c: ath 4 switches to ath 2 in cbr mode 2001-10-05 12:59 bouvigne * libmp3lame/lame.c: made NsPsytune stopping using ath0 as default, as everyone is overriding the athwhen using nspsytune 2001-10-05 12:20 bouvigne * Makefile.MSVC, libmp3lame/libmp3lame.dsp: makefile.msvc and projects on par? 2001-10-04 10:01 aleidinger * libmp3lame/: VbrTag.c, VbrTag.h: fixes for Solaris 8 / add missing include 2001-10-02 16:02 markt * frontend/: main.c, parse.c: added nogap patch from Gian-Carlo Pascutto. lame --nogapout --nogap file1.wav file2.wav file3.wav ... untested. 2001-10-02 03:54 markt * configure: ran autoconf to make a new configure script 2001-10-02 03:53 markt * INSTALL, configure.in, frontend/main.c, frontend/parse.c, libmp3lame/lame.c, libmp3lame/vorbis_interface.c: split Vorbis support into two pieces: 1. HAVE_VORBIS (decoding support). This code still works! (at least it compiles - I have't actually run it). Can be enabled with ./configure --with-vorbis. Changed the default in configure.in to define HAVE_VORBIS 2. HAVE_VORBIS_ENCODER This is the code which hasn't compiled since Vorbis beta1. Mainly because how you specify varous encoding "modes" has been changed. It's probably not to much work to get this working, but there is no reason for this to be in LAME. 2001-10-02 00:00 markt * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, encoder.c, lame.c: Music CRC computed on the fly. Code stubs in place for decoding on the fly. 2001-10-01 23:02 markt * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, encoder.c, lame.c, util.h: started work to put in the ability to compute MusicCRC on the fly, as well as decoding on the fly. 2001-09-30 20:36 robert * frontend/parse.c, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/set_get.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: removed some unused variable 2001-09-28 21:29 markt * frontend/main.c: cpu affinity back to #define _WIN32 2001-09-28 21:13 markt * frontend/main.c: process affinity patch is back 2001-09-28 20:46 markt * USAGE: more small updated to USAGE 2001-09-28 20:38 markt * USAGE: updated USAGE to reflect Dmitry's -B comments 2001-09-28 12:04 bouvigne * Makefile.MSVC: harmonization between makefile and project 2001-09-27 13:33 bouvigne * libmp3lame/libmp3lame.dsp: 3dnow fft assembly 2001-09-21 04:50 markt * testcase.mp3, frontend/main.c: updated testcases (lowpass added to Info tag?) 2001-09-21 04:03 markt * frontend/main.c: disabled CPU affinity code. should only be in a #ifdef NT-system, but I dont know what the ifdef should be. 2001-09-20 08:38 bouvigne * libmp3lame/libmp3lame.dsp, mpglib/mpglib.dsp: corrected dsp files for VC++. Should work also under VC5, but not tested. Please report success/error 2001-09-20 07:15 bouvigne * libmp3lame/: VbrTag.c, lame.c: default lowpass stored in info tag 2001-09-19 14:32 markt * testcase.mp3: updated testcase.mp3 2001-09-18 13:37 aleidinger * libmp3lame/util.c: Fix memory hole (allocation from psymodel_init()). Found by: Michael Fink 2001-09-17 23:54 markt * libmp3lame/: VbrTag.c, util.c: moved a 1M array from stack to heap in VbrTag.c Some OS, when launching LAME on a seperate thread, allocate a tine (128K?) stack. moving this to the heap is an ugly solution (requires a malloc() and free()) but lets see if it fixes the reported segfaults. 2001-09-17 21:17 markt * frontend/main.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/lame.c, libmp3lame/util.c: more code related to putting encoder padding into VBR tag 2001-09-17 20:05 markt * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/set_get.c: added new call to API, lame_get_encoder_padding() which returns the amount of padding appended to the input during encoding. 2001-09-17 19:15 markt * libmp3lame/util.c: moved MSVC cpu affinity code to the top of disable_FPE() 2001-09-15 09:57 aleidinger * configure: regen 2001-09-15 09:49 aleidinger * configure.in: Bugfix for libffm (Alpha architecture). Submitted by: Simon Burge 2001-09-14 17:37 markt * HACKING, README: added a note about LAME being threadsave to the HACKING file. 2001-09-14 17:18 markt * libmp3lame/util.c: put Todd Richmond's EAC/lame SMP fix in util.c, with all the messy code for setting floating point exceptions. I put this in the #if defined(_MSC_VER) block, so it should only affect people using MSVC. 2001-09-11 07:47 potsticker * libmp3lame/VbrTag.c: Changed id string from 'Xing' to 'Info' for CBR files only 2001-09-08 18:39 potsticker * libmp3lame/VbrTag.h, frontend/main.c: Don't write Lame Tag status message if --quiet 2001-09-08 18:35 potsticker * libmp3lame/VbrTag.c: Don't write Lame Tag status message if --quiet 2001-09-08 18:27 potsticker * libmp3lame/: VbrTag.c, VbrTag.h: Don't write Lame Tag status message if --quiet 2001-09-07 23:42 potsticker * libmp3lame/VbrTag.c, libmp3lame/lame.c, frontend/parse.c: Write Lame Tag for all files (unless -t switch used) 2001-09-04 00:06 potsticker * libmp3lame/VbrTag.c: Implemented most of Lame Tag rev 0 (but no 'replay gain' yet) 2001-09-03 23:45 potsticker * libmp3lame/: VbrTag.c, VbrTag.h: Implemented most of Lame Tag rev 0 (but no 'replay gain' yet) 2001-09-03 23:43 potsticker * libmp3lame/id3tag.h: Moved some macro definitions into id3tag.h (referenced in VbrTag.c) 2001-09-03 20:56 robert * libmp3lame/id3tag.c: cr/lf patch 2001-09-02 20:07 potsticker * libmp3lame/: id3tag.h, id3tag.c: Moved some macro definitions into id3tag.h (referenced in VbrTag.c) 2001-08-31 18:41 markt * libmp3lame/util.c: lowered tolerence in an assert() in the lowpass filtering routine. 2001-08-31 08:17 bouvigne * libmp3lame/: VbrTag.c, util.h: I hope it's fixed now 2001-08-29 20:08 bouvigne * Dll/BladeMP3EncDLL.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/version.c: first implementation of lame Xvbr tag from J Dee 2001-08-28 18:51 markt * API, HACKING, frontend/parse.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c: msfix changes. forgot to commit them yesterday 2001-08-28 17:06 aleidinger * Makefile.unix: OS/2 mods from slaughter@malaconet.org (in principle, I had to apply them by hand and modified it a little bit) 2001-08-28 15:41 aleidinger * configure: oops... wrong gtk-config 2001-08-27 21:06 aleidinger * configure: regen (+update to automake 1.5) 2001-08-27 21:04 aleidinger * aclocal.m4, Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.am, mpglib/Makefile.in: update to automake 1.5 2001-08-27 21:04 aleidinger * Makefile.unix: USE_FFT3DN died some time ago 2001-08-27 21:03 aleidinger * Makefile.am: fixes for the update and diff target if you build in a seperate directory 2001-08-27 21:01 aleidinger * frontend/main.c: Bump MAX_NOGAP from 20 to 40, I wanted to make 34 gapless mp3s. 2001-08-27 20:59 aleidinger * Makefile.am.global, config.guess, config.sub, depcomp, missing, mkinstalldirs, misc/depcomp, mpglib/depcomp: update to automake 1.5 2001-08-27 20:56 aleidinger * DEFINES, Makefile.B32, Makefile.MSVC, Dll/MP3EncDll.dsp, libmp3lame/libmp3lame.dsp, libmp3lame/vorbis_interface.c: remove USE_FFT3DN, this define died some time ago 2001-08-27 20:55 aleidinger * configure.in: remove --malign-double completely 2001-08-27 20:52 aleidinger * libmp3lame/fft.c: USE_FFT3DN -> HAVE_NASM 2001-08-27 20:50 aleidinger * lame.spec.in: - Build and include docs and libs correctly - Build extra programs Submitted by: Markus Linnala Note: I didn't have a rpm based system, if this breaks feel free to revert my commit, I'm at a "commit what isn't obviously broken and seems to be a good idea" run at the moment. 2001-08-27 20:49 aleidinger * doc/html/switchs.html, frontend/parse.c, USAGE: - OS/2 priority control Submitted by: "DoC" (with minor changes by me) 2001-08-27 16:40 markt * doc/man/lame.1, misc/Lame.vbs: typo in man page fixed, new Lame.vbs from "Ralf Kempkens" 2001-08-26 19:01 markt * configure.in: removed -malign-double, based on Klemm's email. 2001-08-26 18:59 markt * configure.in: some missing quotes for AmigaOS section of configure.in, submitted by Fredrik Mellstrom (I cant beieve there are still people out there using an amiga :-) 2001-08-26 18:38 markt * mpglib/: interface.c, mpglib.h: replaced "look_for_xing" variable with more descriptive name "sync_bitstream". 2001-08-21 19:48 bouvigne * frontend/parse.c: switching --vbr-new to mtrh 2001-08-21 08:57 viral * debian/: changelog, control, lame-dev.docs, lame.docs, rules: Debian packaging modifications. 2001-08-20 22:26 afaber * Dll/: BladeMP3EncDLL.c, MP3EncDll.dsp: Updated new R3Mix settings, use lame get/set function and version info so I got rid of the version.h and lame_global_flag.h include files 2001-08-20 20:54 robert * doc/html/contributors.html: adding Darin Morrison (author of dm presets) 2001-08-16 08:21 robert * misc/abx.c: update of abx.c by Frank Klemm 2001-08-15 21:58 robert * frontend/parse.c, libmp3lame/lame.c: making -Z a truely toggling switch reordering the longhelp options list dropping --extrahelp 2001-08-15 00:37 robert * libmp3lame/lame.c: dropped a nagging message for --vbr-mtrh (nspsytune tuned for ...) 2001-08-15 00:12 robert * frontend/parse.c, libmp3lame/util.c: update for --r3mix by Roel 2001-08-14 21:46 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize_pvt.c, libmp3lame/util.h, libmp3lame/version.h: some good presets tuned by Dibrom after die hard listening tests --dm-preset {standard,xtreme,insane,metal} and a switch to modify the --ns-treble setting for sfb21 by --ns-sfb21 x 2001-08-08 10:52 aleidinger * configure: regen 2001-08-08 10:51 aleidinger * configure.in: - remove optimizations which get already switched on by -O2 or better - new experimental optimizations - bump version to 3.90 2001-08-08 10:50 aleidinger * configMS.h: bump version to 3.90 2001-08-07 20:41 afaber * libmp3lame/libmp3lame.dsp: Added NASM release build option 2001-08-02 18:42 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h, Example.cpp, MP3EncDll.dsp: Added NASM build option, added Very High Quality option 2001-08-01 21:45 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize_pvt.c, libmp3lame/set_get.c, libmp3lame/version.h: BUG fix in "on_pe", was allocating often more than the absolute limit of 4095 bits per granule attention: testcases are most likely broken now! 2001-07-26 23:05 robert * libmp3lame/: lame.c, psymodel.c, vbrquantize.c, version.h: VBR mtrh related, bring --remix near to --r3mix bitrate wise 2001-07-25 20:19 robert * frontend/main.c: Michel SUCH, wildcard expansion for nogap using the OS/2 shell 2001-07-24 12:13 aleidinger * configure: regen 2001-07-24 12:12 aleidinger * configure.in: gcc 3.0 fix from Daniel T. Chen 2001-07-23 08:11 aleidinger * aclocal.m4, configure: update to automake 1.4-p5 2001-07-23 08:08 aleidinger * Makefile.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in, config.guess, config.sub: update to automake 1.4-p5 2001-07-23 08:05 aleidinger * Makefile.am.global: update to automake 1.4-p5 2001-07-22 19:24 robert * libmp3lame/: quantize.c, vbrquantize.c: small fixes 2001-07-22 06:37 jd- * libmp3lame/encoder.c: Pushed the maximum auto-level adjustment of the ATH from 20 dB to 32 dB 2001-07-20 23:56 robert * libmp3lame/quantize.c: small speed up for --vbr-old 2001-07-20 01:01 robert * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, vbrquantize.c, version.h: 1) defaulted the old -Y code for --vbr-old 2) new behaviour of -Y: turns off sfb21 noise shaping (VBR) 3) some more tunings for --vbr-old 2001-07-19 11:36 aleidinger * configure: regen 2001-07-19 11:35 aleidinger * configure.in: - removed useless (because already handled by Cygwin) MS-DOS case - bug fixes for alpha*-dec-osf*, *sgi-irix* and sparc*-sunos4* - print a "please contact us" message for sparc*-sunos4* and *beos (theses parts of configure.in are perhaps not neccessary) 2001-07-18 20:16 robert * frontend/parse.c, libmp3lame/vbrquantize.c: vbr-mtrh related: encode sfb21, may bloat on heavy metal music 2001-07-18 20:14 robert * misc/abx.c: update by Frank 2001-07-16 19:35 robert * Dll/BladeMP3EncDLL.c, frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/lame_global_flags.h, libmp3lame/psymodel.c, libmp3lame/set_get.c, libmp3lame/util.h, libmp3lame/version.h: adding a new switch --allshort this one forces LAME to use short blocks on every granule useful for testing the short block masking abilities 2001-07-13 22:37 robert * libmp3lame/: psymodel.c, quantize.c, util.h, version.h: first try to fix the short block threshold calculation BUG this patch tries to resolve the shortcommings for the short block threshold calculation using VBR. Applying this patch for CBR/ABR would break the testcases. It should not affect the vanilla --nspsy... too, maybe later. 2001-07-07 19:54 bouvigne * libmp3lame/reservoir.c: maxmp3buf was beeing ignored 2001-07-05 21:25 robert * libmp3lame/quantize.c: fixing the assertion failures mentioned by Albert Faber 2001-07-05 15:56 markt * configure: regenerated configure 2001-07-05 15:55 markt * configure.in: updated gcc 2.96 check to use -O instead of -O1 2001-07-05 15:55 markt * configure: [no log message] 2001-07-05 15:54 markt * configure.in: gcc 2.96 check 2001-07-05 15:53 markt * libmp3lame/version.h: updated repository to 3.90alpha 2001-07-05 15:35 markt * doc/html/history.html: updateded history file from web page cvs repository 2001-07-05 15:32 markt * ChangeLog: update 2001-07-05 15:27 markt * libmp3lame/version.h: updated to 3.89beta 2001-07-02 21:45 robert * libmp3lame/quantize.c: bug fix for --nspsytune minimum bits allocated was too low, resulting in assertion failures 2001-07-02 21:08 robert * libmp3lame/lame.c: changing --vbr-new noise measuring back to its usual one 2001-07-01 20:36 markt * libmp3lame/psymodel.c: unbreak CBR testcases. 2001-07-01 20:04 markt * frontend/: get_audio.c, main.h, parse.c: patch from Nick Duffek for signed/unsigned and bitwidth options. 2001-07-01 16:48 robert * libmp3lame/lame.c: defaulting --vbr-mtrh to -q2 = -h 2001-07-01 13:11 robert * libmp3lame/lame.c: allow --vbr-{old,new} to select between different ATH autoadjust types too 2001-07-01 11:50 robert * libmp3lame/: lame.c, set_get.c: nspsytune related: now it is possible to turn the scalefac_feature off again giving --nspsytune -Z the change was necessary, because of the hard coded -Z 2001-07-01 05:24 jd- * libmp3lame/: encoder.c, lame.c, psymodel.c, util.h: Restructured ATH auto-leveling code to fix bug for "--adapt-thres-type 1"; relaxed tuning for "--adapt-thres-type 2" for compromise with "--athtype 3" (the previous bit rate is still available with "--adapt-thres-level -1.25") 2001-06-30 16:45 robert * Makefile.MSVC: fix for compiling mp3x on windows using Makefile.MSVC 2001-06-30 16:40 robert * frontend/parse.c: fix for compiling mp3x on windows using Makefile.MSVC 2001-06-30 00:26 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: 2 new modes for --vbr-mtrh available by different -q n selections: -q0 truely max noise -q1 almost max noise 2001-06-29 20:58 robert * libmp3lame/set_get.c: revive --nssafejoint --ns-{alto,treble,bass} lame_set_exp_nspsytune is *not an on/off switch* 2001-06-29 15:23 markt * configure, configure.in, libmp3lame/lame.c: patch for configure.in, replaced a bash specific loop, from Oswald Buddenhagen 2001-06-27 15:47 aleidinger * configure: regen 2001-06-27 15:46 aleidinger * configure.in: some hardware specific optimization options for gcc 2001-06-27 14:53 aleidinger * libmp3lame/i386/Makefile.in: regen 2001-06-27 14:53 aleidinger * libmp3lame/i386/Makefile.am: this is nasty, I want native nasm support in libtool, at least it works for me (sort of) 2001-06-27 14:11 aleidinger * libmp3lame/: Makefile.in, i386/Makefile.in: regen 2001-06-27 14:11 aleidinger * libmp3lame/: Makefile.am, i386/Makefile.am: go back to let libtool compile liblameasmroutines, the static case was broken, now the libtool v1.4 case may be broken 2001-06-26 11:38 aleidinger * configure: regen 2001-06-26 11:36 aleidinger * configure.in: make the use of nasm a configure option 2001-06-25 02:14 cisc * frontend/main.c: Include portableio.h for the WriteBytes() and WriteBytesSwapped() functions. 2001-06-24 21:01 robert * lame.bat: some comments updated 2001-06-24 16:47 robert * doc/html/contributors.html, libmp3lame/version.h: adding two more contributors 2001-06-24 15:58 robert * Makefile.MSVC: FLOAT8=float for IC 2001-06-24 15:57 robert * Makefile.B32: let it work again 2001-06-24 02:04 robert * libmp3lame/: quantize.c, quantize.h, quantize_pvt.h, takehiro.c, vbrquantize.c: BUG fix in inc_subblock gain, was amplifying at the wrong place this fix may break the testcases some unused parameters removed 2001-06-23 18:26 robert * Dll/MP3EncDll.dsp: patch for DLL Project file by Dmitry 2001-06-23 17:56 robert * frontend/lametime.c, frontend/parse.c, mpglib/common.c, Makefile.MSVC: some fixes needed by the Borland Compiler BCC, first attempt to support BCC with Makefile.MSVC, DLL not supported yet, MP1 MP2 reencoding does not work with BCCcd lame (why?) 2001-06-23 12:19 robert * libmp3lame/quantize_pvt.c: fix letting Borland C++ compiler getting thru' again, Makefile.B32 is *not uptodate* 2001-06-23 12:15 robert * frontend/get_audio.c: BUG fix for mp1 and mp2 input, fixes problem introduced in Revision 1.63 2001-06-22 08:55 aleidinger * ChangeLog: update changelog 2001-06-22 08:49 aleidinger * Makefile.am: regen 2001-06-22 08:48 aleidinger * Makefile.in: we have a test subdir in cvs, force the test target to be out of date at every invocation of make 2001-06-21 20:40 bouvigne * libmp3lame/reservoir.c: change of the max frame size 2001-06-19 04:46 markt * misc/: Lame.vbs, lameGUI.html: updates from "Ralf Kempkens" 2001-06-18 18:51 markt * TODO, frontend/get_audio.c, frontend/get_audio.h, frontend/main.c, frontend/main.h, frontend/parse.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/set_get.c, mpglib/interface.c, mpglib/mpglib.h: added two new functions to return number of PCM samples buffererd but not encoded, and the number of bytes of mp3 data buffered but not output. also added some comments to mpglib/interface.c to make it easier to tell it to look for Xing headers in the middle of a bitstream. 2001-06-16 00:40 robert * Makefile.MSVC, Makefile.unix: CPU feature detection for fft routines 2001-06-16 00:39 robert * libmp3lame/: fft.c, util.h: CPU feature autodetection for fft routines 2001-06-15 22:23 markt * TODO, frontend/main.c, include/lame.h, libmp3lame/lame.c: Robert's fix to init histgram data with --nogap. lame_reinit_bitstream() renamed lame_init_bitstream(), and it is called by lame_init_params(). It can also be called after a call to lame_encode_flush_nogap(). 2001-06-15 21:25 markt * TODO, frontend/main.c, include/lame.h, libmp3lame/lame.c: some fixes for VBR tags with --nogap option. 2001-06-14 23:09 robert * frontend/parse.c: fixed stdin 2001-06-14 00:58 robert * libmp3lame/version.h: bumped version to alpha 7 2001-06-14 00:43 robert * libmp3lame/: lame.c, psymodel.c: added JD's loudness approximation to Naoki's duplicated psy routine as I defaulted JD's adapt stuff I was under the impression that he added his code to both ones, so... 2001-06-14 00:19 markt * frontend/main.c: fix for nogap truncation call. When processing the last of the .wav files, we need to call lame_encode_flush() instead of lame_encode_flush_nogap(). 2001-06-13 22:46 robert * frontend/parse.c: LFN support for Win32: realized that it would be a good idea to release the search file handle after searching the filename 2001-06-13 08:44 aleidinger * Makefile.DJGPP: nasm fix 2001-06-12 21:58 robert * frontend/parse.c: long file name support for Win32 systems works under Win95 using Intel compiler 4.5 / MSVC 4.2 not tested under NT, and not much tested anyway ;-) 2001-06-12 21:03 robert * Makefile.unix: seems to be forgotten by the last committ 2001-06-12 20:32 markt * libmp3lame/bitstream.c: old crc code removed from bitstream.c. I had added this in when looking for the xing/crc bug 2001-06-12 12:47 aleidinger * frontend/lametime.c: fix cygwin build, sort some includes 2001-06-12 12:45 aleidinger * libmp3lame/: Makefile.in, i386/Makefile.in: regen 2001-06-12 12:45 aleidinger * libmp3lame/: Makefile.am, i386/Makefile.am: do not use libtool for the asm lib, libtool did not know about nasm 2001-06-12 12:42 aleidinger * configure, frontend/Makefile.in: regen 2001-06-12 12:42 aleidinger * configure.in: - enable shared lib - disable asm routines - fix build of asm routines in the win32 case 2001-06-12 12:41 aleidinger * frontend/Makefile.am: statically link libmp3lame to the frondends 2001-06-12 05:27 markt * libmp3lame/lame.c: removed CRC error message 2001-06-12 05:27 markt * libmp3lame/VbrTag.c: fix for Xing/CRC problem. Xing toc data must start directly after sideinfo data, assuming no CRC. If CRC is set, then the Xing toc data must *still* start in the same location (since original Xing demo code does not check for CRC and modify the toc offset). 2001-06-12 04:51 markt * libmp3lame/: bitstream.c, lame.c: put old CRC routine back in (but disabled) 2001-06-12 03:35 markt * Dll/BladeMP3EncDLL.c: added some comments about the DLL's non-standard use of libmp3lame.a 2001-06-12 03:31 markt * libmp3lame/Makefile.am: Robert created lame_global_flags.h, so I'm adding it to Makefile.am, in the "noinst" section. 2001-06-12 00:48 robert * Dll/BladeMP3EncDLL.c, libmp3lame/lame_global_flags.h, libmp3lame/quantize.c, libmp3lame/util.h: - fixed Makefile.unix to let mp3rtp compile again (does it still work?) - had to move lame_global_flags structure into a file of its own, because the Dll compiled but did not link anymore. Now it works again, tested on Win95 using Makefile.MSVC 2001-06-11 23:42 markt * Dll/BladeMP3EncDLL.c, include/lame.h, libmp3lame/set_get.c, libmp3lame/util.h: committed Robert's patch. lame_global_flags is gone :-) 2001-06-11 22:07 robert * frontend/main.c: some more new API things 2001-06-11 18:49 markt * frontend/: gtkanal.c, parse.c: converted rest of frontend code over to "new api" 2001-06-11 16:35 markt * frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, libmp3lame/mpglib_interface.c, mpglib/interface.c: Tracked down a bug in lame_decoder. It was not correctly flushing the internal mpglib buffers when it hit EOF. Problem was most severe with low bitrate example. It the frame size was 32 bytes, only the first 1/3 of the file would be decoded and the reamining 2/3 of the entire file would be buffered inside mpglib. 2001-06-10 20:35 robert * Dll/BladeMP3EncDLL.c, include/lame.h: making the old VBR default in preparation for the next release 2001-06-10 19:19 markt * API, USAGE, misc/Lame.vbs, misc/lameGUI.html: added new version of Lame.vbs from "Ralf Kempkens" including a GUI/HTML interface. 2001-06-08 21:40 markt * frontend/: get_audio.c, gtkanal.c, main.c, main.h: updated some comments related to restructering main.c for the --nogap option 2001-06-08 21:29 markt * API, TODO, frontend/get_audio.c, frontend/gtkanal.c, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/parse.h, frontend/timestatus.c, include/lame.h, libmp3lame/lame.c, libmp3lame/set_get.c: preliminary --nogap option added. --nogap file1 file2 file3 and it produces file1.mp3 file2.mp3 file3.mp3 problems: no id3tags, no vbr tags. 2001-06-08 18:59 markt * test/lametest.py: fix so lametest.py doesn't crash if lame does not create an output file. 2001-06-08 00:00 markt * frontend/main.c, libmp3lame/bitstream.c: fixed bug with lame_encode_flush_nogap routine 2001-06-07 22:12 robert * DEFINES, TODO: [no log message] 2001-06-07 22:06 robert * frontend/parse.c, libmp3lame/encoder.c: --ath-adjust 1 (Gaby's original code) was disabled, any reasons for that JD? 2001-06-07 19:14 markt * HACKING, frontend/get_audio.c, frontend/gtkanal.c, frontend/parse.c, frontend/timestatus.c, libmp3lame/lame.c: started updating frontend code to use the new API. 2001-06-07 14:02 aleidinger * libmp3lame/fft.c: unbreak (at least it compiles), more work needed 2001-06-07 10:11 jd- * libmp3lame/encoder.c: Allow ATH auto-adjust code to begin at the minimum value on the leading frame 2001-06-07 08:40 jd- * libmp3lame/encoder.c: Restored some ATH auto-adjust indentation and comments (altered since 3.88 in a code clean up) 2001-06-07 06:06 pgubanov * libmp3lame/fft.c: Choose asm-optimized FHT version if ARCH_X86 defined in fft.c 2001-06-05 22:13 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Added R3Mix quality setting 2001-06-05 19:19 aleidinger * doc/html/history.html: sync my entry with the one at the webpages 2001-06-05 00:39 markt * INSTALL, TODO: added note about mpglib i-stereo bug in TODO list. fixed typo in INSTALL file 2001-06-04 23:57 markt * TODO, libmp3lame/reservoir.c: documented some variables in reservoir.c. Current status is: maxframesize = no restrictions if strict_ISO is defined, we use Gaby's less restrictive interpretation of the standard. see TODO version 1.30 for a user who has a hardware player which cannot handle 320kbps frames if the bit reservoir is used. I guess the final verdict is tough luck :-) 2001-06-04 23:29 markt * API, HACKING, frontend/parse.c, libmp3lame/lame.c: print error message and fail if user selects error_protection (since this is currently broken) added some comments to HACKING on how to add a new option. updated API to reflect that all lame_set/get functions are now working. 2001-06-04 23:10 markt * include/lame.h, libmp3lame/lame.c: updated comments about lame_encode_flush_nogap() 2001-06-04 23:08 markt * include/lame.h, libmp3lame/bitstream.c, libmp3lame/lame.c: added lame_encode_flush_nogap(). This routine will flush all internal mp3 buffers, and pad the last frame with ancillary data so it is a complete mp3 frame. It will then set ResvSize to 0, so we can continue encoding. after a call to lame_encode_flush_nogap(), if we close the mp3 file and open a new one for the future data, then the two mp3 files should play back 'gapless' if they are first concatenated together. 2001-06-04 19:59 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/version.h: tweaks to VBR 2001-06-04 10:02 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Extended interface with VBR method selection 2001-06-04 10:01 afaber * mpglib/layer3.c: Removed exit call(s) in error conditions, since these errors seems to be good recoverable 2001-06-04 01:54 robert * libmp3lame/: lame.c, psymodel.c, quantize.c, util.h: small tweaks to the VBR codes 2001-06-02 20:22 robert * libmp3lame/: lame.c, quantize.c, util.h, version.h: started different bit-pressure strategies (VBR) 2001-06-02 15:26 aleidinger * configure: regen 2001-06-02 15:25 aleidinger * configure.in: force cygwin users to use "CC=gcc ./configure" 2001-06-01 19:40 glessard * frontend/get_audio.c: Added support for non-compressed AIFF-C files in parse_aiff_header(). 2001-05-30 01:38 markt * configure, configure.in: removed -pedantic gcc option. From the gcc man page: "There is no reason to use this option; it exists only to satisfy pedants". And there is a reason not to use it: It causes people to send me email asking if all the warning messages about c++ comments are ok. 2001-05-29 22:14 robert * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/set_get.c: quick fix for a typo that turned off auto adjust code by accident, sorry 2001-05-27 18:58 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/version.h: made JD's ATH adapt stuff default for --vbr-mtrh some typings changed bitpressure strategy for VBR a bit 2001-05-26 21:31 jd- * libmp3lame/util.c: use more digestible code in ATHformula_jd for a pre-release compiler bundled with a popular Linux distribution 2001-05-26 16:17 robert * libmp3lame/lame.c: let the user select -qx for --vbr-mtrh, just to avoid useless e-mails 2001-05-24 22:25 robert * libmp3lame/: lame.c, quantize_pvt.c: just 5 minutes to add some more on the --verbose printing side 2001-05-21 18:55 bouvigne * doc/html/history.html: history 2001-05-21 18:19 bouvigne * libmp3lame/lame.c: update of the default lowpass value. Will probably break some testcases 2001-05-20 20:45 robert * libmp3lame/: encoder.c, lame.c, util.h: some more --verbose output 2001-05-19 16:16 robert * libmp3lame/psymodel.c: typo fixed 2001-05-19 16:13 robert * frontend/get_audio.c, frontend/main.c, frontend/parse.c, frontend/timestatus.c, include/lame.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/util.h: starting a very verbose print function about all internal settings, aiming more transparency for the experienced users 2001-05-15 01:24 robert * libmp3lame/: psymodel.c, quantize_pvt.c, vbrquantize.c: some tunings still problems with fatboy.wav and ns.wav 2001-05-13 20:59 bouvigne * libmp3lame/util.c: comments in the ath functions 2001-05-13 11:33 robert * libmp3lame/: lame.c, psymodel.c, util.c, util.h: fixing tonality problem for --vbr-mtrh 2001-05-11 23:33 robert * libmp3lame/quantize_pvt.c: trying to point out the real difference in l3xmin calculation with nspsytune and without it 2001-05-11 22:14 robert * libmp3lame/lame.c: nspsytune & newer vbr 2001-05-11 01:30 robert * frontend/get_audio.c, frontend/main.h, include/lame.h, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/version.h, test/VBR.op: compile fixes for Intel Compiler, dropped sfb21 early stopping for vbr-old (found differences) 2001-05-10 19:01 aleidinger * include/lame.h, libmp3lame/set_get.c: - Make the last few set/get functions functional. (TODO: use them in the frontend). - Converted padding_type to an enum. - Correct some typos. - Adjust some lines to conform to the style of the majority of the file. TODO: - Search for XXX and do appropriate actions. - Search for typos (because of alot of cut&paste programming). 2001-05-08 15:00 bouvigne * frontend/parse.c, libmp3lame/util.c: update of --r3mix 2001-05-06 15:11 robert * libmp3lame/: lame.c, quantize.c, vbrquantize.c: some desperate values for the fast mtrh VBR mode 2001-05-04 01:07 jd- * libmp3lame/: tools.h, util.c: Added "--athtype 5" to better represent higher frequencies (14 - 19 kHz). Included supporting functions for quadratic interpolation. 2001-05-03 20:13 robert * libmp3lame/: lame.c, quantize.c, util.c, util.h, vbrquantize.c: some VBR-codeclean-up 2001-05-02 21:02 robert * misc/lame4dos.bat: patch by Alexander Stumpf: - now works both with drag & drop (SFN) and from the 4DOS-Commandline (LFN) - Using wildcards when prozessing from mp3 to mp3 caused a loop - fixed - removed the mp3-extention test since LAME recognizes the input file fomat correctly for several versions now (i.e. no --mp3input neccessary anymore) 2001-05-01 22:55 robert * libmp3lame/version.h: bumped version number 2001-05-01 22:18 robert * libmp3lame/: quantize.c, vbrquantize.c: new -q2 mode for --vbr-mtrh 2001-05-01 20:37 bouvigne * libmp3lame/reservoir.c: change of max frame size 2001-04-28 15:37 robert * libmp3lame/: encoder.c, quantize_pvt.c, util.c, vbrquantize.c: --vbr-mtrh uses now -Y by default, some tweaks 2001-04-27 23:19 robert * libmp3lame/: psymodel.c, quantize_pvt.c, util.c, util.h: --experimentalY selects a different ATH adjustment - keeps original noise floor - affects high freqs more than low ones 2001-04-26 23:06 cisc * config.guess, config.sub: Added MorphOS recognition to configure script. 2001-04-26 04:38 markt * README.B32, TODO: removed mmx notes from README.B32 2001-04-25 16:21 aleidinger * configure, libmp3lame/i386/Makefile.in: regen 2001-04-25 16:20 aleidinger * configure.in: bugfix for gcc version detection 2001-04-25 16:19 aleidinger * libmp3lame/i386/Makefile.am: bugfix for non x86 architectures with installed nasm, tested by Karl Pauls on Darwin 2001-04-25 06:59 markt * TODO, frontend/get_audio.c, frontend/main.h, frontend/parse.c, include/lame.h, libmp3lame/set_get.c: removed 'disable_wave_header' variable from encoding library. It is in the frontend code only. 2001-04-24 01:38 markt * TODO, frontend/get_audio.c: added something to the TODO list. changed: "buffer[1]+i" code to "&buffer[1][i]" in get_audio.c. buffer[1]+i is clever, but it confused the maintainer of EAC enough to cause him to submit it as a bug report. 2001-04-23 19:47 bouvigne * libmp3lame/: lame.c, util.c: [no log message] 2001-04-22 22:57 bouvigne * libmp3lame/util.c: update of the ath functions 2001-04-22 01:34 jd- * frontend/get_audio.c: Fixed trailing data bug introduced with the 24 bit input code 2001-04-21 22:23 jd- * frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, frontend/main.c, frontend/mp3rtp.c, include/lame.h, libmp3lame/lame.c: Add 24-bit PCM waveform input capability (with or without libsndfile), and glue code to preserve the functionality of routines that only handle up to 16-bit data. The changes support both little and big endian architectures. 2001-04-17 20:04 afaber * libmp3lame/libmp3lame.dsp, Dll/BladeMP3EncDLL.c, mpglib/mpglib.dsp, frontend/lame.dsp: Added MMX compile option 2001-04-17 19:22 bouvigne * libmp3lame/util.c: auto adjusting ath shape for vbr on ath type 4 2001-04-16 21:26 bouvigne * libmp3lame/: encoder.c, lame.c, psymodel.c: wrapped a few things inside of ifdef HAVE_GTK 2001-04-16 11:50 takehiro * libmp3lame/: psymodel.c, util.h: spread function is now packed into linear array. it reduces memory assumption and improves cache efficienty. 2001-04-16 08:27 takehiro * include/lame.h, libmp3lame/VbrTag.c: now try to calculate the CRC of VBR header. 2001-04-16 07:58 takehiro * libmp3lame/: bitstream.c, bitstream.h: cleaned and improved CRC calculation method 2001-04-13 15:13 aleidinger * libmp3lame/set_get.c: add some comments about converting int->enum 2001-04-13 15:12 aleidinger * frontend/parse.c: use some of Marks set-functions, also without error checking (yet) 2001-04-12 17:40 bouvigne * libmp3lame/: encoder.c, lame.c: [no log message] 2001-04-08 07:52 takehiro * libmp3lame/: machine.h, quantize_pvt.c: portability enchancement(from sourceforge's LAME open discussion forum). quantize_pvt.c: changed 1e99 into FLOAT8_MAX machine.h: defined FLOAT8_MAX 2001-04-04 21:58 bouvigne * libmp3lame/lame.c: update of the lowpass values for vbr rh 2001-04-04 18:11 bouvigne * libmp3lame/psymodel.c: update of -d for joint stereo 2001-04-01 03:22 jd- * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/set_get.c, libmp3lame/util.h: added an --adapt-thres-level option to allow adding an offset (in dB) to the point below which adaptive ATH level adjustment occurs 2001-04-01 02:11 jd- * include/lame.h: added set/get functions to include/lame.h for option --adapt-thres-type 2001-03-31 23:44 jd- * frontend/parse.c, libmp3lame/set_get.c: added set/get functions to libmp3lame/set_get.c for option --adapt-thres-type, and used the set function in frontend 2001-03-30 18:43 markt * testcase.mp3, frontend/get_audio.c, test/lametest.py: updated testcase.mp3 removed some unused code from get_audio.c 2001-03-30 17:16 markt * test/lametest.py: delete output mp3 file before running lame. (before, if lame crashes and does not write any output, the script would use the old output mp3 file, and if it hadn't changed, all tests would pass.) 2001-03-29 18:31 cisc * libmp3lame/: version.c, version.h: Moved inclusion of lame.h to version.h for lame_version_t in prototype. 2001-03-27 12:26 jd- * libmp3lame/psymodel.c: added --adapt-thres-type 2 (auto-level adjustment of the ATH, with a frequency-based loudness approximation). 2001-03-27 12:04 jd- * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/util.h: added option, --adapt-thres-type 2 (auto-level adjustment of the ATH with a frequency-based loudness approximation). 2001-03-27 10:56 aleidinger * configure: regen (do not enable vorbis by default) 2001-03-27 10:56 aleidinger * configure.in: do not enable vorbis by default 2001-03-26 23:02 markt * libmp3lame/set_get.c: added code to more of the lame_set/lame_get functions- but without any error checking :-( Only 47 more to go! 2001-03-26 20:46 markt * TODO, libmp3lame/util.c: dont scale the input if scale=1.0. 2001-03-26 18:38 markt * TODO: updated TODO list with some filtering stuff 2001-03-26 17:42 markt * libmp3lame/encoder.c: another MPEG2 bug found by: "Jiri Hajek" This code: > int sum_pe_MS = pe_MS[0][0] + pe_MS[0][1] + pe_MS[1][0] + pe_MS[1][1]; > int sum_pe_LR = pe [0][0] + pe [0][1] + pe [1][0] + pe [1][1]; does not work for MPEG2. now fixed. 2001-03-26 16:05 aleidinger * configure: regen (version bump) 2001-03-26 16:04 aleidinger * configure.in: Welcome to 3.89 2001-03-26 00:38 markt * frontend/brhist.c: bug in brhist_disp_total() for --freeformat bmode, br_frames = 0 (why?) so sum / br_frames would segfault. if br_frames == 0 , routine now just returns without printing anything. 2001-03-26 00:12 markt * TODO: minor editing of TODO file 2001-03-25 23:18 markt * libmp3lame/version.h: updated version to 3.89 alpha 1 2001-03-25 23:16 markt * libmp3lame/version.h: updated version to 3.88beta 2001-03-25 23:14 markt * API, README, TODO, libmp3lame/lame.c, libmp3lame/libmp3lame.dsp: made ath type 2 the default. updated test cases added set_get.c to libmp3lame.dsp 2001-03-25 21:37 shibatch * libmp3lame/psymodel.c: Fixed nspsytune. 2001-03-25 18:43 afaber * Dll/BladeMP3EncDLL.def, Dll/MP3EncDll.dsp, libmp3lame/bitstream.h, libmp3lame/encoder.h, libmp3lame/psymodel.c, libmp3lame/tables.h: Removed the last remainings of KLEMM_43 in order to complet the Windows DLL compilation 2001-03-20 00:42 markt * libmp3lame/util.c: added a few more minor comments to resampling code 2001-03-20 00:28 markt * libmp3lame/util.c: removed some cruft from blackman() filtering routine 2001-03-19 21:26 markt * frontend/get_audio.c, libmp3lame/util.c, test/lametest.py: Tested fixed resampling code. It seemed to work. Added a few comments. Also added documentation for "-w" for the usage function in lametest.py 2001-03-18 14:31 aleidinger * libmp3lame/vorbis_interface.c: use the new MSGF API in Vorbis 2001-03-18 14:25 aleidinger * libmp3lame/vorbis_interface.c, frontend/get_audio.c: use the new ERRORF API in Vorbis encoding (+fixes for needed API change to lame_decode_ogg_{initfile,fromfile}()) 2001-03-15 19:40 markt * libmp3lame/util.c: Put in fix for resampling bug in fill_buffer_resample. Code assumed it would be fed at least BLACKSIZE samples. For each input buffer, the code would save the last BLACKSIZE samples for use for the next call to fill_buffer_resample. If the code recieves less than blacksize samples, it will now shift in just as many new samples as are available into the save buffer. Not tested :-( 2001-03-14 14:38 aleidinger * Dll/BladeMP3EncDLL.c, dshow/Encoder.cpp, dshow/Mpegac.cpp, dshow/PropPage_adv.cpp: regexp: MPG_MD_(.*) -> $1 2001-03-14 14:38 aleidinger * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.unix: add set_get.c to the build 2001-03-14 10:57 aleidinger * Makefile.in: regen 2001-03-14 10:56 aleidinger * Makefile.am: do not forget Makfile.am.global at "make dist" 2001-03-14 10:49 aleidinger * ChangeLog: update 2001-03-14 10:40 aleidinger * doc/html/Makefile.in, doc/man/Makefile.in, libmp3lame/i386/Makefile.in: regen with automake 1.4d instead of 1.4 2001-03-13 06:15 markt * libmp3lame/util.c: added assert() to resampling code 2001-03-12 20:58 markt * libmp3lame/psymodel.c: a few more comments added to psymodel.c 2001-03-12 20:40 markt * libmp3lame/: psymodel.c, tables.c: removed ISO TABLE reading code from psymodel.c, and ISO psy data from tables.c 2001-03-12 20:31 markt * libmp3lame/psymodel.c: removed shortlived MINTHMM experiment 2001-03-12 18:52 markt * USAGE, configure: updated USAGE. ran configuer with --enable-maintainer-mode which seems to have touched all this .in files, sorry about that... 2001-03-12 07:26 markt * API, libmp3lame/vbrquantize.c: a few updates to API 2001-03-12 04:38 markt * frontend/get_audio.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/set_get.c: fixed a few compiler warnings and the assert in lame_get_mode(). added NOT_SET value to MPEG_mode_e 2001-03-11 11:25 aleidinger * DEFINES: - remove outdated entries - add OLD_ATH_AUTO_ADJUST 2001-03-11 11:24 aleidinger * Makefile.in: - regen from Makefile.am (testupdate target) 2001-03-11 11:24 aleidinger * frontend/: depcomp, get_audio.c, gtkanal.c, main.c, mp3x.c, parse.c, timestatus.c: *.c: - use set/get functions *** lame_set_quality(): should it check for <0 and >9 itself? (parse.c) depcomp: - update (autotools) 2001-03-11 11:23 aleidinger * libmp3lame/: depcomp, encoder.c, lame.c, psymodel.c, util.c, util.h: libmp3lame/encoder.c: - MPEG_mode (JOINT_STEREO) change (related to set/get functions change) - J.D.s improvements to Gabriels ath auto adjust code (VBR) - move ath auto adjust code into seperate function libmp3lame/lame.c: - errorf/msgf/debugf changes - MPEG_mode (JOINT_STEREO/...) change (related to set/get functions change) - remove prototypes of set/get functions libmp3lame/psymodel.c: - MPEG_mode (JOINT_STEREO/...) change (related to set/get functions change) libmp3lame/util.[ch]: - new errorf/msgf/debugf implementation libmp3lame/depcomp: - update (autotools) 2001-03-11 11:22 aleidinger * include/lame.h: - set/get functions related cleanup - errorf/msgf/debugf 2001-03-11 11:21 aleidinger * libmp3lame/Makefile.in: regen 2001-03-11 11:21 aleidinger * libmp3lame/Makefile.am: - add set_get.c 2001-03-11 11:20 aleidinger * libmp3lame/set_get.c: - set and get functions for the gfp 2001-03-10 19:15 markt * libmp3lame/encoder.c: a little more tuning of tot_energy for ATH adjust 2001-03-10 19:06 markt * libmp3lame/encoder.c: modified ATH adjustment code to use tot_ener returned by psy model and not the maximum of the PCM sample values. We need to replace this with JD's formula. We need to decide if this is really worth while. My preference is to take the most conservative ATH possible, but this seems to produce too high bitrates for VBR modes. (this may no longer be true not that masings are computed in all scalefactor bands) 2001-03-10 18:33 markt * frontend/get_audio.c: added 127 also, on recommendation of JD, to 8bit -> 16bit conversion routine 2001-03-10 18:29 markt * frontend/get_audio.c: fix from "J.D." for 8 bit input support. 2001-03-09 17:56 markt * test/lametest.py: 'os.pathsep' changed to 'os.sep' For example, on unix: os.pathsep = ":" - the character that seperaters search paths in the PATH environment variable os.sep = "/" - the charcter that seperates directories 2001-03-07 12:32 aleidinger * test/lametest.py: - use OS independent path seperator 2001-03-07 12:31 aleidinger * DEFINES: - NOTABELS is now the default 2001-03-05 20:29 markt * libmp3lame/: lame.c, psymodel.c, quantize_pvt.c: code (disabled) to use minimum value when going from partition bands to scalefactor bands (instead of average value) 2001-03-05 18:21 markt * testcase.mp3, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c: Noise calculation: had to switch calculation of tot_noise and over_noise back to being done in db units. Multiply (to save the 22 log10() function calls) was overflowing. updated testcases to reflect changes 2001-03-05 01:44 markt * testcase.mp3: updated testcase.mp3 for NOTABLES code 2001-03-05 01:26 markt * libmp3lame/psymodel.c: NOTABLES enabled by default. Psycho acoustics computed in *all* scalefactor bands. cvs tag before this change: before_notables cvs tag after this change: notables 2001-03-05 01:25 markt * libmp3lame/psymodel.c: The last commit before NOTABLES becomes the default. tagged with "before.notables" 2001-03-04 20:03 markt * libmp3lame/: encoder.c, psymodel.c, psymodel.h, util.h: More prep work for enabling NOTABLES. Will now compute masking for all scalefactor bands 2001-03-04 15:30 markt * testcase.mp3, libmp3lame/psymodel.c, libmp3lame/util.c: Finished proper normalization of spreading function. updated testcases 2001-03-04 06:56 markt * libmp3lame/psymodel.c: more tweaking of s3 normalization 2001-03-04 06:48 markt * libmp3lame/psymodel.c: spreading function moved into seperate routine, s3_func(). s3 normalized so that: +inf / | s3 [ bark ] d(bark) = 1 / -inf which resulted in dividing the result by 0.66. This is the first step in fixing the long outstanding bug mentioned by Takehiro: s3[i][j] is normalized improperly for values of i near the partition band boundaries. For these values, the computed 'norm' is much too small since a lot of the data is missing, resulting in artificially increasing the spreading function (and thus the masking) --nspsytune: s3_l function is used with a normalization of .5 (instead of computing the norm). So I changed this to a .5*.66 to compensate for the above change. Next step: 1. s3[i][j] will be multiplied by the width (in barks) of the j'th partition band (about .35). Once this is done, we will not need to compute and divide by 'norm' later. 2. Make NOTABLES the default 3. compute psymodel all the way up to 22khz. 2001-03-04 05:51 markt * API, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: added prototypes to lame.c (but functions not yet written) 2001-03-04 05:13 markt * include/lame.h: finished last of the prototypes 2001-03-04 05:02 markt * frontend/get_audio.c: changed to: gfp->num_samples = data_length / (channels * ((bits_per_sample+7) / 8)); thanks J.D.! 2001-03-04 00:20 markt * include/lame.h, libmp3lame/lame.c: added: lame_encode_buffer_sample_t, which is called by the following functions in the API: lame_encode_buffer (original, short int interface) lame_encode_buffer_float lame_encode_buffer_long 2001-03-02 22:39 markt * frontend/get_audio.c, test/lametest.py: get_audio.c: fixed num_samples computation for case when bits_per_sample < 8. (althouth this case is already trapped for earlier) lametest.py: slight change to reference mp3 filename generation so lametest.py can be run from another directory. 2001-03-02 18:28 markt * Makefile.am, testcase.mp3, doc/html/Makefile.in, doc/man/Makefile.in, frontend/get_audio.c, libmp3lame/i386/Makefile.in: error message about non-PCM wave files from "J.D." Added "make testupdate" to Makefile.am, which updates the test file in the CVS repository 2001-02-27 11:54 robert * include/lame.h, libmp3lame/lame.c: lame.h typo lame.c fix for possibility of calling lame_init_parms twice 2001-02-27 11:39 aleidinger * DEFINES: remove KLEMM_42 2001-02-27 11:38 aleidinger * configure, Makefile.in, frontend/Makefile.in, misc/Makefile.in: regen 2001-02-27 11:37 aleidinger * frontend/Makefile.am, misc/Makefile.am: remove EXTRA_PROGRAMS on make clean 2001-02-27 11:36 aleidinger * Makefile.am: remove testcase.new.mp3 on error 2001-02-27 11:36 aleidinger * configure.in: display version of gcc 2001-02-27 11:35 aleidinger * include/lame.h: fix typo in comment 2001-02-27 11:33 aleidinger * libmp3lame/util.c: include machine/floatingpoint.h on FreeBSD 2001-02-27 09:59 robert * libmp3lame/: VbrTag.c, bitstream.c, lame.c, quantize_pvt.h, takehiro.c, util.c, util.h: VbrTag.c fixed gfp/gfc typo lame.c made data flow analysis happier: there was a possible path to use channels before definition. Even though it would be an error following this path, but the compiler doesn't know it util.hc message functions are not intended to change gfc?!? takehiro.c fixed a warning bitstream.c fixed a warning 2001-02-27 06:14 markt * frontend/gtkanal.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: Implmented Frank's excellent idea about error messages: gfc->errorf, gfc->msgf and gfc->debugf are all FILE *. default is stderr. If you want to disable all internal library messages, set these to NULL with lame_set_errorf(), lame_set_msgf() etc... For a GUI, you can set these to regular files, and then read the files and display the messages in an pop up window. Maybe the default should be NULL? 2001-02-27 05:17 markt * include/lame.h: plugging away at a few more prototypes 2001-02-26 22:45 robert * frontend/parse.c, libmp3lame/util.c: little change to Roel's --r3mix setting, on request by Roel 2001-02-26 19:08 markt * libmp3lame/VbrTag.c: non RH_SEEKTABLE code removed from VbrTag.c 2001-02-26 18:57 markt * frontend/lametime.c: removed to //include lines 2001-02-26 18:52 markt * frontend/: get_audio.c, lametime.c: incomprehensible gobbledygook replaced by call to standard 'stat' function for file size. 2001-02-26 08:06 markt * include/lame.h: more prototypes added to lame.h 2001-02-26 07:38 markt * USAGE, frontend/parse.c, libmp3lame/lame.c: useTemporal turned on by default --notemp option added. 2001-02-26 07:26 markt * include/lame.h: added more of the lame_get/lame_set prototypes to lame.h also added this: // I give up. Klemm has worn me down on this one... typedef lame_global_flags lame_t; 2001-02-26 06:34 markt * misc/Lame.vbs: lame.vbs changes submitted by "Paul Reedy" 2001-02-25 22:47 markt * libmp3lame/vorbis_interface.c: removed a klemm_42 from vorbis_interface.c 2001-02-25 22:47 markt * INSTALL, libmp3lame/lame.c, libmp3lame/vorbis_interface.c: klemm_42 enabled by default. This code uses a different formula to choose the lowpass filter. It takes into account stereo vs. jstereo (jstereo gets 25% more bandwidth). This has the effect of stereo 128kbps using a 14khz lowpass filter, which some people may not like. 2001-02-25 22:02 markt * libmp3lame/lame.c, test/CBRABR.op: made allow_diff_short the default if mode=stereo and allow_diff_short has not been set to 0 or 1 by the calling program. addes these notes to lame_init_params() : * * We first have some complex code to determine bitrate, * output samplerate and mode. It is complicated by the fact * that we allow the user to set some or all of these parameters, * and need to determine best possible values for the rest of them: * * set some CPU related flags * check if we are mono->mono, stereo->mono or stereo->stereo * compute bitrate and output samplerate: * user may have set compression ratio * user may have set a bitrate * user may have set a output samplerate * set some options which depend on output samplerate * compute the actual compression ratio * set mode based on compression ratio * * The remaining code is much simpler - it just sets options * based on the mode & compression ratio: * * set allow_diff_short based on mode * select lowpass filter based on compression ratio & mode * set the bitrate index, and min/max bitrates for VBR modes * disable VBR tag if it is not appropriate * initialize the bitstream * initialize scalefac_band data * set sideinfo_len (based on channels, CRC, out_samplerate) * write an id3v2 tag into the bitstream * write VBR tag into the bitstream * set mpeg1/2 flag * estimate the number of frames (based on a lot of data) * * now we set more flags: * nspsytune: * see code * VBR modes * see code * CBR/ABR * see code 2001-02-25 21:28 markt * frontend/parse.c: removed VBR warning 2001-02-25 20:24 markt * libmp3lame/psymodel.c: edited a few comments in psymodel.c 2001-02-25 20:17 markt * libmp3lame/encoder.c, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/util.h, test/nores.op: Started some re-originization of psymodel.c created: psymodel_init() function, called by both psymodel and psymodel_ns. I was carefull to make sure no binary changes were introduced with --nspsytune. Modified both psymodel and psymodel_ns to return the energy in each channel. I'm going to request that the ATH level adjust be based on the energy comptuted by the psymodel, rather than computing a magnitude in encoder.c 2001-02-25 17:37 markt * Dll/BladeMP3EncDLL.c, frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: removed mode_fixed variable. If calling program selects a mode (mono, stereo, jstereo) then that mode is used, otherwise lame picks best mode to use. 2001-02-25 01:58 markt * include/lame.h: started adding more prototypes into lame.h: int lame_set_variable_name(lame_global_flags *, int) int lame_get_variable_name(lame_global_flags *) _get will return the value (instead of an error code) as suggested. _set will return an error code. But right now, the way lame works there is no error checking until lame_init_params() is called. This is because, for example, bitrate=135 is not an error if free_format=1, but it is an error for CBR. So many errors cannot be detected until all options are set. 2001-02-24 19:35 markt * include/lame.h, libmp3lame/util.h: commented out a uint_64_t field in util.h to get lame to compile. Do we really need these types of variables? removed some stuff from lame.h. Note that many decisions have already been made about the library interface, so if you are planning on changing this, you need to check with me (mark taylor) first. In particular, there is going to be no file I/O, and all data is in machine order. (no endian stuff in the library). 2001-02-24 13:55 robert * Makefile.unix, configMS.h: get Makefile.unix working again (tested for Linux, not for OS/2 etc.) 2001-02-21 21:17 robert * libmp3lame/lame.c: --vbr-mtrh related 2001-02-21 17:07 robert * libmp3lame/vbrquantize.c: take sfb21 into consideration for median search 2001-02-21 17:06 robert * libmp3lame/util.c: index transformation in select_kth_int() 2001-02-21 14:59 aleidinger * test/lametest.py: do not print the passed/failed statistic in the makeref case 2001-02-21 13:49 robert * frontend/parse.c, libmp3lame/lame.c: default quality handling fix 2001-02-21 12:39 aleidinger * Dll/BladeMP3EncDLL.c: lame.h has to be included before version.h 2001-02-20 18:34 aleidinger * Makefile.in, config.h.in, configure, configure.in, frontend/brhist.c: - Patch (#103821) from guy_hutchison: Fixes compilation problem on systems with ncurses dir - add ChangeLog to Makefile.in 2001-02-20 18:23 aleidinger * libmp3lame/: encoder.h, version.h: [no log message] 2001-02-20 18:20 aleidinger * doc/html/: Makefile.am, Makefile.in: - add basic.html 2001-02-20 18:20 aleidinger * configMS.h: - add LAME_LIBRARY_BUILD 2001-02-20 18:20 aleidinger * libmp3lame/util.h: - more documentation, seems to be partially truncated (Frank) - CPU_features is now a struct 2001-02-20 18:19 aleidinger * libmp3lame/takehiro.c: - CPU_features is now a struct 2001-02-20 18:19 aleidinger * libmp3lame/lame.c: - CPU_features is now a struct, no need to waste space for those bolean values (Frank) - introduce some KLEMM_44 protected code 2001-02-20 18:18 aleidinger * libmp3lame/util.c: - fixes + docu for ATHformula_Frank() (Frank) - don't compile old resampling in KLEMM_44 case 2001-02-20 18:17 aleidinger * libmp3lame/version.c: - doxygen parseable documentation - better lclint flags - enable get_lame_version_numerical() 2001-02-20 18:17 aleidinger * include/lame.h: - delete prototype of already removed get_lame_about() - add get_lame_version_numerical() and lame_version_t (now dshow didn't needs to include version.h to get the numerical version of lame (dshow not changed, I let pgubanov do this)) - introduce some KLEMM_44 protected code (Frank) - rework formatting and documentation to be more (IMO much more) readable (no lines longer than 80 chars, consistent formatting, looks alot cleaner) 2001-02-20 10:41 aleidinger * DEFINES: Remove KLEMM_04, there was a previous commit which handled it, see ChangeLog. 2001-02-20 01:56 markt * DEFINES, frontend/brhist.c, frontend/get_audio.c, frontend/timestatus.c: KLEMM 5,6,7 made the default & removed 2001-02-20 00:40 markt * libmp3lame/lame.c: simplified lame_encoder_buffer_interleaved: it now always calls lame_encoder_buffer() 2001-02-20 00:30 markt * libmp3lame/: encoder.c, lame.c, util.c, util.h: fix for --scale problem? made a new routine: fill_buffer() This is the generic routine used to copy data from the input buffer into lame's internal buffer, 'mfbuf[]'. It also calls the resample code if necessary, and the user selected rescaling code if necessary. 2001-02-20 00:26 markt * frontend/parse.c: added comment to vbr warning message 2001-02-20 00:24 markt * frontend/parse.c: re-added the warning about VBR modes. It seems to have been deleted at some point. This is because this website: http://www.kuro5hin.org/?op=displaystory;sid=2001/1/25/164540/759 is comparing Vorbis with lame -V4. While many people like the high bitrate VBR modes, lame -V4 is *often* of lower quality than CBR. 2001-02-19 18:29 aleidinger * test/VBR.op: - remove "--silent", lametest.py now handles this Aproved by: robert 2001-02-19 18:28 aleidinger * test/lametest.py: - allow relative paths in a more portable manner - should be more OS independand now - more file checks (readable/executable) - internally adds new option "--quiet" to the options This works on my system, it also should work on systems where the previous version worked. It's not as portable as it could be, search for XXX in the source. 2001-02-18 21:18 robert * frontend/main.c, frontend/parse.c, libmp3lame/lame.c, libmp3lame/version.h, test/VBR.op: new options --silent and --quiet to be really quiet new option --verbose (default) to turn -S/--silent off again --vbr-mtrh and --vbr-new use now ATH type 2 for VBR modes it is allowed to use different block types in stereo mode (not yet joint stereo) bumped version to 3.88 alpha 10 2001-02-18 12:11 aleidinger * dshow/: Makefile.am, Makefile.in: Add recently added files to the makefile. 2001-02-17 15:45 pgubanov * dshow/Encoder.cpp: gfp is sometimes zero in CEncoder::Encode() - why??? 2001-02-17 14:30 aleidinger * libmp3lame/: pcm.c, pcm.h: New code from Frank, some needed parts in different files aren't commited yet, they produce huge differences with lametest.py even if KLEMM_44 isn't defined. -> KLEMM_44 (new API + resampling) isn't usable yet 2001-02-17 14:27 aleidinger * test/lametest.py: - use "/usr/bin/env python" instead of "/usr/bin/python" in shebang line (portability) - use "-l" instead of "--lines" for wc (portability, has to run on every IEEE 1003.2 ("POSIX.2") compliant system) - bugfix, check for lame2 instead for lame1 in the lame2 part (Note: the entire test didn't work for me if I use e.g. ./lametest.py XXX.op ../../testcases/XXX ../../build.org/frontend/lame ...) 2001-02-17 14:17 pgubanov * dshow/: aboutprp.cpp, aboutprp.h: Elecard copyrigth added (executives need it for some reason) 2001-02-17 13:58 pgubanov * dshow/: Mpegac.cpp, Property.rc, UIDS.H, dshow.dsp, dshow.dsw, elogo.ico, resource.h: Some stability improvements + Elecard copyrigth added (executives need it for some reason) 2001-02-16 17:23 markt * doc/html/basic.html: added basic.html to cvs 2001-02-16 10:35 pgubanov * dshow/dshow.dsp: STDC_HEADERS defined in project settings 2001-02-16 10:33 pgubanov * libmp3lame/lame.c: mono handling in encode_buffer_interleaved caused access violation - fixed 2001-02-14 22:22 aleidinger * ChangeLog: Now we have a ChangeLog, generated from the output of "cvs log" 2001-02-14 22:21 aleidinger * ChangeLog.header: Header for the ChangeLog, not included at "make dist" 2001-02-14 22:20 aleidinger * TODO: remove Makefile.MSVC, robert seems to keep it up to date 2001-02-14 22:20 aleidinger * Makefile.B32: try to unbreak it, add configMS.h -> config.h (untested) 2001-02-14 22:20 aleidinger * DEFINES: add USE_FFT3DN 2001-02-14 22:19 aleidinger * INSTALL: * add some more info how to use some advanced features of our configure script * add some info for Cygwin users (use configure) * add some info about faster code with nasm 2001-02-14 20:50 robert * frontend/parse.c: added -V1 to Roel's --remix preset, I assume it was missing by accident 2001-02-14 16:38 aleidinger * Makefile.am.global, Makefile.in, aclocal.m4, configure, configure.in, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: use new automake 1.4d (bugfixes) 2001-02-14 14:43 robert * libmp3lame/: encoder.c, util.h: tuning of the auto ath adjustment for --vbr-mtrh mode 2001-02-14 14:24 robert * libmp3lame/util.c: patch by Roel: tweaking his ATH modification (--athtype 3) 2001-02-13 18:27 markt * frontend/parse.c: fixed typo in parse.c 2001-02-13 18:24 markt * libmp3lame/psymodel.c: added a lot of documentation on the psycho acoustics to the top of psymodel.c 2001-02-13 18:22 markt * mpglib/: common.c, common.h, interface.c: improved head_check() function: When resyncing data stream, only look for headers of the same layer of the previous frames. i.e. dont allow layer 2 and layer 3 frames in the same stream. 2001-02-13 18:21 markt * frontend/: get_audio.c, parse.c: added the --r3mix option fixed bug with --decoder-mp3delay option added error message for non-8 and 16 bit input 2001-02-13 16:58 robert * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/util.c, libmp3lame/util.h: first of all: this patch shows no difference in the CBR/ABR test - made athtype 3 default for VBR modes, 1 still default for CBR/ABR modes - made athadjust default for VBR modes, CBR/ABR modes don't need it - removed --athadjust switch, was only temporally solution - collected all spreaded ATH settings into ATH_t struct if someone needs a new ATH related variable, please add it here 2001-02-12 18:24 markt * doc/html/: contributors.html, history.html, index.html, node6.html, switchs.html: new html docs from Gabriel 2001-02-12 17:47 markt * test/lametest.py: print total pass/fail message at end 2001-02-09 16:47 robert * libmp3lame/quantize_pvt.c: patch by Gaby: allow ATH adjust for the ATH only modes too 2001-02-08 22:19 robert * test/VBR.op: update to the VBR python options file 2001-02-07 15:51 robert * libmp3lame/: encoder.c, vbrquantize.c: all patches --vbr-mtrh related encoder.c: - made a variant of Gaby's auto ATH adjust the default vbrquantize.c: - some small code moves - added some safety margin to the global gain 2001-02-06 21:43 robert * libmp3lame/: psymodel.c, vbrquantize.c: we should not try to hard to get high freqs thru' so I will let --vbr-mtrh as is. It seems to give reasonable file sizes again, even with Frank's ATH. 2001-02-05 10:18 robert * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/quantize_pvt.c: re-check-in of Gaby's ATH auto adjustment code. You need to specify --athadjust to get this SUBSTANTIALLY QUALITY IMPROVEMENT quote: "Also, we already have gfc->ath_lower (specified in db). No reason to add another variable which does the same thing, and does not even use the same units." That is not true, there is actually no gfc->ath_lower in dB. We have a gfp->ATHlower in dB. But this is of a totally different meaning. gfp->ATHlower will lower the ATH for the whole file by a fixed amount of x dB. gfc->ath_auto_adjust will lower the ATH on a frame by frame basis depending on the peak volume. 2001-02-05 04:58 markt * frontend/parse.c: Added warning about using VBR modes. This is because this website: http://www.kuro5hin.org/?op=displaystory;sid=2001/1/25/164540/759 is comparing Vorbis with lame -V4. While many people like the high bitrate VBR modes, lame -V4 is *often* of lower quality than CBR. 2001-02-05 02:36 shibatch * libmp3lame/psymodel.c: Reverted part of last tweaks of nspsytune. 2001-02-05 02:27 markt * HACKING: updated HACKING with directions on how to run the lametest.py python script 2001-02-05 02:24 markt * test/: CBRABR.op, VBR.op, lametest.py, nores.op: Adding a python script used for testing, along with some sample options files. 2001-02-05 02:23 markt * HACKING, libmp3lame/encoder.c, libmp3lame/quantize_pvt.c: reverted encoder.c and quantize_pvt.c back to 13:00 3 Feb 2001. These modifications broke my test cases. Any such changes need aproval first. Also, we already have gfc->ath_lower (specified in db). No reason to add another variable which does the same thing, and does not even use the same units. 2001-02-05 00:34 cisc * frontend/amiga_mpega.c: MPG_MD_LR_LR define was moved, set mode_ext to 0 instead (since we don't get that info anyway). 2001-02-04 23:56 robert * frontend/parse.c, libmp3lame/lame.c, libmp3lame/vbrquantize.c: parse.c: small change in default behaviour for --vbr-mtrh lame.c: it makes no sense for a sfb21 extra at sample frequencies below 44.1 kHz vbrquantize.c: oops, last commit was a merger from a wrong branch of mine 2001-02-04 23:28 shibatch * libmp3lame/quantize_pvt.c: Enabled auto-adjust ATH for nspsytune. 2001-02-04 23:14 shibatch * libmp3lame/psymodel.c: Tweaked nspsytune. 2001-02-03 23:20 robert * libmp3lame/: quantize_pvt.c, version.h: bumped version to alpha 9 some clean-up 2001-02-03 20:10 robert * libmp3lame/: encoder.c, quantize_pvt.c, util.c, util.h, vbrquantize.c: patch by Gabriel Bouvigne: auto adjust of ATH for low volume tracks a big improvement in quality! therefore on by default patch by Robert Hegemann: further improvement of --vbr-mtrh mode 2001-02-02 01:04 robert * libmp3lame/: quantize.c, quantize_pvt.c: --vbr-mtrh tweaks 2001-01-31 19:44 aleidinger * configure, configure.in: bugfix 2001-01-31 15:34 robert * libmp3lame/quantize.c: fix a typo I introduced by my last commit 2001-01-31 12:53 aleidinger * Makefile.am.global, Makefile.in, acconfig.h, acinclude.m4, aclocal.m4, config.h.in, configMS.h, configure, configure.in, depcomp, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: - config*/Makefile*/ac*: * tests for *int*_t * test for 80 bit floats (for speed optimizations) * add pcm.* to the makefile * removed resample.[ch] from the makefile * depend upon automake 1.4b * fix in check for ccc (submitted by nold via the sourceforge patch page at the lame project page, patch id #103507) * something I may have forgotten Note: Please don't commit any Makefile.in if you didn't have changed the corresponding Makefile.am. CVS didn't stores the time stamps of the files at commit time, it stores the time stamps of the commit time, so we have to commit the files in the correct order, but I'm to lazy to do so and I assume I'm not the only one. The same applies to config*. - depcomp: missing file, the dependancy tracking should work again 2001-01-30 20:53 robert * libmp3lame/quantize.c: fixed a design flaw in VBR_iteration_loop() I'm responsible for. affects quality! 2001-01-30 20:52 robert * libmp3lame/: lame.c, quantize_pvt.c, vbrquantize.c: tuning of --vbr-mtrh mode 2001-01-30 20:51 robert * frontend/parse.c, include/lame.h: patch by Gaby: changed --athlower to accept floats 2001-01-30 11:02 robert * libmp3lame/: psymodel.c, util.c: psymodel.c: fixing compile problem (was: M_LN10 undefined) util.c: Roel's modification to Gaby's ATH, new: --athtype 3 2001-01-29 14:46 robert * libmp3lame/vbrquantize.c: --vbr-mtrh and --vbr-new use now the faster and sloppier scalefactor-band noise calculation with quality settings -q 3...9 2001-01-28 12:51 takehiro * libmp3lame/: quantize.h, util.h: oops, compile problem fix 2001-01-28 12:39 takehiro * libmp3lame/: quantize.c, quantize.h, quantize_pvt.c, vbrquantize.c: magic number 4095 and 4096 is removed 2001-01-27 18:00 takehiro * libmp3lame/psymodel.c: make temporal masking effect strong. 2001-01-27 17:52 takehiro * libmp3lame/quantize_pvt.c: debug message is removed :) 2001-01-27 17:39 takehiro * frontend/parse.c, include/lame.h, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/util.h: experimental temporal masking support. "--temporal" option to use this. 2001-01-26 22:47 robert * frontend/parse.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/vbrquantize.c: tuning of --vbr-mtrh VBR mode 2001-01-25 20:57 robert * misc/abx.c: update by Frank: some further endings and audio formats 2001-01-24 23:59 robert * libmp3lame/quantize_pvt.c: found and fixed another BUG caused by the "bit optimization." patch 2001-01-24 23:02 robert * libmp3lame/: pcm.c, pcm.h: updates by Frank 2001-01-24 22:33 robert * Makefile.DJGPP, Makefile.unix: small config.h related tunings 2001-01-24 21:33 robert * libmp3lame/vbrquantize.c: quick-fix for code that was broken by Takehiro's last "bit optimization." in function calc_xmin(), quantize_pvt.c 2001-01-23 12:50 takehiro * libmp3lame/quantize_pvt.c: bit optimization. 2001-01-23 07:12 shibatch * libmp3lame/quantize.c: Bugfix of nspsytune. 2001-01-22 23:00 afaber * Dll/BladeMP3EncDLL.c: VBR was always enabled, even when the client did not ask for it 2001-01-22 19:54 aleidinger * libmp3lame/vorbis_interface.c: remove trailing garbage 2001-01-22 09:31 shibatch * libmp3lame/: psymodel.c, quantize.c: Tweaked nspsytune. 2001-01-22 04:35 markt * Makefile.in, configure, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, frontend/parse.c, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/psymodel.c, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: fixed bug preventing -m a mode from working. ran autoconf which changed all the Makefile.in's 2001-01-22 01:07 robert * libmp3lame/: pcm.c, pcm.h, vorbis_interface.c: patches by Frank: vorbis_interface: was/is broken since a long time pcm.[ch]: fixing some transfer errors (email) 2001-01-21 21:14 afaber * Dll/BladeMP3EncDLL.c: Fixed problems with writing the Xing MP3 header (gfc->internal_flags structure was already freed, while it was needed to write the Xing MP3 tag) 2001-01-21 19:13 robert * libmp3lame/: pcm.c, pcm.h: patches by Frank: scalar.nas - new SIMD assembler routines resample.[ch] - removed pcm.[ch] - new, containing resampling routines and more version.c - some clean up 2001-01-21 19:06 robert * libmp3lame/: i386/scalar.nas, resample.c, resample.h, version.c: patches by Frank: scalar.nas - new SIMD assembler routines resample.[ch] - removed pcm.[ch] - new, containing resampling routines and more version.c - some clean up 2001-01-21 19:03 robert * frontend/lametime.c: it's always a good idea to include its own header file 2001-01-20 09:51 robert * libmp3lame/util.c: patch by Gaby: I changed a file from the 19/01 cvs (I added an ath balanced between the original one and Frank's one on the option --athtype 2) 2001-01-19 09:08 shibatch * libmp3lame/: encoder.c, psymodel.c, quantize_pvt.c: Improved reservoir handling(nspsytune). 2001-01-18 22:18 robert * libmp3lame/quantize_pvt.c: allow "--athlower n" to modify the ATH for sfb21 2001-01-18 13:04 aleidinger * Makefile.DJGPP: add config.h to the clean target 2001-01-18 13:03 aleidinger * Makefile.DJGPP: bugfix (please report if it's broken, I can't test the config.h target) 2001-01-17 21:32 robert * Makefile.unix: additional fixes 2001-01-17 20:35 robert * libmp3lame/: VbrTag.c, util.c, util.h: RH_SEEK_TABLE enables a different method of generating TOC entries in Xing VBR header. now enabled! PLEASE TEST TRY IT It should fix the problem poeple reported who encode radio shows or alike which last a few hours. Another advantage is, it will not steadily increase LAME's memory footprint while running. 2001-01-17 16:05 shibatch * libmp3lame/psymodel.c: Reverted the final change. It degraded encoded quality of gspi*.wav. 2001-01-17 13:26 shibatch * libmp3lame/psymodel.c: Tweaked nspsytune. 2001-01-17 09:55 robert * Makefile.unix: try to fix the broken Makefile after latest configurification 2001-01-17 09:54 robert * libmp3lame/newmdct.c: + replaced M_SQRT2 by SQRT2 which is defined in util.h + replaced "=-" by "= -" to avoid confusion with the old K&R "=-" operator, an equivalent to "-=". Even though new compilers seem to handle it as an assignement and unary minus sequence, but some buggy compiler could be trapped here (as I). 2001-01-16 13:08 robert * configMS.h: turned some defines for system include files on 2001-01-16 09:04 robert * Makefile.MSVC: fixed typo, sorry 2001-01-15 15:16 aleidinger * Makefile.am, Makefile.am.global, Makefile.in, config.h.in, configMS.h, configure, configure.in, Dll/Makefile.am, Dll/Makefile.in, debian/Makefile.am, debian/Makefile.in, doc/Makefile.am, doc/Makefile.in, dshow/Makefile.am, dshow/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, frontend/brhist.c, frontend/console.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/main.c, frontend/mp3rtp.c, frontend/parse.c, frontend/rtp.c, include/Makefile.am, include/Makefile.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/id3tag.c, libmp3lame/machine.h, misc/Makefile.am, misc/Makefile.in, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/common.c, mpglib/decode_i386.c, mpglib/mpg123.h: automake/autoconf cleanup and enhancement 2001-01-15 14:19 shibatch * libmp3lame/: encoder.c, psymodel.c, util.h: More cleanups and bugfixes of --nspsytune. 2001-01-15 09:38 aleidinger * doc/html/Makefile.am: remove node[57].html 2001-01-15 09:14 gramps * USAGE: Raised track limit from 99 to 255 per user requests. 2001-01-15 09:10 robert * Makefile.B32, Makefile.MSVC, Makefile.unix: more RH_AMP clean up 2001-01-15 08:58 gramps * frontend/parse.c, doc/html/id3.html: Raised track limit from 99 to 255 per user requests. 2001-01-15 08:48 gramps * libmp3lame/id3tag.c: - Simplified prologue of all public functions, removing intermediate "spec" variable, and assuming (like the rest of LAME) that gfp is never null. - Fixed a stupid sizeof bug (mine) in "id3tag_init". - Raised track limit from 99 to 255 per user requests. - No longer write full text of genre in version 2 tag. Now write more cannonical "(num)" format where "num" is the text version of the genre number, more closely following the updated ID3v2.3 spec and usage in id3lib. This also makes the tag smaller. - Now use id3lib-compatible bogus language descriptor "XXX" in version 2 comment frames instead of just null bytes. - Changed order of frames written in version 2 tag to match version 1 tag. - Restored some of Frank's optimizations. - Fixed LAME URL. - Reworded some comments and fixed misspellings. - Moved "local_strcasecmp" back into its original position. - Some small reformatting to match original file. 2001-01-14 23:29 gramps * USAGE: - Changed "highest" to "higher" to describe recommended quality setting in constant bit rate example. - Changed "CBR" to "VBR" to correct misspelling in variable bit rate description. 2001-01-14 22:40 gramps * doc/html/Makefile.in: Removed dependency on obsolete node5.html and node7.html. 2001-01-14 22:35 markt * USAGE, frontend/parse.c: documentation of -q parameter in USAGE and lame --longhelp 2001-01-14 22:13 markt * doc/html/: node5.html, node7.html: removed as per Gaby 2001-01-14 22:12 markt * libmp3lame/: lame.c, quantize.c: created new routine lame_init_qval() which does all the gfp->quality related settings. Cleaned up some more RH_AMP code: The only way to enable scalefac_scale right now is with -Z or --nspsytune. 2001-01-14 21:01 markt * testcase.mp3: updated test case (Takehiro fixed a bug which I introduced, which changes test cases). 2001-01-14 17:25 aleidinger * DEFINES, Makefile.in, aclocal.m4, config.guess, config.sub, configure, configure.in, missing, mkinstalldirs, Dll/Makefile.am, Dll/Makefile.in, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, frontend/depcomp, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/depcomp, libmp3lame/i386/Makefile.in, misc/Makefile.in, misc/depcomp, mpglib/Makefile.in, mpglib/depcomp: DEFINES: remove obsolete defines configure*: minor cleanup Makefile*: - minor cleanup - use automake 2.14b Added files: needed for new automake rest: updated automake files 2001-01-14 15:40 aleidinger * misc/abx.c: there are encoders with different delays on different channels (Frank) 2001-01-14 12:21 shibatch * libmp3lame/lame.c: Enabled scalefac_scale if --nspsytune is specified. 2001-01-14 12:02 takehiro * testcase.mp3: fixed new amp_scalefac_bands (it may use "trigger" variable without any initialization) 2001-01-14 09:42 takehiro * libmp3lame/quantize.c: minor bug fix. when subblock gain=1 and scalefactor is -1(means no need to calculate), LAME will try to check the quantization with meanless scalefactor combination. 2001-01-14 09:39 takehiro * libmp3lame/quantize.c: subblock_gain is 3-bit and its limit is 7, not 8. 2001-01-14 09:35 takehiro * libmp3lame/quantize.c: oops, conflicts are removed 2001-01-14 09:31 takehiro * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: to store the distortion into III_psy_xmin structure, not simple array. this may make array pointer calculation easier and bring some speed up. 2001-01-14 09:26 shibatch * libmp3lame/: encoder.c, psymodel.c, psymodel.h: Cleanup and small speed optimization of --nspsytune. 2001-01-14 08:17 markt * API: one minor update to the API file 2001-01-14 08:13 markt * testcase.mp3, libmp3lame/lame.c, libmp3lame/quantize.c: made a new, simpler unified amp_scalefac_bands(): * distort[] = noise/masking * distort[] > 1 ==> noise is not masked * distort[] < 1 ==> noise is masked * max_dist = maximum value of distort[] * * Three algorithms: * noise_shaping_amp * 0 Amplify all bands with distort[]>1. * * 1 Amplify all bands with distort[] >= max_dist^(.5); * ( 50% in the db scale) * * 2 Amplify first band with distort[] >= max_dist; * * * For algorithms 0 and 1, if max_dist < 1, then amplify all bands * with distort[] >= .95*max_dist. This is to make sure we always * amplify at least one band. * noise_shaping_amp=0 -q3 .. -q9 noise_shaping_amp=1 -q2 noise_shaping_amp=2 -q1, -q0 --nspsytune was using what is now noise_shaping_amp=2, but the only way to get this now is to use --nspsytune -q1. Naoki: is this a problem? I also defaulted the clever RH_AMP stoping criterion in outer_loop. 2001-01-14 05:36 markt * libmp3lame/: lame.c, psymodel.c, quantize.c, quantize_pvt.c, util.h, vbrquantize.c: some tuning of VBR masking_lower because of new ATH function. Disabled VBR_q based lowering of ATH. Is this still needed? You can always achieve the same effect with --athlower option. 2001-01-13 18:01 aleidinger * Makefile.am, Makefile.in, configure, configure.in, Dll/Makefile.in, debian/Makefile.am, debian/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.am, dshow/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.am, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.am, mpglib/Makefile.in: "make dist" related: - add debian subdir - add missing files different builddir related: - change argument to -l option for nasm 2001-01-13 17:40 aleidinger * libmp3lame/Makefile.in.old: obsolete 2001-01-13 17:36 aleidinger * frontend/Makefile.in.old: obsolete 2001-01-13 13:45 takehiro * libmp3lame/newmdct.c: bit coding hack and cleanup 2001-01-13 12:55 takehiro * Makefile.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: automake generated 2001-01-13 12:54 takehiro * libmp3lame/: fft.c, i386/Makefile.am, i386/fft3dn.nas: now LAME supports 3dnow! fft 2001-01-13 10:37 pgubanov * dshow/Encoder.cpp: Removed (char*) cast in lame_encode_buffer() call 2001-01-12 19:20 markt * debian/: changelog, control, copyright, lame-dev.docs, lame-dev.files, lame-extras.files, lame.docs, lame.files, rules: added debian files from Ingo Saitz 2001-01-12 19:17 markt * debian/: cron.d.ex, dirs, docs, emacsen-install.ex, emacsen-remove.ex, emacsen-startup.ex, ex.doc-base.package, files, init.d.ex, manpage.1.ex, manpage.sgml.ex, menu.ex, postinst.debhelper, postinst.ex, postrm.ex, preinst.ex, prerm.debhelper, prerm.ex, substvars, watch.ex: New Debian package from Ingo Saitz 2001-01-12 19:11 markt * README.Debian: removed README.Debian 2001-01-12 11:13 aleidinger * misc/abx.c: further improvements, e.g. reduced latency (Frank) 2001-01-11 22:37 markt * HACKING, frontend/mp3rtp.c, frontend/mp3x.c: updated mp3rtp.c and mp3x.c to use lame_global_flags *lame_init() (lame allocates storage for lame_global_flags) rather than lame_init_old(&gf) which required calling program to instantiate gf. Now we need to start writing one routine for every parameter: lame_set_bitrate lame_set_num_channels etc... 2001-01-10 16:03 aleidinger * frontend/lame.dsp, frontend/mp3x.dsp, libmp3lame/libmp3lame.dsp, mpglib/mpglib.dsp: work around for a bug in VC (Todd Richmond) 2001-01-09 15:15 aleidinger * misc/abx.c: bugfixes 2001-01-08 18:15 aleidinger * DEFINES: removed KLEMM_12, on by default 2001-01-08 18:07 aleidinger * libmp3lame/vbrquantize.c: Roberts VBR code: speed improvement for vbr-mtrh (ping pong patch, OKed by Mark) 2001-01-07 23:47 markt * frontend/: portableio.c, timestatus.c: chage to KLEMM-36 from Frank 2001-01-07 22:53 markt * frontend/timestatus.c, libmp3lame/psymodel.c: undefined variable (last = 0, line 214) in timestatis.c commented out. fixed some dimensions in the funtion prototype of l3para_read 2001-01-07 22:35 markt * frontend/timestatus.c: Applied Frank's patch (from mp3encoder) to timestatus.c with -R. I hope I didn't undo this by mistake! 2001-01-07 22:33 markt * frontend/timestatus.c: added a brhist_jump_back() to timestatus_klemm(). sent to me by Magnus Holmgren. 2001-01-07 22:28 markt * USAGE, frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/psymodel.c: added the "-ma" option. Ultimate goal: 8 kbps Mono 16- 96 kbps Intensity Stereo (if available, otherwise Joint Stereo) 112-128 kbps Joint Stereo -mj 160-192 kbps something between -mj and -ms 224-320 kbps Independent Stereo -ms currently enables KLEMM_12. KLEMM_12 is gone. 2001-01-07 16:17 aleidinger * libmp3lame/lame.c: Don\'t change floatingpoint mask for FreeBSD on Alpha hardware, obtained from FreeBSD-Ports 2001-01-07 14:48 aleidinger * misc/abx.c: cleanup, no functional change 2001-01-07 14:47 aleidinger * Dll/Example.dsw, Dll/MP3EncDll.dsw, dshow/dshow.dsw, frontend/lame.dsw, frontend/mp3x.dsw, misc/abx.c: fix *.dsw new version of abc.c (Frank) 2001-01-07 09:14 markt * frontend/: mp3rtp.c, mp3x.c: global variables used by frontend code are now instantiated in parse.c. Before, the were defined external in main.h, and instantiated in the frontend, meaning they had to appear in mp3x.c, main.c and mp3rtp.c we need to get rid of these! 2001-01-07 09:11 markt * frontend/main.c, frontend/main.h, frontend/parse.c, libmp3lame/lame.c: more tweaks to the --decode-mp3delay option 2001-01-07 08:28 markt * libmp3lame/: lame.c, quantize.c, util.h: added a variable, noise_shaping_amp. It does nothing right now. 2001-01-07 08:24 markt * frontend/: main.c, main.h, parse.c: added a undocumented option --decode-mp3delay to allow someone to adjust the number of samples lame --decode will truncate. David Robinson requirested this since he didn't like that lame --decode would truncate 1106 samples (assuming a encoder delay of 576) since BladeEnc has an encoder delay of only 528.) 2001-01-07 05:25 markt * frontend/main.c, libmp3lame/util.c: main.c: uses lame_init() instead of lame_init_old(). util.c: added frank's changes: 32 point filter instead of 19. prep work for frank's new resampling/filtering code. updated test cases. 2001-01-06 23:12 markt * libmp3lame/: lame.c, psymodel.c, quantize_pvt.c, util.c: ATHformula modifed to work in Hz instead of Khz. Minor change to a bunch of routines + regeneration of test cases. 2001-01-06 22:57 markt * testcase.mp3: updated testcase 2001-01-06 22:55 markt * libmp3lame/fft.c: Switched to the Blackman window for the FFT energy estimator. This is just to merge some nspsytune code into default 2001-01-06 07:40 gramps * libmp3lame/id3tag.c: Backed out some large changes done in November which introduced at least two bugs. Also fixed other older bug in id3tag_write_v2. 2001-01-06 01:11 markt * include/lame.h, libmp3lame/lame.c, libmp3lame/psymodel.c: more prep work to remove all psycho acoustic tables 2001-01-06 01:00 markt * libmp3lame/: VbrTag.h, lame.c, mpglib_interface.c, psymodel.c: added formulas to replace the last of the table data. some changes to reflect that Xing VBR header parsing code has been moved into mpglib 2001-01-05 22:15 markt * mpglib/: interface.c, mpglib.h: added XingVBR header parsing code 2001-01-05 22:13 markt * frontend/: get_audio.c, gtkanal.c: fixed bug in frame analyzer when analyzing mp3 files. frame counter incremented too soon. This was introduced when someone (maybe me, but I dont remember!) replaced the use of gfp->frameNum with a global variable limited in scope to just gtkanal.c get_audio.c: removed VBR Xing header checking code. this has been moved into mpglib. 2001-01-05 15:26 aleidinger * Makefile.in.old, configure.in.old: obsolete 2001-01-05 15:20 aleidinger * Makefile.B32, Makefile.unix, frontend/brhist.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/lame.dsp, frontend/lametime.c, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/mp3x.dsp, frontend/parse.c, frontend/portableio.c, frontend/rtp.c, frontend/timestatus.c, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/libmp3lame.dsp, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/resample.c, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/vorbis_interface.c, misc/abx.c, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/mpglib.dsp, mpglib/tabinit.c: misc/abx.c: (Frank Klemm) - level adjustment - clean up - A-B repeat ("chunks") Makefile.*: - nuke NOTERMCAP, it's HAVE_TERMCAP now (defined where neccessary, please report slipped in breakage) (frontend|mp3x|libmp3lame|mpglib).dsp: - copy configMS.h config.h (Todd Richmond) - unbreak (Todd Richmond) - nuke NOTERMCAP - change HAVE([A-Z]*) to HAVE_$1 *.c: - get rid of configMS.h, we finally have support in *.dsp 2001-01-03 13:06 aleidinger * Makefile.DJGPP, Makefile.am, Makefile.in, Makefile.unix, aclocal.m4, config.h.in, configure, configure.in, frontend/Makefile.am, frontend/Makefile.in, frontend/brhist.c, frontend/console.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/lametime.c, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/portableio.c, frontend/rtp.c, frontend/timestatus.c, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/resample.c, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/vorbis_interface.c, misc/Makefile.am, misc/Makefile.in, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/tabinit.c: Makefile.{unix,DJGPP}: Bugfixes (Includes) Makefile.am: follow the move of some scripts to misc *: add dmalloc support (configure --with-dmalloc) (it seems we have a memleak somewhere, I will have a closer look soon) 2001-01-03 11:51 shibatch * libmp3lame/: psymodel.c, encoder.c: Tweaking and bugfix of --nspsytune. 2001-01-02 06:02 markt * frontend/get_audio.c, libmp3lame/encoder.c: typo in read_samples_pcm fixed 2001-01-01 17:35 markt * API, HACKING: minor edits to API and HACKING 2001-01-01 17:26 markt * Lame.vbs, README.WINGTK, TODO, USAGE, lame4dos.bat, misc/Lame.vbs, misc/lame4dos.bat: moved some more scripts into 'misc' directory 2001-01-01 17:12 markt * INSTALL, README.WINGTK, USAGE, auenc, mlame, frontend/README.Win32, misc/auenc, misc/mlame: moved scripts into misc directory moved README.Win32 (which described compiling mp3x under windows) back to its original name, README.WINGTK minor updates to INSTALL and USAGE 2000-12-27 13:13 aleidinger * misc/abx.c: - listen to the difference of both signals - highlighting of "errors" - DC canceling - support for monaural signals - cleanup - bugfixes - correct shell quoting 2000-12-25 10:49 shibatch * frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize_pvt.c, libmp3lame/util.h: Tweaked --nspsytune. 2000-12-22 15:36 aleidinger * misc/abx.c: now with cross correlation (Frank) 2000-12-20 22:55 aleidinger * misc/abx.c: - files to test have to have the same samplerate (Frank) - check for correct number of arguments (Alexander) 2000-12-20 15:14 aleidinger * DEFINES, libmp3lame/psymodel.c, libmp3lame/tables.c, libmp3lame/tables.h: Patches for KLEMM_43 protected code 2000-12-19 13:09 aleidinger * DEFINES, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/vbrquantize.c: Ping pong #3, OKed by Mark. 2000-12-19 08:16 markt * LICENSE: simplifed the LICENSE file describing how to use LAME in commercial software 2000-12-19 07:51 markt * INSTALL, README, README.B32: updated README files with new configure information. debuging statement added to interface.c, then removed. 2000-12-19 07:46 markt * frontend/: brhist.c, get_audio.c: more size_t's removed 2000-12-19 07:43 markt * frontend/: main.c, mp3rtp.c, parse.c, rtp.c, rtp.h: removed some size_t's. Added some windows code to rtp.c/mp3rtp.c: It is supposed to be much improved: LAME is really great project. However, RTP code for multicasting isn't very good. I've attached some modification, and tested it on Win NT4 and Win2K with FreeAmp on ordinary 10 and 100 Mbit Ethernet with encoding in neverending loop. It was running one week w/o any probs. I would like to please you to not include my name anywhere (there are several reason why, at the moment). However, code is very MSVC specific, so it is commented out with #if 0. Most of the code was added to the end of rtp.c. 2000-12-19 07:00 markt * frontend/main.c: deleted stupid C++ typecasts. LAME is written in C. integer arguments to fwrite() do not need typecasts. 2000-12-16 05:43 shibatch * libmp3lame/: lame.c, psymodel.c: 1. Old ATH formula is now default for --nspsytune. 2. Tweaked a parameter of --nspsytune. 3. Minor code cleanup. 2000-12-14 13:32 aleidinger * Makefile.in, configure, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen 2000-12-14 13:31 aleidinger * configure.in, libmp3lame/i386/Makefile.am: force nasm to generate coff output when building under cygwin (Egor Duga) 2000-12-14 10:05 aleidinger * Makefile.in, config.h.in, configure, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regen 2000-12-14 10:04 aleidinger * Makefile.DJGPP, Makefile.am, Makefile.unix, configMS.h, configure.in, frontend/Makefile.am, libmp3lame/Makefile.am, libmp3lame/i386/Makefile.am, mpglib/Makefile.am: configure.in: - determine the size of various types at configure time - add --enable-debug=anoying configMS.h: - add SIZEOF_... defines, see configure.in Makefile.unix: - bugfix from Robert (shame on me) Makefile.DJGPP: - add cpu_feat.nas and scalar.nas to the build with NASM Submitted by Egor Duda (thank you, works great): * Makefile.am: add $(EXEEXT) to executables for cygwin build * Makefile.am: take source .wav file from srcdir * configure.in: require autoconf 2.13 * configure.in: check for executable files extension * frontend/Makefile.am: use builddir to get autogenerated headers and libraries from, in case we're doing build in separate directory; take normal headers from srcdir instead of current. * libmp3lame/Makefile.am: ditto * libmp3lame/i386/Makefile.am: ditto * mpglib/Makefile.am: ditto 2000-12-13 02:28 shibatch * libmp3lame/lame.c: Minor bugfix. 2000-12-13 02:21 shibatch * libmp3lame/psymodel.c: Minor bugfix of --nspsytune. (forgot to merge.) 2000-12-12 04:50 shibatch * frontend/parse.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/util.c, libmp3lame/util.h: Added option --athtype which selects ATH formula. Some major changes to --nspsytune. 1. --nspsytune doesn't use pe. 2. MS psymodel is modified. Added new option --nssafejoint. 3. some more tunings of short block preecho control. 2000-12-12 01:11 markt * libmp3lame/: lame.c, util.c: Latest checkin from Alex include an rewritten 'Bitrate()' routine. This breaks the --abr code, since new routine considers a bitrate of 0 invalid. Now fixed. 2000-12-11 22:15 markt * misc/Makefile.am: added mlame_corr.c to the EXTRA_DIST line of Makefile.am 2000-12-11 16:03 aleidinger * DEFINES, Makefile.in, frontend/main.c, include/lame.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize_pvt.h, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vorbis_interface.c, mpglib/interface.c, mpglib/interface.h: tries to include every change before the CVS rollback which didn't changes output 2000-12-11 14:48 aleidinger * frontend/gtkanal.c, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/vorbis_interface.c: redo gfc->stereo -> gfc->channels_out conversation 2000-12-11 01:32 markt * USAGE: updated info regarding the MAD decoder 2000-12-11 00:34 markt * Makefile.am, libmp3lame/lame.c: applied patch for cygwin FPE stuff 2000-12-11 00:01 markt * USAGE, configure, configure.in, mlame_corr.c, frontend/get_audio.c, frontend/get_audio.h, include/lame.h, libmp3lame/mpglib_interface.c, misc/mlame_corr.c: configure: removed all the debug warning flags. it was impossible to find real problems when compiling in debug mode. moved mlame_corr.c into 'misc' directory removed some 'size_t' and 'unsigned' from get_audio.c made mp3buffer 'unsigned char*' for the mpglib interface routines. 2000-12-08 13:47 aleidinger * auenc, misc/mugeco.sh: more portability fixes from Fredrik Mellstrom 2000-12-07 18:58 aleidinger * mlame: use sh instead of bash 2000-12-07 18:55 aleidinger * auenc: portability patch from Fredrik Mellstrom 2000-12-05 15:48 aleidinger * DEFINES: update 2000-12-05 15:46 aleidinger * Makefile.MSVC: add scalar.nas 2000-12-05 15:40 aleidinger * configure, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mpglib/Makefile.in: regen 2000-12-05 15:37 aleidinger * Makefile.B32, Makefile.MSVC, Makefile.in, config.h.in, configMS.h, configure.in, frontend/Makefile.am, frontend/get_audio.c, frontend/get_audio.h, frontend/portableio.c, libmp3lame/Makefile.am, libmp3lame/i386/Makefile.in, libmp3lame/i386/cpu_feat.nas, misc/ath.c, mpglib/Makefile.am: play ping-pong with some files (we're now at 2000-12-03 again), ok'ed by Mark 2000-12-05 01:17 markt * DEFINES: restored DEFINES. Sorry Alexendar - I tried to only revert the *.c and *.h files to their Nov 21 values (because of test case problems) but I was unable to get this to work. I was lazy and reverted entire repository back to Nov 21. 2000-12-05 01:15 markt * DEFINES: trying to restore DEFINES 2000-12-04 14:36 aleidinger * Makefile.unix: add scalar.nas to build 2000-12-04 06:31 pgubanov * dshow/: PropPage.cpp, PropPage.h: Target bitrate fix 2000-12-04 06:30 pgubanov * dshow/: Mpegac.cpp, Mpegac.def, Mpegac.h, PropPage_adv.cpp, PropPage_adv.h, Property.rc, README, REG.CPP, REG.H, UIDS.H, dshow.dsp, iaudioprops.h, resource.h: CR/LF fix 2000-12-03 23:27 markt * testcase.mp3, libmp3lame/util.c: KLEMM_01 defaulted. This enables the new ATH formula. 2000-12-03 23:03 markt * libmp3lame/: tables.c, tables.h: huffmantab: int changed back to short. 2000-12-03 23:00 markt * DEFINES, Makefile.B32, Makefile.MSVC, Makefile.in, config.h.in, configMS.h, configure, configure.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/html/contributors.html, doc/html/examples.html, doc/html/history.html, doc/html/id3.html, doc/html/index.html, doc/html/lame.css, doc/html/modes.html, doc/html/node6.html, doc/html/switchs.html, doc/man/Makefile.in, frontend/Makefile.am, frontend/Makefile.in, frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, frontend/main.c, frontend/parse.c, frontend/portableio.c, include/Makefile.in, include/lame.h, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/pcm.c, libmp3lame/pcm.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/version.h, libmp3lame/vorbis_interface.c, libmp3lame/i386/Makefile.am, libmp3lame/i386/Makefile.in, libmp3lame/i386/cpu_feat.nas, mpglib/Makefile.am, mpglib/Makefile.in, mpglib/interface.c, mpglib/interface.h: Reverted back to Nov 21 version. Added HTML doc from GB 2000-12-03 17:38 aleidinger * configure: regen 2000-12-03 17:37 aleidinger * configure.in: fix in debugging options 2000-12-03 14:16 aleidinger * DEFINES: add KLEMM_36 2000-12-03 14:14 aleidinger * frontend/portableio.c: Portability fix from Frank, you need to define KLEMM_36 to enable it (no functional change if you leave it disabled): ---snip--- It is a hoax to call this code portable-IO: - It doesn't work on machines with CHAR_BIT != 8 - it also don't test this error condition - otherwise it tries to handle CHAR_BIT != 8 by things like masking 'putc(i&0xff,fp)' - It doesn't handle EOF in any way - it only works with ints with 32 or more bits - It is a collection of initial buggy code with patching the known errors instead of CORRECTING them! For that see comments on the old Read16BitsHighLow() ---snip--- 2000-12-03 13:14 aleidinger * misc/abx.c: Improvements from Frank: - more input formats (detected by filename) Improvements by me: - sanity checks - works on FreeBSD 2000-12-01 17:42 aleidinger * libmp3lame/: psymodel.c, tables.c, tables.h: Patches from Frank: ---snip--- defined 4 new types for holding psydata information psydata is divided into 25 normal tables (the 24 tables + 1 master table) access via "normal" index instead of scanning through the data tables are now sparsable, i.e. it is possible to remove unneeded parts but this is not yet done to avoid to do to much things at once tables are now smaller ---snip--- Hi also did some tests to verify this didn't changes the output. I also verified it with "make test" and some regular encoding. 2000-11-30 10:23 aleidinger * DEFINES: add description of some compile time defines 2000-11-30 10:20 aleidinger * Makefile.B32: sync with recent changes in the other Makefiles: - HAVExxx -> HAVE_xxx - HAVE_CONFIG_MS_H 2000-11-30 10:17 aleidinger * frontend/: get_audio.c, get_audio.h: - remove check for CHAR_BITS, was a typo from Frank (confirmed by Frank) - add optimization for unknown SIZEOF_UNSIGNED_LONG (submitted by Frank) in optimized version of SwapBytesInWords() - make the optimized version of SwapBytesInWords() the default (OKed by Mark) - remove DetermineByteOrder(), we have compile time support for it 2000-11-30 10:14 aleidinger * configure, Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mpglib/Makefile.in, dshow/Makefile.in, doc/man/Makefile.in, doc/html/Makefile.in, doc/Makefile.in, Dll/Makefile.in, frontend/Makefile.in, include/Makefile.in: regen 2000-11-30 10:11 aleidinger * libmp3lame/pcm.c: - some modifications from Frank 2000-11-30 10:08 aleidinger * configure.in: - compile time check for sizeof(int) - more compiler warnings for debugging 2000-11-30 10:07 aleidinger * config.h.in, configMS.h: - compile time value for sizeof(int) 2000-11-30 10:07 aleidinger * libmp3lame/Makefile.am, frontend/Makefile.am, mpglib/Makefile.am: - additional options for lclint 2000-11-30 10:06 aleidinger * libmp3lame/i386/Makefile.am: - *.lst instead of specifying every file in "CLEANFILES" 2000-11-27 16:39 aleidinger * libmp3lame/: pcm.c, pcm.h: submitted by Frank, first revision of a new lame API, not connected to the build yet 2000-11-26 20:58 robert * libmp3lame/: lame.c, util.c, util.h, i386/cpu_feat.nas: Part2 of Frank's Patch His List of Changes (part 1 + 2): - changed the type of the MP3 byte stream from 'char' to 'unsigned char' - added some 'const' attributes - added to lame_internal_flags: gfp, frame_size, coding, frame_count - one code move inside lame.c (mode_ext), one remove (channels_out) - two new types in util.c - some bug fixes with Ogg - SIMD2 detection 2000-11-26 10:49 robert * frontend/get_audio.c, frontend/main.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/util.h, libmp3lame/vorbis_interface.c, mpglib/interface.c, mpglib/interface.h: Patch by Frank: changes from char to unsigned char 2000-11-25 22:59 robert * libmp3lame/quantize.c: bug fix for -X6, could result in clicking noises 2000-11-25 20:40 robert * libmp3lame/quantize.c: typo "powf()" lend to crashes under windows, fixed 2000-11-25 18:56 robert * libmp3lame/: quantize.c, quantize.h, vbrquantize.c: small fix for vbr-mtrh mode 2000-11-25 18:18 robert * libmp3lame/: lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, util.h, vbrquantize.c: removed superfluous memset in vbr_noise_shaping2() some veryminor speed up for cbr amp_scalefac cleanup 2000-11-24 17:28 robert * frontend/gtkanal.c: Patches by Frank: - documentation - introduced gfc->channels_in - renamed gfc->stereo into gfc->channels_out (note by me: stereo would imply a boolean type stereo ? yes/no what's really annoying and confusing is that we didn't used it that way, but instead stereo=1 -> mono/1-channel, stereo=2 -> stereo/2-channels) - minor bug fixes for BitrateIndex search 2000-11-24 17:06 robert * include/lame.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/lame.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c: Patches by Frank: - documentation - introduced gfc->channels_in - renamed gfc->stereo into gfc->channels_out (note by me: stereo would imply a boolean type stereo ? yes/no what's really annoying and confusing is that we didn't used it that way, but instead stereo=1 -> mono/1-channel, stereo=2 -> stereo/2-channels) - minor bug fixes for BitrateIndex search 2000-11-23 23:19 robert * libmp3lame/vbrquantize.c: some loops manually unrolled into "Duff's Device" speed improvement for --vbr-mtrh GCC compiled ca. 5 % overall speed improvement for --vbr-mtrh Intel 4.5 compiled ca. 1-2 % looks like the intel compiler does a better job on loops compared to GCC. 2000-11-23 15:14 robert * Makefile.MSVC: compromise between size/speed/multi CPU, thanks to Dmitry 2000-11-23 13:06 aleidinger * misc/ath.c: readd support for other systems than linux (at least FreeBSD) 2000-11-22 21:03 robert * Makefile.MSVC: added little howto into Makefile.MSVC think MS C compiler works now again 2000-11-22 01:09 robert * frontend/parse.c: cosmetics 2000-11-22 00:30 robert * libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize_pvt.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/util.c, libmp3lame/version.h, misc/ath.c: some patches by Frank - replace ath.c (has with Lame nothing to do) - lame.c: A line in my new code exchange (see ATHformula problems) - util.c: ATHformula changed over from kHz to cycles per second (last util formula with kHz been) - ATHformula below 20 cycles per second (instead of 10 cycles per second) limits (< 20 cycles per second are Infraschall, additionally the function becomes there completely useless) - quantize_pvt.c: Effects of ATHformula - tables.c: - something documents - -number of entries over one increases (20=>21, 11=>12, etc..) - SNR_s converted and to the obvious values 0.15/0.18/0.20/0.25/0.30/0.35/0.40 rounded. - w1 and w2 with 576 multiply (error is < 0.91*10^-3, it seems in the tables both to have been rounded off as well as with minimum error have been rounded) - end to OF DATA marker to the integrity test inserted - a reading in of the table revises: psymodel.c - fewer error-prone code (fewer * p++) - meaningful error messages for problem localization - Peeeeeeps in the case of error - removing from loop (now j, is used only farther back; and adapted by k2) - ATHformula - util.c - some amusing " while" Konstrukte, which originate still from the ISO code, transformed into the appropriate " for" Konstrukte (with it first some amusing things are noticeable, so e.g. why starting from index 0 instead of 1 are looked up?) 2000-11-21 22:15 robert * Makefile.MSVC, frontend/gtkanal.c: some reorganization in Makefile.MSVC it's now more commandline configurable 2000-11-20 20:45 robert * frontend/: mp3x.c, parse.c: fix for mp3x.c: showed usage twice fix for parse.c: lame_version_print() in some situations the text is longer than 80 characters now the url will be wrapped into the next line, right aligned if 80 character aren't enough 2000-11-20 15:08 robert * Makefile.MSVC, Makefile.unix, frontend/parse.c, libmp3lame/lame.c, libmp3lame/quantize.c: overhauled Makefile.MSVC for easier configuration design bug in parse.c fixed (should not include files from engine) 2000-11-20 01:48 robert * Makefile.MSVC, Dll/BladeMP3EncDLL.c: it's now possible to compile lame_enc.dll with Makefile.MSVC tried the DLL with CD-ex, seems to work 2000-11-20 00:16 robert * Makefile.MSVC: updated Compile Flags due to crashes added rule to generate config.h out of configMS.h first try to let the dll compile, still does not work 2000-11-19 14:12 robert * Makefile.MSVC, Makefile.unix, frontend/gtkanal.c, libmp3lame/lame.c: Some bugs fixed introduced due to configure stuff and others 2000-11-19 11:26 aleidinger * Makefile.MSVC: bugfix for decoder define 2000-11-18 12:13 aleidinger * frontend/Makefile.in: regen (unbreak build) 2000-11-18 12:12 aleidinger * frontend/Makefile.am: bugfix after removing ieeefloat.* 2000-11-18 10:50 aleidinger * frontend/brhist.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/lame.dsp, frontend/lametime.c, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/portableio.c, frontend/rtp.c, frontend/timestatus.c, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/libmp3lame.dsp, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/vorbis_interface.c, misc/abx.c, misc/ath.c, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/mpglib.dsp, mpglib/tabinit.c: include configMS.h on Windows 2000-11-18 10:49 aleidinger * Makefile.MSVC, Makefile.DJGPP: define HAVE_CONFIG_MS_H for Windows 2000-11-18 10:49 aleidinger * Makefile.in: regen (configMS.h) 2000-11-18 10:48 aleidinger * Makefile.am, configMS.h: introduce configMS.h for Windows 2000-11-18 05:40 markt * README.Debian, debian/changelog, debian/control, debian/copyright, debian/cron.d.ex, debian/dirs, debian/docs, debian/emacsen-install.ex, debian/emacsen-remove.ex, debian/emacsen-startup.ex, debian/ex.doc-base.package, debian/files, debian/init.d.ex, debian/manpage.1.ex, debian/manpage.sgml.ex, debian/menu.ex, debian/postinst.debhelper, debian/postinst.ex, debian/postrm.ex, debian/preinst.ex, debian/prerm.debhelper, debian/prerm.ex, debian/rules, debian/substvars, debian/watch.ex, frontend/brhist.c, frontend/get_audio.c, frontend/main.c: added debian stuff. Make one of the KLEMM's the default 2000-11-18 04:30 markt * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, Makefile.in, Makefile.unix, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, dshow/Makefile.in, frontend/get_audio.c, frontend/portableio.c, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, mpglib/Makefile.in: Makefiles: removed ieeefloat.* from makefiles. get_audio.c: replaced DetermineByteOrder with original routine. 2000-11-18 04:24 markt * frontend/: Makefile.am, Makefile.in, get_audio.c, get_audio.h, ieeefloat.c, ieeefloat.h, portableio.c, portableio.h: Removed ieeefloat.* 2000-11-15 18:52 aleidinger * frontend/get_audio.c: only allow fast SwapBytesInWords if SIZEOF_UNSIGNED_LONG is defined 2000-11-14 12:25 aleidinger * libmp3lame/resample.h: remove define of INLINE 2000-11-14 12:24 aleidinger * frontend/ieeefloat.c: let configure handle little/big endianess 2000-11-14 12:20 aleidinger * libmp3lame/: bitstream.c, fft.c, newmdct.c, psymodel.c, quantize.c, takehiro.c, util.c: INLINE -> inline 2000-11-14 12:19 aleidinger * libmp3lame/machine.h: As discussed on the mailinglist: - correct when to define INLINE/inline - INLINE -> inline, configure already does something similar 2000-11-14 12:18 aleidinger * libmp3lame/encoder.c: compile time resolvable assertions switched to compile time errors 2000-11-14 12:18 aleidinger * libmp3lame/lame.c: - compile time resolvable assertions switched to compile time errors - adjust version string 2000-11-14 12:17 aleidinger * frontend/parse.c: - adjust version string - sort system includes 2000-11-14 12:16 aleidinger * include/lame.h: - quiet 4 lclint "errors" - disable get_lame_about() 2000-11-14 12:15 aleidinger * libmp3lame/version.c: - switched from run time generated version strings to compile time generated ones - implement void get_lame_version_numerical(lame_version_t *const) (#ifdef'ed out) - disable get_lame_about(), snprintf isn't available in Win32 2000-11-13 14:11 aleidinger * dshow/Makefile.in: regen (add dshow.dsw) 2000-11-13 14:10 aleidinger * dshow/Makefile.am: add dshow.dsw 2000-11-13 14:10 aleidinger * misc/mugeco.sh: shell math instead of awk math (no leading zeros needed) 2000-11-13 13:42 pgubanov * include/lame.h: Explicit CDECL for API 2000-11-13 13:31 pgubanov * dshow/: Encoder.h, Encoder.cpp, dshow.dsp: Synchronized with current LAME code 2000-11-13 10:57 aleidinger * libmp3lame/i386/Makefile.am: support for CONFIG_DEFS 2000-11-13 10:57 aleidinger * libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, frontend/Makefile.in: regen 2000-11-13 10:56 aleidinger * libmp3lame/Makefile.am, frontend/Makefile.am: - support for CONFIG_DEFS - possibility to exclude code to lint 2000-11-13 10:53 aleidinger * frontend/ieeefloat.c: remove CVS log tag/information, we have "cvs log" for this 2000-11-13 10:50 aleidinger * frontend/get_audio.c: - sort includes - compile time resolvable assertions switched to compile time errors - we didn't need to determine the size of "unsigned long" at runtime (KLEMM_10 case), we're able to do it at compile time (with the help of configure) 2000-11-13 10:48 aleidinger * libmp3lame/vbrquantize.c: - move define of TAKEHIRO_IEEE754_HACK into configure.in - commented out code -> ifdef'ed out code (I'm on a anti-warning rampage) 2000-11-13 10:47 aleidinger * libmp3lame/quantize_pvt.c: move define of TAKEHIRO_IEEE754_HACK into configure.in 2000-11-13 10:45 aleidinger * misc/: abx.c, ath.c: - include config.h - include correct soundcard.h (with support from configure) 2000-11-13 10:42 aleidinger * configure, config.h.in, Makefile.in: regen 2000-11-13 10:41 aleidinger * configure.in: - handle TAKEHIRO_IEEE754_HACK - support for 'CONFIG_DEFS="-Dxxx" ./configure' - handle endianess - check for soundcard.h 2000-11-13 10:39 aleidinger * mpglib/Makefile.in: regen (add possibility to exclude code for linting) 2000-11-13 10:38 aleidinger * mpglib/Makefile.am: add possibility to exclude code for linting 2000-11-13 10:35 aleidinger * misc/mugeco.sh: add start and stop date/time 2000-11-13 09:30 pgubanov * dshow/dshow.dsw: Initial release 2000-11-12 22:18 aleidinger * misc/mugeco.sh: add id 2000-11-12 22:17 aleidinger * misc/mugeco.sh: bugfix 2000-11-12 20:45 aleidinger * misc/Makefile.in: regen (add mugeco.sh) 2000-11-12 20:45 aleidinger * misc/Makefile.am: add mugeco.sh 2000-11-12 20:43 aleidinger * misc/mugeco.sh: first version of the multi generation encoder script 2000-11-12 10:57 aleidinger * Makefile.in, configure: regen (readd dshow) 2000-11-12 10:56 aleidinger * Makefile.am, configure.in: readd dshow 2000-11-11 23:20 pfk * Makefile.DJGPP, Makefile.am, Makefile.in, Makefile.in.old, Makefile.unix, USAGE, configure, configure.in, frontend/get_audio.c, frontend/get_audio.h, frontend/main.c, frontend/parse.c, libmp3lame/bitstream.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/i386/scalar.nas, misc/abx.c: A lot of very small changes. Most important is prparing of a more sofisticated method to determine the bandwidth and the MP3 sampling frequency. 2000-11-11 17:26 aleidinger * configure, Makefile.in: regen (add dshow) 2000-11-11 17:26 aleidinger * configure.in, Makefile.am: add dshow 2000-11-11 17:25 aleidinger * dshow/: Makefile.am, Makefile.in: initial version 2000-11-11 05:56 markt * testcase.mp3, libmp3lame/encoder.c, libmp3lame/machine.h, libmp3lame/util.c: updated testcases after changing some default settings 2000-11-11 05:47 markt * libmp3lame/encoder.c: make RH_VALIDATE_MS the default 2000-11-11 04:40 markt * frontend/parse.c, libmp3lame/lame.c, libmp3lame/util.c: undid some of Frank's changes to the resample code. 2000-11-11 01:55 markt * dshow/Encoder.cpp: [no log message] 2000-11-11 01:53 markt * dshow/: Encoder.cpp, Encoder.h, Mpegac.cpp, Mpegac.def, Mpegac.h, PropPage.cpp, PropPage.h, PropPage_adv.cpp, PropPage_adv.h, Property.rc, README, REG.CPP, REG.H, UIDS.H, dshow.dsp, iaudioprops.h, resource.h: directshow filter for LAME from Peter Gubanov 2000-11-10 23:18 pfk * frontend/get_audio.c, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/i386/scalar.nas, misc/scalartest.c: Resample continued. The old code now uses a 31 Tap FIR for HQ coding and a 7 Tap FIR for MQ and LQ coding. 2000-11-10 14:42 aleidinger * frontend/.cvsignore, libmp3lame/.cvsignore, mpglib/.cvsignore: add lclint.txt 2000-11-10 14:41 aleidinger * frontend/Makefile.in, libmp3lame/Makefile.in, mpglib/Makefile.in: regen (lclint target) 2000-11-10 14:40 aleidinger * config.h.in: regen (HAVE_EFENCE) 2000-11-10 14:39 aleidinger * configure: regen (disalbe-shared/HAVE_EFENCE) 2000-11-10 14:36 aleidinger * configure.in: - new default: no shared lib - define HAVE_EFENCE if apropriate 2000-11-10 14:33 aleidinger * mpglib/Makefile.am: add lclint target (564 code "errors" found so far) 2000-11-10 14:33 aleidinger * frontend/Makefile.am: add lclint target (471 code "errors" found so far) 2000-11-10 14:32 aleidinger * libmp3lame/Makefile.am: add lclint target (1505 code "errors" found so far) 2000-11-10 14:31 aleidinger * libmp3lame/quantize.c: fix RH_AMP (gfc = gfp->internal_flags) 2000-11-09 22:01 pfk * include/lame.h, libmp3lame/bitstream.c, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/i386/scalar.nas, misc/ath.c, misc/scalartest.c: Start of resampling. 2000-11-09 00:29 pfk * testcase.mp3, libmp3lame/bitstream.c, libmp3lame/id3tag.c, libmp3lame/machine.h, libmp3lame/version.h, misc/ath.c: Small changes. - removed an old function strcasecmp (replaced by fuzzy_strcmp) - optimized region 2 bitcoder - remark about version.h (stringification) - INLINE = inline + static 2000-11-08 19:59 aleidinger * libmp3lame/resample.c, mpglib/layer1.c: include assert.h, seems to be forgotten in last commit (how could this compile?) 2000-11-07 23:06 pfk * frontend/get_audio.c, frontend/parse.c, frontend/timestatus.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/version.c, libmp3lame/version.h, misc/ath.c, mpglib/layer1.c: Changed back to old report interface until we've discussed all possible versions and make a decision. Some bugfixes. Some remarks. 2000-11-07 15:36 aleidinger * configure: regen after: - HAVE{MPGLIB,VORBIS,GTK} -> HAVE_$1 - --disable-analyzer-hooks - --enable-efence 2000-11-07 15:36 aleidinger * config.h.in: HAVE{MPGLIB,VORBIS,GTK} -> HAVE_$1 2000-11-07 15:35 aleidinger * configure.in: - HAVE{MPGLIB,VORBIS,GTK} -> HAVE_$1 - --disable-analyzer-hooks - --enable-efence (use the ElectricFence malloc debugging library) 2000-11-07 15:31 aleidinger * frontend/get_audio.c, frontend/main.c, frontend/parse.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/vorbis_interface.c: HAVE{MPGLIB,VORBIS,GTK} -> HAVE_$1 2000-11-07 12:42 aleidinger * frontend/Makefile.in, libmp3lame/Makefile.in: regen after amiga_mpega.c move 2000-11-07 12:41 aleidinger * frontend/Makefile.am, libmp3lame/Makefile.am: follow the move of amiga_mpega.c from libmp3lame to frontend 2000-11-07 01:59 pfk * frontend/brhist.c, frontend/get_audio.c, frontend/get_audio.h, frontend/main.c, libmp3lame/bitstream.c, libmp3lame/version.h: minor changes. some options can be passed via "export LAMEOPT=..." 2000-11-07 00:58 cisc * Makefile.unix, frontend/amiga_mpega.c, libmp3lame/amiga_mpega.c: Moved amiga_mpega.c to frontend where it belongs, and added it to Makefile.unix 2000-11-07 00:14 markt * libmp3lame/: bitstream.c, encoder.c, lame.c, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, reservoir.c, reservoir.h, util.c, util.h, vbrquantize.c: removed lame_global_flags pointer from lame_internal_flags. 2000-11-06 23:19 markt * libmp3lame/: lame.c, quantize_pvt.c, util.c, util.h: fixed resample bug when resampling by integer amounts. 2000-11-06 19:26 cisc * API: Improved get_lame_xxx() API a little bit more 2000-11-06 19:22 cisc * frontend/gtkanal.c, frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/version.c, libmp3lame/version.h: Improved get_lame_xxx() API a little bit more 2000-11-06 17:29 robert * libmp3lame/: quantize.c, quantize_pvt.c: fixed segmentation fault in Frank's noise calculation implemented Todd Richmond's idea to speed up the outer_loop() 2000-11-06 12:31 aleidinger * libmp3lame/i386/.cvsignore: add .lst files 2000-11-06 08:22 markt * Makefile.am, configure.in, frontend/.indent.pro, frontend/brhist.c, libmp3lame/.indent.pro: went back to frame counts in VBR display 2000-11-06 04:24 markt * frontend/get_audio.c, mpglib/interface.c, mpglib/mpglib.h: cleaned up mpeg header search code in get_audio.c modified mpglib so we can move VBR header code into mpglib and out of the frontend code. a little more work is still needed. 2000-11-06 01:13 pfk * libmp3lame/: bitstream.c, bitstream.h, id3tag.c, util.o: Small changes for fuzzy ID3 tag compare. 2000-11-06 00:58 cisc * frontend/gtkanal.c, frontend/parse.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/version.c, libmp3lame/version.h: Modified get_lame_xxx() API so it's more re-entrance friendly (returning a const pointer from a static var that's changed every time the function is called is really dirty!). 2000-11-05 22:27 pfk * testcase.mp3, frontend/parse.c, frontend/rtp.h, frontend/timestatus.c, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h: Minor changes. Added -X8. 2000-11-05 18:29 pfk * frontend/get_audio.c, include/lame.h, libmp3lame/lame.c, libmp3lame/quantize.c, libmp3lame/util.h, libmp3lame/util.o: Changed lame_init_???_init to Class_ID. On initialization this variable gets the value LAME_ID. Advantages documented. Some little Bugs fixed. 2000-11-05 17:13 takehiro * Makefile.in, configure, configure.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, frontend/Makefile.in, frontend/main.c, frontend/parse.c, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/newmdct.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: configure.in: typo fix newmdct.c: precision fix(?) 2000-11-05 14:52 aleidinger * libmp3lame/i386/Makefile.in: regen (clean of generated .lst files) 2000-11-05 14:52 aleidinger * libmp3lame/i386/Makefile.am: add generated .lst files to files to clean 2000-11-05 14:41 aleidinger * misc/Makefile.in: regen after adding scalartest.c 2000-11-05 14:40 aleidinger * misc/Makefile.am: add scalartest.c 2000-11-05 14:34 aleidinger * libmp3lame/: util.c~, util.d, util.o: remove generated/backup files, seems they are commited by accident 2000-11-05 13:15 pfk * libmp3lame/: tools.c, tools.h: add file for generic tools. 2000-11-05 13:09 pfk * testcase.mp3, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/lame.c, libmp3lame/lameerror.h, libmp3lame/psymodel.c, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/util.c, libmp3lame/util.c~, libmp3lame/util.d, libmp3lame/util.h, libmp3lame/util.o, libmp3lame/version.h, libmp3lame/i386/scalar.nas, misc/scalartest.c: * Changed psy_data from double to float (this ssem not to change any bit in MP3, but saves 20 KB). * Other, but small modifications 2000-11-05 00:19 pfk * frontend/brhist.c: bugfix. Sorry 2000-11-04 18:15 pfk * frontend/brhist.c, frontend/brhist.h, frontend/mp3rtp.c, frontend/rtp.c, frontend/rtp.h, frontend/timestatus.c, include/lame.h, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/tables.c, libmp3lame/version.c, libmp3lame/i386/Makefile.am, libmp3lame/i386/Makefile.in, libmp3lame/i386/scalar.nas, misc/ath.c: small changes in brhist. some tests and modifications for streaming MP3. other unremarkable stuff 2000-11-04 02:18 pfk * doc/html/switchs.html, frontend/get_audio.c, frontend/timestatus.c: Unimportant changes. 2000-11-03 14:21 aleidinger * libmp3lame/id3tag.c: more 'const'nes, also saves some bytes in the generated .o 2000-11-03 14:13 aleidinger * libmp3lame/i386/Makefile.in: regen after change in Makefile.am 2000-11-03 14:13 aleidinger * libmp3lame/i386/Makefile.am: remove trailing backslash in last line of EXTRA_DIST 2000-11-03 14:08 aleidinger * doc/html/contributors.html: add myself to contributors 2000-11-03 14:07 aleidinger * configure: NOTERMCAP/TERMCAP_AVAILABLE -> HAVE_TERMCAP 2000-11-03 14:04 aleidinger * frontend/brhist.c, configure.in, config.h.in: NOTERMCAP/TERMCAP_AVAILABLE -> HAVE_TERMCAP 2000-11-03 14:00 aleidinger * frontend/parse.c: add missing include 2000-11-03 00:47 pfk * frontend/brhist.c, frontend/console.c, frontend/console.h, frontend/mp3rtp.c, frontend/parse.c, frontend/timestatus.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/resample.h, libmp3lame/util.c, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/i386/Makefile.am, libmp3lame/i386/Makefile.in, libmp3lame/i386/scalar.nas: Minor changes. Biggest ist in bitstream.c, but triggered by KLEMM_14. 2000-11-02 17:16 pfk * TODO, frontend/brhist.c, frontend/console.c, frontend/console.h, libmp3lame/resample.c, libmp3lame/resample.h, libmp3lame/version.c, libmp3lame/i386/scalar.nas: These are minor changes to a version which fails on my computer. * MMX reporting added to get_lame_version(9 as requested by TODO. * Added 5 files for resampling and console IO. 2000-11-02 12:57 aleidinger * mpglib/: common.c, common.h: bugfix for --disable-decoder-layer1 case 2000-11-01 21:56 markt * LICENSE, frontend/parse.c, include/lame.h: updated LICENSE to remove comments about libsndfile, since libsndfile no longer included in library 2000-11-01 21:54 markt * libmp3lame/: .indent.pro, bitstream.c, version.h: added indent.pro back to CVS 2000-11-01 18:25 markt * STYLEGUIDE, libmp3lame/encoder.c: some more context fixes 2000-11-01 18:22 markt * libmp3lame/: newmdct.c, psymodel.c, quantize.c, quantize_pvt.c, reservoir.c, reservoir.h, takehiro.c, util.c, vbrquantize.c: removed more 'context'. lame now segfaults. 2000-11-01 18:06 markt * libmp3lame/: .indent.pro, VbrTag.c, fft.c, fft.h, id3tag.c, lame.c, newmdct.h, psymodel.h, quantize.h, quantize_pvt.h: removing 'context' 2000-11-01 17:56 markt * libmp3lame/: bitstream.c, bitstream.h, util.h: restored bitstream.c to original. drain_into_ancillary_data was written the way it is on purpose. dont change it without checking with me first 2000-11-01 17:46 markt * libmp3lame/util.h: [no log message] 2000-11-01 17:40 markt * libmp3lame/util.h: removed 'context' why was lame_internal_flags renamed context? This is under the catagory of cosmetic. 2000-11-01 17:32 markt * STYLEGUIDE, frontend/get_audio.c, frontend/parse.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c: removed some cosmetic changes. 2000-11-01 16:09 robert * frontend/: mp3rtp.c, rtp.c: mp3rtp was broken, does now compile again 2000-11-01 14:35 robert * libmp3lame/: quantize.c, quantize_pvt.h: only cosmetic changes, done by indent 2000-11-01 14:31 robert * frontend/.indent.pro, libmp3lame/.indent.pro, misc/.indent.pro: these files are used by the indent program to pretty format sources 2000-11-01 00:01 robert * frontend/: brhist.c, brhist.h, main.c, timestatus.c: some more brhist pretty print 2000-10-31 13:58 aleidinger * frontend/Makefile.in: regen after bugfix in Makefile.am 2000-10-31 13:57 aleidinger * frontend/Makefile.am: fix build of mp3x 2000-10-31 13:18 robert * Makefile.MSVC, frontend/brhist.c, frontend/lametime.h: fixes for bitrate histogram and MS compilation 2000-10-31 12:18 robert * frontend/: lametime.c, parse.c, timestatus.c: quick fixes for Console_IO stuff Console_IO is declared in brhist.c, but when compiling without bitrate histogram capabilities the code would not compile anymore 2000-10-30 23:58 robert * Makefile.MSVC, Makefile.unix: analyzer stuff was moved to frontend because of automake/configure 2000-10-30 22:34 robert * libmp3lame/vbrquantize.c: Takehiro's IEEE754 hack for VBR modes new and mtrh 2000-10-30 11:28 aleidinger * Makefile.in: we didn't need acconfig.h, so don't depend on it 2000-10-30 10:51 robert * libmp3lame/util.c: BUG fix for debug code for BUG fix for fill_buffer_resample() ;-( 2000-10-30 10:48 robert * libmp3lame/util.c: BUG fix for fill_buffer_resample() 2000-10-29 22:26 robert * libmp3lame/util.c: small fix for fill_buffer_resample() some buffers where too small allocated, but this will not really help, the routine has some ugly looking points left that need to be fixed. 2000-10-29 21:11 robert * libmp3lame/: VbrTag.c, bitstream.c, bitstream.h, encoder.c, id3tag.c, lame.c, quantize.c, quantize_pvt.c, reservoir.c, reservoir.h, util.c, util.h, vbrquantize.c: gfp gfc stuff FINISHED for now 2000-10-29 20:03 robert * libmp3lame/: encoder.c, fft.c, fft.h, newmdct.c, newmdct.h, psymodel.c, psymodel.h, quantize_pvt.h, takehiro.c: a step further with this gfp gfc stuff 2000-10-29 19:15 robert * libmp3lame/: quantize_pvt.h, takehiro.c, util.h: some more gfc stuff 2000-10-29 18:12 robert * libmp3lame/: encoder.c, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: more on gfp gfc reorganization 2000-10-29 16:37 robert * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: gfp gfc reorganization 2000-10-29 13:58 robert * libmp3lame/: fft.c, lame.c, psymodel.c, quantize.c, quantize_pvt.c, util.h: data encapsulating Naoki's psymode 2000-10-29 12:52 aleidinger * .cvsignore: add some config.h related files 2000-10-29 12:51 aleidinger * configure: now with support for config.h 2000-10-29 12:50 aleidinger * Makefile.in, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: regenerated after adding support for config.h 2000-10-29 12:49 aleidinger * frontend/Makefile.am, libmp3lame/Makefile.am, mpglib/Makefile.am: support for config.h 2000-10-29 12:47 aleidinger * config.h.in, stamp-h.in: config.h support 2000-10-29 12:45 aleidinger * frontend/brhist.c, frontend/get_audio.c, frontend/gpkplotting.c, frontend/gtkanal.c, frontend/ieeefloat.c, frontend/lametime.c, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/portableio.c, frontend/rtp.c, frontend/timestatus.c, configure.in, aclocal.m4: support for config.h 2000-10-29 12:41 aleidinger * mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/tabinit.c, libmp3lame/VbrTag.c, libmp3lame/amiga_mpega.c, libmp3lame/bitstream.c, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/fft.c, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/psymodel.c, libmp3lame/quantize.c, libmp3lame/quantize_pvt.c, libmp3lame/reservoir.c, libmp3lame/tables.c, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/vorbis_interface.c: support for config.h 2000-10-28 21:57 pfk * configure, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/lame.c: CRC table based code removed Ease CRC header calculation 2000-10-28 14:23 pfk * frontend/get_audio.c, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/mp3x.c, frontend/parse.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: Moved 2 functions from util.c to lametime.c Fixed a memory leak caused by an early return bitstream: Local crc moved to gfp->crcvalue, next step can be to remove a function parameter minor changes 2000-10-28 12:31 robert * include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: hunting some BUGs, but still not found encoding a mono VBR resampled to 11 kHz shows some strange behaviour 2000-10-28 10:47 aleidinger * Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: don't use gtar instead of tar 2000-10-28 10:42 aleidinger * lame.spec: lame.spec gets now generated at configure time from lame.spec.in 2000-10-28 10:40 aleidinger * Makefile.am, Makefile.in: - add lame.spec.in to distribution - remove lame.spec from distribution - show how long lame needs for the testcase 2000-10-28 10:35 aleidinger * configure.in, configure: - generate lame.spec from lame.spec.in - CPU specific optimizations (x86, gcc 2.7.3.x or better) 2000-10-28 10:32 aleidinger * lame.spec.in: template for configure to generate lame.spec 2000-10-28 01:29 pfk * include/lame.h, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/version.h: short => sample_t in lame_encode_buffer and all the related stuff some essential but simple speedups in resampling code resulting MP3 will be different from previous code modification not finished, this is only half of the work 2000-10-27 23:04 robert * libmp3lame/vbrquantize.c: max_range tables 2000-10-27 21:50 pfk * frontend/main.c, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/util.c, libmp3lame/util.h: KLEMM_04(old) removed, scalar routines introduced. 2000-10-27 21:34 robert * libmp3lame/vbrquantize.c: LSF needs some different max_range tables I plugged some in and it seems to work they are designed after max_sfac_tab[6][4] you may look into scale_bitcount_lsf() 2000-10-27 16:30 robert * libmp3lame/: quantize.c, vbrquantize.c: LSF hack for vbr-mtrh VBR mode 2000-10-27 15:48 takehiro * libmp3lame/newmdct.c: bit optimization 2000-10-27 11:27 robert * libmp3lame/quantize_pvt.c, mpglib/layer3.c: BUG in frame analyzer fixed, there was some wild pointer used in layer3.c in preflag condition 2000-10-27 11:19 takehiro * libmp3lame/: machine.h, tables.c, tables.h, i386/choose_table.nas: 64bit int lookup table moved from C code to asm code. 2000-10-26 19:07 pfk * frontend/brhist.c, frontend/get_audio.c, frontend/mp3rtp.c, frontend/timestatus.c, include/lame.h, libmp3lame/bitstream.c, libmp3lame/psymodel.c, libmp3lame/util.c, misc/ath.c: Make some modifications active. No Termcap terms are now handled in the same way like termcap terms. 2000-10-25 22:18 robert * libmp3lame/: quantize.c, quantize.h, quantize_pvt.h, vbrquantize.c: improved vbr_mtrh VBR mode 2000-10-25 14:03 aleidinger * frontend/Makefile.am: prevent the CVS Id from being integrated into Makefile.in 2000-10-24 22:47 robert * Makefile.MSVC, Makefile.unix, libmp3lame/quantize.c: improved RH_AMP 2000-10-24 22:17 pfk * frontend/get_audio.c, libmp3lame/mpglib_interface.c, libmp3lame/psymodel.c: Better syncword recognization 2000-10-24 18:11 takehiro * configure, configure.in, frontend/Makefile.in, libmp3lame/machine.h: configure/configure.in added "--enable-all-float", which make FLOAT8 as float machine.h FLOAT (and FLOAT8) typedef fix for alpha processor 2000-10-24 17:44 takehiro * libmp3lame/newmdct.c: loop integration. "make test" may find some difference caused by some rounding problem 2000-10-24 15:01 robert * libmp3lame/quantize.c: fix for -q7 mode 2000-10-24 13:54 robert * libmp3lame/quantize.c: typo 2000-10-24 13:28 robert * libmp3lame/: quantize.c, quantize_pvt.c, quantize_pvt.h: some simplifications 2000-10-24 11:40 robert * Makefile.MSVC, Makefile.unix, libmp3lame/quantize.c: improvements, need some compile time defines, look into Makefile.unix 2000-10-23 18:59 robert * libmp3lame/machine.h: FLOAT is float, FLOAT8 is double again ;-) 2000-10-23 15:50 takehiro * Makefile.am, Makefile.in, frontend/Makefile.in: more make test update 2000-10-23 15:44 takehiro * libmp3lame/machine.h: sorry, mistaken check in.... 2000-10-23 15:40 takehiro * Makefile.am, Makefile.in, lame.spec, Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, frontend/Makefile.in, include/Makefile.in, libmp3lame/Makefile.in, libmp3lame/machine.h, libmp3lame/i386/Makefile.in, misc/Makefile.in, mpglib/Makefile.in: "make test" update 2000-10-23 15:40 takehiro * libmp3lame/bitstream.c: cosmetic change 2000-10-23 10:16 aleidinger * Makefile.in: update after change to Makefile.am 2000-10-23 10:16 aleidinger * Makefile.am: let test targetbuild frontend/lame if it isn't already build - didn't work with "make -j 4 test" - IMHO the previous version was a feature (requested by Takehiro-san) splittet test target into more subtargets corrected testg target added CVS_RSH=ssh to update/diff target 2000-10-22 22:50 robert * libmp3lame/psymodel.c: fix for short block I introduced 2000-10-19 2000-10-22 18:20 pfk * Makefile.unix, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/main.c, frontend/parse.c, frontend/parse.h, include/lame.h, libmp3lame/bitstream.c, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/lame.c, libmp3lame/reservoir.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/version.c, libmp3lame/version.h, misc/ath.c: A lot of small changes, most of them must be switched on via compile time defines. vbr displays shows MS and LR frames different. vbr displays depends on the current display width. 2000-10-22 15:36 takehiro * Makefile.am: do "make test" with one step 2000-10-22 15:28 takehiro * .cvsignore, Dll/.cvsignore, doc/.cvsignore, doc/html/.cvsignore, doc/man/.cvsignore, frontend/.cvsignore, include/.cvsignore, libmp3lame/.cvsignore, libmp3lame/i386/.cvsignore, misc/.cvsignore, mpglib/.cvsignore: igonore Makefile.am things (.libs, .deps, and so on) 2000-10-22 15:17 takehiro * libmp3lame/.cvsignore, mpglib/.cvsignore: added *.lo 2000-10-22 12:06 aleidinger * ltconfig, ltmain.sh, missing, mkinstalldirs: generated by automake/libtool 2000-10-22 12:02 aleidinger * frontend/Makefile.in, libmp3lame/Makefile.in, mpglib/Makefile.in: generated by automake 2000-10-22 12:01 aleidinger * configure: now with automake/libtool support 2000-10-22 12:00 aleidinger * confdefs.h: seems to get generated at configure time 2000-10-22 11:58 aleidinger * aclocal.m4: generated by aclocal 2000-10-22 11:58 aleidinger * configure.in: - add asm support if nasm is found (if we support this, see ASM_FOR_ARCH) - added automake support - added libtool support (a Dll user should look into "AC_LIBTOOL_WIN32_DLL" of the libtool documentation and send apropriate patches) - --enable-{mp3x,mp3rtp} - only build analyzer if GTK is present - set CPUTYPE (to use asm routines where supported) - --enable-decoder* -> --disable-decoder* 2000-10-22 11:57 aleidinger * acinclude.m4: remove GTK entry, "aclocal" takes care of it in aclocal.m4 2000-10-22 11:53 aleidinger * misc/Makefile.am: Initial automake support 2000-10-22 11:52 aleidinger * Dll/Makefile.in, doc/Makefile.in, doc/html/Makefile.in, doc/man/Makefile.in, include/Makefile.in, libmp3lame/i386/Makefile.in, misc/Makefile.in, Makefile.in: generated by automake 2000-10-22 11:50 aleidinger * frontend/: README.Win32, gpkplotting.c, gpkplotting.h, gtkanal.c, gtkanal.h, mp3x.c, mp3x.dsp, mp3x.dsw: moved from analyzer/... because automake didn't allows sources for one program/library to be in more than one directory (at least without hacks) 2000-10-22 11:46 aleidinger * Makefile.am: - initial automake support - delete testcase.new.mp3 on "clean" - added "update" target, does a cvs update - added "diff" target, does a cvs diff -u 2000-10-22 11:44 aleidinger * frontend/Makefile.am: - initial automake support - conditionally build mp3x/mp3rtp 2000-10-22 11:43 aleidinger * libmp3lame/: Makefile.am, i386/Makefile.am: Initial automake/libtool support: - if nasm is detected and we have asm for this @CPUTYPE@: * include asm support - didn't build without decoder: "undefined reference to `mpg123_pinfo'" 2000-10-22 11:41 aleidinger * mpglib/Makefile.am: Initial automake/libtool support: - mpglib gets linked to libmp3lame.{a,so} - isn't installed on it's own 2000-10-22 11:39 aleidinger * Dll/Makefile.am, doc/Makefile.am, doc/html/Makefile.am, doc/man/Makefile.am, include/Makefile.am: Initial automake support. 2000-10-22 10:19 takehiro * libmp3lame/: l3side.h, newmdct.c, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: 1. changed sfb_smax to sfb_smin. it is really minimum number, and so confusing. 2. prepare for mixed block 3. prepare for asm quantize code 2000-10-22 09:41 takehiro * libmp3lame/: fft.c, util.h: no need to be in internal flag for constants 2000-10-22 09:27 takehiro * libmp3lame/: Makefile.in, encoder.c, newmdct.c, newmdct.h, util.h: 1 (util.h) deleted unused flag from internal flags 2 (newmdct) in place code of mdct_short 3 some cosmetic change 2000-10-22 08:25 takehiro * libmp3lame/newmdct.c: code clean up 2000-10-22 06:56 takehiro * libmp3lame/machine.h: deleted old remark about asm routine 2000-10-22 06:56 takehiro * libmp3lame/newmdct.c: code cleanup 2000-10-21 19:28 takehiro * libmp3lame/: quantize_pvt.c, i386/choose_table.nas: reduce memory assumption little and bit faster choose_table 2000-10-21 19:11 takehiro * libmp3lame/newmdct.c: add coment and remove unused code 2000-10-21 19:01 takehiro * libmp3lame/newmdct.c: bit optimization and now thread safe, I think. 2000-10-21 17:24 takehiro * libmp3lame/newmdct.c: brute force loop unrolling and some elimination of multiple. bit faster. 2000-10-21 13:05 robert * libmp3lame/: encoder.c, quantize.c, quantize_pvt.c, quantize_pvt.h, vbrquantize.c: frame analyzer info will now be set up in main encoding routine only, for the whole frame. problem with SCFSI fixed 2000-10-20 21:46 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Added lame alpha, beta version and if MMX is enabled to the version interface, should be backward compatible 2000-10-20 21:43 afaber * frontend/brhist.c: Fixed histgramming display for Win32, added fflush 2000-10-20 20:50 afaber * frontend/: brhist.c, brhist.h: Resolved const mistach beween BRHIST function declartions 2000-10-20 20:49 afaber * libmp3lame/libmp3lame.dsp: Added MPGLIB define 2000-10-20 19:28 robert * misc/: abx.c, ath.c: initial checkin 2000-10-20 13:04 robert * libmp3lame/: quantize.c, vbrquantize.c: I think I fixed a BUG in subblock gain code 2000-10-19 21:10 robert * frontend/parse.c, include/lame.h, libmp3lame/lame.c, libmp3lame/psymodel.c, libmp3lame/quantize.c: fixed BUG in atQ table, removed --raise-smr stuff 2000-10-18 17:34 robert * libmp3lame/lame-analysis.h: no way to disable analysis for lame-lib 2000-10-18 16:47 robert * libmp3lame/lame-analysis.h, mpglib/layer3.c, mpglib/mpglib.h: fixed some ambiguities define NOANALYSIS as suggested in INSTALL if you don't want to collect some analysis data 2000-10-18 11:18 robert * frontend/brhist.c, include/lame.h, libmp3lame/lame.c: some tweaks 2000-10-18 11:02 shibatch * libmp3lame/psymodel.c: Rewrote double to FLOAT8. 2000-10-18 10:55 shibatch * libmp3lame/psymodel.c: Added short block pre-echo control to --nspsytune. This improves castanets.wav. 2000-10-17 22:59 pfk * STYLEGUIDE, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.h, frontend/main.c, frontend/parse.c, frontend/parse.h, frontend/timestatus.c, include/lame.h, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/psymodel.c, libmp3lame/util.h: * small changes to prepare to add a lame float interface * other stuff 2000-10-17 00:13 pfk * Makefile.unix, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/timestatus.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/bitstream.c, libmp3lame/fft.c, libmp3lame/lame.c, libmp3lame/mpglib_interface.c, libmp3lame/quantize_pvt.c, libmp3lame/version.c, libmp3lame/version.h: removed some shorts. two version of version report some minor changes 2000-10-16 22:19 robert * frontend/: brhist.c, main.c: cosmetics 2000-10-16 19:55 florian * Makefile.in, configure, configure.in, libmp3lame/Makefile.in, libmp3lame/lame.c, mpglib/Makefile.in: integrated Alexanders patch, minor bug fixes 2000-10-16 19:29 robert * libmp3lame/: tables.c, tables.h, takehiro.c: takehiro.c now thread safer 2000-10-16 19:27 robert * frontend/brhist.h: missing include files 2000-10-16 10:03 robert * Makefile.unix: some convenience 2000-10-16 02:40 markt * include/lame.h, libmp3lame/VbrTag.c: [no log message] 2000-10-16 02:29 markt * include/lame.h: added some prototypes. no code yet 2000-10-16 02:29 markt * API: added some lame_set_variable prototypes in lame.h 2000-10-16 02:17 markt * frontend/mp3rtp.c, include/lame.h, libmp3lame/fft.h, libmp3lame/lame.c: fixed fft.h defines 2000-10-16 02:12 markt * API, Makefile.in, configure, configure.in: broken frame analyzer fixed - -DANALYSIS was missing from default library build 2000-10-16 01:38 markt * frontend/: get_audio.c, main.c, mp3rtp.c: fixed broken fskip() 2000-10-16 01:37 markt * STYLEGUIDE, Dll/BladeMP3EncDLL.c: fixed Frank's broken fskip() 2000-10-16 00:44 markt * libmp3lame/: Makefile.in, mpglib_interface.c, util.c, util.h: made data for resampling dynamically allocated 2000-10-16 00:28 pfk * STYLEGUIDE, frontend/brhist.c, frontend/brhist.h, frontend/get_audio.c, frontend/parse.c, frontend/timestatus.c, frontend/timestatus.h: Most changes must be switched on via KLEMM_0[0-9]. Also some minor changes. Start of short documenation of the source code. _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ **************** *** #defines *** **************** KLEMM_01: Use my experimental data to calculate ATH But masking for >16 kHz seems to be buggy. KLEMM_02: lame_set_stream_binary_mode() and lame_get_file_size() as lib function, still searching a better place for that KLEMM_03: not more used KLEMM_04: faster FIR filter with less rounding errors KLEMM_05: sparse VBR bitrate display KLEMM_06: fskip() uses fseek() if possible KLEMM_07: use of timestatus_klemm.c which only uses timestatus.c functions, some code clarification and documentation 2000-10-15 22:46 markt * libmp3lame/: util.c, util.h: lowpass filtering data structurs made dynamic 2000-10-15 21:23 markt * USAGE: [no log message] 2000-10-15 21:17 markt * frontend/get_audio.c, libmp3lame/VbrTag.c: Fixed bug parsing Xing VBR header: lame will now compute correct number of frames when decoding 2000-10-15 20:54 markt * Makefile.unix, frontend/get_audio.c, frontend/main.c: playback bugfix 2000-10-15 20:12 markt * Dll/BladeMP3EncDLL.c: msv6 dll project files updated 2000-10-15 20:11 markt * Dll/: MP3EncDll.dsp, MP3EncDll.dsw (MSVC6): msvc6 update 2000-10-15 20:05 markt * Dll/: MP3EncDll.dsp, MP3EncDll.dsw: reverted back to MSVC5 project files. accidently changed them to my MSVC6 versions. Albert, when are you goint to upgrade!!!! 2000-10-15 20:02 markt * Dll/: MP3EncDll.dsp, MP3EncDll.dsw: msv6 dll project files updated 2000-10-15 19:51 markt * libmp3lame/lame.c: fixed typo 2000-10-15 19:33 markt * USAGE, include/lame.h, libmp3lame/lame.c: updated USAGE 2000-10-15 19:10 markt * API, USAGE, Dll/BladeMP3EncDLL.c: edited API, USAGE 2000-10-14 19:18 robert * libmp3lame/i386/cpu_feat.nas: BUG in 3DNow detection fixed, was my faulty porting to NASM 2000-10-14 11:42 robert * libmp3lame/: takehiro.c, util.h: takehiro.c now thread safe ? 2000-10-14 10:08 pfk * frontend/brhist.c, libmp3lame/psymodel.c: psymodel: FIR filter changed, trigger with KLEMM_04 brhist: display changed back to the old display, new display must be triggered by KLEMM_05 2000-10-13 22:58 pfk * frontend/brhist.c, frontend/brhist.h, frontend/main.c, frontend/timestatus.c, include/lame.h, libmp3lame/util.c: Changes are commented in brhist.c or must be enabled with KLEMM_xx. 2000-10-13 16:43 robert * frontend/brhist.c, frontend/brhist.h, frontend/main.c, include/lame.h, libmp3lame/lame.c: bitrate histogram is working again 2000-10-13 15:24 robert * Makefile.unix: small fixes 2000-10-13 05:37 florian * frontend/Makefile.in, frontend/Makefile.in.old, libmp3lame/Makefile.in, libmp3lame/Makefile.in.old: prepare for automake: new vars, system dependent checks to configure.in 2000-10-13 05:17 florian * Makefile.in, Makefile.in.old, configure, configure.in, configure.in.old: prepare for automake: new vars, system dependent checks to configure.in 2000-10-12 19:19 florian * acinclude.m4, aclocal.m4, configure.in: Preparing for automake 2000-10-12 17:48 robert * Makefile.MSVC, Makefile.unix: NASM specific fixes 2000-10-12 17:19 robert * libmp3lame/i386/cpu_feat.nas: CPU feature code using NASM 2000-10-12 17:18 robert * Makefile.MSVC, libmp3lame/Makefile.in, libmp3lame/util.c: CPU feature detection code now using NASM 2000-10-12 08:59 shibatch * libmp3lame/: psymodel.c, quantize.c, quantize_pvt.c, util.h: Add two new features to --nspsytune. 1. New block type selecting algorithm. 2. Improved noise shaping at high bitrate CBR. Turned on by -q1 --nspsytune. 2000-10-12 00:50 robert * Makefile.MSVC: it's getting better :-) 2000-10-12 00:49 robert * frontend/parse.c: BUG fix in case LAME compiled without GTK, then called with -g 2000-10-11 23:08 robert * libmp3lame/: Makefile.in, quantize_pvt.c, util.c: fixes for Frank's ATH 2000-10-11 18:45 robert * include/lame.h, libmp3lame/lame.c: added alternative to lame_encode_finish: - lame_encode_flush, does the same as lame_encode_finish but will not free lame internal buffers - lame_close, will free lame internal buffers So the following is equivalent to lame_encode_finish lame_encode_flush() lame_close() But this adds the possibility to get some more analyzing after all frames are encoded. Suggested to use with lame_bitrate_hist() lame_stereo_mode_hist() 2000-10-11 17:54 robert * libmp3lame/: encoder.c, lame.c, util.c, util.h: simple statistics (histogram) added, problem: lame_encode_finish() also frees internal buffer solution: two new functions splitting lame_encode_finish() into lame_encode_flush() and lame_close() 2000-10-10 23:18 pfk * libmp3lame/util.c: Additional ATH calculation (enabled by KLEMM_01). 2000-10-10 20:26 robert * libmp3lame/: lame.c, takehiro.c: use of MMX should be safe on non MMX CPUs now, but this will not work on Microsoft platforms. We will have to adapt the assembler routines for the MS assembler or for NASM. 2000-10-10 19:36 robert * Makefile.MSVC, libmp3lame/util.c: Makefile work 2000-10-10 18:34 robert * libmp3lame/lame.c: cut'n'paste devil :( 2000-10-10 18:28 robert * libmp3lame/: lame.c, util.c, util.h: Frank's CPU feature detection code added 2000-10-10 17:59 afaber * Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.h, frontend/brhist.c, libmp3lame/VbrTag.c, libmp3lame/libmp3lame.dsp: MSVC Win32 updates, added Alpha Beta version numbers to DLL version structure (should be backward compatible) 2000-10-10 05:31 markt * TODO: notes about what needs to be done for configure 2000-10-09 19:55 markt * libmp3lame/: encoder.h, lame-analysis.h: [no log message] 2000-10-09 19:55 markt * TODO, frontend/timestatus.c, include/lame.h: generic cleanup 2000-10-09 19:42 markt * TODO: frame analyzer now works with ./configure, at least for linux 2000-10-09 19:29 markt * Makefile.B32, Makefile.DJGPP, Makefile.MSVC, TODO, configure, configure.in, frontend/get_audio.c, frontend/get_audio.h: attept to fix Makefiles.B32, DJGPP, MSVC. 2000-10-09 16:27 markt * libmp3lame/lame-analysis.h: [no log message] 2000-10-09 16:23 markt * Makefile.in, Makefile.unix, aclocal.m4, configure, configure.in, frontend/Makefile.in, frontend/main.h, libmp3lame/lame-analysis.h: moved mp3x -> analyzer (name was clashing with executable name) work on configure to get mp3x to compile (not yet done) but gtk stuff in configure.in now working 2000-10-09 14:38 markt * libmp3lame/lame.c: added a comment about downsampling 2000-10-08 20:08 markt * frontend/main.c, frontend/timestatus.c, include/lame.h, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/encoder.c, libmp3lame/lame.c: cleaned up VBR tag stuff 2000-10-08 19:43 markt * frontend/get_audio.c, frontend/get_audio.h, frontend/main.c, frontend/main.h, frontend/mp3rtp.c, frontend/parse.c, frontend/parse.h, frontend/timestatus.c, frontend/timestatus.h, include/lame.h, libmp3lame/lame.c, libmp3lame/version.c, libmp3lame/version.h: lots of changes, just trying to get things to compile. 2000-10-08 17:48 markt * libmp3lame/id3tag.h: Trying to add id3tag.h again. 2000-10-07 08:25 robert * lame4dos.bat: bug fixes by Alexander Stumpf 2000-10-07 05:04 markt * libmp3lame/: id3tag.c, util.h: missing id3tag.h include files for util.h, id3tag.c 2000-10-07 05:00 markt * INSTALL, Makefile.unix, Dll/LameDLLInterface.htm, frontend/main.c, frontend/main.h, include/lame.h, libmp3lame/id3tag.c, libmp3lame/lame.c, libmp3lame/util.c, libmp3lame/util.h: id3tag_spec made it back into lame.h. deleted. frameNum has to be in the library - the front end has no way of correctly counting frames unless it parses the mp3 output headers. totalframes should also probably be in the library. 2000-10-06 21:16 florian * Makefile.in, configure, configure.in, frontend/Makefile.in, libmp3lame/Makefile.in: minor changes for install and uninstall 2000-10-06 13:19 takehiro * libmp3lame/: id3tag.c, lame.c, util.h: quick fix, maybe work but not checked hard 2000-10-06 13:19 takehiro * frontend/main.c, include/lame.h: quick fix, I don't check this 2000-10-06 00:55 markt * libmp3lame/: id3tag.c, lame.c, util.h: id3tag cleanup 2000-10-06 00:54 markt * frontend/parse.c, include/lame.h: id3 stuff cleaned up. id3 related strucs made internal to the library 2000-10-05 19:53 cisc * frontend/: get_audio.c, get_audio.h: small correction 2000-10-05 05:18 markt * TODO, frontend/Makefile.in: [no log message] 2000-10-05 05:13 markt * Makefile.in, configure, configure.in, libmp3lame/Makefile.in: more configure work. 2000-10-05 04:50 markt * testcase.mp3: updated testcase 2000-10-05 04:49 markt * Makefile.in, libmp3lame/psymodel.c: added comment about Naoki's blocktype bug fix. also, for JSTEREO but with the '-d' option, L and R channels can have different block types, so we cant just look at the block type for channel 0 2000-10-05 04:31 markt * Makefile.in, frontend/Makefile.in: forgot to add Makefile.in 2000-10-04 22:37 robert * Lame.vbs: needs Windows Script >= 5.1, donated by Ralf Kempkens 2000-10-04 17:13 afaber * Dll/Example.dsw, Dll/MP3EncDll.dsp, libmp3lame/libmp3lame.dsp, mpglib/mpglib.dsp: MSVC project update(s) to new layout of the libmp3lame files 2000-10-04 12:48 shibatch * libmp3lame/psymodel.c: Bugfix of long block pre-echo control. 2000-10-04 12:13 takehiro * libmp3lame/i386/: choose_table.nas, fft.nas, fft3dn.nas, fftfpu.nas, fftsse.nas, ffttbl.nas, nasm.h: moved i386 directory 2000-10-04 04:26 markt * libmp3lame/Makefile.in: [no log message] 2000-10-04 04:23 markt * configure, configure.in: make still does not work. some kind of infinite loop 2000-10-04 04:00 markt * Makefile.unix: more configure work 2000-10-04 03:54 markt * Makefile.in, Makefile.unix, VbrTag.c, VbrTag.h, amiga_mpega.c, bitstream.c, bitstream.h, configure, configure.in, debugscalefac.c, encoder.c, encoder.h, fft.c, fft.h, id3tag.c, l3side.h, lame-analysis.h, lame.c, machine.h, mpglib_interface.c, newmdct.c, newmdct.h, psymodel.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, reservoir.c, reservoir.h, tables.c, tables.h, takehiro.c, util.c, util.h, vbrquantize.c, version.c, version.h, vorbis_interface.c, libmp3lame/Makefile.am, libmp3lame/Makefile.in, libmp3lame/VbrTag.c, libmp3lame/VbrTag.h, libmp3lame/amiga_mpega.c, libmp3lame/bitstream.c, libmp3lame/bitstream.h, libmp3lame/debugscalefac.c, libmp3lame/encoder.c, libmp3lame/encoder.h, libmp3lame/fft.c, libmp3lame/fft.h, libmp3lame/id3tag.c, libmp3lame/l3side.h, libmp3lame/lame-analysis.h, libmp3lame/lame.c, libmp3lame/machine.h, libmp3lame/mpglib_interface.c, libmp3lame/newmdct.c, libmp3lame/newmdct.h, libmp3lame/psymodel.c, libmp3lame/psymodel.h, libmp3lame/quantize.c, libmp3lame/quantize.h, libmp3lame/quantize_pvt.c, libmp3lame/quantize_pvt.h, libmp3lame/reservoir.c, libmp3lame/reservoir.h, libmp3lame/tables.c, libmp3lame/tables.h, libmp3lame/takehiro.c, libmp3lame/util.c, libmp3lame/util.h, libmp3lame/vbrquantize.c, libmp3lame/version.c, libmp3lame/version.h, libmp3lame/vorbis_interface.c: Moved everything to libmp3lame. worked on configure, but not quite working. 2000-10-04 03:01 markt * frontend/aclocal.m4, frontend/configure, frontend/configure.in, mpglib/configure, mpglib/configure.in: removed more configure files in subdirectories. There should only be one ./configure, in the main directory 2000-10-04 02:57 markt * configure, configure.in, frontend/get_audio.c, frontend/get_audio.h, frontend/timestatus.c, frontend/timestatus.h: more configure work 2000-10-04 01:07 markt * configure, configure.in, frontend/Makefile.in: more configure patches for frontend. 2000-10-04 01:02 markt * TODO, configure, configure.in, frontend/configure: new configure that doesn't run configure in all the subdirectories! 2000-10-03 22:08 afaber * README.WINGTK, lamelib.dsp, frontend/lame.dsp, frontend/lame.dsw, libmp3lame/libmp3lame.dsp, mpglib/mpglib.dsp: Re-organized some of the MSVC project files, fixes to compile mp3x again on Win32 platform 2000-10-03 17:56 robert * fft.c: removed unused includes 2000-10-03 10:32 robert * fft.c, fft.h, lame.c, psymodel.c, quantize.c, quantize_pvt.c, util.h: fft.c now thread safe !? 2000-10-03 09:44 robert * encoder.c, newmdct.c, newmdct.h: removed redundancies 2000-10-03 09:43 robert * testcase.mp3: updated testcase for LAME 3.88 alpha 1 2000-10-03 04:07 markt * INSTALL: Some configure options are for the library, some are for the front end. How do we pass front end options to frontend/configure? 2000-10-03 03:57 markt * Makefile.in: [no log message] 2000-10-02 10:15 markt * Makefile.in: make -> $(MAKE) 2000-10-02 09:00 markt * quantize_pvt.h: Fix for winamp bug. (commented out for now) 2000-10-02 06:20 markt * aclocal.m4, configure, configure.in, frontend/configure, frontend/configure.in: configure updates 2000-10-01 19:05 afaber * lamelib.dsp, frontend/lame.dsp, mpglib/mpglib.dsp: Adapted project file in order to compile it again with the MSVC compiler 2000-10-01 18:34 markt * Makefile.in: [no log message] 2000-10-01 18:25 markt * INSTALL, Makefile.in, id3tag.c, lame-analysis.h, lame.c, frontend/Makefile.in, frontend/configure, frontend/configure.in, frontend/main.c, frontend/parse.c, include/lame-analysis.h, include/lame-id3tag.h, include/lame.h: trying to move decoding back into library 2000-10-01 17:58 afaber * frontend/get_audio.c: Make it compile again with MSVC compiler 2000-10-01 17:17 markt * frontend/: gpkplotting.c, gpkplotting.h, gtkanal.c, main.c, mp3x.c: moved GTK frame analyzer stuff into mp3x 2000-10-01 15:29 takehiro * Makefile.in, aclocal.m4, configure, configure.in, mpglib_interface.c, vorbis_interface.c, frontend/Makefile.in, frontend/get_audio.c, frontend/main.c, frontend/vorbis_interface.c, mpglib/Makefile.in, mpglib/configure, mpglib/configure.in, mpglib/main.c: more modularization work. VORBIS and mpglib interface is now in the libmp3lame library. functions in these files are wrapper of mpglib/libvorbis. I think it is ok to include them in libmp3lame. 2000-10-01 15:19 takehiro * VbrTag.c: merged VbrTag.h into lame.h 2000-10-01 15:03 takehiro * encoder.c, lame.c, util.h, Dll/BladeMP3EncDLL.c, frontend/get_audio.c, include/lame.h: merged VbrTag.h into lame.h 2000-10-01 11:28 afaber * mpglib/: common.c, common.h, dct64_i386.c, decode_i386.c, interface.c, interface.h, layer1.c, layer1.h, layer2.c, layer2.h, layer3.c, layer3.h, main.c, mpg123.h, mpglib.dsp, mpglib.h, dct64_i386.h, decode_i386.h: More MPGLIB cleanup, got rid of the global mpstr struct gmp (in order to make lib thread safe) 2000-10-01 10:40 afaber * mpglib/: common.c, common.h, decode_i386.c, interface.c, layer3.c, mpg123.h: Cleanup of mpg123.h file (still need to get rid of the dirty extern gmp hack) 2000-10-01 10:05 afaber * mpglib/: layer1.c, mpg123.h: Removed unused stuff in MPG123.h file, removed stuff that was commented out in Layer1.c 2000-10-01 10:00 afaber * mpglib/: mpg123.h, tabinit.c: Removed some double/float warnings, removed disable warnings pragma for MSVC compiler 2000-10-01 09:52 takehiro * lame.c, frontend/main.c: moved main_crc_init from frontend to library 2000-10-01 09:51 afaber * mpglib/: common.c, common.h, dct64_i386.c, decode_i386.c, interface.c, layer2.c, layer3.h, mpg123.h, mpglib.dsp, tabinit.c, tabinit.h: Reorganized some of the function prototypes, removed non existing function prototypes from common.h 2000-10-01 09:32 takehiro * libmp3lame/.cvsignore: initial check in for libmp3lame 2000-10-01 09:29 takehiro * libmp3lame/Makefile.am: check in for the feauture... 2000-10-01 09:09 afaber * bitstream.h, frontend/main.c: Added void main_CRC_init (void) function prototype in bitstream.h 2000-10-01 06:24 takehiro * frontend/: Makefile.in, mp3x.c: making frameanalyzer problem fixed 2000-10-01 04:56 markt * util.c: added Frank's normalization of Blackman filter coefficients. This had no effect on any of my resample test cases. 2000-09-30 15:32 markt * STYLEGUIDE: more notes on identation and int in STYLEGUIDE 2000-09-30 15:09 afaber * id3tag.c: fixed signed/unsigned mismatch 2000-09-30 14:50 markt * HACKING, bitstream.c, bitstream.h, util.c, util.h: added stuff in HACKING on how to handle global data moved freegfc() into util.c 2000-09-30 14:28 markt * util.c: number of pre-computed convolution windows determined dynamically. (storage still needs to malloc'd and free'd in lame_encode_finish). 2000-09-30 14:17 robert * Makefile.in: small fix 2000-09-30 13:14 afaber * Dll/: BladeMP3EncDLL.c, MP3EncDll.dsp: Changes in order to get it compile on a Win32 platform 2000-09-30 12:49 afaber * lamelib.dsp, VbrTag.h, lame.dsp, lame.dsw, frontend/brhist.c, frontend/get_audio.c, frontend/lame.dsp, frontend/lame.dsw, frontend/timestatus.c, mpglib/mpglib.dsp: Changes in order to get it compile on a Win32 platform 2000-09-30 08:29 takehiro * frontend/parse.c: renamed some functions 2000-09-30 08:21 takehiro * doc/html/: contributors.html, examples.html, history.html, id3.html, index.html, lame.css, modes.html, node6.html, switchs.html: new document for 3.87 from Gaby. 2000-09-30 08:15 takehiro * frontend/: configure, configure.in: debug about gtk detection 2000-09-30 07:54 takehiro * lame.c, frontend/get_audio.c, frontend/main.c, frontend/main.h, frontend/mp3rtp.c, frontend/parse.c, include/lame.h: removed outpath from library. 2000-09-30 06:58 takehiro * bitstream.c, bitstream.h, util.c, util.h: moved some code from util to bitstream 2000-09-30 04:40 markt * VbrTag.c, lame.c, frontend/vorbis_interface.c: re-enabled id3v2 tag and Xing vbr header 2000-09-29 18:16 takehiro * lame.c, frontend/get_audio.c, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/timestatus.c, include/lame.h: "silent" and "brhist" is moved to frontend 2000-09-29 18:07 takehiro * lame.c, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/timestatus.c, include/lame.h: "update_interval" is moved to frontend 2000-09-29 17:49 takehiro * encoder.c, lame.c, psymodel.c, quantize.c, vbrquantize.c, frontend/main.c, frontend/parse.c, include/lame-analysis.h, include/lame.h, frontend/mp3x.c: changed from "gtkflag" to "analysis", because it is not only for gtk. 2000-09-29 17:48 takehiro * frontend/timestatus.c: oops, timestatus not correctly displayed 2000-09-29 17:43 takehiro * id3tag.c, lame.c, quantize.c, quantize_pvt.c, util.h, vbrquantize.c, frontend/gtkanal.c, frontend/main.c, frontend/mp3x.c, frontend/parse.c, include/analysis.h, include/id3tag.h, include/lame-analysis.h, include/lame-id3tag.h, include/lame.h, mpglib/layer3.c, mpglib/mpglib.h: OK, Florian, I renamed include file avoid confusing. (it's so generic and not likely to be unique) 2000-09-29 17:31 takehiro * Makefile.in, encoder.c, lame.c, parse.c, psymodel.c, util.c, util.h, vbrquantize.c, frontend/Makefile.in, frontend/brhist.c, frontend/get_audio.c, frontend/get_audio.h, frontend/gtkanal.c, frontend/main.c, frontend/main.h, frontend/parse.c, frontend/parse.h, frontend/timestatus.c, frontend/vorbis_interface.c: 1. timestatus things are moved to frontend(maybe complete ?) 2. input file handling is moved to frontend(so the file input API is removed) 2000-09-29 04:51 markt * frontend/brhist.c, frontend/get_audio.c, frontend/get_audio.h, mpglib/main.c: removed analysis.h from get_audio.c typo in brhist.c 2000-09-28 23:31 robert * lame4dos.bat: improved lame.bat for 4DOS users, donated by Alexander Stumpf 2000-09-28 16:36 takehiro * Makefile.in, VbrTag.c, brhist.c, brhist.h, configure, configure.in, encoder.c, get_audio.c, get_audio.h, gpkplotting.c, gpkplotting.h, gtkanal.c, id3tag.h, ieeefloat.c, ieeefloat.h, lame.c, lametime.c, lametime.h, main.c, mp3rtp.c, mp3x.c, parse.c, portableio.c, portableio.h, psymodel.c, quantize.c, quantize_pvt.c, rtp.c, rtp.h, tables.c, timestatus.c, timestatus.h, util.c, util.h, vbrquantize.c, version.c, version.h, vorbis_interface.c, frontend/.cvsignore, frontend/Makefile.in, frontend/aclocal.m4, frontend/brhist.c, frontend/brhist.h, frontend/configure, frontend/configure.in, frontend/get_audio.c, frontend/get_audio.h, frontend/gpkplotting.c, frontend/gpkplotting.h, frontend/gtkanal.c, frontend/ieeefloat.c, frontend/ieeefloat.h, frontend/lametime.c, frontend/lametime.h, frontend/main.c, frontend/mp3rtp.c, frontend/mp3x.c, frontend/parse.c, frontend/portableio.c, frontend/portableio.h, frontend/rtp.c, frontend/rtp.h, frontend/timestatus.c, frontend/timestatus.h, frontend/vorbis_interface.c, include/id3tag.h, include/lame.h, mpglib/Makefile.in, mpglib/layer3.c, mpglib/mpglib.h: moved frontend staffs into frontend/ Need to debug vorbis/mpglib/analyzer/bitrate histgram. still long way to go... HAVEGTK is changed ANALYSIS(library side) and HAVEGTK(frontend side) BRHIST is deleted from library. all the bitrate histogram works are now in frontend(but not works properly, yet). timestatus things are also moved to frontend. parse.c is now out of library. 2000-09-27 12:05 takehiro * include/analysis.h, gtkanal.h: moved gtkanal.h to include/analysis.h 2000-09-27 04:17 florian * Makefile.in: fixed make install -> move of lame.h broke it. 2000-09-26 17:47 takehiro * Makefile.in, gtkanal.h: more clean up and debug "make clean" 2000-09-26 17:35 takehiro * Makefile.in: moved more staff out of libmp3lame 2000-09-26 17:28 takehiro * Makefile.in: removed brhist.o etc from library 2000-09-26 17:25 takehiro * include/lame.h: lame.h moved to include 2000-09-26 17:24 takehiro * timestatus.c: little clean up 2000-09-26 17:03 takehiro * Makefile.in, configure, configure.in, lame.h: 1 moved lame.h into include/ 2 modularized work with mpglib 2000-09-26 16:59 cisc * amiga_mpega.c: Mark, you broke lame_decode_initfile(), what were you thinking? ;) .. anyways, fixed, and added new mp3data struct variables... 2000-09-26 15:48 takehiro * mpglib/: .cvsignore, Makefile.in, common.c, configure, configure.in, dct64_i386.c, decode_i386.c, interface.c, layer3.c, main.c, tabinit.c: configure support and more modularized work 2000-09-26 15:47 takehiro * mpglib/Makefile: now this is generated by configure 2000-09-26 05:22 markt * version.h: CVS is now 3.88 alpha 1 2000-09-26 04:49 markt * version.h: updated to 3.87 beta 2000-09-26 04:48 markt * get_audio.c, get_audio.h, gtkanal.c, timestatus.c, mpglib/main.c: removed all references to gfc-> from get_audio.c this was needed if we are going to move get_audio.c out of libmp3lame and into the front end code. 2000-09-26 01:00 markt * HACKING, STYLEGUIDE: [no log message] 2000-09-26 00:55 markt * CodingStyle.c, lametype.h: Removed two files 2000-09-26 00:09 markt * amiga_mpega.c, get_audio.c, lame.c, lame.h, timestatus.c, timestatus.h, util.h: when input file was a mp3, it was trashing a bunch of variables (mode, bitrate, etc..) 2000-09-25 21:37 robert * Makefile.MSVC: MMX choose table support, needs NASM (can be disabled) 2000-09-25 21:23 florian * configure, configure.in: changed default installation prefix to /usr (/usr/local/lib doesn't seem to be in default linker path) 2000-09-25 20:58 florian * Makefile.in: fixed shared lib (runtime linker information) 2000-09-25 15:20 markt * Makefile.in: removed ?= from makefile 2000-09-25 14:36 shibatch * psymodel.c: A small bugfix of --nspsytune. 2000-09-25 02:13 florian * configure, Makefile.in, configure.in: cleaner version handling of libmp3lame.so, uninstall target in Makefile 2000-09-25 00:30 markt * id3tag.c: fixed genre bug in id3tag.c 2000-09-24 22:59 markt * id3tag.c, vbrquantize.c: removed yet another unsigned loop counter 2000-09-24 21:53 robert * Makefile.MSVC: enabled Takehiro's IEEE hack 2000-09-24 14:59 robert * configure, configure.in: BUG fixed, which prevented using Layer1/2 decoding abilities 2000-09-24 14:34 robert * encoder.c, lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, util.h, vbrquantize.c: code cleanup and very little speedup 2000-09-24 12:38 robert * quantize.c: minor RH_AMP tweak, and once again, do not use tabulator within this file 2000-09-24 12:29 robert * quantize.c: please do not use tabulators within this file (better in no files) 2000-09-24 12:22 robert * VbrTag.c: minor BUG fix for MPEG-2(.5) 2000-09-24 11:39 takehiro * quantize.c: sorry, scalefac_scale did not have a bug. that was my compiler bug... 2000-09-24 10:38 afaber * mpglib/interface.c: Fixed MP1/2 decoding problem, for files that were encoded with a CRC 2000-09-24 01:32 markt * get_audio.c: minor fix to mp3 header parsing 2000-09-23 23:36 afaber * bitstream.c: removed unused variable bits 2000-09-23 23:36 afaber * id3tag.c: fixed signed/unsigned mismatch, added bitstream.h include file 2000-09-23 22:31 markt * VbrTag.c, bitstream.c, bitstream.h, id3tag.c, id3tag.h, lame.c, lame.h, main.c, parse.c: id3v1 and id3v2 tags now get written directly into the bitstream instead of into the output file. The only file I/O left in libmp3lame will be the VBR tag. 2000-09-23 21:13 markt * get_audio.c, lame.h, mpglib/main.c: removed lame_decode_fromfile() calls from the API, moved them into get_audio.c 2000-09-23 20:08 markt * lame.h, mpglib/main.c: some mpglib restructering. All mp3 routines which work with files now only make calls to lame_decode_* that are in the API. 2000-09-23 14:48 markt * VbrTag.c: bug in Xing header for MPEG2.5 fixed 2000-09-23 09:07 takehiro * quantize.c, quantize_pvt.c, util.c, util.h: workaround for subblock_gain and scalefac_scale artifact. I hope this will fix -q1 problems. 2000-09-23 02:11 markt * version.c: [no log message] 2000-09-23 01:23 markt * mpglib/main.c: [no log message] 2000-09-23 01:23 markt * VbrTag.c, VbrTag.h, lame.h, parse.c, util.c, util.h: bug fixed in decoding: if syncword found in Xing VBR header toc, it would confuse things. Also fixed overflow in vbrtag.c, and changed size of xing vbr header to 128kbs. This will make non-vbr aware players give a more reasonable playing time estimate. 2000-09-23 00:51 robert * psymodel.c: minor fix 2000-09-22 22:54 shibatch * quantize.c, quantize_pvt.c: Minor bugfixes of --nspsytune. Frame analyzer works correctly with --nspsytune. 2000-09-21 23:55 shibatch * parse.c, psymodel.c, quantize.c: Tweaks to --nspsytune. This improves CBR quality. 2000-09-21 16:50 afaber * Dll/LameDLLInterface.htm: Updated lame_enc.dll documentation file 2000-09-20 22:56 takehiro * Makefile.in, configure, configure.in, encoder.c, lame.c, timestatus.c: more configure updates. not compiling/linking BRHIST routine when it is disabled. 2000-09-20 20:50 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h, Example.cpp: Added bNoRes option in LHV1 structure, updated example to have default settings as in testcase.wav test case 2000-09-20 19:08 afaber * brhist.c, lame.h: Changed BRHST un-signed variables to signed variables 2000-09-20 18:50 afaber * Dll/BladeMP3EncDLL.c: High quality was not enabled 2000-09-20 18:49 afaber * Dll/MP3EncDll.dsp: Added TAKEHIRO_IEEE754_HACK define to project file 2000-09-20 18:41 afaber * lame.dsp: Added TAKEHIRO_IEEE754_HACK define to project file 2000-09-20 16:40 robert * quantize.c: VBR old quality tuning for --raise-smr 2000-09-19 14:40 takehiro * Makefile.in: update glibc inline math error detection 2000-09-19 14:32 takehiro * configure, configure.in: oops, needless gabage removed 2000-09-19 14:26 takehiro * configure: newer configure script made by configure.in 2000-09-19 14:12 takehiro * Makefile.in, configure.in: not compiling/linking mpglib code when it disabled. not compiling/linking gtk related code when it disabled. control LAYER1 and LAYER2 decoding function with --enable-decode-layer1 and --enable-decode-layer2 autodetect math inline bug of glibc < 2.1.3 2000-09-19 14:11 robert * quantize_pvt.c: modified --ATHlower to not touch sfb21 2000-09-19 14:06 takehiro * .cvsignore: ignore files related configure script and library itself 2000-09-19 05:33 markt * mpglib/main.c: got rid of a size_t in main.c 2000-09-19 05:19 markt * lame.dsp (MSVC6), Dll/MP3EncDll.dsp: updated msvc6 project files 2000-09-19 04:54 markt * mpglib/main.c: removed unsigned int being used as a loop counter. 2000-09-19 04:18 markt * encoder.h, lame.c, util.c, util.h: updated filter settings 2000-09-18 22:29 afaber * Dll/Example.cpp: Bug fixes in example file 2000-09-18 21:57 markt * testcase.mp3, util.c, util.h: changed BPC to 160 on Frank's advice. This means pre-compute 160 filter-sinc-windows, instead of just 16. Should also fix the aliasing problem shown in mp3.com bulliten board 2000-09-18 21:30 markt * Makefile.B32, Makefile.DJGPP, Makefile.in, Makefile.unix: Makefiles updated to reflect that all the ASM code has been removed and replaced with IEEE754_HACK. I'm glad to see it gone - but I didn't remove it! 2000-09-18 21:28 markt * STYLEGUIDE, VbrTag.c, brhist.c, get_audio.c, machine.h, quantize.c, quantize_pvt.c, takehiro.c, vorbis_interface.c: minor code cleanup. 2000-09-18 20:53 afaber * lame.dsp: Fixed library problem in ReleaseGTK mode 2000-09-18 20:09 markt * config.log: removed config.log from repository 2000-09-18 19:43 afaber * brhist.c: Fixes for Cygwin compiler 2000-09-18 18:52 markt * INSTALL, Makefile.in, Makefile.unix, config.log: more configure updates 2000-09-18 18:34 markt * INSTALL, INSTALL.configure, Makefile, Makefile.in, Makefile.unix, aclocal.m4, confdefs.h, config.guess, config.log, config.sub, configure, configure.in, install-sh: added configure stuff from Florian! original Makefile is now in Makefile.unix 2000-09-18 01:48 cisc * util.c, vbrquantize.c, version.h: warning fixes & bumped alpha version 2000-09-17 23:25 markt * Makefile, lame.h: added note about shared library 2000-09-17 22:25 markt * USAGE, encoder.c, lame.c, lame.h, parse.c: --scale option added 2000-09-17 21:47 afaber * bitstream.c, get_audio.c, quantize.c: removed unecessary (int) casts 2000-09-17 21:21 markt * HACKING, STYLEGUIDE, lame.h: some editing 2000-09-17 21:04 afaber * encoder.c, lame.dsp: Enabled BRHIST in MSVC project file, and changed calls to brhist functions in encoder.c 2000-09-17 20:55 markt * encoder.c, takehiro.c: forgot to add encoder.c to cvs 2000-09-17 20:53 markt * bitstream.c, machine.h, util.c, util.h: more 'unsigned's removed 2000-09-17 20:52 afaber * brhist.c, brhist.h, lame.c, lame.h, timestatus.c: Moved BRHIST variables to lame_global_flags structure, so a library (like lame_enc.dll) can have access to the histogramming data 2000-09-17 20:20 markt * lame.c, testcase.mp3, version.c: resampling nolonger needs to quantize back to integers since internal representation of PCM samples is now floating point 2000-09-17 19:50 markt * Makefile, fft.c, gtkanal.c, lame.c, machine.h, newmdct.c, newmdct.h, psymodel.c, psymodel.h, testcase.mp3, util.c, util.h, mpglib/main.c: sample_t changes updated, sample_t = FLOAT 2000-09-17 18:52 markt * INSTALL, Makefile, Makefile.B32, Makefile.DJGPP, Makefile.MSVC, encoder.h, lame.c, lame.dsp, lametime.h, main.c, timestatus.h, Dll/MP3EncDll.dsp: added encoder.c which has the core encoding function. fixed sample_t stuff 2000-09-17 17:55 robert * Makefile, l3side.h, quantize.c, quantize_pvt.c, takehiro.c: not everyone has access to Vorbis in Mark's home directory ;-) 2000-09-17 17:54 afaber * mpglib/main.c: Changed return value from zero to -1 when EOF has been reached 2000-09-17 16:19 takehiro * quantize.c: added #include 2000-09-17 10:07 takehiro * get_audio.c: trivial warning fix 2000-09-17 09:32 takehiro * quantize_pvt.c: removed old assembler code 2000-09-17 09:30 takehiro * main.c: quick hack for "sample_t is not defined" 2000-09-17 05:00 cisc * get_audio.h, version.c: updated some libsndfile related stuff 2000-09-17 04:19 cisc * VbrTag.h, bitstream.h, brhist.h, encoder.h, fft.h, get_audio.h, gpkplotting.h, gtkanal.h, id3tag.h, ieeefloat.h, l3side.h, lame.h, lametime.h, lametype.h, machine.h, newmdct.h, portableio.h, psymodel.h, quantize.h, quantize_pvt.h, reservoir.h, rtp.h, tables.h, timestatus.h, util.h, version.h: conformed all this-is-included-defines to match 'project_file_name' style 2000-09-16 22:52 afaber * lame.dsp, reservoir.c, reservoir.h, tables.c, tables.h, timestatus.c, timestatus.h, util.c, util.h, vbrquantize.c: Changed lame header/source to LGPL license where necessary, added LGPL header to files when applicable 2000-09-16 22:39 afaber * encoder.h, fft.h, get_audio.c, get_audio.h, gpkplotting.c, gpkplotting.h, gtkanal.c, gtkanal.h, l3side.h, lametime.c, lametime.h, newmdct.h, parse.c, psymodel.h, quantize.c, quantize.h, quantize_pvt.c, quantize_pvt.h, Dll/MP3EncDll.dsp: Changed lame header/source to LGPL license where necessary, added LGPL header to files when applicable 2000-09-16 22:16 afaber * fft.c, machine.h, psymodel.c: Removed the float/double compiler warnings 2000-09-16 22:08 afaber * Dll/: BladeMP3EncDLL.h, MP3EncDll.dsp: Small changes to the lame_enc project settings 2000-09-16 21:52 afaber * brhist.c, brhist.h, get_audio.c, gtkanal.c, lametime.h, main.c, psymodel.c, quantize.c, takehiro.c, timestatus.c, vbrquantize.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/main.c: Removed a bunch of signed/unsigned compiler warnings and removed const/no const assignements compiler warnings welcome to const hell Frank! 2000-09-16 21:07 markt * Makefile, quantize_pvt.c: shared lib support, IEEE stuff the default on i386 2000-09-16 21:07 cisc * amiga_mpega.c: added mode & mode_ext support to mp3data struct, like mpglib/main.c 2000-09-16 21:06 afaber * lame.dsp: Added lametime.c and lametime.h files to project 2000-09-16 19:03 markt * HACKING, STYLEGUIDE: style updates 2000-09-16 18:54 markt * STYLEGUIDE: adding STYLEGUIDE 2000-09-16 18:54 markt * CodingStyle.c, LICENSE, USAGE, bitstream.c, get_audio.c, gtkanal.c, id3tag.c, l3side.h, lame.c, lame.h, lametime.c, machine.h, parse.c, quantize.c, quantize_pvt.c, quantize_pvt.h, tables.c, tables.h, takehiro.c, testcase.mp3, timestatus.c, util.h, vbrquantize.c, version.c, mpglib/common.h, mpglib/interface.h, mpglib/main.c: got rid of a bunch of unsigned variables. 2000-09-16 13:59 afaber * brhist.c, psymodel.c, quantize_pvt.c, takehiro.c, vbrquantize.c: Removed the signed/unsigned mismatch compiler warnings 2000-09-16 13:30 afaber * bitstream.c: Removed the signed/unsigned mismatch compiler warnings 2000-09-16 12:53 afaber * mpglib/layer1.c: Switched include from mpg123.h to common.h to avoid compiler warnings 2000-09-16 00:43 cisc * psymodel.c, timestatus.c: warning fixes 2000-09-15 16:36 shibatch * psymodel.c: Tweaks to --nspsytune. 2000-09-15 15:01 takehiro * quantize_pvt.c: oops, foolish bug ... 2000-09-15 13:03 takehiro * quantize_pvt.c: TAKEHIRO_IEEE754_HACK now C99 aliasing rule compliant. it runs correctly with "-fstrict-aliasing" (GCC) 2000-09-14 03:32 markt * brhist.c, mpglib/mpg123.h: fixed VBR display 2000-09-13 23:31 markt * Makefile, quantize.c, reservoir.c: NORES_TEST turned back of 2000-09-13 18:46 afaber * Dll/BladeMP3EncDLL.c: Fixed bug in lame_enc.dll when using preset option, and return proper frame size when using MPEG-2 2000-09-13 18:24 afaber * mpglib/: common.c, common.h, interface.c, interface.h, layer2.c, layer3.c, main.c, mpg123.h, mpglib.dsp, mpglib.h: Added common.h and interface.h, and added the functions prototypes that should be in these files, instead of mpg123.h 2000-09-13 18:22 markt * util.c: precompute for filter turned back on 2000-09-13 18:19 markt * lame.c, util.c, util.h: replaced upsampling filter with 19 point blackman filter 2000-09-13 11:18 markt * parse.c: typo in documentation 2000-09-13 11:03 markt * Makefile, parse.c, testcase.mp3, vorbis_interface.c: fixed vorbis_interface.c so it would compile 2000-09-13 10:59 markt * Makefile, bitstream.c, fft.c, get_audio.c, lame.c, lame.h, psymodel.c: fixed some bugs introduced by frank. get_audio.c must count samples for .wav files. lame.c: disabling ATH is not the way to solve the problem Frank wants to solve 2000-09-13 09:23 robert * quantize.c: quality adjustment for VBR old to better use --raise-smr 2000-09-12 22:36 pfk * brhist.c, gtkanal.c, id3tag.c, lame.c, lametype.h, main.c, psymodel.c, quantize.c, quantize_pvt.c, tables.c, tables.h, takehiro.c, util.c, util.h, vbrquantize.c, vorbis_interface.c, mpglib/common.c, mpglib/huffman.h, mpglib/l2tables.h, mpglib/layer2.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpg123.h, mpglib/tabinit.c: added const to all constant tables, so that they are placed in write protected RAM or in ROM (standalone DSP version). The SEGFAULT be with you (instead of debugging for hours). Also some remarks instead of changes instead of code changes. Remove them if they are fully useless. 2000-09-12 20:47 robert * Makefile, lame.c, lame.h, parse.c, psymodel.c, quantize_pvt.c: added --raise-smr <0..1> a new toy to control quality 2000-09-12 18:20 pfk * Makefile, Makefile.B32, Makefile.DJGPP, Makefile.MSVC, bitstream.c, get_audio.c, lame.c, lame.h, lametype.h, parse.c, util.h, version.h, vorbis_interface.c, mpglib/main.c: Some bug fixes Activated lametime.c Two types of display update now possible (old and new, depends on Makefile) 2000-09-12 06:26 pfk * brhist.c, lame.c, lametype.h, version.c: brhist.c Changed display of percentages between 0.1 and 1 % lame.c: ??? version.h: include as less as possible lametype.h: First try to disentangle the #include jungle of lame (this style would be the immediate death for larger projects) 2000-09-12 00:47 markt * main.c, mpglib/l2tables.h, mpglib/layer2.h: al_table struct renamed al_table2 2000-09-11 20:33 shibatch * psymodel.c: --nspsytune uses additive masking. 2000-09-11 20:05 robert * psymodel.c: disabled "additive masking" in subband calculation 2000-09-11 20:04 robert * lame.c, lame.h, parse.c, quantize.c, quantize.h, quantize_pvt.c: experimental mix of VBR new and old available with --vbr-mtrh 2000-09-10 23:24 markt * HACKING: added rule #1 LAME style guide 2000-09-10 22:13 markt * doc/html/modes.html: modes.html was not in the repository 2000-09-10 21:45 markt * testcase.mp3, testcase.wav: made the test case a little longer (100k .wav file) 2000-09-10 21:27 markt * lame.h, parse.c, mpglib/huffman.h, mpglib/l2tables.h, mpglib/layer2.h: reverted mpglib routines back to original. please keep mpglib as close as possible to the mpg123/mpglib code that it is based on. Went back to display every 100 frames, which I prefer. 2000-09-10 20:54 markt * Makefile, lame.c, timestatus.c: went back to display every 100 frames. 2000-09-10 19:54 cisc * brhist.c: small adjustment 2000-09-10 19:52 cisc * version.c: correct includes for libsndfile prototypes 2000-09-10 18:05 pfk * Makefile, USAGE, brhist.c, brhist.h, fft.c, fft.h, lame.c, lame.h, version.h, mpglib/huffman.h: some minor changes. Start to introduce sample_t. Changed VBR display. 2000-09-10 13:11 pfk * fft.c, parse.c, psymodel.c, version.h, mpglib/l2tables.h, mpglib/layer2.h: fft.c: loop variables short => size_t/int layer2.h l2tables.h: formated, structure definition changed for (possible) speedup parse.c optimized sfb21 usage for presets 2000-09-09 23:00 pfk * get_audio.c, gtkanal.c, lametime.c, lametime.h, mpglib/common.c, mpglib/l2tables.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/mpg123.h: struct al_table {} <=> typedef struct {} al_table conflict removed lame/gtkanal.c: typecast of functions ptr's 2000-09-09 21:11 pfk * CodingStyle.c, Makefile, USAGE, lametime.c, lametime.h, mlame, mlame_corr.c, quantize_pvt.c, quantize_pvt.h, vbrquantize.c, version.c, version.h, mpglib/layer1.c, mpglib/layer2.c: Makefile: added option -pedantic USAGE: updated some remarks, added some remarks, kbs => kbps, HZ/hz => Hz, space between number and unit mlame: -mf => -mj uses mlame_corr mlame_corr: First try of a program which analyzes the total file and recommend flags quantize_pvt.*: made some arrays const asm => __asm__ version.* copied vom pfk1 tree mpglib/*.c added newline at the end of the file CodingStyle.c start of an CodingStyle Guide, pre-alpha lametime.* heavy system specific code should moved to this file, should not mixed with other code 2000-09-09 21:04 cisc * amiga_mpega.c: warning fix 2000-09-09 14:41 robert * bitstream.c: fixed debugging code 2000-09-09 11:40 takehiro * newmdct.c: sorry, back to old... 2000-09-09 11:22 robert * quantize.c: BUG fix for possible endless loop in RH_AMP code 2000-09-09 10:59 takehiro * newmdct.c: bit faster mdct. there's some difference caused by rounding problem, but i think this is OK. 2000-09-09 10:34 takehiro * bitstream.c: bit faster putbits 2000-09-09 10:28 takehiro * bitstream.c: small fix of debugging code 2000-09-08 19:28 robert * quantize.c: to combine VBR_rh with VBR_mt define RH_VBR_MTRH at compile time 2000-09-08 16:05 robert * quantize.c, quantize_pvt.c, quantize_pvt.h: merging branches pfk1 with main 2000-09-08 14:55 robert * gtkanal.h, quantize.c, quantize_pvt.c, quantize_pvt.h, vbrquantize.c: set_pinfo calcs noise and masking of its own 2000-09-08 12:17 robert * parse.c, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: substitution of lame_global_flags with lame_internal_flags 2000-09-08 11:22 robert * parse.c: Bug fix for automatic file type recognition back into MAIN branch 2000-09-08 10:04 shibatch * psymodel.c: A minor bugfix of mask_add(). 2000-09-07 23:37 pfk * mlame_corr.c: file to use with mlame to select different modes by pre analysing wav files. 2000-09-07 18:06 afaber * mpglib/mpglib.dsp: Cleanup project file a bit 2000-09-07 18:05 afaber * README.WINGTK: Small modification to the instruction, in order to compile/link with latest GTK/GDK libs 2000-09-07 18:04 afaber * lame.dsp: Changed project file to work with latest GTK/GDK libs 2000-09-07 17:40 afaber * Dll/BladeMP3EncDLL.c: Fixed problem in VBR WriteTag function (it did not compile, MP3 file stream was not closed properly, wrong file name was used) 2000-09-07 12:26 shibatch * psymodel.c, quantize_pvt.c: Tweaks to --nspsytune. 2000-09-06 23:19 robert * quantize.c (pfk1): modularization and clean-up finished 2000-09-06 18:02 markt * Makefile (pfk1): [no log message] 2000-09-06 07:50 shibatch * psymodel.c, quantize_pvt.c: updated --nspsytune. 2000-09-06 07:15 markt * Makefile, amiga_mpega.c, bitstream.c, brhist.c, fft.c, fft.h, get_audio.c, get_audio.h, gtkanal.c, gtkanal.h, lame.c, lame.h, main.c, mp3rtp.c, newmdct.c, newmdct.h, parse.c, psymodel.c, psymodel.h, quantize.c, quantize_pvt.c, quantize_pvt.h, reservoir.c, tables.c, tables.h, takehiro.c, timestatus.c, util.c, util.h, vbrquantize.c, version.c, version.h, vorbis_interface.c, mpglib/common.c, mpglib/decode_i386.c, mpglib/huffman.h, mpglib/interface.c, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpg123.h: LAME CVS reverted back to Aug 30 version. code before this can be checked out with: cvs update -r pfk1 2000-09-05 23:55 pfk * HACKING, Makefile, TODO, get_audio.c, lame.c, lame.h, mlame, parse.c, version.h, mpglib/README, mpglib/huffman.h, mpglib/layer1.c, mpglib/layer2.c: HACKING: add type proposals Makefile: layer 1 enabled mlame: flaw removed get_audio: C-Linkage problem solved layer1.c: bug fixed disabled decoding enabled, works for C/C++ huffman.c: read protect/scope protect tables using 'const'/'static' lame.h: Starting RPC support, 3 macros IN/OUT/INOUT defined Starting supported for szip compressed wave/aiff parse.c: detection of raw/wav/aiff input (proposal of RH) boolean bug fixed !=||!=||!= layer2.c: common layer1/layer2 buffer moved from layer2.c to layer1.c lame.c: bug fixed: -V9 switched to mono Auto switch to mono reported wrong compression ratio report of forced joint stereo usage *: Some spelling errors removed 2000-09-05 22:20 robert * quantize.c: more modularization and clean-up, some few more to come 2000-09-05 20:39 shibatch * psymodel.c: Tweaks to --nspsytune(table optimization). 2000-09-05 16:36 cisc * parse.c, mpglib/common.c, mpglib/interface.c, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c: quick fix to make mpglib compile, prolly still broken though. fixed mono bug in layer1.c? 2000-09-04 23:17 shibatch * psymodel.c: Tweaks to --nspsytune. 2000-09-04 19:56 robert * quantize.c: more cleanup in VBR_rh 2000-09-04 16:05 robert * quantize.c: more modularization work it is now possible to combine VBR_RH with VBR_MT 2000-09-03 22:33 cisc * brhist.c: small change 2000-09-03 19:10 robert * quantize.c: updated remarks 2000-09-03 17:21 pfk * get_audio.c, gtkanal.c, lame.h, main.c, mp3rtp.c, parse.c, util.c, util.h, version.h: some bugfixes, move some functionality to two simple functions. Added support of 24 and 32 bit BE and LE AIFF and WAV files (simple support, only using upper 16 bit) marking 3 areas which seems to be buggy. 2000-09-03 17:19 robert * quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: code cleanup in quantize_pvt.c 2000-09-03 15:06 robert * lame.c, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c: takehiro.c now free of lame_global_flags 2000-09-03 14:05 robert * quantize.c, quantize_pvt.c, quantize_pvt.h: code clean up 2000-09-03 13:06 pfk * Makefile, brhist.c, get_audio.c, get_audio.h, gtkanal.c, lame.c, lame.h, main.c, version.c, version.h: minor fixes get_audio: (simple) support of 24 bit PCM Replaced the different types of tabs by 3, 4 or 8 spaces 2000-09-03 12:42 shibatch * psymodel.c: Tweaks to --nspsytune. 2000-09-03 11:47 shibatch * psymodel.c, quantize_pvt.c: Tweaks to --nspsytune. Noise calculation using tonality is canceled. 2000-09-03 09:54 robert * tables.c: fix for i386/choose_table.nas, could not be linked 2000-09-03 06:50 cisc * lame.c: removed *extremely* annoying debug. fixed related bug? should be checked if mono encoding still works! 2000-09-03 06:48 cisc * get_audio.c: fixed conflicting prototype when LIBSNDFILE is defined 2000-09-02 18:06 robert * quantize_pvt.c: small fix to previous check in 2000-09-02 18:03 robert * gtkanal.h, quantize.c, quantize_pvt.c, quantize_pvt.h, vbrquantize.c: set_pinfo does now the noise calculation for the frame analyzer code cleanup 2000-09-02 15:36 pfk * mlame: extended functionality and feature fix 2000-09-02 13:36 pfk * main.c: bug fix. 2000-09-02 13:28 pfk * get_audio.c, main.c: Bug fix in final fwrite(). 2000-09-02 06:38 cisc * util.h: warning and error fixes 2000-09-02 05:42 cisc * mpglib/mpg123.h: It's important to remember the PARENT_IS_SLASH define when including files from previous dir. 2000-09-02 05:29 cisc * amiga_mpega.c, lame.c, util.c: warning and error fixes 2000-09-02 03:13 pfk * Makefile, get_audio.c, gtkanal.c, lame.c, lame.spec, psymodel.h, timestatus.c, util.c, util.h, vbrquantize.c, version.c, version.h, mpglib/l2tables.h, mpglib/layer2.c, mpglib/mpg123.h: Quick and Dirty: Now compilable with g++. Layer 1 and 2 decoding makes problems. structs and typedef structs with the same name. Must be patched. 2000-09-02 01:03 cisc * psymodel.c, quantize_pvt.c, timestatus.c: warning fixes 2000-09-01 23:28 pfk * Makefile, lame.c, lame.h, util.c, util.h, mpglib/layer1.c, mpglib/layer2.c: Bugfix for 9 kbps error 2000-09-01 23:28 robert * get_audio.c: small typo in remark 2000-09-01 20:21 pfk * bitstream.c, get_audio.c, gtkanal.c, gtkanal.h, lame.c, lame.h, newmdct.c, psymodel.c, quantize.c, quantize_pvt.c, reservoir.c, tables.c, tables.h, util.c, util.h, vbrquantize.c, version.h, mpglib/common.c, mpglib/interface.c, mpglib/layer1.c, mpglib/layer2.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpg123.h: * A lot of minor changes * Changed the name of structure element from 'stereo' to 'channels' if it has the meaning of 'channels'. This is so confusing, so that there are some bugs in lame. Rest read in 'Bad and worse programming styles' and 'job security' -- Frank Klemm 2000-09-01 16:19 robert * lame.c: small fix, lame -v x.wav did not work anymore 2000-09-01 04:04 cisc * amiga_mpega.c: some warning and error fixes 2000-09-01 04:03 cisc * LICENSE: libsndfile is now LGPL 2000-09-01 00:05 pfk * brhist.c, lame.c, parse.c, quantize.c, util.c, util.h, version.c: presets modified changed name of bitrate_table to index_to_bitrate added table bitrate_to_index, speedup of functions using it. 2000-08-31 21:33 pfk * Makefile, amiga_mpega.c, fft.c, fft.h, get_audio.c, get_audio.h, gtkanal.c, lame.c, lame.h, main.c, mp3rtp.c, newmdct.c, newmdct.h, psymodel.c, psymodel.h, quantize_pvt.c, util.c, util.h, version.c, version.h, vorbis_interface.c, mpglib/decode_i386.c, mpglib/main.c: Introduction of the type sample_t for PCM samples. 'short' should not be used in the future. 2000-08-31 11:06 shibatch * psymodel.c: minor bugfix of mask_add(). 2000-08-30 23:29 pfk * LICENSE, PRESETS.draft, bitstream.c, lame.c, parse.c, timestatus.c, util.h, version.c, version.h: [no log message] 2000-08-30 07:18 shibatch * quantize_pvt.c: Tweaks to --nspsytune. 2000-08-29 22:35 pfk * debugscalefac.c, get_audio.c, id3tag.c, lame.c, lame.h, parse.c, util.c, util.h, version.c, version.h, doc/html/switchs.html: [no log message] 2000-08-29 10:14 shibatch * psymodel.c, quantize_pvt.c: Tweakings to --nspsytune. Tonality table is optimized a little. Noise calculation now uses tonality. NSATHSCALE is decreased from 103 to 100. 2000-08-28 20:18 robert * lame.c: small tweak to RH_VALIDATE_MS 2000-08-28 19:55 robert * lame.h, parse.c, psymodel.c: small fixes 2000-08-28 19:27 shibatch * psymodel.c: Tweaks to the tonality table. vbrtest.wav is now encoded correctly with --nspsytune. 2000-08-28 18:37 pfk * lame.h, parse.c, version.c, version.h: parse.c: presets are taken from a table version.c: version incremented (should be done more often) 2000-08-28 10:04 shibatch * parse.c, quantize_pvt.c, psymodel.c: Changes to --nspsytune. 2000-08-27 11:51 robert * lame.c: tweak to validate MS switching criterion (to be enabled with RH_VALIDATE_MS) 2000-08-27 04:34 markt * parse.c: look for .mp3 or .MP3 when parsing input filename 2000-08-26 04:07 markt * Makefile: openBSD tweak 2000-08-26 04:06 markt * Makefile (debug): tweak for Open BSD 2000-08-26 04:03 markt * Dll/BladeMP3EncDLL.h: added include sys/types to BlaceMP3EncDLL.h Borland compiler needs definitions for BOOL and DWORD. 2000-08-24 20:34 robert * quantize.c: little tweak to VBR-old, side channel gets now a little lower bit skeleton 2000-08-23 23:08 robert * Makefile, lame.c, quantize.c, quantize_pvt.c: sfb21 kludge, only VBR tries to get an undistorted sfb21 at lower sample frequencies it makes more trouble than we can gain from that, so now sfb21 will be ignored in VBR mode for MPEG-2 LSF. first tweak (not enabled) for M/S switching criterion 2000-08-23 00:02 markt * lame.c, vorbis_interface.c: messages about filters, vorbis modes 2000-08-22 18:29 markt * lame.c, util.h: moved last_time into lame_internal_flags struct 2000-08-22 16:30 markt * get_audio.c: byte swapping code now only used for 16 bit input files. 2000-08-22 03:19 markt * lame.c: minor gtkflag changes 2000-08-22 00:08 pfk * get_audio.c, parse.c: get_audio.c: Support of reporting all supported input file types. 2000-08-21 20:16 robert * lame.c: pe_MS was not initialized in case we don't use our psychoacoustic model 2000-08-21 16:02 robert * lame.c, mpglib/main.c: LayerI+II LSF corrections 2000-08-21 15:47 markt * doc/html/: contributors.html, history.html, id3.html, index.html, switchs.html: updated docs from Gabriel 2000-08-21 05:32 markt * Makefile (debug), USAGE, vorbis_interface.c: added support for the four new vorbis modes. (higher bitrates) use with the -b option. 2000-08-21 04:52 markt * main.c, mp3rtp.c, Dll/BladeMP3EncDLL.c: Fixed problem with writing VBR tag if user renames mp3 output file during the encoding. 2000-08-21 00:40 markt * lame.c, lame.h, main.c, mp3rtp.c: more prep work for vbr tag problem 2000-08-21 00:28 markt * VbrTag.c, VbrTag.h, lame.c: prep work to fix Vbrtag when user renames mp3 file during encodiing. 2000-08-21 00:05 markt * main.c, testcase.mp3: fixes to main.c: it is supposed to be example code for how to use the LAME library - it should only include lame.h, all other .h files are supposed to be private to the encoding library. 2000-08-21 00:00 markt * INSTALL, Makefile, Makefile.B32, Makefile.DJGPP, Makefile.MSVC, README.B32, TODO, bitstream.c, gtkanal.c, lame.c, lame.dsp, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize_pvt.c, quantize_pvt.h, takehiro.c, vbrquantize.c, Dll/MP3EncDll.dsp: changed quantize-pvt.c to quantize_pvt.c Added Boland stuff_ 2000-08-20 23:21 markt * Makefile, version.h: Amiga stuff for Makefile, updated version.h to 3.87alpha 2000-08-20 21:22 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: enhanced lame_enc dll debugging 2000-08-20 20:50 robert * lame.c: fixed bug for LSF, ms_ratio will not be calculated for the second granule because at lower sample rates there is no second granule but the M/S switching criterion relies ms_ratio on it 2000-08-19 10:54 robert * lame.c, parse.c, mpglib/main.c: total frames of LayerI files was not correctly estimated for decoding 2000-08-18 18:07 robert * USAGE, get_audio.c, gtkanal.c, lame.c, lame.h, parse.c, mpglib/main.c: LayerI+II decoding patches 2000-08-18 01:40 pfk * bitstream.c, brhist.c, lame.c, main.c, parse.c, timestatus.c, timestatus.h: bitstream.c: Table based CRC calculation code added (must be enabled to use) brhist.c: Enlighted design of the bit rate history output main.c: init of CRC Table in bitstream.c parse.c: Some parameters can be name in Hz/bps and in kHz/kbps timestatus.c: Enlighted design of the time counters lame.c: Changed screen update frequency from 50/100 frames to 2 seconds 2000-08-17 14:34 robert * Makefile, Makefile.DJGPP, Makefile.MSVC, mpglib/common.c: Layer1/2 related update 2000-08-16 17:05 robert * Makefile.MSVC: added GTK support (frame analyzer) 2000-08-16 01:22 afaber * parse.c, mpglib/common.c, mpglib/interface.c, mpglib/l2tables.h, mpglib/layer1.c, mpglib/layer1.h, mpglib/layer2.c, mpglib/layer2.h, mpglib/mpg123.h, mpglib/mpglib.dsp: Added support for Layer 1 and Layer 2 decoding 2000-08-15 19:31 robert * Makefile, lame.c, takehiro.c, util.h: patch to prevent core dump in case big value = 576 in count_bits_long() 2000-08-13 13:44 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h, Example.cpp, LameDLLInterface.htm: Added Lame presets to the DLL interface + added HTM document how to use the lame_enc.dll interface 2000-08-13 02:50 afaber * Dll/: Example.cpp, Example.dsp, Example.dsw, MP3EncDll.dsp: Added DLL Example 2000-08-12 15:42 robert * quantize.c: major speed increase for vbr-old 2000-08-11 20:53 robert * psymodel.c: RH_AMP tweak, improves vbrtest.wav 2000-08-08 21:08 afaber * Dll/BladeMP3EncDLL.c: Add new RecordItem array, not completely finsihed yet, but it compiles 2000-08-08 20:11 cisc * psymodel.c, takehiro.c: code cleanup 2000-08-08 04:01 markt * Makefile: Dec Alpha makefile fix 2000-08-07 18:24 robert * Makefile, lame.c, quantize-pvt.c, quantize.c: code cleanup 2000-08-07 05:53 markt * takehiro.c: code cleanup in count_bits_long() 2000-08-07 00:00 markt * Makefile (debug), doc/html/history.html, mpglib/interface.c, mpglib/layer3.c: bug fixed in mpglib error recovery from corrupt frames 2000-08-06 22:58 markt * get_audio.c, testcase.mp3: oops, one bug in 3.86beta. try and change this before anyone downloads source from the web site :-) 2000-08-06 22:34 markt * get_audio.c, version.h, doc/html/history.html: lame 3.86 beta release 2000-08-06 21:34 markt * lame.c, lame.h, testcase.mp3: disabled scalefac_scale (except if -q1 is used) and make old vbr mode the default 2000-08-06 20:58 markt * quantize-pvt.c, testcase.mp3: Reverted back to original definition of over_noise and tot_noise: tot_noise = is really the average over each sfb of: [noise(db) - allowed_noise(db)] and over_noise is the same average, only over only the bands with noise > allowed_noise. 2000-08-06 20:32 markt * mpglib/main.c: Album ID tag reading bug fixes 2000-08-06 20:21 markt * INSTALL, USAGE, lame.c, lame.h, parse.c, quantize-pvt.c, takehiro.c, timestatus.c, timestatus.h, util.h, vbrquantize.c, Dll/MP3export.pas, Dll/README: added the "--athlower n" option which lowers the ATH by n db. Added possible fix for region0_count and region1_count getting set to illegal negative values. 2000-08-03 20:07 robert * Makefile, lame.c, lame.spec, quantize-pvt.c, quantize.c: don't worry Mark! my noise calculation wrapped by RH_NOISE_CALC define RH_NOISE_CALC at compile time to get my version of noise calculation special: -Y amp_scalefac_bands will amplify only the maximum distorted band 2000-08-01 06:36 markt * INSTALL, bitstream.c: added a few assert's 2000-08-01 04:53 markt * quantize.c: Fixed amp_scalefac_bands (RH found this) 2000-08-01 04:38 markt * get_audio.c, util.c, util.h, mpglib/main.c: updated lame --decode to read Roel's AID stuff 2000-07-31 19:17 markt * Makefile (debug), INSTALL, Makefile.DJGPP, lame.spec: updated debug makefile 2000-07-31 19:00 markt * Makefile, TODO, USAGE: open bsd updates to makefile 2000-07-31 18:46 markt * quantize.c, takehiro.c, testcase.mp3: Takehiro's best_huffman_divide turned back on for MPEG1 only 2000-07-31 18:38 markt * quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: many commits were made over the weekend. But: 1. MPEG2 encoding was broken 2. all my test cases failed. #11 is bad. #2 can be caused be general improvements, but coupled with #1 is a bad sign. I spent all of sunday tracking down the many changes, and trying to find what what the cause of what. I finally ran out of time and am going to revert some changes back to last working copy. Here is a summary: takehiro.c: newest version, except: count_bits_long uses old code (new code commented out). This code was breaking MPEG2 scfsi: uses old slen1_n, slen2_n. I will change this with the next commit. (in about 10min) best_huffman_divide: short block code breaks MPEG2. short block code is still there, but disabled. quantize-pvt.c: Newest version, except: all noice calculations reverted back to db. tot_noise, over_noise, ave_noise, etc. are given in db and will always be given in db. distort[], is left in units of energy, since this saves many log10() function calls. quantize.c : Reverted back to last working version, except have newest version of VBR_iteration_loop(). 2000-07-31 00:36 robert * psymodel.c: revert back to previous version, it creept in by accident 2000-07-30 23:48 robert * lame.c, psymodel.c, quantize.c: minor tweaks 2000-07-29 22:37 robert * lame.bat: long file names on in for, thanks to Ihárosi Wiktor 2000-07-27 16:42 takehiro * bitstream.c: minor change 2000-07-27 16:41 takehiro * quantize.c, vbrquantize.c: make the short block huffman coding more efficient 2000-07-27 16:39 takehiro * machine.h: oops MMX code couldn't compile... 2000-07-27 16:38 takehiro * fft.c: removed unused code 2000-07-27 16:38 takehiro * takehiro.c: restore old algorithm temporary... 2000-07-26 13:56 takehiro * newmdct.c: minor coding hack and prepare for GOGO's subband filtering code 2000-07-26 13:47 takehiro * quantize-pvt.c, quantize-pvt.h, takehiro.c, util.h: debug for region0/1 which kzmi reported 2000-07-26 13:25 takehiro * machine.h, quantize-pvt.h, takehiro.c: i hope this fix make intel native asm code available on VC 2000-07-25 22:28 robert * quantize.c: possible endless loop for different -X modes fixed, some modes do not minimize "over" and would never reach over == 0 in some rare cases 2000-07-25 20:39 robert * quantize.c: small "fast encode" fix 2000-07-25 20:09 robert * Makefile: fixed typo 2000-07-25 19:24 robert * quantize-pvt.c, quantize-pvt.h, quantize.c: fixed somehow messed up noise calculation 2000-07-25 15:42 robert * quantize.c: small bug fix 2000-07-24 23:50 cisc * get_audio.c: small fix 2000-07-24 23:32 cisc * USAGE, get_audio.c: Changed lame_decoder() to write native endian format when not writing WAV header (-x will byteswap). 2000-07-24 20:31 markt * quantize.c: removed some print statements 2000-07-24 20:30 markt * quantize-pvt.c, quantize.c, takehiro.c: fixed rare bug with -X0 getting stuck in a loop when over>0 and over and over_noise didn't change from one iteration to the next. 2000-07-24 05:51 markt * parse.c: updated docs 2000-07-24 05:42 markt * USAGE, get_audio.c, gtkanal.c, lame.h, parse.c: -t: disables Xing header for encoding, disables WAV header for decoding 2000-07-21 17:39 markt * Makefile, vorbis_interface.c: vorbis interface fixes 2000-07-21 17:09 markt * INSTALL, Makefile.DJGPP, README.DJGPP: updated some DJGPP stuff 2000-07-21 16:50 markt * VbrTag.c, encoder.h, get_audio.c: added some comments about decoder/encoder delay, 2000-07-20 04:29 kzmi * machine.h: add mingw32 support. using windows.h. 2000-07-20 04:28 kzmi * Makefile: add non-UNIX environment support. (NOUNIXCMD) specifying UNAME,ARCH,PGM on command line is available. 2000-07-19 23:19 robert * vbrquantize.c: oops, fixed typo 2000-07-19 22:42 robert * vbrquantize.c: fixed problem with Roel's clips.wav file, "pseudo endless loop" problem now gone maybe the annoying spikes too? 2000-07-18 22:57 robert * vbrquantize.c: moved calc_xmin out of VBR_noise_shaping moved xr34 calculation out of VBR_noise_shaping changed analog silence detection from granule based to frame based hacked in a first digital silence treatment per granule (can be optimized) round about 8 percent faster on my Pentium 200 machine 2000-07-18 00:09 markt * lame.c: moved some stuff into lame_init() 2000-07-17 23:36 robert * vbrquantize.c: to make someone happy ;) 2000-07-17 23:28 markt * lame.c: Changes from Kimmo: split lame_init_params() into 3 smaller routines. This somehow fixes some crashes on PPC (which OS?). 2000-07-17 23:10 markt * USAGE, lame.c, machine.h, main.c, quantize.c, util.c, mpglib/common.c, mpglib/mpg123.h: Mac patches. (in an #ifdef macintosh) 2000-07-17 15:38 robert * vbrquantize.c: analog silence treatment like in old VBR 2000-07-16 02:16 robert * quantize.c: minor tweaks 2000-07-15 19:20 robert * quantize.c: OK found what was wrong, should work now 2000-07-15 17:55 markt * Makefile, lame.c, quantize.c: Reverted back to older version of quantize.c becuase version 1.137 broke some of my CBR test cases. made scalefac_scale always on for all vbr modes 2000-07-15 16:49 robert * lame.c, quantize.c: Takehiro's scalefac_scale now default for old-VBR, no more -q1 necessary 2000-07-15 04:55 markt * Makefile: updated makefile for Dec Alpha Linux 2000-07-14 20:06 markt * USAGE, lame.h: c++ name mangling fix, type in USAGE 2000-07-12 18:03 robert * util.c, util.h: critical band width formula added 2000-07-11 02:25 markt * vbrquantize.c: tuning for vbr_mt to fix chirp from John Dalton 2000-07-11 00:47 markt * quantize.c: better tuning for ABR mode 2000-07-11 00:31 markt * gtkanal.c, quantize-pvt.c, quantize.c, vbrquantize.c, mpglib/main.c: bug in frame analyzer (causes hangs near eof) fixed better resyncing during mp3 file initialization in mpglib 2000-07-10 23:03 markt * lame.c, main.c, parse.c, reservoir.c, testcase.mp3, vbrquantize.c: tuned new VBR so Roel will be happy :-) 2000-07-10 00:24 markt * timestatus.c: timestatus overflow fix 2000-07-09 20:05 markt * Makefile.DJGPP, README.DJGPP, quantize-pvt.c, quantize.c: more updated for DJGPP 2000-07-09 13:19 shibatch * fft.h: I forgot to commit fft.h. (by Naoki Shibata) 2000-07-09 13:16 shibatch * fft.c, lame.c, lame.h, parse.c, psymodel.c, quantize-pvt.c: Added --nspsytune command line option. This should solve vbrtest problem. (By Naoki Shibata) 2000-07-09 03:22 gramps * parse.c: additional help for ID3-style comments in Ogg Vorbis output from a patch by Ralph Giles 2000-07-09 03:20 gramps * lame.c: don't add ID3 tags to Ogg Vorbis output 2000-07-09 03:18 gramps * vorbis_interface.c: partial support for ID3-style comments from a patch by Ralph Giles 2000-07-08 15:08 robert * quantize.c: long time BUG in old VBR fixed, preventing LAME from using more than 2500 bits per channel 2000-07-08 00:39 markt * README.DJGPP, get_audio.c: 8bit .wav files supported. 2000-07-07 22:44 markt * Makefile: Updateted Makefile for alpha/linux 2000-07-07 21:42 robert * quantize-pvt.h, quantize.c: little VBR-old speed up (upto 10%) 2000-07-07 20:09 markt * Makefile.DJGPP, README.DJGPP: updated DJGPP stuff from Chris Wise 2000-07-07 00:34 robert * quantize.c: more "old-VBR" tuning 2000-07-06 22:20 cisc * amiga_mpega.c: Should now work for GCC. 2000-07-06 16:54 robert * Dll/BladeMP3EncDLL.c: DLL uses now the same VBR routine by default as the EXE 2000-07-05 04:57 markt * quantize-pvt.c, timestatus.c: minor changes 2000-07-04 23:52 cisc * brhist.c, quantize-pvt.c, takehiro.c: code cleanup 2000-07-04 23:52 gramps * id3tag.h, lame.h: make id3tag.h dependent on lame.h instead of the other way around 2000-07-04 22:16 markt * lame.h, testcase.mp3, util.h, version.h: updated version to 3.86 alpha 2000-07-04 15:40 robert * lame.c, quantize.c: old VBR silence bug fixed 2000-07-04 14:46 robert * VbrTag.c: oops, 1 bit forgotten 2000-07-04 03:32 kzmi * quantize-pvt.c, quantize-pvt.h, quantize.c, vbrquantize.c: old tot_noise and over_noise are obsolete. tot_avg_noise and over_avg_noise were renamed as tot_noise and over_noise. 2000-07-04 03:28 gramps * USAGE, VbrTag.c, id3tag.c, id3tag.h, lame.c, lame.h, main.c, mp3rtp.c, parse.c, doc/html/id3.html: ID3 version 2 tag support 2000-07-03 17:10 robert * VbrTag.c: keep CRC bit for additional Xing-VBR frame 2000-07-03 16:21 markt * doc/html/history.html: [no log message] 2000-07-03 16:20 markt * README.DJGPP, lame.h, psymodel.c, quantize-pvt.c, vbrquantize.c, version.h: lame 3.85 beta release (old VBR mode back to being the default) 2000-07-03 00:58 markt * Makefile, machine.h, psymodel.c: added note about FLOAT8 = float breaking certain features 2000-07-03 00:57 markt * Makefile: [no log message] 2000-07-03 00:48 markt * psymodel.c, testcase.mp3: updated mid/side demasking thresholds with takehiro's formula 2000-07-03 00:25 markt * psymodel.c, vbrquantize.c: more tweakes to ATH/PE calculation. psymodel.c uses additive masking so ATH needed a *= numlines. 2000-07-02 23:51 markt * psymodel.c: added ATH threshold to PE calculation. 2000-07-02 23:39 markt * psymodel.c, quantize-pvt.c, quantize-pvt.h, util.c, util.h, vbrquantize.c: code so that ATH can be used for PE formula 2000-07-02 21:44 markt * Makefile: Makefile updated so float8 = double 2000-07-02 18:40 markt * lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, util.c, vbrquantize.c: short block re-ording complete! all routines updated, but not cleaned up: it is now possible to merge most short block and long block loops 2000-07-01 22:12 robert * lame.c: code cleanup 2000-07-01 21:48 robert * util.c: integer based padding routine 2000-07-01 20:37 cisc * lame.c, quantize-pvt.h, util.h: code cleanup 2000-07-01 18:12 markt * bitstream.c, lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, testcase.mp3, util.c, util.h, vbrquantize.c: re-order short blocks data storage. in preperation for takehiro's asm routines 2000-07-01 15:23 robert * lame.c, quantize-pvt.c, quantize.c: old VBR no ATH bug fixed 2000-07-01 13:51 robert * lame.c, quantize-pvt.h, quantize.c, util.c, util.h: code cleanup 2000-07-01 11:26 robert * lame.c, lame.h, parse.c, quantize-pvt.c, quantize.c: made switch between default VBR modes easier, look into lame.h 2000-07-01 02:35 markt * lame.c, parse.c, version.h: 3.85 alpha (CVS) version: new vbr mode is the default 2000-07-01 02:32 markt * parse.c: still bugs trying to make 3.84beta release 2000-07-01 02:16 markt * lame.c, parse.c, quantize-pvt.c: i screwed up the 3.84 beta release, lets try again. making old vbr mode the defailt, temporarily 2000-07-01 02:11 markt * Makefile, version.h: [no log message] 2000-06-30 23:32 markt * Makefile: makefile: -DFLOAT8 is float 2000-06-30 23:30 markt * lame.c, parse.c, version.h: ok, back to new vbr mode = default 2000-06-30 23:28 markt * doc/html/history.html: [no log message] 2000-06-30 23:27 markt * Makefile, lame.c, parse.c, version.h: old vbr mode made the default. --vbr-old and --vbr-new options can specify which mode. This is just for the next 10min while I put out lame 3.84. CVS will then revert back to default = new vbr mode 2000-06-30 23:15 markt * get_audio.c: 8 bit input support (maybe works?) 2000-06-30 14:25 kzmi * VbrTag.c, bitstream.c, brhist.c, debugscalefac.c, gtkanal.c, psymodel.c, quantize-pvt.c, vbrquantize.c, vorbis_interface.c: replaced fprintf/printf/exit() functions with macro 2000-06-27 13:58 kzmi * get_audio.c, lame.c, main.c, timestatus.c, timestatus.h: replace printf/fprintf/exit() with macro. decode_progress() and decode_progress_finish() are added in timestatus.c. these functions are used in lame_decode(). 2000-06-27 02:23 markt * INSTALL, Makefile, TODO: minor updates 2000-06-27 01:18 markt * mpglib/layer3.c: Sergey's bug fix for layer3.c MPEG2 tables 2000-06-26 20:47 afaber * Dll/MP3EncDll.dsp: Version 1.30 beta 1 2000-06-26 16:08 markt * quantize.c: put Roberts ABR -V n settings back in. 2000-06-26 05:56 markt * TODO, lame.c, quantize.c, vbrquantize.c: fixed one bug in VBR handling of vbrquantize.c changed ABR mode: it should not be adjusting masking thresholds based on quality settings. It doesn't make sense to change the maskings if the number of bits is fixed. 2000-06-25 19:07 robert * quantize-pvt.h, quantize.c: little improvements for experimentalX modes 2000-06-24 07:49 kzmi * parse.c, util.h: replace printf/fprintf and exit() in parse.c with macro 2000-06-24 06:00 kzmi * util.h: abolished LAME_ASSERT(). 2000-06-24 05:57 kzmi * util.c: LAME_ASSERT() macro was removed. It was replaced assert(). 2000-06-23 14:45 kzmi * util.h: FLUSH_ERR() --> FLUSH_ERROR() 2000-06-23 13:59 kzmi * util.h: new macros used instead of fprintf(), assert(), and exit(). 2000-06-23 13:53 kzmi * util.c: Alternative printing function lame_errorf() was added. It will be called instead of fprintf() by using new macro "ERRORF" 2000-06-22 20:41 robert * lame.c, parse.c: minor bugs 2000-06-22 18:42 robert * USAGE, lame.c, parse.c, quantize.c: Marks new VBR now the default, old still under there, use --vbr-old 2000-06-22 17:16 robert * lame.c, util.h: padding as in "MPEG-Layer3/Bitstream Syntax and Decoding" 2000-06-22 16:06 robert * mpglib/layer3.c: table correction, thanks to Sergey Sapelin 2000-06-21 15:38 afaber * machine.h: Update project file (added FLOAT8_is_float define) 2000-06-21 05:04 markt * lame.c, lame.h, psymodel.c, psymodel.h, quantize-pvt.c, util.h, vorbis_interface.c: added some return codes, removed some exits 2000-06-21 01:14 markt * brhist.c: added brhist display for windows, from mremondini@racine.ra.it 2000-06-21 00:05 markt * machine.h: added default settings for FLOAT8 2000-06-20 23:34 markt * psymodel.c, quantize-pvt.c, util.h: added code to compute numlines and bo,bu arrays instead of using table data 2000-06-20 13:28 takehiro * Makefile, machine.h: prepare for architecture depending optimization 2000-06-19 05:08 markt * main.c, parse.c, vorbis_interface.c: more vorbis bugs fixed 2000-06-19 01:10 markt * lame.c: oops, if (gfc->filter_type=0) statement fixed 2000-06-18 14:39 markt * mpglib/interface.c: mpglib: better resyncing code 2000-06-18 04:34 cisc * version.c: minor change 2000-06-18 04:15 cisc * takehiro.c: Removed redundant return. 2000-06-18 04:13 markt * vorbis_interface.c: more ogg updates 2000-06-18 04:09 markt * main.c (ogg), lame.c: ogg stuff 2000-06-18 04:08 cisc * version.c: Included get_audio.h for prototypes... 2000-06-18 03:59 cisc * version.c: Added version-check for libsndfile... 2000-06-18 03:43 markt * Makefile, main.c (ogg), lame.c, version.c: ogg updates 2000-06-17 14:00 robert * parse.c, quantize-pvt.c: typo in parse.c was disabling -Xn settings 2000-06-17 04:57 takehiro * TODO: something added 2000-06-17 00:35 markt * lame.c, psymodel.c, util.h: code to compute numlines_[] mostly debugged, but not in use. only remaining psycho acoustic table data: minval (for long blocks) and SNR for short blocks. 2000-06-16 18:17 markt * encoder.h, psymodel.c, testcase.mp3, util.h: psymodel cleanup, bval[] table lookup replaced with formulas. Next step: replace numlines with formulas 2000-06-16 18:03 robert * TODO: point added 2000-06-16 17:31 markt * psymodel.c, quantize-pvt.c, vbrquantize.c: code re-arrangment in psymode.c. In preperation to replace bval[] from table lookup with formulas. 2000-06-15 16:45 markt * vbrquantize.c: bug fix for -Y VBR mode: needed to check for return code for count_bits for errors. 2000-06-15 15:56 markt * parse.c, vbrquantize.c, vorbis_interface.c, mpglib/interface.c: mpglib bug fix from Naoki 2000-06-15 00:06 markt * lame.c: scalefac_scale disabled for VBR modes. 2000-06-14 21:13 markt * quantize-pvt.c, quantize-pvt.h, quantize.c, vbrquantize.c: A new noise moded(-X 7) and a new structure to keep track of all the different noise measures, from Iwasa Kazmi 2000-06-14 21:04 markt * lame.c, lame.h, main.c, parse.c, util.c, util.h: new FindNearestBitrate routine, return codes for lame_init_params. 2000-06-14 20:03 markt * USAGE, gpkplotting.c: font in frame analyzer, updates to USAGE 2000-06-14 03:15 markt * Makefile.MSVC, vorbis_interface.c: updated vorbis support (mono, different samplerates) 2000-06-13 12:42 takehiro * bitstream.c, tables.h, takehiro.c: minor optimization and debug 2000-06-13 11:27 takehiro * tables.c, takehiro.c: completely MMXed choose table routine. faster! 2000-06-12 05:29 markt * psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, vbrquantize.c: added a different FFT->MDCT normalization, disabled. 2000-06-10 09:38 robert * Makefile.MSVC, machine.h: vorbis support 2000-06-10 03:39 cisc * quantize-pvt.c, vbrquantize.c: Aaargh, and now it suddenly doesn't work anymore, just gives me tons and tons of bitreservoir errors. :P 2000-06-10 02:43 cisc * vbrquantize.c: Ooops, fixed redefinition... 2000-06-10 01:56 cisc * quantize-pvt.c, vbrquantize.c: TAKEHIRO_IEEE754_HACK works great now, let's put it as default. 2000-06-10 00:26 markt * Makefile, quantize-pvt.c: Mat's ROUNDFAC fix. If #define TAKEHIRO_IEEE754_HACK is used, ROUNDFAC should be set to -0.0946 2000-06-10 00:10 markt * Makefile, README, USAGE, lame.c, parse.c, quantize.c: trivial changes 2000-06-09 22:54 robert * USAGE: average bitrate coding (--abr) usage added 2000-06-09 22:18 robert * get_audio.c, lame.c, lame.h, parse.c, quantize.c, quantize.h: Safe VBR mode available as --abr x, targetting x kbits you can use -b and -B switches as usual with VBR 2000-06-09 20:34 markt * get_audio.c, get_audio.h, quantize-pvt.c: minor changes 2000-06-09 01:00 markt * tables.c: fixed bug in tables.c 2000-06-09 00:30 markt * Makefile: [no log message] 2000-06-09 00:28 markt * Makefile, lame.c: fix for when compiling without #define HAVEVORBIS 2000-06-09 00:22 markt * INSTALL, Makefile, Dll/MP3EncDll.dsp: updated makefiles for VORBIS option 2000-06-08 23:19 markt * USAGE, lame.c, parse.c, vorbis_interface.c: .ogg encoding now works. 2000-06-08 21:15 markt * lame.c, vorbis_interface.c: more .ogg encoding stuff. still not working 2000-06-08 20:46 markt * Makefile, get_audio.c, gtkanal.c, lame.c, lame.h, parse.c, vorbis_interface.c: --ogg option to produce .ogg files. not yet working 2000-06-08 06:04 markt * API: updated API to include HAVEVORBIS info 2000-06-08 05:59 markt * Makefile: makefile for libvorbis support 2000-06-08 05:58 markt * Makefile, USAGE, get_audio.c, lame.h, parse.c, vorbis_interface.c, mpglib/main.c: added .ogg file decoding. Re-encode all your Vorbis files to MP3 !!! (or, lame --decode input.ogg output.wav might be usefull) 2000-06-07 23:36 markt * INSTALL, get_audio.c, lame.h, reservoir.c: started to add .ogg decoding 2000-06-07 22:56 sbellon * VbrTag.c, get_audio.c, ieeefloat.c, ieeefloat.h, machine.h, portableio.c, reservoir.c, mpglib/decode_i386.c, mpglib/mpg123.h: added support for FPA10 hardware (RISC OS only) 2000-06-07 22:54 sbellon * main.c: changed RISC OS file typing code 2000-06-07 13:26 takehiro * lame.spec: spec file for RPM. contributed by ramsy@linux.or.jp 2000-06-05 18:44 markt * gpkplotting.c, gtkanal.c: updated X windows font selection (thanks Iwasa) 2000-06-05 17:38 markt * testcase.mp3: updated testcase 2000-06-03 05:39 takehiro * takehiro.c: more aggressive scfsi using and little bit memory optimization 2000-06-03 02:46 cisc * get_audio.c: code cleanup 2000-06-01 18:30 cisc * amiga_mpega.c: code cleanup 2000-05-31 21:00 markt * quantize.c: SAFE_VBR mode fixes 2000-05-31 20:40 markt * USAGE, lame.c, parse.c, psymodel.c, quantize.c: SAFE_VBR mode added. not enabled yet 2000-05-31 19:52 cisc * vbrquantize.c: code cleanup 2000-05-31 03:37 cisc * timestatus.c: code cleanup 2000-05-31 00:25 robert * Makefile: [no log message] 2000-05-31 00:24 robert * mpglib/: interface.c, layer3.c, main.c, mpg123.h: code cleanup 2000-05-30 23:47 markt * lame.c: -f "fast mode" is now a little slower. It now *will* compute psycho acoustics, used for total bits and pre-echo detection. But it will not spend any time trying to find optimal scalefactors. 2000-05-30 23:37 markt * TODO, bitstream.c, lame.c, takehiro.c, vbrquantize.c: fixed scfsi bug in vbrquantize.c 2000-05-30 22:29 cisc * VbrTag.c, bitstream.c, get_audio.c, l3side.h, main.c, quantize-pvt.c, quantize-pvt.h, util.c: code cleanup 2000-05-30 22:01 cisc * takehiro.c, timestatus.c: code cleanup 2000-05-30 20:01 robert * VbrTag.c, gtkanal.c, lame.c, newmdct.c, psymodel.c, quantize-pvt.c, reservoir.c, takehiro.c, timestatus.c, util.c, util.h, vbrquantize.c, Makefile: code cleanup 2000-05-30 16:01 robert * fft.c, get_audio.c, main.c: code cleanup 2000-05-30 15:16 robert * bitstream.c, l3side.h, quantize.c, quantize.h, util.h: signed/unsigned fixes 2000-05-30 00:20 markt * Makefile: updated Makefile comment about Sun OS 2000-05-30 00:12 markt * bitstream.c, psymodel.c, reservoir.c, takehiro.c, vbrquantize.c: psymodel.c: yet another loop check added vbrquantize.c: best_scalefac_store can change scalefac values. scalefactors must be saved and restored before each call. bitstream.c: added part2_length assert check 2000-05-29 22:11 cisc * get_audio.c: Included portableio.h for prototypes. 2000-05-29 21:49 cisc * amiga_mpega.c: Skip bad frames. 2000-05-29 19:59 robert * VbrTag.c, get_audio.c, quantize.c, vbrquantize.c: compiler warnings fixed 2000-05-29 17:15 afaber * VbrTag.c: Private bit was not retained in VBR header, changes masking bit from 0x0c to 0x0d 2000-05-29 17:14 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h: Some minor fixes to the DLL inteface, added Write VBR tag prototype Added LGPL header to *.h file 2000-05-29 17:12 afaber * lame.dsp: Set proper defines in the debug mode 2000-05-29 16:50 markt * mpglib/: layer3.c, main.c, mpglib.h: parent_is_slash #define, for the Amiga 2000-05-29 14:39 markt * brhist.c, machine.h, psymodel.c, mpglib/interface.c: fixed loop problems with large --cwlimit 2000-05-28 23:48 markt * Makefile: makefile debug branch 2000-05-28 23:47 markt * Makefile: makefile now -O3 (linux) by default 2000-05-28 23:46 markt * Makefile, USAGE, psymodel.c, quantize.c, reservoir.c, vbrquantize.c, mpglib/interface.c: code cleanup 2000-05-28 06:56 takehiro * quantize-pvt.c: restored old GCC asm routine 2000-05-28 05:01 takehiro * Makefile, takehiro.c: initial MMX implementation attempt.. use MMX to huffman coding. 2000-05-27 07:41 takehiro * takehiro.c: more pseudo SIMD code 2000-05-27 07:23 takehiro * testcase.mp3: testcase update for new scalefac_scale 2000-05-27 07:22 takehiro * quantize-pvt.c, quantize-pvt.h, takehiro.c: pseude SIMD countbit routine preparing for MMX 2000-05-27 07:21 takehiro * quantize.c: oops, foolish typemiss... 2000-05-27 03:22 takehiro * lame.c, quantize.c, version.h: scalefac_scale debug and use it as default new subblock_gain algorithm (initial release, -Z to enable it, but not works fine) 2000-05-27 03:08 takehiro * newmdct.c: minor changing 2000-05-27 03:06 takehiro * quantize-pvt.c, quantize.c, quantize-pvt.h: scalefac_scale debug and use it as default new subblock_gain algorithm (initial release, -Z to enable it, but not works fine) 2000-05-26 19:03 markt * gtkanal.c, lame.c, vbrquantize.c: vbrquantize.c work 2000-05-26 01:49 cisc * amiga_mpega.c, get_audio.c, lame.h: Fixed a bunch of errors that must have been committed whilst sleepwalking. ;) 2000-05-26 00:49 markt * get_audio.c, lame.h, main.c: moved WAV writing routines and lame_decoder() into get_audio.c 2000-05-26 00:31 markt * main.c: another bug in WriteWav 2000-05-26 00:02 markt * main.c, quantize-pvt.c: tweaked .wav file output. Fixed small bug in short block bit allocation (thanks Iwasa!) 2000-05-25 23:02 markt * lame.dsp (MSVC6): updated project files MSVC6 tag 2000-05-25 15:27 markt * amiga_mpega.c, get_audio.c, gtkanal.c, lame.h, main.c, vbrquantize.c, mpglib/interface.c, mpglib/main.c: updated frame analyzer to show difference between original/decoded updated --decode to return bitrate, samplerate, numchannels. if samplerate or numchannels changes in mp3 stream, --decode will quite with an error message 2000-05-24 16:53 markt * gtkanal.c, gtkanal.h, quantize-pvt.c, vbrquantize.c, mpglib/layer3.c: tweeks to frame analyzer: added preflag display 2000-05-24 00:24 cisc * get_audio.c: Fixed silly bug preventing mp3input working together with libsndfile. 2000-05-23 04:12 markt * bitstream.c, gtkanal.c, quantize-pvt.c, quantize.c, vbrquantize.c: fixed a bug in the frame analyzer: was rescaling axis between plotting energy, masking and noise 2000-05-22 18:20 shibatch * mpglib/tabinit.c: Changed decwin to more precise one. 2000-05-22 17:11 markt * quantize-pvt.c: make IEEE stuff the default on GNU i386 2000-05-22 13:14 cisc * main.c: fwrite() returns number of objects actually written 2000-05-22 05:39 markt * main.c: fixed bug for mono .wav headers for lame --decode 2000-05-22 05:27 markt * quantize-pvt.c: GNU C ASM code is temporarily disabled. It looks like Takehiro's changes to 1.107 have broken this code. 2000-05-22 05:07 markt * mpglib/: common.c, interface.c: more robust frame resyncing 2000-05-22 05:07 markt * quantize.c, vbrquantize.c: more robust mpglib decoding (frame re-syncing) 2000-05-21 20:54 cisc * quantize-pvt.c: TAKEHIRO_IEEE754_HACK should not be default 2000-05-21 20:31 robert * parse.c: PRESET tunings: + after we dropped the ISO 7680 bit buffer limit allow more often 320 kbits frames + for MPEG2.5 allow more often short blocks only 8 kHz streams have now problems with short blocks, so don't use them then - dropped all highpass filters, cos the results did not satisfy me (in my opinion they actually do more harm than good) - tuned some lowpass filters cos of the sfb21 noise calculation in VBR 2000-05-21 19:33 markt * l3side.h, parse.c, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, reservoir.c, reservoir.h: comments and other code cleanup 2000-05-21 16:42 takehiro * quantize.c: new scalefac_scale algorithm option changed -Y -> -Z 2000-05-21 16:25 takehiro * quantize.c: new scalefac_scale algorithm 2000-05-21 16:19 takehiro * quantize-pvt.h, quantize.c: new scalefac_scale algorithm. enables with -Y option. 2000-05-21 13:15 takehiro * quantize-pvt.h: VBR bug related sfb22 fixed 2000-05-21 12:52 takehiro * quantize-pvt.c: VBR bug related sfb22 fixed 2000-05-20 23:49 robert * quantize-pvt.c, quantize.c: minor tweaks 2000-05-20 23:33 robert * quantize.c: VBR hack 2000-05-20 21:05 markt * bitstream.c, main.c, mpglib/main.c: totbit buffer overflow fix 2000-05-20 20:57 cisc * takehiro.c: choose_table() argument is int *, not unsigned * 2000-05-20 20:36 markt * bitstream.c, main.c, util.h, mpglib/main.c: mpglib will not decode Xing VBR header. write_timing changed to unsigned long to allow encoding more than 4 hours at 128kbs. 2000-05-20 15:13 markt * main.c, takehiro.c: .wav output with --decode was putting wrong filesize in .wav header. 2000-05-19 23:01 markt * quantize-pvt.c, testcase.mp3, version.h: updated version.h lame 3.84 alpha (CVS version) 2000-05-19 20:07 markt * doc/html/history.html: updated history for 3.83beta 2000-05-19 20:06 markt * version.h: lame 3.83beta 2000-05-19 18:43 markt * encoder.h, lame.c: possible serious buffering problem fixed. LAME buffers input data until it has at least 1904 samples. It then starts processing them. The old MDCT routines processed 1728 samples and had a delay of 528. (introduced in 3.54) But the new MDCT routines, because the delay is so small (48 samples) actually need 2014 samples to be in the buffer! If you use the lame input routines, for MPEG1, this bug would not be found because the buffer always has well over 2014 samples in it. But it was possible to trigger it in MPEG2 encodings. It would also be possible to trigger this bug in programs that use lame_enc.dll and pass LAME data that is not in chunks of 1152 samples. 2000-05-19 17:23 markt * bitstream.c, lame.c, lame.h, parse.c, psymodel.c, testcase.mp3, vbrquantize.c: tweaks to psymodel initialization more work on vbrquantize.c 2000-05-19 01:38 markt * bitstream.c, gtkanal.c, l3side.h, lame.c, main.c, psymodel.c, quantize-pvt.c, takehiro.c, testcase.mp3, vbrquantize.c: more work on vbrquantize.c 2000-05-18 18:50 markt * main.c: updated decoder to remove initial delay 2000-05-18 05:38 markt * main.c, parse.c: lame --decode now outputs .wav files file length in header is set to 2^32-1, since we dont really know ahead of time how many samples are in the mp3 file. 2000-05-17 22:25 markt * quantize.c: ath lower bug in quantize.c fixed 2000-05-17 22:08 markt * quantize-pvt.c: calc_noise1 will compute noise (and related info) for last scalefactor band 2000-05-17 21:33 markt * quantize-pvt.c, takehiro.c: frame analyzer displays more data in scalefactor band 22 2000-05-17 19:50 markt * gtkanal.h, quantize-pvt.c, quantize-pvt.h, quantize.c, vbrquantize.c: modified frame analyzer to show last scalefactor band, energy and masking (from the ATH). distortion is not yet calculated in this band. 2000-05-17 18:08 markt * gtkanal.c, l3side.h, quantize-pvt.c, quantize.c, util.h: Possible fix for recent VBR/sweep bug: min bitrate not strictly enforced with -F, and analog silence was only being computed up th 16khz. 2000-05-17 17:16 markt * USAGE, brhist.c, get_audio.c, lame.c, lame.h, main.c, quantize.c, reservoir.c, util.c, util.h, vbrquantize.c: moved framenum, totalframes into lame.h (so programs which use libmp3lame can compute statis info.) 2000-05-15 14:34 takehiro * newmdct.c: more coding hack. 2000-05-14 23:38 cisc * newmdct.c: Changed M_PI to PI 2000-05-14 08:12 takehiro * newmdct.c: Naoki's short block mdct and more my coding hack for mdct 2000-05-14 05:51 takehiro * newmdct.c, util.h: mdct_long coding hack 2000-05-12 11:59 robert * util.h, lame.c, newmdct.c: code cleanup 2000-05-12 09:51 takehiro * newmdct.c, doc/html/history.html: more work in mdct_long and window_filtering 2000-05-12 05:03 markt * testcase.mp3: updated testcase.mp3 2000-05-12 05:02 markt * version.h: updated version to 3.83 alpha 2000-05-12 05:01 markt * API, README, version.h, doc/html/history.html: version 3.83 2000-05-10 13:55 takehiro * quantize-pvt.c: dirty hack for IEEE 754 FPU 2000-05-09 16:31 afaber * Dll/BladeMP3EncDLL.c: Fixed problem with build date string, temp string was not initialized properly (was missing a terminator character) 2000-05-09 11:30 takehiro * newmdct.c: Naoki's mdct_long with my coding hack. 2000-05-09 02:45 cisc * API, brhist.c: Added NOTERMCAP define and changed brhist.c accordingly. 2000-05-08 22:48 markt * testcase.mp3: [no log message] 2000-05-08 22:41 markt * quantize-pvt.c, doc/html/history.html: updated side channel 320kbs fix 2000-05-08 22:30 robert * Makefile, quantize-pvt.c: M/S reduce_side bug fixed, nonISO buffer mode should work now for 320 kbits MS streams too 2000-05-08 19:55 afaber * Dll/BladeMP3EncDLL.c: Bumped up version number of DLL version library, fixed some of the debugging code 2000-05-08 17:46 markt * doc/html/: contributors.html, examples.html, id3.html, index.html, lame.css, node5.html, node6.html, switchs.html: updated docs from Gaby 2000-05-08 17:40 markt * version.h: 3.82 alpha(CVS) version 2000-05-08 17:38 markt * version.h, doc/html/history.html: 3.81beta release 2000-05-08 17:31 markt * Makefile, USAGE, VbrTag.c, brhist.c, lame.h, parse.c, reservoir.c, util.c: removed ISO buffer limitation, added --strictly-enforce-ISO option 2000-05-08 00:06 markt * quantize-pvt.c, reservoir.c, vbrquantize.c: started work on vbrquantize.c 2000-05-07 11:09 robert * Makefile, Makefile.MSVC, lame.c, parse.c: -F option now working, updated Makefile for DOS 2000-05-07 03:59 takehiro * newmdct.c, util.h: new IDCT32 routine from Naoki and optimized by me. and more thread safe coding. 2000-05-06 22:20 markt * testcase.mp3: updated testcases 2000-05-06 22:20 markt * l3bitstream-pvt.h, lame.dsp, Dll/MP3EncDll.dsp: updated project files (for removal of ISO code) 2000-05-06 22:18 markt * Makefile, VbrTag.c, VbrTag.h, formatBitstream.c, formatBitstream.h, l3bitstream.c, l3bitstream.h, lame.c, quantize.c, util.c, util.h, vbrquantize.c: removed all ISO code 2000-05-06 22:09 markt * version.h: updated version to 3.81 alpha 1 (CVS version) 2000-05-06 22:07 markt * Makefile: updated makefile for beta release 2000-05-06 22:05 markt * version.h, doc/html/history.html: updated version for 3.80 beta release 2000-05-06 22:04 markt * USAGE, lame.c, lame.h, main.c, parse.c, quantize.c, vbrquantize.c: added -F option and compression ratio options 2000-05-06 19:16 markt * USAGE, lame.c, lame.h, parse.c, util.c: --freeformat option added. Allows lame to write free format bitstreams 2000-05-06 18:45 markt * bitstream.c, gtkanal.c, lame.c, parse.c, psymodel.c, quantize.c, util.h, mpglib/interface.c, mpglib/main.c: fixed buffer overflow in bitstream.c, some improvements to mpglib mp3 playback 2000-05-06 09:27 afaber * Dll/MP3EncDll.dsp: Update workspaces 2000-05-05 20:48 markt * get_audio.c, mpglib/common.c, mpglib/interface.c, mpglib/main.c, mpglib/mpg123.h, mpglib/mpglib.h: free format mp3 decoding now supported, not fully tested 2000-05-04 00:07 takehiro * takehiro.c: new count bits routine, speed up by coding hack. 2000-05-03 07:23 markt * psymodel.c: updated comments 2000-05-03 07:21 markt * psymodel.c, testcase.mp3: minor change to long block pre-echo control 2000-05-03 07:18 markt * psymodel.c, testcase.mp3: minor improvement to long block pre-echo control 2000-05-03 03:03 markt * mpglib/interface.c: one last tweak to interface.c 2000-05-03 02:37 markt * bitstream.c, mpglib/common.c, mpglib/interface.c, mpglib/layer3.c, mpglib/mpg123.h, mpglib/mpglib.h: worked on mpglib/interface.c to make it handle free format bitstreams. (not yet working) 2000-05-02 18:31 afaber * Dll/: BladeMP3EncDLL.c, MP3EncDll.dsp: Update lame version, bug fixes to play list file generation 2000-05-02 02:53 markt * reservoir.c: for CBR encoding, 320kbs, dont allow main_data_begin > 0 2000-05-02 01:24 markt * gtkanal.c, lame.c, psymodel.c, quantize-pvt.c, quantize.c, testcase.mp3: tweaked a bunch of bit allocation on PE settings, based on tunings of testsignal2.wav and castanets.wav 2000-05-01 18:18 markt * bitstream.c, brhist.c, brhist.h, lame.c, lame.dsp, lame.h, parse.c, quantize-pvt.c, reservoir.c, util.h, Dll/MP3EncDll.dsp: bunch of vbr histogram tweaks, and added --athshort option for internal testing only 2000-04-30 17:54 robert * lame.bat: DOS batch file to put on Win9x Desktop you can drag and drop waves on it and lame will encode them to mp3 2000-04-29 23:41 markt * bitstream.c, reservoir.c, testcase.mp3: moved where main_data_begin was corrected when padding into ancillary data 2000-04-26 18:14 markt * USAGE, lame.h, main.c, parse.c: added the '--decode' option 2000-04-26 00:54 markt * machine.h, main.c, mpglib/decode_i386.c, mpglib/layer3.c: moved calls to open the output file until after all arguments and other conditions are checked. 2000-04-24 22:22 markt * reservoir.c, testcase.mp3: disabled acillary drain (pre-frame) because of bugs at 320kbs Could be player or encoder bug - have to investigate 2000-04-19 21:35 robert * psymodel.c: MPEG2.5 related bug fixed 2000-04-19 19:35 markt * lame.c, lame.h, parse.c, quantize-pvt.c: fixed bug allowing more than 4096 bits in a granule 2000-04-18 22:57 markt * lame.c, lame.h, psymodel.c, reservoir.c, takehiro.c, util.h: lame is now (*maybe*) thread safe! 2000-04-18 08:35 markt * VbrTag.c, VbrTag.h, bitstream.c, brhist.c, get_audio.c, get_audio.h, id3tag.c, id3tag.h, l3bitstream.c, lame.c, lame.h, parse.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c, reservoir.h, testcase.mp3, util.c, util.h, vbrquantize.c, Dll/BladeMP3EncDLL.c: more thread-safe work, and id3/vbr tag bug discovered by Iwasa Kasmi 2000-04-17 23:29 markt * lame.c, psymodel.c, quantize-pvt.c, quantize.c, util.h, vbrquantize.c: tweaks to vbrquantize.c 2000-04-17 06:12 markt * lame.c, testcase.mp3, vbrquantize.c: updated test cases 2000-04-17 05:16 markt * bitstream.c, l3bitstream.c, l3side.h, lame.c, quantize-pvt.c, reservoir.c, mpglib/main.c: fixed VBR stuffing bits problem. if VBR uses a large frame, then ResvMax may become small, and we have to make sure that main_data_begin doesn't create a buffer which violates this condition. The old code wouldn't check the above, but it would pad the current frame with 0's (wasting bits) to make sure the *next* frame didn't violate the ResvMax condition. But this results in wasted bits because in VBR there is a change the *next* frame will be at a lower bitrate and thus have a larger ResvMax. 2000-04-17 02:25 markt * API, Makefile, get_audio.c, gtkanal.c, lame.c, lame.h, main.c, mp3x.c, parse.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c, util.h, vbrquantize.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpglib.h: Removed gtk specific code from libmp3lame.a: libmp3lame.a can now be compiled to support the mp3 frame analyzer but does not require gtk to be installed. (and thus, HAVEGTK does not occure in any of the library routines). To compile the frame analyzer (mp3x) you of course still need gtk installed. 2000-04-17 00:38 markt * VbrTag.c, mpglib/main.c: another attempt at fixing mpeg2.5 xing header 2000-04-16 20:56 markt * VbrTag.c: VBR header for MPEG2.5 fixed. 2000-04-14 00:37 markt * lame.c, main.c, parse.c, quantize-pvt.c, reservoir.c, reservoir.h, vbrquantize.c: tweaks to vbrquantize.c 2000-04-13 01:57 markt * version.h (lame3_70): fixed version 2000-04-13 01:19 markt * lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, util.h, vbrquantize.c: vrbquantize bounds checking 2000-04-12 18:44 markt * lame.c, psymodel.c, quantize.c, testcase.mp3, util.h, vbrquantize.c: removed gfc->masking_lower 2000-04-12 18:29 markt * Makefile, quantize-pvt.c, quantize.c: Robert's VBR quality control mode now the default! 2000-04-12 18:19 markt * lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, util.h, vbrquantize.c: removed static masking_lower 2000-04-12 18:10 markt * quantize-pvt.c, quantize.c: removed reduce_sidechannel static 2000-04-12 18:08 markt * quantize-pvt.c, quantize.c, vbrquantize.c: removed convert_mdct static variable 2000-04-12 18:06 markt * quantize-pvt.c, util.h: removed static variables ATH_l, ATH_s 2000-04-12 15:47 markt * lame.c, psymodel.c, quantize.c, vbrquantize.c, doc/man/lame.1: removed qthr_l, qthr_s from psymodel.c fixed man pages. enabled new VBR code with -Y disabled -Z option: it was broken since subblock gains were not scaled into xrpow 2000-04-12 01:37 markt * mpglib/layer3.c: gtk changes 2000-04-12 01:36 markt * gtkanal.c, lame.c, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.h, testcase.mp3, vbrquantize.c: new vbr quantize code mostly done! 2000-04-11 18:24 markt * Makefile, get_audio.c, get_audio.h, gtkanal.c, gtkanal.h, lame.c, lame.h, quantize.c, util.h, vbrquantize.c: removed all static variables from get_audio.c 2000-04-11 15:59 markt * HACKING: updated HACKING 2000-04-11 15:55 markt * API, l3side.h, lame.c, quantize-pvt.c, quantize-pvt.h, util.h, vbrquantize.c: updated API 2000-04-11 00:33 markt * lame.c, vbrquantize.c: work on vbrquattize.c 2000-04-10 20:24 markt * lame.c, main.c, quantize-pvt.c, quantize.c, util.c, util.h: bug fixed: mfbuf overflow, and check for overflow was being done, but after the overflow and in this case the overflow was causing the check to pass. 2000-04-10 16:41 markt * lame.c, quantize.h, util.c, util.h, vbrquantize.c: precompute 16 windows for downsampling. much faster. 2000-04-09 21:53 markt * bitstream.c, quantize-pvt.c, quantize.c, reservoir.c, util.c, mpglib/layer3.c, mpglib/main.c: MPEG2.5 8khz sampling rate fixes 2000-04-09 02:08 markt * encoder.h, lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, reservoir.c, testcase.mp3: tweaked bit reservoir growth, bits on pe allocation 2000-04-08 23:33 markt * lame.c, quantize-pvt.c, takehiro.c, testcase.mp3: tweaks to on_pe, side channel bit allocation 2000-04-08 20:33 markt * encoder.h, testcase.mp3: switched to encoder delay of 576 2000-04-08 20:31 markt * bitstream.c, tables.c: [no log message] 2000-04-08 20:22 markt * bitstream.c, quantize.c, takehiro.c, testcase.mp3, util.c, util.h: Takehiro's more efficient short block huffman coding. 2000-04-08 18:08 markt * lame.c: VBR compression ratio calculation 2000-04-08 01:26 cisc * bitstream.c: Use INLINE dammit! ;) 2000-04-07 00:11 markt * util.c: fixed M_PI problem 2000-04-06 21:08 robert * bitstream.c: scalefac_band compile fix 2000-04-06 19:26 markt * doc/html/history.html (lame3_70): [no log message] 2000-04-06 19:17 markt * Makefile, version.h (lame3_70): [no log message] 2000-04-06 18:49 markt * Makefile (lame3_70): [no log message] 2000-04-06 18:48 markt * version.h, doc/html/history.html (lame3_70): version 3.70 2000-04-06 18:30 markt * gtkanal.c, l3bitstream-pvt.h, l3bitstream.c, l3side.h, lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, testcase.mp3, util.h, vbrquantize.c: made scalefac_band non-local 2000-04-06 18:23 markt * bitstream.c: [no log message] 2000-04-06 18:19 markt * bitstream.h: [no log message] 2000-04-06 18:18 markt * bitstream.c: opps, forgot to add this... 2000-04-06 17:31 markt * Makefile.MSVC, lame.dsp, Dll/MP3EncDll.dsp: MSVC project files updated 2000-04-06 17:29 markt * VbrTag.c, VbrTag.h, lame.c, util.c, util.h: takehiro bitstream.c now on by default! 2000-04-06 16:32 markt * takehiro.c, mpglib/layer3.c: takehiro bitstream.c now working for CBR, disabled by default 2000-04-05 08:54 markt * Makefile, l3bitstream.c, lame.c, quantize-pvt.c, quantize-pvt.h, tables.c, tables.h, takehiro.c, util.c, util.h: takehiro's bitstream.c package close to being interface into lame. 2000-04-05 01:38 markt * lame.c, util.c: mode_fixed bug 2000-04-05 01:38 markt * lame.c (lame3_70): mode_fixed bug fixed 2000-04-04 22:49 markt * version.h, doc/html/history.html (lame3_70): updated version 2000-04-04 21:36 robert * parse.c: [no log message] 2000-04-04 20:37 cisc * amiga_mpega.c (lame3_70): Fixed nsamp overflow problem. 2000-04-04 19:51 markt * lame.c, util.c, util.h: upsampling uses old interpolation code downsampling uses good, FIR/blackman window code 2000-04-04 19:27 markt * version.h (lame3_70): updated version 2000-04-04 19:05 markt * Makefile.MSVC: loopold removed from makefile.msvc 2000-04-04 17:45 markt * parse.c (lame3_70), parse.c: cwlimit parsing fixed 2000-04-04 16:05 markt * lame.c (lame3_70), lame.c: default mode will use jstereo 2000-04-04 03:20 markt * Dll/BladeMP3EncDLL.c (lame3_70): [no log message] 2000-04-04 03:20 markt * Dll/BladeMP3EncDLL.c: more fixes 2000-04-03 19:50 markt * quantize-pvt.c: more gfc changes 2000-04-03 19:19 markt * HACKING, lame.c, newmdct.c, quantize-pvt.c, quantize.c, util.c, util.h: more thread-safe work. (moving all static variables into gfc-> struct) 2000-04-03 18:24 markt * brhist.c, get_audio.c, gtkanal.c, l3bitstream.c, l3bitstream.h, lame.c, lame.h, newmdct.c, parse.c, psymodel.c, quantize-pvt.c, quantize.c, quantize.h, reservoir.c, takehiro.c, util.c, util.h, vbrquantize.c: more massive internal changes in the goal of making lame thread safe. gfp-> user controlled varialbes gfc-> all other internal parameters. eventually all global variables which very from encode to encode need to go in here. 2000-04-03 16:00 markt * Dll/BladeMP3EncDLL.c: dll finally fixed! 2000-04-03 15:59 markt * Dll/BladeMP3EncDLL.c (lame3_70): dll fixes 2000-04-03 15:39 markt * lame.c, Dll/BladeMP3EncDLL.c (lame3_70): bug in lame_enc dll fixed? 2000-04-03 15:38 markt * Dll/BladeMP3EncDLL.c: bug in lame_enc.dll finally fixed? 2000-04-03 01:19 markt * lame.c: tweaked output display 2000-04-03 01:07 markt * lame.c, Dll/BladeMP3EncDLL.c: new resample routine. very slow, but much higher quality. 2000-04-02 19:38 robert * parse.c: overhauled presets: + redesign of help page + phone uses now MPEG2.5 8kHz + sw new, for short wave radio @ 11.025 kHz 24kbits + am new, for am radio @ 16 kHz 32 kbits + fm changed, 22.05 kHz 64 kbits + radio new, the old fm at 112 kbits rest minor tunings 2000-04-02 02:57 markt * Dll/BladeMP3EncDLL.c (lame3_70): [no log message] 2000-04-02 02:44 markt * Dll/: BladeMP3EncDLL.c (lame3_70), BladeMP3EncDLL.c: [no log message] 2000-04-02 01:56 markt * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.h (lame3_70): Dll updates 2000-04-02 01:55 markt * Dll/BladeMP3EncDLL.c: more DLL updates 2000-04-02 01:39 markt * parse.c, util.c: MPEG2.5 docs 2000-04-02 01:35 markt * l3bitstream.c, lame.c, lame.h, psymodel.c, quantize-pvt.c, quantize-pvt.h, util.c, util.h, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.h: MPEG2.5 support 2000-04-01 11:47 robert * lame.c, parse.c: + added --version and --license switch + changed --help to give only most important options so that it fits on a 80x24 terminal display + added --longhelp switch to get the full options list + changed -v and -Vx, now they switch quality to 2 you can go down below 2 by adding -f or -q5 + changed presets: turned off highpass filters except for "phone" voice sample freq now 22.05 kHz, due to mpg123 bug 2000-04-01 01:09 markt * Dll/BladeMP3EncDLL.c (lame3_70): more dll bug fixes (mono) 2000-04-01 00:04 markt * version.h (lame3_70): updated version to 3.68 alpha 1 2000-03-31 23:56 markt * Dll/BladeMP3EncDLL.c (lame3_70): fixed mono bug 2000-03-31 23:53 markt * lame.c, vbrquantize.c, Dll/BladeMP3EncDLL.c: mono encoding bug in DLL fixed 2000-03-31 22:47 robert * Makefile, quantize-pvt.c, quantize-pvt.h: removed RH_ATH/RH_SIDE_CBR code 2000-03-31 22:45 robert * quantize.c: minor frame analyzer fix for VBR, removed RH_ATH/RH_SIDE_CBR code 2000-03-30 23:39 markt * lame.c, parse.c (lame3_70): undocumented -q option for internal testing 2000-03-30 23:38 markt * get_audio.c, gtkanal.c, lame.c, main.c, parse.c, quantize.c: added -q option for internal testing. sets value of gfp->quality 2000-03-30 19:51 markt * testcase.mp3: updated test case for new CVS version 2000-03-30 09:37 markt * INSTALL: wingtk doc 2000-03-30 09:36 markt * INSTALL: [no log message] 2000-03-30 08:24 markt * INSTALL, README: updated docs 2000-03-30 08:04 markt * README.WINGTK, lame.dsp, Dll/MP3EncDll.dsp: new directions for compiling mp3x under windows 2000-03-30 07:54 markt * lame.dsp (MSVC6), README.WINGTK: updated project files 2000-03-30 07:00 markt * lame.dsp (MSVC6), Dll/MP3EncDll.dsp: updated project files 2000-03-30 05:39 markt * VbrTag.c, gtkanal.c, gtkanal.h, l3bitstream.c, lame.c, machine.h, psymodel.c, quantize.c, takehiro.c, mpglib/layer3.c: added big_values display to mp3x 2000-03-30 05:38 markt * VbrTag.c, l3bitstream.c, lame.c, machine.h, quantize.c, takehiro.c, vbrquantize.c: fixed 2 bugs: l3bitstream.c: 1. The quadruples were encoded with the wrong sign: Any non-zero coefficient in the count1 block was marked as negative! takehiro.c: 2. short blocks were using a cod_info->big_values=288 (which should be 576, because big_values was multiplied by 2 in the new version of takehiro.c) 2000-03-29 20:49 markt * doc/html/: contributors.html, examples.html, history.html, id3.html, index.html, lame.css, node6.html, switchs.html: new docs from Gabriel 2000-03-29 02:00 markt * l3bitstream.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c, takehiro.c, util.c, vbrquantize.c, brhist.c, fft.c, get_audio.c, globalflags.h, gtkanal.c, gtkanal.h, lame.c, newmdct.c, parse.c: removed globalflags.h 2000-03-29 01:55 markt * globalflags.h (lame3_70), brhist.c, fft.c, get_audio.c, gtkanal.c, gtkanal.h, lame.c, newmdct.c, parse.c, vbrquantize.c: removed "globalflags.h" 2000-03-29 01:06 markt * lame.c: missing free() calls in lame_encode_buffer_interleave 2000-03-28 16:41 takehiro * takehiro.c: oops, this may remove any seg.fault bug... 2000-03-28 15:39 takehiro * takehiro.c: Oops, I mistake count1 for big_values 2000-03-28 13:08 cisc * amiga_mpega.c: Fixed overflow problem with nsamp calculation. 2000-03-27 22:09 markt * lame.c: fixes to lame_encode_buffer_interleave 2000-03-27 22:09 markt * lame.c: fixes to lame_encode_buffer_interleave() 2000-03-27 21:46 robert * takehiro.c: added assertion, cos here is a bug 2000-03-27 21:34 markt * doc/html/history.html: updated history.html 2000-03-27 21:33 markt * version.h: [no log message] 2000-03-27 21:09 markt * lame.c: minor change with ms_ener_ratio_ave 2000-03-27 21:06 markt * lame.c: ms_ener_ratio_ave M/S override switch turned off 2000-03-27 20:58 markt * version.h: changed version number. 3.80 is the next beta version, 3.70 is the stable version 2000-03-27 19:42 markt * version.h (lame3_80): updated version in the lame3_80 branch 2000-03-27 19:42 markt * version.h: this is new the future version 3.81beta 2000-03-27 19:39 markt * l3bitstream.c, quantize.c, tables.c, takehiro.c (lame3_80): The next "official" stable release, lame3.80. lame3_80 is a branch. This will not include Takehiro's latest lossless encoding stuff. (l3bitstream.c, quantize.c, tables.c, takehiro.c) 2000-03-27 19:26 markt * takehiro.c: gfp->use_scfsi replaced by mode_gr==2 2000-03-27 17:53 markt * get_audio.c, lame.c, main.c, util.c, version.h: Ingo -f fast-math rounding problem fix 2000-03-27 15:59 takehiro * takehiro.c: debugged seg.fault when count1 is 576 2000-03-26 21:21 markt * quantize.c: opps, i screwed up quantize.c! fixed version 2000-03-26 10:05 markt * Makefile, gtkanal.c, gtkanal.h, lame.c, quantize.c, mpglib/layer3.c: disabled noise_shaping_stop=1, fixed jstereo default mode problem, updated frame analyzer 2000-03-25 18:16 cisc * takehiro.c: Use INLINE define instead of inline. 2000-03-25 16:18 takehiro * lame.c: enable noise_shaping==1 when high quality mode even without -X 2000-03-25 16:17 takehiro * takehiro.c: debug seg.fault when big_values==0 2000-03-25 15:01 takehiro * l3bitstream.c, quantize-pvt.c, quantize-pvt.h, quantize.c, tables.c, takehiro.c: best huffman divide now "more best" huffman coding. 2000-03-25 03:35 takehiro * Makefile, l3bitstream.c, l3side.h, lame.c, psymodel.c, quantize-pvt.c, tables.c, takehiro.c: new faster lossless coding routine(especially with -h) 2000-03-25 00:06 markt * get_audio.c, main.c, quantize-pvt.h, quantize.c, takehiro.c, testcase.mp3: added some code to best_scalefac_store: if ix=0 in a scalefactor band, set the scalefactor to 0 also, to save a few bits. 2000-03-24 23:06 markt * lame.dsp (MSVC6), Dll/MP3EncDll.dsp: updated project files 2000-03-24 23:02 markt * get_audio.c, machine.h: _setmode stuff for windows 2000-03-24 22:37 markt * lame.h, quantize-pvt.c, mpglib/layer3.c: fixed MPEG2 tables in mpglib, added more accurate mp3buffer size bound in lame.h 2000-03-24 18:21 markt * quantize-pvt.c, quantize-pvt.h, quantize.c: [no log message] 2000-03-24 18:08 markt * lame.dsp, loopold.c, Dll/MP3EncDll.dsp: removed loopold.c 2000-03-24 18:07 markt * Makefile, gtkanal.c, lame.c, lame.h, psymodel.c, psymodel.h, quantize-pvt.c, quantize.c: Removed old M/S stereo mode which uses L/R masking functions. removed loopold.c and all that other "dual channel" stuff 2000-03-24 02:00 markt * VbrTag.c, lame.c: MPEG2 VBR tag should now work 2000-03-24 01:38 markt * VbrTag.c, VbrTag.h, lame.c, Dll/BladeMP3EncDLL.c: Xing MPEG2 headers work 2000-03-23 22:13 markt * Makefile: uncommented options in makefile 2000-03-23 22:12 markt * API, Makefile, lame.c, lame.h, util.c, mpglib/common.c: strange bug with -f fast-math option under gcc: it would compute the mp3 framesize wrong, due to incorrect integer truncation. Replaced implicit integer truncation with floor() to fix this. 2000-03-23 20:30 markt * Makefile, get_audio.c, lame.c, lame.h: autoconvert moved into lame_encode_buffer 2000-03-23 20:02 markt * Makefile, lame.c, lame.h: lame_encode_buffer_interleaved added to API 2000-03-22 17:14 markt * vbrquantize.c: minor fixes 2000-03-22 04:15 markt * version.h, doc/html/history.html: lame 3.66 2000-03-22 02:03 markt * USAGE, gtkanal.c, lame.c, machine.h, main.c, parse.c, quantize-pvt.c: float/double version of ASM quantize routines 2000-03-21 23:02 markt * brhist.c, brhist.h, gtkanal.c, gtkanal.h, l3bitstream-pvt.h, l3bitstream.c, l3bitstream.h, lame.c, loopold.c, newmdct.c, newmdct.h, psymodel.c, psymodel.h, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, reservoir.c, reservoir.h, takehiro.c, util.c, util.h, vbrquantize.c, mpglib/layer3.c: replaced all "gf." by gfp-> 2000-03-21 20:58 markt * lame.c: fixed bug in lame_encode_finish: if user informs lame that mp3buffer has size 0, lame will not check to make sure the mp3buffer is big enough to store the encoded data 2000-03-19 22:29 afaber * lame.c, Dll/BladeMP3EncDLL.c: Fixes to the lame DLL encoder: If last frame is too short, set number of output bits to 0 instead of -1 Don't disable the bWriteVBRTag flag if input file is null 2000-03-19 20:07 cisc * get_audio.c: Byteswapping (-x) didn't work when using LIBSNDFILE 2000-03-18 00:33 cisc * parse.c: Fixed typo in define. 2000-03-18 00:32 cisc * amiga_mpega.c: Erk, didn't spot the array/pointer relation, restored to previous version. 2000-03-17 22:09 cisc * amiga_mpega.c: b[] is a pointer, so supply addresses of pcm_l&r. 2000-03-17 19:29 markt * lame.c: VBR was displaying MPEG2 bitrates - fixed. 2000-03-17 04:31 markt * machine.h: added note to machine.h 2000-03-17 04:30 markt * version.h, doc/html/history.html: uncommented gcc ASM code 2000-03-17 04:27 markt * quantize-pvt.c: uncommended the GCC ASM code for quantize_xrpow() 2000-03-17 00:07 markt * doc/html/history.html: updated history 2000-03-17 00:05 markt * amiga_mpega.c, get_audio.c, lame.h, version.h, mpglib/main.c, mpglib/mpglib.dsp: some tweaks to API for lame_decode_fromfile 2000-03-16 23:59 markt * lame.dsp, mpglib/mpglib.dsp (MSVC6), Dll/BladeMP3EncDLL.c: project file tweaks 2000-03-16 23:36 markt * get_audio.c, lame.dsp, lame.h, parse.c: updated project files MSVC5 2000-03-16 23:19 markt * lame.dsp, mpglib/mpglib.dsp (MSVC6), main.c: updated MSVC6 branch project files 2000-03-16 19:42 markt * Dll/BladeMP3EncDLL.c: update to bladedll 2000-03-16 19:38 markt * gtkanal.c, lame.h, mpglib/main.c: one last change to lame_decode()... 2000-03-16 19:05 markt * get_audio.c, get_audio.h, gtkanal.c, gtkanal.h, lame.c, lame.h, main.c, mp3rtp.c, mp3x.c, parse.c, util.c, util.h: more and these really should be the last changes to the API 'gf' is no substantiated by the calling program, and passed to all lame_routines(). This is so lame can eventually be made re-entrant by putting all static vars in the gf struct. 2000-03-16 16:44 markt * VbrTag.c, loopold.c, machine.h, takehiro.c, timestatus.c, util.h: strict ansi patches from Heiko.Eissfeld 2000-03-16 05:33 markt * USAGE, main.c: updated USAGE 2000-03-16 05:28 markt * mpglib/mpglib.dsp: revert back to MSVC5 2000-03-16 05:26 markt * lame.dsp, lame.dsw (MSVC6), main.c, mpglib/mpglib.dsp: MSVC changes to compile lame.exe 2000-03-16 00:24 markt * timestatus.c: fixed CPU/playing time display bug 2000-03-15 20:37 markt * encoder.h, l3bitstream.c, lame.h, parse.c, psymodel.c, takehiro.c: minor changes 2000-03-15 01:34 markt * filters.c, filters.h: removed filters.c, filters.h 2000-03-15 01:30 markt * Dll/MP3EncDll.dsp: updated MSVC6 project files (in MSVC6 branch) 2000-03-15 01:20 markt * Dll/: MP3EncDll.dsp, MP3EncDll.dsw: reverting back to MSVC5 2000-03-15 01:14 markt * parse.c, Dll/BladeMP3EncDLL.c, Dll/MP3EncDll.dsp, Dll/MP3EncDll.dsw: updated bladeenc dll 2000-03-14 21:01 markt * lame.c, loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, reservoir.c, reservoir.h, util.c, util.h, vbrquantize.c: removed fr_ps struct 2000-03-14 20:45 markt * brhist.c, brhist.h, l3bitstream.c, l3bitstream.h, lame.c, lame.h, psymodel.c, psymodel.h, quantize-pvt.c, quantize-pvt.h, quantize.c, reservoir.c, timestatus.h, util.c, util.h, vbrquantize.c: removed "info" sturct. Removing fr_ps struct 2000-03-14 07:21 markt * brhist.c, l3bitstream.c, lame.c, lame.h, loopold.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c, timestatus.c, timestatus.h, util.c, util.h: removed more info-> variables 2000-03-14 06:36 markt * lame.c, lame.h: removing some of the info-> variables 2000-03-10 23:21 cisc * amiga_mpega.c: Had to make a dummy break-function to make atexit() work. 2000-03-10 23:18 markt * loopold.c: segfault fixed in loopold.c when count[] was zero for one channel and non-zero for the other 2000-03-10 20:56 markt * API, Makefile, gtkanal.c, lame.c, lame.h, version.c: added lame_version to the API 2000-03-10 20:13 markt * Dll/BladeMP3EncDLL.c: removed some unnecessary #includes 2000-03-10 19:48 markt * Dll/MP3EncDll.dsp: added #define LAMEPARSE to Blade project files 2000-03-10 19:38 markt * Dll/: BladeMP3EncDLL.c, MP3EncDll.dsp: Blade dll updated to handle new interface Albert: Sorry if I broke anything, the old version is still in CVS :-) 2000-03-10 18:55 markt * Dll/BladeMP3EncDLL.c (test): testing... 2000-03-10 16:01 markt * Dll/BladeMP3EncDLL.c: BladeMP3 changes 2000-03-10 01:41 markt * Dll/BladeMP3EncDLL.c: some changes to update BaldeMP3encdll 2000-03-09 19:42 markt * quantize-pvt.c, takehiro.c: quantize_xrpow_ISO also uses tablelookup, so it also needed the "xr too big" check 2000-03-09 18:05 markt * HACKING, get_audio.c, gtkanal.c, lame.c, lame.h, main.c, parse.c: [no log message] 2000-03-08 00:16 markt * Makefile, parse.c: Robert's presets restored. polyphase filters now except filterwidth arguments. 2000-03-08 00:05 markt * lame.c, lame.h, newmdct.c: polyphase filter now supports lowpasswidth and highpasswidth option 2000-03-07 23:10 cisc * API: Added AMIGA_MPEGA #define, and fixed a few minor spelling errors... ;) 2000-03-07 22:56 cisc * amiga_mpega.c: Made sure lame_decode_fromfile() won't return an empty frame (unless there's an error). 2000-03-07 18:33 markt * API, Makefile, get_audio.c, lame.c, main.c, parse.c: minor tweeks to compile w/o decoding library 2000-03-07 08:01 sbellon * lame.c: fixed RISC OS FPE support 2000-03-06 23:28 markt * API: API description 2000-03-06 19:55 markt * lame.dsp: [no log message] 2000-03-06 19:53 markt * Makefile, Makefile.MSVC, get_audio.c, get_audio.h, id3tag.h, lame.c, lame.dsp, lame.h, parse.c, Dll/MP3EncDll.dsp, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/interface.c, mpglib/layer3.c, mpglib/main.c, mpglib/tabinit.c: More library work. Sorry to all the non-unix developers out there, but this will break all project files. (but we are very close to the end of the modularization work). New code needs the following #defines set somewhere: #define HAVEMPGLIB to use mpglib's mp3 *decoding* capibility (or AMEGA_MPEGA on amiga systems, and dont define HAVEMPGLIB) #define BRHIST to allow the display of the VBR historgram #define LIBSNDFILE to use Erik de Castro Lopo's libsndfile #define LIBSNDLAME to use LAME's minimial internal sndfile I/O #define LAMEPARSE to use LAME's command line parsing/option setting routines #define HAVEGTK to compile in support for the GTK mp3 frame analyzer 2000-03-06 15:16 markt * filters.c, lame.c, lame.h, newmdct.c, parse.c, testcase.mp3: polyphase filters are now working! some tuning of polyphase fiters. removed MDCT filters, sfb21 cutoff. 2000-03-06 03:59 markt * gtkanal.c, lame.c, newmdct.c, psymodel.c: new polyphase filters 2000-03-05 19:07 markt * psymodel.c: Gabriel: L/R block matching fix 2000-03-05 18:37 markt * id3tag.c, id3tag.h, lame.c, lame.h, newmdct.c, parse.c, doc/html/id3.html: id3v1.1 tags from Don Melton 2000-03-04 17:19 markt * get_audio.c, lame.c: resampling moved to fill_buffer_resample() in lame.c, which has linear and 3rd order resampling 2000-03-04 15:31 markt * amiga_mpega.c, get_audio.c, lame.c, main.c, quantize-pvt.c, quantize.c, vbrquantize.c: patch from kimmo to remove more c++ comments, fill_buffer_linear_resample code 2000-03-04 05:13 markt * lame.c: fill_buffer routines 2000-03-03 19:25 markt * encoder.h, mp3rtp.c: mp3rtp uses new, simplified lame_encode_buffer interface 2000-03-03 19:01 markt * encoder.h, lame.c, lame.h, main.c, testcase.mp3: added lame_encode_buffer, the new, prefered encoding interface 2000-02-29 21:19 robert * parse.c: minor change, exit if wrong preset type was given 2000-02-29 19:54 robert * fft.c: minor speed up (at least for gcc) 2000-02-29 18:00 sbellon * lame.c: moved RISC OS floating point exception part into debugging area 2000-02-27 19:11 robert * quantize-pvt.c, quantize-pvt.h, quantize.c: removed unused parameter 2000-02-27 18:36 robert * psymodel.c: code clean up, giving an overall speed up of 3-4% 2000-02-25 07:00 markt * lame.c: minor cleanup 2000-02-24 15:30 robert * loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c: code cleanup, removed unused parameter 2000-02-23 02:40 cisc * amiga_mpega.c: Fixed up the cleanup function. 2000-02-22 23:21 robert * quantize-pvt.c, testcase.mp3: switched back to original bin_search_stepsize routine 2000-02-22 03:14 markt * quantize-pvt.c, testcase.mp3: RH bin_search_stepsize now the default 2000-02-22 00:54 cisc * amiga_mpega.c: Oh, nevermind, wasn't very efficient here, proper place would be in sndfile.lib 2000-02-22 00:15 cisc * lame.h, main.c: Minor fixes. 2000-02-21 23:58 cisc * amiga_mpega.c: Make sure input-file is closed when CTRL-C is received. 2000-02-21 23:05 markt * Makefile, get_audio.c, gtkanal.c, ieeefloat.c, l3bitstream.c, main.c, util.c, doc/html/history.html, mpglib/main.c: some 64bit DEC Alpha patches 2000-02-21 22:40 robert * quantize-pvt.c: speed up of bin_search_stepsize, the bin_search is about 20% faster, resulting in an average speed up of 2-3%, disabled by default as it breaks the testcase 2000-02-21 22:39 sbellon * main.c: further RISC OS support added 2000-02-21 00:21 markt * lame.c: minor 2000-02-20 23:36 markt * get_audio.c, lame.c, lame.h, main.c, mp3rtp.c, parse.c: num_samples /eof fix, ABORTFP fix, stdout mode setting fix 2000-02-20 20:31 markt * mpglib/common.c: better error message 2000-02-20 20:03 robert * get_audio.c: removed warning about fill up with zeros again, it is common at the end of an input file 2000-02-20 19:26 robert * Makefile, quantize-pvt.c, quantize-pvt.h, quantize.c: code cleanup 2000-02-20 18:45 robert * psymodel.c: code cleanup 2000-02-20 14:09 robert * formatBitstream.c: fixed assertion failure while flushing bitstream at end of encoding 2000-02-20 14:08 robert * get_audio.c: applied patch from Jeremy Hall to fix stdin problem 2000-02-19 13:32 afaber * fft.c, formatBitstream.c, formatBitstream.h, get_audio.c, ieeefloat.c, l3bitstream.c, machine.h, quantize-pvt.c, quantize.c, takehiro.c, mpglib/mpg123.h: Fixed many warning messages when compiling with MSVC 2000-02-19 12:15 afaber * VbrTag.c: Applied patch from Mathew Hendry to avoid divide by zero 2000-02-18 16:21 robert * quantize-pvt.c: Mathew Hendry: line 813 should read "#define USE_MSC_ASM" and not "#define USE_MSC_AMS" 2000-02-18 16:20 robert * Makefile.MSVC: Mathew Hendry: "stray space character following the \" patched 2000-02-18 16:07 robert * lame.c: Mathew Hendry's CYGWIN gcc FPU control patch 2000-02-18 06:16 markt * Makefile, gtkanal.c, lame.c, testcase.mp3: changed sizeof frame analyzer so it fits on a 800x600 screen. make --nores also set info->padding = 0. Avoids problem with small changes in frac_SpF causing different padding patterns and mp3 file differences. 2000-02-17 20:12 robert * loopold.c, quantize-pvt.h, quantize.c: code clean-up, it seems the SIGFPE exceptions are gone 2000-02-16 22:42 cisc * machine.h: Fixed INLINE define for SAS/C. 2000-02-16 21:18 cisc * main.c: Include machine.h so that needed prototypes get added. 2000-02-16 07:06 markt * quantize-pvt.c, quantize-pvt.h, quantize.c: new quantize xrpow for PowerPC 2000-02-16 03:56 markt * lame.c, quantize-pvt.c: patches for risc_os 2000-02-15 22:16 robert * quantize.c: forgot to save plotting data for best quantization in VBR_iteration_loop 2000-02-15 17:12 robert * quantize-pvt.h, quantize.c: VBR_iteration_loop speedup, removed extra quantizations 2000-02-15 14:51 markt * Makefile: [no log message] 2000-02-15 14:40 markt * lame.c: some non-initilized memory patches 2000-02-15 02:01 robert * quantize-pvt.c: bug in ms_convert fixed when source and target are the same 2000-02-14 21:48 robert * quantize-pvt.c: Mathew Hendry's quantize-xrpow gcc asm patch 2000-02-14 21:47 robert * quantize.c: missing line added 2000-02-14 21:01 afaber * lame.c: Intialize float arrays to avoid floating point errors when ABORTFP is set Added floating point trapping code for MSVC compiler 2000-02-14 20:53 afaber * psymodel.c: Intialize tot_ener to avoid floating point errors 2000-02-14 05:50 markt * Makefile, loopold.c, parse.c, quantize-pvt.c, quantize-pvt.h, quantize.c: merged takehiro2 branch back into main branch. there is still a floating point exception which I cannot track down. 2000-02-14 04:53 markt * psymodel.c, takehiro.c, doc/html/contributors.html, doc/html/examples.html, doc/html/id3.html, doc/html/index.html, doc/html/switchs.html: updated html from Gabriel 2000-02-13 18:52 robert * fft.c, fft.h, psymodel.c: modified energy calculation, fast MS fft patch should work now 2000-02-11 17:21 markt * Makefile, quantize.c, reservoir.c: fixed scalefac not-initialized problem. This would happen when xr = 0 and outer_loop() was skipped. 2000-02-11 16:34 markt * psymodel.c: m/s fft patch was not working. 2000-02-10 19:00 robert * parse.c: added help info for --preset option and shuffled help text to bring it more in line 2000-02-10 16:33 robert * fft.c, fft.h, psymodel.c: applied Takehiro Tominaga's fast MS fft patch 2000-02-10 14:22 markt * doc/html/history.html: updated history file from web page 2000-02-10 06:43 markt * version.h: updated version 2000-02-10 06:15 markt * lame.c, parse.c, version.c, version.h: added version info to help output 2000-02-10 05:42 markt * psymodel.c, testcase.mp3: fixed bug in s3_s spreading function calculation. 2000-02-10 05:35 markt * loopold.c, quantize-pvt.h, quantize.c: undo some of takehiro's speedup improvements until we can track down floating point exceptions 2000-02-10 05:23 markt * Makefile, brhist.c, brhist.h, lame.c, loopold.c, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c: some bug fixes: psymodel partition band calculations done *before* the spreading function need to use npart_l_orig. After spreading function, use npart_s_orig. 3 cases of scalefac->l[i][sfb] which should be scalefac->l[sbf][i] VBR min & max bitrate index setting problem fixed 2000-02-08 17:20 afaber * lame.c: Guarded disp_brhist with #ifdef BRHIST, in order to compile with MSVC 2000-02-06 10:57 takehiro * loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, psymodel.c: new spread matrix calculation is now default(faster!) 2000-02-06 05:59 markt * gtkanal.c: Iwasa's changes to gtkanal.c 2000-02-05 12:32 robert * lame.c, lame.h, parse.c, util.c, util.h: applied Ingo Saitz command line usage patch 2000-02-05 05:16 markt * Makefile.MSVC, brhist.c, lame.c, loopold.c, machine.h, parse.c, quantize.c: minor code cleanup 2000-02-04 23:49 robert * parse.c: added "--preset type" option to offer users some usefull presettings that should shorten the commandline for most cases 2000-02-04 21:42 afaber * lame.c, lame.dsp: Fixed WIN32 compiler errors 2000-02-04 21:26 robert * parse.c: added '--help' option to allow DOS users to scroll thru the usage page with "lame --help | more" 2000-02-04 13:57 takehiro * loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: speed up hack on the array index. 2000-02-04 13:49 takehiro * psymodel.c: and more faster calculation 2000-02-04 02:29 markt * lame.h, quantize-pvt.c: minor editing 2000-02-03 15:43 takehiro * psymodel.c: some assertion bug(?) has removed 2000-02-03 15:31 takehiro * psymodel.c: more faster calculation 2000-02-02 22:30 afaber * mpglib/main.c: Added MPGLIB library 2000-02-02 22:25 takehiro * psymodel.c: faster spread function calculation 2000-02-02 17:12 markt * get_audio.h, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, vbrquantize.c: minor code cleanup 2000-02-02 10:31 markt * Makefile: testcase update 2000-02-02 10:25 markt * Makefile, filters.c, lame.c, quantize-pvt.c, quantize.c: fixed some minor bugs in new scalefac data structure code 2000-02-02 10:17 markt * Makefile, fft.c, filters.c, filters.h, gtkanal.c, l3bitstream-pvt.h, l3bitstream.c, l3bitstream.h, l3side.h, lame.c, loopold.c, psymodel.c, psymodel.h, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, tables.c, tables.h, takehiro.c, vbrquantize.c (takehiro0): The pre-takehiro1 scalefac datastructure code 2000-02-02 09:19 markt * Makefile, filters.c, lame.c, quantize-pvt.c, quantize.c (takehiro1): some bugs fixed with new scalefac struct 2000-02-01 14:09 takehiro * l3side.h, lame.c, loopold.c, psymodel.c, psymodel.h, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, vbrquantize.c: code clean up. changed definition of structure to optimize array index calculation 2000-02-01 11:26 takehiro * Makefile, fft.c, filters.c, filters.h, gtkanal.c, l3bitstream-pvt.h, l3bitstream.c, l3bitstream.h, l3side.h, lame.c, loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, quantize.h, tables.c, tables.h, takehiro.c, vbrquantize.c: scalefactor's structure changed 2000-01-31 22:21 robert * quantize-pvt.c, quantize.c: little VBR tweaks 2000-01-31 18:56 markt * get_audio.c, lame.c, lame.h, main.c, mp3rtp.c, mp3x.c, version.h: updated comments, added lame_close_infile() 2000-01-31 18:22 markt * lame.c, lame.h, main.c, mp3rtp.c, mp3x.c: more modularizaton, fixes to mp3rtp 2000-01-31 05:49 markt * mlame: spelling error 2000-01-30 23:00 cisc * fft.c: Use INLINE define instead of inline. 2000-01-30 22:19 markt * get_audio.c, lame.c, lame.h, parse.c: renamed highq quality 2000-01-30 22:01 markt * mp3rtp.c: added Felix's email to mp3rtp.c code :-) 2000-01-30 20:44 markt * lame.h: minor editing 2000-01-30 20:27 markt * lame.c, lame.h, loopold.c, parse.c, psymodel.c, quantize-pvt.c, quantize.c, takehiro.c: cleaned up highq option. highq=0 (best quality)... 9(worst quality) values supported so far: highq=9 (turned on with -f) highq=5 (default) highq=2 (turned on with -h) 2000-01-30 19:34 markt * lame.c, lame.h, machine.h, parse.c, quantize-pvt.c, takehiro.c: fixed bug in overflow check in count_bits 2000-01-30 16:19 robert * Makefile, quantize-pvt.c, quantize-pvt.h, quantize.c: introduced new RH_ATH compile switch and splitted RH_masking into RH_SIDE_VBR, RH_SIDE_CBR and RH_QUALITY_CONTROL=n (n=1,2) RH_SIDE_CBR turns off side channel reduction for CBR RH_SIDE_VBR turns off side channel reduction for VBR RH_QUALITY_CONTROL=1 plus above switches equals RH_masking RH_QUALITY_CONTROL=2 is tuned to be used with RH_ATH RH_ATH changes the definition of distortion a bit: a)PSY: noise over the PSY model threshold as average quantization noise over PSY model threshold b)ATH: max quantization noise of a single freq line over the ATH threshold of that freq line the resulting distortion is the min of a) and b) 2000-01-30 10:54 markt * parse.c: parse_args and related code moved to parse.c 2000-01-30 10:53 markt * brhist.c, brhist.h: vbr histogram code in seperate file 2000-01-30 10:50 markt * Makefile, TODO, get_audio.c, gtkanal.c, id3tag.c, id3tag.h, lame.c, lame.h, main.c, mp3rtp.c, mp3x.c, util.c, util.h, Dll/BladeMP3EncDLL.c, Dll/MP3EncDll.dsp, mpglib/main.c: more modularization work. Calling program is now responsible for mp3 file output 2000-01-30 07:41 markt * l3side.h, loopold.c, machine.h, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, vbrquantize.c: #ifdef NOPOW removed, replaced by table lookup. You can still go back to pow() function or exp() by changing the POW20 and IPOW20 macros in machine.h 2000-01-30 06:17 takehiro * l3side.h, loopold.c, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: use lookup table to calculate pow(2.0, xx).(when not defined NOPOW) 2000-01-30 06:09 takehiro * fft.c: faster FFT implementation 2000-01-28 00:57 cisc * lame.c: Fixed -m bug when bitrate>=160 (gf.mode_fixed was not set). 2000-01-27 17:16 markt * lame.h: comments about varius quality options 2000-01-27 08:27 markt * quantize-pvt.c: Fixed bug in scale_bitcount_lsf which was severely limiting the possible scalefacters used by MPEG2. (Lionel Bonnet) 2000-01-27 07:49 markt * Makefile, get_audio.c, get_audio.h, gtkanal.c, machine.h: minor changes 2000-01-27 05:05 markt * fft.c, fft.h, psymodel.c, testcase.mp3: Takehiro's fft_short and fft_long now the defaults. 2000-01-27 04:35 markt * rtp.c: more updates from Felix 2000-01-27 03:52 cisc * loopold.c, psymodel.c, quantize-pvt.c, quantize.c, takehiro.c, util.h, vbrquantize.c: Added NOPOW define, will replace certain pow()s with optimized variant. 2000-01-27 02:06 cisc * get_audio.c: Removed faulty undef of bitwidth. 2000-01-26 12:37 takehiro * fft.c: window[] and window_s[]'s buffer overrun is corrected 2000-01-26 10:27 markt * filters.c, lame.c, lame.h: more bugs in specifigy a lowpass filter fixed. --voice mode recast in terms of lowpass filter and other options 2000-01-26 08:39 markt * psymodel.c: removed two c++ commends (by request) 2000-01-26 08:00 markt * lame.c: moved frameNum=0 from lame_init to lame_init_params 2000-01-26 07:44 markt * HACKING, get_audio.c, get_audio.h, globalflags.h, gtkanal.c, lame.c, lame.h, main.c, mp3rtp.c, mp3x.c, Dll/BladeMP3EncDLL.c, Dll/MP3EncDll.dsp: more modularizatin work. LAME can now be used as a true library, without the need to construct simulated argument lists. See HACKING for some details, and mp3rtp.c for an example. 2000-01-25 17:50 markt * get_audio.c, get_audio.h, globalflags.h, lame.c: major work down towards libmp3lame.a: split out parse_args and parameter setting routines. might have broken some things... 2000-01-25 17:48 markt * rtp.h: bug fix from Felix 2000-01-20 23:21 robert * lame.c: sfb21 parameter messages added 2000-01-20 08:03 markt * lame.c: tweaked filter and other encoding parameter messages 2000-01-20 07:21 markt * gtkanal.c, gtkanal.h, mpglib/layer3.c: fixed gtk scfsi printout - mpglib/layer3.c seems correct now. 2000-01-20 06:09 markt * Makefile, TODO, mpglib/layer3.c: scfsi fixes to mpglib from Iwasa Kazmi 2000-01-19 22:11 takehiro * mpglib/layer3.c: scalefactor for short block last sfb(12) was wrong. 2000-01-18 18:51 afaber * l3bitstream.c: Made my bug fixes against version 1.9 instead of a previous version 2000-01-17 22:31 afaber * l3bitstream.c: Guarded BF_FlushBitstream function call if PartHoldersInitialized equals zero. This to avoid GPF when III_Flushbitstream is called when no data is encoder 2000-01-16 06:49 markt * lame.c, lame.h, main.c: cleaned up main.c 2000-01-15 20:33 markt * loopold.c, takehiro.c, testcase.mp3: added best_scalefac_store to non -h code also 2000-01-15 14:35 takehiro * psymodel.c: little bit optimization 2000-01-14 13:05 takehiro * takehiro.c: debug message is removed... 2000-01-14 12:56 takehiro * l3bitstream.c, loopold.c, quantize-pvt.c, quantize.c, psymodel.h, takehiro.c: to make it use scfsi 2000-01-14 07:47 markt * doc/html/history.html: [no log message] 2000-01-14 07:34 markt * version.h: version 3.61 2000-01-14 06:35 markt * lame.c, quantize.c: filters were incorrectly being used under VBR 2000-01-14 05:54 markt * USAGE, lame.c: more on the -k option 2000-01-14 05:46 markt * USAGE, lame.c, mpglib/main.c: -k option will disable *all* filtering and frequency cutoffs 2000-01-13 20:41 robert * Makefile, quantize.c: more VBR (RH_masking) finetuning now -V3 should give the same result as -V6 before 2000-01-13 17:21 markt * lame.c, psymodel.h: fixed noshort option, fixed l3psycho_anal.h 2000-01-13 16:26 takehiro * filters.c, get_audio.c, l3bitstream.c, lame.c, loopold.c, newmdct.c, newmdct.h, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, reservoir.c, reservoir.h, takehiro.c, util.c, util.h, vbrquantize.c: moved info.stereo into gf.stereo 2000-01-13 07:43 markt * loopold.c, quantize.c: got rid of old, no longer used preemph code 2000-01-13 02:07 markt * filters.c, get_audio.c, globalflags.h, gtkanal.c, lame.c, psymodel.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c, vbrquantize.c, mpglib/main.c: moved the rest of the global variables into gf struct 2000-01-13 00:37 markt * quantize.c (debug-mat): some debug code 2000-01-12 22:38 afaber * .cvsignore, VbrTag.c, lame.dsp: fixed a few casting warnings Updated .cvsignore to ignore output of testcase 2000-01-12 14:30 takehiro * filters.c, globalflags.h, l3bitstream.c, lame.c, newmdct.c, newmdct.h, quantize-pvt.c, quantize-pvt.h, reservoir.c, takehiro.c, util.c, vbrquantize.c: more simple & fast scalefac_scale use and mode_gr is moved into gf structure. 2000-01-11 20:23 cisc * amiga_mpega.c: Fixed timestatus bug (forgot nsamp variable). 2000-01-11 05:46 markt * quantize.c (debug-mat), gtkanal.c, lame.c: changed axis in gtk flag 2000-01-10 16:37 cisc * VbrTag.h, get_audio.c, machine.h, util.c: Removed AMIGA_ASYNCIO, custom modified libsndfile worked better. 2000-01-10 09:34 takehiro * mpglib/layer3.c: debug for scalefactor reading with scfsi. 2000-01-10 03:44 cisc * get_audio.c: Disabled open/close of mp3 when AMIGA_MPEGA and LIBSNDFILE is enabled. 2000-01-10 02:44 cisc * amiga_mpega.c: MPGLIB replacement using mpega.library. (AmigaOS) 2000-01-10 02:40 cisc * get_audio.c, mpglib/main.c: Removed AMIGA_ASYNCIO stuff for mpglib now that we got AMIGA_MPEGA. 2000-01-10 02:07 cisc * get_audio.c, lame.h: Added mpega.library support for decoding mpeg audio, enable with AMIGA_MPEGA. (AmigaOS) 2000-01-10 00:45 markt * loopold.c, quantize.c: fixed bug in loopold: scalesave loop was using SBMAX instead of SBPSY, and exceeding bounds. 2000-01-09 23:11 markt * Dll/BladeMP3EncDLL.c, doc/html/examples.html, doc/html/id3.html, mpglib/layer3.c: globalflags update 2000-01-09 23:10 markt * get_audio.c, globalflags.h, gtkanal.c, gtkanal.h, lame.c, loopold.c, main.c, mp3x.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c, vbrquantize.c: moved more globalflags into the gf. struct 2000-01-09 22:56 cisc * VbrTag.h, get_audio.c, machine.h, util.c, mpglib/main.c: Added usage of asyncio.library for improved I/O, enable with AMIGA_ASYNCIO. (AmigaOS) 2000-01-09 22:26 markt * quantize.c, testcase.mp3, doc/html/history.html: updated validation testcase. 2000-01-09 20:59 markt * Makefile, version.h: release 3.60beta 2000-01-09 20:55 markt * testcase.mp3, testcase.wav: new test case: testcase.wav and 'official' output testcase.mp3 'make test' will perform a comparison. see makefile for details 2000-01-09 20:52 markt * Makefile: new validation procedure 2000-01-09 20:21 markt * doc/html/: history.html, index.html, switchs.html: updated web pages from Gabriel 2000-01-09 16:08 cisc * mpglib/main.c: VbrTag.h wasn't included on Amiga 2000-01-09 16:07 cisc * fft.c: Removed INLINE from fht (will get inlined as a local function anyway) 2000-01-09 10:54 takehiro * l3bitstream.c, l3side.h, loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: All Huffman code search algorithm is implemented. (-h option to enable this) more slower, but better quality. 2000-01-09 07:51 markt * Makefile, psymodel.c, quantize.c: AAC masking function now the default. This represents less masking then the old masking function. 2000-01-09 07:34 markt * gtkanal.c, gtkanal.h, lame.c, psymodel.c, psymodel.h, quantize.c: compute mid/side energy rations in addition to masking ratios. in the future we might use this for side channel bit allocation. it is not used at all right now. 2000-01-09 04:11 markt * Makefile, psymodel.c, quantize.c: someone mistakenly uncommented the call to preemphasis(). this routine should *not* be used. preemph is now taken care of in scale_bitcount. 2000-01-08 17:57 robert * psymodel.c: define AAC_TMN_NMT at compile time to activate AAC tone masking noise and noise masking tone values 2000-01-08 17:56 robert * quantize.c: tuned VBR code, inactive until you define RH_masking at compile time 2000-01-08 17:54 robert * Makefile: added suggested compiler options for gcc 2.95.2, uncomment them to activate them 2000-01-08 17:52 robert * PRESETS.draft: changed frequencies to Lames format 2000-01-07 06:40 markt * HACKING, Makefile: updated HACKING notes 2000-01-07 06:13 markt * get_audio.c, globalflags.h, lame.c, loopold.c, psymodel.c, quantize-pvt.c, quantize.c, reservoir.c: Robert's cw_lower_limit, upper_limit code back in. Default is compute cw[] up to 8.9Khz. set with --cwlimit started putting global variables into global_flags struct. 2000-01-06 05:12 markt * mp3rtp.c: more rtp updates 2000-01-06 04:58 markt * lame.c, mp3rtp.c, rtp.c: more rtp updates 2000-01-05 23:52 robert * quantize.c: VBR: masking lower was not set correctly it was only set for sloppy mode, fixed now 2000-01-05 17:40 afaber * mpglib/mpglib.h: Fixed BOOL definition conflict for Win32 systems 2000-01-05 16:47 markt * Makefile, mp3rtp.c, rtp.c, rtp.h: added mp3rtp code. uses lame library, but not part of normal lame encoder 2000-01-05 10:04 markt * VbrTag.c, VbrTag.h, get_audio.c, l3side.h, lame.h, mpglib/main.c: Check for Xing header in mp3 input files 2000-01-05 06:29 markt * version.h: updated version 2000-01-05 06:20 markt * Makefile, psymodel.c: norm_l, norm_s table data replaced by formulas. 2000-01-03 05:15 markt * INSTALL, Makefile, encoder.h, gtkanal.c, lame.c, main.c, doc/html/contributors.html, doc/html/index.html, doc/html/lame.css, doc/html/node6.html, doc/html/node7.html, doc/html/switchs.html: new html from Gabriel. Fixed but that was causing the first frame to always be zero. changed encoder delay to 800 to fix some other problems and remove the buffering of the first frame in lame_encode(). 1999-12-29 15:34 takehiro * doc/html/: contributors.html, history.html, index.html, node6.html, node7.html, switchs.html: updated html doc written by Gabriel Bouvigne. 1999-12-28 22:02 afaber * lame.dsp, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.h, Dll/MP3EncDll.dsp, mpglib/mpglib.dsp: Some fixes to the Encoder DLL: use -h instead of -k flag for high qualtiy The voice option was set in HQ mode, which is obviously not correct 1999-12-26 14:48 takehiro * l3bitstream.c, lame.c: some foolish bug is removed :) 1999-12-26 09:51 takehiro * globalflags.h, lame.c, quantize-pvt.c: new option "--noath" to disable the ATH masking 1999-12-26 09:50 takehiro * .cvsignore: ignore mp3x binary exe. 1999-12-23 12:27 takehiro * quantize-pvt.c: guess wiser initial StepSize for bin_search_stepsize 1999-12-22 17:38 markt * Makefile, psymodel.c: AAC NMT/TMN values (commented out) 1999-12-22 08:03 markt * quantize-pvt.c: back to oringal (ave_noise < ATH) definition of analog silence for VBR mode. 1999-12-22 07:39 markt * psymodel.c: added AAC spreading function (disabled by default) 1999-12-21 08:18 markt * Makefile, fft.c, l3side.h, lame.c, psymodel.c, psymodel.h, quantize-pvt.c, quantize.c: Bug fix in Mid/Side masking thresholds 1999-12-19 21:33 afaber * Dll/BladeMP3EncDLL.c: Set home page link to Lame home page 1999-12-19 01:47 markt * Makefile, globalflags.h, lame.c, psymodel.c: went back to ISO layer III recommended cw formulas 1999-12-19 01:15 robert * globalflags.h, lame.c, psymodel.c: patched GPSYCHO, enable with --psy-model 0 1999-12-17 04:24 markt * USAGE, globalflags.h, lame.c, reservoir.c: added the --nores option to disable the bitreservoir. only usefull in special circumstances 1999-12-16 05:24 markt * quantize-pvt.c: changed analog silence switch to use max_ener rather than ave_ener. only affects VBR mode: when analog silence is detected, the min bitrate is allowed to drop to 32kbs even if set higher with -b 1999-12-14 23:51 cisc * fft.c: Changed M_PI to PI. (Not everyone has M_PI, but PI is always defined in util.h) 1999-12-14 22:44 robert * PRESETS.draft: first sketch of what could become PRESETS for LAME 1999-12-14 22:40 robert * lame.c, quantize.c: added new experimentalX quant_compare -X6 mode 1999-12-14 04:38 markt * Makefile, fft.c, fft.h, psymodel.c: Takehiro's fft's back in. fft_short2(), fft_long2() will call original fft's (with one minor change: 0 protection for ax[] and bx[] was not needed and has been removed). Takehiro's routines are fft_short() and fft_long(). They dont give bit-for-bit identical answers, and I still want to track this down before making them the defaults. . 1999-12-14 00:19 robert * lame.c: changed filter options 1999-12-13 21:56 markt * version.h: updated version to 3.58 1999-12-12 21:14 robert * lame.c: grrr, mist some filter comandline combinations :( 1999-12-12 19:22 robert * lame.c: fixed filter commandline parameter inconsistencies 1999-12-12 19:02 markt * filters.c, newmdct.c, util.h: removed extra #define's related to PI 1999-12-12 03:53 cisc * filters.c, loopold.c, newmdct.c, quantize.c, util.h: Added new PI and LOG predefined variants, and stuck them in at respective places. 1999-12-11 23:37 robert * lame.c: added low/highpass filter switches 1999-12-11 23:36 robert * filters.c, globalflags.h: added highpass filter similar to lowpass filter fixed lowpass filter to avoid endless loops 1999-12-11 20:13 robert * mlame: fix for filenames containing spaces 1999-12-11 00:57 takehiro * .cvsignore: added lame binary executable itself 1999-12-10 01:57 takehiro * lame.c, loopold.c, quantize.c, util.c, util.h: little bit good subblock_gain calculation. and nint2 is removed. 1999-12-09 15:17 takehiro * loopold.c: little bit clean up. some variable restoring is removed. 1999-12-09 07:07 markt * quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: PRECALC_SIZE bug? PRECALC_SIZE should be 8191+15+1, since max value of xr/ix is 8191+15. 1999-12-09 06:29 markt * loopold.c: cod_info-> should be cod_info[ch]-> 1999-12-09 02:34 takehiro * loopold.c, quantize.c: Oops, stepsize history was not recorded. 1999-12-09 02:28 takehiro * loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c: initial value of binary search is separeted by channels. maybe faster bin_search_stepsize 1999-12-09 00:44 cisc * l3bitstream-pvt.h: Removed write_ancillary_data() prototype. (No longer used) 1999-12-09 00:38 cisc * takehiro.c: Included the correct quantize header. (quantize-pvt.h instead of quantize.h) 1999-12-08 19:39 cisc * util.h: Adjusted PI/SQRT2 precision. (SQRT2 deviated from standard math.h value) 1999-12-08 19:37 cisc * mpglib/mpg123.h: Fixed M_PI/M_SQRT2 to work on all platforms. Removed unused INLINE. 1999-12-08 13:45 takehiro * mpglib/layer3.c: debug about scfsi treatment 1999-12-08 06:27 markt * Makefile, lame.c: fixed display bug for VBR histogram under ncurses. Now termcap is replaced by the more modern ncurses. 1999-12-08 05:46 markt * psymodel.c, takehiro.c: avoid bounds check on xr[] for non-hq mode, from Mat. spelling error in psymodel.c fixed :-) 1999-12-08 05:24 markt * TODO: [no log message] 1999-12-08 03:49 takehiro * psymodel.c: debugged possible buffer overrun. 1999-12-07 22:58 cisc * mpglib/layer3.c: No GTK on Amiga. :( 1999-12-07 22:56 cisc * main.c: Removed redundant __buffsize (SAS/C (AmigaOS)) 1999-12-07 05:11 markt * Makefile, TODO, quantize-pvt.c: removed -.5 from quantize_xrpow 1999-12-07 02:04 markt * fft.c, fft.h, lame.c, psymodel.c, quantize-pvt.c: backed out takehiro's fft changes for now added latest quantize_xrpow asm from Acy and Mat 1999-12-06 22:45 takehiro * fft.c: lookup table integration 1999-12-06 20:38 afaber * fft.c, lame.h, machine.h, psymodel.c: Fixed compiler errors 1999-12-03 10:13 takehiro * fft.c, fft.h, psymodel.c: maybe faster FFT coding 1999-12-03 10:11 takehiro * l3bitstream.c: foolish mistake has removed :) 1999-12-03 09:45 takehiro * l3bitstream.c, l3bitstream.h, lame.c: little bit cleanup 1999-12-02 17:01 takehiro * loopold.c, quantize-pvt.c, quantize-pvt.h, quantize.c, takehiro.c: correct adj43 overrun(maybe) 1999-11-30 19:30 afaber * Dll/.cvsignore, mpglib/.cvsignore: Added .cvsignore files in sub projects 1999-11-30 19:27 afaber * .cvsignore, gtkanal.c, lame.dsp, util.c, mpglib/mpglib.dsp: Added Win32 specific output files to .cvsignore updated project files to set proper output directory and fixed alignment problem between mpglib project and lame project, now all modules have 8 byte alignment in all configurations 1999-11-29 19:54 takehiro * .cvsignore: configure ignoring *.d file 1999-11-29 19:48 takehiro * quantize.c: And more cleanup. needless variable store/restores are removed. 1999-11-29 19:39 takehiro * quantize.c: little bit code cleanup(deleted needless call of scale_bitcount) sorry, it is not bugfix of "TOO LARGE quantizerStepSize" ;p 1999-11-29 16:34 markt * loopold.c, quantize-pvt.h, quantize.c: removed unused VBRbits from non-VBR quant routines 1999-11-29 03:13 markt * loopold.c, quantize-pvt.c, quantize.c: scalefactor preemph *correctly* turned back on 1999-11-29 02:55 markt * loopold.c, quantize-pvt.c: scalefac pre-emph turned back on in loopold.c 1999-11-29 02:45 markt * encoder.h, gtkanal.h, l3side.h, lame.c, newmdct.c, psymodel.c, psymodel.h, quantize.c, util.c: MS stereo switch slightly improved: old formula was based on the average of ms_ratio of both granules. New formula uses ms_ratio from both granules and the previous and next granule. This will help avoid toggleing MS stereo off for a single frame. Long runs of MS stereo or regular stereo will not be affected. also fixed a bug in frame analyzer - it was accessing l3_xmin in the last scalefactor (l3_xmin and maskings are not computed for last scalefactor) 1999-11-28 23:00 afaber * lame.c, lame.dsp, Dll/MP3EncDll.dsp: More fixes in order to compile under Win32 1999-11-28 22:42 afaber * lame.dsp, quantize-pvt.c: Fixes to compile under Win32 1999-11-28 22:21 afaber * Dll/: BladeMP3EncDLL.c, BladeMP3EncDLL.def, BladeMP3EncDLL.h, MP3EncDll.dsp, MP3EncDll.dsw: Update of Blade DLL interface in order to support new lame features 1999-11-28 06:45 markt * quantize-pvt.c: updated comments 1999-11-28 06:36 markt * USAGE, quantize-pvt.c, quantize-pvt.h, vbrquantize.c: ASM routines (gcc & MSVC) for quantize_xrpow 1999-11-28 01:01 markt * Makefile, TODO, lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c: If analog silence is detected, allow VBR code to over ride the VBR_min_bitrate setting and encode at 32kbs. 1999-11-27 23:39 markt * Makefile, formatBitstream.c, l3bitstream.c, lame.c, quantize-pvt.c, quantize-pvt.h, quantize.c, util.c, vbrquantize.c: More accurate quantization from Segher Boessenkool 1999-11-25 19:27 markt * util.c: fixed allowable bitrate displays 1999-11-24 08:43 markt * loopold.c, main.c, mlame, mp3x.c, timestatus.c, portableio.c, portableio.h, reservoir.c, reservoir.h, tables.h, timestatus.h, version.c, newmdct.h, quantize.h, takehiro.c, debugscalefac.c, encoder.h, machine.h, filters.c, quantize-pvt.h, HACKING, filters.h, vbrquantize.c, Dll/MP3EncDll.dsp, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.def, Dll/BladeMP3EncDLL.h, Dll/MP3EncDll.dsw, doc/html/index.html, doc/html/lame.css, doc/html/node7.html, doc/html/node5.html, doc/html/contributors.html, doc/html/node6.html, doc/html/history.html, doc/html/switchs.html, doc/man/lame.1, mpglib/Makefile, mpglib/README, mpglib/TODO, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/huffman.h, mpglib/interface.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpglib.dsp, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c: Initial revision 1999-11-24 08:43 markt * loopold.c, main.c, mlame, mp3x.c, timestatus.c, portableio.c, portableio.h, reservoir.c, reservoir.h, tables.h, timestatus.h, version.c, newmdct.h, quantize.h, takehiro.c, debugscalefac.c, encoder.h, machine.h, filters.c, quantize-pvt.h, HACKING, filters.h, vbrquantize.c, Dll/MP3EncDll.dsp, Dll/BladeMP3EncDLL.c, Dll/BladeMP3EncDLL.def, Dll/BladeMP3EncDLL.h, Dll/MP3EncDll.dsw, doc/html/index.html, doc/html/lame.css, doc/html/node7.html, doc/html/node5.html, doc/html/contributors.html, doc/html/node6.html, doc/html/history.html, doc/html/switchs.html, doc/man/lame.1, mpglib/Makefile, mpglib/README, mpglib/TODO, mpglib/common.c, mpglib/dct64_i386.c, mpglib/decode_i386.c, mpglib/huffman.h, mpglib/interface.c, mpglib/layer3.c, mpglib/main.c, mpglib/mpglib.dsp, mpglib/mpg123.h, mpglib/mpglib.h, mpglib/tabinit.c: initial checkin of LAME Starting with LAME 3.57beta with some modifications 1999-11-24 08:40 markt * COPYING, INSTALL, Makefile, Makefile.MSVC, tables.c, util.c, README, README.WINGTK, TODO, USAGE, fft.c, VbrTag.c, VbrTag.h, auenc, fft.h, psymodel.c, lame.dsp, util.h, formatBitstream.c, formatBitstream.h, get_audio.c, lame.c, get_audio.h, globalflags.h, gpkplotting.c, gpkplotting.h, gtkanal.c, gtkanal.h, quantize.c, version.h, newmdct.c, id3tag.c, id3tag.h, ieeefloat.c, ieeefloat.h, l3bitstream-pvt.h, l3bitstream.c, l3bitstream.h, LICENSE, l3side.h, lame.dsw, quantize-pvt.c, lame.h, psymodel.h: Initial revision 1999-11-24 08:40 markt * COPYING, INSTALL, Makefile, Makefile.MSVC, tables.c, util.c, README, README.WINGTK, TODO, USAGE, fft.c, VbrTag.c, VbrTag.h, auenc, fft.h, psymodel.c, lame.dsp, util.h, formatBitstream.c, formatBitstream.h, get_audio.c, lame.c, get_audio.h, globalflags.h, gpkplotting.c, gpkplotting.h, gtkanal.c, gtkanal.h, quantize.c, version.h, newmdct.c, id3tag.c, id3tag.h, ieeefloat.c, ieeefloat.h, l3bitstream-pvt.h, l3bitstream.c, l3bitstream.h, LICENSE, l3side.h, lame.dsw, quantize-pvt.c, lame.h, psymodel.h: initial checkin of LAME Starting with LAME 3.57beta with some modifications lame-3.100/install-sh000755 001751 001751 00000034524 13126231407 016076 0ustar00netchildnetchild000000 000000 #!/bin/sh # install - install a program, script, or datafile scriptversion=2016-01-11.22; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/COPYING000644 001751 001751 00000061304 10322411327 015115 0ustar00netchildnetchild000000 000000 GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! lame-3.100/acinclude.m4000644 001751 001751 00000025065 11767712271 016277 0ustar00netchildnetchild000000 000000 dnl acinclude.m4. Change *this* file to add new or change macros. dnl When changes have been made, delete aclocal.m4 and run dnl "aclocal". dnl dnl DO NOT change aclocal.m4 ! dnl dnl * LA_SEARCH_FILE(variable, filename, PATH) dnl * Search "filename" in the specified "PATH", "variable" will dnl * contain the full pathname or the empty string dnl * PATH is space-separated list of directories. dnl * by Florian Bomers AC_DEFUN([LA_SEARCH_FILE],[ $1= dnl hack: eliminate line feeds in $2 for FILE in $2; do for DIR in $3; do dnl use PATH in order if test ".$1"="." && test -f "$DIR/$FILE"; then $1=$DIR fi done done ]) dnl * LA_SEARCH_LIB(lib-variable, include-variable, lib-filename, header-filename, prefix) dnl * looks for "lib-filename" and "header-filename" in the area of "prefix". dnl * if found, "lib-variable" and "include-variable" are set to the dnl * respective paths. dnl * prefix is a single path dnl * libs are searched in prefix, prefix/lib, prefix/.., prefix/../lib dnl * headers are searched in prefix, prefix/include, prefix/.., prefix/../include dnl * dnl * If one of them is not found, both "lib-variable", "include-variable" are dnl * set to the empty string. dnl * dnl * TODO: assert function call to verify lib dnl * dnl * by Florian Bomers AC_DEFUN([LA_SEARCH_LIB],[ dnl look for lib LA_SEARCH_FILE($1, $3, $5 $5/lib $5/.. $5/../lib) dnl look for header. LA_SEARCH_FILE($2, $4, $5 $5/include $5/.. $5/../include) if test ".$1" = "." || test ".$2" = "."; then $1= $2= fi ]) # alex_IEEE854_FLOAT80 # ------------ AC_DEFUN([alex_IEEE854_FLOAT80], [AC_CACHE_CHECK(for IEEE854 compliant 80 bit floats, alex_cv_ieee854_float80, [AC_TRY_RUN([ int float2long_IEEE_compliance ( void ) { struct { long padding; /* to prevent unaligned access */ float f; } s; s.f = 12582912.; if ( *(long*)(&s.f) != 1262485504l ) return 0; s.f = 12615679.; if ( *(long*)(&s.f) != 1262518271l ) return 0; s.f = 13582912.; if ( *(long*)(&s.f) != 1263485504l ) return 0; s.f = 12550145.; if ( *(long*)(&s.f) != 1262452737l ) return 0; s.f = 11582912.; if ( *(long*)(&s.f) != 1261485504l ) return 0; return 1; } int main(void) { int retval; retval = float2long_IEEE_compliance(); /* no error return -> success */ return !retval; } ], alex_cv_ieee854_float80=yes, alex_cv_ieee854_float80=no, [AC_MSG_WARN(can't check for IEEE854 compliant 80 bit floats)] )])]) # alex_IEEE854_FLOAT80 # Configure paths for GTK+ # Owen Taylor 97-11-3 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN([AM_PATH_GTK], [dnl dnl Get the cflags and libraries from the gtk-config script dnl AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], gtk_config_prefix="$withval", gtk_config_prefix="") AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) for module in . $4 do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) lame-3.100/configure000755 001751 001751 00002227741 13144610170 016006 0ustar00netchildnetchild000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for lame 3.100. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: lame-dev@lists.sf.net about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='lame' PACKAGE_TARNAME='lame' PACKAGE_VERSION='3.100' PACKAGE_STRING='lame 3.100' PACKAGE_BUGREPORT='lame-dev@lists.sf.net' PACKAGE_URL='' ac_unique_file="libmp3lame/lame.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CONFIG_DEFS CPUCCODE CPUTYPE WITH_MP3RTP WITH_MP3X WITH_FRONTEND RM_F MAKEDEP NASM_FORMAT LIB_MINOR_VERSION LIB_MAJOR_VERSION LDADD CONFIG_MATH_LIB FRONTEND_LDADD FRONTEND_CFLAGS FRONTEND_LDFLAGS INCLUDES HAVE_NASM_FALSE HAVE_NASM_TRUE NASM WITH_VECTOR_FALSE WITH_VECTOR_TRUE WITH_XMM_FALSE WITH_XMM_TRUE LIB_WITH_DECODER_FALSE LIB_WITH_DECODER_TRUE SNDFILE_LIBS SNDFILE_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG GTK_LIBS GTK_CFLAGS GTK_CONFIG LTLIBICONV LIBICONV ALLOCA LIBTOOL_DEPS LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__quote am__include MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_dmalloc enable_largefile enable_nasm enable_rpath with_libiconv_prefix enable_cpml with_gtk_prefix with_gtk_exec_prefix enable_gtktest enable_efence with_fileio enable_analyzer_hooks enable_decoder enable_frontend enable_mp3x enable_mp3rtp enable_dynamic_frontends enable_expopt enable_debug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP LT_SYS_LIBRARY_PATH PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR SNDFILE_CFLAGS SNDFILE_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures lame 3.100 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/lame] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of lame 3.100:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --enable-nasm Allow the use of nasm if available --disable-rpath do not hardcode runtime library paths --disable-cpml Do not use Compaq's fast Math Library --disable-gtktest Do not try to compile and run a test GTK program --enable-efence Use ElectricFence for malloc debugging --disable-analyzer-hooks Exclude analyzer hooks --disable-decoder Exclude mpg123 decoder --disable-frontend Do not build the lame executable default=build --enable-mp3x Build GTK frame analyzer default=no --enable-mp3rtp Build mp3rtp default=no --enable-dynamic-frontends Link frontends against shared libraries default=no --enable-expopt=full,norm Whether to enable experimental optimizations default=no --enable-debug=alot,norm Enable debugging (disables optimizations) default=no Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-dmalloc use dmalloc, as in http://www.dmalloc.com --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-gtk-prefix=PFX Prefix where GTK is installed (optional) --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) --with-fileio=lame Use lame's internal file io routines default =sndfile Use Erik de Castro Lopo's libsndfile (no stdin possible currently) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path SNDFILE_CFLAGS C compiler flags for SNDFILE, overriding pkg-config SNDFILE_LIBS linker flags for SNDFILE, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF lame configure 3.100 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------ ## ## Report this to lame-dev@lists.sf.net ## ## ------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by lame $as_me 3.100, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='lame' VERSION='3.100' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$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 strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi case $host_os in *cygwin* ) CYGWIN=yes;; * ) CYGWIN=no;; esac # AC_DISABLE_SHARED case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 $as_echo "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else pic_mode=default fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test no = "$hard_links"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen=shl_load else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen=dlopen else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=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_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=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_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report what library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: CFLAGS="${ac_save_CFLAGS}" # increase this when the shared lib becomes totally incompatible LIB_MAJOR_VERSION=0 # increase this when changes are made, but they are upward compatible # to previous versions LIB_MINOR_VERSION=0 if test "${ac_cv_cygwin}" = "yes"; then if test "${CC}" != "gcc"; then as_fn_error $? "Please use CC=gcc ./configure Abort this configure run and add \"CC=gcc\" or you will see errors and no lame.exe will be build." "$LINENO" 5 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x${GCC}" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler" >&5 $as_echo_n "checking compiler... " >&6; } COMPILER_TYPE="`${CC} --version | head -1 | sed -e '1,$s/version.*//g'`" case "${COMPILER_TYPE}" in *gcc*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: gcc" >&5 $as_echo "gcc" >&6; } HAVE_GCC=yes HAVE_CLANG=no ;; *clang*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: clang" >&5 $as_echo "clang" >&6; } HAVE_CLANG=yes HAVE_GCC=no ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 $as_echo "unknown" >&6; } HAVE_GCC=no HAVE_CLANG=no ;; esac if test "${HAVE_GCC}" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of GCC" >&5 $as_echo_n "checking version of GCC... " >&6; } GCC_version="`${CC} --version | sed -n '1s/^[^ ]* (.*) //;s/ .*$//;1p'`" case "${GCC_version}" in 0-9*0-9*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${GCC_version}" >&5 $as_echo "${GCC_version}" >&6; } ;; *) # probably not gcc... { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown compiler version pattern" >&5 $as_echo "unknown compiler version pattern" >&6; } HAVE_GCC=no ;; esac fi if test "${HAVE_CLANG}" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of clang" >&5 $as_echo_n "checking version of clang... " >&6; } CLANG_version="`${CC} --version | sed -n 's/.*clang version //;s/ .*$//;1p'`" { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CLANG_version}" >&5 $as_echo "${CLANG_version}" >&6; } fi fi ac_fn_c_check_header_mongrel "$LINENO" "dmalloc.h" "ac_cv_header_dmalloc_h" "$ac_includes_default" if test "x$ac_cv_header_dmalloc_h" = xyes; then : fi if test "${ac_cv_header_dmalloc_h}" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5 $as_echo_n "checking if malloc debugging is wanted... " >&6; } # Check whether --with-dmalloc was given. if test "${with_dmalloc+set}" = set; then : withval=$with_dmalloc; if test "$withval" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define WITH_DMALLOC 1" >>confdefs.h LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in \ errno.h \ fcntl.h \ limits.h \ stdint.h \ string.h \ sys/soundcard.h \ sys/time.h \ unistd.h \ linux/soundcard.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking working SSE intrinsics" >&5 $as_echo_n "checking working SSE intrinsics... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { _mm_sfence(); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_XMMINTRIN_H 1" >>confdefs.h ac_cv_header_xmmintrin_h=yes else ac_cv_header_xmmintrin_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_header_xmmintrin_h}" >&5 $as_echo "${ac_cv_header_xmmintrin_h}" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac if test ${cross_compiling} = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else ac_cv_c_bigendian=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : else if test "$ac_cv_type_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 $as_echo "$ac_cv_sizeof_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5 $as_echo_n "checking size of unsigned short... " >&6; } if ${ac_cv_sizeof_unsigned_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5 $as_echo "$ac_cv_sizeof_unsigned_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : else if test "$ac_cv_type_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 $as_echo "$ac_cv_sizeof_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5 $as_echo_n "checking size of unsigned int... " >&6; } if ${ac_cv_sizeof_unsigned_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5 $as_echo "$ac_cv_sizeof_unsigned_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 $as_echo_n "checking size of unsigned long... " >&6; } if ${ac_cv_sizeof_unsigned_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 $as_echo_n "checking size of long long... " >&6; } if ${ac_cv_sizeof_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 $as_echo "$ac_cv_sizeof_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5 $as_echo_n "checking size of unsigned long long... " >&6; } if ${ac_cv_sizeof_unsigned_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5 $as_echo_n "checking size of float... " >&6; } if ${ac_cv_sizeof_float+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float" "$ac_includes_default"; then : else if test "$ac_cv_type_float" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (float) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_float=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5 $as_echo "$ac_cv_sizeof_float" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_FLOAT $ac_cv_sizeof_float _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5 $as_echo_n "checking size of double... " >&6; } if ${ac_cv_sizeof_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double" "$ac_includes_default"; then : else if test "$ac_cv_type_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5 $as_echo "$ac_cv_sizeof_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_DOUBLE $ac_cv_sizeof_double _ACEOF if test $ac_cv_sizeof_short -eq 0 \ -o $ac_cv_sizeof_unsigned_short -eq 0 \ -o $ac_cv_sizeof_int -eq 0 \ -o $ac_cv_sizeof_unsigned_int -eq 0 \ -o $ac_cv_sizeof_long -eq 0 \ -o $ac_cv_sizeof_unsigned_long -eq 0 \ -o $ac_cv_sizeof_long_long -eq 0 \ -o $ac_cv_sizeof_unsigned_long_long -eq 0 \ -o $ac_cv_sizeof_float -eq 0 \ -o $ac_cv_sizeof_double -eq 0; then echo '*** I have a problem determining the size of some variable types. Either' echo '*** you compiler is broken, or your system+compiler combination is not' echo '*** supportet by the "autoconf" framework we use to generate this' echo '*** configure script.' exit 1 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5 $as_echo_n "checking for long double with more range or precision than double... " >&6; } if ${ac_cv_type_long_double_wider+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include long double const a[] = { 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, LDBL_MIN, LDBL_MAX, LDBL_EPSILON }; long double f (long double x) { return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + (x ? f (x) : 'c')); } int main () { static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + (DBL_MANT_DIG < LDBL_MANT_DIG) - (LDBL_MAX_EXP < DBL_MAX_EXP) - (LDBL_MANT_DIG < DBL_MANT_DIG))) && (int) LDBL_EPSILON == 0 )]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_long_double_wider=yes else ac_cv_type_long_double_wider=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5 $as_echo "$ac_cv_type_long_double_wider" >&6; } if test $ac_cv_type_long_double_wider = yes; then $as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h fi ac_cv_c_long_double=$ac_cv_type_long_double_wider if test $ac_cv_c_long_double = yes; then $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi if test "${ac_cv_c_have_long_double}" = "yes" ; then # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long double" >&5 $as_echo_n "checking size of long double... " >&6; } if ${ac_cv_sizeof_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long double))" "ac_cv_sizeof_long_double" "$ac_includes_default"; then : else if test "$ac_cv_type_long_double" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long double) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long_double=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_double" >&5 $as_echo "$ac_cv_sizeof_long_double" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double _ACEOF fi ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" if test "x$ac_cv_type_uint8_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT8_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" if test "x$ac_cv_type_int8_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT8_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" if test "x$ac_cv_type_uint16_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT16_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" if test "x$ac_cv_type_int16_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT16_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" if test "x$ac_cv_type_uint32_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" if test "x$ac_cv_type_int32_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" if test "x$ac_cv_type_uint64_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT64_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default" if test "x$ac_cv_type_int64_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT64_T 1 _ACEOF fi if test "${HAVE_INT32_T}" = yes; then $as_echo "#define A_UINT32_T unsigned int32_t" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_short}" = "4"; then $as_echo "#define A_UINT32_T unsigned short" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_int}" = "4"; then $as_echo "#define A_UINT32_T unsigned int" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_long}" = "4"; then $as_echo "#define A_UINT32_T unsigned long" >>confdefs.h else as_fn_error $? "CHECK_TYPE_uint32_t - please report to lame-dev@lists.sourceforge.net" "$LINENO" 5 fi fi fi fi if test "${ac_cv_sizeof_short}" = "4"; then $as_echo "#define A_INT32_T short" >>confdefs.h else if test "${ac_cv_sizeof_int}" = "4"; then $as_echo "#define A_INT32_T int" >>confdefs.h else if test "${ac_cv_sizeof_long}" = "4"; then $as_echo "#define A_INT32_T long" >>confdefs.h else as_fn_error $? "CHECK_TYPE_int32_t - please report to lame-dev@lists.sourceforge.net" "$LINENO" 5 fi fi fi if test "${HAVE_INT64_T}" = yes; then $as_echo "#define A_UINT64_T unsigned int64_t" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_int}" = "8"; then $as_echo "#define A_UINT64_T unsigned int" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_long}" = "8"; then $as_echo "#define A_UINT64_T unsigned long" >>confdefs.h else if test "${ac_cv_sizeof_unsigned_long_long}" = "8"; then $as_echo "#define A_UINT64_T unsigned long long" >>confdefs.h else as_fn_error $? "CHECK_TYPE_uint64_t - please report to lame-dev@lists.sourceforge.net" "$LINENO" 5 fi fi fi fi if test "${ac_cv_sizeof_int}" = "8"; then $as_echo "#define A_INT64_T int" >>confdefs.h else if test "${ac_cv_sizeof_long}" = "8"; then $as_echo "#define A_INT64_T long" >>confdefs.h else if test "${ac_cv_sizeof_long_long}" = "8"; then $as_echo "#define A_INT64_T long long" >>confdefs.h else as_fn_error $? "CHECK_TYPE_int64_t - please report to lame-dev@lists.sourceforge.net" "$LINENO" 5 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IEEE854 compliant 80 bit floats" >&5 $as_echo_n "checking for IEEE854 compliant 80 bit floats... " >&6; } if ${alex_cv_ieee854_float80+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't check for IEEE854 compliant 80 bit floats" >&5 $as_echo "$as_me: WARNING: can't check for IEEE854 compliant 80 bit floats" >&2;} else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int float2long_IEEE_compliance ( void ) { struct { long padding; /* to prevent unaligned access */ float f; } s; s.f = 12582912.; if ( *(long*)(&s.f) != 1262485504l ) return 0; s.f = 12615679.; if ( *(long*)(&s.f) != 1262518271l ) return 0; s.f = 13582912.; if ( *(long*)(&s.f) != 1263485504l ) return 0; s.f = 12550145.; if ( *(long*)(&s.f) != 1262452737l ) return 0; s.f = 11582912.; if ( *(long*)(&s.f) != 1261485504l ) return 0; return 1; } int main(void) { int retval; retval = float2long_IEEE_compliance(); /* no error return -> success */ return !retval; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : alex_cv_ieee854_float80=yes else alex_cv_ieee854_float80=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $alex_cv_ieee854_float80" >&5 $as_echo "$alex_cv_ieee854_float80" >&6; } if test "${alex_cv_ieee854_float80}" = "yes" ; then if test "${ac_cv_c_long_double}" = "yes" ; then ac_fn_c_check_type "$LINENO" "ieee854_float80_t" "ac_cv_type_ieee854_float80_t" "$ac_includes_default" if test "x$ac_cv_type_ieee854_float80_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IEEE854_FLOAT80_T 1 _ACEOF long double fi $as_echo "#define HAVE_IEEE854_FLOAT80 1" >>confdefs.h fi fi ac_fn_c_check_type "$LINENO" "ieee754_float64_t" "ac_cv_type_ieee754_float64_t" "$ac_includes_default" if test "x$ac_cv_type_ieee754_float64_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IEEE754_FLOAT64_T 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "ieee754_float32_t" "ac_cv_type_ieee754_float32_t" "$ac_includes_default" if test "x$ac_cv_type_ieee754_float32_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IEEE754_FLOAT32_T 1 _ACEOF fi $as_echo "#define LAME_LIBRARY_BUILD 1" >>confdefs.h if test ${cross_compiling} = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ************************************************************************** * * * You are cross compiling: * * - I did not have a change to determine * * + the size of: * * - short * * - unsigned short * * - int * * - unsigned int * * - long * * - unsigned long * * - float * * - double * * - long double * * + the endianess of the system * * - You have to provide appropriate defines for them in config.h, e.g. * * + define SIZEOF_SHORT to 2 if the size of a short is 2 * * + define WORDS_BIGENDIAN if your system is a big endian system * * * **************************************************************************" >&5 $as_echo "$as_me: WARNING: ************************************************************************** * * * You are cross compiling: * * - I did not have a change to determine * * + the size of: * * - short * * - unsigned short * * - int * * - unsigned int * * - long * * - unsigned long * * - float * * - double * * - long double * * + the endianess of the system * * - You have to provide appropriate defines for them in config.h, e.g. * * + define SIZEOF_SHORT to 2 if the size of a short is 2 * * + define WORDS_BIGENDIAN if your system is a big endian system * * * **************************************************************************" >&2;} fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_func in gettimeofday strtol do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "X${ac_cv_func_strtol}" != "Xyes"; then as_fn_error $? "function strtol is mandatory" "$LINENO" 5 fi SOCKETFUNCTION=unknown for ac_func in socket do : ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" if test "x$ac_cv_func_socket" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SOCKET 1 _ACEOF fi done if test $ac_cv_func_socket = no; then # maybe it is in libsocket { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 $as_echo_n "checking for socket in -lsocket... " >&6; } if ${ac_cv_lib_socket_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $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 socket (); int main () { return socket (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_socket=yes else ac_cv_lib_socket_socket=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_socket_socket" >&5 $as_echo "$ac_cv_lib_socket_socket" >&6; } if test "x$ac_cv_lib_socket_socket" = xyes; then : $as_echo "#define HAVE_SOCKET 1" >>confdefs.h LIBS="$LIBS -lsocket" fi if test "X${ac_cv_lib_socket_socket}" != "Xyes"; then SOCKETFUNCTION=NO else case ${host_os} in *solaris*) LIBS="$LIBS -lnsl" ;; esac fi fi CFLAGS=${CFLAGS} CONFIG_DEFS=${CONFIG_DEFS} NASM= INCLUDES="-I\$(top_srcdir)/include -I\$(srcdir)" FRONTEND_LDFLAGS= FRONTEND_CFLAGS= LIB_SOURCES= MAKEDEP="-M" RM_F="rm -f" # Check whether --enable-nasm was given. if test "${enable_nasm+set}" = set; then : enableval=$enable_nasm; ASM_FOR_ARCH="i386" else ASM_FOR_ARCH="" fi for ac_header in termcap.h do : ac_fn_c_check_header_mongrel "$LINENO" "termcap.h" "ac_cv_header_termcap_h" "$ac_includes_default" if test "x$ac_cv_header_termcap_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TERMCAP_H 1 _ACEOF fi done for ac_header in ncurses/termcap.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses/termcap.h" "ac_cv_header_ncurses_termcap_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_termcap_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_TERMCAP_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -ltermcap" >&5 $as_echo_n "checking for initscr in -ltermcap... " >&6; } if ${ac_cv_lib_termcap_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $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 initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_termcap_initscr=yes else ac_cv_lib_termcap_initscr=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_termcap_initscr" >&5 $as_echo "$ac_cv_lib_termcap_initscr" >&6; } if test "x$ac_cv_lib_termcap_initscr" = xyes; then : HAVE_TERMCAP="termcap" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lcurses" >&5 $as_echo_n "checking for initscr in -lcurses... " >&6; } if ${ac_cv_lib_curses_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $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 initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_curses_initscr=yes else ac_cv_lib_curses_initscr=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_curses_initscr" >&5 $as_echo "$ac_cv_lib_curses_initscr" >&6; } if test "x$ac_cv_lib_curses_initscr" = xyes; then : HAVE_TERMCAP="curses" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -lncurses" >&5 $as_echo_n "checking for initscr in -lncurses... " >&6; } if ${ac_cv_lib_ncurses_initscr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $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 initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ncurses_initscr=yes else ac_cv_lib_ncurses_initscr=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_ncurses_initscr" >&5 $as_echo "$ac_cv_lib_ncurses_initscr" >&6; } if test "x$ac_cv_lib_ncurses_initscr" = xyes; then : HAVE_TERMCAP="ncurses" fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 $as_echo " $am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $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 cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=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_m_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : USE_LIBM="-lm" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lffm" >&5 $as_echo_n "checking for cos in -lffm... " >&6; } if ${ac_cv_lib_ffm_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lffm $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 cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ffm_cos=yes else ac_cv_lib_ffm_cos=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_ffm_cos" >&5 $as_echo "$ac_cv_lib_ffm_cos" >&6; } if test "x$ac_cv_lib_ffm_cos" = xyes; then : USE_LIBM="-lffm -lm" fi # Check whether --enable-cpml was given. if test "${enable_cpml+set}" = set; then : enableval=$enable_cpml; CONFIG_CPML="no" else CONFIG_CPML="yes" fi if test "${CONFIG_CPML}" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lcpml" >&5 $as_echo_n "checking for cos in -lcpml... " >&6; } if ${ac_cv_lib_cpml_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcpml $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 cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cpml_cos=yes else ac_cv_lib_cpml_cos=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_cpml_cos" >&5 $as_echo "$ac_cv_lib_cpml_cos" >&6; } if test "x$ac_cv_lib_cpml_cos" = xyes; then : USE_LIBM="-lcpml" fi fi CONFIG_MATH_LIB="${USE_LIBM}" # Check whether --with-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then : withval=$with_gtk_prefix; gtk_config_prefix="$withval" else gtk_config_prefix="" fi # Check whether --with-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then : withval=$with_gtk_exec_prefix; gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi # Check whether --enable-gtktest was given. if test "${enable_gtktest+set}" = set; then : enableval=$enable_gtktest; else enable_gtktest=yes fi for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GTK_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG=$ac_cv_path_GTK_CONFIG if test -n "$GTK_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTK_CONFIG" >&5 $as_echo "$GTK_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_gtk_version=1.2.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK - version >= $min_gtk_version" >&5 $as_echo_n "checking for GTK - version >= $min_gtk_version... " >&6; } no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_gtk=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } HAVE_GTK="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" HAVE_GTK="no" fi rm -f conf.gtktest { $as_echo "$as_me:${as_lineno-$LINENO}: checking use of ElectricFence malloc debugging" >&5 $as_echo_n "checking use of ElectricFence malloc debugging... " >&6; } # Check whether --enable-efence was given. if test "${enable_efence+set}" = set; then : enableval=$enable_efence; CONFIG_EFENCE="${enableval}" else CONFIG_EFENCE="no" fi case "${CONFIG_EFENCE}" in yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EF_Print in -lefence" >&5 $as_echo_n "checking for EF_Print in -lefence... " >&6; } if ${ac_cv_lib_efence_EF_Print+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lefence $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 EF_Print (); int main () { return EF_Print (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_efence_EF_Print=yes else ac_cv_lib_efence_EF_Print=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_efence_EF_Print" >&5 $as_echo "$ac_cv_lib_efence_EF_Print" >&6; } if test "x$ac_cv_lib_efence_EF_Print" = xyes; then : HAVE_EFENCE="-lefence" fi if test "x${HAVE_EFENCE}" != "x-lefence"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else LDADD="${LDADD} ${HAVE_EFENCE}" $as_echo "#define HAVE_EFENCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_EFENCE}" >&5 $as_echo "${CONFIG_EFENCE}" >&6; } fi ;; no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_EFENCE}" >&5 $as_echo "${CONFIG_EFENCE}" >&6; } ;; *) as_fn_error $? "bad value �${CONFIG_EFENCE}� for efence option" "$LINENO" 5 ;; esac WARNING= # Check whether --with-fileio was given. if test "${with_fileio+set}" = set; then : withval=$with_fileio; CONFIG_FILEIO="${withval}" else CONFIG_FILEIO="lame" fi if test "${CONFIG_FILEIO}" = "sndfile" ; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 $as_echo_n "checking for SNDFILE... " >&6; } if test -n "$SNDFILE_CFLAGS"; then pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SNDFILE_LIBS"; then pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile >= 1.0.2" 2>&1` else SNDFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile >= 1.0.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SNDFILE_PKG_ERRORS" >&5 HAVE_SNDFILE="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } HAVE_SNDFILE="no" else SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } HAVE_SNDFILE="yes" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking use of file io" >&5 $as_echo_n "checking use of file io... " >&6; } if test "${CONFIG_FILEIO}" = "sndfile" ; then if test "${HAVE_SNDFILE}" = "yes" -o "x${SNDFILE_LIBS}" != "x" \ -o "x${SNDFILE_CFLAGS}" != "x"; then SNDFILE_LIBS=`echo ${SNDFILE_LIBS}` SNDFILE_CFLAGS=`echo ${SNDFILE_CFLAGS}` if test -n "${SNDFILE_LIBS}" ; then FRONTEND_LDFLAGS="${SNDFILE_LIBS} ${FRONTEND_LDFLAGS}" fi FRONTEND_LDADD="-lsndfile ${FRONTEND_LDADD}" if test -n "${SNDFILE_CFLAGS}" ; then INCLUDES="${SNDFILE_CFLAGS} ${INCLUDES}" fi $as_echo "#define LIBSNDFILE 1" >>confdefs.h else # default CONFIG_FILEIO="lame" WARNING="${WARNING} Could not find any sndfile lib on system." fi else CONFIG_FILEIO="lame" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_FILEIO}" >&5 $as_echo "${CONFIG_FILEIO}" >&6; } if test "x${WARNING}" != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $WARNING" >&5 $as_echo "$as_me: WARNING: $WARNING" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking use of analyzer hooks" >&5 $as_echo_n "checking use of analyzer hooks... " >&6; } # Check whether --enable-analyzer-hooks was given. if test "${enable_analyzer_hooks+set}" = set; then : enableval=$enable_analyzer_hooks; CONFIG_ANALYZER="${enableval}" else CONFIG_ANALYZER="yes" fi case "${CONFIG_ANALYZER}" in yes) ;; no) $as_echo "#define NOANALYSIS 1" >>confdefs.h ;; *) as_fn_error $? "bad value �${CONFIG_ANALYZER}� for analyzer-hooks option" "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONFIG_ANALYZER" >&5 $as_echo "$CONFIG_ANALYZER" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking use of mpg123 decoder" >&5 $as_echo_n "checking use of mpg123 decoder... " >&6; } # Check whether --enable-decoder was given. if test "${enable_decoder+set}" = set; then : enableval=$enable_decoder; CONFIG_DECODER="${enableval}" else CONFIG_DECODER="yes" fi if test "x${CONFIG_DECODER}" = "xyes"; then LIB_WITH_DECODER_TRUE= LIB_WITH_DECODER_FALSE='#' else LIB_WITH_DECODER_TRUE='#' LIB_WITH_DECODER_FALSE= fi if test "${CONFIG_DECODER}" != "no" ; then CONFIG_DECODER="yes (Layer 1, 2, 3)" $as_echo "#define HAVE_MPGLIB 1" >>confdefs.h $as_echo "#define DECODE_ON_THE_FLY 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONFIG_DECODER" >&5 $as_echo "$CONFIG_DECODER" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the lame frontend should be build" >&5 $as_echo_n "checking if the lame frontend should be build... " >&6; } # Check whether --enable-frontend was given. if test "${enable_frontend+set}" = set; then : enableval=$enable_frontend; WITH_FRONTEND="${enableval}" else WITH_FRONTEND=yes fi if test "x${WITH_FRONTEND}" = "xyes"; then WITH_FRONTEND=lame${ac_exeext} { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else WITH_FRONTEND= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if mp3x is requested" >&5 $as_echo_n "checking if mp3x is requested... " >&6; } # Check whether --enable-mp3x was given. if test "${enable_mp3x+set}" = set; then : enableval=$enable_mp3x; WITH_MP3X="${enableval}" else WITH_MP3X=no fi if test "x${WITH_MP3X}" = "xyes"; then WITH_MP3X=mp3x${ac_exeext} { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else WITH_MP3X= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "${HAVE_GTK}" = "no"; then if test "x${WITH_MP3X}" = "xmp3x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't build mp3x" >&5 $as_echo "$as_me: WARNING: can't build mp3x" >&2;} WITH_MP3X= fi if test "x${CONFIG_ANALYZER}" != "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't build mp3x because of disabled analyzer hooks" >&5 $as_echo "$as_me: WARNING: can't build mp3x because of disabled analyzer hooks" >&2;} WITH_MP3X= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if mp3rtp is requested" >&5 $as_echo_n "checking if mp3rtp is requested... " >&6; } # Check whether --enable-mp3rtp was given. if test "${enable_mp3rtp+set}" = set; then : enableval=$enable_mp3rtp; WITH_MP3RTP="${enableval}" else WITH_MP3RTP=no fi if test "x${WITH_MP3RTP}" = "xyes"; then if test ${SOCKETFUNCTION} = NO; then as_fn_error $? "function socket is mandatory for mp3rtp" "$LINENO" 5 fi WITH_MP3RTP=mp3rtp${ac_exeext} { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else WITH_MP3RTP= { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic linking of the frontends is requested" >&5 $as_echo_n "checking if dynamic linking of the frontends is requested... " >&6; } # Check whether --enable-dynamic-frontends was given. if test "${enable_dynamic_frontends+set}" = set; then : enableval=$enable_dynamic_frontends; FRONTEND_LDFLAGS="${FRONTEND_LDFLAGS}" else FRONTEND_LDFLAGS="${FRONTEND_LDFLAGS} -static" fi case "x${FRONTEND_LDFLAGS}" in *-static*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } ;; esac # # this is from vorbis # case $host in *86-*-linux*) # glibc < 2.1.3 has a serious FP bug in the math inline header # that will cripple Vorbis. Look to see if the magic FP stack # clobber is missing in the mathinline header, thus indicating # the buggy version cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __LIBC_INTERNAL_MATH_INLINES 1 #define __OPTIMIZE__ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "log10.*fldlg2.*fxch" >/dev/null 2>&1; then : bad=maybe else bad=no fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking glibc mathinline bug" >&5 $as_echo_n "checking glibc mathinline bug... " >&6; } if test ${bad} = "maybe" ;then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __LIBC_INTERNAL_MATH_INLINES 1 #define __OPTIMIZE__ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "log10.*fldlg2.*fxch.*st\([0123456789]*\)" >/dev/null 2>&1; then : bad=no else bad=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${bad}" >&5 $as_echo "${bad}" >&6; } if test ${bad} = "yes" ;then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 $as_echo "$as_me: WARNING: " >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ********************************************************" >&5 $as_echo "$as_me: WARNING: ********************************************************" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * The glibc headers on this machine have a serious bug *" >&5 $as_echo "$as_me: WARNING: * The glibc headers on this machine have a serious bug *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * in /usr/include/bits/mathinline.h This bug affects *" >&5 $as_echo "$as_me: WARNING: * in /usr/include/bits/mathinline.h This bug affects *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * all floating point code, not only LAME, but all code *" >&5 $as_echo "$as_me: WARNING: * all floating point code, not only LAME, but all code *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * built on this machine. Upgrading to glibc 2.1.3 is *" >&5 $as_echo "$as_me: WARNING: * built on this machine. Upgrading to glibc 2.1.3 is *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * strongly urged to correct the problem. *" >&5 $as_echo "$as_me: WARNING: * strongly urged to correct the problem. *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *Note: that upgrading glibc will not fix any previously*" >&5 $as_echo "$as_me: WARNING: *Note: that upgrading glibc will not fix any previously*" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * built programs; this is a compile-time bug. *" >&5 $as_echo "$as_me: WARNING: * built programs; this is a compile-time bug. *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * To work around the problem for this build of LAME, *" >&5 $as_echo "$as_me: WARNING: * To work around the problem for this build of LAME, *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * autoconf is disabling all math inlining. This will *" >&5 $as_echo "$as_me: WARNING: * autoconf is disabling all math inlining. This will *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * hurt LAME performace but is necessary for LAME to *" >&5 $as_echo "$as_me: WARNING: * hurt LAME performace but is necessary for LAME to *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * work correctly. Once glibc is upgraded, rerun *" >&5 $as_echo "$as_me: WARNING: * work correctly. Once glibc is upgraded, rerun *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: * configure and make to build with inlining. *" >&5 $as_echo "$as_me: WARNING: * configure and make to build with inlining. *" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ********************************************************" >&5 $as_echo "$as_me: WARNING: ********************************************************" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: " >&5 $as_echo "$as_me: WARNING: " >&2;} $as_echo "#define __NO_MATH_INLINES 1" >>confdefs.h fi;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for termcap" >&5 $as_echo_n "checking for termcap... " >&6; } if test "x${HAVE_TERMCAP}" != "x"; then FRONTEND_LDADD="-l${HAVE_TERMCAP} ${FRONTEND_LDADD}" $as_echo "#define HAVE_TERMCAP 1" >>confdefs.h TERMCAP_DEFAULT="yes" else TERMCAP_DEFAULT="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${TERMCAP_DEFAULT}" >&5 $as_echo "${TERMCAP_DEFAULT}" >&6; } WITH_VECTOR=no case $host_cpu in x86_64|amd64) CPUTYPE="no" if test $ac_cv_header_xmmintrin_h = yes ; then WITH_XMM=yes WITH_VECTOR=yes fi $as_echo "#define TAKEHIRO_IEEE754_HACK 1" >>confdefs.h $as_echo "#define USE_FAST_LOG 1" >>confdefs.h ;; *86) CPUTYPE="i386" if test $ac_cv_header_xmmintrin_h = yes ; then WITH_XMM=yes WITH_VECTOR=yes fi # use internal knowledge of the IEEE 754 layout $as_echo "#define TAKEHIRO_IEEE754_HACK 1" >>confdefs.h $as_echo "#define USE_FAST_LOG 1" >>confdefs.h ;; powerpc) CPUTYPE="no" # use internal knowledge of the IEEE 754 layout $as_echo "#define TAKEHIRO_IEEE754_HACK 1" >>confdefs.h # The following should not get enabled on a G5. HOWTO check for a G5? $as_echo "#define USE_FAST_LOG 1" >>confdefs.h ;; *) CPUTYPE="no" ;; esac # which vector code do we support to build on this machine? if test "x${WITH_XMM}" = "xyes"; then WITH_XMM_TRUE= WITH_XMM_FALSE='#' else WITH_XMM_TRUE='#' WITH_XMM_FALSE= fi # needs to be defined to link in the internal vector lib if test "x${WITH_VECTOR}" = "xyes"; then WITH_VECTOR_TRUE= WITH_VECTOR_FALSE='#' else WITH_VECTOR_TRUE='#' WITH_VECTOR_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if I have to build the internal vector lib" >&5 $as_echo_n "checking if I have to build the internal vector lib... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WITH_VECTOR}" >&5 $as_echo "${WITH_VECTOR}" >&6; } # Extract the first word of "nasm", so it can be a program name with args. set dummy nasm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_NASM+:} false; then : $as_echo_n "(cached) " >&6 else case $NASM in [\\/]* | ?:[\\/]*) ac_cv_path_NASM="$NASM" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_NASM="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_NASM" && ac_cv_path_NASM="no" ;; esac fi NASM=$ac_cv_path_NASM if test -n "$NASM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NASM" >&5 $as_echo "$NASM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case "${NASM}" in no) ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler routines for this processor type" >&5 $as_echo_n "checking for assembler routines for this processor type... " >&6; } for recurse_over in ${ASM_FOR_ARCH} do if test "${CPUTYPE}" = "${recurse_over}"; then include_asm_routines="yes" fi case $host_os in *darwin*) # currently we have problems because of a wrong # libtool hack in the darwin case (for nasm code) include_asm_routines="no" ;; esac done if test "x${include_asm_routines}" = "xyes"; then $as_echo "#define HAVE_NASM 1" >>confdefs.h $as_echo "#define MMX_choose_table 1" >>confdefs.h else include_asm_routines="no" NASM="no" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${include_asm_routines}" >&5 $as_echo "${include_asm_routines}" >&6; } ;; esac if test "${NASM}" != "no"; then HAVE_NASM_TRUE= HAVE_NASM_FALSE='#' else HAVE_NASM_TRUE='#' HAVE_NASM_FALSE= fi case $host_os in *cygwin*|*mingw32*) CYGWIN=yes NASM_FORMAT="-f win32 -DWIN32" ;; *darwin*) NASM_FORMAT="-f macho" ;; *) CYGWIN=no NASM_FORMAT="-f elf" ;; esac # # 'expopt' is used for "additional optimizations", not for optimizations which # are marked as "experimental" in the guide for the compiler. # They are "experimental" here in the LAME project (at least # "--enable-expopt=full"). # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for additional optimizations" >&5 $as_echo_n "checking for additional optimizations... " >&6; } # Check whether --enable-expopt was given. if test "${enable_expopt+set}" = set; then : enableval=$enable_expopt; CONFIG_EXPOPT="${enableval}" else CONFIG_EXPOPT="no" fi if test "x$HAVE_GCC" = "xyes" -o "x$HAVE_CLANG" = "xyes"; then # gcc defaults. OS specific options go in versious sections below # from the gcc man pages: "there is no reason to use -pedantic" if test "x${with_gnu_ld}" = "xyes"; then CFLAGS="-Wall -pipe ${CFLAGS}" else # some vendor ld's don't like '-pipe' CFLAGS="-Wall ${CFLAGS}" fi # GCC version specific generic options if test "x${HAVE_GCC}" = "xyes"; then case "${GCC_version}" in 2.96*) # for buggy version of gcc shipped with RH7.1, back of on some # optimizations OPTIMIZATION="-O -fomit-frame-pointer -ffast-math \ -funroll-loops" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fsched-interblock -fbranch-count-reg -fforce-addr \ -fforce-mem" ;; 3.0*) # -funroll-loops seems to produce buggy code with gcc 3.0.3 OPTIMIZATION="-O -fomit-frame-pointer -ffast-math" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fbranch-count-reg -fforce-addr -fforce-mem" ;; 3.*|4.0.*|4.1.*) # -fomit-frame-pointer seems to be buggy on cygwin case ${host_os} in *cygwin*) OMIT_FRAME_POINTER= ;; *) OMIT_FRAME_POINTER=-fomit-frame-pointer ;; esac OPTIMIZATION="-O3 ${OMIT_FRAME_POINTER} -ffast-math" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fbranch-count-reg -fforce-addr -fforce-mem" ;; 456789.*) OPTIMIZATION="-O3 -fomit-frame-pointer -ffast-math" OPTIMIZATION_FULL="-fbranch-count-reg -fforce-addr" ;; *) # default OPTIMIZATION="-O3 ${OMIT_FRAME_POINTER} -ffast-math \ -funroll-loops" OPTIMIZATION_FULL="-fbranch-count-reg -fforce-addr" ;; esac # GCC version independend generic options OPTIMIZATION_NORM="-fschedule-insns2" fi # generic CPU specific options case ${host_cpu} in sparc) case "${GCC_version}" in 3.0*) ;; 3456789.*) # doesn't work on 3.0.x, but on 3.[12] and # hopefully on every other release after that too if test -x /usr/bin/isalist; then /usr/bin/isalist | grep sparcv8plus \ >/dev/null 2>&1 && \ OPTIMIZATION="${OPTIMIZATION} \ -mcpu=ultrasparc \ -mtune=ultrasparc" fi ;; esac ;; *86) case "${GCC_version}" in 3456789.*) OPTIMIZATION="${OPTIMIZATION} \ -maccumulate-outgoing-args" ;; esac ;; esac expopt_msg_result_printed=no case "${CONFIG_EXPOPT}" in no) # if someone supplies own CFLAGS, we don't add our own if test "x${ac_save_CFLAGS}" != "x"; then OPTIMIZATION="" fi ;; norm|yes) OPTIMIZATION="${OPTIMIZATION} ${OPTIMIZATION_NORM}" ;; full) OPTIMIZATION="${OPTIMIZATION} ${OPTIMIZATION_NORM} \ ${OPTIMIZATION_FULL}" if test "${HAVE_GCC}" = "yes"; then # some hardware dependend options case "${GCC_version}" in 2.9*|3.*|4.0.*|4.1.*) # "new" GCC, use some "new" CPU specific optimizations # use -mtune instead of -m486 or -mcpu= etc, since they are # deprecated by GCC case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -mcpu=i486 \ -mfancy-math-387" ;; *586) OPTIMIZATION="${OPTIMIZATION} -mcpu=pentium \ -march=pentium -mfancy-math-387" ;; *686) OPTIMIZATION="${OPTIMIZATION} -mcpu=pentiumpro \ -march=pentiumpro -mfancy-math-387 \ -malign-double" ;; *86) OPTIMIZATION="${OPTIMIZATION} -mfancy-math-387" ;; alpha*) OPTIMIZATION="${OPTIMIZATION} -mfp-regs" $as_echo "#define FLOAT double" >>confdefs.h # add "-mcpu=21164a -Wa,-m21164a" to optimize # for 21164a (ev56) CPU ;; *) OPTIMIZATION="${OPTIMIZATION} -fdelayed-branch" ;; esac ;; 456789.*) case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -march=i486" ;; *586) OPTIMIZATION="${OPTIMIZATION} -march=i586 \ -mtune=native" ;; *686) OPTIMIZATION="${OPTIMIZATION} -march=i686 \ -mtune=native" ;; *86) OPTIMIZATION="${OPTIMIZATION} -march=native \ -mtune=native" ;; arm*-gnueabi) if -z "$(echo ${GCC_version} | awk '/4\.0/')" ; then # Work round buggy softfloat optimization in ARM EABI compilers # -gnueabi in only gcc-4.1 onwards OPTIMIZATION="${OPTIMIZATION} -fno-finite-math-only" fi ;; esac ;; *) # no special optimization for other versions { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } expopt_msg_result_printed=yes { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: LAME doesn't know about your version (${GCC_version}) of gcc" >&5 $as_echo "$as_me: WARNING: LAME doesn't know about your version (${GCC_version}) of gcc" >&2;} ;; esac fi ;; *) as_fn_error $? "bad value �${CONFIG_EXPOPT}� for expopt option" "$LINENO" 5 ;; esac if test "x${HAVE_CLANG}" = "xyes"; then case "${CLANG_VERSION}" in 3.89*|45.*) OPTIMIZATION="-Ofast" ;; *) OPTIMIZATION="-O3" ;; esac # generic CPU specific options case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -march=i486" ;; *586) OPTIMIZATION="${OPTIMIZATION} -march=i586 \ -mtune=native" ;; *686) OPTIMIZATION="${OPTIMIZATION} -march=i686 \ -mtune=native" ;; *86) OPTIMIZATION="${OPTIMIZATION} -march=native \ -mtune=native" ;; esac fi if test "${expopt_msg_result_printed}" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_EXPOPT}" >&5 $as_echo "${CONFIG_EXPOPT}" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debug options" >&5 $as_echo_n "checking for debug options... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; CONFIG_DEBUG="${enableval}" else CONFIG_DEBUG="no" fi if test "x$GCC" = "xyes"; then DEBUG_NORM_OPT="-O -g -Wall" DEBUG_ANOYING="-Wbad-function-cast -Wcast-align \ -Wcast-qual -Wchar-subscripts -Wconversion \ -Wmissing-prototypes -Wnested-externs -Wpointer-arith \ -Wredundant-decls -Wshadow -Wstrict-prototypes \ -Wwrite-strings -Winline \ -Wformat -Wswitch -Waggregate-return -Wmissing-noreturn \ -Wimplicit-int -fno-builtin" case "${CONFIG_DEBUG}" in no) ;; norm|yes) $as_echo "#define ABORTFP 1" >>confdefs.h OPTIMIZATION="${DEBUG_NORM_OPT}" ;; anoying) $as_echo "#define ABORTFP 1" >>confdefs.h OPTIMIZATION="${DEBUG_NORM_OPT} ${DEBUG_ANOYING}" ;; alot) $as_echo "#define ABORTFP 1" >>confdefs.h $as_echo "#define DEBUG 1" >>confdefs.h OPTIMIZATION="${DEBUG_NORM_OPT}" ;; *) as_fn_error $? "bad value �${CONFIG_DEBUG}� for debug option" "$LINENO" 5 esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${CONFIG_DEBUG}" >&5 $as_echo "${CONFIG_DEBUG}" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ########################################################################## # LINUX on Digital/Compaq Alpha CPUs ########################################################################## case $host in alpha*-*-linux*) ################################################################ #### Check if 'ccc' is in our path ################################################################ if test "`which ccc 2>/dev/null | grep -c ccc`" != "0" ; then # Compaq's C Compiler CC=ccc ################################################################ #### set 'OPTIMIZATION = -arch host -tune host' #### to generate/tune instructions for this machine #### 'OPTIMIZATION += -migrate -fast -inline speed -unroll 0' #### tweak to run as fast as possible :) #### 'OPTIMIZATION += -w0' #### set warning and linking flags ################################################################ OPTIMIZATION="-arch host -tune host" OPTIMIZATION="-migrate -fast -inline speed -unroll 0 $OPTIMIZATION" OPTIMIZATION="-w0 $OPTIMIZATION" ################################################################ #### to debug, uncomment ################################################################ # For Debugging #OPTIMIZATION="-g3 $OPTIMIZATION" ################################################################ #### define __DECALPHA__ (i was getting re-declaration warnings #### in machine.h ################################################################ # Define DEC Alpha $as_echo "#define __DECALPHA__ 1" >>confdefs.h fi # gcc or ccc? ;; # alpha ########################################################################## # SunOS ########################################################################## sparc-*-sunos4*) if test CC = "cc"; then OPTIMIZATION="-O -xCC" MAKEDEP="-xM" # for gcc, use instead: # CC="gcc" # OPTIMIZATION="-O" # MAKEDEP="-M" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Please contact lame@lists.sourceforge.net with the output of the configure run and the file config.cache. Thank you for your cooperation." >&5 $as_echo "$as_me: WARNING: Please contact lame@lists.sourceforge.net with the output of the configure run and the file config.cache. Thank you for your cooperation." >&2;} fi ;; #SunOS ########################################################################## # SGI ########################################################################## *-sgi-irix*) if test CC = "cc"; then OPTIMIZATION="-O3 -woff all" fi ;; # SGI ########################################################################## # Compaq Alpha running Dec Unix (OSF) ########################################################################## alpha*-dec-osf*) if test CC = "cc"; then OPTIMIZATION="-fast -O3 -std -g3 -non_shared" fi ;; #OSF esac # todo: include the following tests in the case-list UNAME=`uname` ARCH=`uname -m` ########################################################################### # MOSXS (Rhapsody PPC) ########################################################################### if test "$UNAME" = "Rhapsody"; then # CC="cc" # should be handled already by autoconf MAKEDEP="-make" fi ########################################################################### # MAC OSX Darwin PPC ########################################################################### if test "$UNAME" = "Darwin"; then MAKEDEP="-make" CFLAGS="$CFLAGS -fno-common" fi ########################################################################## # OS/2 ########################################################################## # Properly installed EMX runtime & development package is a prerequisite. # tools I used: make 3.76.1, uname 1.12, sed 2.05, PD-ksh 5.2.13 # ########################################################################## if test "$UNAME" = "OS/2"; then SHELL=sh #CC=gcc # should already be handled by configure # file extension should already be handled by automake (I don't know, # please give feedback! #FILE_EXTENSION=".exe" # Uncomment & inspect the GTK lines to use MP3x GTK frame analyzer. # Properly installed XFree86/devlibs & GTK+ is a prerequisite. # The following works for me using Xfree86/OS2 3.3.5 and GTK+ 1.2.3: # AC_DEFINE(HAVE_GTK, 1, have GTK) # AC_DEFINE(__ST_MT_ERRNO__, 1) # INCLUDES="-IC:/XFree86/include/gtk12 -IC:/XFree86/include/glib12 \ # -IC:/XFree86/include $INCLUDES" # FRONTEND_LDFLAGS="-LC:/XFree86/lib -lgtk12 -lgdk12 -lgmodule -lglib12 \ # -lXext -lX11 -lshm -lbsd -lsocket -lm $FRONTEND_LDFLAGS" # FRONTEND_CFLAGS="-Zmtd -Zsysv-signals -Zbin-files $FRONTEND_CFLAGS" fi ########################################################################### # AmigaOS ########################################################################### # Type 'Make ARCH=PPC' for PowerUP and 'Make ARCH=WOS' for WarpOS # ########################################################################### if test "$UNAME" = "AmigaOS" ; then CC="gcc -noixemul" OPTIMIZATION="$OPTIMIZATION -m68020-60 -m68881" MAKEDEP="-MM" if test "$ARCH" = "WOS"; then CC="ppc-amigaos-gcc -warpup" OPTIMIZATION="$OPTIMIZATION -mmultiple -mcpu=603e" AR="ppc-amigaos-ar" RANLIB="ppc-amigaos-ranlib" fi if test "$ARCH",PPC; then CC="ppc-amigaos-gcc" OPTIMIZATION="$OPTIMIZATION -mmultiple -mcpu=603e" AR="ppc-amigaos-ar" RANLIB="ppc-amigaos-ranlib" fi fi CFLAGS="${OPTIMIZATION} ${CFLAGS}" LDADD="${LDADD}" FRONTEND_CFLAGS="${INCICONV} ${FRONTEND_CFLAGS}" FRONTEND_LDADD="${FRONTEND_LDADD} ${LTLIBICONV} ${CONFIG_MATH_LIB}" ac_config_files="$ac_config_files Makefile libmp3lame/Makefile libmp3lame/i386/Makefile libmp3lame/vector/Makefile frontend/Makefile mpglib/Makefile doc/Makefile doc/html/Makefile doc/man/Makefile include/Makefile Dll/Makefile misc/Makefile dshow/Makefile ACM/Makefile ACM/ADbg/Makefile ACM/ddk/Makefile ACM/tinyxml/Makefile lame.spec mac/Makefile macosx/Makefile macosx/English.lproj/Makefile macosx/LAME.xcodeproj/Makefile vc_solution/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LIB_WITH_DECODER_TRUE}" && test -z "${LIB_WITH_DECODER_FALSE}"; then as_fn_error $? "conditional \"LIB_WITH_DECODER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_XMM_TRUE}" && test -z "${WITH_XMM_FALSE}"; then as_fn_error $? "conditional \"WITH_XMM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_VECTOR_TRUE}" && test -z "${WITH_VECTOR_FALSE}"; then as_fn_error $? "conditional \"WITH_VECTOR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_NASM_TRUE}" && test -z "${HAVE_NASM_FALSE}"; then as_fn_error $? "conditional \"HAVE_NASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by lame $as_me 3.100, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ lame config.status 3.100 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libmp3lame/Makefile") CONFIG_FILES="$CONFIG_FILES libmp3lame/Makefile" ;; "libmp3lame/i386/Makefile") CONFIG_FILES="$CONFIG_FILES libmp3lame/i386/Makefile" ;; "libmp3lame/vector/Makefile") CONFIG_FILES="$CONFIG_FILES libmp3lame/vector/Makefile" ;; "frontend/Makefile") CONFIG_FILES="$CONFIG_FILES frontend/Makefile" ;; "mpglib/Makefile") CONFIG_FILES="$CONFIG_FILES mpglib/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/html/Makefile") CONFIG_FILES="$CONFIG_FILES doc/html/Makefile" ;; "doc/man/Makefile") CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "Dll/Makefile") CONFIG_FILES="$CONFIG_FILES Dll/Makefile" ;; "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;; "dshow/Makefile") CONFIG_FILES="$CONFIG_FILES dshow/Makefile" ;; "ACM/Makefile") CONFIG_FILES="$CONFIG_FILES ACM/Makefile" ;; "ACM/ADbg/Makefile") CONFIG_FILES="$CONFIG_FILES ACM/ADbg/Makefile" ;; "ACM/ddk/Makefile") CONFIG_FILES="$CONFIG_FILES ACM/ddk/Makefile" ;; "ACM/tinyxml/Makefile") CONFIG_FILES="$CONFIG_FILES ACM/tinyxml/Makefile" ;; "lame.spec") CONFIG_FILES="$CONFIG_FILES lame.spec" ;; "mac/Makefile") CONFIG_FILES="$CONFIG_FILES mac/Makefile" ;; "macosx/Makefile") CONFIG_FILES="$CONFIG_FILES macosx/Makefile" ;; "macosx/English.lproj/Makefile") CONFIG_FILES="$CONFIG_FILES macosx/English.lproj/Makefile" ;; "macosx/LAME.xcodeproj/Makefile") CONFIG_FILES="$CONFIG_FILES macosx/LAME.xcodeproj/Makefile" ;; "vc_solution/Makefile") CONFIG_FILES="$CONFIG_FILES vc_solution/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi lame-3.100/config.h.in000644 001751 001751 00000021517 13144610545 016117 0ustar00netchildnetchild000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ #ifndef LAME_CONFIG_H #define LAME_CONFIG_H /* debug define */ #undef ABORTFP /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* alot of debug output */ #undef DEBUG /* allow to compute a more accurate replaygain value */ #undef DECODE_ON_THE_FLY /* double is faster than float on Alpha */ #undef FLOAT /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* we link against libefence */ #undef HAVE_EFENCE /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* add ieee754_float32_t type */ #undef HAVE_IEEE754_FLOAT32_T #ifndef HAVE_IEEE754_FLOAT32_T typedef float ieee754_float32_t; #endif /* add ieee754_float64_t type */ #undef HAVE_IEEE754_FLOAT64_T #ifndef HAVE_IEEE754_FLOAT64_T typedef double ieee754_float64_t; #endif /* system has 80 bit floats */ #undef HAVE_IEEE854_FLOAT80 /* add ieee854_float80_t type */ #undef HAVE_IEEE854_FLOAT80_T #ifndef HAVE_IEEE854_FLOAT80_T typedef long double ieee854_float80_t; #endif /* add int16_t type */ #undef HAVE_INT16_T #ifndef HAVE_INT16_T typedef short int16_t; #endif /* add int32_t type */ #undef HAVE_INT32_T #ifndef HAVE_INT32_T #undef A_INT32_T typedef A_INT32_T int32_t; #endif /* add int64_t type */ #undef HAVE_INT64_T #ifndef HAVE_INT64_T #undef A_INT64_T typedef A_INT64_T int64_t; #endif /* add int8_t type */ #undef HAVE_INT8_T #ifndef HAVE_INT8_T typedef char int8_t; #endif /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_SOUNDCARD_H /* Define to 1 if the type `long double' works and has more range or precision than `double'. */ #undef HAVE_LONG_DOUBLE /* Define to 1 if the type `long double' works and has more range or precision than `double'. */ #undef HAVE_LONG_DOUBLE_WIDER /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* build with mpglib support */ #undef HAVE_MPGLIB /* have nasm */ #undef HAVE_NASM /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_TERMCAP_H /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOUNDCARD_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* have termcap */ #undef HAVE_TERMCAP /* Define to 1 if you have the header file. */ #undef HAVE_TERMCAP_H /* add uint16_t type */ #undef HAVE_UINT16_T #ifndef HAVE_UINT16_T typedef unsigned short uint16_t; #endif /* add uint32_t type */ #undef HAVE_UINT32_T #ifndef HAVE_UINT32_T #undef A_UINT32_T typedef A_UINT32_T uint32_t; #endif /* add uint64_t type */ #undef HAVE_UINT64_T #ifndef HAVE_UINT64_T #undef A_UINT64_T typedef A_UINT64_T uint64_t; #endif /* add uint8_t type */ #undef HAVE_UINT8_T #ifndef HAVE_UINT8_T typedef unsigned char uint8_t; #endif /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if SSE intrinsics work. */ #undef HAVE_XMMINTRIN_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* requested by Frank, seems to be temporary needed for a smooth transition */ #undef LAME_LIBRARY_BUILD /* set to 1 if you have libsndfile */ #undef LIBSNDFILE /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* use MMX version of choose_table */ #undef MMX_choose_table /* build without hooks for analyzer */ #undef NOANALYSIS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `double', as computed by sizeof. */ #undef SIZEOF_DOUBLE /* The size of `float', as computed by sizeof. */ #undef SIZEOF_FLOAT /* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of `long double', as computed by sizeof. */ #undef SIZEOF_LONG_DOUBLE /* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* The size of `unsigned int', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_INT /* The size of `unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* The size of `unsigned long long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG_LONG /* The size of `unsigned short', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_SHORT /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* IEEE754 compatible machine */ #undef TAKEHIRO_IEEE754_HACK /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* faster log implementation with less but enough precission */ #undef USE_FAST_LOG /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define if using the dmalloc debugging malloc package */ #undef WITH_DMALLOC /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* we're on DEC Alpha */ #undef __DECALPHA__ /* work around a glibc bug */ #undef __NO_MATH_INLINES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `unsigned int' if does not define. */ #undef size_t #endif /* LAME_CONFIG_H */ lame-3.100/Makefile.MSVC000644 001751 001751 00000042635 12652742520 016311 0ustar00netchildnetchild000000 000000 # Makefile.MSVC: MSVC Makefile for LAME # # 2000-2010 Robert Hegemann # dedicated to the LAME project http://www.mp3dev.org ############################################################################### #__ readme ____________________________________________________________________ # nmake -f Makefile.MSVC # -> build lame, but not mp3x # -> use Robert's code modifications # -> assume MSVC 6.0 compiler available # -> assume NASM available # -> assemble MMX code with NASM # -> no compiler warnings # -> use single precision float # # passing arguments, one can modify the default behaviour: # COMP= -> use MS compiler # WARN= -> give verbose compiler warnings # ASM= -> no NASM nor MMX # MMX= -> do not assemble MMX code # CFG= -> disable Robert's modifications # CPU=P1 -> optimize for Pentium instead of P II/III # CPU=P2 -> optimize for Pentium II/III, you need a PII or better # CPU=P3 -> optimize for Pentium III, you need a PIII or better # GTK=YES -> have GTK, adds mp3x to default targets # PREC= -> use double instead of single float # SNDFILE= -> do not use LibSndfile for reading input files # # Example: # nmake -f Makefile.MSVC CPU=P1 GTK=YES #____________________________________________________________________ readme __ # targets <-> DOS filenames T_LAME = lame.exe T_MP3X = mp3x.exe T_MP3RTP = mp3rtp.exe T_DLL = libmp3lame.dll T_LIB_DYNAMIC = libmp3lame.lib T_LIB_STATIC = libmp3lame-static.lib T_LEGACY_DLL = lame_enc.dll TARGET_DIR = .\output\ # default targets PGM = $(T_LAME) # some default settings ! IF "$(MSVCVER)" != "" COMP = MS ! IF "$(MSVCVER)" == "Win64" ! IF "$(ASM)" == "" ASM = NO # or it could be ML64 if we want to use it... GTK = NO ! ENDIF ! ENDIF ! ELSE ! IF "$(COMP)" == "" COMP = MSVC ! ENDIF ! ENDIF ! IF "$(ASM)" == "" ASM = YES ! ENDIF ! IF "$(MMX)" == "" MMX = YES ! ENDIF ! IF "$(CFG)" == "" CFG = RH ! ENDIF ! IF "$(CPU)" == "" CPU = P2auto !if "$(PROCESSOR_LEVEL)"=="6" CPU = P6 !endif ! ENDIF ! IF "$(WARN)" == "" WARN = OFF ! ENDIF ! IF "$(PREC)" == "" PREC = SINGLE ! ENDIF ! IF "$(SNDFILE)" == "" SNDFILE = NO ! ENDIF OFF = win32 MACHINE = /machine:I386 LIB_OPTS = /nologo $(MACHINE) ! MESSAGE ---------------------------------------------------------------------- ! IF "$(CFG)" == "" ! MESSAGE building LAME ! ELSE ! MESSAGE building LAME featuring $(CFG) ! ENDIF ! IF "$(ASM)" == "YES" ! MESSAGE + ASM ! IF "$(MMX)" == "YES" ! MESSAGE + MMX ! ENDIF ! ENDIF ! IF "$(GTK)" == "YES" ! MESSAGE + GTK ! ENDIF ! IF "$(COMP)" == "INTEL" ! MESSAGE using INTEL COMPILER ! IF "$(CPU)" == "P1" ! MESSAGE + optimizing for Pentium (MMX) ! ELSE ! IF "$(CPU)" == "P2" ! MESSAGE + you need a Pentium II or better ! ELSE ! IF "$(CPU)" == "P3" ! MESSAGE + you need a Pentium III or better ! ELSE ! MESSAGE + optimizing for Pentium II/III ! ENDIF ! ENDIF ! ENDIF ! ELSE ! IF "$(MSVCVER)" == "6.0" ! MESSAGE + using MSVC 6.0 32-Bit Compiler ! IF "$(CPU)" == "P1" ! MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent) ! ELSE ! MESSAGE + optimizing for Pentium II/III ! ENDIF ! ELSEIF "$(MSVCVER)" == "8.0" ! MESSAGE + using MSVC 8.0 32-Bit Compiler ! IF "$(CPU)" == "P1" ! MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent) ! ELSE ! MESSAGE + optimizing for Pentium II/III ! ENDIF ! ELSE ! IF "$(MSVCVER)" == "Win64" ! MESSAGE + using MS 64-Bit Compiler ! ELSE ! MESSAGE using MS COMPILER ! IF "$(CPU)" == "P1" ! MESSAGE + optimizing for Pentium (MMX) (may slow down PIII a few percent) ! ELSE ! MESSAGE + optimizing for Pentium II/III ! ENDIF ! ENDIF ! ENDIF ! ENDIF ! IF "$(PREC)" == "SINGLE" ! MESSAGE + using Single precision ! ENDIF ! IF "$(SNDFILE)" == "YES" ! MESSAGE + using LibSndfile reading input files ! ENDIF ! MESSAGE ---------------------------------------------------------------------- ! IF "$(COMP)" != "INTEL" ! IF "$(COMP)" != "BCC" #__ Microsoft C options _______________________________________________________ # # /O2 maximize speed # /Ob inline expansion # /Og enable global optimizations # /Oi enable intrinsic functions # /Ot favor code speed # /Oy enable frame pointer omission # /G5 Pentium optimization # /G6 Pentium II/III optimization # /GA optimize for Windows Application # /GF enable read-only string pooling # /Gf enable string spooling # /Gs disable stack checking calls # /Gy separate functions for linker # /QIfdiv generate code for Pentium FDIV fix # /QI0f generate code for Pentium 0x0f erratum fix # # remarks: # - aliasing options seem to break code # - try to get the Intel compiler demonstration code! # ICL produces faster code. # debugging options # CC_OPTS = /nologo /Zi /Ge /GZ # LN_OPTS = /nologo /debug:full /debugtype:cv /fixed:no # profiling options # CC_OPTS = /nologo /Zi /O2b2gity /G6As /DNDEBUG # LN_OPTS = /nologo /debug:full /debugtype:cv /fixed:no /profile # release options ! IF "$(MSVCVER)" == "Win64" CC_OPTS = /nologo /DWin64 /O2b2ity /GAy /Gs1024 /Zp8 /GL /GS- /Zi ! ELSEIF "$(MSVCVER)" == "8.0" CC_OPTS = /nologo /O2 /Wp64 /Oi /GL /arch:SSE /fp:precise ! ELSEif "$(CPU)"=="P6" CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /Zp8 /Zi !else CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /QIfdiv /QI0f /YX ! ENDIF ! IF "$(MSVCVER)" == "6.0" ! IF "$(CPU)" == "P1" CC_OPTS = $(CC_OPTS) /G5 ! ELSE CC_OPTS = $(CC_OPTS) /G6 ! ENDIF ! ENDIF ! IF "$(WARN)" == "OFF" CC_OPTS = $(CC_OPTS) /w ! ELSE CC_OPTS = $(CC_OPTS) /W$(WARN) ! ENDIF ! IF "$(PREC)" == "SINGLE" CC_OPTS = $(CC_OPTS) /DFLOAT8=float /DREAL_IS_FLOAT=1 ! ENDIF # temporary remove NDEBUG, see configure.in #CC_OPTS = $(CC_OPTS) /DNDEBUG /MT CC_OPTS = $(CC_OPTS) /MT LN_OPTS = /nologo /pdb:none LN_DLL = /nologo /DLL CC_OUT = /Fo LN_OUT = /OUT: CC = cl LN = link #_______________________________________________________ Microsoft C options __ ! ELSE #__ Borland BCC options _______________________________________________________ # # first draft, DLL not working, generates very slow code! BCCINST = C:/Borland/BCC55 CC_OPTS = -pc -q -ff -fp -jb -j1 -tWC -tWM -O2 -OS -I$(BCCINST)/include -DNDEBUG -DWIN32 # dll >> -tWD LN_OPTS = -lGn -lGi -lap -lx -L$(BCCINST)/lib # dll >> -Tpd ! IF "$(CPU)" == "P1" CC_OPTS = $(CC_OPTS) -5 ! ELSE CC_OPTS = $(CC_OPTS) -6 ! ENDIF ! IF "$(WARN)" == "OFF" CC_OPTS = $(CC_OPTS) -w- ! ELSE CC_OPTS = $(CC_OPTS) ! ENDIF LN_DLL = #$(CCINST)/lib/cw32R.lib LN_OUT = -e CC_OUT = -o CC = bcc32 LN = bcc32 OFF = obj ! ENDIF #_______________________________________________________ Borland BCC options __ ! ELSE #__ Intel 4.5 options _________________________________________________________ # # /YX enable automatic precompiled header file creation/usage # /Ox maximum optimization same as /O2 without /Gfy # /O2 same as /Gfsy /Ob1gyti # /Gd 1) make cdecl the default calling convention # /G5 2) optimized for Pentium # /G6 3) optimized for Pentium II/III # /GA assume single threaded # /Gs[n] disable stack checks for functions with /dev/null | grep -c ccc),0) # double is faster than float on Alpha CC_OPTS = -O4 -pedantic -Wall -fomit-frame-pointer -ffast-math -funroll-loops \ -mfp-regs -fschedule-insns -fschedule-insns2 \ -finline-functions \ # -DFLOAT=double # add "-mcpu=21164a -Wa,-m21164a" to optimize for 21164a (ev56) CPU ################################################################ #### else, use 'ccc' ################################################################ else # Compaq's C Compiler CC = ccc ################################################################ #### set 'CC_OPTS = -arch host -tune host' to generate/tune instructions for this machine #### 'CC_OPTS += -migrate -fast -inline speed -unroll 0' tweak to run as fast as possible :) #### 'CC_OPTS += -w0 -pedantic -Wall' set warning and linking flags ################################################################ CC_OPTS = -arch host -tune host CC_OPTS += -migrate -fast -inline speed -unroll 0 CC_OPTS += -w0 -pedantic -Wall ################################################################ #### to debug, uncomment ################################################################ # For Debugging #CC_OPTS += -g3 ################################################################ #### define __DECALPHA__ (i was getting re-declaration warnings #### in machine.h ################################################################ # Define DEC Alpha CPP_OPTS += -D__DECALPHA__ # standard Linux libm #LIBS = -lm # optimized libffm (free fast math library) #LIBS = -lffm # Compaq's fast math library LIBS = -lcpml endif # gcc or ccc? endif # alpha endif # linux ########################################################################## # FreeBSD ########################################################################## ifeq ($(UNAME),FreeBSD) # remove if you do not have GTK or do not want the GTK frame analyzer GTK = -DHAVE_GTK `gtk12-config --cflags` GTKLIBS = `gtk12-config --libs` # Comment out next 2 lines if you want to remove VBR histogram capability BRHIST_SWITCH = -DHAVE_TERMCAP -DHAVE_TERMCAP_H LIBTERMCAP = -lncurses endif ########################################################################## # OpenBSD ########################################################################## ifeq ($(UNAME),OpenBSD) # remove if you do not have GTK or do not want the GTK frame analyzer GTK = -DHAVE_GTK `gtk-config --cflags` GTKLIBS = `gtk-config --libs` # Comment out next 2 lines if you want to remove VBR histogram capability BRHIST_SWITCH = -DHAVE_TERMCAP -DHAVE_TERMCAP_H LIBTERMCAP = -lcurses endif ########################################################################## # SunOS ########################################################################## ifeq ($(UNAME),SunOS) CC = cc CC_OPTS = -O -xCC MAKEDEP = -xM # for gcc, use instead: # CC = gcc # CC_OPTS = -O # MAKEDEP = -M endif ########################################################################## # SGI ########################################################################## ifeq ($(UNAME),IRIX64) CC = cc CC_OPTS = -O3 -woff all #optonal: # GTK = -DHAVE_GTK `gtk-config --cflags` # GTKLIBS = `gtk-config --libs` # BRHIST_SWITCH = -DBRHIST -DHAVE_TERMCAP -DHAVE_TERMCAP_H # LIBTERMCAP = -lncurses endif ifeq ($(UNAME),IRIX) CC = cc CC_OPTS = -O3 -woff all endif ########################################################################## # Compaq Alpha running Dec Unix (OSF) ########################################################################## ifeq ($(UNAME),OSF1) CC = cc CC_OPTS = -fast -O3 -std -g3 -non_shared endif ########################################################################## # BeOS ########################################################################## ifeq ($(UNAME),BeOS) CC = $(BE_C_COMPILER) LIBS = ifeq ($(ARCH),BePC) CC_OPTS = -O9 -fomit-frame-pointer -march=pentium \ -mcpu=pentium -ffast-math -funroll-loops \ -fprofile-arcs -fbranch-probabilities else CC_OPTS = -opt all MAKEDEP = -make endif endif ########################################################################### # MOSXS (Rhapsody PPC) ########################################################################### ifeq ($(UNAME),Rhapsody) CC = cc LIBS = CC_OPTS = -O9 -ffast-math -funroll-loops -fomit-frame-pointer MAKEDEP = -make endif ########################################################################## # OS/2 ########################################################################## # Properly installed EMX runtime & development package is a prerequisite. # tools I used: make 3.76.1, uname 1.12, sed 2.05, PD-ksh 5.2.13 # ########################################################################## ifeq ($(UNAME),OS/2) SHELL=sh CC = gcc CC_OPTS = -O3 -D__OS2__ PGM = lame.exe LIBS = RANLIB = touch # I use the following for slightly better performance on my Pentium-II # using pgcc-2.91.66: # CC_OPTS = -O6 -ffast-math -funroll-loops -mpentiumpro -march=pentiumpro -D__OS2__ # for the unfortunates with a regular pentium (using pgcc): # CC_OPTS = -O6 -ffast-math -funroll-loops -mpentium -march=pentium -D__OS2__ # Comment out next 2 lines if you want to remove VBR histogram capability BRHIST_SWITCH = -DHAVE_TERMCAP -DHAVE_{NCURSES_}TERMCAP_H LIBTERMCAP = -lncurses # Uncomment & inspect the 2 GTK lines to use MP3x GTK frame analyzer. # Properly installed XFree86/devlibs & GTK+ is a prerequisite. # The following works for me using Xfree86/OS2 3.3.5 and GTK+ 1.2.3: # GTK = -DHAVE_GTK -IC:/XFree86/include/gtk12 -Zmt -D__ST_MT_ERRNO__ -IC:/XFree86/include/glib12 -IC:/XFree86/include # GTKLIBS = -LC:/XFree86/lib -Zmtd -Zsysv-signals -Zbin-files -lgtk12 -lgdk12 -lgmodule -lglib12 -lXext -lX11 -lshm -lbsd -lsocket -lm endif ########################################################################### # MSDOS/Windows ########################################################################### ifeq ($(UNAME),MSDOS) RM = CC_OPTS = \ -Wall -pipe -O3 -fomit-frame-pointer -ffast-math -funroll-loops \ -fschedule-insns2 -fmove-all-movables -freduce-all-givs \ -mcpu=pentium -march=pentium -mfancy-math-387 CC_OPTS += -D_cdecl=__cdecl PGM = lame.exe endif ########################################################################### # AmigaOS ########################################################################### # Type 'Make ARCH=PPC' for PowerUP and 'Make ARCH=WOS' for WarpOS # ########################################################################### ifeq ($(UNAME),AmigaOS) CC = gcc -noixemul CC_OPTS = -O3 -ffast-math -funroll-loops -m68020-60 -m68881 BRHIST_SWITCH = -DBRHIST MAKEDEP = -MM ifeq ($(ARCH),WOS) CC = ppc-amigaos-gcc -warpup CC_OPTS = -O3 -ffast-math -fomit-frame-pointer -funroll-loops \ -mmultiple -mcpu=603e AR = ppc-amigaos-ar RANLIB = ppc-amigaos-ranlib LIBS = endif ifeq ($(ARCH),PPC) CC = ppc-amigaos-gcc CC_OPTS = -O3 -ffast-math -fomit-frame-pointer -funroll-loops \ -mmultiple -mcpu=603e AR = ppc-amigaos-ar RANLIB = ppc-amigaos-ranlib LIBS = endif endif # 10/99 added -D__NO_MATH_INLINES to fix a bug in *all* versions of # gcc 2.8+ as of 10/99. ifeq ($(HAVE_NEWER_GLIBC),YES) CC_SWITCHES = else CC_SWITCHES = -D__NO_MATH_INLINES # only needed by some older glibc endif # temporary remove NDEBUG, see configure.in #CC_SWITCHES += -DNDEBUG $(CC_OPTS) $(SNDLIB) $(BRHIST_SWITCH) CC_SWITCHES += $(CC_OPTS) $(SNDLIB) $(BRHIST_SWITCH) frontend_sources = \ frontend/main.c \ frontend/amiga_mpega.c \ frontend/brhist.c \ frontend/get_audio.c \ frontend/lametime.c \ frontend/parse.c \ frontend/timestatus.c \ frontend/console.c \ lib_sources = \ libmp3lame/bitstream.c \ libmp3lame/encoder.c \ libmp3lame/fft.c \ libmp3lame/gain_analysis.c \ libmp3lame/id3tag.c \ libmp3lame/lame.c \ libmp3lame/newmdct.c \ libmp3lame/psymodel.c \ libmp3lame/quantize.c \ libmp3lame/quantize_pvt.c \ libmp3lame/set_get.c \ libmp3lame/vbrquantize.c \ libmp3lame/reservoir.c \ libmp3lame/tables.c \ libmp3lame/takehiro.c \ libmp3lame/util.c \ libmp3lame/mpglib_interface.c \ libmp3lame/VbrTag.c \ libmp3lame/version.c \ libmp3lame/presets.c \ libmp3lame/vector/xmm_quantize_sub.c \ mpglib/common.c \ mpglib/dct64_i386.c \ mpglib/decode_i386.c \ mpglib/layer1.c \ mpglib/layer2.c \ mpglib/layer3.c \ mpglib/tabinit.c \ mpglib/interface.c #ifeq ($(UNAME),MSDOS) # frontend_sources := $(subst /,\,$(frontend_sources)) # lib_sources := $(subst /,\,$(lib_sources)) #endif frontend_obj = $(frontend_sources:.c=.o) lib_obj = $(lib_sources:.c=.o) DEP = $(frontend_sources:.c=.d) $(lib_sources:.c=.d ) gtk_sources = frontend/gtkanal.c frontend/gpkplotting.c frontend/mp3x.c gtk_obj = $(gtk_sources:.c=.gtk.o) gtk_dep = $(gtk_sources:.c=.d) NASM = nasm ASFLAGS=-f $(NASM_FLAGS) -i libmp3lame/i386/ # for people with nasmw ifeq ($(UNAME),MSDOS) NASM = nasmw ASFLAGS=-f win32 -DWIN32 -i libmp3lame/i386/ endif %.o: %.nas $(NASM) $(ASFLAGS) $< -o $@ %.o: %.s gcc -c $< -o $@ #HAVE_NASM = YES ifeq ($(HAVE_NASM),YES) ## have NASM CC_SWITCHES += -DHAVE_NASM lib_obj += libmp3lame/i386/cpu_feat.o ## use MMX extension. you need nasm and MMX supported CPU. CC_SWITCHES += -DMMX_choose_table lib_obj += libmp3lame/i386/choose_table.o ## use 3DNow! extension. you need nasm and 3DNow! supported CPU. lib_obj += libmp3lame/i386/fft3dn.o ## use SSE extension. you need nasm and SSE supported CPU. lib_obj += libmp3lame/i386/fftsse.o ## not yet coded #CC_SWITCHES += -DUSE_FFTFPU #lib_obj += libmp3lame/i386/fftfpu.o endif # # Makefile rules---you probably won't have to modify below this line # %.o: %.c $(CC) $(CPP_OPTS) $(CC_SWITCHES) -c $< -o $@ %.d: %.c ifeq ($(NOUNIXCMD),YES) $(CC) $(MAKEDEP) $(CPP_OPTS) $(CC_SWITCHES) $< > $@ else $(SHELL) -ec '$(CC) $(MAKEDEP) $(CPP_OPTS) $(CC_SWITCHES) $< | sed '\''s;$*.o;& $@;g'\'' > $@' endif %.gtk.o: %.c $(CC) $(CPP_OPTS) $(CC_SWITCHES) $(GTK) -c $< -o $@ all: frontend/$(PGM) $(lib_sources) $(frontend_sources) $(gtk_sources) : config.h config.h: configMS.h ifeq ($(NOUNIXCMD),YES) copy configMS.h config.h else cp configMS.h config.h endif frontend/$(PGM): frontend/lame_main.o $(frontend_obj) $(MP3LIB) $(CC) $(CC_OPTS) -o frontend/$(PGM) frontend/lame_main.o $(frontend_obj) \ $(MP3LIB) $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) mp3x: $(frontend_obj) $(gtk_obj) $(MP3LIB) $(CC) $(CC_OPTS) -o frontend/mp3x $(frontend_obj) $(gtk_obj) \ $(MP3LIB) $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) $(GTKLIBS) mp3rtp: frontend/rtp.o frontend/mp3rtp.o $(frontend_obj) $(MP3LIB) $(CC) $(CC_OPTS) -o frontend/mp3rtp frontend/mp3rtp.o frontend/rtp.o $(frontend_obj) $(MP3LIB) \ $(LIBS) $(LIBSNDFILE) $(LIBTERMCAP) libmp3lame/libmp3lame.a: $(lib_obj) echo $(lib_obj) $(AR) cr libmp3lame/libmp3lame.a $(lib_obj) $(RANLIB) libmp3lame/libmp3lame.a #shared library. GNU specific? libmp3lame/libmp3lame.so: $(lib_obj) gcc -shared -Wl,-soname,libmp3lame/libmp3lame.so -o libmp3lame/libmp3lame.so $(lib_obj) install: frontend/$(PGM) #libmp3lame.a cp frontend/$(PGM) /usr/bin #cp libmp3lame.a /usr/lib #cp lame.h /usr/lib clean: ifeq ($(UNAME),MSDOS) -del $(subst /,\,$(frontend_obj)) -del $(subst /,\,$(lib_obj)) -del $(subst /,\,$(gtk_obj)) -del $(subst /,\,$(DEP)) -del frontend\$(PGM) -del frontend\main.o -del libmp3lame\libmp3lame.a else -$(RM) $(gtk_obj) $(frontend_obj) $(lib_obj) $(DEP) frontend/$(PGM) \ frontend/main.o frontend/lame libmp3lame/libmp3lame.a \ frontend/mp3x.o frontend/mp3x endif tags: TAGS TAGS: ${c_sources} etags -T ${c_sources} ifneq ($(MAKECMDGOALS),clean) -include $(DEP) endif # # testcase.mp3 is a 2926 byte file. The first number output by # wc is the number of bytes which differ between new output # and 'official' results. # # Because of compiler options and effects of roundoff, the # number of bytes which are different may not be zero, but # should be at most 30. # test: frontend/$(PGM) frontend/$(PGM) --nores testcase.wav testcase.new.mp3 cmp -l testcase.new.mp3 testcase.mp3 | wc -l lame-3.100/include/000755 001751 001751 00000000000 13170221265 015505 5ustar00netchildnetchild000000 000000 lame-3.100/libmp3lame/000755 001751 001751 00000000000 13170221264 016106 5ustar00netchildnetchild000000 000000 lame-3.100/frontend/000755 001751 001751 00000000000 13170221264 015700 5ustar00netchildnetchild000000 000000 lame-3.100/configure.in000644 001751 001751 00000103451 13144610117 016376 0ustar00netchildnetchild000000 000000 dnl $Id: configure.in,v 1.148 2017/08/15 15:16:31 aleidinger Exp $ dnl dnl dnl don't forget to set ASM_FOR_ARCH to a space delimited list of dnl processor architectures, for which assembler routines exist dnl dnl dnl Exported and configured variables: dnl CC dnl CFLAGS dnl LDFLAGS dnl LDADD dnl NASM dnl extra vars for frontend: dnl FRONTEND_LDFLAGS dnl FRONTEND_CFLAGS dnl FRONTEND_LDADD AC_PREREQ(2.69) AC_INIT([lame],[3.100],[lame-dev@lists.sf.net]) AC_CONFIG_SRCDIR([libmp3lame/lame.c]) AC_LANG([C]) dnl check system AC_CANONICAL_HOST dnl automake AM_INIT_AUTOMAKE AC_CONFIG_HEADERS([config.h]) AH_TOP([ #ifndef LAME_CONFIG_H #define LAME_CONFIG_H ]) AH_BOTTOM([#endif /* LAME_CONFIG_H */]) AM_MAINTAINER_MODE AM_MAKE_INCLUDE dnl check environment AC_AIX AC_ISC_POSIX AC_MINIX case $host_os in *cygwin* ) CYGWIN=yes;; * ) CYGWIN=no;; esac dnl libtool # AC_DISABLE_SHARED AC_PROG_LIBTOOL AC_SUBST(LIBTOOL_DEPS) CFLAGS="${ac_save_CFLAGS}" # increase this when the shared lib becomes totally incompatible LIB_MAJOR_VERSION=0 # increase this when changes are made, but they are upward compatible # to previous versions LIB_MINOR_VERSION=0 dnl # work around for a bug, don't know where it is exactly if test "${ac_cv_cygwin}" = "yes"; then if test "${CC}" != "gcc"; then AC_MSG_ERROR([Please use] [ CC=gcc ./configure] [Abort this configure run and add "CC=gcc" or you will] [see errors and no lame.exe will be build.]) fi fi dnl check programs AC_PROG_CC() if test "x${GCC}" = "xyes"; then AC_MSG_CHECKING(compiler) COMPILER_TYPE="`${CC} --version | head -1 | sed -e '1,$s/version.*//g'`" case "${COMPILER_TYPE}" in *gcc*) AC_MSG_RESULT(gcc) HAVE_GCC=yes HAVE_CLANG=no ;; *clang*) AC_MSG_RESULT(clang) HAVE_CLANG=yes HAVE_GCC=no ;; *) AC_MSG_RESULT(unknown) HAVE_GCC=no HAVE_CLANG=no ;; esac if test "${HAVE_GCC}" = "yes"; then AC_MSG_CHECKING(version of GCC) GCC_version="`${CC} --version | sed -n '1s/^[[^ ]]* (.*) //;s/ .*$//;1p'`" case "${GCC_version}" in [0-9]*[0-9]*) AC_MSG_RESULT(${GCC_version}) ;; *) # probably not gcc... AC_MSG_RESULT(unknown compiler version pattern, playing safe and disabling gcc optimisations... ${GCC_version}) HAVE_GCC=no ;; esac fi if test "${HAVE_CLANG}" = "yes"; then AC_MSG_CHECKING(version of clang) CLANG_version="`${CC} --version | sed -n 's/.*clang version //;s/ .*$//;1p'`" AC_MSG_RESULT(${CLANG_version}) fi fi AC_CHECK_HEADER(dmalloc.h) if test "${ac_cv_header_dmalloc_h}" = "yes"; then AM_WITH_DMALLOC fi dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS( \ errno.h \ fcntl.h \ limits.h \ stdint.h \ string.h \ sys/soundcard.h \ sys/time.h \ unistd.h \ linux/soundcard.h) dnl Checks for actually working SSE intrinsics AC_MSG_CHECKING(working SSE intrinsics) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[_mm_sfence();]])], [AC_DEFINE([HAVE_XMMINTRIN_H], [1], [Define if SSE intrinsics work.]) ac_cv_header_xmmintrin_h=yes], [ac_cv_header_xmmintrin_h=no]) AC_MSG_RESULT(${ac_cv_header_xmmintrin_h}) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE if test ${cross_compiling} = "no"; then AC_C_BIGENDIAN fi AC_SYS_LARGEFILE AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(unsigned short) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(unsigned int) AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(unsigned long long) AC_CHECK_SIZEOF(float) AC_CHECK_SIZEOF(double) if test $ac_cv_sizeof_short -eq 0 \ -o $ac_cv_sizeof_unsigned_short -eq 0 \ -o $ac_cv_sizeof_int -eq 0 \ -o $ac_cv_sizeof_unsigned_int -eq 0 \ -o $ac_cv_sizeof_long -eq 0 \ -o $ac_cv_sizeof_unsigned_long -eq 0 \ -o $ac_cv_sizeof_long_long -eq 0 \ -o $ac_cv_sizeof_unsigned_long_long -eq 0 \ -o $ac_cv_sizeof_float -eq 0 \ -o $ac_cv_sizeof_double -eq 0; then echo '*** I have a problem determining the size of some variable types. Either' echo '*** you compiler is broken, or your system+compiler combination is not' echo '*** supportet by the "autoconf" framework we use to generate this' echo '*** configure script.' exit 1 fi AC_C_LONG_DOUBLE if test "${ac_cv_c_have_long_double}" = "yes" ; then AC_CHECK_SIZEOF(long double) fi AC_CHECK_TYPES([uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t]) AH_VERBATIM([HAVE_UINT8_T], [/* add uint8_t type */ #undef HAVE_UINT8_T #ifndef HAVE_UINT8_T typedef unsigned char uint8_t; #endif]) AH_VERBATIM([HAVE_INT8_T], [/* add int8_t type */ #undef HAVE_INT8_T #ifndef HAVE_INT8_T typedef char int8_t; #endif]) AH_VERBATIM([HAVE_UINT16_T], [/* add uint16_t type */ #undef HAVE_UINT16_T #ifndef HAVE_UINT16_T typedef unsigned short uint16_t; #endif]) AH_VERBATIM([HAVE_INT16_T], [/* add int16_t type */ #undef HAVE_INT16_T #ifndef HAVE_INT16_T typedef short int16_t; #endif]) if test "${HAVE_INT32_T}" = yes; then AC_DEFINE(A_UINT32_T,unsigned int32_t) else if test "${ac_cv_sizeof_unsigned_short}" = "4"; then AC_DEFINE(A_UINT32_T,unsigned short) else if test "${ac_cv_sizeof_unsigned_int}" = "4"; then AC_DEFINE(A_UINT32_T,unsigned int) else if test "${ac_cv_sizeof_unsigned_long}" = "4"; then AC_DEFINE(A_UINT32_T,unsigned long) else AC_MSG_ERROR([CHECK_TYPE_uint32_t - please report to lame-dev@lists.sourceforge.net]) fi fi fi fi AH_VERBATIM([HAVE_UINT32_T], [/* add uint32_t type */ #undef HAVE_UINT32_T #ifndef HAVE_UINT32_T #undef A_UINT32_T typedef A_UINT32_T uint32_t; #endif]) if test "${ac_cv_sizeof_short}" = "4"; then AC_DEFINE(A_INT32_T,short) else if test "${ac_cv_sizeof_int}" = "4"; then AC_DEFINE(A_INT32_T,int) else if test "${ac_cv_sizeof_long}" = "4"; then AC_DEFINE(A_INT32_T,long) else AC_MSG_ERROR([CHECK_TYPE_int32_t - please report to lame-dev@lists.sourceforge.net]) fi fi fi AH_VERBATIM([HAVE_INT32_T], [/* add int32_t type */ #undef HAVE_INT32_T #ifndef HAVE_INT32_T #undef A_INT32_T typedef A_INT32_T int32_t; #endif]) if test "${HAVE_INT64_T}" = yes; then AC_DEFINE(A_UINT64_T,unsigned int64_t) else if test "${ac_cv_sizeof_unsigned_int}" = "8"; then AC_DEFINE(A_UINT64_T,unsigned int) else if test "${ac_cv_sizeof_unsigned_long}" = "8"; then AC_DEFINE(A_UINT64_T,unsigned long) else if test "${ac_cv_sizeof_unsigned_long_long}" = "8"; then AC_DEFINE(A_UINT64_T,unsigned long long) else AC_MSG_ERROR([CHECK_TYPE_uint64_t - please report to lame-dev@lists.sourceforge.net]) fi fi fi fi AH_VERBATIM([HAVE_UINT64_T], [/* add uint64_t type */ #undef HAVE_UINT64_T #ifndef HAVE_UINT64_T #undef A_UINT64_T typedef A_UINT64_T uint64_t; #endif]) if test "${ac_cv_sizeof_int}" = "8"; then AC_DEFINE(A_INT64_T,int) else if test "${ac_cv_sizeof_long}" = "8"; then AC_DEFINE(A_INT64_T,long) else if test "${ac_cv_sizeof_long_long}" = "8"; then AC_DEFINE(A_INT64_T,long long) else AC_MSG_ERROR([CHECK_TYPE_int64_t - please report to lame-dev@lists.sourceforge.net]) fi fi fi AH_VERBATIM([HAVE_INT64_T], [/* add int64_t type */ #undef HAVE_INT64_T #ifndef HAVE_INT64_T #undef A_INT64_T typedef A_INT64_T int64_t; #endif]) alex_IEEE854_FLOAT80 if test "${alex_cv_ieee854_float80}" = "yes" ; then if test "${ac_cv_c_long_double}" = "yes" ; then AC_CHECK_TYPES(ieee854_float80_t, long double) AH_VERBATIM([HAVE_IEEE854_FLOAT80_T], [/* add ieee854_float80_t type */ #undef HAVE_IEEE854_FLOAT80_T #ifndef HAVE_IEEE854_FLOAT80_T typedef long double ieee854_float80_t; #endif]) AC_DEFINE(HAVE_IEEE854_FLOAT80, 1, [system has 80 bit floats]) fi fi AC_CHECK_TYPES([ieee754_float64_t, ieee754_float32_t]) AH_VERBATIM([HAVE_IEEE754_FLOAT64_T], [/* add ieee754_float64_t type */ #undef HAVE_IEEE754_FLOAT64_T #ifndef HAVE_IEEE754_FLOAT64_T typedef double ieee754_float64_t; #endif]) AH_VERBATIM([HAVE_IEEE754_FLOAT32_T], [/* add ieee754_float32_t type */ #undef HAVE_IEEE754_FLOAT32_T #ifndef HAVE_IEEE754_FLOAT32_T typedef float ieee754_float32_t; #endif]) AC_DEFINE(LAME_LIBRARY_BUILD, 1, [requested by Frank, seems to be temporary needed for a smooth transition]) if test ${cross_compiling} = "yes"; then AC_MSG_WARN([] [**************************************************************************] [* *] [* You are cross compiling: *] [* - I did not have a change to determine *] [* + the size of: *] [* - short *] [* - unsigned short *] [* - int *] [* - unsigned int *] [* - long *] [* - unsigned long *] [* - float *] [* - double *] [* - long double *] [* + the endianess of the system *] [* - You have to provide appropriate defines for them in config.h, e.g. *] [* + define SIZEOF_SHORT to 2 if the size of a short is 2 *] [* + define WORDS_BIGENDIAN if your system is a big endian system *] [* *] [**************************************************************************]) fi AC_TYPE_SIZE_T AC_HEADER_TIME dnl Checks for library functions. AC_FUNC_ALLOCA AC_CHECK_FUNCS(gettimeofday strtol) if test "X${ac_cv_func_strtol}" != "Xyes"; then AC_MSG_ERROR([function strtol is mandatory]) fi dnl Check if we are on a mingw system, which needs libwsock32 SOCKETFUNCTION=unknown AC_CHECK_FUNCS(socket) if test $ac_cv_func_socket = no; then # maybe it is in libsocket AC_CHECK_LIB(socket, socket, [AC_DEFINE(HAVE_SOCKET) LIBS="$LIBS -lsocket"]) if test "X${ac_cv_lib_socket_socket}" != "Xyes"; then SOCKETFUNCTION=NO else case ${host_os} in *solaris*) LIBS="$LIBS -lnsl" ;; esac fi fi dnl Initialize configuration variables for the Makefile CFLAGS=${CFLAGS} CONFIG_DEFS=${CONFIG_DEFS} NASM= INCLUDES="-I\$(top_srcdir)/include -I\$(srcdir)" FRONTEND_LDFLAGS= FRONTEND_CFLAGS= LIB_SOURCES= MAKEDEP="-M" RM_F="rm -f" AC_ARG_ENABLE(nasm, [ --enable-nasm Allow the use of nasm if available], ASM_FOR_ARCH="i386", ASM_FOR_ARCH="") dnl Checks for libraries. AC_CHECK_HEADERS(termcap.h) AC_CHECK_HEADERS(ncurses/termcap.h) AC_CHECK_LIB(termcap, initscr, HAVE_TERMCAP="termcap") AC_CHECK_LIB(curses, initscr, HAVE_TERMCAP="curses") AC_CHECK_LIB(ncurses, initscr, HAVE_TERMCAP="ncurses") AM_ICONV dnl math lib AC_CHECK_LIB(m, cos, USE_LIBM="-lm") dnl free fast math library AC_CHECK_LIB(ffm, cos, USE_LIBM="-lffm -lm") dnl Compaq fast math library. AC_ARG_ENABLE(cpml, [ --disable-cpml Do not use Compaq's fast Math Library], CONFIG_CPML="no", CONFIG_CPML="yes") if test "${CONFIG_CPML}" = yes; then AC_CHECK_LIB(cpml, cos, USE_LIBM="-lcpml") fi CONFIG_MATH_LIB="${USE_LIBM}" dnl configure use of features AM_PATH_GTK(1.2.0, HAVE_GTK="yes", HAVE_GTK="no") dnl ElectricFence malloc debugging AC_MSG_CHECKING(use of ElectricFence malloc debugging) AC_ARG_ENABLE(efence, [ --enable-efence Use ElectricFence for malloc debugging], CONFIG_EFENCE="${enableval}", CONFIG_EFENCE="no") case "${CONFIG_EFENCE}" in yes) AC_CHECK_LIB(efence, EF_Print, HAVE_EFENCE="-lefence") if test "x${HAVE_EFENCE}" != "x-lefence"; then AC_MSG_RESULT(yes, but libefence not found) else LDADD="${LDADD} ${HAVE_EFENCE}" AC_DEFINE(HAVE_EFENCE, 1, we link against libefence) AC_MSG_RESULT(${CONFIG_EFENCE}) fi ;; no) AC_MSG_RESULT(${CONFIG_EFENCE}) ;; *) AC_MSG_ERROR(bad value �${CONFIG_EFENCE}� for efence option) ;; esac dnl libsndfile WARNING= AC_ARG_WITH(fileio, [ --with-fileio=lame Use lame's internal file io routines [default]] [ =sndfile Use Erik de Castro Lopo's libsndfile] [ (no stdin possible currently)], CONFIG_FILEIO="${withval}", CONFIG_FILEIO="lame") if test "${CONFIG_FILEIO}" = "sndfile" ; then PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.2, HAVE_SNDFILE="yes", HAVE_SNDFILE="no") fi AC_MSG_CHECKING(use of file io) if test "${CONFIG_FILEIO}" = "sndfile" ; then if test "${HAVE_SNDFILE}" = "yes" -o "x${SNDFILE_LIBS}" != "x" \ -o "x${SNDFILE_CFLAGS}" != "x"; then SNDFILE_LIBS=`echo ${SNDFILE_LIBS}` SNDFILE_CFLAGS=`echo ${SNDFILE_CFLAGS}` if test -n "${SNDFILE_LIBS}" ; then FRONTEND_LDFLAGS="${SNDFILE_LIBS} ${FRONTEND_LDFLAGS}" fi FRONTEND_LDADD="-lsndfile ${FRONTEND_LDADD}" if test -n "${SNDFILE_CFLAGS}" ; then INCLUDES="${SNDFILE_CFLAGS} ${INCLUDES}" fi AC_DEFINE(LIBSNDFILE, 1, set to 1 if you have libsndfile) else # default CONFIG_FILEIO="lame" WARNING="${WARNING} Could not find any sndfile lib on system." fi else CONFIG_FILEIO="lame" fi AC_MSG_RESULT(${CONFIG_FILEIO}) if test "x${WARNING}" != "x" ; then AC_MSG_WARN($WARNING) fi dnl check if we should remove hooks for analyzer code in library dnl default library must include these hooks AC_MSG_CHECKING(use of analyzer hooks) AC_ARG_ENABLE(analyzer-hooks, [ --disable-analyzer-hooks Exclude analyzer hooks], CONFIG_ANALYZER="${enableval}", CONFIG_ANALYZER="yes") case "${CONFIG_ANALYZER}" in yes) ;; no) AC_DEFINE(NOANALYSIS, 1, build without hooks for analyzer) ;; *) AC_MSG_ERROR(bad value �${CONFIG_ANALYZER}� for analyzer-hooks option) ;; esac AC_MSG_RESULT($CONFIG_ANALYZER) dnl mpg123 decoder AC_MSG_CHECKING(use of mpg123 decoder) AC_ARG_ENABLE(decoder, [ --disable-decoder Exclude mpg123 decoder], CONFIG_DECODER="${enableval}", CONFIG_DECODER="yes") AM_CONDITIONAL(LIB_WITH_DECODER, test "x${CONFIG_DECODER}" = "xyes") if test "${CONFIG_DECODER}" != "no" ; then CONFIG_DECODER="yes (Layer 1, 2, 3)" AC_DEFINE(HAVE_MPGLIB, 1, build with mpglib support) AC_DEFINE(DECODE_ON_THE_FLY, 1, allow to compute a more accurate replaygain value) fi AC_MSG_RESULT($CONFIG_DECODER) AC_MSG_CHECKING(if the lame frontend should be build) AC_ARG_ENABLE(frontend, [ --disable-frontend Do not build the lame executable [default=build]], WITH_FRONTEND="${enableval}", WITH_FRONTEND=yes) if test "x${WITH_FRONTEND}" = "xyes"; then WITH_FRONTEND=lame${ac_exeext} AC_MSG_RESULT(yes) else WITH_FRONTEND= AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if mp3x is requested) AC_ARG_ENABLE(mp3x, [ --enable-mp3x Build GTK frame analyzer [default=no]], WITH_MP3X="${enableval}", WITH_MP3X=no) if test "x${WITH_MP3X}" = "xyes"; then WITH_MP3X=mp3x${ac_exeext} AC_MSG_RESULT(yes) else WITH_MP3X= AC_MSG_RESULT(no) fi if test "${HAVE_GTK}" = "no"; then if test "x${WITH_MP3X}" = "xmp3x"; then AC_MSG_WARN(can't build mp3x, no GTK installed) WITH_MP3X= fi if test "x${CONFIG_ANALYZER}" != "xyes"; then AC_MSG_WARN(can't build mp3x because of disabled analyzer hooks) WITH_MP3X= fi fi AC_MSG_CHECKING(if mp3rtp is requested) AC_ARG_ENABLE(mp3rtp, [ --enable-mp3rtp Build mp3rtp [default=no]], WITH_MP3RTP="${enableval}", WITH_MP3RTP=no) if test "x${WITH_MP3RTP}" = "xyes"; then if test ${SOCKETFUNCTION} = NO; then AC_MSG_ERROR([function socket is mandatory for mp3rtp]) fi WITH_MP3RTP=mp3rtp${ac_exeext} AC_MSG_RESULT(yes) else WITH_MP3RTP= AC_MSG_RESULT(no) fi AC_MSG_CHECKING(if dynamic linking of the frontends is requested) AC_ARG_ENABLE(dynamic-frontends, [ --enable-dynamic-frontends Link frontends against shared libraries [default=no]], FRONTEND_LDFLAGS="${FRONTEND_LDFLAGS}", FRONTEND_LDFLAGS="${FRONTEND_LDFLAGS} -static") case "x${FRONTEND_LDFLAGS}" in *-static*) AC_MSG_RESULT(no) ;; *) AC_MSG_RESULT(yes) ;; esac # # this is from vorbis # dnl check GLIBC case $host in *86-*-linux*) # glibc < 2.1.3 has a serious FP bug in the math inline header # that will cripple Vorbis. Look to see if the magic FP stack # clobber is missing in the mathinline header, thus indicating # the buggy version AC_EGREP_CPP(log10.*fldlg2.*fxch,[ #define __LIBC_INTERNAL_MATH_INLINES 1 #define __OPTIMIZE__ #include ],bad=maybe,bad=no) AC_MSG_CHECKING(glibc mathinline bug) if test ${bad} = "maybe" ;then AC_EGREP_CPP(log10.*fldlg2.*fxch.*st\([[0123456789]]*\), [ #define __LIBC_INTERNAL_MATH_INLINES 1 #define __OPTIMIZE__ #include ],bad=no,bad=yes) fi AC_MSG_RESULT(${bad}) if test ${bad} = "yes" ;then AC_MSG_WARN([ ]) AC_MSG_WARN([********************************************************]) AC_MSG_WARN([* The glibc headers on this machine have a serious bug *]) AC_MSG_WARN([* in /usr/include/bits/mathinline.h This bug affects *]) AC_MSG_WARN([* all floating point code, not only LAME, but all code *]) AC_MSG_WARN([* built on this machine. Upgrading to glibc 2.1.3 is *]) AC_MSG_WARN([* strongly urged to correct the problem. *]) AC_MSG_WARN([*Note: that upgrading glibc will not fix any previously*]) AC_MSG_WARN([* built programs; this is a compile-time bug. *]) AC_MSG_WARN([* To work around the problem for this build of LAME, *]) AC_MSG_WARN([* autoconf is disabling all math inlining. This will *]) AC_MSG_WARN([* hurt LAME performace but is necessary for LAME to *]) AC_MSG_WARN([* work correctly. Once glibc is upgraded, rerun *]) AC_MSG_WARN([* configure and make to build with inlining. *]) AC_MSG_WARN([********************************************************]) AC_MSG_WARN([ ]) AC_DEFINE(__NO_MATH_INLINES, 1, work around a glibc bug) fi;; esac dnl configure use of VBR bitrate histogram dnl todo: always use yes as default, use simulation instead ? AC_MSG_CHECKING(for termcap) if test "x${HAVE_TERMCAP}" != "x"; then FRONTEND_LDADD="-l${HAVE_TERMCAP} ${FRONTEND_LDADD}" AC_DEFINE(HAVE_TERMCAP, 1, have termcap) TERMCAP_DEFAULT="yes" else TERMCAP_DEFAULT="no" fi AC_MSG_RESULT(${TERMCAP_DEFAULT}) dnl ### processor specific options ### WITH_VECTOR=no case $host_cpu in x86_64|amd64) CPUTYPE="no" if test $ac_cv_header_xmmintrin_h = yes ; then WITH_XMM=yes WITH_VECTOR=yes fi AC_DEFINE(TAKEHIRO_IEEE754_HACK, 1, IEEE754 compatible machine) AC_DEFINE(USE_FAST_LOG, 1, faster log implementation with less but enoug h precission) ;; *86) CPUTYPE="i386" if test $ac_cv_header_xmmintrin_h = yes ; then WITH_XMM=yes WITH_VECTOR=yes fi # use internal knowledge of the IEEE 754 layout AC_DEFINE(TAKEHIRO_IEEE754_HACK, 1, IEEE754 compatible machine) AC_DEFINE(USE_FAST_LOG, 1, faster log implementation with less but enough precission) ;; powerpc) CPUTYPE="no" # use internal knowledge of the IEEE 754 layout AC_DEFINE(TAKEHIRO_IEEE754_HACK, 1, IEEE754 compatible machine) # The following should not get enabled on a G5. HOWTO check for a G5? AC_DEFINE(USE_FAST_LOG, 1, faster log implementation with less but enough precission) ;; *) CPUTYPE="no" ;; esac # which vector code do we support to build on this machine? AM_CONDITIONAL(WITH_XMM, test "x${WITH_XMM}" = "xyes") # needs to be defined to link in the internal vector lib AM_CONDITIONAL(WITH_VECTOR, test "x${WITH_VECTOR}" = "xyes") AC_MSG_CHECKING(if I have to build the internal vector lib) AC_MSG_RESULT(${WITH_VECTOR}) AC_PATH_PROG(NASM, nasm, no) case "${NASM}" in no) ;; *) AC_MSG_CHECKING(for assembler routines for this processor type) for recurse_over in ${ASM_FOR_ARCH} do if test "${CPUTYPE}" = "${recurse_over}"; then include_asm_routines="yes" fi case $host_os in *darwin*) # currently we have problems because of a wrong # libtool hack in the darwin case (for nasm code) include_asm_routines="no" ;; esac done if test "x${include_asm_routines}" = "xyes"; then AC_DEFINE(HAVE_NASM, 1, have nasm) AC_DEFINE(MMX_choose_table, 1, use MMX version of choose_table) else include_asm_routines="no" NASM="no" fi AC_MSG_RESULT(${include_asm_routines}) ;; esac AM_CONDITIONAL(HAVE_NASM, test "${NASM}" != "no") case $host_os in *cygwin*|*mingw32*) CYGWIN=yes NASM_FORMAT="-f win32 -DWIN32" ;; *darwin*) NASM_FORMAT="-f macho" ;; *) CYGWIN=no NASM_FORMAT="-f elf" ;; esac # # 'expopt' is used for "additional optimizations", not for optimizations which # are marked as "experimental" in the guide for the compiler. # They are "experimental" here in the LAME project (at least # "--enable-expopt=full"). # AC_MSG_CHECKING(for additional optimizations) AC_ARG_ENABLE(expopt, [ --enable-expopt=full,norm Whether to enable experimental optimizations] [ [default=no]], CONFIG_EXPOPT="${enableval}", CONFIG_EXPOPT="no") if test "x$HAVE_GCC" = "xyes" -o "x$HAVE_CLANG" = "xyes"; then # gcc defaults. OS specific options go in versious sections below # from the gcc man pages: "there is no reason to use -pedantic" if test "x${with_gnu_ld}" = "xyes"; then CFLAGS="-Wall -pipe ${CFLAGS}" else # some vendor ld's don't like '-pipe' CFLAGS="-Wall ${CFLAGS}" fi # GCC version specific generic options if test "x${HAVE_GCC}" = "xyes"; then case "${GCC_version}" in 2.96*) # for buggy version of gcc shipped with RH7.1, back of on some # optimizations OPTIMIZATION="-O -fomit-frame-pointer -ffast-math \ -funroll-loops" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fsched-interblock -fbranch-count-reg -fforce-addr \ -fforce-mem" ;; 3.0*) # -funroll-loops seems to produce buggy code with gcc 3.0.3 OPTIMIZATION="-O -fomit-frame-pointer -ffast-math" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fbranch-count-reg -fforce-addr -fforce-mem" ;; 3.*|4.0.*|4.1.*) # -fomit-frame-pointer seems to be buggy on cygwin case ${host_os} in *cygwin*) OMIT_FRAME_POINTER= ;; *) OMIT_FRAME_POINTER=-fomit-frame-pointer ;; esac OPTIMIZATION="-O3 ${OMIT_FRAME_POINTER} -ffast-math" OPTIMIZATION_FULL="-fmove-all-movables -freduce-all-givs \ -fbranch-count-reg -fforce-addr -fforce-mem" ;; [456789].*) OPTIMIZATION="-O3 -fomit-frame-pointer -ffast-math" OPTIMIZATION_FULL="-fbranch-count-reg -fforce-addr" ;; *) # default OPTIMIZATION="-O3 ${OMIT_FRAME_POINTER} -ffast-math \ -funroll-loops" OPTIMIZATION_FULL="-fbranch-count-reg -fforce-addr" ;; esac # GCC version independend generic options OPTIMIZATION_NORM="-fschedule-insns2" fi # generic CPU specific options case ${host_cpu} in sparc) case "${GCC_version}" in 3.0*) ;; [3456789].*) # doesn't work on 3.0.x, but on 3.[12] and # hopefully on every other release after that too if test -x /usr/bin/isalist; then /usr/bin/isalist | grep sparcv8plus \ >/dev/null 2>&1 && \ OPTIMIZATION="${OPTIMIZATION} \ -mcpu=ultrasparc \ -mtune=ultrasparc" fi ;; esac ;; *86) case "${GCC_version}" in [3456789].*) OPTIMIZATION="${OPTIMIZATION} \ -maccumulate-outgoing-args" ;; esac ;; esac expopt_msg_result_printed=no case "${CONFIG_EXPOPT}" in no) # if someone supplies own CFLAGS, we don't add our own if test "x${ac_save_CFLAGS}" != "x"; then OPTIMIZATION="" fi ;; norm|yes) OPTIMIZATION="${OPTIMIZATION} ${OPTIMIZATION_NORM}" ;; full) OPTIMIZATION="${OPTIMIZATION} ${OPTIMIZATION_NORM} \ ${OPTIMIZATION_FULL}" if test "${HAVE_GCC}" = "yes"; then # some hardware dependend options case "${GCC_version}" in 2.9*|3.*|4.0.*|4.1.*) # "new" GCC, use some "new" CPU specific optimizations # use -mtune instead of -m486 or -mcpu= etc, since they are # deprecated by GCC case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -mcpu=i486 \ -mfancy-math-387" ;; *586) OPTIMIZATION="${OPTIMIZATION} -mcpu=pentium \ -march=pentium -mfancy-math-387" ;; *686) OPTIMIZATION="${OPTIMIZATION} -mcpu=pentiumpro \ -march=pentiumpro -mfancy-math-387 \ -malign-double" ;; *86) OPTIMIZATION="${OPTIMIZATION} -mfancy-math-387" ;; alpha*) OPTIMIZATION="${OPTIMIZATION} -mfp-regs" AC_DEFINE(FLOAT, double, double is faster than float on Alpha) # add "-mcpu=21164a -Wa,-m21164a" to optimize # for 21164a (ev56) CPU ;; *) OPTIMIZATION="${OPTIMIZATION} -fdelayed-branch" ;; esac ;; [456789].*) case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -march=i486" ;; *586) OPTIMIZATION="${OPTIMIZATION} -march=i586 \ -mtune=native" ;; *686) OPTIMIZATION="${OPTIMIZATION} -march=i686 \ -mtune=native" ;; *86) OPTIMIZATION="${OPTIMIZATION} -march=native \ -mtune=native" ;; arm*-gnueabi) if [ -z "$(echo ${GCC_version} | awk '/4\.0/')" ]; then # Work round buggy softfloat optimization in ARM EABI compilers # -gnueabi in only gcc-4.1 onwards OPTIMIZATION="${OPTIMIZATION} -fno-finite-math-only" fi ;; esac ;; *) # no special optimization for other versions AC_MSG_RESULT(no) expopt_msg_result_printed=yes AC_MSG_WARN(LAME doesn't know about your version (${GCC_version}) of gcc, please report it to lame-dev@lists.sourceforge.net. Please make sure you try the latest LAME version first!) ;; esac fi ;; *) AC_MSG_ERROR(bad value �${CONFIG_EXPOPT}� for expopt option) ;; esac if test "x${HAVE_CLANG}" = "xyes"; then case "${CLANG_VERSION}" in 3.[89]*|[45].*) OPTIMIZATION="-Ofast" ;; *) OPTIMIZATION="-O3" ;; esac # generic CPU specific options case ${host_cpu} in *486) OPTIMIZATION="${OPTIMIZATION} -march=i486" ;; *586) OPTIMIZATION="${OPTIMIZATION} -march=i586 \ -mtune=native" ;; *686) OPTIMIZATION="${OPTIMIZATION} -march=i686 \ -mtune=native" ;; *86) OPTIMIZATION="${OPTIMIZATION} -march=native \ -mtune=native" ;; esac fi if test "${expopt_msg_result_printed}" = "no" ; then AC_MSG_RESULT(${CONFIG_EXPOPT}) fi else AC_MSG_RESULT(no) fi AC_MSG_CHECKING(for debug options) AC_ARG_ENABLE(debug, [ --enable-debug=alot,norm Enable debugging (disables optimizations)] [ [default=no]], CONFIG_DEBUG="${enableval}", CONFIG_DEBUG="no") if test "x$GCC" = "xyes"; then DEBUG_NORM_OPT="-O -g -Wall" DEBUG_ANOYING="-Wbad-function-cast -Wcast-align \ -Wcast-qual -Wchar-subscripts -Wconversion \ -Wmissing-prototypes -Wnested-externs -Wpointer-arith \ -Wredundant-decls -Wshadow -Wstrict-prototypes \ -Wwrite-strings -Winline \ -Wformat -Wswitch -Waggregate-return -Wmissing-noreturn \ -Wimplicit-int -fno-builtin" case "${CONFIG_DEBUG}" in no) dnl Comment out the NDEBUG on release build, they check for issues dnl which should also be rejected in a release build. dnl The real solution would be to do user friendly error messages dnl instead of a core dump. This is a quick and user-unfriendly fix. dnl AC_DEFINE(NDEBUG, 1, no debug build) ;; norm|yes) AC_DEFINE(ABORTFP, 1, debug define) OPTIMIZATION="${DEBUG_NORM_OPT}" ;; anoying) AC_DEFINE(ABORTFP, 1, debug define) OPTIMIZATION="${DEBUG_NORM_OPT} ${DEBUG_ANOYING}" ;; alot) AC_DEFINE(ABORTFP, 1, debug define) AC_DEFINE(DEBUG, 1, alot of debug output) OPTIMIZATION="${DEBUG_NORM_OPT}" ;; *) AC_MSG_ERROR(bad value �${CONFIG_DEBUG}� for debug option) esac AC_MSG_RESULT(${CONFIG_DEBUG}) else AC_MSG_RESULT(no) fi dnl ### system specific options ### ########################################################################## # LINUX on Digital/Compaq Alpha CPUs ########################################################################## case $host in alpha*-*-linux*) ################################################################ #### Check if 'ccc' is in our path ################################################################ if test "`which ccc 2>/dev/null | grep -c ccc`" != "0" ; then # Compaq's C Compiler CC=ccc ################################################################ #### set 'OPTIMIZATION = -arch host -tune host' #### to generate/tune instructions for this machine #### 'OPTIMIZATION += -migrate -fast -inline speed -unroll 0' #### tweak to run as fast as possible :) #### 'OPTIMIZATION += -w0' #### set warning and linking flags ################################################################ OPTIMIZATION="-arch host -tune host" OPTIMIZATION="-migrate -fast -inline speed -unroll 0 $OPTIMIZATION" OPTIMIZATION="-w0 $OPTIMIZATION" ################################################################ #### to debug, uncomment ################################################################ # For Debugging #OPTIMIZATION="-g3 $OPTIMIZATION" ################################################################ #### define __DECALPHA__ (i was getting re-declaration warnings #### in machine.h ################################################################ # Define DEC Alpha AC_DEFINE(__DECALPHA__, 1, we're on DEC Alpha) fi # gcc or ccc? ;; # alpha ########################################################################## # SunOS ########################################################################## sparc-*-sunos4*) if test CC = "cc"; then OPTIMIZATION="-O -xCC" MAKEDEP="-xM" # for gcc, use instead: # CC="gcc" # OPTIMIZATION="-O" # MAKEDEP="-M" AC_MSG_WARN([Please contact lame@lists.sourceforge.net with the output of the configure run and the file config.cache. Thank you for your cooperation.]) fi ;; #SunOS ########################################################################## # SGI ########################################################################## *-sgi-irix*) if test CC = "cc"; then OPTIMIZATION="-O3 -woff all" fi ;; # SGI ########################################################################## # Compaq Alpha running Dec Unix (OSF) ########################################################################## alpha*-dec-osf*) if test CC = "cc"; then OPTIMIZATION="-fast -O3 -std -g3 -non_shared" fi ;; #OSF esac # todo: include the following tests in the case-list UNAME=`uname` ARCH=`uname -m` ########################################################################### # MOSXS (Rhapsody PPC) ########################################################################### if test "$UNAME" = "Rhapsody"; then # CC="cc" # should be handled already by autoconf MAKEDEP="-make" fi ########################################################################### # MAC OSX Darwin PPC ########################################################################### if test "$UNAME" = "Darwin"; then MAKEDEP="-make" CFLAGS="$CFLAGS -fno-common" fi ########################################################################## # OS/2 ########################################################################## # Properly installed EMX runtime & development package is a prerequisite. # tools I used: make 3.76.1, uname 1.12, sed 2.05, PD-ksh 5.2.13 # ########################################################################## if test "$UNAME" = "OS/2"; then SHELL=sh #CC=gcc # should already be handled by configure # file extension should already be handled by automake (I don't know, # please give feedback! #FILE_EXTENSION=".exe" # Uncomment & inspect the GTK lines to use MP3x GTK frame analyzer. # Properly installed XFree86/devlibs & GTK+ is a prerequisite. # The following works for me using Xfree86/OS2 3.3.5 and GTK+ 1.2.3: # AC_DEFINE(HAVE_GTK, 1, have GTK) # AC_DEFINE(__ST_MT_ERRNO__, 1) # INCLUDES="-IC:/XFree86/include/gtk12 -IC:/XFree86/include/glib12 \ # -IC:/XFree86/include $INCLUDES" # FRONTEND_LDFLAGS="-LC:/XFree86/lib -lgtk12 -lgdk12 -lgmodule -lglib12 \ # -lXext -lX11 -lshm -lbsd -lsocket -lm $FRONTEND_LDFLAGS" # FRONTEND_CFLAGS="-Zmtd -Zsysv-signals -Zbin-files $FRONTEND_CFLAGS" fi ########################################################################### # AmigaOS ########################################################################### # Type 'Make ARCH=PPC' for PowerUP and 'Make ARCH=WOS' for WarpOS # ########################################################################### if test "$UNAME" = "AmigaOS" ; then CC="gcc -noixemul" OPTIMIZATION="$OPTIMIZATION -m68020-60 -m68881" MAKEDEP="-MM" if test "$ARCH" = "WOS"; then CC="ppc-amigaos-gcc -warpup" OPTIMIZATION="$OPTIMIZATION -mmultiple -mcpu=603e" AR="ppc-amigaos-ar" RANLIB="ppc-amigaos-ranlib" fi if test "$ARCH",PPC; then CC="ppc-amigaos-gcc" OPTIMIZATION="$OPTIMIZATION -mmultiple -mcpu=603e" AR="ppc-amigaos-ar" RANLIB="ppc-amigaos-ranlib" fi fi CFLAGS="${OPTIMIZATION} ${CFLAGS}" LDADD="${LDADD}" FRONTEND_CFLAGS="${INCICONV} ${FRONTEND_CFLAGS}" FRONTEND_LDADD="${FRONTEND_LDADD} ${LTLIBICONV} ${CONFIG_MATH_LIB}" AC_SUBST(INCLUDES) AC_SUBST(FRONTEND_LDFLAGS) AC_SUBST(FRONTEND_CFLAGS) AC_SUBST(FRONTEND_LDADD) AC_SUBST(CONFIG_MATH_LIB) AC_SUBST(LDADD) AC_SUBST(LIB_MAJOR_VERSION) AC_SUBST(LIB_MINOR_VERSION) AC_SUBST(NASM) AC_SUBST(NASM_FORMAT) AC_SUBST(MAKEDEP) AC_SUBST(RM_F) AC_SUBST(LIBTOOL_DEPS) AC_SUBST(WITH_FRONTEND) AC_SUBST(WITH_MP3X) AC_SUBST(WITH_MP3RTP) AC_SUBST(CPUTYPE) AC_SUBST(CPUCCODE) AC_SUBST(CONFIG_DEFS) AC_CONFIG_FILES([Makefile \ libmp3lame/Makefile \ libmp3lame/i386/Makefile \ libmp3lame/vector/Makefile \ frontend/Makefile \ mpglib/Makefile \ doc/Makefile \ doc/html/Makefile \ doc/man/Makefile \ include/Makefile \ Dll/Makefile \ misc/Makefile \ dshow/Makefile \ ACM/Makefile \ ACM/ADbg/Makefile \ ACM/ddk/Makefile \ ACM/tinyxml/Makefile \ lame.spec \ mac/Makefile \ macosx/Makefile \ macosx/English.lproj/Makefile \ macosx/LAME.xcodeproj/Makefile \ vc_solution/Makefile]) AC_OUTPUT lame-3.100/macosx/000755 001751 001751 00000000000 13170221265 015354 5ustar00netchildnetchild000000 000000 lame-3.100/depcomp000755 001751 001751 00000056017 13126231407 015450 0ustar00netchildnetchild000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/misc/000755 001751 001751 00000000000 13170221265 015015 5ustar00netchildnetchild000000 000000 lame-3.100/missing000755 001751 001751 00000015331 13126231407 015464 0ustar00netchildnetchild000000 000000 #! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2016-01-11.22; # UTC # Copyright (C) 1996-2017 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/INSTALL.configure000644 001751 001751 00000017230 07161460041 017076 0ustar00netchildnetchild000000 000000 Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. lame-3.100/USAGE000644 001751 001751 00000112343 13144574734 014672 0ustar00netchildnetchild000000 000000 % lame [options] inputfile [outputfile] inputfile and/or outputfile can be "-", which means stdin/stdout. For more options, just type: % lame --help or lame --longhelp Note: The HTML documentation is more complete than this text file. ======================================================================= Constant Bitrate Examples: ======================================================================= fixed bit rate jstereo 128 kbps encoding: % lame -b128 sample.wav sample.mp3 Use highest quality mode, slowest: % lame -q0 -b128 sample.wav sample.mp3 Use fast encode, low quality (no noise shaping) % lame -f -b128 sample.wav sample.mp3 ======================================================================= Variable Bitrate Examples: ======================================================================= LAME has two types of variable bitrate: ABR and VBR. ABR is the type of variable bitrate encoding usually found in other MP3 encoders, Vorbis and AAC. The number of bits is determined by some metric (like perceptual entropy, or just the number of bits needed for a certain set of encoding tables), and it is not based on computing the actual encoding/quantization error. ABR should always give results equal or better than CBR: ABR: (--abr means encode with an average bitrate of around x kbps) % lame --abr 128 sample.wav sample.mp3 Another way to enable abr is: % lame --preset 128 sample.wav sample.mp3 VBR is a true variable bitrate mode which bases the number of bits for each frame on the measured quantization error relative to the estimated allowed masking. The value 0 is the highest quality, which creates bigger files, and the lowest is 9.999, which creates the smallest files. Decimal values can be specified, like: 4.51. The resulting filesizes depend on the input material. On typical music you can expect -V5 resulting in files averaging 132 kbps, -V2 averaging 200 kbps. Variable Bitrate (VBR): (use -V n to adjust quality/filesize) % lame -V2 sample.wav sample.mp3 ======================================================================= Low Bitrates ======================================================================= At lower bitrates, (like 24 kbps per channel), it is recommended that you use a 16 kHz sampling rate combined with lowpass filtering. LAME, as well as commercial encoders (FhG, Xing) will do this automatically. However, if you feel there is too much (or not enough) lowpass filtering, you may need to try different values of the lowpass cutoff and passband width (--resample, --lowpass and --lowpass-width options). ======================================================================= Streaming Example ======================================================================= % cat inputfile | lame [options] - - > output ======================================================================= Scripts are included (in the 'misc' subdirectory) to run lame on multiple files: bash script: mlame Run "mlame -?" for instructions. sh script: auenc Run auenc for instructions sh script: mugeco.sh Perl script which will re-encode mp3 files and preserve id3 tags: lameid3.pl Windows scripts: lame4dos.bat Lame.vbs (and an HTML frontend: LameGUI.html) ======================================================================= options guide: ======================================================================= These options are explained in detail below. By default, LAME accepts a PCM audio sample inside a .WAV container as the input file, in 8, 16, 24 and 32 bits integer and in IEEE FLOAT. If it is compiled with libsndfile, then it also supports the extra formats that the library supports. There is also support for raw PCM data and piped input Input options: --scale multiply PCM input by --scale-l scale channel 0 (left) input (multiply PCM data) by --scale-r scale channel 1 (right) input (multiply PCM data) by --gain number apply Gain adjustment in decibels, range -20.0 to +12.0. --swap-channel Swap Left and Right input channels --mp1input input file is an MPEG 1 Layer I file. decode on the fly --mp2input input file is an MPEG 1 Layer II file. decode on the fly --mp3input input file is an MPEG 1 Layer III file. decode on the fly --nogap <...> gapless encoding for a set of contiguous files --nogapout output dir for gapless encoding (must precede --nogap) --nogaptags allow the use of VBR tags in gapless encoding --out-dir path If no explicit output file is specified, a file will be written at given path. Ignored when using piped/streamed input Input options for raw PCM: -r read the input file as a raw (headerless) PCM stream -s n input sampling frequency in kHz (Default 44.1Khz) --signed input is signed (default) --unsigned input is unsigned --bitwidth w input bit width is w (default 16) -x swap bytes of input file --little-endian input is little-endian (default) --big-endian input is big-endian -a downmix stereo file to mono file for mono encoding. Needed with raw input for the -mm mode to do the downmix. Resampling and filtering: --lowpass Frequency(kHz), lowpass filter cutoff above freq. Range [0.001..50]kHz or [50..50000]Hz --lowpass-width Frequency(kHz), lowpass window width. Range [0.001..16]kHz or [16..50000]Hz (See further restriction in the detailed explanation) --highpass Frequency(kHz), highpass filter cutoff below freq. Range [0.001..16]kHz or [16..50000]Hz (See further restriction in the detailed explanation) --highpass-width Frequency(kHz), highpass window width (See further restriction in the detailed explanation) --resample n Sampling frequency of output file(kHz) Default=automatic depending on settings like bitrate. Operational: --preset type Enables some preconfigured settings. Check below for each of the valid values --decode assume input file is an mp3 file, and decode to wav. --decode-mp3delay samples Set the encoder delay to use to decode the input .mp3 file -t disable writing of WAV header when using --decode (decode to raw pcm, native endian format (use -x to swap)) -m m/s/j/f/a mode selection -q n Internal algorithm quality setting 0..9. 0 = slowest algorithms, but potentially highest quality 9 = faster algorithms, very poor quality Default is 3. Read the differences between VBR and CBR below. -h same as -q2 -f same as -q7 --priority sets the process priority (Windows and OS/2-specific): 0,1 = Low priority (IDLE_PRIORITY_CLASS) 2 = normal priority (NORMAL_PRIORITY_CLASS, defaul 3,4 = High priority (HIGH_PRIORITY_CLASS)) Note: Calling '--priority' without a parameter will set it to 0. Constant Bit Rate (CBR) -b n set bitrate (8, 16, 24, ..., 320) --freeformat produce a free format bitstream. User must also specify a bitrate with -b, between 8 and 640 kbps. Variable Bit Rate (VBR) -v VBR ( alias of -V 4 ) --vbr-old use old variable bitrate (VBR) routine --vbr-new use new variable bitrate (VBR) routine (default) -V n VBR quality setting (0=highest quality, 9.999=lowest) -b n specify a minimum allowed bitrate (8,16,24,...,320) -B n specify a maximum allowed bitrate (8,16,24,...,320) -F strictly enforce minimum bitrate -t disable VBR informational tag --nohist disable display of VBR bitrate histogram --abr n specify average bitrate desired MP3 header/stream options: -e n/5/c de-emphasis -p add CRC error protection -c mark the encoded file as copyrighted -o mark the encoded file as a copy -S don't print progress report, VBR histogram --strictly-enforce-ISO comply as much as possible to ISO MPEG spec --replaygain-fast compute RG fast but slightly inaccurately (default) --replaygain-accurate compute RG more accurately and find the peak sample --noreplaygain disable ReplayGain analysis --clipdetect enable --replaygain-accurate and print a message whether clipping occurs and how far the waveform is from full scale ID3 tagging: --tt audio/song title (max 30 chars for version 1 tag) --ta <artist> audio/song artist (max 30 chars for version 1 tag) --tl <album> audio/song album (max 30 chars for version 1 tag) --ty <year> audio/song year of issue (1 to 9999) --tc <comment> user-defined text (max 30 chars for v1 tag, 28 for v1.1) --tn <track[/total]> audio/song track number (1 to 255, creates v1.1 tag. adding a total force a version 2 tag) --tg <genre> audio/song genre (name or number in list) --ti <file> audio/song albumArt (jpeg/png/gif file, v2.3 tag) --tv <id=value> user-defined frame specified by id and value (v2.3 tag) --add-id3v2 force addition of version 2 tag --id3v1-only add only a version 1 tag --id3v2-only add only a version 2 tag --id3v2-utf16 add following options in unicode text encoding --id3v2-latin1 add following options in latin-1 text encoding --space-id3v1 pad version 1 tag with spaces instead of nulls --pad-id3v2 same as '--pad-id3v2-size 128' --pad-id3v2-size <num> adds version 2 tag, pad with extra <num> bytes --genre-list print alphabetically sorted ID3 genre list and exit --ignore-tag-errors ignore errors in values passed for tags Note: A version 2 tag will NOT be added unless one of the input fields won't fit in a version 1 tag (e.g. the title string is longer than 30 characters), or the '--add-id3v2' or '--id3v2-only' options are used, or output is redirected to stdout. Verbosity: --disptime secs Print progress report every secs seconds --nohist Disable VBR histogram display --silent Don't print anything on screen --quiet Don't print anything on screen --verbose Print a lot of useful information --version Print License information --license Print License information --help Shows the common list of switches. Add id3 or dev to get help for a specified topic --usage Shows the common list of switches. Add id3 or dev to get help for a specified topic --longhelp Shows the complete list of switches ======================================================================= Detailed description of all options in alphabetical order ======================================================================= ======================================================================= Downmix ======================================================================= -a mix the stereo input file to mono and encode as mono. This option is only needed in the case of raw PCM stereo input (because LAME cannot determine the number of channels in the input file). To encode a stereo (RAW) PCM input file as mono, use "lame -m m -a" For WAV and AIFF input files, using "-m m" will always produce a mono .mp3 file from both mono and stereo input. ======================================================================= Average bitrate encoding (aka Safe VBR) ======================================================================= --abr n turns on encoding with a targeted average bitrate of n kbps, allowing to use frames of different sizes. The allowed range of n is 8...320 kbps, you can use any integer value within that range. ======================================================================= Use version 2 of the ID3 tag standard ======================================================================= --add-id3v2 Force addition of version 2 tag Tells LAME to add the tag information as id3v2. This implies adding both, a version 1 and a version 2 tag, if the values fit on a version 1 tag. See --id3v1-only and --id3v2-only if you want a more fine-grained control. ======================================================================= Bitrate ======================================================================= -b n MPEG-1 layer III sample frequencies (kHz): 32 48 44.1 bitrates (kbps): 32 40 48 56 64 80 96 112 128 160 192 224 256 320 MPEG-2 layer III sample frequencies (kHz): 16 24 22.05 bitrates (kbps): 8 16 24 32 40 48 56 64 80 96 112 128 144 160 MPEG-2.5 layer III sample frequencies (kHz): 8 12 11.025 bitrates (kbps): 8 16 24 32 40 48 56 64 The bitrate to be used. Default is 128kbps in MPEG1 (64 for mono), 64kbps in MPEG2 (32 for mono) and 32kbps in MPEG2.5 (16 for mono). When used with variable bitrate encodings (VBR), -b specifies the minimum bitrate to use. This is useful only if you need to circumvent a buggy hardware device with strange bitrate constrains. ======================================================================= Max bitrate ======================================================================= -B n see also option "-b" for allowed bitrates. Maximum allowed bitrate when using VBR/ABR. Using -B is NOT RECOMMENDED. A 128 kbps CBR bitstream, because of the bit reservoir, can actually have frames which use as many bits as a 320 kbps frame. ABR/VBR modes minimize the use of the bit reservoir, and thus need to allow 320 kbps frames to get the same flexability as CBR streams. This is useful only if you need to circumvent a buggy hardware device with strange bitrate constrains. ======================================================================= Endianess, big. ======================================================================= --big-endian Set the byte order to big-endian. This switch tells LAME that the RAW pcm input is encoded in big-endian instead of little-endian. ======================================================================= Sample bit with ======================================================================= --bitwidth Sets the bitwidth value With RAW pcm input, this switch lets you specify the bitwidth of the same (8 bits, 16 bits...) ======================================================================= Copyright ======================================================================= -c flag the encoded file as copyrighted ======================================================================= Clipping detection ======================================================================= --clipdetect Enable --replaygain-accurate and print a message whether clipping occurs and how far in dB the waveform is from full scale. This option is not usable if the MP3 decoder was _explicitly_ disabled in the build of LAME. See also: --replaygain-accurate ======================================================================= MPEG audio decode capability ======================================================================= --decode This uses LAME's HIP decoder to decode an MP3 file (layers 1, 2 and 3) to a wav file. If -t is used (disable wav header), LAME will output raw pcm in native endian format (use -x to swap bytes). This option is not usable if the MP3 decoder was _explicitly_ disabled in the build of LAME. HIP stands for Hip Isn't a Player and is based off of Michael Hipp's mpglib 0.2a ======================================================================= MPEG audio decode capability ======================================================================= --decode-mp3delay x Indicate a different encoder delay for decoding When decoding an mp3 file, LAME automatically corrects for the start delay that the encoder had to put into it. This setting lets you specify a different delay than LAME's own one, so that it is possible to compensate for the delay of mp3's generated with other encoders. ======================================================================= De-emphasis ======================================================================= -e n/5/c n = (none, default) 5 = 0/15 microseconds c = CCITT j.17 All this does is set a flag in the bitstream. If you have a PCM input file where one of the above types of (obsolete) emphasis has been applied, you can set this flag in LAME. Then the mp3 decoder should de-emphasize the output during playback, although most decoders ignore this flag. A better solution would be to apply the de-emphasis with a standalone utility before encoding, and then encode without -e. ======================================================================= Strictly enforce VBR minimum bitrate ======================================================================= -F strictly enforce VBR minimum bitrate. Without this option, passages of analog silence will be encoded at the minimum bitrate possible (32 or 8, depending on MPEG version). ======================================================================= Free format bitstreams ======================================================================= --freeformat LAME will produce a fixed bitrate, free format bitstream. User must specify the desired bitrate in kbps, which can be any integer between 8 and 640. Not supported by most decoders. Complient decoders (of which there are few) are only required to support up to 320 kbps. Decoders known to handle free format: supports up to mpg123 640 kbps MAD 640 kbps "lame --decode" 640 kbps l3dec 310 kbps ======================================================================= Gain ======================================================================= --gain Apply gain in decibels. Apply Gain adjustment in decibels, range -20.0 to +12.0. 0dBFS means no amplification. ======================================================================= High pass filter ======================================================================= --highpass number Use a highpass filter when encoding Enables a highpass filter of the specified frequency when encoding the source. Range [0.001..50]kHz or [50..50000]Hz. This is usually not required, and the gains are usually minimal. May be useful to remove an interference signal on 50Hz or 60Hz, or a DC offset. (default: disabled) Note: The current implementation has a minimum highpass frequency of (67.5/62)% of the sample rate (I.e. 481Hz at 44Khz). ======================================================================= High pass filter ======================================================================= --highpass-width width Set the width of the decaying curve. Specify the width in Hz of the decaying curve of the highpass. Range [16..50000]Hz The minimum (and default) width is 75% of a band's width (which is 1/64th of the sample rate). Note: See the remark in the --highpass command above. ======================================================================= ID3 tag modes ======================================================================= --id3v1-only Disable the use of id3v2. Put it before any tag setting. This setting tells LAME to use ID3 v1 tag only, and not create an ID3v2 even if it thinks it should. --id3v2-only Disable the user ov id3v1. Put it before any tag setting. This setting tells LAME to use ID3 v2 tag only. An ID3 v1 tag would not be written. --ignore-tag-errors Ignore tag information errors Put it before any tag setting. This tells lame to ignore the tag information it sees as erroneous and continue encoding without those. Without this setting, errors are reported and encoding does not start. ======================================================================= Endianess. little ======================================================================= --little-endian Set the byte order to little-endian. This switch tells LAME that the RAW pcm input is encoded in little-endian. It is the default setting. ======================================================================= Low pass filter ======================================================================= --lowpass number Use a lowpass filter when encoding Enables a lowpass filter of the specified frequency when encoding the source. Range [0.001..50]kHz or [50..50000]Hz Using a lowpass filter helps reducing the amount of data to encode. This is important in MP3 due to a limitation in very high frequencies (>16Khz). The default value depends on the target bitrate/quality. It is not recommended to change it as a general basis. --lowpass-width width Set the width of the decaying curve. Specify the width in Hz of the decaying curve of the lowpass. Range [0.001..16]kHz or [16..50000]Hz The lowpass is in the center of this curve. The minimum (and default) width is 75% of a band's width (which is 1/64th of the sample rate). ======================================================================= Modes: ======================================================================= -m m mono -m l get only the left channel of a stereo signal for a mono output -m r get only the right channel of a stereo signal for a mono output -m s (forced) L/R stereo -m j joint stereo -m f forced mid/side stereo -m d dual (independent) channels. Its purpose was meant for dual language streams where only one of them should be decoded. Most decoders just decode them as a stereo stream. -m a Currently, a synonym of m j. (In older releases it selected different modes depending on the bitrate) MONO is the default mode for mono input files. If "-m m" is specified for a stereo input file, the two channels will be averaged into a mono signal. (Note: See comments about the -a switch for RAW PCM streams) (FORCED) L/R STEREO encodes the left and the right signals independently, and gives more or less bits to each, depending on the currently available. JOINT STEREO is the default mode of encoding. jstereo means the encoder can use (on a frame by frame basis) either L/R stereo or mid/side stereo. In mid/side stereo, the mid(L+R) and side(L-R) channels are encoded, and more bits are allocated to the mid channel than the side channel. When there isn't too much stereo separation, this effectively increases the bandwidth, so having higher quality with the same amount of bits. Using mid/side stereo inappropriately can result in audible compression artifacts. Too much switching between mid/side and L/R stereo can also sound bad. To determine when to switch to mid/side stereo, LAME uses a much more sophisticated algorithm than that described in the ISO documentation. FORCED MID/SIDE STEREO forces all frames to be encoded mid/side stereo. It should only be used if you are sure every frame of the input file has very little stereo seperation. DUAL CHANNEL mode is similar to encode the left and right as two mono signals. Its purpose was meant for Dual language streams where only one of them should be decoded. Most decoders just decode them as a stereo stream INTENSITY STEREO Not supported. ======================================================================= MP3 input file ======================================================================= --mp1input --mp2input --mp3input MPEG layer I, II or III input file Assume the input file is a MP1/2/3 file. LAME will decode the input file before re-encoding it. Since MP3 is a lossy format, this is not recommended in general. But it is useful for creating low bitrate mp3s from high bitrate mp3s. If the filename ends in ".mp3" LAME will assume it is an MP3. For stdin or MP3 files which dont end in .mp3 you need to use this switch. ======================================================================= No Gap (continuous audio) encoding of multiple files ======================================================================= --nogap file1 file2 [...] Encodes multiple continuous files. Encodes multiple files (ordered by position) which are meant to be played gaplessly. By default, LAME will encode the files with accurate length, but the first and last frame may contain a few erroneous samples for signals that don't fade-in/out (as is the case of continuous playback). This setting solves that by using the samples from the next/previous file to compute the encoding. --nogapout dir Specify a directory for the output of the files encoded with --nogap This setting should precede --nogap, and is used to specify the alternate directory where to store the encoded files. The default one is the input file directory. --nogaptags Enables the use of VBR tags with files encoded with --nogap Tells LAME to put VBR tags to encoded files if they are encoded in VBR or ABR modes. Else, using the --nogap option doesn't generate it. ======================================================================= Disable historgram display ======================================================================= --nohist By default, LAME will display a bitrate histogram while producing VBR mp3 files. This will disable that feature. ======================================================================= Disable ReplayGain analysis ======================================================================= --noreplaygain By default ReplayGain analysis is enabled. This switch disables it. See also: --replaygain-accurate, --replaygain-fast ======================================================================= Non-original ======================================================================= -o mark the encoded file as a copy ======================================================================= CRC error protection ======================================================================= -p Turn on CRC error protection. It will add a cyclic redundancy check (CRC) code in each frame, allowing to detect transmission errors that could occur on the MP3 stream. However, it takes 16 bits per frame that would otherwise be used for encoding, and therefore will slightly reduce the sound quality. ======================================================================= ID3 V2 padding ======================================================================= --pad-id3v2 Pad ID3v2 tag. Pads the ID3v2 tag with extra 128bytes to allow it to expand. ======================================================================= Preset system. ======================================================================= --preset x Enable one of the presets Setting Meaning --preset medium -V 5 --preset standard -V 2 --preset extreme -V 0 --preset insane -b 320 --preset fast xxx In versions older than LAME 3.98, "fast" was needed to enable the vbr-new routine. It is no longer needed. --preset number --abr number --preset cbr number -b number Old compatibility settings. Meaningless --preset phone -b 16 -m m --preset phon+ / lw / mw-eu -b 24 -m m --preset mw-us -b 40 -m m --preset voice -b 56 -m m --preset fm / radio -b 112 --preset hifi -b 160 --preset cd -b 192 --preset studio -b 256 ======================================================================= Windows and OS/2 process priority control ======================================================================= --priority <type> (Windows and OS/2 only) Sets the process priority for LAME while running under Windows or IBM OS/2. This can be very useful to avoid the system becoming slow and/or unresponsive. By setting LAME to run in a lower priority, you leave more time for the system to update basic processing (drawing windows, polling keyboard/mouse, etc). The impact in LAME's performance is minimal if you use priority 0 to 2. The valid parameters are: 0 = Low priority (IDLE, delta = 0) 1 = Medium priority (IDLE, delta = +31) 2 = Regular priority (REGULAR, delta = -31) 3 = High priority (REGULAR, delta = 0) 4 = Maximum priority (REGULAR, delta = +31) Note that if you call '--priority' without a parameter, priority 0 will be assumed. ======================================================================= Algorithm quality selection ======================================================================= -q n Bitrate is of course the main influence on quality. The higher the bitrate, the higher the quality. But for a given bitrate, we have a choice of algorithms to determine the best scalefactors and Huffman coding (noise shaping). For CBR, ABR and --vbr-old modes, the following table applies -q 0 Use the best algorithms (Best Huffman coding search, full outer loop, and the highest precision of several parameters). -q 1 to -q 4 Similar to -q 0 without the full outer loop and decreasing precision of parameters the further from q0. -q 3 is the default -q 5 and -q 6 Same as -q 7, but enables noise shaping and increases subblock gain -q 7 to -q 9 Same as -f. Very fast, OK quality. Psychoacoustics are used for pre-echo and mid/side stereo, but no noise-shaping is done. For the default VBR mode since LAME 3.98, the following table applies -q 0 to -q 4 include all features of the other modes and additionally use the best search when applying Huffman coding. -q 5 and -q 6 include all features of -q7, calculate and consider actual quantisation noise, and additionally enable subblock gain. -q 7 to -q 9 This level uses a psymodel but does not calculate quantisation noise when encoding: it takes a quick guess. ======================================================================= Input file is raw pcm ======================================================================= -r Assume the input file is raw pcm. Sampling rate and mono/stereo/jstereo must be specified on the command line. Without -r, LAME will perform several fseek()'s on the input file looking for WAV and AIFF headers. Not supported if LAME is compiled to use LIBSNDFILE. ======================================================================= Slightly more accurate ReplayGain analysis and finding the peak sample ======================================================================= --replaygain-accurate Compute "Radio" ReplayGain on the decoded data stream. Find the peak sample by decoding on the fly the encoded data stream and store it in the file. ReplayGain analysis does _not_ affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from http://www.replaygain.org/ By default, LAME performs ReplayGain analysis on the input data (after the user-specified volume scaling). This behaviour might give slightly inaccurate results because the data on the output of a lossy compression/decompression sequence differs from the initial input data. When --replaygain-accurate is specified the mp3 stream gets decoded on the fly and the analysis is performed on the decoded data stream. Although theoretically this method gives more accurate results, it has several disadvantages: * tests have shown that the difference between the ReplayGain values computed on the input data and decoded data is usually no greater than 0.5dB, although the minimum volume difference the human ear can perceive is about 1.0dB * decoding on the fly significantly slows down the encoding process The apparent advantage is that: * with --replaygain-accurate the peak sample is determined and stored in the file. The knowledge of the peak sample can be useful to decoders (players) to prevent a negative effect called 'clipping' that introduces distortion into sound. Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1. This option is not usable if the MP3 decoder was _explicitly_ disabled in the build of LAME. (Note: if LAME is compiled without the MP3 decoder, ReplayGain analysis is performed on the input data after user-specified volume scaling). See also: --replaygain-fast, --noreplaygain, --clipdetect ======================================================================= Fast ReplayGain analysis ======================================================================= --replaygain-fast Compute "Radio" ReplayGain of the input data stream after user-specified volume scaling and/or resampling. ReplayGain analysis does _not_ affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from http://www.replaygain.org/ Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1. This switch is enabled by default. See also: --replaygain-accurate, --noreplaygain ======================================================================= Output sampling frequency in kHz ======================================================================= --resample n where n = 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48. The values as Hz instead of Khz are also supported. Else, the value will be ignored. Output sampling frequency. Resample the input if necessary. If not specified, LAME may sometimes resample automatically when faced with extreme compression conditions (like encoding a 44.1 kHz input file at 32 kbps). To disable this automatic resampling, you have to use --resamle to set the output samplerate equal to the input samplerate. In that case, LAME will not perform any extra computations. ======================================================================= Sampling frequency in kHz (for input RAW PCM) ======================================================================= -s n where n = sampling rate in kHz. Required for raw PCM input files. Otherwise it will be determined from the header information in the input file. LAME will automatically resample the input file to one of the supported MP3 samplerates if necessary. ======================================================================= Silent operation ======================================================================= -S don't print progress report ======================================================================= Scale ======================================================================= --scale <arg> Scales input by <arg>. This just multiplies the PCM data (after it has been converted to floating point) by <arg>. <arg> > 1: increase volume <arg> = 1: no effect <arg> < 1: reduce volume Use with care, since most MP3 decoders will truncate data which decodes to values greater than 32768. ======================================================================= Strict ISO complience ======================================================================= --strictly-enforce-ISO With this option, LAME will enforce the 7680 bit limitation on total frame size. This results in many wasted bits for high bitrate encodings. ======================================================================= Disable VBR tag/WAV header ======================================================================= -t This setting has two different uses: When encoding to VBR, this setting disables writing the VBR Tag (also known as XING tag). This tag is embedded by default in the frame 0 of MP3 file. It allows VBR aware players to accurately seek and compute playing times in such files. When decoding MP3 to WAV using --decode, this flag will disable writing the WAV header. The output will be raw pcm, native endian format. Use -x to swap bytes. ======================================================================= VBR quality setting ======================================================================= -V n Enable VBR encoding Encodes using the VBR algorithm, at the indicated quality. 0=highest quality, bigger files. 9.999=lowest quality, smaller files. Decimal values can be specified, like: 4.51 On average, the resulting bitrates are as follows: Setting Average bitrate (kbps) 0 245 2 190 3 175 4 165 5 130 Using -V 7 or higher (lower quality) is not recommended. ABR usually produces better results. ======================================================================= Swap bytes ======================================================================= -x swap bytes in the input file (and output file when using --decode). For sorting out little endian/big endian type problems. If your encodings sound like static, try this first. ======================================================================= Ignore scalefactor band 21 ======================================================================= -Y Ignore noise in sbf21, like CBR mode does Allows -V2, -V1 and -V0 to not encode the highest frequencies accurately, if doing so causes disproportional increases in bitrate. This is the same that CBR and ABR modes do. Due to the design of the MP3 format, to keep precision in the last scalefactor band, an encoder needs to increase the precision in all the bands (not only in this one). The consequence is an increase of bitrate (+60kbps in some cases) compared to not keeping that precision. Generally, this band should allow for distortions, so using this switch shouldn't cause harm. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mpglib/����������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221264 015333� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/dshow/�����������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 015206� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/config.guess�����������������������������������������������������������������������������000755 �001751 �001751 �00000124431 13126231407 016407� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-03-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <http://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || \ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/API��������������������������������������������������������������������������������������000644 �001751 �001751 �00000007127 07501711242 014425� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������The LAME API This is the simple interface to the encoding part of libmp3lame.so. The library also contains routines for adding id3 tags and mp3 decoding. These routines are not fully documented, but you can figure them out by looking at "include/lame.h" and the example frontend encoder/decoder source code in frontend/main.c All of these steps should be done for every MP3 to be encoded. ========================================================================= 1. (optional) Get the version number of the encoder, if you are interested. void get_lame_version(char *strbuf, size_t buflen, const char *prefix); 2. Error messages. By default, LAME will write error messages to stderr using vfprintf(). For GUI applications, this is often a problem and you need to set your own error message handlers: lame_set_errorf(gfp,error_handler_function); lame_set_debugf(gfp,error_handler_function); lame_set_msgf(gfp,error_handler_function); See lame.h for details. 3. Initialize the encoder. sets default for all encoder parameters. #include "lame.h" lame_global_flags *gfp; gfp = lame_init(); The default (if you set nothing) is a J-Stereo, 44.1khz 128kbps CBR mp3 file at quality 5. Override various default settings as necessary, for example: lame_set_num_channels(gfp,2); lame_set_in_samplerate(gfp,44100); lame_set_brate(gfp,128); lame_set_mode(gfp,1); lame_set_quality(gfp,2); /* 2=high 5 = medium 7=low */ See lame.h for the complete list of options. Note that there are some lame_set_*() calls not documented in lame.h. These functions are experimental and for testing only. They may be removed in the future. 4. Set more internal configuration based on data provided above, as well as checking for problems. Check that ret_code >= 0. ret_code = lame_init_params(gfp); 5. Encode some data. input pcm data, output (maybe) mp3 frames. This routine handles all buffering, resampling and filtering for you. The required mp3buffer_size can be computed from num_samples, samplerate and encoding rate, but here is a worst case estimate: mp3buffer_size (in bytes) = 1.25*num_samples + 7200. num_samples = the number of PCM samples in each channel. It is not the sum of the number of samples in the L and R channels. The return code = number of bytes output in mp3buffer. This can be 0. If it is <0, an error occured. int lame_encode_buffer(lame_global_flags *gfp, short int leftpcm[], short int rightpcm[], int num_samples,char *mp3buffer,int mp3buffer_size); There are also routines for various types of input (float, long, interleaved, etc). See lame.h for details. 6. lame_encode_flush will flush the buffers and may return a final few mp3 frames. mp3buffer should be at least 7200 bytes. return code = number of bytes output to mp3buffer. This can be 0. int lame_encode_flush(lame_global_flags *,char *mp3buffer, int mp3buffer_size); 7. Write the Xing VBR/INFO tag to mp3 file. void lame_mp3_tags_fid(lame_global_flags *,FILE* fid); This adds a valid mp3 frame which contains information about the bitstream some players may find usefull. It is used for CBR,ABR and VBR. The routine will attempt to rewind the output stream to the beginning. If this is not possible, (for example, you are encoding to stdout) you should specifically disable the tag by calling lame_set_bWriteVbrTag(gfp,0) in step 3 above, and call lame_mp3_tags_fid() with fid=NULL. If the rewind fails and the tag was not disabled, the first mp3 frame in the bitstream will be all 0's. 8. free the internal data structures. void lame_close(lame_global_flags *); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ltmain.sh��������������������������������������������������������������������������������000644 �001751 �001751 �00001170771 13122306670 015721� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. PROGRAM=libtool PACKAGE=libtool VERSION=2.4.6 package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '<hooked_function_name>_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <bug-libtool@gnu.org>. GNU libtool home page: <http://www.gnu.org/software/libtool/>. General help using GNU software: <http://www.gnu.org/gethelp/>." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "$write_libobj" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $debug_cmd func_convert_core_file_wine_to_w32_result=$1 if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 </dev/null >/dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname Generated by $PROGRAM (GNU $PACKAGE) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. This wrapper executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) # define externally_visible volatile #else # define externally_visible __attribute__((externally_visible)) volatile #endif externally_visible const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test yes = "$fast_install"; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; int rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, (size_t) argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (STREQ (argv[i], dumpscript_opt)) { EOF case $host in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (STREQ (argv[i], debug_opt)) { lt_debug = 1; continue; } if (STREQ (argv[i], ltwrapper_option_prefix)) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined HAVE_DOS_BASED_FILE_SYSTEM /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) func_append newdeplibs " $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) func_append newdeplibs " $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: �������lame-3.100/Makefile.in������������������������������������������������������������������������������000644 �001751 �001751 �00000066671 13170220146 016144� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = lame.spec CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/lame.spec.in $(top_srcdir)/Makefile.am.global \ COPYING ChangeLog INSTALL README TODO compile config.guess \ config.rpath config.sub depcomp install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign SUBDIRS = mpglib libmp3lame frontend Dll doc include misc dshow ACM \ mac macosx vc_solution CLEANFILES = testcase.new.mp3 EXTRA_DIST = \ API \ DEFINES \ HACKING \ INSTALL.configure \ LICENSE \ Makefile.MSVC \ Makefile.unix \ Makefile.am.global \ README.WINGTK \ STYLEGUIDE \ USAGE \ configMS.h \ debian \ lame.bat \ lame.spec.in \ lame.spec \ testcase.mp3 \ testcase.wav all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 lame.spec: $(top_builddir)/config.status $(srcdir)/lame.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-hdr distclean-libtool distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile # end global section .PHONY: test # # The differences depend on the used processor architecture, the used # compiler and the used options for the compiler, so make test may # show some differences. You should only be concerned if you are a # LAME developer and the number of differences change after you # modified the source. # testcase.new.mp3: testcase.wav frontend/lame$(EXEEXT) time frontend/lame$(EXEEXT) --nores $(top_srcdir)/testcase.wav testcase.new.mp3 || $(RM_F) testcase.new.mp3 test: testcase.mp3 testcase.new.mp3 @echo @echo "The following output has value only for a LAME-developer, do not make _any_" @echo "assumptions about what this number means. You do not need to care about it." @cmp -l testcase.new.mp3 $(top_srcdir)/testcase.mp3 | wc -l testupdate: testcase.mp3 testcase.new.mp3 cp testcase.new.mp3 $(top_srcdir)/testcase.mp3 testg: frontend/mp3x$(EXEEXT) $(top_srcdir)/../test/castanets.wav frontend/mp3x$(EXEEXT) -h $(top_srcdir)/../test/castanets.wav update: cd $(top_srcdir) && CVS_RSH=ssh cvs -z3 -q update -dAP || true diff: cd $(top_srcdir) && CVS_RSH=ssh cvs -z3 diff -u || true frontend/lame$(EXEEXT): $(MAKE) $(MAKEFLAGS) frontend/mp3x$(EXEEXT): frontend/lame$(EXEEXT) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������lame-3.100/INSTALL����������������������������������������������������������������������������������000644 �001751 �001751 �00000015546 13144574734 015143� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAME 3.xx January 2001 Mark Taylor (http://www.mp3dev.org) ======================================================================= Compile time options ======================================================================= There are serveral targets which can be built from this source code: lame, lame.exe The command line encoder mp3x A GTK based graphical MP3 frame analyzer. For debugging, development, and studing MP3 frames produced by any encoder. lame_enc.dll a Windows DLL used by many GUIs which support lame. (Can only be compiled by MSVC???) lame.acm *** DEPRECATED *** a Windows ACM codec which can be used by many windows programs, and any directshow program. See MSVC project files in ACM directory. Right click on lame.inf to install. lame_enc.dshow a Windows direct show filter for lame. Potentially has more flexability than the ACM codec, but code needs some work. See MSVC project files in dshow directory libmp3lame.a the static encoding library used by all platforms, required by all the above targets. libmp3lame.so shared version of libmp3lame.a for *NIX platforms The following compile time options can be used. For libmp3lame.a and lame_enc.dll, none are required. On non-unix systems, these options must be set in config.h or in the IDE. On unix systems, they are set via ./configure. #define HAVE_MPGLIB compile in mpglib's mp3 *decoding* capibility #define HAVE_VORBIS compile in Vorbis decoding capibility (you need libvorbis already built) #define NOANALYSIS do not compile in hooks used by the MP3 frame analyzer. Options for the command line encoder: #define LIBSNDFILE to use Erik de Castro Lopo's libsndfile for input. ======================================================================= Building the software on *NIX platforms using configure: ======================================================================= Run the following commands: % ./configure % make % make install For a complete list of options, try "./configure --help" Some of the more usefull options: For the encoding library: --enable-mp3x Build the mp3 frame analyzer, 'mp3x' --enable-mp3rtp Build the encode-to-RTP program, 'mp3rtp' (broken as of August 2001) For the LAME front end encoder: --with-fileio=lame Use lame's internal file io routines [default] =sndfile Use Erik de Castro Lopo's libsndfile (Supports many more input formats, but no stdin possible currently) --with-sndfile-prefix=DIR Alternate location for libsndfile (if --with-fileio=sndfile) Other usefull configure options: --enable-debug Build a debug version --enable-expopt Enable some more optimizations flags for the compiler, may or may not produce faster code --prefix = PATH default is /usr/local (LAME currently installs: /usr/local/bin/lame /usr/local/lib/libmp3lame.a /usr/local/lib/libmp3lame.so /usr/local/include/lame.h --with-vorbis Enable Ogg Vorbis decoding support --with-vorbis-prefix = PATH specify where to find Vorbis libs Some more advanced ways to influence the build procedure (experienced users only, use it at your own risk): - If you want to use some custom defines for building (e.g. some out of the file "DEFINES") use: * bourne shell or compatible (ash, bash, zsh, ...): CONFIG_DEFS="-Dmy_define" ./configure * C shell or compatible (csh, tcsh, ...): setenv CONFIG_DEFS "-Dmy_define" ./configure - If you want to use some additional options for the compiler: * bourne shell or compatible (ash, bash, zsh, ...): CFLAGS="--my_flag" ./configure * C shell or compatible (csh, tcsh, ...): setenv CFLAGS "--my_flag" ./configure Or some combination of the above. Note: If configure detects the presents of "nasm" some additional speed improvements get compiled in (additional assembler code to detect and use multimedia extensions of the used processor). ======================================================================= Building the software on *NIX platforms without configure: ======================================================================= % make -f Makefile.unix ======================================================================= Building the software on Windows with MSVC: (or MSVC + 3rd party C compiler such as ICL) ======================================================================= There are MSVC project files, and a Makefile.MSVC included with the project. For production use, be sure to compile a "Release" target, with the "maximum speed" compile option, and #define NDEBUG. It is possible to compile the GTK frame analyzer under windows, see README.WINGTK Various build options can be set in configMS.h Note: project files for building lame.exe seem to be broken or not quite compatable with MSVC6. The most reliable way to build lame and lame_enc.dll is to run the .bat script (comes with MSVC6) which sets up your VC environment to work from the command line, and then: copy configMS.h config.h nmake -f Makefile.MSVC comp=msvc asm=no Project files for the dll, ACM codec and directshow filter seem to be in better sahpe. ======================================================================= Building the software on Windows with free compilers: ======================================================================= LAME can be compiled with various Windows ports (all free) of GCC (DJGPP, Mingw32). See README.DJGPP. For Mingw32, you should now be able to use the Unix Makefile that comes with LAME. Try: "make -f Makefile.unix UNAME=MSDOS" You may need to remove these lines from brhist.c: #ifdef _WIN32 COORD Pos; HANDLE CH; CONSOLE_SCREEN_BUFFER_INFO CSBI; #endif Mingw32 users may also try to use the unix configure script (explained above), it has _untested_ support for Mingw32. Cygwin users should use the unix configure script (explained above). If you have problems with the configure script try: CC=gcc ./configure Patches to enable the build of the lame_enc.dll with Cygwin and autoconf / automake / libtool are welcome! To use the Borland C compiler (now free!) see README.B32 and Makefile.B32. Borland can also compile the lame_enc.dll, but this is untested. Can DJGPP or Mingw32 produce lame_enc.dll? Various build options can be set in configMS.h ����������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/config.sub�������������������������������������������������������������������������������000755 �001751 �001751 �00000106246 13126231407 016056� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-03-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <http://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | amd64-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | powerpcspe-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/README.WINGTK����������������������������������������������������������������������������000644 �001751 �001751 �00000004330 13144574734 015761� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Installation notes on MP3X (the LAME frame analyzer) for WIN32 =========================================================================== Document History: =========================================================================== Initial version by Albert Faber, March 30, 2000 Update by Albert Faber (Sept 07 2000), changed instructions to compile with latest glib/gtk libraries. Update by Albert Faber (Sept 07 2000), changed instructions to compile with latest glib/gtk libraries. Update by Albert Faber (Oct 20 2000), small adaptions to be conform the new lame directory structure. Update by Gabriel Bouvigne (Jan 07 2004), changes to be conform to the VC6 worspace structure. Update by Gabriel Bouvigne (Nov 11 2006), changes to be conform to the VC8 worspace structure. Tested with gtk+-dev-1.3.0-20030115 and glib-dev-2.12.4 =========================================================================== How to compile the MP3 frame analyzer (MP3x): =========================================================================== You first need to get hold of the latest GTK and GLIB include files and lib files. You can download them freely from the WINGTK project WEB site. (see http://www.gtk.org, and click on the WINGTK link.) Download: glib-dev-VERSION.zip, gtk+-dev-VERSION.zip and extralibs-dev-VERSION.zip where VERSION indicates the release data, so it will look something like 20000805 unzip all three zip files in a WinGTK subdirectory, which is created from the lame analyzer directory (for example, D:\CVS\lame\WinGtk) You will end up with the following directory tree D:\CVS\lame\analyzer\WinGtk\src\glib D:\CVS\lame\analyzer\WinGtk\src\gtk+\glib D:\CVS\lame\analyzer\WinGtk\src\gtk+ Set Mp3x as your current active project, recompile everything, and you're done. =========================================================================== How to run and use the MP3 Frame analyzer =========================================================================== To run MP3x.exe, you need the GTK DLL files: Either instal them on your system, or put them in the same directory mp3x.exe resides. Example: mp3x.exe myfile myfile can be a mp3 file, or a wav file. === End of Document === ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/STYLEGUIDE�������������������������������������������������������������������������������000644 �001751 �001751 �00000015535 07200060007 015464� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������* The LAME API is frozen. Poorly designed as it is, don't change it, and add to it sparingly. * Don't take it upon yourself to go through LAME with the sole purpose of updating everything to match this guide. Especially important: don't change the spacing, indentation, curly braces, etc, in routines you did not write. * If you want to make a change which effects many many functions, please check with the maintainer first. * Respect the indentation of the author of the original function. If the indentation is not consistent, use 4. * Don't use tabulators (the character with the value '\t') in source code, especially these with a width of unequal 8. Lame sources are using different sizes for tabulators. * Don't set the macro NDEBUG in alpha versons. NDEBUG should be set for beta versions. * check important assumptions with an assert() * use int for all integer quantities. LAME requires 32 bit ints, so you can assume int is at least 32 bits. Don't use 'long'. Don't use 'unsigned' unless ABSOLUTELY necessary. Don't use 'char' just to save bytes. If 64 bits is required, use int64. Annnotation: ISO C calls the 64 bit int type not int64 but int64_t. * Avoid using float or double, and instead use: (defined in machine.h). FLOAT for variables which require at least 32bits FLOAT8 for variables which require at least 64bits On some machines, 64bit will be faster than 32bit. Also, some math routines require 64bit float, so setting FLOAT=float will result in a lot of conversions. Annotation (pfk): The new ISO C standard passed in autumn 1999 has defined new types for exactly this reason. There are called float_least32_t and float_least64_t and have at least the advantage that you not need to explain their meaning. Annotation (mt): we will adopt this convention in Jan 1, 2003. * The internal representation of PCM samples in type 'sample_t', currently this is a FLOAT. * Use SI base units. Lame mixes Hz, kHz, kbps, bps. This is mess. Example: float wavelength_green = 555.e-9; unsigned data_rate = 128000; float lowpass_freq = 12500.; Converting between user input and internal representation should be done near the user interface, not in the most inner loop of an utility function. ---------------------------------------------------------------------------------- Edited version of the Linux Kernel Style Guide: ---------------------------------------------------------------------------------- Chapter 1: Indentation Respect the indentation of the author of the original function. If the indentation is not consistent, don't change it. If you are so anal-retentive about these things and you can't bare to even look at code with poor indentation, change it to 4. Chapter 2: Placing Braces The other issue that always comes up in C styling is the placement of braces. Unlike the indent size, there are few technical reasons to choose one placement strategy over the other, but the preferred way, as shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first, thusly: if (x is true) { we do y } However, there is one special case, namely functions: they have the opening brace at the beginning of the next line, thus: int function(int x) { body of function } Heretic people all over the world have claimed that this inconsistency is ... well ... inconsistent, but all right-thinking people know that (a) K&R are _right_ and (b) K&R are right. Besides, functions are special anyway (you can't nest them in C). Note that the closing brace is empty on a line of its own, _except_ in the cases where it is followed by a continuation of the same statement, ie a "while" in a do-statement or an "else" in an if-statement, like this: do { body of do-loop } while (condition); and if (x == y) { .. } else if (x > y) { ... } else { .... } Rationale: K&R. Also, note that this brace-placement also minimizes the number of empty (or almost empty) lines, without any loss of readability. Thus, as the supply of new-lines on your screen is not a renewable resource (think 25-line terminal screens here), you have more empty lines to put comments on. Chapter 3: Naming C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable "tmp", which is much easier to write, and not the least more difficult to understand. HOWEVER, while mixed-case names are frowned upon, descriptive names for global variables are a must. To call a global function "foo" is a shooting offense. GLOBAL variables (to be used only if you _really_ need them) need to have descriptive names, as do global functions. If you have a function that counts the number of active users, you should call that "count_active_users()" or similar, you should _not_ call it "cntusr()". Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs. LOCAL variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis-understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value. Chapter 4: Functions Document functions. Keep functions as modular as possible. But don't adhere to artificial line number limitations. For example, lame_encode_frame() encodes a single MP3 frame and is a long sequence of function calls. It makes no sense to break this into two or more routines. Chapter 5: Commenting Comments are good, but there is also a danger of over-commenting. NEVER try to explain HOW your code works in a comment: it's much better to write the code so that the _working_ is obvious, and it's a waste of time to explain badly written code. Generally, you want your comments to tell WHAT your code does, not HOW. Also, try to avoid putting comments inside a function body: if the function is so complex that you need to separately comment parts of it, you should probably go back to chapter 4 for a while. You can make small comments to note or warn about something particularly clever (or ugly), but try to avoid excess. Instead, put the comments at the head of the function, telling people what it does, and possibly WHY it does it. �������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/lame.spec.in�����������������������������������������������������������������������������000644 �001751 �001751 �00000013240 10775731507 016276� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%define name @PACKAGE@ %define ver @VERSION@ %define rel 1 %define prefix %{_usr} %define docdir %{_defaultdocdir} Summary : LAME Ain't an MP3 Encoder... but it's the best. Summary(fr) : LAME n'est pas un encodeur MP3 ;-> Name: %{name} Version: %{ver} Release: %{rel} License: LGPL Vendor: The LAME Project Packager: Yosi Markovich <yosim@bigfoot.com> URL: http://www.mp3dev.org Group: Applications/Multimedia Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-root Requires: ncurses >= 5.0 BuildRequires: gcc => 3.0.1, /usr/bin/find, ncurses-devel %ifarch %{ix86} x86_64 BuildRequires: nasm %endif Provides: mp3encoder %description LAME is an educational tool to be used for learning about MP3 encoding. The goal of the LAME project is to use the open source model to improve the psycho acoustics, noise shaping and speed of MP3. %description -l fr LAME est un outil d'enseignement pour l'apprentissage de l'encodage MP3. Le but du projet LAME est d'utiliser un mod�le "open source" afin d'am�liorer la qualit� et la vitesse du MP3. %package devel Summary: Shared and static libraries for LAME. Group: Development/Libraries Requires: %{name} = %{version} %description devel LAME is an educational tool to be used for learning about MP3 encoding. This package contains both the shared and the static libraries from the LAME project. You will also need to install the main lame package in order to install these libraries. %prep %setup %build # Vorbis makes the build fail for now. . . rm -f config.cache %configure \ %ifarch %{ix86} x86_64 --enable-nasm \ %endif --enable-decoder \ --without-vorbis \ --enable-analyzer=no \ --enable-brhist \ --disable-debug %{__make} %{?_smp_mflags} test CFLAGS="%{optflags}" %install %{__rm} -rf %{buildroot} %makeinstall ### Some apps still expect to find <lame.h> %{__ln_s} -f lame/lame.h %{buildroot}%{_includedir}/lame.h find doc/html -name "Makefile*" | xargs rm -f ### make install really shouldn't install these %{__rm} -rf %{buildroot}%{_docdir}/lame/ %post /sbin/ldconfig 2>/dev/null %postun /sbin/ldconfig 2>/dev/null %clean %{__rm} -rf %{buildroot} %files %defattr (-,root,root) %doc COPYING ChangeLog README TODO USAGE doc/html %doc doc/html %{_bindir}/lame %{_libdir}/libmp3lame.so.* %{_mandir}/man1/lame.1* %files devel %defattr (-, root, root) %doc API HACKING STYLEGUIDE %{_libdir}/libmp3lame.a %{_libdir}/libmp3lame.la %{_libdir}/libmp3lame.so %{_includedir}/* %changelog * Sun May 14 2006 Kyle VanderBeek <kylev@kylev.com> - Remove requirements for specific gcc versions, since modern ones "just work". - Remove out-dated hyper-optimizations (some of which weren't valid compiler flags anymore). - Update to current RPM techniques and macros (inspired by freshrpms.net spec). * Sat May 11 2002 Yosi Markovich <yosim@bigfoot.com> - Fixes to the spec file that include: - Making sure the compiler is gcc version 3.0.1. Lame compiled with a version greater than 3.0.1 is broken. - Optimization flags for i686 will use i686 for march and mcpu, and not athlon. - Fix the dates in this Changelog section. - Various small fixes merged from Matthias Saou. - Thanks Fred Maciel <fred-m@crl.hitachi.co.jp> for his useful comments. - * Tue Jan 22 2002 Mark Taylor <mt@mp3dev.org> - replaced lame.spec.in with Yosi's version. Merged some stuff from the prevous lame.spec.in file, and appended changelog below. * Tue Jan 22 2002 Yosi Markovich <yosim@bigfoot.com> - Rewrote lame.spec.in to create a correct and nice spec file. imho, this spec file is not good for anyone who wants to build daily cvs snapshots. Closes bug #495975 * Tue Dec 11 2001 Yosi Markovich <yosim@bigfoot.com> - Shamelessly stole Matthias Saou's excellent spec file to create daily CVS snapshots of Lame. Other than that, nothing is new. * Tue Oct 23 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Fixed the %pre and %post that should have been %post and %postun, silly me! - Removed -malign-double (it's evil, Yosi told me and I tested, brrr ;-)). - Now build with gcc3, VBR encoding gets a hell of a boost, impressive! I recommend you now use "lame --r3mix", it's the best. - Tried to re-enable vorbis, but it's a no-go. * Thu Jul 26 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Build with kgcc to have VBR working. * Wed Jul 25 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Update to 3.89beta : Must be built with a non-patched version of nasm to work! * Mon May 7 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Rebuilt for Red Hat 7.1. - Disabled the vorbis support since it fails to build with it. - Added a big optimisation section, thanks to Yosi Markovich <senna@camelot.com> for this and other pointers. * Sun Feb 11 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Split the package, there is now a -devel * Thu Nov 26 2000 Matthias Saou <matthias.saou@est.une.marmotte.net> - Initial RPM release for RedHat 7.0 from scratch * Wed Nov 21 2000 Eric Lassauge <lassauge@mail.dotcom.fr> - Updated and corrected RPM to 3.89beta. - Added french translations * Sat Aug 04 2000 Markus Linnala �maage@cs.tut.fi� - Build and include docs and libs correctly - Build extra programs * Tue Aug 01 2000 Stuart Young �cefiar1@optushome.com.au� - Updated RPM to 3.85beta. - Modified spec file (merged George and Keitaro's specs) - Added reasonable info to the specs to reflect the maintainer - Renamed lame.spec (plain spec is bad, mmkay?). * Fri Jun 30 2000 Keitaro Yosimura �ramsy@linux.or.jp� - Updated RPM to 3.84alpha. - Better attempt at an RPM, independant of 3.83 release. - (This is all surmise as there was no changelog). * Thu May 30 2000 Georges Seguin �crow@planete.net� - First RPM build around 3.83beta ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/configMS.h�������������������������������������������������������������������������������000644 �001751 �001751 �00000005321 11714226243 015744� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef CONFIGMS_H_INCLUDED #define CONFIGMS_H_INCLUDED /* The number of bytes in a double. */ #define SIZEOF_DOUBLE 8 /* The number of bytes in a float. */ #define SIZEOF_FLOAT 4 /* The number of bytes in a int. */ #define SIZEOF_INT 4 /* The number of bytes in a long. */ #define SIZEOF_LONG 4 /* The number of bytes in a long double. */ #define SIZEOF_LONG_DOUBLE 12 /* The number of bytes in a short. */ #define SIZEOF_SHORT 2 /* The number of bytes in a unsigned int. */ #define SIZEOF_UNSIGNED_INT 4 /* The number of bytes in a unsigned long. */ #define SIZEOF_UNSIGNED_LONG 4 /* The number of bytes in a unsigned short. */ #define SIZEOF_UNSIGNED_SHORT 2 /* Define if you have the ANSI C header files. */ #define STDC_HEADERS /* Define if you have the <errno.h> header file. */ #define HAVE_ERRNO_H /* Define if you have the <fcntl.h> header file. */ #define HAVE_FCNTL_H /* Define if you have the <limits.h> header file. */ #define HAVE_LIMITS_H /* Name of package */ #define PACKAGE "lame" /* Define if compiler has function prototypes */ #define PROTOTYPES 1 /* faster log implementation with less but enough precission */ #define USE_FAST_LOG 1 #define HAVE_STRCHR #define HAVE_MEMCPY #if defined(_MSC_VER) || defined(__BORLANDC__) #pragma warning( disable : 4305 ) typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; typedef float float32_t; typedef double float64_t; #elif defined (__GNUC__) #define __int8_t_defined #define uint8_t unsigned char #define uint16_t unsigned short #define uint32_t unsigned int #define uint64_t unsigned long long #define int8_t signed char #define int16_t signed short #define int32_t signed int #define int64_t signed long long #endif typedef long double ieee854_float80_t; typedef double ieee754_float64_t; typedef float ieee754_float32_t; #ifdef HAVE_MPGLIB # define DECODE_ON_THE_FLY 1 #endif #ifdef LAME_ACM /* memory hacking for driver purposes */ #define calloc(x,y) acm_Calloc(x,y) #define free(x) acm_Free(x) #define malloc(x) acm_Malloc(x) #include <stddef.h> void *acm_Calloc( size_t num, size_t size ); void *acm_Malloc( size_t size ); void acm_Free( void * mem); #endif /* LAME_ACM */ #define LAME_LIBRARY_BUILD #ifdef HAVE_NASM #if (defined(__ICL) && (__ICL >= 450)) #define HAVE_XMMINTRIN_H #elif defined(_MSC_VER) #include <malloc.h> #ifdef _mm_malloc #define HAVE_XMMINTRIN_H #endif #endif #endif #if defined(_M_X64) && !defined(HAVE_XMMINTRIN_H) #define HAVE_XMMINTRIN_H #endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/doc/�������������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 014627� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Makefile.am������������������������������������������������������������������������������000644 �001751 �001751 �00000003242 11767740467 016143� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.39 2012/06/19 00:00:55 rbrito Exp $ include $(top_srcdir)/Makefile.am.global .PHONY: test SUBDIRS = mpglib libmp3lame frontend Dll doc include misc dshow ACM \ mac macosx vc_solution CLEANFILES = testcase.new.mp3 EXTRA_DIST = \ API \ DEFINES \ HACKING \ INSTALL.configure \ LICENSE \ Makefile.MSVC \ Makefile.unix \ Makefile.am.global \ README.WINGTK \ STYLEGUIDE \ USAGE \ configMS.h \ debian \ lame.bat \ lame.spec.in \ lame.spec \ testcase.mp3 \ testcase.wav # # The differences depend on the used processor architecture, the used # compiler and the used options for the compiler, so make test may # show some differences. You should only be concerned if you are a # LAME developer and the number of differences change after you # modified the source. # testcase.new.mp3: testcase.wav frontend/lame$(EXEEXT) time frontend/lame$(EXEEXT) --nores $(top_srcdir)/testcase.wav testcase.new.mp3 || $(RM_F) testcase.new.mp3 test: testcase.mp3 testcase.new.mp3 @echo @echo "The following output has value only for a LAME-developer, do not make _any_" @echo "assumptions about what this number means. You do not need to care about it." @cmp -l testcase.new.mp3 $(top_srcdir)/testcase.mp3 | wc -l testupdate: testcase.mp3 testcase.new.mp3 cp testcase.new.mp3 $(top_srcdir)/testcase.mp3 testg: frontend/mp3x$(EXEEXT) $(top_srcdir)/../test/castanets.wav frontend/mp3x$(EXEEXT) -h $(top_srcdir)/../test/castanets.wav update: cd $(top_srcdir) && CVS_RSH=ssh cvs -z3 -q update -dAP || true diff: cd $(top_srcdir) && CVS_RSH=ssh cvs -z3 diff -u || true frontend/lame$(EXEEXT): $(MAKE) $(MAKEFLAGS) frontend/mp3x$(EXEEXT): frontend/lame$(EXEEXT) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Dll/�������������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221264 014574� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/DEFINES����������������������������������������������������������������������������������000644 �001751 �001751 �00000001654 07620774105 015101� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Id: DEFINES,v 1.23 2003/02/07 18:17:41 bouvigne Exp $ USE_FAST_LOG: - use of log/log10 approximation (uses IEEE754 float format) (absolute precision of log10 is then around 1e-6) KLEMM_36: - portability fixes in the IO code NON_LINEAR_PSYMODEL - use a non linear psymodel in the GPSYCHO case USE_GOGO_SUBBAND: ? NOTABLES (default): ? NEWS3: ? NORES_TEST (allways on): - don't let the 2nd granule use bits saved by the 1st granule - useful for testing only NEW_DRAIN (theres a define above: NEW_DRAINXX): ? comment: mdb_bytes = x/8; m ?= n ?= o ?= 8* mdb_bytes; p ?= mdb_bytes ( ? == [+-] ) - optimization should handle this, but it looks ugly - do we lose precision here? LAME_STD_PRINT: - more verbose output? PRECOMPUTE (always on, multiple defines): - precomputes blackman window? USE_GNUC_ASM: - speed optimization (should move into configure.in) ... alot of #if 0 / #if 1 not evaluated ... ������������������������������������������������������������������������������������lame-3.100/lame.spec��������������������������������������������������������������������������������000644 �001751 �001751 �00000013227 13170221253 015656� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������%define name lame %define ver 3.100 %define rel 1 %define prefix %{_usr} %define docdir %{_defaultdocdir} Summary : LAME Ain't an MP3 Encoder... but it's the best. Summary(fr) : LAME n'est pas un encodeur MP3 ;-> Name: %{name} Version: %{ver} Release: %{rel} License: LGPL Vendor: The LAME Project Packager: Yosi Markovich <yosim@bigfoot.com> URL: http://www.mp3dev.org Group: Applications/Multimedia Source: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-root Requires: ncurses >= 5.0 BuildRequires: gcc => 3.0.1, /usr/bin/find, ncurses-devel %ifarch %{ix86} x86_64 BuildRequires: nasm %endif Provides: mp3encoder %description LAME is an educational tool to be used for learning about MP3 encoding. The goal of the LAME project is to use the open source model to improve the psycho acoustics, noise shaping and speed of MP3. %description -l fr LAME est un outil d'enseignement pour l'apprentissage de l'encodage MP3. Le but du projet LAME est d'utiliser un mod�le "open source" afin d'am�liorer la qualit� et la vitesse du MP3. %package devel Summary: Shared and static libraries for LAME. Group: Development/Libraries Requires: %{name} = %{version} %description devel LAME is an educational tool to be used for learning about MP3 encoding. This package contains both the shared and the static libraries from the LAME project. You will also need to install the main lame package in order to install these libraries. %prep %setup %build # Vorbis makes the build fail for now. . . rm -f config.cache %configure \ %ifarch %{ix86} x86_64 --enable-nasm \ %endif --enable-decoder \ --without-vorbis \ --enable-analyzer=no \ --enable-brhist \ --disable-debug %{__make} %{?_smp_mflags} test CFLAGS="%{optflags}" %install %{__rm} -rf %{buildroot} %makeinstall ### Some apps still expect to find <lame.h> %{__ln_s} -f lame/lame.h %{buildroot}%{_includedir}/lame.h find doc/html -name "Makefile*" | xargs rm -f ### make install really shouldn't install these %{__rm} -rf %{buildroot}%{_docdir}/lame/ %post /sbin/ldconfig 2>/dev/null %postun /sbin/ldconfig 2>/dev/null %clean %{__rm} -rf %{buildroot} %files %defattr (-,root,root) %doc COPYING ChangeLog README TODO USAGE doc/html %doc doc/html %{_bindir}/lame %{_libdir}/libmp3lame.so.* %{_mandir}/man1/lame.1* %files devel %defattr (-, root, root) %doc API HACKING STYLEGUIDE %{_libdir}/libmp3lame.a %{_libdir}/libmp3lame.la %{_libdir}/libmp3lame.so %{_includedir}/* %changelog * Sun May 14 2006 Kyle VanderBeek <kylev@kylev.com> - Remove requirements for specific gcc versions, since modern ones "just work". - Remove out-dated hyper-optimizations (some of which weren't valid compiler flags anymore). - Update to current RPM techniques and macros (inspired by freshrpms.net spec). * Sat May 11 2002 Yosi Markovich <yosim@bigfoot.com> - Fixes to the spec file that include: - Making sure the compiler is gcc version 3.0.1. Lame compiled with a version greater than 3.0.1 is broken. - Optimization flags for i686 will use i686 for march and mcpu, and not athlon. - Fix the dates in this Changelog section. - Various small fixes merged from Matthias Saou. - Thanks Fred Maciel <fred-m@crl.hitachi.co.jp> for his useful comments. - * Tue Jan 22 2002 Mark Taylor <mt@mp3dev.org> - replaced lame.spec.in with Yosi's version. Merged some stuff from the prevous lame.spec.in file, and appended changelog below. * Tue Jan 22 2002 Yosi Markovich <yosim@bigfoot.com> - Rewrote lame.spec.in to create a correct and nice spec file. imho, this spec file is not good for anyone who wants to build daily cvs snapshots. Closes bug #495975 * Tue Dec 11 2001 Yosi Markovich <yosim@bigfoot.com> - Shamelessly stole Matthias Saou's excellent spec file to create daily CVS snapshots of Lame. Other than that, nothing is new. * Tue Oct 23 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Fixed the %pre and %post that should have been %post and %postun, silly me! - Removed -malign-double (it's evil, Yosi told me and I tested, brrr ;-)). - Now build with gcc3, VBR encoding gets a hell of a boost, impressive! I recommend you now use "lame --r3mix", it's the best. - Tried to re-enable vorbis, but it's a no-go. * Thu Jul 26 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Build with kgcc to have VBR working. * Wed Jul 25 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Update to 3.89beta : Must be built with a non-patched version of nasm to work! * Mon May 7 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Rebuilt for Red Hat 7.1. - Disabled the vorbis support since it fails to build with it. - Added a big optimisation section, thanks to Yosi Markovich <senna@camelot.com> for this and other pointers. * Sun Feb 11 2001 Matthias Saou <matthias.saou@est.une.marmotte.net> - Split the package, there is now a -devel * Thu Nov 26 2000 Matthias Saou <matthias.saou@est.une.marmotte.net> - Initial RPM release for RedHat 7.0 from scratch * Wed Nov 21 2000 Eric Lassauge <lassauge@mail.dotcom.fr> - Updated and corrected RPM to 3.89beta. - Added french translations * Sat Aug 04 2000 Markus Linnala �maage@cs.tut.fi� - Build and include docs and libs correctly - Build extra programs * Tue Aug 01 2000 Stuart Young �cefiar1@optushome.com.au� - Updated RPM to 3.85beta. - Modified spec file (merged George and Keitaro's specs) - Added reasonable info to the specs to reflect the maintainer - Renamed lame.spec (plain spec is bad, mmkay?). * Fri Jun 30 2000 Keitaro Yosimura �ramsy@linux.or.jp� - Updated RPM to 3.84alpha. - Better attempt at an RPM, independant of 3.83 release. - (This is all surmise as there was no changelog). * Thu May 30 2000 Georges Seguin �crow@planete.net� - First RPM build around 3.83beta �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/lame.bat���������������������������������������������������������������������������������000755 �001751 �001751 �00000002172 07576702127 015513� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem --------------------------------------------- rem PURPOSE: rem - put this Batch-Command on your Desktop, rem so you can drag and drop wave files on it rem and LAME will encode them to mp3 format. rem - put this Batch-Command in a place mentioned rem in your PATH environment, start the DOS-BOX rem and change to a directory where your wave rem files are located. the following line will rem encode all your wave files to mp3 rem "lame.bat *.wav" rem --------------------------------------------- rem C2000 Robert Hegemann rem --------------------------------------------- rem please set LAME and LAMEOPTS rem LAME - where the executeable is rem OPTS - options you like LAME to use set LAME=lame.exe set OPTS=--preset cd rem --------------------------------------------- set thecmd=%LAME% %OPTS% lfnfor on :processArgs if "%1"=="" goto endmark for %%f in (%1) do %thecmd% "%%f" if errorlevel 1 goto errormark shift goto processArgs :errormark echo. echo. echo ERROR processing %1 echo. :endmark rem rem finished rem ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/testcase.wav�����������������������������������������������������������������������������000644 �001751 �001751 �00000303314 07157000344 016421� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������RIFFĆ�WAVEfmt �����D¬��±���data †�×úÚþ5û.ÿÃýçý$�åü‹Èûhú‚þtù¹ûjú6ûòü[û�Ðý«vþ²^jÙ`•Ÿþ«JúÞÿöÃùƒóMóÐòfñ@ó“öØô}üL÷XPùi#ûº:ý§Bÿ¢»ÿH=þÀ/ýéýëÿÙ^Dï°ˆËñÇE8þ_Jû\µù«bùá¥ùšùÍúBüuìýÿÊþð ÿisþ%nüfžúZÕùÉ÷"ö²Çø¢ äü…AÿRvS×é1¥îýµ9üƒû ú®SùŒ ùûCÿÆ8ÿ1?ÿ¦ü¸�€úÇ�¸�Ç!c¢Ð ÄÿÉ ¤ú^AøõÇü{õ*0 ¿þ@‡ùýô×�kðôÕñUå þ…î /A�1ø 9ØöXìØìEèÎÖtâ~ÕúåÀÌvýÙ¼ôa0 84*ßQö¡?9ôòbå)ó}è¯ÎèîÖðë0ðdæðuéë4÷Èõ?L-ÆÔB7>rEÂT•:-LØ)Ž7÷.w�8'´í†ä ïèhʪô"лÍð7@ ñü Š 'ê }"ã*§úµõÿù'öMíYûüè%°îØr÷Ë nù¦ùFô�Âþ ±¢¬ À ÊJ�HYõ¼Xê ‘åˆeçY âím ¥ô® |õ8 3ô˜ núCsj  o ß ƒ®'ÿ•ûÿüú�üØþ³üÉ�–û“Æüòþz!ýòÿ¤ö¨üíïø)í!óôèþïRâ¢ðœÞ¸õfßü§è.hö Ìûc^úú-Øú¨�ŽùyýAö¤÷êòvñÿìîç í)ç¤íUéÒðîéõôÇêÿ÷Úì:ùÖï_øïxõÃè¢ðáëÝç.ÚõäËÖXã«Õqã×uæªÝJémækéHëhè&êìæ»çïãÝç‚áˆåªâ?Þzæ:Û7éMáÆé{ç¦ê}é¦ëéñêçæ‡íÈâôÅãÃ÷Çé\öSìj÷(ìôùÚíWø5ðÏôñjó•ðØóîôòè ï¬ß`ìŠØ�ï×ìôÜ“ù\æFûBòSúvùJöïöJð}îêìNêíï îõööõ|û@û…üýþûþ�ýæ�|÷vÿÃö£üü^û¾—ûq ÝùI ÛõåþÇóöIõá÷i÷ºÿ]÷ÛÒõÀ)ö‹Sú,ÿÚÖÙ(²ÊRN¬þ½µ2ÿ›!/ó'ªî.~þG/Æüf(µÿ wü?ÿ­ü#û¸(üGÿ5ÿIe ö Ù RÍj(ƒ:‡«ÜPá¦N !ñ Y µ)¡ö°3®"à x!SÖÓâ ì ¶u u PU ‹ ñ. © úý ɧì \ Mi»Ê2XíBö¢®_-p ‹€X Í Ç [b f|ªúð Rõ”4öhûŠÿ²©�ú éÿZâýÕŒú®ûº [�Ô <™øF ºŒœÐ AûT HôT nð; Ïòo ‰øÉ ,ý ýÀøñºó ôP÷Óú,ýû…ýP Nþ5 �ÿ ÚýÐ5üÅ\üÒOý ÿÔ Sí![6 b˜ ò/ k Øëkßü»núhüÅ .ýý Þùú Øô§ §ñ\ ñY ¢ð%6ñ7çólõh ÃôŒ6ôâËôÏvùX ÛÿÅ œ: uÿš ‡úc]ømøÀø ûù" +ù| a÷, ÒõDÉñ‡ì°ÎéV—ëÿ°íáþ4íáø˜éžôååÄñíäøïÐçHðÂì?ò ïƒô±ð ÷ëó¡ùùÐúÚû*ûgú"üUø|ü!ùûúœù5øË÷öõ ö¥òxöpó*õm÷ÏóíüÁóuô >õ½ aõN YôÞóåòþ\ò£ïå=ë3è&Oç îé³þúïÊüÐö@ÿËúfú#�ÏöyÿjòdÿðŠýµð¡û\ó‘û¹õ¨ü,öþGõ–�¼ô™‘ô¹íó25óƒúòÄ�Õò3üüðùŸîÄøÞîú¼ñzûÐô&ýK÷ÌýµúýÍþÂýG�^ƒ§�Á "�æ ÿ| æü7ÉúÍ úÿgú¶Aû@±ülôýâ²þ¤[ÿù¸þ8 ïü óû7 üîüƒÛþÀÊ ¦œ ÷½ ŸKÕ ìþ–]þŽþþ­þÑý~«ýÏýŸ zý+ Rüžúè�Á÷6üô\ûxò=ý–ò°�"õEþù UÿDä% â ÿؚᣠÒàÆÿÁjü©ûíú‡÷¤ý›ö_sú˜ Ì[§ÞŒ  à #húAõàæô6÷¾Áü'  ùbŠIü–ÿ|ô8ûBïß÷£é!÷¸ä^ùÌä«üWê%�ð1¤óK˜ö núò üüá öýÜ @ýb„ørˆòPð^Ôð‚)õʾû…=þEaü’4ø]óN`ó8 ùÓ ÁÿŽ kF ¯Ü~Úˆ›�Eþt§üÁqü (ý¬ „þ|•ÿ‚pÿÖ ^þ›&ýò…û2yù¶å÷+Ÿö 'õdéôc÷jùú[Äÿ“i¹ ® žûw|÷ƒÆõ£7ô,þÄó¹ütõÎûAøTûÓûCüÿ‹ûÍdù´1ö²ô ô§�qôçýMóíû‚íûÏéfùÏñ§ö^ø>ôHðŒòÎåKñ»â®ðvãÁñÁåôÜèöœìAù;ï„ûÅïôûið¯únñ<ø‹óàô*ó¡òDíòñÑåÓñºàòñ¡ß½ñÅß ñ?ßSðÍáÖï[éþï¾ñ=ñ’ùüò�2óª¢ñZ…ðM|ï®�Ñí ÿÚì‚ÿòíFéð]>óïüòOaò »ô² ³ø ·ú^ ˆøÚó¥ÿøï·ú_ð¤õÅîÇó›íkôkîßõÓíýù-î.�‡ïq•ðƒÃôÄnûÍ?ýÙ)ù7sõ7ôÏýàòeû˜ñ†ûéò‚û ÷œü(ü}�Ëþ²æüŸ†ú §ûÝ �\ÒóHeÿš“ü@ ðühþêŽý€ûg 3ø!9ö@$ôªAò¡›ðzï [ð– öºýF å¼fý ¬øÉ ›öa,öõ�¼óÈýHðAý6ð ÿ~ò òrð1îøðÏRödÿD÷¹ó>Îñ ýòH Ìôƒ £õG Ïõ‰pöw ™øVüÙ�ÿÿß¡þþü©=øíõãòô5z÷inùĹú)û`øù…¢úðý-†!øˆ Ö›ªˆ$²�]¯þH Kýî QþM b BZ¶ _ú¨¡!!ì6"eIìÈAÿmæ }Ÿ @œ Y| Õë è. ~7WÄAui ‹Ìš „ýw -û’ }ÿ} âxýH2�±¡ >‹/Ý ¯Î «» ¯û 7 š( ©ÿN Ÿþ.õ�‚ ý�¯ Cþ¬‘ü Öþ$Rö<bÞ�ìýXþ­Ü�ýAÍ®–ÿ ¡�óô ?qò ‹!ûvúÿƒ êüH üÍ åûÇ û¥ rú0 ¥ût ‘þf�â5þ^Šû÷ëúQ Røj Ÿôv aõðù¯õüú ¶ÿÀý?rõcÍí7ãè{læTmæ(Áé‰èñ> [ñ þðƒÙîËØéu üå›áåûç4þè.ìuÕí=Ôì"ÿ—êø8è“õHèsõqì÷æï½ú÷ïà�3ðb3òË ‡ô<Áõw èö( ßøå€ùÁ²÷ýæô÷5òÓòÓídó6èøæêýžç0øéŸÇîž ÷~ ¡ýõ Pÿ˜øü=�-øœû(ôøó øPõnú®ùôþÿNÇX” Å ¼ ( ÐÀ yi ÉáÏð¼ÿ©ãýqªýÍÿe0*þni ä®ÑçÊ-¬¿þI�(ýŽÿŠü£�´üûÒþmJ Fñ ÷ P N  º tâ' Ÿ» ׳=;Õ� ޱ“ ƒ ?œ1ò\ýxöT*óì‹õE ýú¤ t�Öºã±*—¥9Ò5þë ¨÷„SôDwó¸=ór\ó[Bô_ ±õ» Ê÷–ù>†ù“±ú¢ šüG Lÿj }8 ³¶½@Òÿ$�<ÿÆ_�Ý>q Á> ¾! €Ý ø1 K Þ ‘;º1QìT˜¨$@R @ EÓ ¤~ Í/ »ñ Z Ø[ vñ …”þµþ€ùSùâõóõ>ñÖõJó/÷¯÷Iùü%û&.ü¨¥ý–>�"�b<þ’pûå”÷ùQôFñ=ÿXí*ûrégùrèø$ëbõ÷í†ò¤î+ð‹ïÁî¸ïêíæìàìuéÕìmæIîÓä°ïåðCæöïÛçóïté?ðêððšé¢ð²é]îlêì»é8ë‡ç>ë–æ2ëæEëÅãÔëÃáâìîá*î•ãœïóäûðmå_ñ¶äÌï@ã|íïásìãqìçkìºé¾ëGë‹êëšéVéXèÆèæòçäŒæäÛæiåèËåJèåOéaã£ëëàîÖÞ]ðDÞ3ðßîõà÷îâtòËàyó ÞGð¯Ú†ëÌÖ2éÓXé¢Ðíé3ÐGê@цêÓ!ëÕìõÖJì]ÙEí£Üð à¼ó;âY÷öáãö™ßøñýÜAë¡Ûòå|ÛNåNÛŒçÂÚÌéEÚ’ìÞÙ"îÝÙLìáÙ}êËØ%ë8׈ìûÖ2ìµØáëÆÜ?îváBñ-ä¾ñ‹åÚðNæ˜ñ‚å”ó‹ãÛókâÀñ)âÐïÎáŒïáñkàòsàoïeá4ìRãíÀåãðNè—õÌê;úÈíNþÓðòÁð¼îNÔë`ëNzì$ dí¾ Kî9 Êï¡ ñh Áòx "ó’ Öó¡ õ ÆõJ õŠ [ôí iôà Ûô†Óõì+÷ÄÁøÞóùãÖù^øÿ_öIôGò�^ñÐ,ñWó•;÷˜ÚûGõþòÙ�þÊ»*’:)ž  #±é ›D ËäP Øž L p òlQÍüáþžøûLø®ùsûú;{ý1~= Íûi3mj§¤ý‚\l ú©“ž‹« ³Ò ÙîJ܆ýsÑ»^ÿÚ^™ ž° Fìʃ2 î E ~ ?#§†˜½Žî7)Fq œ³ ¡#ŠU¦AU? r d Žù A¶ ë Uüˆ.Z¿�M�½ºÇò: ú Ï[3-X«N BÀ õ© L¦  Ä? …–º1M´ söVa+ ˜üÖ¢ûºñÿR' ¿ Î ¬Ñ/(ï%o +òq�eþ¯ëýØôÿ‘9Þ  æ j} Ô¶ ޤ# ðE_5æ sŒ 8 ¨á,, X% ÌÖzn”ï¢Ì¾#£ÁÖ6‰1¾ L�" §ÿ­ ˆ� † —Ú W Œ ¢B YM §& ®H 1É)7ÿ·Kü5�Yü¦üUþ‚ûÃ+ý'D ™÷› ö© 3µ ¦  <u¥ Æ ¬ý ôùPBõð”í®æír6ñÍÎó¦�Jó Ìó”’ö³÷ÑAø: lùË ûO äû— lû Ÿø· Pô{¨òÖÕò‘#óÏô‡fôÞóÙ ¸ñ~ ÆòÆ +öü ½øœ ø 8õ3rò“�æð{þ3ò;ÿLöÂûÿ7þnìþnÂýô�§û*KøW� õÁý[ó:ûò4ûœñ¡ýÒñ÷ÿ(òE;óõ÷ŽíþÛÝÃp-úõ�ŽÿC�‰û�GùÕÿÝö»ÿ/ôºþ†òFü/ðsúÍíáúŠîÓü òcÿµõÃEù°«ý  ƒ´ Jø bÓ {� ·ÿÃZ�·"8‰ýÃÿ1ü©ýIüzþFü%ÞûLÍúßþùjüùéúóúÉú#þü—b�Ö 2à äF B¹‹ÿÍw P¡L 8;ý�ÍìÿÚÿ eÿðlÿŽzþg îþã À „µ5L Üþ NqB ¦ <  o® &â °ü q÷ça ý)ÄÝq™·ØHÒS°Aôü¤×¹Ú?¦a,Eb¤}nO Ú~ ÚR;¢àI žê ª “+YXùºXšõ3þм™„(›a6ÿCžý4ÊüÒýüwûçùŸú~ö’ù©óI÷>ñôÏîmòªì™ôªëÞùvî÷þÍóHÄöÛ&÷ ÷ö|õ^›òýØðõ ñÛþð/üŒí>úéødæöýæQöJêù�ïÿûnôôü–ûŠüTû´Û÷á‡òþ~ìƒùúæÝõÄä'ôpæ=õ釸ÞìûUðþ‡ó^nõ¾cõRóþ®î©þ~éü\ç|ûàçùû}é[û^ì�úïHù¤ïú¾íûëCúÛèÉø çõø æÖø3æ÷õæËõ²çÿö7èqø9éûöòëôSð¯ôÿó1õhõ3órôÏñ™òò*ò·ò›ò÷ó˜ñ‹ô€ïÈó¤í¤òOëyòHèºòæxñãä7ïÜâ—íß´ë–ÛÇèÙ{åÇØùáïÙÇßÒÜfßžàÁá(åçÂèïëê˜í2êÝí»éHîxèÞêûæ'ä{åjßüã±Þ£ãÕßã�à‰áaÞPßzݪÞ÷ÞÞßÓàØâKäæôéCèÿï°éÖô%êlö+èô™äñ™áîŸà%ì‹ápëãLí#ä¿ð~å ò«è)òìbôcî¦÷ð1úêñÚû‚óñü@ôìû&ôðøëò ÷oñ'öñŒõÿò„õÑöÙ÷ ú“üHûØúJ<ù£Ûötó»ïüÿâíÙûîQølïs÷ò'ú/öÁ�Âúò¢þø ØwŸŒù�K „ÿF Ÿþ¡3ÿ›ºÿÆÿèý9üþù–ø÷Nö`ö%õ÷ôà÷~ó'ù~ó›ü¨ôø7çûÖÑÿ ¸4 :/ ê ’Ï ,þŸ9ú½¸ø»[ùîù4ùQþù6 Øú üd Wþc¢ÿ¯!r5Õ»Û*àa B- ]ðÚ¤ } " ©@Y+PøHß„J çá9by Ù‡ X X €w )m îŽÈ±9ï"†µ1š` Î ¬  ¡ ö ¤ ‹ í ‰ ù Ë N~µarh_Ü,ÁÓÁô ZX ‚ ß:á)…ËH ä ôR T³ È F  Z % âí ËCãWJš ½í ; ¿kÞÞ7†¦Yî[ ¡³Øa /  ï 8 z # bÓc¸¶™ ã R ˆ® Yû )× X S í% ²Â]P ) =U~ڌѓm¤ ß qs ß± ô§ ã È À ¥G Ž×j¬³ Ì�! ìþe þdÂýcFþ{êÿ[Æ,`>§BÂjª�w1þŸÒý4YþÊý°óûy_ù%�Íödþiô‡ý–òdýšò“üÏôÕùêõ¥ööóPôVð.óëì½óoë}õ ìXøcíŠüúî¥�Áñ”Œó’ò…0ð#ÃîÜ+îBþì6�íÒýî<üÉíbü?ìuý`ìyýÊí`ý²î®ýKñ‡þõPtùµ6�ã$ù g =�á �UÑÿÜdÿúÿ´þþðýüý=þ…ÿúÿ™÷/obAõ øG Ù^ Ýi "â BÙ XGü³ýòEú âøšþ­ù þãú,þ'ûFþðú´ýaûýYü[þ&ýð©ýN¼þò¸�/²#ÎY@„+R_«ãÊ�Œ‹�=Ñ��R�¡Bý*ù•öMnö+÷I•÷„ø¢‚ø´ùk5û1jþ<*D t® ûâ ᤠlÿõ Øû˜þø½t÷Ä ýõ› ‚õ> žö] ÷¹ ªõî ôÐö)üyãŽTŒ U ü½ Û 7ÿ¶Eþ0_þÅ_þåxýMqüD ”ûñ áúà ]ûj ýUHÿòÛÒšcB€ü¾×wz�Åÿ�ÿ0þôþK�~ÿÌQ�ùc� Sÿ þ gýÒ—ü|ûÂòúÿ¥ûñýÊýªýÜ�Nþ¤è�V%35ò”rN GÜŸqÿj.ýÐþ#üýIûûù‹ù9õ·ùËñÞú¼ï‹ü2ïÉýHð$þLñúý¹ò­ý?õýž÷>þ øÄÿœøc�_ù­ÿëùþùü$ö;üÐñtýèî«þ<î¥þÅîJþ ðqþÅðŸþðþñþNôÂý/÷ÂýÈ÷Rýö ü ôÔù¬òt÷ýñãõ,òlõóDö+ö,ø²ù¤úüEüSý¾ûàüSú øù×ïW÷Qèö?äüõvå/ö‰ëö'ñØôþóñ^õ‡îNõÖíõ=î’õÅíõì5óvéñçýî æUì[æ5é~çÙåÈè«ãmêÅäÿëèììœêmíõë¤í/íªî©íñCîîóðŸõ/ñoõñUôÉñóTñÐñ­ð+ðtðÿí)ï8ì5ì,ëêéRëNébì¼éáí&ë¬ïí†ñßî{ò?ðžñòïÿïÚî¼î´îïí~î[î2î©ïqðçðìôEòøèó¼øö»øÂ÷øè÷vöúöœõ öêö”ô’ø�òù ï¡ùXì·÷ê)öîèDöréÀø³ëÝü&ïàþ—òþvõNþÕöö—¡ô?.óÌþ÷ñSü¨ñMúò_ù1òÑù©òLú²ó üõ¡ÿ²ö-8øOÉø!?÷Òšó$vïÔËì°ÍëxÿÍëJý3ì2üíüËîü3ñgý”ózÿŒõ!âöiøŸ¹ùt­û$‹üÄ�¾û½ý%ûÒûûÿûLûüVû]üLúý4ù¥ü’øfúgøcøÀøé÷uù–øçùûúÿ—ú\rú Äø7ÿ/÷Fýøâü7ýñþ_¾hHŠcþ,øÿyõI�÷ùáûÍh�g‡8  ßB<5Qø9ôöüõŸíúIøþ£6` º i { íT !<cw„Ûª ' Øk"u® ]Óž™ÊoXGKÅ`b h’ºxýb9ø ÷ô 4õ“ |ù bÿ_°% ˆö ½„xöÅõ "á /ß GÅ u]N y â| o Ò– &Ù ¨x ˜R//fþ ¤ûŒ»û fýü =ý€aú¿)÷åÁõ –öxú‰ÆþêºÜbØeb7Ñ•Gß÷Ë•üºÇ™Ä) ®5 J N± ðy ¹“B ¶m7{™ûˆâø* ´ùQ Êý ¾ N: +è T §? º  €ä Ú4 ™V t , éƒr©giG¾[U'5•' TŠ ÓRéó½þ`tüV-ý8 «�jä*Š = à  — : ¸ ³ (T ©2¦£K*Úf2Óåâþznü†Dú¾ú2Èú] &üÈ tÿ±T# û° ¶ = ì ‡à Û5 qÉ GJ– ¸�@‚üú'1úíÇú©çûüþ+@�½´OøÚ ¦¼ Ý› ª«”�Õl¤2Û5 ƒ 3 1ß9ÿ>Ðû½�üúo�ÊûWîü{[ý½ úüh ý2›ýêiü¡Íø: kõ 0ô/<ôøŒô³uõÔö²øÞûœ(ÿ*k�µ Çÿç «þÈ{ý9 .ý`îþÌ;••�ú$þ'€ü4�!ûuúŒû'›üN?þq'�úɹ'R®ãÝ]J·þ†þ{Èþ‰Ö�|"¹Á NÜ«‹c�£9�lþ�ñ^Ž D² 8Hx‰‹# †@ ôN¹@ *Ö a-ß…)œ¡C)J•-ÙÏl G} FÇ<>¶¨ØþU-þ¥ÿÿþoþÿ¶þ�ÿÙÿ¤�Ì�ˆ]�v þïþQü×üüIûðû·ûOû¯üíúœûjüÑûºÿÿpƳ“‘Fd�yñúÂÿƒõýœò ûßð²ûïÿÅí,Kî.1ñª¿ô}�³õÒýöûÃöiø`õ¥ö?ô¹ô-õ±òUõÎñÚònòð^ô´ïéö4ñ~ùLóþüCõåÿèõëÿyômýòñ\úFï«øîbø…îCøŸîTø¼îìøïáøœîj÷$îéõðîâõ6ñ@öäôªöDø]÷4úføCû³ù¾û,úü‹ø‘ü;õ,üòñùYðVørðjùƒñ±û0óDý&õ÷ýÆö¼ûÝ÷Áø|ø øùøøø›öBøõ˜ø³ôò÷õèöMõb÷¾óv÷…ðòôíJñNë¸í¡ëðê«ì´ëµìiîŸêÉï¯ç‹ðíåjñ–æ ò…éòDíôòÜï³ôðâõdðqõÏïó®î\ðSí÷íxë íoéKìèèëªèìÑæîäØí¦ãì‹ãMê»âEèEá±æšßÚå#ß‹å‚à9åjãIäsçÅã»ëÿå:ïêŠðìØï"ëáíáé!ë7èÃèåXç6ãQæçá=æâè:äÿë éÅíÝìdí!ídìÉì-ì î?í¹ñ@ïºõzðnøïâùìî÷Àèkò‚åüí¼ã;íôã{ïæ óñéù4í}ýãí¤þ^í>ü~í–ø—î„ö|ïñõï÷¶ïGùð/ü7ñ¦þËñB�Uòôñ>ñ+�fð–ü!ïûúhîû%î9ü\í{ý²ìdþ>íìý6ïíû‚ñúoó¦÷¨õVöKø$ø{úZû¥ûIüëûÐú0üïù¼ü úüEù™ú¢÷—ú¸õ¶ûÃôSüÕô×ûÖòÇúð[ùÓïòø‘ïùú’ðþôP�Døäù²Gø"ìõà.ö7ûL ‚ö\ 2Ôþ.ˆù&ðó=ð#ÿ@ðÕýgònþUóóÿêõ& úž@úÒzõ9ñL æñ +ör ú- ;ûÅ ûþeý—þêÈL¼¼a„L !o n %øˆ „�ø @úÙ 4ù £ü m¦ {� í ­ ‰  UT K !q ðçš//&.qr ›y¬. B¿ µå Xa #ÿg ÿ�5 =ƒrÿËLü«ü@±þQ�V�5§ýÝ Ðûï æû ³ûv cùö Øö[ cõ fõ R÷d \úî £ü ÿü)üû—îû%Oý£ºþó Ð�@Êä"Šö�c yþ� þÌ úý sÿ‘ # ºÉ å ÀP�‘½ìÙÅ¿�ù¼þûý vý• {þ rÐæ „  & x j S n ÷ Ù È  ´  Ž «C >Ñ‘ÃÈ z 4ø º<  ë¯ cz )B 2\° µ+°âµöÒkÔ±@e 3’ œ¯ Ø ~:'”´=.:`-ÉŸ •Ž ~¦ -Å¥éïbK Ù¨J°Z P©—©†í»9j¤XÔÅÀßÚ@&|ÙÿÙ_š! <„%bg'‡K%* @#/ ö!> p"ª" �!F - åŸ!|ª$*Ð'@ *‚D,Ã0,ªX)Þ&%´ –ϱ¤!K¼"XÛ"À"ò· ¤ ¤S!v¾ ŠâüaÞ*¢ý<Ü Ý#OŸ" H!>° | H´64Žf‡ÖŒZ½xü,šŠl Ö‰ :ø / 4 ’ ÄðŒ õ ¥Â‰¥Ûà ¼Í ktæ ½À*´ ÙËt E n‹–Žaö{âd Ãï L! Ù Ã1_Õüq ³ø4 n÷ä Gù[ üœÛý5-þ¦5ý7üù }ü­wýcâý ºýNØý¦1þÔ þ =ý� 3ü PûíúÅøuZõEþêòÁù^ñï÷ðï"ø î„ø)ìÄø+ì‘ùî˜ú#ð—ú¤ñúJòûù­ò!ø#ô|õêöKò$úwïdý¿îâþðÄüÔñoø‚ð€ôgî­ðríçì¢ìîìšê¼ñÛæN÷ãPùfàK÷ªÞžó÷Ý=ðÝËíÍÛòë[Ûeê_Üžégà#ê³æöë}êjîûë¦ðøëdòqêÉòÑçžòüãUò6à¢ð ݇í4Û«éûÚæ£Ýäæá¼äëäëæ;æ,éçê´è›ê¤éÁèŒçå÷âXáUàa߆âIß èÚß+îËàÜñ[ââñ÷ãÀïå'ìØå’è¨æýå!çFå;æ€æ‰åoéåéíäÝï÷â î â™êVáùçá£çÝàé^ßíémÝDè&ÜådÜÐá Þ‘áÐàšä%ä¬ç_çöèùé¡éJëëëOëËë€ç;í2ã'ðQá¢óÍáîõòälö~ç\õéÊòöêòïDéîjæ í,ä»ìÐâíßâví�ãîâ²îáFîìß'ì²Þ™èÊÝæIÜyæÐÛ•éoÝåíÔà¾ñÕäžôÌèöµìB÷yïQö ï°óÁë}ð£èºíËæÊì˜æœíƒç\îÑéHî½íî°ñ'ï;ócñóíóÎóFöÝó®÷$óËöçò¬óúñêïhïðììBìÀëÞíðíïßörñ-ýÈò”�Ló4ÿºòwú¯ñ”ô¹ñ_î9ó êQô>è˜ôÅèyôMë*ô¸î ó¸ñ ñtòãî¥ðí0ðÑëÃò2ë,óƒë.ðìqì™ìBê‚ítì*ïüð]ñ<õ¸óê÷võu÷©õaõQô!ò~òúíñ‚ëòIëKó¸êuôémôJésó×éròÖê%ñVìºð<î­ñ¦ïyò¶ðcòtñàðïð¡îÀîñì¦ê(ìæµìºäï‚æóôêg÷óïtúJõ_û½øçù3øG÷»õ`ô£óYò÷ñ!ò¨ðgòÑï·òï ó–ïÏóˆñŒõ[ó§öõáõ÷öœóvøÊðóù¥î‚ûí ü|ëWû%êKú éWùéêø©êøsí¼÷ñCù£ôÿ+ø¢Wû†™ý7Qþ#äýj;ý(+ý:ý.ýÃú6ýSú±ýúþ9û€ý°ýƒü«�Tü¶Äüïºý…þÿ’ü9�íü†�Bþ´�T�ݯ”*�È>�w³ÿÖ þbü@‘ûØtûƒ ¸ý éþ¡ý oüU.þ]ßt Q± 3ÿ3 ìú¹¢õ cðJ¢íqÆì>Zíy�üîó�Êðzçó QøÊ¼ü‡>þ—¾û?Í÷bÄôzŒóœó*òøŒó°¿öHÅúÝþÈHÿ˜øÿ©ñ<ÒîE y ‹ Ó Ç û r g 8 ¯ ïí ¨‡ b#@ É7Òö ÎJ × _n 5 ¹ S ZŒ ˆ %¬Îké… +Xå-±Ñô™b&3• ®* (Î ©æ é^WÖ¢pŽÁ ç!â"Eì] œD)º+†¹úõ¢Ý½ä=ä) OÖ¦à'|ÐKa£M,&‰nêxþÑ*j0ÙêHséï\%ƒÕY·³ºQ(òŠÜ0@‹!^#  #êr#B'&2¹)3=,0ú,‹z+ÖÂ(Ð1&L$ݘ"'y"¹"], m† Wh Vt gJ."}&À †)c ˆ+ù *¨ V&e š#!B"ˆ"vG#¶$ ô![› bcüÃn¬¦v!ãÊN͈ÀVw8TÄbgæc¾ ½ž·¿DædA ò ¡¨J ”Þ 5sAêBC!ÎK Ä1�O"©÷ ˜ ö  ÖD ¥gÄB+ z4±Ÿƒ B P îðJ5 Ã` k0 ¨ fÞñòÂç'ÍjÑ pƒ y@ `gxÿ·ý[ ”û˜ ÎûO 0ý :ÿ‘ã h‚ ‰6 « AY ©’¡V†”rˆ&Zÿ[‰ý#Xý]šüèJû Tú£�ðùæþ1ù ýT÷mûäô û‘óõûõæüûôüWþµûIü#ù“ø÷õ%ù$óCü[òùþ–ò4ÒòúÄó½âõ#GùeKü›ÿÔüÒþzú,ÿQ÷ÌÿÖõ&�õ �ó­ÿ*òEÿñWþöïZý‹ðnýVó9þ.ùçýÿ�'üAoúk*ù‹Æ÷÷Úö«ü’ööwõæðô ðmôõ ÷Æü¡ü$õ�¢ë^€Æ®�RÿJýØø øúòQòð6ïñ…ï˜ñYðÎðOïšðëí°ñÆîdòÕñ#òßõÑñ¼øWòXùóž÷ªò†óqñúíºï{éí¸çªêkçÒègç…æŸç´ä$éEãpìfá[ï—ß{ï,Ý�î5ÚEíÙZí¬ÚtílÜíÞ]ìà*ìÜáôìêàSíߣìGÞ"ë2ÞwéFÝìè–ÛÆéŒÚ›ê5Ûöê¤Ýýë„áËìÐåÅëdè-éèlæiæøäãÌå9à{è¥ÝåëóÛgîÛrîÛÛ—ìÐÛ ê[ÛÞçvÛ“æšÜæãà×åƒçnå'ìºäNîƒãSîiá$ì‡ßãèÝÞIæ¯ß æÀàŸè àíkÞ½ðÝŠó†ÜñõÔÜCõÅÝòæÝ+ïvÜÚëÛtæ~Ú;â“Ù‹áØ'ã¼ÖEå‘Öªæk×è+ØøêÜØî$Ú“ï3Û|ðzÛ!ðþÛÉímÝxê>ß èádçËãÀçç°édê™ë÷í†ë°ðCìœñÂíñÃíï1îŒìíëÚèhêuå†é™ä¹è ä7è©ã=èòâUéÓâë÷â^ì÷â²ìãîëÚäCêþåKèBåßæêã“æÚã½ç™ä$êÒäíˆæìîMêî†í¹ìîNëìëLé‡ìàæ×îÎãkðñà›ðuá"ïƒäKíçMì{çì<æ‰ì×ä í˜äÁí+æOì+éë»ìë£ï,ì¤ð”îñºññ¤ô˜ïèõÑí0õÁíFóßïñ?ñ±ðúðpðüïýðÞí!òêó?èÆòfç©ñPç³ðæçqðåètðŸêvð ë»ðaëŸðÇí€ðêï·ñ‹ïáóðîÊõÇï8÷þïŠøãî ùÐíQø"ìÔöUéµõœæÇõå˜ö6çÇöìûö·ïŒø×ð¡úñ5üñjü/ð.üî þ í¡‡îÑñr’óúZõMŸöðþ—öúúññõŽê”ó¡äBôXàGøàYþ‰æEï± ÷jý1Æ�ñ2ºûþÜ]û%+ùë ã÷ûiö€Èô"Ÿó có5 –ôL øI ü° € ‡Ó ­ ƒö Þ# a3kï  û -& ‹ á G ® ³=7Ñÿ¾�·ÿU�~ÿðÿÿ9�l�\Ž6 f ð8Ún4EDN Gp D ‹ O À 1 · º � O ; A }g쥵 ^ #§ ßé ÖYWôüB¹U*c4Çàý¼<š 1ù Ð ZÜ “  ž ë óZ¼–HW7ت^yâq·V!? " ½É Î^ ci #î 0$ Íž |"š ã& Û*Î 0-W Ó.r g/Mÿ-ÅI,1,à ",#ä+Î~-œG0èA4rQ8„'9!³5t 0ˆÔ*˜ ø'\ Y& å#þ û >  e × ' á!€_$ƒÝ&€‡'†l&."%ûÀ$- $‰}$1¸#»m"|é!pS!¨é­øáö8£yÔžöUøõÁ*·¹‹çøFõ]Ö¼ÞÖáÔà~…jZ§O`XÂU†…Ý㼊¶Î€š†ÚWú”5£dŠ8õ÷JMÕl,pµš>Ä <5 „èa�6°‚³d3€›ò¬`J®2– + _ÖB@p& ôÖ wY " EÅ 1k ^ p¼ D� õ 'f # ² ‹  ™Z  æ2 ·+ 8Þ ‰ úO ¹·! %ž hÿ]Ûü û´>û¾ ºýc Z�¬ bD Ö�ýÅýcùŽö æö Qúž —þe΃Žþ5÷<çË ØW�fÖþê·ýSûéÿì÷¶ÿÍöòÿ?ù�_ýW�©�Ú�ë£�$‰ÿœÞþ¹ÿ1�$þúxþÔìýßâü…ý Œþ›–ÿñ¢…ÿï°ÿ°¿ºÿÈÐþñþÁ�üýoÿ`ü˜þ5ü>þËý>þ”�0þ,ý‡dúõ ÷-“ô´þIó{ùoóëõÙôI÷ ÷Küñø&�Êø‹%÷ßÿLö™üÒöôúù–úü+úþDù˜ÿtøé�Ž÷¤÷ÂŽø§úïHü<þM³þÜ�¬þuÿãý`þû ý¹õLúXïOöêöóøåûô¦äGøè¿ü9îT’ô`Áú‡Dÿ p�¯îüúþwù`ú ö!ø'óG÷`ñpöæïCõïWôjîcóÖí#òcí»ñPìRò¯ílóñiôæó+õøõõíõôSózó«ïô“íµõî÷'ñÊönô/õ<öÒòª÷˜ð‘øaïY÷™îþó î¦ððíãîÞì[îëWíéÙë=çMê æé„åfé|å¬éŠåƒëáå²ìMæÁì§æìîçjëDêLë÷ë™é„ë¢æ‰éZ屿çä’é¾ãSêúåéºééËíùèyðMé.ñ¸éˆð êLî¶é¡ëöå7êáÆé±Þüéˆßíéˆâèåyäêå)á%äýß<á„àwÞùàWÜ÷à³Ú´á0ÙNãbÚ¾äkÝüå»ßcæÆáÐåòãI壿®äÛéÑãüê¥âmèJá›äWàDã‰àä¢á²äãá›äüàpãUàžâ¦ßãíÝ?å›ÛçÙ;èŒÖðç™Ôšå­Ô âÉÖíß Úzà-Þã¯áæçwäì�æèïôäýñ¢áÇñã݉ðpÜÿîô݃íÚßÉë€àDêà érÞÙævÜÈãÖÛ1á$Ý ààaádãÛäUæÊèéë-ë ëì—ë‘ëEëTê¤ë?é)ëÉèìèé æÿè·ãbèÄâé+äëìçÐî&ì±ñ¯î-ó¬ícó“êó:è!ó¿æ‘óÕäùóWäDôðæFôRêHôóì@ôí‡ôé‡ô²ä/ôFâÝó½à°ò à'ñïàyðóãÅðßæñ¥éÆðííñ3ñùòòoõÕñ`÷Ôñƒø@ñ\ù)î«ùí醸”ç÷èæOöéóõ�ïDöíõ·öÞûÛöMþl÷ýœøû€ù5û¤ùšûùù·ü"ûýtüóýîü�üC üGÛûÅNü;‚üÞ~ûŸÈù“Ôøÿ¢øý6ù÷úÜú‘újüý“ü�û^°ú—púÈúœú/ýúrþ°ûVûÑüÚøþ‚÷%�šø›cúì#üGqÿÉ F- %3ûJà– øœ gS Ä í5 � ü ™öþœñ¹ µðy …ô‹zù¦¤üðÖüJrû‰¼ø ¡ôû 6ñ� ýï8  òv÷ËýûF ÿ™m�~à�;¢ “ _ÿjèýO~þÙùþQþ§þœQÿÛý;ýVc�Sü¢=V÷•ª 2s -ú8ÿ(ý»ü×ïüÝuÿнõW Äf¯Òg™Üçk$æ¸&¾ûÕm�úþþÿvÿ1 ›ô •¬rfÝ4hǵ vÈV s$8ËzÓ¿©»ÇÛ:Š{ySièÅ~Ÿªâå 1 d ú È © Šw £ h uôj¯¨»$ô~'b'Â#hªRÑ€ó¥^±ƒB«ÚÕ»ßÍà‰˜!æ&óÁWõ,Ÿ?KWÐ"{Ê$Õô&§Œ+M.vÒ, o)½å%-$iB$¨#›ó"4"I¼p…·â85uUÉ_òQtîÞsa˜®¾wñÙ ñ¿àw «˜o•`+?ófS,dÖ ° f| AkÙa~–ÉV ‡sÅç”(�&0�[*¦(§q䜵Jž FÜ™{ÀÊÅ*QKû¨†Áˆ!Ò~ÖOy?– {3 ÈË ‡ €, ‰% ñàðl n 4£ ‚ÅJ±oÍ <ÇÌ&ïm´¨ ÿV ÿ䨩O Î4 ³ × ” ÷ €\ Õq úX É ™  ôM ³Ù�ø�<Ò“è«74} n Œ lø â » Gþéí1ÿ¬ÿüÞýûù_üýøÜú÷÷©úîõïûöóñý¿ò¥ÿ,ò¸ÿ¹òµý¡ó5ûjôoù8öÆøÛø«ù¨û:ûEþ­ü¥ÿþÿdÿˆþëÿ‘�-ÿ�}ý—û® úÔøp¾öêõÏdóY�bñ|ÿ×îeþaìÃüüêdü—êÐüÇê'üuëeûÎë¼ü¤ë†þ&ì}þîøþ_òË�]ö¡WùîÎùkÒ÷) ¥õE Úó~ Fòî’ñRDòAŠó­2ôQô¾ÿóùýßñ&üšðnú‰ïù‰î˜÷íóõŸìôÞí÷ò§ïÅò,òô-öî÷û]üdÿk�“aL—åSÊÈ4ÿ¦;ýŠºû �tù€ûN÷õD÷{ï*ùbíûäíÁýïCÿFï¶ÿçîˆþîÃû5ì«øéÞõ«åöóãþòuãÔòqæ¾óîêÄõïCøó,ú¥÷*û—ù1û«øyú4õ†ùãð¼ø¢í¾÷ ë~öésõèÅô;ç‰ôUçýó èçòÓèFñžç›ïøåïîä=ïÜå´ï$éið¤ìKñ$ïiòÝñCó‘ôæó<ö¿ô}ö·õàö=öÐ÷îôøò"÷ïóõ5íômìqðÂë]í¦ë)ê“ì¸ç·í¬è˜í½ìÆë¢ï×é–îèYìuæGéæ ç'çáçŠè¶êÿèZí‡è+îèíuèøêLêÆéRímé¢ð–é÷òêÎó7êîóˆêó¸éKó2çló>ä¯òYá‹ñ’ß§ï¯ßÓìšàê&àÍéÞ™é´Úèì×Så%ÖâÔÛà ÓKá·ÔNäÍØ5érÝÿîráoôˆå,ø/ë¼ùËð™ùcó8ø{òõ•ïnò@ìoïâêêëþëfè¹ëÏå)éPäxå‰äéâaæ¾âeékãùìä8ðÅäœò¨äóçâñ§à°íÜà@êûãè…ç(èÊêTê¬í¹ìEñí”ôOí-õ íˆó6í^ò˜ímò?í‚òkëòËèöïZæªì äËèJä!æLåæÈæ4çÀç)ç³ç½åzæ²ähä¨ãoã÷âßäÈäéæFéèÍìPéyííê/í¶ìÉíŽîÐîtðžî+ò-î\óRïô÷ñ‚ôäõôùóÓ÷·òÚòÑñpí_ðéè ðrç‹ðéfðféïRç…ì"äèéâ�éÈá×édá‡ëeá†í8ãððå»òþèÁôëQöÜík÷Èð¡øîóåù‚ö6úÞø�ùYúƒ÷ÌùÐöZø‹öÆöxöîöÐö1ùk÷Pü.÷#þ‹ö„þeöƒ�ØöÀ•÷°˜÷Nâõ€�TóE�dòj�šó$ ÷õ ü` õ�7Š2ñ¨} ˆA ÈJ-OUxؘ�ç �yK�à �f ¥ÿ)‰�8vã{q ž0 vÅŸ§µ}èRäâ•‘Síļ,îlé¹a k§ ° ) ½ _ Ž@ 7S ä ± ? HßÂþ8úõáõœûóXô ›ôPœõ¬ê÷uSüQ ؽ$ j û çù—í ,À $ìÔ{Åñ@ -� »ê ‹Î ` ×   þD ;† <ª S¬WLË g * z ‰š ˜øº§k*5óFX¯È°^!5ç[l¤5ìŧ¡Õ Òò ­A ôZ Îo —B Ô­ µ G â HH ›j ¦ s#±} 5{2 ë¦çü*ŠëYÆQ Ï)ÑÄK hyâþ¶ýÿTŽÿƒ²�×ÅQb¥A&.FwB@šœÛ s¬ ÒB;ñÀÇu´¸Vmà UÍ W Ž ) + E&� ˆ’ # M æ º ä ' žÄ iô UÔsÄ#ž£7Äî–¹4šíâo;êûÝ„¤ ;o …  k ?s²>;%÷é�-�t X�ð 4 ! ƒ¿ * d J ÏïµYzÛiø[P­×ê_w X œâ l1`V)K¯„1jÙǧ�p�Vþùþgý@�'ÿ†7 L ò¿¡&‰Ó÷ÈØ Ël EÃ6t´ÿz©üÑ2ú˜¾ø�Ìø% [ûm ?�£ ÔA#åÙÖöÕ–G.þ2hüû"ý˜ÂÿñÚáæYˆSϱqaõ<ËÿÛÈýo¨û`&ùF÷D Îö’÷%løµ„ø¥ê÷›²ö¨öõÏåöKzù¸üÍçþÜåÿ1 (�=]ÿá„ýû´�Æúÿüéþÿÿg�ýë�V�¦þ·þ†ü¯ýûýòù½üªøû»ö ù`ôýô†ò”ðòñNîÃòmîÀôbñê÷ôõ»ûEûáþp�ª�Ö{®º›¨g}Ìé»&Žÿ…�†üf�âúw�]ú§�où´�‡ø«ÿ@ùûý;û.ýühýgúúýÿ÷ðýŽ÷×ûü÷ø7÷¤ô¦õ\òÃôÜñ¨ôô…õzø€ù·ýoÿë*ø- á M¥ úÿ- ý\ óú6LùR€÷TþÜõ:ú‚ô¬ö/ô…ôõuò…ö-ñ¼÷ãñù4ô«ú$÷œûWùòûÈúÙûúMûfùûÂøû6ø}ú´÷¢ùø±ù+øÇûZ÷šþòöŠ`ö’ÄôÏAôûûõ®è÷bT÷²¤óvý’í úrè[ø×æí÷Êæˆ÷)æ¿öšãögàq÷;à#ù³â5ûÇæˆý»ìäþ óþ ø‘ý£úˆüÈû¾ûÀú·û›öIü5ñ ý-í†ýë£ü7ê×ù×êìõ<ë-òÝë|ïSì¶í|ëHìOédë‘çôêêç‹êxçAê/æ êóå¬é׿®èðèžç>ìYèð1ëôîZ÷`ðŒú»ð¼ýZñ¿ÿ ñ%„ð1)ïÿîSü¹í.øgî•ôâî4ó\î óÖì–ó«ê3ö‹éÔ÷ê2÷6ëGöìôåí(ñ$î¥ï–ì˜î™ê6íÅé í˜êýî(íˆñ°ñäõ÷•ü(û%WýÍýæNý=süJfú>þ¡öùuòËô°îŸòìMñ²êð™éFïé8ïðéðXìOð¼îúï»ïçîèîíGìOí£é´îXèŒð è0ólêdõFío÷ðìùòñëúIóÑøóóûôdó‹ñŒñ ï9îÁí’êUìèë·æ”ë¦æ®ìKç=îbè&ïêÚîëîÌê†ìWé7ìjçÃí´æ"ðÄçÙó—éÝø”ë«þÙí¡ïa ¢ð wñæ…ò*$ó¨�4ó|þ±òÊý#ñXý6ïûñìqù¸ê©÷êÿô™ëoñÄíoïšïFðõð¡ñuñòþñiò³òóò*óˆóô¯ôjö\ö9ù!øû€ùüåùùüjú ÿ©ûŠý�üü¶Ù¨áÿ½_ý¼‡ù õSmñríO×ì=îWî¶�]íÔÿ:ìTþ êóünæAüå°üïæÑþ®ê…ïÉô½ tûæ ÿp ' ÀR%T“þÔÕúj÷Ÿþõ"ûLôê÷9òMö2ï‚öçëøÎëü¶î«�èò¨)÷+úW(ýAëþ¨�ÑÿõÿX‡�1ºBñüX Õ8 0Ÿ^ºqɹܢCÂ�'–þ#büYúT~ø4!÷?õ]”ó ÿ”óSÿ+ö¨“ûw¢�¶Ïè šœ2T‚¢%`€ðd—¯ëOUOr mÓ ,þ; ÁúÜ øöõ”åó(‰ó™›ðÞ¨ëÖèÙÌêÇõî=#óš ‘ø¨ yÿ –@[ ð £ä a ¾ E Ï Ç¥ . l×é©}8?V„@ þ�Õ B~ »1 ¤— Ç=XÐ}‚OŒsê<Y] V *RÄ)RÍ\‰MV™1ÃØ— }P  2ß@Ñ VâŸ]$ oÖ ü%Ð%úðï ò¶ ÷— b† ëÓsi”¿T ª t�2ÿ D†9� (üS B÷6ô›jó=-ò-“ðö2ðÉíð•žñ_BòïªòŸöòj !õ±†ûÉîÐ %šuâ±y  ÐŒ‹�hoÿ'&ÿ¿Ì�ëoÃåîÈ ¾X�sþêªýÜiþ•Ê�í´õ é”” ºT†Íqã| x! ? K« G¯ o æœ ¾ù %— ÀË *J <  Ä É J ùÅ þ�— ¿�¥ ¬�8 ³E ¦X í # µ  € × @ÖèN"øªÒ äF ×k [q 8Å:A'—ö�¢iþ?üþ™�T%‹�À)¡-—Y›Jö¯ å- › £¸ Æ* #Êø Q� ´üàdú 5ù<ø ¨÷È uø„ húSðûØ _ü üà Ûú� Lùq ï÷­ X÷Ö òøÑ «ü á�U&Óz–êɬΔ¸�ÿO^ýëðü@ñüjæü°&ýš`ýLŒýÔQý]’üΉû{Xú„ÿùø'�àöûôÁ‡óó`ðóΡõb&÷@ ù: û@ñý"�!¦w P' ¶0 P2 ! Rÿ˜ >û`l÷u¶ô´ÿ‰ó•û¨óßùHôhùdõ"ùdöÿøØöãø7÷Ÿù¯ö§úÝõéúÆöjûËùýný”��’ Í ÷ÿ’¶ýy7ûÔ Nù‹£ø)Åø’ø„1÷ØYõ þ4ôû(ôúõù‡÷–úù™ü¤úÿÙû†ý¬`ÿ"Ký³XÆ3t² îl ê !�óyþñ$þFxýW·ûÀþyùæû÷¿ù°õ™øÊó†ö}òó±ñðîð6î ðví`ïVíïÓìðìÀòí[öð]úæóþù½�Eþb-��¬þÂý<ü_ü³úIüúnüûNüŠúÇûpùYúä÷…ø¥ô¹öòsôØð·ò“ï§òvíóRëŽò`ë:òËìüñ¯íñUíÓðOëUòÇégõZë•ù÷ï•ýQöçþý¸ý 0ütúÇ%ù_–øÊý§÷àú±öûøFöq÷4öööçö(õÆø4óêù,ñéúYðÖü ð�‡ð ŽògõT÷#Äøþ#úÒýú�fünÿäýä�ƒþfóþ’™þ Ïü•—úIù— `ù ãùK ûùÏQù«õ÷*cõ€ÿ±ñ‹ûSîm÷«ìËóõì™ñBî7òÿïWô2òšö³õOù®ùÛüÌü]ÿFÿ��Ø�Ý�X#yÆvà�î«ýí¾ü6�ÚýŸûÿpù_�çøÿXø0üA÷ÂùÏõ­÷RõSõJõ"ó7óÑñ7ðuñ˜ìEñÌèñzæ óŸälõPä\øbåwû¼çæý*íPÿwõHÿÚü!þþ�Äû68øxÿcôpú&ñýó€ïtíëîêœî˜êWîÖí·îéð‰ïéò©ïXôï&õîìôeîôZîÌóõí@ó íWñ,íkîVïvìeòDî4õ_ôÞöHüM÷¬xö8Rô;WñÉåîhòížÿ îþBî˜ü™îü¥ï‰üªñ2ýôÖýÙõ÷üö û~ö!ú\öùö6ùàöñøµ÷@øWù÷–úüõúÀõ}úÕõÁû­ö:ýørýŒøYýùxý¼úþÑü^–ÿî-/ÄÖ/ÿ–µü+àú¨øÁôó;�£ð1þƒìÜü_çºü¥ãþ!á×ÿià/ã3åæä—éB�í›Œï¼ eðŠ ññ: !ô7  ÷¹ Ýùí ød¶ó© ï«Fì©Rì¡tí¿mî¥îß»ìEvëCéU�èTÿEèÈþlçÛþÑæÑÿÔæåeç“1êÀ÷î€Åó ¬ø <üz Šýé óýp ný÷ûáû´û÷ÿâü �ÀýV�_þ2äþuBÿÕý¥´ùådõòP‰ñ‰�Èò·þ…õSý?÷’ýæ÷yÿaù³ü›�_ ýº Å]=©�X*þ›Åý¸gý?çü.yûç ù¥ TøTøx2÷*âôomòuÍðã Øð¹ ©ñ³ÑòXõó~ŸôŸ�õ _õQãöœ …ûÈç�\'  ™˜ Úo SÓ ® ¬b 6< I� £‹¦¢ÃŸ�8þò ýäüÊVý¼‹þ”äÿîÚ�*k �åÛÜ$� ÊpF Ü ™»Q}o  . q{šè Éà6 ?‡ de ü ô»�·qÿ9þ?þÑüdýZý¬üãýoü~þëý�g ß à É b Ù ø " `ÜÁ C´ÙÝU(±-��äûý³öbønòô ðeòÓïùò©ð®ô7ñ”öoñÊö}ñ¡õ‹ñµôúò�õ!öaøAùŒüÊûêÿ&þwÿç¡ÿ, rÿj Œþo Cý8ïûzPúZ«øT�L÷µþùõíþšô)Åó/âó°âô ßö” 6ù ¼úÙ ÎûÖ jüŠ–üËüáåüþýa«ýà®þÍ �[‡ž %0_¨O͆´ó\9 x§ �ô ;ÿb¯þª�*ÿûüÌ�¶ûÿmýL/}/  í “ r ê q ( ³ó 3REq¾n›M"ý†-ä½Á~ ó�ú:þÓbûyKù>ÃöÏó†gòpñ¨yðÝ�Uñj�àòŠ�.óÅ+óÄÉó1êô 4øz ‹þ “ P #Û �Ašw‡�ÍÍ�×H�¿�…�RþVÞûa�¡ùPÿ­÷¾þ2÷Ùþ@øÙ�Gù’ÊùUú'®û‘ÿcý•ÿtþ¿ÿ.�` ‚à €—wo–FC�] ôþ¢ 5þî­ýnyý?²ý†-ýü#û›çùxùÊûù_ ûî§üwšþ;Žÿ¼ëþÎþšLþ\&�‚¨¿õQY(¾! ùs = $ J a © K Ò Ü €õ 5m Ša T]kü_¶G^xB�—sÿÈÿJw/4 *7”wd GNÙ°Lq`«�þ TÿT Aþþäåþ Gÿ4nþù³ü!—ú;  ø  |÷W½÷üGùÎÇúì žûD ‡ü Õýy–ÿ#µ˜„·žÒ”vÿA–úÅ/ö6ðó¶ ôñ·õŠÚ÷¶¼ùX @úN  ø! °õ5 Ðòª {ð íîÇ ÔíÉ"í|{í™òî§cñ›ôm%ù5 6þz²@$Ï¡°#á U0 Ö€ («  0�ûþýq üÙ ÈúR úÛÖùÊ]úk ’ûƒ Üü, ý‹ Süá üÈsü¹¤ý¡>ÿ�7` â hZ Šû ,K Ó“ • ‘½ & ;ÿ Ûüò úV ø »÷Òø„`ù]û5�@ý|ÿ8þ»ÿ$þÔ¿ý-‡ýq ²ýmÞýÉ8þæ3ÿóÿA«ÿ²¾þé §ý±8ýdfý–�Šý„ÿ-þV�¡ÿÑ.>ƒ½�!z�Ê�8ýÛÃù•4÷£�úõ>ÿÊö)þ ùøþæü”û�`e¯ Í& “ÄÊ­ ¦ñ ?[Hýý›ùb÷ã'ø›uúÀkûÚùáÿ²÷­þgõ&ý>ò"ü!ðçûÍðçûkóû×õóú÷UûÌö±ýïõ›Áõá˜÷ƒ üæ $@ lËøÿÐ2ýþYú7ü[øUú’÷ù[÷’øh÷ÈøQøÚøºú.øpü:÷.ûföÜ÷ö)õ‹öðõØ÷†ù´ùªüû$ýkûûûdø¹ûŸõ"ûÌó9úüòsùŽòòøYô ù²÷ ú~ùû½úÆû‚üåúhüúIú›ù!÷þù°õfûuöþ6÷Ò� ø‘øó›÷ ‘õ­£ò¨ð¦Žîqúí¾ï‘qñƒôaj÷ùƒ´ú—ý! ­þm þþ}ùHgñð'êLæMå†Pæ–=é¯ðëM�ìxÿ¾éÈþ‹åÓýXâ£ü´àÁûà¨ûàÜüEáaÿnäð‡éÜîO\ñÛõw`øKøÉôëü3ðOùËët÷ èüöwçöéÕõÚëíõMîpöîîö«îfõ‘îòàì}îSêŽí»èîîtéDð|êLñëNòÛì¦óŸïqõ�óÐö§ö]÷úÐö’þŸõÄ�¾ó¶þHñQújïÊõ²îÚñjïKðòüð‚õTò:ø‚ôúÿöÕûøý‚øÍüEùµûyúÈúü¥ú'þ„ûÿ|ý<þK�µý.ýe¶üEÂüT�Eüµý}û/ü¾ü[û]�ÑûØý�³?C;rþ7ú2¤õd©ón‘ó,�ÿôëý«öéü¢öÆü1ööü¡õxýÃóuþäñ?ÿ†ðpÿ ïÍÿ•îo�Rð±£ó 5øŠ=üìýýLý^þ û0ûùï÷úö‚õ…ñ~ô@ìcô€ê°ôiëözî¸øòóûù2üÏûPü†úíû*÷üûÉôvü›óüGó úAó úèóùú†õßü©÷�ÿJûE�²ÿ¾ÿÑ[ýESúç�½ö~þoò§ûðùöÞð,ó=óÛò±õ.õ8øúøÍúÄü>üBþ¥ûýùjúÄõéökóeò~òUîósìôíäõï‡öñ÷öIò6øžòû¼óšþ§õ 9ø zúêÎúK�öø°ý$öåúvó8ù¦ñÑøÔï×ø^î:øBïX÷dñ”öó'õšòÒóÜðÊóžðZõ¾ò�øŒõCûÌöûýŠ÷6ÿ%øSÿ ÷Yþ¸õÀü£ôXû óÊù™óQøkôB÷ õÚõÃôõ½ôêõ†ôw÷]ôçøOöúXù7ü'üâüÿ ýkýÉ�ïücÿtû]ýNúûFúDùòû½÷sÿ:øB‰ûÿµjët­ªƒ•¦E€�]ÿ,çýËpü´Vü°#ý{\þŽ+�'® ûþšþ—ú´üÏõÄüJóÇþ±ó-ö²Ëùê"ýæ ›ÿo2#ÓÜ’9ÝÜŠG·£²· Ì�: =þ±ÖûDJûz¯üypÿV�� ÿe·þ¬�7þã�‘ýMÀü£xýY Ùÿ ÷x ä@  Ò ; … ( è ‰ §   u@6Cq�€ÿ`H�¡[` Ø(y!I#ñ]ý¿·  ÿ 2= « ñb ØÐ ùÄ ¯Ý $? ™X ŠC Y IL¸B &ª  » ýíMô ¾#  {Û QǦeQût b• ¿ñ d )ÊuL¥Žf*±cÚR 8þ vu ùT &> Á¬ ¼žš ÛÉ6ÉçbÖã+ÁÓ °�Y 1�© è� m/ ‰© 4 d6³%Ê«m Ã:£é9¥™^‚ÒSº Åé I‡ ¥< ½þSñ4�ÝOþïíü—küó¡ü“Ûý¬�”ñ\ Ë)£ÿ^“ü}íùV'÷ó õ Òô÷±úó€þ£]Êî7¯ý²pùLÛõçô* ô^J÷Ñúõëþjžæ¿ñSîÿà„ý|“ûF û¸ ïû7 ˆýÞ +�‡øÊÉåm¢Š™”\'!Äÿ’ªýL lü7«ü ,þÿ³�øþxÛ�=!Ñ ^ ô Ü$ Êb2üI–=xÚ ˜ • s}ÊáEõ3CüçÒ0 �“=ÿLñþ¦(þ¶ûü·ÿ„ü§þµülþæýþ“�#þ¶‰ÿú�à$±²$×þ 7íZŽãø¨mŸ¨Ä]¯¨÷Òa¸lÙCä H ‰ ›�ijÿJéþW ÿ¸ÿ:î�’Þ †`ÂnžÊôo£-ÿ‹ýûtZù¬ö-…ô¶ó€ó>ôPþö¤û÷;ùMöÚø õºúÊõ¯ýÜ÷üDú­‹ý± *Ò¦;ްF gµ~þGýRù.ù õ÷÷óÊùüò2þõtøßüX4ÿc—rPA齨yþq�`ûTþ,ùêûYø’ù‡ùZ÷šü‹õ>�Òõk–øÐüŒÎþãõÿ®ÿÙþèûýZùûù“øoúôõLü:ô ýæó üKóqú@ò¯ø€ñÅöíðõöðOô˜ñ¸óÑñnò®ð¡ðÞí>ïNê—î„æ-ïÌãÐðYä¦ò€çÏóºëâó¸îÜótï€ôïö¬ï©ùÅð·ûBòüvò£û:ñÀúUïø$í–ô´ê2òðèNð>çšîåqíhämì$å×ë/åìäKì-ãõë$äœë|å‡ìcæ°îƒè£ðoë‹ñbíåñHífñçëvï]èuìêäúènãfå÷á/â@áñß â‚ߢã‰àêåLâŽèFä³êÀåªìç˜íèÿí[è'îè.îZçˆîžæ'îçgíMéBíPìmíïRî‡ñNð©ó©ñ õ¯ò˜ô3ó©ñ¹ñÒívî}ê ëyèéØçé\è ê2êþëþìßïnï-ó˜ðöó#ñ­ó6ññó}ðOôNï\óêíòãì³ð`ì¸îì¼ìBîéê–ñGê¨õÄêRú»ëæý¬ìÿ ížþ-íÃýAíëü^í¡üöì§ýzìÿºë/�±ëœ�Qì�Ïêþ‚è™û�çî÷ÃääóbàðÜgíÚ‘ìëØ7íl×ÃîZ×]ñ'Ù„ôïÛé÷gàqú€äûñåPúEåÇøêãíö‘â@õágôèÞÌóAÝóÌÛ¹òÈÙ?ó)ÙTôHÙ«ôdÚùóPÝóöàÕòLäŒó5ç¢ôvéiôÛêûòŒê›òrèOôÈçÀ÷5ê$ü¸íºÿ—ð×�[ò¸ÿócýŽòúÙð?÷×îô ìâñévñæ€óŒåpö,çdø>ê.ú¾ìüï üÐò?úrõ¹øgõgøÉó>ùòAú�òlûÄñÍüÈò¤þ+ôå�õ/XõnßõÈw÷ÌMøL ‡÷Ë óõå åó• KóÀ fô ¹õË îöi ÷Iõ÷žìøÊßùY ~úú úŽ „÷¶ ô0 ûðx "ïÊ ?ï,ñ¦¼óìˆö{Nú þÝÀQ GúÚþ(ýuüûFŸùb M÷ž{õ'jôdýôïêö Iú¼ Ôý|,à=—/ÓÇÁƒ v M�NÐÿìPí Óâ cX ÔV Ÿ ¨ ä Xu @ýTòh÷è é�uÊ�'×§!‚ ʼn  8 ' vÃËŠÀ öÌá› î¯ 'v „õ(\”Ì;Ô þ øy5·�)% µ B+ 1 Q = Û … 4Q ÷Ù â· où hR‹£óݸ¸ðų §ô( tO „8 �VpÿÄ�4(1!po$¸V'— µ(N ¸'Ì ¸%é­#™!F˜©È�ÙŽ�ÝÀŽÅ' $ó À(i)XE'}t&vx%×;$ÿ ‰$Õ ?%› s%ª &† ‚&3 Ý$é ±$}¯$¯ x"Œ ¼´¨ëŸ:ÿPŸý¤zþm*ík~}› ÏC š–9C=ñ 2‹æ€€Úí»õ�Å9ÿIþ”EþÞ”þ< ¤ÿþ ¹�¼ ´�1 °ÿî ~þ¼ HþŬÿÑyZ?ù Úš y!Ž .‘l‰ºþtLú[¯÷BàõFô»Çò)›ò8&ôIâ÷Œ®üê�`6(¡Ó†�ŠÿSþõ“ÿÞñuÄ1ÕåJ*¡ú†þÍ ©û ¢ùÄ @ù½0ú´ü¹\Äð^¾ „˜"%¿”Z†Šegãë�“ å“ m<) ÿÁ¡ïn|eüåqéÅ¿ULJ b ºþ zô Öí   ¢æ ÁÑ tî Î¥y†¼�›ãÿm#ÿ_˜þÌ1ÿv E7õùŸªŒ êJ' á@ ½{z���öÿéûÿ¿ø üpöûøõ™ö5õ.ö.÷•øüúEü÷þÿïÞ�À™W1¬þ�_üÓþüÿ³ýÄÊ�ƒKJ Ôª Ò7 Ï�ðœþ*/üÿ„ùHüx÷ˆûöQü‚÷#ý{ú´ý›ýfÿ\ÿë«�=ØlúÕò�áþ€ÿÿ]qýåýõøÿ^5ÍŸ ¿Œ P÷ÿ^Ðú~ýõäùœñ3ø‹ð¸÷ñÓöóuõâôlôŠöìó„÷¶óŒøLóaùJó¥÷îóôÐôSðFõªì½ô.êtó¿êhòÆìËòiîQôPð2öEòæ÷.ô°ø÷´÷GùõfùìñŒ÷ðó²ïï ðˆìDð?ëÔïbìCï>î¸ïÒîñîºòÚíºôàîïõ ðXõÊò ó+ôVïEó~ë\ñKé{ïÊè`íìèìCémì}éíFéÏí¡è¾í5èÐí†è¶î^éìîGê<î\êjíDé×ê"èkè:çíç&æ çaåWå*å>åµå~æÀæ7è‹ç×é„ç3êoæé´ä¤æÞâGäwá@ãáâäòã è1çLë+é%í‹éLì±èúéãçÝæìç´ã"è âœè§â‰è.äPçGåóå¶åRå¸åÖå æåæ+æ‹èåƒëKä”î§äðûä˜ñ{åÅñIæ‘ñ¨ç»ñåè¾òñéºôeëˆ÷Jìú~ë´úüéHùŽè÷“æiôƒã©ñ.ß>ïÜpí8ÛèìÛ!î¯ÝUñÖá¬õ:æú×éíý£ìÁ�|íqí¬ì…ê øè1ÿÓègý‚éfüÞéjü9êþ™êÉ�ìlÚð;;õ+ñöz^öxô¤oñ”ïæìv¼êü Åéq ?êÁ =ë÷ë¥ í' Bï¶ èïY8ðy|ï«N픳ê�Tè�qç(ÐçWcèìc鮲êjBëÉ5ì8 kí› •í£ Fî0 äîÁîÚí;%ëàAé‹�çŸþüä`ýÊã|ü›â;ü¿à ýlßbþDàËÿâD åRñèÀ UïBµôRÂ÷$þøR ¤÷F Gõ»ô%Zôy÷óz�òäÿÚðÀÿÒð�„ðÌ�«ñ†áôßAù+õþÎT<^F¯„‹Ý»yW�w7ŠM††€‰ Îÿu ý! gúñ ëø‰¼ù¼�ðûýBþ=û¼�Gû?óý‹°_š-e”� ÈüÿÃø¨ Kö×çõ¼öŸþV÷ÏúøÂ÷çù¶øÈû8ý.þ<Ä�² †m¨³óh Q£ŽÿãÿyÿHý£)ýD7ý­Âû7NúÆŠøw–öx�õ¿ÿÿó9�®óß¿óìXôÑÅô 'öl ÇùÇNýê ‹ÿ: =�¨oþcˆûh ùÐøÚ¬ø&½ù-Ûú›µúó�ˆùá�>ùʇùýù7Šû7óü<fþy›ÿÿWÿVþÿûý�ÿ­�ø M‘áÄ ¶¯ i º™¼�"aÿZ%ÿU÷ÿñ Ö�ð Ž- ¤ éú Ú Kîc\ÔS#DvhÍÄÑ š: ‰P u Ó °å ôÿ < Ú O´ –™ Õ—h̵ ¯å ù À ' Q I M# ö% < e q í G ° 7 O 2 ÿ `Pg“Å{O rµ 0h^ÐÎÄ´R ˜O ê ñ’ \ ó© 4?c¸TPN§e4e *Ô’ /C OË ¯7 îU uF Ÿ' j@ V� þÌDv&Qæ”,\£ ¦ü 5Y >–ÄHDεU°Àþrpüx úÈ÷´ön‰õó{ö²Åø|¡ûd~þkÙ�û=I£0)~`–p�bôþ[Ýûà ”÷+ $ô1­ò=‹óö4ö; ¦ùâ ý&Òÿ5&Wë�|ž�2þ�ôláOŠˆOŠ{“�‚ÿýhƒû=«ø Ñõ; EôÐ ŒôF öb  øËÂûËrþ¯ÿÐÎþÆ”üDgúKlù’"ùO£øë"øø© wøÀ èùà ™ûs@ü üŸKûåúhëú µü¾Cÿÿ™h«àFU˜�”ëýÎ[ûâhù?Ö÷°ªöº×õ•Ÿõ„ -ö84÷ :øfšù¤ûz7ý/eý¡ ªü# _ü‹ LýÖ óÿV œ~ ¦ « ZH ™—¿ýrXù8�êõüRô+ù ôñöõzô¬öÑò³ø4ó»úô”ûqõüoöÍý·ù(�ôþ²D‘ 2�øùýƒÕú“ý÷dø(õNõøó˜ôkó˜õ·ò³öÔñdö!ñG÷ðñ*úåôÂýëøªÙü“ÿQ·�hbÈØ žƒØ�ëýþmþµýþÉ �' �ÚN[‚�s ÿP rýÿû¤ÿˆû?ý0üzüQýnüŠþ0þ¬ÿ >�)†�Žh� Öÿq ¶ÿ{ -� ›�og�ÙûBÿ“õäýEð:ýîÅý/îþÿð< õ!"û–Šÿ‘×ÿEuý6¢ùÈõåò•wóQôm�wóqÿLñÅýOïÈû&ïÌùÊî1øâìû÷€ë@ùBë¾û3êQÿsè•^èš4ém ì÷ ›ðs YôxÑõ<pô+þgñQû`î›úÃíðúûîúúiïBûÖîdü‡îùýJîþþÙíHÿ¹íEÿuígÿëìÓÿCíçÿ„îÿšî•ýsí£ü¹ìrü‘íÅüôï=ýÓòIý¼õOý ù®üRûÒúûˆø;ù\öWö{ô‰ò|ò�ïÅðBìËï‰ê”î[éÜìèåëièíWë ð¨ï¡ó7ôïö‹÷eù@øú÷ ù4÷¼÷÷Õö‰öbövõØö†ô]øíôrú·öýÂ÷tÿÿ÷Úÿéöxþùó:ü»ðÒùcíÑ÷€êödé´ô éœô}ê°õËìD÷(ï›øÍî¹øìx÷:çùõÍá\ôVÞ‡óÝ´ôîÝæözàñø§ãŸúgæýûÛè¹ü¥ë0ý<î_ý¬ï±ü:ïûíåùvê÷VçéóCä–ñGâõðìá*òæãõ[çÝøèê›üâí“ÿÿï8ñÌñAÿ™ñAü¦ï·øíêõLë¥ô*ëWôí>õZï6÷Uðùœð$úñú2òKùóØøòÄø~ïùþì–ù#ìüù)íªúAïûùñ™úÚôŒù£õEø¼ôW÷Œóe÷Oòe÷Nñ®ö'ðÖôwîJò£ì@ðþëï¾ëåï ìîòÝí÷ðßúUó?ýüôõýõ@ý5óøûðúîBø¥ë÷ êö éõéVôcénôê7õ êúöìè ùéoú=éAû êÿû»ì8ý7ñ­þÈö�³ùǧú’PüB1þd³þØ *þ¹ 7ýF [ú9åõR³ñšý—îQøí¤ô^îkó¬òãôˆøÑøGþÆýN%ѬPS[í�¦þÑüÄ�Tûy�Ÿú�üJ�=�¡�ïb$ª‚ Ò   Œ¸ÿýLÕû eûIÀüw�»þŒ�@�D˜��§ÿÚÿ7þú�Ýý§ÿüßî??"ëx�üŠÿÀ�„ÅŽq jÔ Ö £ h+ ) ¼1 7Û v ÒØ Q¢ ø pDÝÿo¿ýû�oû›�–øÁ ÷Ns÷²‚øVûÖ Éÿ¢ Aj b ¤> º ò ’ t €á«KM¸EKÿµÿpýTýüü´û~ýÉû þ”ý8ÿ&„ž` wöØ©Ì ¢ìˆ ë– %Ç yÖ ‡š À¢ –; ø ]>  l,>o ²þXÝ� ê*í 9ôöüÙÄQ»k L† Å ¡æ )  £í # A / x–AülCû„äVåoÁsïåËå%YøÃ¬È §  Z‘ { ­ÿ¯ Lÿ È�f ‘bÆ‹u +¯ëŸÿú"Øå­¥ûèÈ vß >.·�wå@Ä:0KÚ f óoýÉVNl 7ì ¿ñÎ�€ÿˆÍþ”ÿ& lŽJô¬Yw??Jÿú Øü> ºúñ >ùa³ø÷ ù’Súáæûþ·çÿÙ�ël× p•€2d³K‘�{D�[í�L ê_‡«Be { ó2 × ÿd( ° ™„Âa‹-‚Ò™-Öœ\þ’YûÂ�—úmÿaûµÿü{�6þ*'�z†I� ÿ½ ÃþÌ Ïþ‡#ÿ1“ÿÇþ»ýþý˜û”û›úGûû¶üaü£�Ïý—¤ÿÆ ì�: ¼�ì [ÿ]Ûý5ÅüŠ�Yüè�»ü÷µýf¬þÅ ÿ¨²þõâý>ý($ü‘ YúË øwÜõ{°ô3™ô)íô@Yõ´?õÐÌôõ7&ö$ª÷;ù®•ú?Ëú¦áù_øjÿ,öûNõø³õÆ÷A÷IúŸùIýFü!�#þ œþWþ°¡ýû?÷QýÉógùÔðiõ|î¤ñßìãîì>íí·î¿îpò)ðàö6ñ‚úEò¢ýpó�!õƒ÷Õ£ùÝøú–µû‹ü%ªýë´þð—þ‹oý*_ûiÿ&ùÙûí÷Ú÷V÷®ô6÷óÆ÷ðòÓøÂôgùëøsùñý ú£û°‹ý•åþc"ÿ£ƒþ‘%þ;7þ]\þ³þaßüÑêú˜Šù}­ù9ÿñúûü2üåü¶üQþü¦ÿ‰ú�ù(�ºø�Áù¶�ûÕ¡ýèˆÿXP�ßÿ‹�üpø{÷u�Î÷S�óø‘ÿiú‘ý8û;û´ú\ùCøÛ÷õÝö–òÒö=ñ²÷üï`ù$îúÛìîú±ìZûí¾ûï û;ñFûòØúkñÐùÛïQ÷eíóêîzç„ê'ä8é9áêåàXì´ãîàç£ðæëâòYî+õÓï>÷ëñSø¨óøŸódöUòJóÔïPðéëOîFéÂìAé^ëêê¤ëDê³í<êaïDêˆð©êûñöëÇóôízõ\ð&øöòØúkõ#ý ÷ÿ;ø”ÿ^ùtÿWúÎÿÏûr�'ý»ý úýàáýįüxûÙ­ùZøšý³öúõõù‹öÈø¥øµù…ûü0þÜýß�;ÿÑŒªÜ;Åþ¬býgý‡tüÂû}ù øÄÿ#÷ý›÷ƒû¯ùÅú‰üÛúÿÖùw�Æ÷g�ëõ\ÿ²ô‚ýYô¾ú‡õŠøøÞ÷ãùø-ù2øaöã÷!óÉ÷ãîq÷hêö!çËõíå&õ®æ/õ¨èŸöÏêù<íûið¦üSóÈý¤õ¥þ0ö+ÿŒõ[ÿzôÿ/òðýQïbü í(ûmënúëú¢íøùLòRùöñ÷”÷¶ö÷Jö7ø`öú=öûêõ=úrö›ø”÷ê÷\ø¡øÃøUú�ùäûÎùSý8ûyÿÞüû�ÿ0ÞõãnA…�FÿÞÿ§þvþÅþëüHý^û§ûãù¹ù%ù9ötùÅó€úpôLüŽö ÿùÓ`ýËX˜6år­ £‡ ?O ¹o ô¬ úê ÷ ׫ ÒÒ@Š, þåõúIùiâù†‚üž Òþ ÃÿÖ �í ìÿx ×ÿn Ôÿ¤ µÿó Pÿ$ –ÿR '[ /H ú XY½>Q†n>Z�$ÿ@ýˆúõö) Yõ} B÷„ Gû Kÿ f 館JJ7 5{ 3ÿ küË #ûì Žûa [þv ;ð’Ð$œMùt¨ ” 7aÄþôûœ¸ùÂiù /ûsæýN� t å* À�ú ��Käÿ†¿ÿãNÿ¨¹ÿGÊV)å¦ç()7ŸkŽÒ¦ñ�£��ÿ(�]ý$Çúùù�]øªÿøCþK÷ýaö¬û³ö®ù|øø]úÓ÷çûù¥ýïü¶ÿµ:Ù­ u Õ ý5#€5¹ Õ0 ¢+Ý ©#��îåü12û6*ûHÈûaþÔ N£\O¨ Ñ ”í /Br ÔeSv «W mI ˆZ zñ Õ Í ¶ q C @ · [ B ÉD ]Ì ‹ÿrÿqFÎ`¶ `¬ và 1F/S~ûMz&Ä�å�]ÎÎæu%Ð�¼b�'’�µøª�оÿéþ´�êþÿÿþ7ÿA�{þÂÙýw£üætú9b÷ÿþÑô”ù„óÿôófó}õöôÜø>øåürüêÿÐ�<Ra_Òôæ£�bø�£…Gý£�°øÖýEõ.úKó!øCóÜ÷èôÍø÷‘úú¥û®ûìúÄüÿùBýTù{ýùýwúóûýWúc�ù)ÿø¹gúl€ý£ìóÅCâ TÅ + ? Û ÿ ¹ O/ ëá ²ý8 íú)[úÒeû EývÎÿi Ff ä´+&™‚G�_ÿ\*ÿŽè�ˆ K² 1 "è æ— o' ŒÊ À˜ ß  ^ ¹ Î @ ¹ £ ˜ XU è(W�9ÿ×þ(þþGþ«ü¸þÐúSýƒùûÈøîù•ø!ùrø­ønøŽøùoù*û/ûcþ9ý±©þJ.ÿFŠþm=ý‚üü«åü†…û�où(ýN÷úBõRùÕòêø—ï»ø6îføwï¡øròNùfö‰ùƒùùÑû¯÷ªüµö(üJ÷ý¦øþþrúG�ðüÄ�¾ÿxJöÐì Â�› ýË !øÎ nóa HðÒàîŸøî˜þðÜüZñµü{ñý›ðÝýéï¸þxð²�úñ‘,óEªó¸óèô|-õ#æö*ù>”ûÿýB�“"ˆ (Y A� Hþ+ ³ú!?ö%òõú$ïUõâí©ñžî1ðCð¿ò ò¨÷öóïüJõDõüÄóÎÿòýñ§úò8øÔó÷öA÷.øAøú{ønûÆ÷aü<÷JýƒöˆýõöÜü7÷Gû§ö«ø{ö®õVõåò>ó"ñNñËðBñ´ñxóôÑ÷vöiýA÷ä�mörô¯ÑòAÿò„üøñ[û‚òÿûSó‡ýhôÙþæõÛÿp÷t�øïö×íôï-óøÿæñüüøðõú ñ§ù òú­òjüuòÝýÅñºüÍðµúœïÞø‰î£÷>îïöï„ö›ða÷Dò±øyóZúpôóûýõ©ü­÷MýNù:þ†úÃÿ}û2üîzü²mü …ûþ5ú$û8ùý÷€øøõº÷2ôÓö–ñêôÄîéñ+ë9ï¿çÞíßæÒíèç«îeê$ð íÆñï×óËð"÷óYû‹ö%ÿCúô¹ý ÿ¶xþ3ûü!‰û£ûA7úÎG÷ þmò`ú¿ì#ø”ç”÷äå(ø/èúòìüüó�±ù#n�„#õˆ–'[`vÐ>RÚ M –ݪf´0¼ÎŽ5 |ž�l jÿ,”û)_ùƒ/úß|ý÷R0H¸ ÷ Û % ãf˜ñ6Þ�“Ûý¬û1[ùñ}øAáùM©ûpýhÿë´Þ*�œCülÛø` ­öû _õk õ#¡õ¥ö|ÿ\÷çúMöF÷¶ó_õgñSõ:ï÷ñíŽú îpÿùñå9ö_ yù Hûò kû‰ Šû¦ 9üG ÃüZý?žü-äúM>øD3õ#{óèóJ õó�<ø»ÿnú þ=ûýýoü­ýÃþ¿ýÕ�ÿþh¯³w˜ª ¾ yô} W–1à=»à1Ã]:Rf #7 Ž4Ù ´DJP–˜d#ƒ%>  åC oN ÕÈ Ä  ‡ Ð    µ s 5^ £þ š £P±D@' ±® áë š3 Q ª�{ Çýüý´ýZ�Òývþ¹ý2ý]ýxü#üuüMûðüBûþ„û8�ÚûzØýÕµ‚ Üþ4} ¦!Âé�ˆ��^ü(�âùÁ�ø>ûöd÷Ê�røhˆø¦zørþùi‘û«Þû³ýÔžÿÞ:þ+ º• Ö - ¢ B ? „   ñ K§ %3 « ¯ è m § Œ¶­¯ã#è˜ëõd!Ž|b  ¶Ô r¼ dNu`AÃåS¦ xËÚ°T'““ h  h )YEx…�kýtÿMú­þÿö¥þÝõ»þVøÆþêûîþÂÿvþ„«ýwGýýº˜ýó-ÿÔ¢l‰°¢º!ÎTÆ��À»þÈ9þœ�­ýmÿÏúþv÷Ùü‹ôküRóÒü‰ô´ý÷FþûÔý˜þ¾üïûjÿûÓLüYüŸeü ü©û- ú :ùY�Iøìþ;øYÿ|ùŸ�^û£tüôTüW£ûtÿ$û¥ývúœý¬ù/ýúøŽü”÷(ügõ’ú ó|÷uñÊó$ñ0ò¹ñóxò]õKó/ø¼ô>ûìöÞþ˜ù‡’ü…bÿ"IX'õ�üÿ›ýaÿ]úUü÷ù*óÏöåïúôøídóüëñ˜éáïç7ïßåÖï8çúñCê³ôóíòøJñ*ýzóJ�›ô5Šõ\åöApøè ½ù @úˆ úöÇùd³øhæö1�&õ7ýló=ú“ñ{øÏï÷Šîþõ¨îÃö¶ð½ùiôöü5ùÁÿ©ý'Ï�? š ‰[ _�† ñþ«dýª(üh ¢ûq :ü©Aý±�þìþ~ÿ1þÿA�ߊD˜. ¯œ T¢wÿ½oü}þÒúQúSú“ø‚ú ùÊúMûôú^þPûäçûü• ñü7 #ý ý±#üIú 9øûÿÖöñþ<öþùö×ÿÖø Uú“ú²5ú@~ùÿ‰ø²ü›÷;ûöú]ô½÷ó»õ òõ>ñ&ôÜð„óGñôJóÛô™ö“õ$úñöüüøÔþÁøg�ÃùÙµúíKûåÒüÙöýðüIDûÙþsø…ù_ô˜ô*ðþðÛì‚ï©ë“ïµìAð ð¢ð+õÓðTùò‘û[ô¹ý ÷1ÿ²ù°�Ìú íúÚúùéúéûhÎû‚ÿRþùýüþhw�>â¨XÈjoü£ÿøüàÿ®úoüø·øÜö‹õ öÞóºõ×ó»õ…ô[öMöQ÷çø­ø8û­ùâüçùqý‘ùÀýù§þùŽÿ‰ùSÿ¦úHÿßûF�¡ü¶�ý �Wý0ÿ©ýÿýûýküËý�ûüÙøeú2õxøÞðàö‘íSõÀëôPìžóûî#ó:ñ±òIò/ó–òôQò·ôZòÿôþñ¦õçð¹öœïÍ÷¹îLøðïøòŸ÷£óK÷ÚôsöHö£ô•öeòšôþïûðDîìÚí·çTî#æ«ïèñüêmóuípõ²ï÷ñ÷÷+ñøðøï¼ø|îÞùµî­úïtúóïaùð»ø_ðõødñzúïóýAøßÿñýE‹£�ÓVþ†Cûdüùõ÷ã÷åõ’÷*õk÷õõ÷…÷£öéøêõWù õnùföwû«÷áþÜø«?ùòøÏ@ùéóú¼Gþlö¶¢ ÷eù Mv Gß V º– A©�ü�|þ}ûýÁõûüžòáýÖò�Ôô*(÷g·ù |üú [ÿ/ ±� Ùÿn çþr çý² Âû…7úÛ˜ú‚¬ûI]ýV”ÿtÌ� ,��íCýâ£ú'ø¿&õ3àòî'óœ²õmø©4ûâ§ýO CÿÑ F�Ÿ è�ô µa $k ,— v $Á AØPˤIÜ Š tVê^ / ' û ´= ËÁ } > ¶ p  ìlª>º7Ã[> º l ò ² ˜ ê  ­û ò·ûøï A7 O A㸠‡  ë Óh ðKþ ÷üÃ?ýgbýLMü„„ûÑlüÖ0ÿ²d –å É é½ 2g 8 sè…¿ К  a‹Ïn. 1¾Âþ§)ú¼�ö˜Món©óçòöüûÈ­ÿy‹ø¤Ëð „ = ãö Z%¥ån,r® ù ‰ Ü ª ¹Y&i‡kõ*ã&¬3Š "æ YZ Ç Tb ¹ «Î ^ ��ã þ3 þÈ cþÉZÿÔŸSöãCÝÖR· Gº MË *åeq1Þ`º­ ŠëÊÄù|ÿ¬Hü‡vø �Êô%üÑñˆùÛï<øcïkøðúVñü ó›üjõû ø~ùûŽ÷ÕþK÷Âüø=àúgüÏnýkþÀývúSüG÷Ÿúïôëù}ó#ú7óàûYó]ÿóç�Šò·�ôñ $òŠ2óøaô.õt­õ‰^ö½²÷¡ùñhû’ ý ¸þxÄÿ6ÿ³§ü’;ùl:öœ:ôw3ó! úò¢ ô oöÒ ?ùK àûþ ÝýZÿ+£ÿºHÿ@þ™ ý¥ èûš #û:4û’4ü36ýc Mþm ŸÿŒ ò�Û ˜œ WUe~1 ‚ ¦áª¡TSÿÓ�þ��òý®þ=þ=ý þúûýéúü,úAû”ùúõøLø«øêõèøÝóaùióÚùÓôŽúüö´ûîø ý¥ú þ üþ¹üý(ügûÅûêùÿû‡ùüIú-üÝú ýjúý†ùîüø9ü¹õPúÖóÏ÷ óöWòŠöÉñÊöØñq÷4òyøvò[ùÂòŸú¨ó‘üÕõvþ?ùr�¸ü ÿrÿ‹Kþþ ü%™ùWŠ÷xDöQ�öÿ®öŽÿ×÷+�Üø�|ùòýWúhûûòùþüÚùÎý7ü³ý¡ÿ®ýk™ý.Šý-AþÿÆzÿ­×ÿòÿ—Žþ¤ûìÿø¶ýÞõ°û©óMù$òBöoñÖóØñ#ò+ó…ñèôÂñ÷Ãòuùó€û]ôùû öáúŸö$ùiõ�÷Ñòsôµï òbíÕðìÞñ›ëŠôXìá÷œî…ûòþºõO(ù®«üúžþ1øý´ÿjü#þ ûñý5úÀþù‚ÿõøÿAù—ÿMú·ÿäû:ÿýþAýhý©ýëü#ÿ$ü&û‚êú�$ü¸þìýbþ6�%ÿè³�¹b‹ù%Õ Xv¯�È®ÿC–ÿ]>�]è�`D›�vÿiþümûù?ù´÷›ø‰øù?ûðù8þþú��èû��÷ü‹þ÷ýý$þü�þHûØýûù-ýÃøQüWø{ûøû?÷ûöû—ôêúƒòPú ñøø·ï·ö§íô�ëeòé ò×èó‰ê õOîíö?ò÷¦ô÷-ö&ù)øbüþù�|û ×üΆþž�U‡­Mþ;ÿú(ü"ö÷÷ÈóoôØòúò@ó“òûô^ôA÷[÷´ù ú ü–üþQ�ÖÿUþ�u ˜y�\ÿ%�vúÏ�·ö§ÄôÒÃô.ºöI®ùU®û8 þW‡R ½W ý© V¾ ( |Î n x SÿÊ ü°ªû%ü¢û¥�ú‹�føM]÷2÷xÓ÷ ‹ùÿ ~ú“ ÖúW û� »úÀAúéoú” û° û vú¼ù¸žù%MùÈmøoèö¯ÿvôAüòÀ÷mïqó²ë†ðRèxïŸæðqçdñ7ë«ò‘îÁó|ïõïP÷î%ûíÔÿsî¦ðWñÝéò‡ló÷ÿIóÔýoórü óÓü–ò°þ,ó�ô²ÿPô¿ýójûbðòù‰î÷ùî•û8ðÃý˜óœÿøAü©þFWþ80ý“’üÌ üà Rü¤ úþ· Ú‘ q†3üÕÿx¼üUÿãúOûÐùÅ÷¯ùÁôÓúÝò–üùò©þôæõ×ùñYý\‡_J¯—ÿƒÕþ!�ÆÏ�¿�çÅ�`….X0 5J # ¦" 7x ëþÔ uú -÷¥ÁôÄõòYòá™ò‘ƒôÀ4ö)n÷�’ø9ÿ³øÿrø±ÿ˜øÝ�ë÷³öjöwÖö+<ø ”ûK —þ{ Èÿ¤P�rÕþ@þû²•ùÏÏ÷p·ö*{öñÿ÷Eý†öeúèô£ø¶óYøÑôWùø5ûÄûÅü�Tý‹Fý=Íü#ÂüÅ�Šýúÿm&<õúI |í^Ó=ÿT—ý­VümÙúr�Yù™þôøbüšùãúEûûÎýãýÂÿ¾x�Z1�ZŸÿ ÿv �`   Ê~òp?Šf)Ñöá�åüâøv õGòp¢ð±ÿíðâÿóójöƒ#ú³�ý" ^þÆ ¼ý3 •ûˆ AùÝŠ÷~ö|þ®õYü˜õ—û÷$ýúà�#þ®3Xú :{ J üÊ ªkÅt6l�”+ÿ¬Ûÿôîm#?¯�&sÿÌÿŒD±Uت²C H$ •{ç  ¦ û« ê3ÑÚ /k .“˜TÜNÌ – žœŒÌ­þÜ„û¬Yù—oùQ„ûý|þv T·ð•BŽ?|¯ÉÕSò�mÿÔ¸ý QüÜ HûTÒù­üø1œø¥ÿÞ÷°ÿÝ÷´�ªøˆÀù‰Ûúò½û çû oûà Ëú 'ú+Õú7ýÌ� åâ öC‰NÝw½c>ÿï6ûç ‹÷³¥ôŒÿäòãûòûoóïûøôØþö÷÷›ù‰ ºù: HúL ³úî Ïú •ûA Ÿýp ‡� Œ™øtB!´ ßU ’s � ©ÒØÁw´b× ‡2 Ày ‡ Lç Æ Bü «�9�LIþúŸ rÁ Ú ˆ‚z¬öÅ‹/-Ž0@Š V G= óÿù5ÿ¢‚ÿ—µÿ!îþböüß útMöx¢òû�÷ï¹üjîùYî/÷Õïøêñ£ú´óåý"õRÿèö8ÿöùèÿþºº/Ür>w{ýÖü÷xoòTþîÜùíhõ±íœñßïjï óÃï¤õÉñW÷ðòÝøóïùÇôvú˜öŸúïøÒù´û…øý[ø^þpúšÿ§þME +ª F r D ½ › æØVnFþ_Õû~ «úØ*û¯pý%�5´C i h?çÐè @ �AÞÿ™|�ýüùï˜Ì6"DèxÖ¿tîysÞ‡™¡°ý§ú±÷¦:÷ �|ø´þúnýúºûÈ÷ú'ôšùþïöú2íòüì¤þ¬ì”�Eíºªî´äð#hóS (öM ™÷Æ dö†fóïï �¹êUýžçHü¸åÓüWåÀþç4ê‚î©9òÂØóë� ò¯ýðCû”íëùKìú¼ìjû®îNý,ñXÿ7ô~}÷…û>pþáˆ�Y=âÎèkD!³V�ÿCýþSúºþæ÷¯�ðö6÷/0ö)ôØÿUòÿÓñl�Ôóž,ö:h÷&Û÷€"÷ùªö¼Cø+Sû'DþÚ¶�q ìÌ £9 ,J�lûkÿæô€ü}ï4ú©ìùì–ùUí“û©ð}þ×ôê�¹øh‘úA1ù¢�–õDþGñ§ûúí¶ùôëíøÕêtùþêûÿë‹ýîîÿüð£ó°)õ}õ"óIJï ÿAëtýxéìühêýÒìºýæïàþgóÍÿÖõÀÿ$ö ÿ’ôÎý òWüqð”û\ï[û8ï–û—ðýzòÿtôÛ�ýöè˜ùù[ü( Rÿ% æ� 2�Õ¼üù'ö‡�ïóíþ`ô5þ»ööý7ù¨ýÏû"ýDþ(üþòú½ûúùBørùäó¨ù’ðÑúbðjü€òIý ôýµõ€üTø ü)û¯ûØý[ûñþûr�CújùÈÿ÷šý}ô×ûŠñûçîˆøgíDõ?íó«í0ðêí"í0îÿêÝîHèõïGå ñúåòñ‚è€òpêSó2ìzôÎí•ö ïÆùûðüü£ó3�Ëõ£½÷#<ù,:úØ´ù¯ÿøú¹õDôŠñÅï+íÌí&êrîéñþêžôöíløð-üøòÿÍõ#�Xöÿ¡õýõû1ôù ôÐøõ÷øÕõCú–ö³üB÷Oÿe÷§¿÷­,ùXÖûXÿVm�Mdÿø&þ…ü¬+úHí÷ç„÷2Ëø¥ÿLúIý û$ú úñö]÷ëôaôaôFòäõ ò;ùó?ýÌô �šõ(ô3 ó»�,ó±�Kóß�Üóâ�Ãô…�õÜÿ©ôôþóþ~ðÝý²î™ý@îý©îòû!ð1úÍð¾÷ ïõíóUì¥ò¼êQô·é£÷ êhûJëOþÄìÿÿYîº�ùïñºxóòíöʱùD¹ù¼�1øÖüõóøbñLö’îµõíñömîïø{ïÁúðÊû_ñ´û„òfúèòæønñŠøyð¡ù<òöûMõ£þhø`¨ùZµú—ý Ø�v zì “¥5 „÷7»½1¥Éþˆ òý2ÎþÍŠ�¯ ® :ã/ Ÿ¤äˆ’‚Y m 1« .ž_õY�¤ÿ’Z�­ GÏ ú V– à  ñ Ù °  ¥ Î 2 èºÖ™Èqÿ›ü— Pú «øëe÷Ç—ö÷Q÷ø+üãàÿ¢ –ö Åc >F à% t÷'–6ñ 8e GÇ /ÉÛ]:¨º-rÿi‡ý¸qü¸ âûË ¾ü‚ #ÿT ëAÙ.ñòDPQ"·\$ÿ$}¾$õ�%"‘ý|pûj±úóºú_ßú3EúG ~ø3 ÅõÉ.ó¬ùñ€òÉ«ô+ÿ÷µ"üÜm�ž{L óëX „2Ó£Õ-áˆ1 ƒ+`[ÿ,·ýׯü²SýÍ¥þ(ÅÿÊ'�5ßÿ}‚ÿzþ\ý…0ü#¹û °û¼ Cü(™ý ‰ÿL R( qÛ @ v ‹ß ò x �a *ÿ ÿL›ÿë#�<N�âŒÿ¶wý„qúM“÷ã§õûÕôï�½õXï÷+hú«ü¬ ]þï ]ÿØ�úû�5éǵš J¢á ãó*£Ö�ÝC¡¨mïÓÿÕ§üÔQùÓ³÷•ÿøþúÕýšýëýFšÿYÛ m Ƈ ;2 ÄX ¢ „¦¨d�þ(�¹ûHþ%û‘ûµûÒù%ü¥ùvüˆù0ü4ø™ú©õó÷óæõ^ðQõòíUöí›øîû½ð˜ý—óc�ÂõŽ@÷‡®øL°úÀÇüBþ“ûþ¥ïþ¹ýeÿ_ûý øÑû#ôMüñãýðF�jñÑíóX#öhøv|ûüíþ „/¦�ÙŽ Êç¤:J³é�nsÿ ¾ÿ: ¸¹ ­‰ é h §*¢�žþfäýQ aþ{ •ÿÞ®è Ùv®ÿ?ÿà� �ý�EÁÿn` P -… NË öÆ ÍË MB ‹² öÉ T ½• � Xþi ïüø Îû‚ °ú}‰ù¨`÷Fÿ»óüŠðàú·î­û®îiýþï�…ñèó•ôZ«õÑJö¡úööýøÛ ü ©ÿú1�{ãþý¶ü·ùhú#÷ø&õG÷¸ó7öÜòµô´òRóÐòòbóòñ0ô ôFõB÷]÷|úâùþÿû6;ý¢ þÊíþ\õÿå*p=}ƒ”%Ø„�ŠTþqWûn@øZþ[ölú#ö,øéöå÷løEø<úù,ü©úàýÜüÆþóþµþ›�ý²ÁûYEúŠÎùF�úíúð�RüÕÿjÿ&ÿ&ÿІ�Ú:¼ ñP vîf�²äüù²øA�“ôóýŒñ÷ûZðcú5ð0ùxïøÅíG÷qì¿öPëuö¾éV÷uéùôêöúdíÞü¤ðZþ~ó|ÿYõ+�òõ�(õ[ÿ‡óÌýýðûòíÂ÷8êóôTæŽóä*ô€ä¨ö@ç*úëý#îUþrï²ý\ï¶û%í‹ùüèQøïå ø]äßù½ã†û—äVýáæªþ3êªÿ[î§�BòOIõ½øÝæûÝäüéAü²xú-ÿ*øºý~öný˜õ|ý÷õáüïödûÏ÷ùøt÷öÝô%ô*òØó&ñ8õàñ5øóIüõ*�ãø2®ü˵ÿù_" CL ôP ¯ ©Ÿ¶XáÏŽ�R�ÿþVü üºø\ú”õDùNóCùóòüù5ôdûÐõªý÷Íÿà÷0øÆ÷C�Dö¿ÿ+ôŸÿRóFÿôjþQö¹ý×øøýEú,ÿûw,ûC¥ûºBüM’ûKÇùò³öíŸòbï¾óí›�ÍîÛÿñ®ÿYò©ÿ.ó�ÿŽô$þÙô©ýôEýâó½üŽó)üòÈûµñ£û'òü‚ôÚüô÷,þÕûÞÿ…ÿµˆøh¤zÿh�Àû&ý*÷÷úØóªú&óÖûxõ±ýÉù“ÿIþü�@àJ‰ô…ÿˆ�<ý£ý˜û/ù*ûdõ\û&óîû�òëüƒòõýÞôÿ:ø��óû�cÿ¢�†K�iÿˆZüÜÝøa—õ; óýürñŸú“ð˜úáïûTïEükî¿ý,í0ýÓìû·íÅú#ïXûð=ü*ò_üfôû}÷MûÏúüxýùýfÿÖ�Ì�þ¶0šÓ��Ëþ…üçú¾�køŠþ±ö‚üö"ûŸö[úcøÐúÂúºý‘ýÉ�H¢{ÛðŸ�!©þü|ü!ûV•ûâþ¦†Ò a¸ ñJ»Uú f�ð ;v × s L î œ - Z g Ë ’ ) õ ¿¸ ‹Yý £�t ÎûPùÜøóŒ÷f´÷:OùëúÔû Iþ”� f¶ŠÖ,ûSºj•Uþõôp�Ó ö�ë$‘<:l ²1~ÿ¦õ¡ýRÁûÍú¡çú[uüæü„ÿanð dôrï} üqªÎŒ�Ý‚úàƒ07 ¶üö‚øŽ¡ö0O÷§� ù¢qú½ƒûLó�ü(ðlûEÄùò¼÷û�Mö½ÿ ö¦ü÷fýáø?ªú(�mü:ù£þý�?|¥Ã¶-åÄ@ŽÜ?±F¤ÖF�› Ùþ: þ ?þüþk(�iü=¨N‰ �67þ :ü¡ûëÿÅüEþþ>A�ûËQôš¬K¦­ui~]Ù�F =S}. 'ôü^TÏ2 ›ÐËÌý]Ë�¯Ä¸Wüp�²ô•ü±ójùÆø8øîò€ù*ðàüõÊ�&õÓ½úÀ9åú_ óË©ú³úù)jóPý}ó¨úRï ú¤ï¯ûüÿ ù¤áðŸþïáä�cü=(ø–ötõâêmó8û-òþ#óîMöžíúŒúÍüN�Zþ°ÿøÿ þÓŸ�$ ‡ Q�Cý ¶ù´Ðöh Òô‘Óó² ˜óuÄó#ºó Nó=Aóò’ó¸XôÇ®õŸýGöÃõÜó$ýèó ÜólLô ,öŽå÷4øÀøóø7ÿIøý øxtö¢%Ñó" ÿñUñÓñ7úóÄüˆõ8ô-ø ôùšeú¸þJúï*ùñö°.õë·ô„æhõ í³öüù€ø)‘ú„)ý/ø��éï˜~únJà ŽãþñðYwøíõ»°á ^ƒ ~Æò�6Sþ½ùôû"ñú!÷YùÒúúkúÌû®ùùýn÷Ì�éøZýZ¾ûVü gv Ù Ñ !X§ûõ“ùT‰ Ý3 Ò> ™¸ ½ýß ú )ø zøû·ù¼þUú÷ 9ú„û´ÿÔü;Ðþû¬!Xÿßþ³ -ÿ% …ƒBoÔ Z�Üúÿsþe�ÈûP�ÑÿÜþ‚�ü ù#úó[øqôt÷5õÌ÷˜òÂøÓó¹ù,ø û¥øgüVö?ýÛðÐýìÅþxî� õñ�°ö‰IøöàÚtFïý¥ÿXÿýfþ(ü—ôoû`õûòõoûªîïüóµþû,�5ö±�,õ´ÿU�þðýö�¨üvýcýòÀþ¥óÃÿ��¡ýQAö<æþ…pš A ˆ jé ¸ Û ßº ž K ËŸ fH»ÿ§ý?7 m 9 ¯ |¶áŸ†Tl¨\­áÀûÀ Ìüú B•ZT'kx ¹´e ç~ —Ë3FñMþW?ô‘þ)Lš û~ïsôéb�(/ü*˜ùÂêzúùã¤ý`ó|Óû›±ùÍ‚÷5*÷ÀÆö –ûU ô¬ (² ñ g ¨÷‘çò˜ù•’Xµû©ð÷× þò1Ôþ ÷Skýa�> 1ÿÜ´þ&yÿ'ôïÅðàŽ�]{ ¤Ü L¥ êL b T 5Ý $È “Ü kÅ h £�6¡b�,i“7ä´¤ ÈX ¥ÖÿQ ­ýƒù˜ýªøÖþ 1�Î 6H­( /þšüKÿÏ=¿Z½ © ò & ü  ®ü° ¸ø�PõUc÷ùä†út†ôhêáÿhì¢ÿ7ù†ÿ5þÿ©÷!�²ðÅ î•ñ¦KûJ lÈ çr ¸þ nùM lñ°‹ð9»ìœ…ä¯�ÆäI ë¿-ê�)æ éEXíÙlñÝ'ôW7î½�iêbþ×ë8üÇäìúÖÞ,ú æÛù>íÓùµïúqñéüýíóÿ®ðBHû`æúr÷d~üV�VüºýO÷eûÜø¡ù¸õ0øRñíöýö×õ‡÷Çõ¶îÚöPêè÷/è5øÃæAøŽêÖ÷¿ë™öêÕõîïöøœ÷åù@ú&ûýõýšÿýˆÿûª¯Èý„�±óþü;ù~÷]øvòªë£ï©çëî?éÖïDç™ñ‹å¸óHã õnæyötîjöié˜öá¡ö’ìèõ,ûXõiò$ö¡ä½÷UìYø1ý øáþcøò2ú½ë¡üd÷¸þª‹�£ü «ôvúúgã�¦ÿþ�‰þþòlÿáùôÿøXÿiÿ+þx/üˆ�‰ùÈñ&÷‰ç´õñõ>íô€ Úõ`ÿøi÷¯ú}ú2ýÎÃÿ¨ ©QêIþõøÖŽú5ÿæú¨û|÷vùÿó6ùÕôåùûúéÏù& ±øWú°ö^ëœôoòÜòÈ�ÓñN)òD 8ó†Hôóˆõk�]÷ú±ùöSüýþ¨þÞ9�ðÿ?žº�¨ þßúsö�áóæ–òOÿò�õñ�âö¸�Â÷ ùTø¡öøüý_÷Ú«öZÉöXf÷žüŒøøúRÿèú‡ £û¤¼üáiþà ÊÿK½ÿÛ ïýýæûAŒú³ àøÄ söôUù+óô›ôÀñuøÖ÷ÿüGU�Âob�æ� þþúIQø ôö –÷�àù–{üS Éþ¸ @�š78fNÃëÀ и`Þˆ v:ïB] -�aÿ2‡þáü}ýf ü§ ûÂóúß°ûQýü·þ/A�uª|ò å€5 ¸ÌDÆóLe_ÿ4`üùýnøø°ðx.ó4�ãö™ý@óÃù¾ñ5õôƒñ_õªïOõ¶ïˆñºñüéÎô"í øõÐúAò¡ü<ðý\ömü÷UûIò_ú¹ñ‘ùŒõ8ø‰ûTö4ø–ôÓìô<î'õÍö|÷?ñ û çÊþíÊ�ýŒ�}ÿóý7ýY÷Îûjö¦úHùºùàùTùÄøú/ùŽûùîüÆüþ(¬þ{ ÿ´Õþ.*þ  MýWýüJý jýÂý)9ü+ BûN-û/ ›ü¼þÖþZùm�}¸�F_�LSÿ} Wýû?ÿ‘ûúWýÔÿ} }ìá43¶Ÿât h«‘+Ú½…|9öÛüNêý?l«ú ‹lý¨cùŒ@öÈü€õAø±÷Î÷2ûQü”þà‘fQŒ 3NÓå¸ÿ òü* …úô ù8ø¬ýÑ÷ÌúÚ÷ÎøùÐòáûÊð¾ÿÂúðº ä �2,üšþ×÷üòó˜�¦ñ¬ñÍæó' ÷ ±ùâ«ûF…ýTÿ75ð&î%—GM¥˜4§œÇ�±ÆÿŒ²ÿ¿“�  <§åô4€àÒÛGqf è× ¼t’ Óx1 ÜÑ ¡  iœ Ç ¯ê )!Z 0#$Uø‡÷ÿ4ý Ìûlü ý7 ÐþY ÷�`‹hh¸ áZqúEpÿ™ƒúÑéö˜RöãqúRÏû<î÷ˆóá1óëôøO±ül÷²õêûH«ü±„÷ÔIúW=þõ*ûÓvùdšþ|ÃKÿ²¨úÞù“Ié�ËûÆûÚ±�Dû&Ü�?þý¥¯úÚŸúÚþh£†Sÿô*÷Èæó;yöGË÷0õ’µñøÿUî¸þ1î·ýó`ýsó˜ýœèiþËàqÿ¿ä,�gíà�…ñýìÓ䢤äÕlï´ où §ú]móê?éA�Kçñý»îXüTòtûèêùú5ânú°áçùèúùÀìŽûæë°þÔìÑ<ó×ÿù“Êú@‚ö�ßñâðû_ôûzøÿúºÃøA�óÓþÈï€ýoõüküƒú;ÿRùýýOùäö ûáíÿé÷êëÞqö8 ße < ï & < m^ ÊûÖö=¦õ ù™Äþ¯ i ý- £ ˜¦ , s?Š(„› �  :üº ò÷º (ú1æ�5sJ”¿­ ó[,¨ýïäõ¸§ùV=�âÜþuÔøm:õ?]÷5 �W® M Oš Rþ ¢A Á pRû¥¹ðYœAÝÿ{þ©þ—ú©ýü©ü¸ü¤ûüû~úöüÈùûÐù£óÓúRíü˜ë_ü»îýiô¥þ]ø&�†ú küÇ�àý‘ÿ°þþ×�‹üÜ_ûh�<û„<ü.'þæ¡�Øa Àê ߢo�BÉýØ üòTû®*ûã óú  nûfòü> ÿ- KýZŸÑ #RÀìµaЂ&æ¯í�(îùl�ôS�‰÷¹�°ýXüýØ£þcº#ŒÐ# hÍ þÍ �~�3þãÉü’ûq¾úÆúxþ‹ù»û÷ùïÿ¹ûþþB­ÿ"û¨�løL˜ü1�L�—ü%ÿëöýqôÖúökù>ù¤øö÷þ÷[ï@÷šè$ö»ë×ôÄóHôHùéô|øùö¯ñÿù¢ì€üÏñzþmûúÿ|üÞ�dó²{ëBáì Mñá�0ð‹þ#ëKûZæW÷ãÓóãéò$æ|ôœéðö©ì²øŒð²ø_ó@÷{ôõ¢óöòÉîàñëòñGîBó9ó õnö˜öÎ÷þ÷óòYùŽëôú ë´ýüð+WøÆ&ý$ú»šñÿ°íÅû«ðßù:÷€ø£þž÷pƒ÷hÿ÷Bý¬õ¼úæóµóÖòÊëóòqìôDö-õ2õöéh÷@úø`ýö�üûëÜý ÃúúxvþV¸�Õæü‘aø~ºó¤ÍïðüíÝòìFé1í„áað_äoôÝðølø*ûµ÷›ý1öúþDôªÿÎð‹�ÕðØ�ôR�Àô|ÿñ)ÿì¯ÿaé*§é)}íŒxô¼Aü‡ÿËýëÿ`úþAù<ý"úNþþþäFÂ5þhÐý:N�ºþÜÛüÿ Wü= Hý.ÿ¯%h�Ž�cfÿ7bÅ  m½ ¢£ neÂô�Î Qÿÿ þ’ ³ýÉ †üÏ +úh±÷¥göʈöbË÷#Dù"ú&Úù ²ø n÷ Ÿöµ Ðöp þ÷jHù[¯ùõøZ‰÷ó�.õ©ýzò%üÅðú¢ï¹ùõí½úˆìâø`ì÷üìTúšî;ÿpñ{Pô#ƒö²ª÷‚@÷pö?öû”õí�ìô†ö�?ùÆ búÿ =úE 'úÜøÍ<ö3·ôÁ=ôdûÖó\ò3ô òoö&ý™ù 7ûÈ Cû‘ÞûH;ý:†ý¶ü¸kúé2ûðû‚šúó|ûÔ Oÿ@9Ùl�ã Õ� °Ø ¶­ +%˜ÿ�Nþüûûý ú,ýÚùIü@ù3þo÷å�0ùr�ÛÿÙþš»ÿ¶ èÿ2züwþùŒøÃø†úù÷�†øëº÷¨ ^ø2Žú9�ü|gýÕYÿð bÿ Èügtûãëú~úÕø.ó±÷“í¸÷îê(ùkî„úä÷,ùêþ øþ,÷ùõódõxî øáïÓù2óšû­ò¬ûPóÊø¾öùÍõ<ûâïãúVíeý\ñ™�&õ$ÿUñÿþ0éìÿšâ/þâÜÿ˜Û,�Òä¼ü¾ðMû9õ†ü-ôRú¸ñµ÷…ï ø¿î»øòRùÍù^û4ÿ%ýüýêýûhÿåúzÂü˜Ô�Aær 'ó z Ÿ Ýö¡qô ÿþ2Åúu1ûþ©ýhþ/ÿöò�” #V {ˆN˜òô2 ¡ €E §G Ê v ã Ô dµ §Ý å §. ça ¡ }) # ëþ€ ÿH ™¦X¬xþµ ˆý\±þ7�##§ÒCÐï*1 ¡9 ˜— ¢ F L f  „ ™ ` Ý ý÷ [Ø ú/ í |œ øà ¹üÁûq 3À '¬ ” }{ Òþ—,þ¡kƦ¾#ÏÈ=-Œ Jt¢•�ª_�~ X  @ Ÿž`fü›”ú iúŠêùz oø Ù÷‹¸øá˜ø _÷ S÷Ö(ù&ãù- ãø€ùl^û]Xû9;ûÓ †ýö øÿå�ý¿ÿj �ý© Yüè û/ ø= Ú÷ØKù`®÷ˆýpöûùüý �Ðÿþ=‰øB¼÷Ö 4þª×£ ïü ) o�.ý«ÿüëýÍÿìý{ø�­fÚ}ÿYÿ`�ù�°:ø ówÖƒa�³Lÿ¢ “Í5¼c £*y (#e³Ñ¼ ïþ% É�8 ˜5 këñ eb9_ I' › uêkü´M#– ½[pã¤Df AB?þ¤ vû¢Êý=¿ÿxOý¼³ûžÖüœ )ü: Ëù ¿ø•û™ùrø€ùÉú.ö„ô¶DõðØô¨ú†ñoõQðuòÓñ•ñ#ò¹ñ#ñiñ²ñàð&ôþïÖôïðô|ñ<ø1öËû:úQüü�ÌüØbþ5!þ1ÅûŒüåù*û÷ùÅýúÆ$ú³ûŽöü>Eüóû<úüÄvþwú£ÿ´õûÿó+ðŒXñL Põ( {øÇüF”ð„°èëþ•ý&;ýñ ü&ùåø_Wûq )ýn¹þ~Ñþþ ü›«ú2OþŠÅ†oïÒ¸´�Ú#ý4Ÿüà…þË ×ý~ "ú— äø^ µû© †þ^ ”úBˆò›[ïà‚ðçÚñrEðöé8 •ãu 'ä Çë áòwóÏwï<*ë7èd Úæ ‰è%ìÛ í°ížî¬=ïÔ¡í÷ìÍãíO ¨îd ¸ï …ñ ôðü Ûìš çÄRäÏNå3gæÈæ)AåÍüä§ç‚äìeÛï îI.ëEçí&{õðúk0üWû¹øë>÷X>ûy ¼�ˆ M�°üI�øøQÿ½ø%ýª÷èü{ô5ý³÷¦ûÞÿEûuóü#ý÷üÜø!ûÁõhù"òï÷yð§÷Èö±ö–þsó•Òñ´ Ïò­ò(’ñäó]Áõ»óž¿ò™4ó9 —ï… ÊêáréëúÕç1ù?ä›ûtáëüÅàpúIãÔòç@íêhð±ìöèìòú½êÿ5é=þÚç­÷ ç óPé\ôJìÖõvìMö¶ëùlêvûséëùÁêø®ê¢õêèýïðèÏòé\üòæNûlæœô}çpñwæ—îæ6í®ç½ð/èˆõÚè~÷Ïêí÷þêWôëòìYøÚêŽú'é›úÈçQýä\ûŸâ*ô¬äÏñoæwýºç&?ìøuðà àòÛ Œô؃óúòÆÏó…®òD*ï�î:[íåwêË .é géºlè·œè¦êÌ�rêµ éC'ëèö"ð^ñùôOúmú‡ûK�Dû)¬�}ÿWý ¥óÈÁñÙ*ò‰|óþ úºûù\ù<ãú€�Dú¹ÿ½÷Ÿ�Aøú ü‡ùþJþºþ6ŽKwñø¯æ$Waë×µoàúø Aõà öæªû AýÄ [úk ³ø¯äøsý R[Ó 7«KÂCBÜ™«9hY-Dz) á8…‘w² ⢠ê-ä ¾ es y Èÿ*€ÜNäÜOMuÔüÒk톻 Å `¹ ¤ÿ«ƒ�Ç×ýw ¯þ– ™) Úî ]¦ Bs m§“Êÿ^ kö' õ +û oý‚ Úöœ Úü¢ét?Ð�äûùŠ�Xõsó–Xõw®ùw§�Z z j Æ Å §— %9 –ï ½�˜ u N [RFœ¬yªÙ}ž à /ìþ¨úŠýêûmüVùmûú`ü>ÿñý" Ê�Ém+¢Kö³i!ho+× ‘g ²Õégþšþ�úÜ÷ÄŽøõøøŸ7øØ e÷Æçõ] OõÏ €õ‡nòž öî¹ eï;¹ñ·úÀóÀïõ" ötóW ˆñ# òÁ·ïÜ·ì< ±ìêëVç7æåè¥çnJê€éèå  éƒœð ð+ ìX ªìó þêò .æU ³å¶ wéJ %ìéÎéUäå„Öæê¤êHûÁíqýð1� îÇ÷é ô}é]ø[íúøîï|ô…òÎïcõ—ñœùüöBüø‡÷aóòGð±ò0ó•òÊ÷±ñrùOõÇ÷~öžú!óˆ.óéÉôE ±òN -ðÇëð@ÿxõ¶"ùPK÷͵ó! ô…Ðø°ÿ<ù�øÆûÅ�œý6*ÿüÈø²ô=ð¸ñèñ÷÷îâþüLû0ð íÖ‚õkB Å z 5þòk¤ÿQ Œ I¬BØ�qXûv âù³üýBõÿþŽõcró›iû“sAüjþ,ø2ó½¾ï>Eÿ!b •ÿj�Ãkõ1Xüþ$öMúMàxùÆÚBþíÛÜ >æM‡)%ª%_Y©·ð¥ÕFéµµoê<¸øîÔ¾‰óÂÝGÌ-xì-3*$ fýï¾ôÜîÈÚ¾òì×éñIà~è¿ÙÒã_ÌÏå9ÉÎëZ̸ûžØº»ðD Ã>î!£LÜ"Ù³ é ƒþ“õÜ!Ìò'›V)p+-zË/µ'@&÷/Ñ>"â ¥ ~ú¹^ø ìÛ •1ãýl·5 mr�²ME®Ô1ØX8¯ …˜°¨‡­íe¦!=m4"Ï ï!1Æ,E ~×Fÿšaåb ’Ë 0* Þô=j Œ îÞp\G §$þ¶aöï†úIë„ü%€ ëx{ýû€ÿ¤úZù)õ‡õµé5ú“ì’ÓüNè aÂüjìøØdók`ñºûÂóFÿûó’Ñò]ÿõðöˆú øyýBýÕ�wþbVW´�á�iø‰þ”ñlHô„ëù?éþp ž:”â¯wѵ’ý»þËòpö0îNí‚ï}éuõÍïügüZþzþó�¼ýlü\ú‚ø÷¤ùëótú'ïÖõzéÔî¬ãçéÞþá•Þ#á×á†áUèVá1ìéŠê·êWç}æ%áÀêÓܼã/Ýâ0Þ°éÎàüèïè%ìjôõ4úgþ0÷öþZî|õ—äéÌßÓÙµÞ¢ÓôÝŒÔÏÛE̊ױÅuÒ¶ÁÖÍ‚¸ýϹ<Ù€ÍÓÞîÞ~à2à™çäšóÎôöùpÓøƒ &õ)wëƒÑß®òñØîçÒ¿àØÎ·×7Ðtâ@ÒÉçõ×và3ÚÐê_×µíê×PäÞæyè²ëðÈðóÒú2òbªíGù®êáí/çXñ…áyì'àßßÉâ¨ê3âÆûkâÛ÷\ë\òÚó÷ õ—ôµñÕìæKæ‘×�ÖkѥɌÕmÑ[ÚeÚíÛHÕÞ–Ö[ã¥àÞèûáZëíãâðëßôªïbî*ì ë´áî+àQì8æ4ílæ’ò­ì™ôÓï£õØèþóÆè¯ì;èPåûá®äÙÝ5åžàpá1Ü*à·ÑÉà‡ÓÔߣױããÙRë~ßúéTÝ_á•Ò»ÜêÍiÜ€Í4ÜÜϼÛSÛ|Þšæzå2ë^îáñºöùýGù‰ ÷îøtöì÷[÷BûMõ”�ÈöŽùÿ†ï§û¶ïÙó›ðeö÷ìþþì/~í�Vî¡ýðîaøDïñ¬ïñíƒîîGê¤ïmçZõ§è”ú¾èˆýYê’4ðRšôªÆ÷Û˜ü>¨Ìz¨"£> Sû»}&GÁ$,ÿk!¶úeMúó¿öX ïorí'¿òÖú Sž!$užGvƒ Kˆù— Ec Q ; y´ ÕP!¢\<áH}/ §J üIËÝ oÀ„1#€ !%D!½"¢'­ ~&÷(Ç ‘1,‚/ 28.#B2þx4"#Ú4æ&3ÿ%-¼(ù%é#X"9Ì#Kl%Áâ(£¹0ý¬4±#v3çk1Û!'2?-2ª2p-©.ð'”)&&)p'œ%,b'/g1³*m4¶!q0†|*kMáC íÔ4z/Øvqðé(³ú#>‚ë+!’!T(˜%‘(#m0a–(ùxº‹!0Ø'É@þ‡çÒ—"ÒY"TÒ(Áþ4‰¸3þ%œ*Ú)Ù,î&ò/‘0©(9_#Z,D'ˆ"…+ª+")!,{%|è)À,ÑÇ!Ãé- s$; &Â#CÇ,(o9ö;2)à7]$J;æé<"$8ÿ#g3ž!r1L­1øC0ÿñ0^†6Ö4z‰(òˆ(mˆ/¥\) # ·& & m"œ*&tš.Ï6àù5!E0á!0ØX1§ Œ+À ’%€ c'é ,z œ+W?+êà1• g3:­, !¹%(™ Í“s§þµNü-à è ÿ  ÿÃvù‹¾û4 Uøá{ô©žô'àò­ïôÈ ²ÿ äØ di É Z  u»¾¹ÿ@XþÞ I U‡ Ô  ãÿ °þ =æ þ.ë} Œ èé€ ž Ç4ißgÙ€ýM&EbRÿ%íüíéûÀ�fþOø„ù6Àÿ•(ü2(ýß^Ý¡<ÞxýMãù÷çòŠ–ì¼ôëÆÿºë5úÌçÝüÈæúãéR÷yêúéUöÜè‹îyäð܃÷³Ú ò¢Ý$è…Þ­ê7ÞTï1Ý“è»áõáê^íìê:÷Uå�îLå ãvë‰æŠê>ñæôð°ë ñKñaþQîå^êJƒëùˆð†óªóùþÁñnhëQ�ùæÒóþäpðQãþî}æ^éƒëÀðÝéÙ÷—åõ)çæ÷é”ùØé•ó‹íòÑí·ó°é{ë£ê…ä€ðtñÕóE÷mýr^üýçòuììª÷âç‰÷ÑÜîònÑùè ÍáåÃÑZܨÙèÚ;Ýþã*Þƒë‰ß íßÝ<éKÙ0ç¿Õiâ Õ×óÑ€Ø_ÈxßüÁìÛšÆüÙœÏ+ÝUÕßáÛÚ#æ“à…íBàËïÝ„é™Ü¬ì?ÜÅò"Úoî¡ØöêªÙ›çÙ¦ç-מêÚ\êæÚ†æ×§àùÖ<â*ØiáÔnáù͘á§ËÏØ%Í Ñ‚ÏòÐÓ™Ù$ÖßàþÖ“ßÄÕéßMνà‹Ç’Ø8ÈÕÇÊÜÃ…ßûÅeÙÍ€ØmÏ:âeΣåÉË%èÇÑêXÈõÜÌÂÍ_ÊTÉUÇÇLÈ‘ÇëÎàÌÂÖîÑ³Û Õ)äÚxé7âwézå5ë¸Ý×éÙ9å`ØÇàõÐwݜԄÖnÙ£ÓÐÍçÖÊÓàÓ;àZØwÛÁåwäÀê}ï8ì3â#ñ÷Õo÷ËÛ¾û<Þåý’ã;ûyó|ó®ïò“âŸóPèñÈîðEæ®íè;æ‰îîã‹çyçííëæYø æýòóèyô¥éVúqç õæ;î±ä.ðSæLóžêbìÉêèñìRëŒòjéöAíéøö*ú›ñžøÉïbòYòqêxäCæÌ×ä¸Ý}ââúåõܽïˆà±õàðË÷OøWý™ôzü¯ýO¦ø¶ÿGöEþ¥òÿÛï¾û©ïûòfðìð.ðCì%í¿á‡éêá+èãéõÜßæ²àÉå÷äåWâÆà¼ãÝÜáÝüáÃâ¬éælì3æsçßè?ä$ìñê‹ë”ïáèþç$èãLäðâ[à2à8á,âÜâ!æ)äÌåýäHè9ãBéãàïå°Þ æ ÜáèëÛ^îªÚÚëÆÙÃä‹Ú”ëÁÞ©õèpøõéæ÷è%øíçñyñ ñ¸ëˆöÌç5ò¿çö%åaú4ãMô¡ãòsçó î…ö~ñAùpð(ù~ðÄùñ'õMðJóiîø{ð|ø:óúiíDúóêøñíì)ç+çoàdàÛ“á-×ä ݧáé¨ÝÊëaá‚ê£äOò¼ãhõè¤óƒëõùãë"×ììÇÿŽì;ùgíÒÿ¡îQ §ôd Úúg LûÄ 6ûñ0üý”ø“Xð ÿ6è~òŒâÏì•ÞÐíá4ï3ëhô”ó¢Õø—�ÿÑjzarükªø_ôM4ñýø¾ó=üÁóþ'ö…GüÅ ý›‡ýÀ]þz pÿX I�* ûE õø1 ö•‚ôý}ú“þ­ ñq , öF°Ÿ × Š ½÷ ¹ V3ÿ„÷}üUóïúÙóŠø˜öãù¦ùÔüúàÿòñ\�dó¢ÿ©õ–þ´éÇü+î¥ûføˆúJù¦úªø*ÿ]ú¯åü©‚þºiÿC3ÿ÷ [þ» §- fG¿5;üû¹ý–fþj€ý¡%”*H o*YÁ)Û£*þ](Ä D'ã «+æ^,˜ù*) 4/w -1à 2´ l5e4¡…2i5æ€3˜.Æ Õ-üK/ùA2Õ¦4?!Ÿ4g"ç4)! 47 48â=²"^<R%97$#5$Ø2Õ$˜.T'÷'ÜŒ$.¤•£Õv¡¥· á‡%à"®*¤%‘0'&à0ý*Ã.U00V&€/ñî-M$¬/P)ù3s*#3�)v1x 3Û‘3!š2º&ÿ-µ$X,—!O-ô!.)ýA#æ!Í ó!3®"š†!G"»$B6+q˜+i#ú+™ u1";3q/.à3Ô.à)5–'r1á.±(ì*()+ ù/vz0!¦-Ìò2 ¡3�î*Є/>\=¦Ê?Þ1[A¿6îJ¶0-I'5:=32;ð ¯?Ü 4;³-­1n)Ï/Š(/°$²/D(F5¿,Ï2°9ë0E1-<æ(³<¸;Ë.=:.&[;8-N=‚H€1C«*0g,B0s1c7€7F=9‡BÒ7>¤6:·0t>ô+Ý9].3³2ˆ7Ç2Ê;&0L5Þ1_0 6ð8ø55@·094+3(2-'ˆ#Û&Ö(:#‰1öØ&xÎ![¤*P À$i'u%²%Ý3U*¯*,ý 8'æô)�.># 4+$,ö*,&Ã7¼á/˜øö@p?"Dq b�ÆAÎT üuJ&: e$ñ#–[§Ä< ž) $ P9Ð!z^*y"˜+8û$“@(òD1Æ +Ä—” 4û¶Å‡ 9_» Ud ¼Üu6Ð4L­à~>›ó þÄvý0ƒ�ý_þ:—Gùé ¿ˆÿmP{QÈcô©!Üÿ^ ޾!sfŸ6þIaõ™aú HiMÂý ù}þå÷]�ô™þŸòMý¡öÜ öî½öŒù:öYü{î }ô%ÂgûÁúKÇî­úT�öþ–þJõ3ðlÆùº 1qAô |îäÅñÝÓïÄú¯ï›�ÿìkÿçñóôßøÞôZ�¯öÄÿ§üÓü1ò“òæõüÖÞ @ã+ô+íØòæïFûiðþ÷ÐöçõýûÎõø‰]&þÂÎÿ„óÒeùœ¦9Êùåö,q® � @õ-»ÿ¤ " S�A©þ«õëö8 Vþæúõ¨ê†cåé°ëáþ>ìžùGê2ö¿èôî¹íšå‡ìBå¥ÝâäÚ¢ì«Ûëä6à±èêæZîîÝìnîòí‰í4òTëGöàÐõÜDìpçOê èÜøüÜLúÍá•ïFímòøç§øÚÝ ðá3â‘èãâ}îÈ×[ç°à¦ÔŸãßÞUØ6ä:ÞÐÑöæ²ÜÝ0î€ÑÜÇÕ!Êû݉ØeÛéæ–×àÛÃÝœÖOã{élÙªírÐãØ—Ö¼ÔxÔ—á†Ç&àŠÅØÓÌË5×5ÏúåÏîŽÒùê¯ÙçÈÙðºÑrïÚÎûÛ‡ÑòÚ0ÌåÁYä²½ÈÝì¿ÜÖC¿XÜV¾°àñÃOÚ#ǹÞÙ¾hæTµ¥ÞÒ³`׉´uÚTµÿÚñ¶4ÙºÎÚÑ¿üàôÂçfÇ7îÄÍ©úaÊqÿ(ÂA÷Ì¿Uð­À6ñ »9ñ¾±$çݲóÙf¹Û´·‚â³·áÝýÂt×ÄÄà÷º—å½�ØDÃöÕ§À²Ú¿ºéÑ׸µÉºÉž·Äµ»4¼>»bÇzÅ>ÆÐ[½Ír½›¾NŤ·¼ÊB¹Ë$ÀÍñÕÎ×Ä‚Å+È>¿–¿ìÉ̺SÕþÎ'Ô­Ú�ÒáÌeÕÈæÒ!ΉÎÑǨÑÑÆ1ÑÍØÇWμÂáÈ>Ï^ųßÚÑãœÞäÎÖlè!΂çÒ¢æ^ÑšìÞÑ*óxáDòfõ&îlõÆèéæ¼ßüí³ÚlðJçäxð•ܾæ±Û_ê~ÕE÷NÔCòíØ ò-Ó÷yÏçæ•ÚËâ´ámö¨Ünú³Òïî‹ÈAè^ÁꌾäåKÅß.ÐígÓUý<ÍÁùJÈÔîôËýìæÏHðÏXù[Ï»ûzÕìQÜiì·ÚÒô¿Õýî|×øóÈÝןçe�0ò‘ûhó2Eóÿåóû îSú ê¸ïñéòé æÁêrêxç.þNéisöÓdÿ%cö\ïùÿˆ £¥0ôŠêõ† ü”‰�‘!UþA à »¶÷Î^ â>ú| yûmó? 0÷ð h .ö¥O�oy®ï[´·ÿhn�šh˘~Ä},—×ý^¥ûàý¸óµÿœð’ù'÷’úIøœÓöÂúíûŽüõüÃVør�h÷ôøI÷Žôyõí;õÞê ÷'ìéúŒò”ü“…ýÁH�Lüãÿº�Bþ�£ù‹ùîí@ìÛä_ßQä£ÙŒäÏÙãmá‰äç&æÂå¥äèwæâæéïÎâ4óüôIëzýøåFèºçݘí\â)ôë#ö{ñ;ô ó ùjìãpñrŽR © ¿ ‚ ž# Öÿó’ý„ÿ°ù2÷pù^ôíû˜û€ú÷ütôNúñ·öz÷ˆôü…ýRùvÿEö—ú•ó¬õrò{ë9ûíãŽèKÿøñôö5õ ï õ íØìƒòÞêôiõKõ»òµø3ë9�xíŸÖî/ ñ÷ *÷o/øÅLùKþ*þvúìôÿ6íc÷3ÿñøþ�¢ñ‹^õé •Ûˆ0�çü_íûþýÿ’ùüý®öcÿôðò�èþVínúíÀýpäòkìoþiüã wíó –í5퀀õ4àð ~ôÛ Ôôå;ô°ñólîsÓìòaÚñÕáïí÷$ùªX#ˆùí/½ýÆ0+à(¹Û"ò KiÙ Nf G# —Î!# É¿.õ½È{Bl ' Ï'î +ÅM)KÃ)ú˜,¯k-oº(.à"X–Ö¼µv# &Ü6œ!:5 §&©ào·!®\¥ Í G�C÷e"‚q/Nx+ˆ‡%$%¿Q±¶H)%ê3/ö:D$›AˆFì yE"Ë?Q'8Û>1*™4'ª¡. s5޲3!3b‰7¼~5®'Ú.¿+Å.Kì/Ûs+)ÀZ.Z¯*õ®óÁo_(fÕˆ¨gD�TYúç!ü˜°Í˜ý3€æû˜‹xz"^Š –] ±r WÆõ /AÝýó ø DÿÇâÇ%Rëzÿì û� ñZ Ñ�ŸÜwã âÀâa,ƒÝ*wË#q)Qò1ºG9| 8Å®.Ôý€'põ¨rú¾ ¾—Búè!òz;ùaÎ(­ý×1G�Ì"Dë>„'~øi.ûU k Áÿ–ïñ !ìøŠöËù–úiåû ÷9™Àý='ôx’öÜÂýëý±[ùÎ Sû"ŸÎLþ}Ü%Gï"÷ÿûÿõ~ò ½ ç vZTŠÞÓ º!w É#’ +#«™'E£Ê57júÆ  [*Ó *� Àdÿwê Ûùb�Ò­�D�ÅûÊ÷7ïýú÷ðþ9—÷ø:õÅö­ùµòü“û×÷mòŽ §øì pø “þ‡ý†ùñ Iû¿§�QË%Ævæ© 5ªÀ©Upß %#£úK'3! ‰‘�Íþ! þWì[‰ ‘�ä©ý ZÈüA�ÒýQæý7  KŸ÷ýg ;�AzÿÂhúVøB úI hý[QÍœOiWÌDÖªßTÚ"O |Ñ >… Ì÷3%þæÀ1Íø©ûƒëü¦ôÁgïd.û÷b÷}Éò¼ÝúøûÝÿ›úÚùºzõã òûj br¬“�oýäÿ„ü± Í7\R wöàiÐP¨ëd÷¥¼›üö³øÜð¯ïQø,ëìôÔíQð8í‰ö¿ë³õÿîíñöð÷î‘þ[íýßîíõbëîø—ä·øoë ì…ûÌøëüU•òÄ¢îG õÊ!ù°ö´³ö’ Kù~Ïõ‚îr½ïÞúÊõ$úxòîA�õð=þ=ø*ÿÿÎýy Üø ùøGÒõž æëµøæ¥öGéÎóúê×õÍê™üñÓû8ú# öYû«øköû¨éçôlòRçf�3óÆúª¨ú`þ”û² ¬ 5 PU ý á ÝÀ¸Ì�ˆý}ÎýtjöÌñàï÷qÒú®÷i`ùƒÅú‘p÷3bôyþòFú¯òW�ÙðÏßç%âÉúpçˆô(ðö¢ó‹ûåñ +î&@ë”þ|ëùû_ì �EíØ/쮯éˆ)ê&ü_ëÅóîñ¨ó$óîù²úVÿo ã©y| wóÌ4 —úE Œíôö.è-áäìÖjðƒáÒñàï±ùcóÌÿ¶� ÃN}+·þãg÷0÷_ô¼åuö›âüaéÐò‡ýÞ ò»ûªô¿�&ôZþ˜óÅ÷Q÷!õ!òùZíþö$ø ÷B÷´dõ.B ‡ i­üà rølZ�ò�]údð~ _ôÅ@ a{ ´!ª["þˆõ÷Ýéö§ 5øfíþ) è2; \ Àæ±ñÛìÜ ^륟ñüZÿ÷uûní ú”ëZúcïåûjñ‰ýÚòÇò®ü¢ëf #ýö ª&F < ‡¦þ€úúÞþ™ý öün }ýº�œhæùý©÷©üïæW,éÏò¹¼ïË `èŨéî—ëSðìê‰ðB”ï2 ªð þð ¶ðt ù–^+³©/  /O '/Ú ›* ó(¤ å*¥ M!4_c`‘öÇÊ÷ú»]ïKó"½Ä ‚ÿ‰ ¨özJ > Äú ÿ©õüá¶ï+îRDø5 ›÷óq螄Π4ß$wà �`­ùÔNç#¶æáëNEðˆßïÊWòÖ:ýÕ¤ =�°NHØ]±�~GþS�¦Ë­ çXæõ ïÂ�˜ëx‚æ˜Øí¨ñ‰ =ó‰½÷gÑñM ôñ© %ô{ í³tñ¢ ú Œùß }÷¢ÂÿÇ ! –  ( ” ¾û�Åù®]ò=�*íÉúñˆùXïÍûøÞû³Eûõþnø§†ö ©ù ÿö°�‘ê�óåóZëKóåíh}ð¹/÷lþg Uþj'úl Äü=�˜û�yõÎùcú,ñ0‡þɹ›Í Ü ?üs�øˆù+ø}ì<ò‡ß!éÛGå]ؘåšÙ7èáCê,ëLéäì2æçëúãÈì­ÜèÀÏ/à”ËAÚŸÐ>×BÕeÝ›ØèÓÞúè3êç˜óîð{ñUò‘êãOæÝ¹àEàjß´Üè áÀíôðîë™ðûîCå¡öÎéö¢ððôßíóÒÈêEÛ³ê?àtóâ9úë3÷žì1õöá ú’Þþ\å§ùŠé,ôqíšô0òÇòõÍíHôzíéåíî×ãëGß°î%ðeòú…ñXý_öp÷ ýðö%ñlåÏøHèÆê#àBð§Ï@ô­Ï.öJÖ"_Ò¹Ó\Øáý¬èê�¼ã& ßõúÔÚ5úUÕáÑ ÄÒD÷ÖnJØ2ÒÛ�åhò¥ç‹ù¹ã,�íå$þ¸ç¤ 8ßÞ/׺ FØfúïÞñî4æ ëÍíCç®ï®æôèoì;æî†è óÉê²�pì öê2†éúúäèøö¡ëœîËô–ê_ûŠõlþíù×ý>þÈõxÊï0þUïI÷$òÏíDôûíúí¨ïÕç¦ârïiÞ#û-ìçûÓõ(ú»ðZý'ðÐ�ÇöóQüÆ�¡ùKÿãñ$þ*ñãúˆù$õ÷ýkÿ%üþ±úÂÖõ`‚û^þ~úÈþqòÓBîñôô‘þÓ­ûRÂrüCØÄül�Pü|ò¥�ÁëHÿÀï­÷<ò°ô-ì„ô†ïíkýè»þÄï´ýšðhŒäÓêà4úÌåëöãæIõÏä|ñZâ«ðÄÜVóLÕæ÷lÔuûm×€ýˆØ;ýÅÙ³×ð_Ï.ýÉ®îðÊÇîÍgñíÑqìÄÚ…ónÝ—Ù_ÁØ¡ý³ÛÛürÛIp×dÛØcø9ÞðÑÜ›ó¼Ú~ñÏáìèìékðÔé•üSåRõ¨ãlêUãí™Ü&î<ÚƒàEãµá‹å;ò®ß ðá¤ã%ægæuæÍë¾æôçká+ì4Õlî÷ÏVéÖ´ìÙáV÷¤ëÓîÚ¯í ˆòsùÿûaûrçüâøÄEðâ eîð’îe»ñð€öñ»Gæ7 ;èÑøê¶ýŽÞ ìÝŽÿÔë#ê7ÝC vÝ+öCáZï5Ü;ôØ4öyØÇõ‹Ô‡ôêÐîüÖÓé‰å®óöï`vó Óõ-øÅúÃùÅûEúªûÄøXøLô™øfï±÷‰ïuñóÄëóæI÷"áÓÿé¤�õþ‚øôüUùÊü¡ó§ø¾÷ó[ûâñÅö§íü!íÂù€÷ñå�>õ¹sú=õ ½ô Le˜;ÿ¸ã�äIr *‡l$ÖØ$Q�Ÿ"õ�@ÒÜ MŸ#2�©èè'Ù#Ï(q'M!L#q%á“ø o3 á„!«Ë@q¶  Éý¨ JúsãøIÕþˆÞ»ƒ*û¾ ^'š îi ô"•%%V §$$€)¿¿0b Á3œ¢5#S8ÿ7”D0Á…)› -'¼§ åþdôõ'îÿrø !é5!È×`ÄüÆÔû‹Ø)³ùE'ê? 7ï¸6ô>êÖ™ç(ôí? ;ò7Çô†ÃîZŠìcÿ×ï*ýAí™ü=è`üìòûžô‚…ð1 bì'Ï÷Ûf˜ø4 uññÿ õ±ø7ë=ÿuæp÷ �fÿ=ú{=ÿcÿÃ÷5ÿfõV�øúÿ†üÿB€t˜/Äk� y öé ?ôáÿÄ�¯øUú&ôúôsýOùBø›øÿó~ïsøîâúöyöû|óúùó•úpïIü;ïÚû†öÆúö×î½ ¶ìýKîÄûFìUûµëžômîÌölìÓú?éÊ÷}î+ø õ zøftù¥ëý–¥‘Í�+åüEùÏþ\ïÁûÝùÙø^–û úý‘ýb Éúz�>ú‰÷ú¶÷ øúü7÷Ûû ôzø íöEíð}ôOóvö+ýóç�)ï 6ë3þVì­üUðEÿ¨ðxü ïºõÜí[õ“íóøð¤ïoòÿîgð3ê­îÿè3íAð´êîÈæ\æcäûæoéè ñ8ítö[ðšõ{ñýï™ô1ðYí-ùÊçÿ½ô^ÿb�ŽQþ*p�ñrpd„’ÿ' ö÷¶úÚp‚ V… +ß GUl#ÂÐ!Ù ý ¾ ©ôÏŠBgŒ,qè ÿ[  qƒ% ú m¢ c¶rÙ #/Pų†U N3¯r !ϱq#O$ÿ�%/r'Í;-õ0iO-–'##9!ò+ *>ƒb ì e 2ÕüAüÿƒO½ÿ\$: ¼&©Í( ë)¾Û!•êφ»ÿäO ? ìþ¡(EßÇ$ho,Þ†.ˆ¬*æv% … ,ài ˆ·Üšî+L  ®"k+ EPläíCã«çF.L!@Ì©¹aå<Ñ¡ëT$<}}·úSE"Å †#7%ñ$² )$n7#™í)éÿ101§,ëÚ eY= ã"Á+nÊ+`*¹Ë$å Ø]ùöfÝþèEA�Ó™ù Î M Ÿ² Øà³Í´4~’ÕÈ<!Öo'"W(‚'+¾%œô!>Ä$ü½&kóêPfÿP&w…-ýþ)Ö!å%üJ.v1È,~²#‚“û‘¹ÿ Ï ×  I~Ê’Ëy ŠpÜ¡º›aÎ ¿ �Qv&£e"¦ þ‡­Q ä52Š Ç hæYêRõý& ©ýÅhX ÀŸhûjYúå V( ú�<ƒûá 9× ú¡kü‡p¢ýÞkô,´õýý‡þxþø {üX “�ë B– K{=  p '}úÖÎö )ú¨ !þš Âþ®Î�m»þÄÀ÷€ï`CñªÄϽ‰Ï‹$tÍ”‘Õþ—Tùxjð›êÞ'sûX,a*t$Ù$!1Ïšöìø, þj &ù_Öû›Tïpt ”!¬ '*î&(ë «!Z?ʼn yšÿ2œÿ¬ q × † çþßùù¹³ðfîçTüÐâ}ùÛBöBÖ%äÔÛ½Úÿåÿã¹í„ì„ò4ò6øñŽüŒðüAô¢üÅïÂýÂíÕú^î«ùrìrüOómÖ÷Ö.øå°ü Äú¿úÒîù•‚ðòÕí^ 0ôv ôóËógôù¾ RûÊúªÐülúþÊ�é oøô!ëðÿQéX�¡îfÌòf÷ögðI Íé†Õî‚ÚëÞ åǨîÉýM÷ öÎðSóÃç›ôwèóýìwòþëtô¾ñÇðkþ`ì»ûïqóõ´ø„û)€ýØÎû•×ûU œý×úÿ@7•ÙfqP�ä}þU ÿ• ¸¨³ Ð�¤ú]úoùþ£ù#hõÍÎê@¼á¢ýOâ´ïfè—ð·êû\ê ûaìgõiíçøjë;ÿáê*žé³ˆå§Ùã þùäÃõwåê}ãç<äÆð–æ¾ûºÝ/þåÐ~ò¹Ò5ìUßEîè<î)êŒòŒæìõ3ß×íMÝøâðß/èIàrô¼Ü÷#ؘóûÙðÁãñ¢ìôú[íÜÿë"ô˜éuï1êêöîe?îœxêw ½êÕûžë/þ¢èæíŠñªúžõùeCì¾ýé;û–î[Iîw íù 1ëè å<ýßÔøžàéîå‚ð5éósèLòÏãÐó³â·ëøæáêéËèTéÑñ¡æpïÖàë5ÜbåWÝÒÜJáš×@æ¦ÙRæœÛà%Ôã½ËÇíÕIòRæºõ.ô,ûO�Nú$ÿ­ö÷øJñ|÷ìðÕäœíتð¦ÔÂò]Ý÷öæ6ü°övø~îúQæàé8åÁäbè¬ãÂéÊç=éYëðê>æ;î&ãõè¥ÈðZ ùëù‚ý‚íˆòRãÓè¶Þ¥éïÞtóÍèöáøîì<çûÍëHñ¬ðõ¯ò,ù·õ&ïTó„é,î5é3óÍæÍý:õ-w =ýŽóf £ì“ãè×åýøØßœðËÓíïkÈäÊTÑaÔb×§Ýäì2ääôXèŽô6êïøsì%üjôSöiü‡÷÷øïý¢ðíóƒï"âõ´Ö(ý]×”—âÑiìºßçˆÿ‹ß[üôäfûQïàúƒôüö²ó®ñ ë©íñÛòémÕ¼çÎÙ‚ç Þ çGÝÑå ÞŠä¾æËé´ì3ñãõ6ñ6þýî¥÷Œí”ìcíGæVï{ç:ð8ì`îÙîøéÎîjæ3ìRèÝë¸îÉí©ö2ë`þíÒ�õ¥úãðPó¸å†õžéûìôKøbôpî2é–æƒàdâÐÙïâzÓ æÞ9é ïaëÌöæ?ýAàxøãïî´ç,òê†ñìíçÔî5ë÷ë¹ñ,ì~é/ìrêãå�ô¼ßËîöÛ#èáÙ;çtà™Ü`ìEÙ®î»ì±æùóâ7ì:å²èPåU÷:å÷.æ­ñ ä\úãîÿLê¶ûzñ(úÃòžùuòúÎðXÃðÔôÉÿ€õ¸�ÎõŠ÷l ôŽùóï˜ñì}ñ—ç§òæróêÏòæïÙñdô=õšõú2ñ©ù éêôÆåtïàçÙèTêðæÛêýí#éß÷`åÔôÒâƒåîä4ײêêÓðœÛ<ò|ä¯ðòçãï4êaô~ññü“øò�cûGüJõ§÷ÉíyøæëAü¿èf¿ìG‚ø 7ý|æüD@ü“ÿhö÷ý®òÅùVñ-ûÁìoò:ÏÿD ¯qHµ�º üŒ÷ñæÙö[Úâ÷hÝ2ô;è0ñ9êíôÍí3üµûǧ�Ò �†Vü/ Àìçp¶çåë}ó¨¨ùü›�Ò óç ÜÒ¾«$dyÇãØõvbò^\÷(¶úQ-ùcNýo “Ï¡VÉZ ÷¯l ¨*�‚ü§ ÆþI -ûÆ 'ø¯nûòf‡ ÷}ô +m É }{^ž ÓÌ Y¾Weö÷ö0Tþ¯õeòP÷ÍÞÕþñàÐþ+íêú�õ†ö_þæónþHú%ô" +û;æ a:À‹öý´ð=™ùž!e "¾"ɳ#N:( _0A3¿)+-Â'&A  ( ¯î4 ·°¢'ÏIÎtÿAv�Qs,?µ„ ‚ñü õ&ú Ü ÚDöøüåú™õ˜ü(Ì HüÉü~iòsîóùaý£ö=bü_Š�×ûéþ£ó«ù˜ñ3ûÜô=Jó”Ûì˜ûç¶\çtû{îÜõýûKû™†êx #�Ç .ÿP ú.9F4ø„f6¢× ‡þ+fþ¨Îþ@ ½ü/ü/ÿ·ù–÷F¿Õ„Ó—K Û ‡ È üÉvœ ¬Ž´0\iŽ »#CPýÃý”þ²íýº ÚyŸZÿê àçþ3 @Ì¢îãû¬%É+õ!Lº(lƒ© t ºMÑ Ø¸Ó ÐÊ %D$êô’{î C åÆ Ž  Gî®ÿØ�ð;i•›�ª ë÷«üpïï ñ‚ëöõ‰ù»ý.ý‘Âý= ;ü8 Yýã³þÿTý°þ¯÷ûƒïtðí'ç{ö,æTUïâ "ÿP ¹/9Ù õ? Û‰S�@ïú0k÷Ýþôè ­úW÷¤&¨Y 3™-³= Ó™Üd„àèò:MÑÄK ñ¿ü6–®Ö( ´½i…vœ3 0ÐSÀ�-¿@ ññ¥y :i %3’-ÒUPŠ#7e'/*2µ/<¤-y•%Êï# ýz$uòÖ‘é/½ë‡¾ð»³îš íDð8·ñ_žô2"ûÑ ý „úT÷ýò{ˆòB­øËÞ�ð‚A ó c Ø• µÿ_gÝ_üƒäà ºyX–¬ñ á à âý OŽý˜ þ̳ ®0cy=eCRwÑþæšà²« ~/f¼ ŽA<± ö}�hRrà ­[ v–‡ÈXn•Ë0 ct � •þ öÌNóD ^òŠõàú%Dþ³]MãÿÿÃúa †ø] õ� üðCô‹û[üJþèÈå tP íe õ #•d�»×“ŸúKùJºÿ*^"ç`#&<#ObÕ)ú56†5N00õ'ï›° î$ÿO üñ- «êëï¸òsZï} ¶ïWeówÅ÷Ô0øŸþBðýø«â˜ý~Þÿ-êIû X¤ý)²ñ” Tð*õò:øÑùÍóñëÜñÐç@ûèæuäëp‹ùÏMÊÿ ëö¿ÔôÚùÁ4ûM+ö· @ó,÷ªñYðÙíXõ4îåó˜òPòMó«ø¤ð÷òí½ðóêò…ê=õ'ï‰öžðûüìLôIñðàÊû*ã£ÿ¸õ"ý ùù¸ð€ö ç ú;ÛQ�×8äÜÉ£ãTýžægöµÞNöåÏ>ø½Ê;ô:ÐññìÏ­óÏ–ðTØ î¼×?öçÐUþ9ÝûüXïðûŠò,þßí5ý¹ç´üžÝZÿZÛúüÕávøÈß³÷³ÛzöŒÛ­÷gáŒý4õ¿Œ¾�* ÿ·�ÅþBœýkgŸÂ®ÿ×ûJüÎ鑸7áq÷Nâ³ö?êkò”ógî�õ&î'ó¶ðñôõöèö—÷Êí´ùhÞºóÕŠéÔÖdêbÚjöÛÛ7÷úá7í·ågï"ß²ðÈÚ~áŠßÚGâ×ã\â4å‹äëÞ0äpãVäkêéÆí»í§ñKðî6õ¹ãÞ÷èܧõ…Ö%óÏÕïð‰áSðMë¸ôñÂøfûPýû]ËòŒ±öÙ ,÷"éaú@ß”özß/ïÆàëå¶åÜåvî9î$ôBômöá÷Bó¬ý…ð¼ÿpùûý6õcó8ðhï©ï¸ïØðäîð½ê¢ñJä#õGà•øœáÕûvêÌÿSñÙÜôÊñôûŒë ùØÝûý~Üþ‰êÊùï ù£ä/ú7ß ü•ÞtvÝõ ãâvìHô&æün!I1’Jt ÅÐO9"“ý¸ ûØÿëý¯® } œû„ Î!Ç�Žþyþ&ý9þdþtûü*öµ÷žõçëÒþ׿ÓÓõÑìýO Xük ð– ˜�òüE�µøTû]ü½ð�Õó2ýYüDúÚö_ù­ðßù‘ñÏù0ô*÷[õâõûãôr ð„ªíCû”ò'ø÷ü°õäû~ðÒò(îåÒð9àCõæ¾û*ë{ûÜô'ðÇ÷`ìëdòþë±ð_ùÜî<öeöqð8÷dõî‰ñêÚä[îÚå¿óDòéõ(÷žôúó+ñ:ïõìXèfìíâÞï¹ç1í‡ñ!ä¨ò?áëè#äiá¨ælábèÉæå–ðeÜòÔ×qé™Ý#åuè î®ðöûó­,ôj÷£MþyÃF j » à Õä  øjûøKQUTLp©„t „ ¯=ì5¶ÿN×ÿÈ êÿ7�Z�äúÜêü– Ñ ì\þ6öëö/òòÁócð ùþìéÊèìê÷òMú?ò1ó-.õS ùð]ãé» ?å¥ôèƒ ïïÑ­ð‰²ï$ó2øõvªô’óñX;îÙ—æÞºÜ÷t×5qÙû©Þ¼áó†Ýi×:r֤׼šÓj}Ñ”óÕOÛáÁEæG®å»‰å)~éjí°”òÔËøµüVþÆó† ³é Ø/… _$Š Âº/¼p¶�9y”ýº‰6·ã ‰&¹ ÁL !}; ±¢ $ PW QáøÎ/"ÀT „1¯ì …tÙuO b W ÃÎÿ1ù¸éûqÿ¨æüœ ÓùÆè÷Ù÷õ¬ÿ)û+îü­ ©WST ø\Ü÷»�îõðøïÀòøñë&ôK hûØ a2 Û¯ÕŠ¤ôø/ úÆ÷ÀûsÖEÓ î euþýßÛÿð *w—³Ç ÒJü1  X¬ =¹ ·ÄÐbÒ? H â ± ³A;ÛôÚ@éý¹åTûµäcùfë¿òómòaîÉüèê!õ†õ#îç%Dæýmê½øŠáføGáhøŽóÜùVÿvúxý†øøù¶÷˜üª�¤ÿê Û¤#¾ÿæó“ûéðRùø^þ›�D‡ ú÷ žvËJ>¬‹³ ½ { Cé ^ë³ xÿs¹‘” Ð ^í%ä�¾hÏÑÐý}©ùŸÿ fþøÍoü&T – ƒ÷áXý_Z½Õ ñÉïx ƒ!q ™)‘¹zÆzÿ”ý›-Å ô ( ¦ÝÞ€Zdy™ ®½é yF &ÉÔ ¶?Î Î+0·ƒoëK/õ *2g‘%êÝ\�«üÿ ÿ©t› >9 ÙâýLlýß ¢8 þnÜönö…ù/éQÞñrY�¡£ à mËôëìší�ù1þÚ"9ù")‘û¯&¶ú°(cðž/‡ø,ð -" x"‘øK(r�Â%ù-!¼þyâúùQý 9ö_@ðÁ³ø„§þÌ ¥ùª†øƒý8õï�:ìã ñ;�ÙÛ¾Kö )êì Íè†ëbü¹èõkå"õÁå)ýNåÅè Ôø×Þ©ü$ûs÷ ñÓóŸíªöí|ûŠð§úÃó†ú óºýÂõ½ÿ(ý1¬ÿM8âW Îÿj¿ðzçwõuç±ïàòë‹ùÞñÃóýôñÒæ’ö!çMþÿùOr1�8 núÝ/÷Cô–“ô½ó`÷vçøóÆëÚë³ï°èHìËìñÿò/ÿø óû£ @úÐgùWý+ÿáìVèÓþRë ûþçüÃèèø{óîöbõ¶ýùõðNëyÂ�(GûY¤ûÁüûû¥ýpùmúPöñ¯ôí]ögðœúŒõÏýõüUÎ? b Ù)O�ðüwÝÿ<Ühù0ý¦õàðÊõBò½ó÷Éõ,õÙøåø§÷é÷øêñwÿªè·ñ;çáç¸åªí÷Ý*î¡ÛHåá°ßuæà^æ-ìlàÐúeÚ ú†×ÑôØößD÷Eäp÷“á2õPßùïÏá‡ëÑåpì¿é¯íÜð@êø¯îW÷Áõdõ#í%ýdäp\ñžø>ø¢ò î;òîôµñþnö½ùFýâù�qú–,ôÉñZ <óRšò’ ð~®òý�†þxûiGù2÷ý6î¥üÁôíùƒ÷xüýø �Nq § ³íú'qó-ýäùëò%þù;ù$ü^ÿZþ&Çÿï•� #)ÿ‡%þÁˆM ŸN²l ³i+ø×*3ü!Møvaøe‰ù$ùT8øÿ Ò÷v_ù©Uü òüû¯üµ6þë&ÿ4Îúê6ôÊ{ó¨oóNºì~éƒ�í€7ðË_ödþFüQÊù|Æö�+÷¡ò>õ¡õÏôMòTùŠí7ýÐócÿÔûÿÑpUÌÿÁþ~üõ‡ú¤ïÓø%òkõ±ø«òJýÖôÌûúYûïù·•ôÚŽôÞþíú×õÅýœúB�³ø(gôáxûO�ü/ðôI�~òÏüäïSý…î”üú'öñIµò²�ÛùfÙþ#kýÚzù�÷vû•øoñãþŽïW Hùè« *£xÝ’ 9�Jÿmþ{ý”úÿ ñ‰}ë»þhìÙú^ñìöÜþâøF [ßC s ’ ¨À †8 U]>øQÛðEüuï<õgñ?ùoôÏDúí#lÔ³B ¤f¾Hü}îôsõôHó&üÜð/ºúܱ–nµþ|OýY çúÐ Qó êîÝ�àï�NîÛºèûwä™ì9ãXê°ã&çåà*é3â½ëßëpìññðóôÿõ‘û÷øüÿëúéþ¸û›Ìô âí=øÍóê=ÿ÷cÂüý�@�ŽûYÂû›½øÀûØú°ÿŸùÎ8úâ¨Åÿè Ì�#…�AùT¾yøÄ Ôòÿcùcý�›$ �~þðÍÿçk[ï#<ú9©™†‡øŸþ]dû× Åû© ,ÿ“1NýØký2×üjùa0(©\ ž‡‚17 ˆìà …ã¥ fã7’é~;ÿ Ѥ¹ ñ J1™i L „Á;Pa) �ó–P!9 ~ nòŽ‹ID[ó‚S þ0 †þèÿ«�þ(ˆÈü -òþ¢î ÷ãéLû¤ä¼ü<â–ù”ß5øÔß3øJ黸´ôëú˜÷ø‹õ®ðFõqî¤öìò“úöêáöf+û±ÿjïÿyü–ùËOõ¦ôõ"öLOùјÿ¾„%Md¹ý,þô§ö”ëñ,èî‹ß&ó\ÙÖýIâ$uï¼  öh xûò û‚¢î<Óâ·�èâßùEåôõãLø8àWýgàËåêï‡ Šò•�åüÝû9áøîå“ò¨å“òûàaù ã•üHìgû‚îm�íòGù­­ ´� (� œýB«û¾õ}þ,ïË�Qö#8øøšõ,ý¥©ûdãù âúH ûñ§ûp šüÑûÑjüÿK_ÿ�¶þ 9�íÇþ5þ„úV�*ô<öæþ´ú>šóÁ °ë ÿÂñ,÷Eø6+ö£½øŽ÷=þ õ¸üïôåüŠîT%ñ÷fûððõ^ç!ò7ç�ïíšîÍï ôò/û¸ù6ý Òø ’ð æï rûd”ÿ ý5û‹õüŽñÿ¼ìdþ«ì§ûäë ûƒê¹ùEïÔø+ñÃú¨ðCüŽñ¨ûšð#÷‰ì¥ïûä.ëàšêzßëê«ß»éÌà¼éãñîütÈÿ ¤�;þäïrüérô ßgóUÝFôoé0ô]ó¤öŠö~ûÏ÷´�×÷ƒâøv½òäùæâªšßÛÀߪÆêøaø3­ü­Rý¸×û ™òç¹ççRÙðäºì9ëž,ú); ·9%³ ¤%ª/#|÷ÄŒòýªéYþÙ<Ög­äŠ�ø¾0�yRçnŽ\úà æï1“ï«�Kñ¾øçíPö¢èúGæ-ìŒþàÊ ª · ÑÂYïû'° äLnGmðb�d`ýñ¦úY£ô «ï°ïË ï ³íâ,ëÙ\æ9Çßs/ÜŒüGßQø é˜þó- aøq¸û" % ë>GýYp÷¶ù™ôãó;òTñäõƒíøÿ‘ó‰d%fYý]¼û ÉóO�ëÍÿtôßùÚÿ{òsø{ïØëÄñtë"÷öüQþÅÿÖ5±ßÍ zè| —úC(òym÷œòÿ™ó‡þ‘÷¬�Öõ¸{ÿÈÜúL Â�RKöÕ�yÑü¸ ý ôüÇ ¦þç g¢ Nœ[!¼> Yÿ' üþ§Ð+ ¼= …å .3ÿ`KùX àóh ˆðÿAï4ùJó^÷yûéüeþx¨üÉ*ü«þ˜ùŒ�xôÃó �ÖöãøÈ÷aø†øàøÚújüËû»ÿ',Bôm ûõø®%úŒ¹ù^@ùƒ Vøð×ô4ÊïíÿÝðíþÚóî6õ\ röm ói Rë‘Æâïúëàäí™ãEëå-ñ½êÑó'óÞú‹õññ¡ñ÷îïØöíïú¡ð7øâñ„ûâèb�åØúîÅù–öç�¦úäúÿåõ>ÞñÐýbôûbøî\ú˜púTûû«üõñ÷w V¤•÷õZðôÿðïZ� ùjîÜ. ¾7 tê Å ÑÛ ø’ ŠüwýúCúýƒú×ìÿ Ù³ ~è  e Å[þûš¡ÎG@¾Vi Ž] ` ‚ÃG •Z�( aü¥€þU¶@ 2({ª Û 9þ² 0þ8 ¶ýº‰ÿà«]v fò ê ~ g b  cì %Ÿ\)þˆ1S $0¬^€9Ïþ×Fù;ö+ VòÊPðºÎóä uõrhîñ"ãåê Sã  át.àWçê÷šôoøƒüçüIü¯•ûÉ Ðü}“ýAñ�Ù£Þ¦M‡þˆ úûþÛúkî¡þcì$äòÁ ¨ùN.î ”q B ÄÞ XÑÎN¿ _iç ×ÿ‚'² ¬ ì K Ê‘Ìc ß UËÌGD k§  ˆnymýçýø²úEú©ô_ûøµõg÷ñÒì[óˆéhù5ï&ÿ´ô­|úpÌKþk úµøp “ö“ Ðó.~õÍþ.ý†õ`�Pú“ü) Íÿ|ˆu$ œ «Ñ â úi < ã Há "ûU�öùOø Wù|ýz7þ@6úL Wöƹ÷" ùü ãÿ6 þg'÷}ƒîè £í‰Áõ… ùûÕþ‰ a ‡�, @  ål3:ý° ö€ “î¼ ìçe ÙåÃétTîtð: õ¾ûýüÊ“�ìÙ¨Y ¦þzþ†ú òEú=ð$ü'ñðÀ•ùp ï 8ežÕ Ë. T üAHûqý…ö5ýùÒüÛšþ±¦ àEÂ÷_^ ¶› ôÛ÷éiþ)ëøüí²ïÎþÌöÑøÐþÖûòâ ÕûÐ Œó íºýí~ëÁõÙâ÷ÿç‚\è ›æÓë1þëîúšì¦ýòý�_ÿú¦�.öüÃþjÚý “ýL jûñ`óG�¬ç @êÛ 4ÿO ùÅþ¿ gý,ùçûàê#ÿÜâ;ÿæc÷µí¢ðì5ï¸ì}ìbðsì…ìiô`í û�ûµúø�Êùúõù…í'ø×êþûîç<�¡ë@þ&ñû¡ôFþàÿð‹‘ÚT ž«Ôr²üÉËö;ÉòõÿÙí—ùçüø\ä½ÿçç ›î£ÊðÁ)ñíô%ëGcéBéfÿë®ýPñlù<õXû×ó91óuöùn bóFµ/™ÍËí ôÉ¿¹‹ CþÒûê‘ÄäY+î¢î‡KïGú‚µÿV(�Ѐÿ|ù»9õiõ± ïópÞ÷kA[¤ëÚ ÑS Q® „õDëOcâ¡×¶qT¿�š¯Õ�Ͳ­MÔ«)Egþž ÷ø^ûê\ûŠ xõ> .òeó%ñîü&òúùQúgøD�öö3~ý»Ê÷£•ë^ 0ïÿõõPmöéú%¶üR�6õä�!óŸ�Móy-ë! téx÷ïªeò£Úöõ^£Boÿ”Éú?Æùœõ³ ±÷#Êý ¶ú…ëùÍþ°žûŸ¯ô¯Uøê5) ¸dg�¥ûxýjö{üÑí#qè}ºê ˜í× ¼é‡ Äéû±õ�Àûïù˜õwû´ð"ý¶ï¾þ>ê…w舥éÜ´ãN=ã�î›úøwõ(û+ö1ûÍúRühûEþ»ø}õûˆæLÿ™énûRõw÷CóIø2ò]öEþRó-âôü]ö>üæõÐú#õôªðtõHè‘üã¿ù‰äÛòªèøñŠîžò÷ó‡÷ÎóFû%òšñPóÂè(ï êäã+ÝNÔxÜ_ÒGàe×éËÝ.ñÊèÄõÛòùŒõ§üUò)ý=íÊü6å»ü\ßçüOÜ�ØÛVbèÆS÷ó�CkTñÿÐzýü> ÛýN ·ð%ÿ–æ]ñ Ùxê¦É2ìËÑñëÔéúbÚ÷àä»�¾ó¨ý~÷d�s÷¤ÿhkÿ5õVúñü2öúHú3ý@ÿÍÿL4j @èê8ß÷ ƒªøx ºèügÚøòqÒßó#Ó²öÖÀü#Ö\ÿ¤ÕBùÚ™ö¡à…øVæXøÙéëø»è7øIã·îßÞþãBàÐçzäô÷Òç^×ìøNòœô–þú(S?ýïÂùO¹ók ôÐÇñéÐ îòÆú ­P _ / ö ÿجúsÂùrôj»ëÙ{ë`ÿ¿ð0ý¹õèûsû§øû õ<ÛôWýÂøørÿ¡÷¹ùzýµó ùé&ø{çð÷ì%÷òZ÷ÌôùÎ÷Oùp�â÷_6úA‚þú� þ•Áý5®Õ�\wL ÛïÉ\�¼E.e‰å� ³WVN³è Ÿ ]” µ ½.ûæúiôÅ÷¹ôÜöðÿrû' ­ …Æû;þè ¿CúÆ-Jþμö¬ôá ÷øÎûÜ ,ýV —�Ÿ •þ6Žø H÷Xóõ†{íQ ãQßWtâ3ý§éWúÜíõþëçýªæ4öKã;øâBýLæGüåë:�ýì—ÄêŒé“ùæéDõÔê¡ôYíÜüèî…ëá™æ¿‰ç ôìl «ó‡ Âó… }í€çÍóPá¸ôHݹóIßYð,âkû&ã+0æÅõ‡èúò7çüræ:�¢å¥ûòà‘ñÝéå9àÕâ‘æÂïMëðû„î·üÝîœù)íóòdñõìlü÷öz k�°š÷žì§ú¾æÖæêEáåíê†ïðêðèÔðþî™ô2øwùº�Fü þ¶ •ÿðéüĵûã7ú �ú— Ð�• ‚ k 9Û éÐ@÷ jYþ÷²þÔðøõŠð~ðRõÜîû"íšíë{9ôw 6 Œ 2ó  o8 b°qø�E£&ÿo Åúá àþg båð i M  z‚:¢ûÖÓõÁ¿÷.,ú‹—ø#\ømLøæ õèð/Êíò�©íÑðÇÝñÁÙõ¤ûà ü”ÿZŒQþWýtþuý'Lú’œù±üóýü?í= È t s ÿ ”å�üõ…,öm¬ü— ßôÅzm1í "oË4ƒoz=iÅ0B¿‚ï}È v *jneú‡†üûÕþ•!©ÿ $†&P ñ'> &öä"-6N DÓ¬üTRñødóetm% }Öý/ $¾›ø ÿ6üÚýõùöÏòGðñé”ö€êñT  ýõ& × p��¼�ÿX­ÿÒE�Âÿµü��bû\ýå�0ücµXüï .õ‘ òì íïûò÷où±ó³�þ#.ý•ÿ‘ð;ûç·ó¯á{ôµÙêôâÕ6æGÜkÛ£å(ßð.áÖüRã™�‹ïïø¸ôLìZêáCÞîÜoÛ¤ß@à°â‚ãHâJßá×Lå>Ó^ïÜ&ú²ëžÃô£Öù�Mö<ü—ìóû íSüñeúJñõµïÌìlìnåÿè$è;êîó“øŠø× ôô½õÂ�YöÙ¡ö—-úÒý€ü+@øMGñÎ÷£îïJóºð·úù®ÿ9üÈÛøNC÷¦ !ú°Ô@L ó u ßr 8½ —þAýùzò˜•úQ鵿 j ¬ŽB!V‘ @ /„Á / ³;Üúª›ÿ5T ­V¶#nÔ úç� œûx MýºÏý"µûV‡ é× ª("îK$ÝC$5 e#¬-$X„$Õ ‰H]CÃÀ£E¶Û"iÓ;¤~e © .©úvVõ@ qïfnï’öHÿüítûù6öû‚ô“ö»öÈü™û’ ÿü!ýÆXün<ô «´Œ¥wrŸË S ë}!¤[$æ‹$Ô¿"p f#»%kô&¼þˆ%\þ·!ÞO3ýÊ¥ï[hêî íìô## üï#ÿ4$‹ýS#ýü_ôýŒÏú CùÜ ’ü1 îúwe÷lØüôýÙ�äûîû¨ü+ú.ùfù÷*óË÷£ôÒôËûæñ˜÷ŒóLñ0ùpó’ø%þ6þ_�oüÿÎK 3 X B #¢ŽBlýË¡únÌùÀûŠø˜þÛõ~òörÿ_ýDg2‚ #³ ¹ C ÀTØ �Ó ‡øózú«ó¡ùúÀ�âÿõ3�~þ€ úÚ÷¸löÃÏð  ì¿þ‡íuòfñæò]ôòõÚç>òÄèâïjö\ñ>ÿvó%lôuùõg†ùp~ý‘×üIˆùúü]÷†ïiõãâÊõbÝ ÷“æäõó-ô¯ö¥òCô¯òûógöÎú—øÙ{ôòøîÌ0냫çÊýXèò­ïãîsöwôˆøôÇü™íå_ñûðü¹—ós IøL •ì‘Êå&üçàðúsà:ô çaï?ë?ò±êðíAëŠòÚïŠòÄþz躣Û@÷kÖä‚×=߿٠ÞAߥÙäß"ä®êsäÁíÅë¦ìKó9ïzõÕíÞ÷Âêùó{õHùiôöüµû9â8WréÿiË—ûz�Ãÿfý¦ÿŒù7?öt|ó{šñ ‹ò)pô0$ôWýQòQñ¥ñ¡î—ñuòFñÍûÇðY=ï�îÔûtðcóõõ/ðûÁñ§ýÅ÷ºüÝøúÏôørôÖ÷¤öXøÑú¥úPÄûqôû: QþÀ�—�ü÷ÿdT�« 6ÿ¨ @ÿ¯ÿ ŽûDö²IïZ�èbÜäŽ UäÛ ãâP ›áƒõßbüjÞ"ú"ãÛû±íþøôL¨ô:¥ðë¬í² díBCòCæ÷1 Éõ[ lòù÷s÷Jë¥î7³ø Ÿ’i†ÿ”búÐAù_ƒùø�XùÖ]÷Ü;õ2Ðôæþ°øU�j C  ³»�Èÿ ûÔú‹øðûq÷€ýøÕóUþŽí—eó™ü^ ¡±ã#�˜ pqÀ û °• µÁ zþW:þŒ qaØ å²^ „7 dm¤úñ}üÛ &ý\$nø,B÷ûögõù%õØñâùóÿøÜöž ô‘JÂÁÏ` ^gÙ¼Z+¸ M ÿ#€ÿ9?¬Î8 .¦¥ I ? �È�äÿ¨ý\ýþþØönúŠõ†ñ­ú#óhþ—ýÁ�<ü¬ ¨ívÉ©W Ñõe?ô¡ôïüxï6 ‡ðçïøþŒ÷.ù:ÿ¨òÜø”òuï¬õ+òšõ÷c÷âóÊü¯ñ2ýiðüù¦è,üKá‹çâºèî°‡þ.÷nú„�ù–úÏúø¿ý†ùéÈþ¡/° „Í t¹eà ©ÿŽƒû”xõoòN Aò\ :òÿ ñz¢ëþìåIçÝ÷æì‚û�òS�2ö_ù€ù*óüÕóÿø¾ÿâÿ³þô Ï !õ Œ Ì ­L Ò !�,U‚?‚[¦Ú¹ Ž ¾ þ5ö›ù~ôðiøôì 8îÜðöÞâD. † i ³‰ tÌšåkfè—Ì|“ Eç ©Ô1”ù� 7úÇ mú õÿB§! P Ôžà Р«ò éú' €÷¤ ¾ó‡êÝÿ¤æeüßë½õÎó¤ðÙù ñÆòJó’û»ñ¸ò„îeî’ëDñîè$ö­æù ç7ùZëçõ‡ñmôêõŠú2öC÷óFnóeöe÷Nñ—üò]�eìŸÄäG iæèì8TòÁY÷˜üS8À ‡Ô†ú 8ðî Wöt …úS õÅÎ÷"VÿÁ•÷a!ëü 'ó) "o ¯ý.;ö›ðMñoàÎñnÚbó-ßÓñvåfð%ãó­Úî÷³ÚŸøYäƒúUî'ÈúX ù¼t¹ý(hñ%˜ ôéþãõ½ ú-Ïÿ“‡ €=à •): >ò Ì‘�/Jþ°û.ò,û]ìõüïõ6�É�fl O Ð `K Qû ú7cþP º{ ¤ õh Èì+�øE?ƲÓ'o<þw’ø^™ûå�ªü†÷.÷¿ñÀö8ðÒùñäø!òòø1ô`ú”ôüMï'ýâè,ú æ>õØéÑñ½ñdò(øò×øœë øåå|øê@úõdû[õ½$ë6 ,ç¬ó~èiæPêÏÜÔì,Ö`ðõÛ/õç÷ùÛïž�xôŸ ˆü]ç¡ Uþs üŠöŒýóüñ÷�ûü©ù�RóBýÃëÓñèé+ç˜í,èáøõè9�ç¤ÿXãX÷rá]ë×â°ç âPïÒÜÕòÕì/Óþã˜×â×Þæ^èÅë%ñƒï÷‹ë„ü:êüóð^þ–Å3ÿµSøXGù¨þˆ�•3› à ·Ó E" u اìýÛÖþ�].ûÀþšù¸÷'ûÞõŒ�[ôãˆñòòá(ùкû ûðÈ�èÞÐï� êû]9\r�·¿ú¼¥÷íçû £û²ýûó<þ¿õÿ¾üã�¡ý.ÑÌ“j�ø>ÿgüv¶õ Ãÿ3ÿ�†ûæûoù«û‘öôþ,õ¸þÇõ-ÿ•õO~òDôî»’ìÎ ^êLòêJøRî‚ö ï9éjâ ýã¦ü_çü ép7í÷ Nñ­Éî<xíDbõ(#û] üú? kýh{ï>éýÏ Àûû JüÉ 6ÿ¼…ÿcHý$…Fc)S›¨ËÀ Z�÷ ÿ… ™þ£)±Ôþw�±ö²�Àóqºö½&Ö Œ%g¼þ³ ‚öòð¤÷òï_ëP÷[ïÌÿ,Î% €–8k Ÿé÷ Û' kÂù§){ö Y_úTÛ¥ Ý ãÝëAx²ªü1ôWìì–óbïÜê£üëô¤ }ÿ à Ð !d ”ú^ »õ¦nñÔÕòd´õòüô5òþõ’å/ÿTæ®c÷ ü§ åÉËA�¯®þÆ�hý•ûAüïõ;ÿ0ïUúðægù=†�Hþ±³ô¡ åìƒè3ûŸè¿õ‡ì·÷Íëø›åñâSêÈâVèæ`é9é!ò!åxùdÞOõØÙ_óö×à÷²ÚöuÞ¬òÅÜ“ðŽÙ4ålÚŽÙ%ÝpÚá ãç¦ëµì@õð}ÿíðßâñ/·ö¬û‚ ¾øà )ôðóùÞìTð3ðbïøýåû² û÷A‘óññ; ì2æäý•å@ý¾ãfú âÅðˆèAð¿ò§úsúîþdKû³ hþ Eê !- þ".p  §½^bÿvñþ�'ÿC�sTe³»M¹ç è&ú×dUU#Hªh:m )CH*;h£/ƒ (È™g "e$,H"+Ò,“#®(N 7Oϯ  …ÌwºÛsÌ#eÆ'£(ã%â¹R ›Ì£ÖþA Èõ_½ì{•æô{çåçÅë"îXìqú”ìWùÄñµõµø­öwýdó‡öóº§�xüëkï®ûìèôçìíówúö, CüW"ˆ \úD ó= úà1¨±º13 o „Dÿâõù‹ºþ>%cí�­—ss‡+»®Ðü¯Ðÿ" g" Gÿ› ¬øZù`ûÿï›ûók Uü.°k* <Ž o6 ù^(¥Úíêû [÷»ý ûòóý½óiÿãôÛûb ë g•ú9ßœH¯+ “ýÌJúk�oøûâ÷fCù£ îû— þy )þiüîôûPû|ÙöBÿôeqøK4ú‡ùøú§ÿnúÄý§÷röÈôÞî•õñù’ý“ø¿ Þó¨ðÄ¶í¡°êt¬ëVþÖí_ú‘ë.õŽèœë„êãèNî–ïpòEñúìòMþ”ø³Cðúú1í:ï'îÅòmïxö¹í©îüì®çÈðuì`òDõKò›û§ø÷zÿ% Äÿr�ý|�û=ûþ'õbúÑî[ójêËî†ðcîµü?ö® þ 1ÿž±ÚÇÿŸk�Ñ÷2*óKÜø’ûºû„óäðVïè—ìäë­ìñçðûõ¤óÎùañ·öJïZðñ�ï[óãðÇñ?ïòîtë,ïhé¬ïç"òå ùcîñý™ûíÿüÉùT Þúa=ú| ºø/Ô÷ÿñøDïÔö÷úý¯úk lÿãó ?¬´¢à%´ƒ?�,ÿ©öÜöOñ‚î—èì©ã¸ð¢ê{øÛò[ÿÉò*{ï�Âë`ú\ç`õôã?÷4åÔüàì¾ÿBï8æç3çÔƒó‹š6@ ïje£»Œ†i“å øy¢öÒ×ö¯ ¯Æ çMó@Ê÷zð˜ö%ïíôµì”ý[å9þÎÞ øëÜFõÄÝ\øˆÞ»ÿ´Ý¦ŠÞ™ýyä/÷ûëJö·òòôrük÷¹�° ÷{ëõe•üã{]*N “�bkõàÝìY ùö0]Ü E=nž6üOï¤ fïD EòQòÖòðõ·Nÿ꤮ñý ûˆÿRÿnùGüÊyÿ}ÿ÷Oíó¾3ú ™ïé¥kh· ¼-­’cýÄNø“«÷ûø´ü†ü2þ@�™„ ÒJÇ0‘�6¬ fÛ3Ò"ÿ�„úÆîQöõèøó_êõö¬ï”úöýýúÇxÿ• mÀ×Ö'7ÿÖ›ü^ Øð* Îá›ã‘­îû ó‹wù )*ì e2 & Ê Š è r  ¹€ÞLòu�óäŸü¡Þ¤ùàß÷.䀸9ç$þÔêˆgñ‰ Ôöç‚ôÈÃî ÿQèqþâIå6äæŒûèâµúsâ4þçèç9ð%[øuþÜü÷÷ øóõùü-ôîù(ð õ\íUöÀíŸ÷ÍóŒ÷ìúã÷àÿø=ú�wûnþÅý=úÒö¥Ýô4´ò [ó» 1ûäÒŠšÕù1ƒ‡qL fþ¶Sû¢÷„ü ò ýÇõÖÿRûmé�² $ü­ bý6˜ûüýŽ�@(ýLÔúG÷Fù>òÃøií'ùìëøÄôùDÿ«þv¸½ ´ î/[˜q>¢kþUþ­û½ë@�3ì¯3ö޽óðÿSí[ÿèðhý5õ4ÿ‡û~“™  ñ Z KõÕën 7ì °øF(þ‚øÏÊø/ô® uh¸#y¨%÷$ßþAÎûgâü“ cýÃÚùÎüÜôéïâñvîVòÖü„ó»˜íËAãLÿܺ êÙµýÀÙójÜgòiÜ(÷‡Úæò(Ü+îHàYö汄틄ïдëüÊèöî:çÐê­égï¥ñû˜÷é_øZUúãÿ—VÚ òa ­š mìôýMî4ÁüžB€¯’B"{l ⵓQþð»ôTÿñÉø¬ñiý`õ3\üò +¯žý!"ôy¨í€ý)ïíiô‚ìï÷×óûgö•�ï÷ «ü÷4ãâ %­ ü í Œ ÿëŽpXf  Ù ¨ ùÿ㶪 ´™Ý)G%#æh #É D¡èöÆIó¨ 6øS£ íé/V(.fCÀRƒjÚ 3 ‚ôªêñ¾v÷ÙÏ� ^ —Ì"² †±¿ ?düxR+üG�xòðêÑæ»ç¥èŒéPìÌîºìÜöñâþZû®Òóÿ¾ ~ûrÀ÷uý*ó“öÛò1ë`ù±ãVþ éüqóù4öÁû"ûˆ. Ö ò ”úø,òúóbîòæ(ì{çÜìrìØîÿõHíšü ëQø}êËðfëvëÚîÒëMñÊõóïÑûàîÄñð$èò[ìÞõ_õ2û2úaý�úXüXô½ûì—ü_êñýbï·þtóE�²ð-hìº ¬ëÎUòó ý;‡ÕÿØý ù£ü2ñ@kê§zëé ïï-ùc¶þr5þ2mù<õLPõqWõÀáøýÑÿEûÿÃ÷Wÿåòí�‘î±Iï2MñÍ�žð…þgð6ó8©øEøæ÷/ zh‹T¾3ï�³åÿj€ 3ƒÑR r>) Äü!ˆø)ÞõÌàîxZéóéb¨é¯ å÷ 0âR\ã,ÿ¦äYü¸â‚ø®áÈóuæ™öÄëfaìâ Âë�fëåÙè«ù—æðêåä0äßÞ!åÞyæÀçéæËóÑé“�¿î€ DôW "÷ ªò´ xìÚü­ìwí+ðúê¸î}ïžêƒì¢ìPêBôiöâüË"fý ^•¥C  ÐŒÔ„ sþGþ?ýx³øÓ�û¦[ä «Ý"Z™Ý ¾ & Þo È(ý>ýÒþSù2ûïü·øç$ú5 �ÿxBMl ÍU²`"Æ!@A"Mîþi�—ýÖùÍÂü\ âÿ½ ³ýê áù4sù´WúÛ¯ü Rñ€(ø)øËï äYëØ7ì†Ö?ðjÚ-ôÞørãüøˆîzõÄøÀððûQëçûådù¶à&ð‘àöä]å.â†íAåõ·æœùÅéXû´ñ„þ€ü3�Ù^þªÃûöµ÷tôRïHêSæëçaáîZá~÷Àåù½é¹õ éñ†çTêåOé6Þƒé Ö•â5Ò4à/шääÒ»ç×ëúÚžîœßøë"ææÝêTæ˜íÌè¬ï\í_ïöBîéü9ïþ ñ÷ÿÚñfòúGò¬�ÓïmõèñÈåúCä@þßðü ûTø÷:ï?€ä&µàØ @àKMàrVæm®ðµñ-øèêÜüÄíºõOã�Ç (�°Àæ.)o‘–QÿçÌúÞŽòd�ê¡~ë¶ üJ9Á»u þIõ ͹ £·M à Œ âR�ûI6!vÚj‚ W…­  ª [ýT Ð"+ Û1¡#ê ²§3 â 4ÿâ ³øü."°û&ä"e(½((Â*ú"Ÿ%º P M ÝÛœ³ i!£×ã Ÿ†ëª 5}�PñKöå ࢠÞI‹àb�#çüŽî]ýôÿø°þ¾ûkþ|ý§þÊý™üM�$úÏ�×øYûÕö‡õ³ö†ó¹ôöï‰ü{ï ïôª ˆúœ„,ûwà êÊúŒøbî(�Ûêƒgé ‚ñÑίß!Ä#f8Ñ;\ÿ— ›óö äëúäÿ¢çg(¨õi5³ù:x †8dˆ2u.+[,lQ(µl } Šî¿ÿêùuõ#ïŒô˜í ûßó\^þV ¶ ,¯2_KÀ qWŽä Ë ì6KòCÒó bIlµ˜$w" l#¿˜æ ?9ýbfúGýæ#ê ¶« Vöö!õP¢Èú¸~ë—�bßéôlÝÿòBÞûöràOóèòòßò‘ÿ”ü h—aÆpÌ tûÓQøû[õNütð\ü”ìN÷[êcó8ì“ò:ôõýüòú�æ�ÆûìÍózûì„÷äòøpÜùô_Û%ówÞµúØàüµâ†òiçÅî>ð:øú$ÔÿDc�ñkü,´õ˜âî>fêÿÜé÷ûÝéLùhè õµèhòBë þqíHÞî\îêxæó§ã{ÿCã;�æFüÊê þUíyfðwƒùœþÇ&<Í w º ×âÿÅþÒõ‘ý•÷3ü=û±ü@ý‚ýÍúô ¡öè «÷øûÿRüýâùVü³ô`÷ñÊîÁõ¯íÓþ›ýÙ„ Ú ö 4 [ýöäòÐ)ï§þÏë—ú¢évöŠí×ôÂîŸùJëæð3·ø!#ù,öQüÖóÈö%ì÷õ¬åèöléÃ÷ñí¬÷ïðÏôÏ÷ûóÙú'üúðöþÑ ! ÿ÷‘ü™pÿ @�Œ©ÿ6dÿA°øÆ�Œñh»ø’ŠX }aúyü~ëõØ `îÓÂå¢Mß+û|ÚŽò×Ãì/Ú–ìžæ±óHö¥þh—LŠT•ûì ‚øÉ_ùmöü„ðwòAïâïªôìóóü×õi+ô” ‚ïŸVîõÛîû%t�Äûî¡ôûûñáñòñRëÒôËè/ùë ûoñ‰ýƒójòóÕSûOV ±Û ËÿE¿ût6ø¬ûGþ¼M9Í-1Sº,R­ % f |ÿAÑø„÷¸øÊðÖý,ögÿ�² T àr›à“œFº: 3 !z 0ú´ÿóúõóªÁø[aƒÛ ¤eŒ Ü _T À‹ ˆ ¶J°ùVýÕí÷ ã9õÞãùÄàuµìi H�^0«Àè V ö¸�FÿK÷Òõ,îÓíå›ëâ(ðZì¹÷=üVýËß�€=7i1“û…™òaý‚ð•ôuóÇò<óó²ïUðUïÒèØô1ä­ûèYÿ9ê*å� æõ�jðN÷nóñÕíäîìBïï ôˆóGû2÷ÇXù4 #û .ý¨Vþ+yýE,ùÔïõvBúöøbý òô÷ñ/õåóÅù˜úgþAþ Ç ûVõä0ôÊøõýYýîý¶ûÿòGýšPü´ƒÊ .Qh$°¥ m C-¢Þ J £D ¯ p Ù˜ 4 Ó !JFýœ ¿û˜³ý¼çà ó�TàúõšûúúAª†  ß [ £�‰þúCíýú¦ãÛá Kåkðð£uür²ŸÈ…kMx[÷çèæ8,á¯3å¬è^KíS æó= Yöœ �ö ÷" Ëû¦t;`l�ªÿ¨ú¼Æ÷ 6øgûòkëÏÓëˆ�¿ôØú[+ö�Ëï2Zê°Éè·óüæ¹ï˜ã„éDãbß>äYãrâÞëÀá8í¯ä"ô×çŒþÆé—HíóÞæ÷ }ûujÿÿã¦ÿ‡5þÆúé‰þ5VGÿ Nù$ÞôÛóË_÷tKð� ÅŽ œ \ § ÿ ºöŒ vþÎ÷Èíô7-÷·‚üÄ ’v0/ÿöÜøÛÿ«ô'÷Cô"÷:õ8–ôUòòòéKòÐý‹ñìøýðìöåðç÷@ñ-÷zõ‡ô‘ýNö)Aúž ï�å y &ù“ »ýBDønƒõ)úÕü›�SÿÅ6I7Œ  ±Ì Jˆ5Õæÿc ”ù~}ô€ñ¯ò*Êú5þI£ O T³ I ùý+öúÐü$ú¿ÿøw´ôŠ›ò-ôò_Cö€Ëû =’ âG�ùéûÍõ÷äö†Ž÷¡+úçü§øý îýW øü·�MþûFþ‰ýËýPü¡nµ›¶Iù j× ¹› ‚—€�֌݆fuª"¿ÿlÎùGUö ¶õ®Éó¯ ½ï×Ûíü*ñÎK÷Õú 6øúŠñÜí>ù ò_öþóûïÏÕ - [ ®FëüiðBŠç_è;™ì]RëÑêÔ ôA£ÿ×K~"­$g ¼#€þ&#GòÍœóDõ” ¸óË o÷CÊú<qû5�Vü/Åü¤0ÿ èA È ôÿ™Ïó ¯ëDèÀ¡ê-˜ó†•ýheôì <´øÚ Š-qýØ“ónKë÷�käq,æéhò%ôÿw¡ å�ã^þåtúÊ_óÚKêõÄãœBãûƒé˜ó¡òw÷ø5ëùŽê÷Éó©—ìÔþàZñÕ® ÀÑK}Óžù¾Ø˜ïEâôìþê8ùí¢ “ê,[ç*ZãÇ áÍã­ )äÙã` æÉõ¡ç étçêãOìïÞôÜäÉõGø™ò¹YñL×òD§òb ³ï »íÈÿðí.ñ ðåç>õ�åû°ë�þCøÎÿnQÛ1R]äþ¦ûÉøñ�ÅöÂùÿïÁô5å¡ôúåöóó-òþóõAü. ÌüG¨ú!ù“¤øýúõ”û¸ó×ý€ô+õe�ûüEÿ›úqÿ8üÿ~þÕù˜ÿFô§ýcö†ú/úvùÐýPûÉDÿ6±ü„ )û9úp­õè·ô"F÷ù mõûÖòS÷¬ô½í$òôì_íçòòöø[öiö[ùBñ°ü�ï3üSïŸøÐïó¥ð"ðbôkñ³ù�õçúœõ©õcó(íkðGä0í˜Ý¸ëxÛ:í_áâï í!ò»ödò’ÿYï«Pë\ÿ”èøô çsçâç*ÙøæáÓÅåÖ'éýÜ7îíîíIø íÇðMïXééí»î•éjð…éìè.íoåiï‚èïûê™ñpí)õŽôeötúWõŽùóô*÷öóÚöšïõ]ìðó´írøóðhÿïóµ�Jø þðþ#ýjÚý¼�½øþþˆñõÿÕðŸööšŒÿ(‰Ùëüφý ": Üg/ |ø Š°Ô /  R>mÿâ¡ÿ¤ .Õ b�;Éý·a�)Éy*w»(‰É'1%˜¡ 3ÿpÀú&Äý) ùþïü9� ¸� ÿ¬ Où– óÛ £ëK ê®óÙ<b Lœç¹Qÿà ¸7 '  G b   p 7 *tŽC ˜ ÌÍ Æü> D' r' UW# �ü×�ü· §4Gú~^îƒ�·èüýéP=ì ðÙ˜óa’ó5ó±õôÈ åöMõ¾úDð(õùî³ðÂóCò½ùËú&þ*µ¼ ”Ôÿ*÷þM ÍþŠüD�îÛñâØ�ß7 và$ vâI ré,úÎ : Ö „ bò7•ÿ(é�±CN E�k � ´�žú<aó-•ðëýiîÅû§ë¡�eí®ªï„òëý Mëu ©í¦µê^–í+'÷ùú‰ Cþò Ëä0sÇ ÚŠà´g ·–ìþÇ�ÝúþÑþþé�!éÉC@ Î8±F`t•Ý Ë^ÿK?2Éla‘e ™o 6(êªþ~ Cø-ÁõA�÷þ~ùS<þÁÁ 8 7H¶ÿC[õå.ëÿãa÷(ß„ò°á«ó1é¶ú óÆqù{ù]¹õûù™ïRö‰è¹ùÛäôû?ætûë¤úóú¶üçûfðþš˜{�iþ»ý¯õà�˜ñÓ^óÿ ó$ü‡íû#è}øæ[õå6÷Øåý ð–Êü•ÄûAF|ƒúÃþŠöõü¯øËý€ü�[78] ×p¹~ŽŸ9su§˜�€3þ‹ûRýô†úNñIü¥÷Ò�ºûrö› Œó~ úœÌ�V& W oXÿ5üÚZûv´�Èyt+£Å~pc ÕŸ`w„ÃÇ ÓüŠ øYÊö.ýŠôTøÍñåùšðaþöòñ�ùÝÿIëBýYþˆõQôóªìÒùÝê¹´ì6 ŸðÓ ló9{öU&ü­ÿþ¼�aûýÉúvóßü«î‹ÿfì­íîw üýo©ñCuê›úwèþÁä#ÿ¼á¦õEä î¨ç™ìÙëÉí7òÏù´õ+ —ób'ì= ã Kß�%áßýüâ|¨å( ë<±ïCòtÞò2ðw×íæ“ï%½ðÁáî: ïrÐôÙý¡¾zî!¸ ‹ T* ]Ž 6 zÕ t| mË¡ÿ´ &~Ñ.„ Ÿ,Õ×!ÌÔ`ý`þ7ü‡ô,ûÄôvú ó‹ýdó›�OýžÿL ÿE–»ö~ ( ¢Ò Õû˜pö<ò Ñí 'òxóù¿ý¢ûjúKþ7ö8¹ó  ó³ôÒý÷fÐýC)Ÿ �1�üëù¿ù¾ï¡ó©élîçîûòsøi�¨þËÏ?Ù/-~þ’ÿcþøö8þ³ï"ù¿ìîò ð˜õ!øÃ�iýµé�9î8 O° Í ô Xûó 3û SüÿÜó¹ó¾ä±ðÙÞ‡óªâ9÷uéúrôÚù=ýÊùÑûûú`ùKú öåòöÏìôúëî&é=ê¼êÒç_ô¢éyü…ó“�&�@ Ù¹‹#�ÕûÄöôÑïðÛì@íVë¼çqìùãˆñè司\éùÿNï,„úÒÿèŠùŽ<óüí [éŽ 5åÍ äùüÅæÆñ{ë"ñwñåöYø;ÿþ Òÿ\ùýaÐû–«ù *õw ñY�\ïåüòîù•ò…ø‰ûš€LÚ `¢)›!â¤þ"n#?˜#ïþªÿnß�O{_Ž Ñ â |§+3 «= 1 ·#™ŠÞ‰`ODãü:óLû¢èCú¬â}üÞÿæ"nø b% yòn # ŽA�Ôú¬�ÇõÚlö{ ãøg ;úÒäûÌÿÒøøô€ýÞ· øý�ƒú{ûÄö ôañ:ðÓìþí®é_ìäçéUèQçþè†ì­ç(øéMúïñ¿òUÁî ý3ï1í’ôÆæ;øÁçÊúêí¥üñú÷ü ÔûñÿGøšÿö£�|úQ_�ú°ú9êž pãJ·æ$ Åì+ A÷# ]Œ&¤›†Õº"ò k.ýœó„Þó’Ò÷Ïù3ˆý¾úLt1+ÿ1 •ÿ ÚüV Óû´BþÕëü°�EøJÿ5÷ÿQùš�…õí\ïe‰óä½ûÚþ­ ò�SÌô Ô“ þ _ùfZô]íAOì PóŠü>ÿˆêüÿèùÇÑùsûÓû öÿÄñ:réì NåL ‘èD =ëš Wî ×öœ Ó�v „b 7Ê Hü² %õüŸñn°ð( 'íÕæüÆæ*û‡ì þ§íz®ï ëù?žŒAYt�ÙNWÏü3ý´òÂøúêÝø7äüjÛá�îÚ³âuÆå)�Âç€üaðùEù^õÿÿï �Æë ù`ìï‡ïéóèU÷Sî"ú·ü³øƒöìºøò÷� Y?ûþmçõíÍóÍõY÷6ó`û„öÔþ~ôÆ�Lõ)�®ü?ÿÚàýŽü¢ ¬ü7 @û¨ áöL ó•òüüÐõ,ýûù”Aü�~þpùìÿ­÷-üÒù1öfú_ô_ù¤õ8÷ž÷šôáú>öOýCúÿÀûR:ÿº_¬…{ b�˜ˆóëïØ`÷Ò "ýô L Þ ëv ®iyö­|ø ñ9 ²ô4+�â¹ :§_±ú ›Š©»˜U�—Wù…úñ£tì?þ ëBúçí8ûgô)�‚üú‘Aø“E NµL±¹þÇöW¼ú>¼\é`G ž9«y~^¥Ä�õ ö)Òí¥ .èOZãå‘àõŒá^ö⺠Bá¾ßª û๠¨â …æ­#íÄ .ð¯Cì±uåò Óß{Ü �ŸÞ*÷ôçËðòÁõ|ö“ü[øAÿ±ùÅù>¦úç.ÿ;uÿ5úÍõPþüòeþóv%õ «÷—ùzÂü~h5Î *Ä üF C | å ø†Ðí# íù€ bú’ µª 2…F6 ö ì ÌŸ FeA;öƒ¿ñŒ ö³ ÷òú-ºþu‘äw[u M Du>ü¼füÚiý»ÿâ'w Ô ùÔ‚–Ï|® 8 Žü8òâÅë§§éÐöŠéöð=î2íîóNñoõRøŒ÷äúOýûýµÖÿSqüë�û÷°þ.õ2û¢òÑõfòmð[òï'ïGóÅí«ø¸ðcù½ó•öó°ôuócòhõèîCð&íªé½ìuìpëyó_éûôÈæ¼ñBåtîôæßî:ëð“òuêÔøzæ”÷<ç?óÂãNó¥âòõëìöô÷÷YõýúSùáþX£�k-þb8ÿ7�ÐúFú>õùZù.ÿÏåeer™�E�þ]ïýý5þöšû’ô ÷Óó€ó"öñ ýóïÀ7ïf©î„ ï^bñèqôßÿóùZü-þ×þFþ‰Ûü—–ù¿ô\¹ñ(´õüÆ#êé5Ž Ò“ð’‡"FX” rÍ­ý, "ÿ`Ü u K®âùèâŽî:¯”A!½«t¨DÄ]Æž/° Ÿ‹–²jir bW§Ä¥t  ïÞ þº Ù!Õ ª$c#/ µá·¸ÙPö ‹¯ èÏ0 ïTѲ%úÎþ9?÷\îMçfuâ³þIßûÖÞMöã:óÔçâù!ê8þíü\òW�8ô@xñÂ›ì °èXèþöéû£êšúì÷Øò5ô*ûMúRñ�8Jf ¨• ‡ & T vU Ýøü Yðmÿžï‡óçóÐíÝú¸éñ3çæ{ë´&ù>$ñ²e p¥ kk Vüˆùbü¬ù`ªò"ï"Zì>î0ö N�·} õ q ýý�ÉóÐ$î;¶éàÆâ%ûÙe\Øâ'ñ4—þJµZ‘Lüa<ùüør¥÷xø>¯úK(ÿ ” -ßýÊ�Éöÿ[ö*=ø· núœ WÿˆM�F÷÷ê ð@ ÿíéæîýÕñsúÔø~ù’ý)ùüÊû%øä»÷Q -þå Û çÿåßùµ ö? ò'_ñ)þPô‹÷õ%ïÚñûéƒï}êCòèë6÷ÚêVöïêrð«îìEóêø,ä;þoÞŒ�ÛßûÓäÔñ´åmêµäëçÔæë¸éÉòìì¢ûwòIlõE®öôÀúóÔü2üø.öŠñ1ï%ï´è¿íüéëÜðvî®óeô©óõòäõ­îžö0ínó ê‚ï#æîWääðÿåS÷íXügõEý}ö|û­ñKøÉíØõ~êÞõ_çÊ÷Içkû¼êÆþòwþ•öÝþPóˆ0óÿ <ùŒ ûnoû‡ðq&^Õz› „úñ=ô¥ýÃôgüjûžûݘü² ù�w Ëš®YÍ�«¾Ø ù%ýù�ô:&ðtúðõ]ð²öIòýõCúôΫû÷á�שú1 ¤öÊ ül¿ÿÝöóüïíÝúœç›ú/åÏöúéèòùñ}óþ÷®ðíüí°þºó¿û5ý/ù^ ùË 'øl ö„ àò™ÝíÐú‚ê³ï©êKìÊê9ëNé§æèMæèMñä0ÿdÜÐÚÔWüóÐVóÁÐÒíÐÒNí–ÕµîPذíƒÝàêAäP长°ç•ä£ä]äSåÏçÉísëLö¶îÛúñ%�$òÜ�!òªû$óiûmô¶ý1öúüª÷þ­øä� ú ¾úŽÉû¢ý‘ÿÕð{uêüé$í[F÷ £°yèQR½ ‹ ó„þœ³¤1܆wŸçü)÷ø¹÷Ê ÿ‡8 ‡ ˾fÊ%ýŒ*øA¨÷¨ÿçü÷@—ùÏ2ü9¦þý ë• 8 e‰ `ú  ™¿Çþ• ZüëJþ| ³î ’ ¨þ Ë N û ½ ç æ�… ÿÿ}ôV™z÷T �ì2�Âåiñ!çÃé­ï°çÀú¥æµâÐ0Þ}òÝé—à¶æ”�ÑìzÿOí_Ðí@¸ð©ïlÿ>ìUýéTúCãö÷ßlòJãÏò©èZôîsó[òÔò—öeò¥ÿèïyVí#Pê&Ãå:rãå=ùMèUõgíhõóóàöÛøÎøÇüGþÔÿÑ»€hû¿Å#Õ¬(núf#gòáÅëôëÉâðZ°øa¶ÿEw†ÉŠU’rÅKþ7bó£Lç­EâDKâ*ý²äúóëëïiõŸöËüKä d9ø “!f R ¯ ÃÛ´þ÷þfþý¨ûÒ�×ö$nôúŸõüçúF 7M ôO Y† ­[îíú ¾öÜþåøü‹üýkþù âÿÿ"A!×ç"Ùê ’/Xþá¡ø~ “öÛ¼ú»ú~dü Ì . M< ‘ tø ÌØÝ™` ˜ ò® |ÿè ü%7•S qÛ|¤‚Pæ !} ýÿÜö%øpöiðÇø¸ô³ú=ÿ—ûIIùä%óHsíê”êçƒç=þëàFú8ØFö¤Òtõ`Óyó¥ÙÅìláé®è~ècð³çøø#ëÍþ™÷þâ‰ûYüµ‹ý¶Yý—G�D>ž…óü¾&ÿr ãAµfÿ£.ÿ–œ�æ2¿²<Ú ÝϯåB r¡ Yµ ׿€sDèþ ® Ø !¨ì>Î Ü“eÿËgó òA&æ‚çé_ `v4 o< f¹ �I ¹þ]²udž$M ]) Ì$óLåM %,"„þ�Pºÿï�˜tú qûP7ðç èûå; Š åŽë銞ϜÑãýS÷‡Áì9¸ïBYó�6òÕþ`õcþ.þÞÿ�îñú©ðø5‡ûÂ!ÿã 2; *N _ÿ‘†ý³ûú‰óiõdò›õºö¸û:þi_n  h>UЉFÓL ^õP ,õ¨§­Î "R«"g ) Ï$d ;nN, ºÈ-þGý¿ûŽú÷ÿÈþEž C sŒôü²Ö¼ðcÜp eÞ�‰úÒû‚ð‡öpêbô6ìkøôóøÿ÷ÿ£0 Hº\¼Ëº û Çõ uú“�?¸ý¤ÿ¨üõþþíï…îÄ Rõ1ãûØûW´ø.ïó,ëè gãå ÀßÖêÚÛ�zÔ™wÕCÞÆˆèÑ´ô©»¢ô•¸ü)·ðŒaë  êÉ èì‡hôÖ®øé)ù¬ü“Vý“;úçSøÖÅóÏ ê¿Dä°“ç Ôðà øx ‡þ \” ¾' § ë { g(âúbfó«ü5õFò¶ùÁé´þîæBŸæ” ôâÛkÞLªÝ> 2Þîà—´çúüëò[ë~ñ×éÞôÿæ&ýáÄÜÉ0ÞfˆçÅËòA Dûåý-ÿµ÷?÷ò?ó“òÖóÛøÙøÙÿÿ$ k^o µ Õ îE×ÿûšÿ?÷üôAø³ñ´óï~ï¬ïªê—ö é‡því¶�Üï@ýÖïAöðñ}î òÇëÐî^ðøîÛõ†öø:þûïÿ`zC>üÐüò†îWçÌß?âÊÖíã!Ú.éóåÒï­ò¹ô§ûsøþ,þküÿYüô ²ÿ$+×Ý(ú(û0îjöæêFõäíÐö5ðîù{ðüšóý—þ�ÿó `T ?X—“þÇú–ü{ïíôŸì׿kóäßÞùAç_ý/ò…Üø‡¹�oF 3ÿÿ Õø¹ Ïï§kæ=ó)à@ãZÞ&Ø`Þ¼ÕhÜ؉؞ÜùÕ#àFÙBß›ãÀàÚîWçúñtê•ìrçaåDåÔßæå¯Ý"åÿÝÄæ{Ü’ìóØQìd׿XÙ2æ³ßÀéxéNíïÆñíöógêîóJê:÷êpúŸêNøÌë?øòìóû>ñ˜ýóù3ÿØÄ9 |øø­ñÛmñÝ�ð8 íüì7ùÕëäþ€ëŽ�gðÿiû²‡«° ¦ W6�÷póÍþÁó7ÿõ¢ýOùë÷AÍöY nýKeQº k‡ƒoE‡ ¶–þ>ùùÆ ûã j�¾½dõp³HÿÂâ í‘Aû˜õŽ8ñ¿ Œòê  ú¾Ø!)´êvO³8N1¤<�Ž þkx;…|$z Ü Y -¦… ÅIKGH‹˜Ä <1—ùÝ/ûRg�^�£Ÿÿä�ý Mþ8�äÙþwV   z " …p:ü.û¸óÙë3ìíæèé*èeëgíGíkôï´ûüðØÉñƒ ”ð£fî vëeèæüè¨òBëêÜîvåÏòGàÄø²áSþøì¯Áû¿#ø— ;½UF v1ü õù! Âù× ýô³ [öRfýžZm Ì(=�þøø ön÷ ô•õö£øÄþ"�° ±ƒQàQüëýØó ÿZòÏ­ùßq,q%�{ÿÄûýÅý„ú®‹ý¸"ÿ’ öð ,ñi Yøð ›�0 b/ à‡ fü  k `”;ÿëºø³Qý¿}yjÆ  å rùè�Úðüþ¤ízü"îÀû‚îOý"ìäü›ëIø¤ðêó÷¸ô¬úP÷œûÖøTùýñ´ÿ’æ®ù/àDðÞê4Þå¤áÑá'çSæ¬ìÿíËóšð^úIóUûÖúö{�RïÎýšëö©è:ó"â¹õ‚Ü$ôiÞ”ñmåxõíùÈõ`úÒþÿåœ|Æÿ²ýÀùYý¶÷­óåõöï»ôWípùÕë\ÿoó†�ßûÞHýôð�ó@É^‚h,�2÷Ö�”ò?ý`óýö1õlówù}òÿðñyXôG MûÈóÆÓ�ˆ¼ÿwù¥�só§rùwÓ�ã‰ZNŸ?QÌã >PÀ¡úñ ]ñ»rì«sî°°÷±<ÈÑ` Ð$ ¬þ,r÷‡1óØþÔñÒý<òÁÿpò~¤óV ­÷wúû³ vüZ¥üPÿK� ÿX,” '‘ @C §÷{µ#»#s‚ì ´Ü�.…þ'õýõþ\ãÿ@žÿ>º=YÿÔ.ùaòÿúËë²öTèÜðëáî€ð%úñ&œë£æ—ã Šàž õß  ­àìcÞ¥ÿïÚ¯÷jÛ€ñãwïïÃñ_ø®ø4û‰¡ú‚û¯˜ú²ø ÚõÌ òô ‚íÄ#ê®÷KêúñŒðóÐü?ùü —Qè· ·ÏÆM4$ ßd†ÄwžÿV ±#ó škXUõ°$.,P"Y21É+  í�åw½¸ 0 ¶ ¶' [&œ j ‡w ÀKŠïÉ 8­§\7Äÿ¾Ê�¥Ž ! 1› ˜† ±¼e‚ü™[óZqïy÷ýñíóp÷èñSÿ&î™ô„Mü¸ ¬ýÒ “ðÒ ë�m =þþMü1£÷dþ#öÆõåöqð`ô‡é-ñ¾ßjðÊÙqñ¤ÚÕóµâqôHìñ ïÂíèêªì´å&ëøàþé Ûbë•ÖFî°ÔLóT×Ëú°Þ‚ã}Oãîyètÿ¼ïÚùpï©÷‡íyøgñíúSöüööúUòŒ÷ìë¹ø¸èîg …öÚüb r?—‹û‚þñøÌüZ÷Nýnö�üqù¦øÓý%ö“jóB öÓðø¸saûŽIñåû¶éÅó¥ç­óÛêúúñ—ºúä 95Å›œ�åøÚïÚSèg ¨â}�@á^úÓæ¡ÿÂñ þ°" %'$ö(?¸#§ûM½ô7Wñvýkó„üù÷§þCæë `Š q ï Uþéõihòº­ñ� \ó þ÷Bÿ‡�÷§ aôg PùÕÀúÃí÷õü5øø õž÷æíúÇðÜý&û&Ò�à`ä &L€ýA]ú¾øÊéõŠDö éùô üÏ;üÂ;ûÄûõ�Âü‚ýxú‚ú–ñ~ú ç9ü¤æcüëåùÞê=õ‹ìJïPôÌéùHèOú ë¨ýïë(�Õç'ýãå÷ÉáZóäéï¢ê¾òî„úÄëPúé óé)ðQç<î)äÀê¹â¢ìOæóàî,ú7øÿEþ?ÿJ»ü£Ûú7ÿøñþ,ôx£ôdU÷ÜóõJ�§óCø.õ0ð±ùyð$[õ¹ ¯ý®ß 2 p bþg šúö/ö™ønûóGÒõ$©ûavN ] žm>Þÿ Ê™ �½nþEýíûóûýGëŒèÌ?ð„oç% æ 46Î fêeÖü³>ûüþ¢ùÌü úŽ÷~çóÕ QõJ¤÷8g÷„ "÷¢†ùþ­�Ñù• 3ùnþéþI`ùhõ …ôpüo‹R™¯|àw˜ ´@ û» wô‹Cëtÿéã²�f梡íÁ ðôˆ =ü‚èüí�À÷™ùêõQòŸó†ë‹îƒæÑé¼ãòâ¢ã‰Úoè›Øò áþéê# „ó4ôþj\ݳ{’ëú HðËé.ùÂîÀòJûôÑ ùäxÒ 8 8 ƒ�žþúÊüöŒÿ]òkÙñµûóÆ ù¡à+ÿé •ûwù¥ bõâñUúþñõ/ûhó» ÎñA€ñA"i÷€á51‘œoàæ ïÿ÷ ÷Ñ ôÖ âõ¥¬øM'eüù'Ÿ³ P ‹TS‘C î= × W’ T ] , · P và¬ä  ~ÕZ n’úOÿŒëùÐélôì¯ñèÓò³â%ø”ãz�í혲ÿS ­ Ñ yÑ ˜ñ LÄü«Êî_ xê« níð óØ ¬÷¤ Hù4'þ DJöé�» þfJ ÝÖîûëOú`ÔÿFZuû?�"ößþÕôù\õð4ö~îýô�ùúñ ãîK &î%ò bø^ 'ü Éúévõá ï!‡ì`kì›òëEÙé© …è<Øê¾ gñ?ªúBö=y¢ý´ünú$÷{ø…÷–ú´ü’‘�c7� ÂýSªý ¬�iŸÂ“ôƒW" D šWa  ˜Ç “Ø9îk  œ óÈ¿  oKÿpÚùæô0ý òJ÷Fïÿ÷íêþwò¢åþƒoBs ‚vÐ"õ‹¿è¯ |ä³ \åB VåmêæTàìøÐñáôµøÖü8$ø ÁêÑÿ“Ý ÷NÛó‘àhôjæ‰úAí4óï žôÚõö\Âüª Hÿ‚�XýÞøØöJö•ëŠõáájø:àÊÿÑèƒÄôÏÔ÷ñJóC:ñZUðlúQí¼îXé·âå¶Ú�ã ×ßâ¿Ùãæáðêîêíê=ðhéŠígèhèºè‰äbî%âHôsâ%ö°á”ú›Ýþ°Þ0ýcè]�óÂù<û?;ûÞ�»ø(°÷ Sùß ¾ûu ?û ëô¬øÅëºèÎç‹ãwëÀèñ|ópó/ý>ò þÒðËövñ>óÛñäøëðâþkï¾ÿaêWÿÍâ‰þ¸ßOüdâ�ûGç9û€î¨ý�ö4h÷Ðõ¯ùÜøý ìûä —ù‘ Rû¬iý%[�Oþ1”C ÒÇ <êÕJ ø{ ûž $ ¦IÌ‹Ž¢¹#Ô M¥W_7ü¶Ú™ rV ÞT™¶$�$o)¸Ï%Y +Á¥* –$´­ºeÌdÙѪ»jû  >Ÿ ¥Í!¨¾5…øqÖó!-— ½ ¼~ ®ûÀ»õ:LðhýÉíwúÌîõüŸðýý:ñUøÑñ¡ótõ$öâúmÿ$ü o÷Dñš $î„í³sï;*ó[Üõí xö ‡øý‹þ|ÿ—á¶#‘ûgEö» óògôü útû+þ´ûqþ¤õþ‰ïÑþ ò`áûÔ²º âÆ± ©t]ÃÞøõãñ© öïW ï¨ aðÝ ÌózHø1 k gFY¥£ƒ­§þ0:öØ–í÷ÿ˜é¾ý·ç_ýúä&ý•æ€ûCêûüßí°Þô%ù(Ôõ` øõ pú˜ hù´Äõ—ÿ4òñûªêÿû�æ,ÿÃíiÿÈö¿ûEõ•øMò*ö±ôFõ»÷wø©ùlûWüÏøJý.òˆúôì”÷éêè÷êhûPêþ›ìPýŒñÒû×øóþP�Œ¼ ÑÑ€<¹ÿ1�Áü–üRüû–øú(õ*÷Zöøó<ùmòhü…òR�ó[òÍ%îþ‘è.ôã9ï¸Ü~ïØí¢Ø²èäܘé©â+î(é»ózî¢ûÛñ²BôôgýŽòvøìógöjõùGôQøÛóøô§ôÄøóÒýwïNûäëóõ·æÉóòá›ð9ã\êëúåÅóžæ8øôè6øÒè«ó˜çnê“äWàà†ÚŸßlÚ å�ߤëÇäíðóè/õƒëH÷Áë]öìõÈî*úðÿvî_ûéëÃô6é°ôæè•ûïí¦ô© Kø¿ Qü¼‚\ : eͶéókžürÂöÁõÄ ¿öÜ `ø½ ¯ùÒ-ýa”&XÔ Üø¨˜ð•�×ç€ýÄݱþ‚ØM°ÛTã ë© Îòû «ûž 4ýÂþ¸þÂù»òú^çBÿ@â­åfkð@ú`Æþû v æ‘›Fÿ Gúë bù­`ýJüÛ�ûÞÿÔ÷Düûò=øFñOóæñ3ðXôbòöû×ó EîT}æ¹ádÞ# ‹ÞþFæÃô“î~÷·ðóûèï¶û,ïüúíàîµ <ò»ÎóW Ÿò�EñøŸï°õPîæ÷ ñtûMöK�Ãøi¶úƒÿ'  º¬yGýÅýþ&ùØû‡ùùËúü÷gþãñ&üèò&ùkúïûcÄû B ›š�þA "þB«gûùÐøŒ%Ì!< ¯Kú �Oýñþ ÍI ðÒ j î % üm  äⳘ §ÊÿXµ�,M §y²z¼¸½þ€ ]�Ò9%þçÿU ³ûß ·ÿ; &®ž ,öüø,ãò†ñ;{óûû ¢„ÁÙû™úx+- C Y3o î÷ Fú áùjùGþéòÈ ñ»½ê•þGäÖùAæDôŒì3ïò“íÚøaïTþŽòû¶õÞôö½ðÂôíÉñ¶éùîœêÉîÞï¿òö÷œ÷ûéùä ù?Üö±øÇøaðïZ žö£ ßþ„=�¦ý&ü�dÿóýñŒý¡Êþ�¢�éý¨ãn/ ýz } uL¯'g�ÿú,þžùfùYûôÂúñ‚öÖñó@óÚöÿô”ÿ<ûX¢t à< 8 ¥H ~V E&¾!–úp¥õT Šô@ ç÷X�à.Œ ” N ý e x ," {ë »´a°Á »™# Âjìù þõÎû½ôþKõƒŽ÷Û;û�Íü‰þ÷ûþ4øòÿEé$ Ÿõ M¦ÙqÙþ½ùþ¡�<þÝaž–ÿÜ�\úcÿÞ÷Ä$ù õ LÑqœü 1�š EúÇVöÛ Òõ¿"öó–ó8 õÓTýO »�cíûÃ�Öù.öUúAó›÷6õèòDòñîì>ñJë ñ‘èpñÃã‰ó#æ™õ|ð2óúìü´ç’úÅêûüó²‚ûH†í�\5ûßWùõß÷€�ö”ÿŒ÷·þñYŠ  Õ í â C œ¦ çM¾þF'ö¼ü&ñ¬øåô÷¢ÿèø zÿ®Ÿ©  LŸ â V JáÔ3 < í›Õ ^@ó„‹m$6 #ì ó†o‘ÌÑ 4/ø ®�øünú·õ’÷‹ó_ýó6 ú‹»k & Þýóû¡Çùƒ�Ñ÷aÿ.öÒü¡ó>üêîöÿ…îÂÆø ÏD ÞXî4 “Êÿw¶ûµù¯ýúïùXüóúªó�ÍXžË£#Œ²I h=:þøcï?Ãë‰Ãð¸�‰øáõ�cA 4 ¶ Ö­ ²…s ¤^ø\îñ.¿îa3ëƒéëÌó¥3þRâT 胶´ Pûƒ/„�Í ù\Ùõ5þ÷ÅùÔÿÿú‹ ¡µÓ˜$ £¢ Ïጴ �%?ù þsï(óèÁè¯æ?åšë‰è§öñnYýÊPd¾Ð©ý½—÷áÿ³ôØöö÷ðåù6òŒþü„íK' # ‹}DД$ 7zúÛéåÍ Õ ¶G¨ ¯Þ 8ó* $m$üÑ÷÷6ù eöƒ�çðCVïµÿWð¸ú#ó>öiöQõ´õ÷ÛðªøtíúÛêAý–ê%íèÇë«�êç#Ué£îß�JñÉþ’ðëý3íÿÒêÖZî,§òÿØíÁöåÕçtÚí ñóÌ LüÀ à&0�JöCû^îÐô!ï'ðÊõ¨î¦ýØï”ðë ï¶ Áí…îƒýÑîøMð·÷‚ð"þ½êUÃß„�ˆÔÛüDÏùdÓ¥÷iÞø!ë øqôçùC÷`�èõV nõû¨õ2¬ôê]ô÷ Çû¨û�†Û˜ _o $1'Qˆ[ͬJeûçÃøv~ùi 4úÚ ©úD œü¼.þ{ú!þáõIÿc÷÷FþL Â& äÕ ±èúìøÖ€ú³þ(÷.üóþ‡ô þƒJ ý2½– ýJÿiû÷Èüeó=þ,ð—þCéŸþ=å½ý¸êõû÷Oý½´�2dÿ†ù’ý=ôÚõÍïòíìŽì‹ðRé³øâíœÿó|Û÷ê ?ÿ883 Ëóù–þýücøÁ÷Þ÷:÷Eü”÷ˆø• Qü±Ð³3ü W Xf¶Dü¤þúð}øæ„ñÚñzÒýõ±ÓºûÒÚ»ÿEårî•Gø· Q9ùû„ûêðoëlê·ä`è6âÓê â2îMë}îóô î2÷ï¿÷ûîûNî¿üªïñúèð€õÚð†ë9ó·æø÷Õî’úgùüæýv�±Ä×2/ Âý¯Múy [ö¾Àð‡ý×ìõñ#î]é­ð7éÚð±ê>ñ:ê“òÃì®ñÄóºí&ýé…æIæÆÿžåÖøæóõRë ö÷±öO¶þÛ 5ý|ûiþMûÖýúòÿÐúãüý¾ 륬 ¤k$z ZÖ"3$F#‰ !Í á /7!Æ‘�uÿ øù÷­÷±ªûì mÞÕ Ïf”ô Μ,:%üZ äÓ¶`üÇýE÷ùõøû Û- $[ê%Ƴ&aò!4$ò/J R¤'ô!að! Çó25ù ^=>.\$¯$&O"ý $$Ǧ$‰þTùûÍ&ýf ‹�¡MÙÎû¿ô ÅîDa꽫æ -ç´é5}æÂ5âöâììëæ ð±ê}úí*IïÈPñÐaòœvó? MõÁ÷ù Ñù1ßûø�Rï¿^íþsñºªø�‹ýåúýñùÞüÌüB`�?Ú Ðê¨ãöUaðÖÚñ4 •óþæõëùøõ¿õÖôX÷±úüºC�… ðJÄ�s9úMžø«Ùÿ=k  æ -ê þ6ü ú,ïû…l¶ ÷ Za@øŸÝðd•ñï ÷!�øþ÷‡÷àõ|û}øj�[ý잃�6çþ¨úº�óÃî{Íí 3ñu òó ÚöxøüÒ¬S“ ¿�Z °þcÿ?ÿÃô<áñ¥õ ’úð 6þšþÁ‚øHú˜ðáô ñ~ðö&îøÌðò÷ùÒô ±ñ?éöˆ’�Î Yð#Î�¥÷ˆþgìkýmæ»�ìåþhèË/ï“ý¸ùæþÆÙ ¦ q�w y�½©û3ÿcõžþ0ð-ÿúíMñ$úÿ˜þH ÚýÖÈþ ¡‚Z Ùþž]ú1úÏô-ôìGîâ*ífÜkó|âöù*ó¸ü[þͽþ ü®»õÆöêî‰ë5êÁä!ç?âWççâ$íDç©ô”î@ûÛö·äÿÎŽ  ‡C ‹„£gë VM æÌYùW º÷$ údQü9Yüáû‡ cý® hÿ8 þÐ Bü) üyû üüòñü•î¬�£ïõ&÷÷'þ6ý¡þû)þ8ÿrü�œøD÷¬öIíÉú2êž°íwHò  õ[^ùh×ÿ°ð{• -þ4ûø œùvúåòù(þòËýíç±ÿZæÅþì¢üGô‰ûVÿ‚ú› þùö‹øCØô ÅñJ?ð'úLìð<åèéÞ9çaÚqîuØõhÛßù±â¬�¥è¸ésmçx¼ãMWâÏ häžÕåïå³øûèÎõÏë<Iëã öë\Lî7Ûî¨í« £íïUödïŸïî½ï“ëžòéöDëýŒô Tþš$•)߆ÿR9ÿ ¦h©‰ýc ¡þž nñ_üb¸ R Ùu×Ȭ£k./(õðÙò}=øˆ`æ w¸À #¤ÓÎý` )ù=÷üªøÏü¼üÃþüLÌ/¾Ž ÂÀî· ¯é éøYõÕúƒùõž�¨óèTô¦Óöoüûûîþd(ý?ú ¡óyÿïƒù±ñ¯õ$÷­õ6üÙñ�ÓébxåÉ{ç©ý>íøºòüô€õ!ôzô€ö^ô]ù¨øü’úOÿÞöäÿ6ñ%ýÉìŸùkìô{ðüì$ô—éÜôâêVóîzññ©ò®óÆõÚ÷LøsýUú oûÈÿùSûÓôŒ÷ÈóÖô¼õ8õõ'ûZó{ÿVõküöö¾÷§õÓ÷6õZú ÷Mû’öªü ó}�hñP6õBLûÃý²�ü|úfú§òúVísÓëm îµ &óØ<ùo)üuùöÿÒòÐüÝí{ø/êEõ‘äBóÃß ó�áùøæÒïs ¿÷جþ’ yÕq-~ ‹@ k ¹ü½ §ù!Õø2 ¿ú½ "ÿ¶ 6â Çõt M ;î­ ÑÁÿaæý.ýûèöOùßìåú¬æÿìHä÷ ³=¬08 öoÉÿ"ýmþì½ãß=âúî_ªý€!ª£@ Kå âbÇ ]ú\é þÌë'ø}îÂõêî_ö)òh÷®ùHú~ÿNþ;�Ôþ`�—ùqñ‡þê„ù•â õYÛ¨ñ‚ÙÛñ!ßàöâæ½ÿPì:1ñ _öû ”÷¡)óüÉî7 rî–³ðt¨óß ÞöL *ûCˆœ £ 0Ò¢ÇþƒýÎõæü‚ñ–ü÷ñÞùÁõÙùYüc� � Û l ’S!z cØ ¼ø×€öy ×ü žšªÛ½ ^5 Û Ð h¾ C4 ø’ Ÿý¾ íù ¦ü Gÿ2›üt×÷Õùn®œ ñ8�!Í�e ÜüZ›û üÚ–ÿzíjÃɱÊ[5¶`ýtRýb…ýƒ ¨û�vùq³üüèGÅ  [�ß ÿÛú@¿ú9l“S LË  a ã 7%E ÊÞ+GeýöúÇôøº¾öI�?øÁ4ÿ¯m$ °X Ïr�×û«ûb÷Šúóö5ügùDþþ.ÐØG q¿B v‡‹cd  è âuŠ# ÊÔeÌä þ�Wü¬þþ�>ýo9ûÈ !û‡ÿk D'7Æ�ÑÃÿ§ TtŒ‚ ÈÅ ! W Xz)Cÿ~þì I�: ÙFrBÚ !gåQ8 ñ Þ Q ^ ²a @ã ³· Ç õý ?R,ï hÁ¯ lùGòQeö¼Ùþ$šýt`û* ¸òß àìTèž÷â×ÿ´ß^ûúà‹õ_åóëXöMîîûï ÿîplíÍî]ŒïEîÙ{î5ÞóPø‡ }÷ãí÷öZùMiöõ Ððœ‘ïnóOýöuù[ù¸÷éýÑ÷&júqý)WûHS÷¨ÿôDù”ïÅóréHï0æ–îæŽòñåTøÆæ?þ‡êfJîN]îÝ�¢ìÑþiìÀþrîCþ¬ñÿRõ|¿÷® £ö"ðòÄêï0 Eðø vñå‡ïQí’ mðÉæö°Úüáp~à C Áu •ŽŽÙ Õ _ 튆ÿf‡o Ì S :] ‡  Å ¬ RÓ Fl�=þ3Ìøþ�Òø=ÿ újÿ…ù/�0ûºþh�Qýþþçž�¯üvþ!ó‰û»ì’ýoîi ö�xÔ;DÅ/ !5þC� ø¬þ ó/cñ8öŽ vù1&öŠôðƒý¿îèúòï;ÿön�hüJù/üÍúÚýÿúÐÿ)úò÷"üðßü}ïúìðâ÷;ò>ù*õ„ýp÷‰+ø%Œ÷Lþ‚ôsøŠðãôœðÇòl÷{ðzý ñ«ýLòûhïûõ†ëoð=èÒðãþò á6ñ{äÈñëaõ«ïö ñsó®ððXî î ë»ìëlïñú¸÷ÈîûIüE†ø­ó >ó_Çøµ¨ÿ•ëÖµÿNÃý«ü2ÿUúáþ­ö üZôƒöbô ôÃóX÷rñªúøî#ùî(÷Ïï ùáòü¡ô•ÿŠôüÿô«±óÏ¢í`¢æœü†âùÝàhüaàÿŠà™Éá¿Óå ´ìäóõ½|þÜ Þÿ� •ú8Áôüû9ï‘ö³éwôé¥òÈîó—õûõKù‹ö›úY÷ûüûç?ù)Ù÷_ ìö ¥ô ºñ`aôÄ2þ(æk — Ý È âr *�7àùSþ¡ö4ûMø ýYüxA�j  Q ÚlÐOÐ7 žó87 ­ÿE‹Ì S ÿZ ^Ñ®„§µ ³ Ž  Ø> 鈋�7úû>¹ùUÌý]¿ÜJ§`qÿïõüS —ñ¸íøÒ»ïa@ëüé$ ™ì7ò€”õ¸t÷P�Jù´û÷ÿû©ñüÚî&ýÌîQKîÕöïÃûáôËô³øöíùµû¤øüþQõüiòOøêñ:ù.òÞû²òôû»öûâþ£ÿ¸ÈÕ Çé á4 c� Søª ÷<Çøè ÷yöPùˆúÜ®üKq:¨ã¤ý þÌðº�–ê@è——åA,èù ô¸ ”ý}z±ª … ** © ù�·‚©‹o„” þ74 1� Wý¼ùÿ~óˆòQïcíJð×ñçõ¸û2üÙ�d'n mþ'DüѳüÒƒýY 0ü•ùÿ’÷)ùýøköÐû/÷ÕþÔù ýþ9¯Ò …⑲Cü…ýãðZùçÏö>åÞùEêÿœò�û}þ9þ]ÿíù4�qô«ø»óï™ôîðòžî×òÉîŸö‡øÕúrþý¤@�Sè‹r ¼OÁúæ ·ö= *ôõÅò7dõ\­úI–ú<gö�µõ$þEøgù½ö<÷mðñú&íš�íàQéÈdã%¦äξïeàú$ßÿ´�èµüÙ áöÛ Yó\%ñÒÿÐí ùJìfðÝì©í*ëSóHçVú˜å™þ é�8ñ¹ÿiú<¡àìýnàö½ƒïGýeïÛö[÷™òÔûóùóõø.ùƒùòýŸù\d÷® vòzlð6¹ñÍ :ïa ²ìýËî�–í¹ýtæ£üRã�ƒç¤1ë©píŸôð¶ÿoñyü“íÓÿ(îÖHõ3 øgô?õzþªé W¨ " +V¼òþø¨ ºú< Ü� ‚¹ “ : B 7i óþÎ¥øy� óû¤ðõöhó¡õ÷³ø³÷þ˜÷eøFó÷ c÷å¥ù•tûÁ'ù5ÿEö¿õ"ö©ôö ûäôX»ôÑ môo Úñ$ Eñe9õ Íøþ¬÷ª ÈòɧíÈüéLþŒêíøPñ}ø¹ùºÿ‡þÑq88¸ ñæïeÿ&™þê­íþ EÀ \ÿâ ÿú0— · ¹� u½…ä˜"9*{þÇ?�¨ò9y#d s 9WÜø [[ ¯š É l ÷ü €= 4< ‡ ð î®—•�RLýà 5ý6àþ“wgÊaB Š•y T×B¨þì Bý/  ùy bø pý£ ÿÍK÷©‰ñXÿŸôþR÷nþºôÄþ©î¢ü¡è|ö|å!ò$åUóúéxõñðvô‡ñzóëDô׿2òÃè‡íBê;ìêÉíî/î¢õ¡ï8øíó>õÁø!ó}ûšñˆû¾ð®ûÊõ.ýØý‡ýYAü§Cû"ÿ/ü&ùˆ�Qõ&q÷0Çý¤ úÆ <¨H¥¼ýQôönþçñSø–ò¡õb÷èö{ûêùÑþÂýwîù— ª ò × Rvrþôëý¢ûÓ�íömTù¥Ñ�‹‰@ƒ Q ®† }  †Ñ˜þøBûúíÔûZêõüï‰üóö…ü¼ý$ÿ>¸ ºÞ Nš ­# öp DýÉ�ûMù´aõž ²ô½ e÷É Éøî ;øAøùäøGiøŸûµ÷÷ÕöÕö×õý÷˜õ­ö8ôòô_óT÷Ý÷ÜýÈ K $íª A‘ œ7þ¶ûJÿcúåù%ün÷F�FøkÙý™G /)z�"xþÏoû\høá :÷LõøæûÈü÷ùÿi÷�`ù„þKûDýNýùû€ýUúïü@ùPýEù üÊù˜÷$ù*ó˜÷\ñÂö‘ó‰ö­÷(ø¾ú#û‰þfûˆùåþý÷û[÷ÝùÖô„÷mñ…õð+÷Çò/ý¢ö€ÚöÕtòÒfíúú:êdö»çû¹æ>lèQ_ëí[ïŒöÔ ûÿwÅ÷ ì ù P í Ò YŸ s^ûÜñ‡ÿîÑýNñ`ÿø˜÷�!Ò O?%” ª™ Öã òìþ¨­øÎúð÷ÒùòúXúÌ�ñ÷A±ö— Æø ûyóûo ©üjkü¯ü^ùâøÖö/ø+÷7÷ÀøÏõ“ûPö×ÿGù•§þÛö¤ý¡� �|ŽÿPç¸üã °÷ø Ÿö<ù3¶ýÒ Ôšü‚Rí² ðæ–Ÿê¬lòc·ù`ÝûÖúý (þ0 ¤Å ¬ Ë–ÿíþÀ÷�û—íÊûçõþ/éió yýÎ/ðÍ b 7m €Õ ~› Oܰõ d » kù ³t ¡W½X¯ ª ‡í 9üŽ àôêÀõwúˇüÁFû+ gø cø¯úÂzü¨\ûo Ëöˆ žõU ÅøÇ jüØ—ÿ­’‘^i#IVZ¤ª¿„µM ÿv��ÿýV ü�_Ϧ Çþ/�Òj ^âdæø§Áõ .õéô¥øUt�›ÕF ý h­§ýÃyô²Žð`©ï6†íZ ]ë‹ýìv÷!ïføåõ'üßÿk îW(�Ã0�HêÑ�`aûmýz÷¢õ2øäïÍù™ò ø1ûö™þUöüe÷tû¾÷ÏüŠö‚ûMôn÷”ò"õèòGô1öÒðWùíQù ì,øÌï8öKø:òÞÿ9î§ëÍxêƒþTêcø êçôué¡ïê„ç²íå_ó•ìöºøsóš�ôí¥è"�³ãþâõùRå»÷¢ë‚ùsò8û'ô%þiï¡vèÔiáZÛé�ÚiýìÝ‚ûÖãúøêðúÂó\ ü]4�•,ÿ–òú­VöÀ0òz=íâ~èØ Açt°êà§ð~ �ùŒ*gr•i]'ÝÁý¿ ‡õ/Òð°þ±ð}üBò±÷höãôÀþ¶ü<ü ®VE MXø9 ò[ÿð×üBï2ýuï^ûçñNý¶öã¥û§þûOþ÷þÞòvþ¦í¨üðîÔú}ó=û÷÷Rü ü–üýýÛüqû�Hø ÂûÆ ¨�Rí{“'É Åü2où¢lûÛüXúßùõôúJózü½öaôÅ’íÁñøü± 4ú  ó�×ö£ýí÷æù¨òþöíœõ5éÐô£åÈ÷Žã¥û\è üdíMþœêº)ï{QûCýyø ØõŒ[ö.4÷üÊ÷¯û û ü"�®�ÙZC)BÀr� ÎÿzÐ�=ûöPø?Šõà�î1×ïìöý„ ¶ –ÕŸ¾¨þÒüºÔüÒÿôüícúÝ�áötþõãû€úBõ7ñëI ¯éìíë &íE}ìx ñùj�˜cº Ï Ž‡¥rÿ KýGKÿ®ÆÍÀJI$lg"D ›Ó 9- - {Ø  † .ûWeúiïûk`ûæ Îÿ¨ »Á@ü¢£ôrùð®ü{òÜúmöªýSùª„% s ¼ë†M¡ M´ t: ˜D • ¿, Ë r®îë ƒÍ î§ *½ ìU yjxn’ vÿT€û¿þÁ÷²�bö)±øTŽûÌ ýÍ ‰�Þ Žäjþ” ùù¼÷²¿ò9.í¯ëÍ앯íX‚ñgô)õŽýôéøCò&ôJñ`ñ$ñeô%ð´üéîcüð4úOò†�âóõ“õÞþ¶ôhÿïgí½þ¿í ÿÌì�¹íõü<ôú:û9÷FbðçÝïÍ þ‚ Y  É —· =ƒA)evüÆröerúdØ�|:ý²ôª èôD‚ûš¯ýŽvüpýé šÿ½qüc Óør üûi ´ýßüö7üñëÐó=êñ¹ªéCã·¦ã–ÂëÒ°ôjNú@sýÅøÕ­ñØ'òã<õÜôñÊñÂñS!ò®_ùBGý?ý��± » Dú· 4òÅ Cê° ÞäÝ åÆ?ä5¤ê8-ø^ â� " v Cõ m3ýy�!ïTéã;äÛ¸ÛiýWçŒ÷íôd÷ëþ¡ýQ²}QYÚìJ1ŒR aþðÊù6üW÷}ø„ø^óIü÷íüsý„üÚö.ñ ç÷ dÿë{ø¶£ôëîÿŠüƒ€ù¼ÿ>û:÷÷õ@ kø 0ü… ÙûMËþd<ù— qñÂÎîøÂî_ï¡ü@ðþ÷ñÑøçò‚ø÷wõ ù«õ ù��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/�������������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 014622� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/LICENSE����������������������������������������������������������������������������������000644 �001751 �001751 �00000000747 13144574734 015114� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Can I use LAME in my commercial program? Yes, you can, under the restrictions of the LGPL (see COPYING in this folder). The easiest way to do this is to: 1. Link to LAME as separate library (libmp3lame.a on unix or lame_enc.dll or libmp3lame.dll on windows) 2. Fully acknowledge that you are using LAME, and give a link to our web site, www.mp3dev.org 3. If you make modifications to LAME, you *must* release these modifications back to the LAME project, under the LGPL. �������������������������lame-3.100/TODO�������������������������������������������������������������������������������������000644 �001751 �001751 �00000011054 13144574734 014570� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������1. bug in resample code: downsampling from 44101 to 44100 causes a seg fault. Workaround in place for now: resampling disabled if input/output samplerates agree to 4 digits. 2. high bitrate encodings have trouble on some hardware players. Track this down. Probably caused by --strictly-enforce-ISO and IXMAX_VAL. Try setting IXMAX_VAL back to 8191 and/or maxmp3buf=8*960 to see if there is a working combination. note: one of the decoder bugs was identified. It is caused by using different block sizes on both channels. A parameter need to be added to Lame to handle workarounds. 3 frontend: code is a complete mess. But it has so many debugged features it will be a lot of work to re-write. 4. MSVC project files. It would be nice to create a working MSVC6 workspace, which included all the projects as possible targets: lame.exe mp3x.exe (require GTK libs) lame_enc.dll ACM codec directshow codec I think the only MSVC5 project that we need to preserve is for lame_enc.dll, since Albert Faber (still?) doesn't use VC6? But no reason we cant have VC5 and VC6 project files for the dll. 5. NOGAP encoding: -nogap: more testing, fix options, test id3 tags? Can we change id3 tags without reseting the encoder?? At the end of encoding 1.wav, call lame_get_mf_samples_to_encode() to find the number of non encoded buffered PCM samples. Then encode samples from 2.wav until these PCM samples have been encoded, *THEN* call lame_encode_flush_nogap() and close out file 1.mp3. NOGAP decoding: lame --decode --nogap file1.mp3 file2.mp3 file3.mp3 should also work. What needs to be done: get_audio.c: We need a way to open a second mp3 file, without calling lame_decode_init() and reinitializing mpglib. And the mpglib needs to know to look for new Xing tags at the beginning of file2.mp3 and file3.mp3. 6. Does stdin work when LAME is compiled to use libsndfile? (new version of libsndfile will support this - try this out) 7. LAME has problems with pure DC input. i.e. a square wave with a frequency well below 20 Hz. Not very important, but it should be fixed. 8. mgplib has bugs with i-stereo. flag denoting invalid i-stereo value (= frame is m/s stereo) is not correct. 9. lowpass filter: for M/S stereo, use more filtering for the side channel, less filtering for mid channel. We need to first replace the polyphase filter with an FIR lowpass filter with finer frequency resolution before implementing this. 10. LAME has a 31 point FIR filter used for resampling, which can also be used as a lowpass. When resampling is done, use that filter to also lowpass instead of the polyphase filter. 11. Even when resampling is not needed, should we use an FIR filter for the lowpass? If it is not too much slower, yes. If it is slower, then it should be an option since it will produce higher quality. 12. We should consider moving the experts options from the *long help* text into an *experts only* help text. The average Joe gets knocked down by the huge number of possibilities to setup lame. 50. Better tonality estimation. Gpsycho uses predictability, and so needs a delay to detect the tonality of a sound. Nspsytune seems to miss tonals when several of them are too narrow. We would probably need the best of both. 60. Different ATH handling for sfb21. We are using the minimum value of ath in each whole sfb. in sfb21 this leads to very high bitrates. We could perhaps use 2 or 3 ath partitions in sfb21 note: partially done 70. Use mixed blocks. 90. Use intensity stereo. This is a must-have for low bitrates, but if the algorythm is very good it could also be used in every case. Note: mpg123 (and all derivatives, like xmms and lame/mpglib) have bugs in the intensity stereo decoding. Bugs have been there for years since there are very few intensity stereo mp3's out there. 95. Merge GOGO's fast assembler routines. 96. It would be nice to save some information whilst encoding a: wave -> mp3 a RIFF/wave can contain LIST chunks with information about author, title, etc. ==> could go into TAG fields of resulting mp3 b: mp3 -> mp3 ==> we could copy the TAG directly c: mp3 -> wave ==> copy TAG into LIST chunk 97. Integrate plusV extensions 99. To be able to encode as fast as FastEnc ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/config.rpath�����������������������������������������������������������������������������000755 �001751 �001751 �00000044012 11553554607 016407� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2010 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/testcase.mp3�����������������������������������������������������������������������������000644 �001751 �001751 �00000023456 13170217074 016333� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿûD��������������������������������Info��������'.� !!!!!,,,,7777BBBBBMMMMYYYYdddddoooozzzz……………››››¦¦¦¦¦²²²²½½½½ÈÈÈÈÈÓÓÓÓÞÞÞÞéééééôôôôÿÿÿÿ���9LAME3.100ª����.��€$˜n��€��'.Ã>v���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿûD��®2Ô$`�PäªR£$� `Íj¸ö�— ®w��Qé�P€Á…Å‚D Bƒœ��ˆGÿ à�€#¾Uâ�#€�� �ï¢P þˆ»¹À7r]ÿËåàûÔp£‹ÿËÁøƒðÇø`�ÂsÉ“»<"‡Q‡ƒs¥1 Åb²vö#��`ÅÏa„`€a?\!îÚèAð| Öa b 8ØQÜ1Êÿð”p\�"HCñI™ R½Ój}Ú¡º‘¢¤ºò!qRęМŸ¾<ÙeÖ÷D\X5iRZeàq{6JU+‰'[Fì÷÷÷ÞŒÔâiv!¥s7'çæv¶“@BÇJ…J Jœ*Áేþî…„н/}mŽ¥� QI!nÜ*E°ßV’•J2$lŠHêeK´ $#˜ 3Yˆ•7¯aþ¼eJ(tN 0&&Ä1hp>2‡¸¨pìá"FH$&`5¨0{¥‡ÝàW5²)ˆ)¨ �ÿû’D��ê Ûï<À�^„k-ç˜� g§¤oƒ,5† °«Y¦°[’î¬�6,ê0O[Ã4óÑÔyíµJ†«à(yøDÉW6­Aë7[²¥»/¾j;üâfRÔB0Ø,*KØxƒuÔ8pêbW <¢¨éÒ±+Ù<Ëê0¦uGˆqÜ��Rw˜æQÒt¥QÆ“õ#Y§Z¯€µ'§T¾l„KÒ>ŽP¤cœ Í;9Ûîçý©û~h¢ ÜИ±Ñì­Hu$Nͧ%[•ß’OÕÖu$iRÜ5n°†›³"€E¹´T]Aävö^‡40'M€8‘ \:m¶f– ãMµ}n±èËH8•õrønëG«‘ ME[@í¦MZZž†(sRJ­t¦²T‚â¥ÍËc¬°ò  JorZ:,¼9¥WKÂÆÏOŽ^T¹n±TkÄû—kBCĉ'"¸WÒEÅh}ÿ±“æÑgœB|ùÁ‚ŠY<Ñ$Ú(šQÕÈëÖ‘©/QÁgMS¥0ÿû’D��"Ò#Ùiæ+°\Dzý=†, 8­g§¤i €k©†8 £D�J\Â^2Ã1ÜÒF‹“‰ähÊȇÀ_‹@„`(}»!AQ ï‘ ¦Þ((<‹tÛ²+<=àÉ®Á‡ZÑQRu(Ë;P=ë‡GZO.öÛ dšÊ=%�&¶ˆ � w!¡ ns¦ `ØC3Ä–J†Å‡—¬m«ˆLêKG]Ÿo?E.yà {^¼:ÚÊÒÿmé¨Ð6…ÔÇÅ@îk~õ ‰”ÜËÚ[GsécfÞ°!vÇ�æç`" ‰AˆÂ5HA÷ãCjØÐ/=ha\Nã°÷sAÑ–JŽ‘ï™ÙÛCpî<"ìPÅêl«^ž¨<Qø­Ïì>;lýva¿þ¢‹Õ­©­ÏÅío羂[Ð%Þ™éa1È)”>Ž*€äÀp¡ë$úûêp=–ؾ^m?á¼ËÑ›Á{µ¨B¢ŠM¤þËi'Ûiõˆ;»ARÃm"=s¶{d βZ ¢Þä5‰oSpéÕ8ó±R-ú“SQ@�ÿû’D��Û#Úiì9`^ÄzýA‰ ˆ³cì$kÁzŸl5„x6Ed� nî)Á#„q€P68;.eIÁY&µb§¡‚Š»!£­I¡9• ¹¬ÆuOÇ%YäG$*.eÈHH Lи+v»…ÌæÆ\éÙ¦ ´ÊbÊ~ŸE U ÖË�� KÂ`à|6 Åàd êŒ0 ª0HÑÖÒQ¬ ?'<R$­?t»Išu(Õ²Æÿ±/¿ú†mßÍl»ÊŸ±ïAV°bœ!ŠØ¸l¸€ŠÅYK8ó+¡¿ø²µÅþ¥!C��Ñ¡õ ³7‘2ˆe7Ó½w@Q"!@”VŒ(é)%'?ÌÁ_Öïjß®é ꑪÉ\‡O¡ÐJœ¤Ù¿{OnâœÖç\O[šØ m°¯SÕc~²¦ù÷­!S$h�€.]é‰Þî-—aTl7þ"êÀ`Ú&‰Æ4˜ëÔÐe‹õEzö•W‚t ³zÔJ•¬Ê©<§|Ûg•ÎÞŠ³ß‡ó"ȦdÅ{,*]̤ëÛFËŒ¬XmùÅ-dÚÅÿ#èLAME3.100ÿû’D��ï&Ùéë0_ÚÚaè X›g§¬nAn“­4ö ².vd€ nî) ¶Ta½(D¸×P“â ‰c<¢±ÍfŽêp¯ÇQ¹…gþ5wÓ2¿¦\ØöpŠ 1AaÁ'MN$“¥â˜qfP¤ûQµ€¢žï§Ò!Ù��¥¤)�‰Ýh7Žçˆ¦XŒŠ¨½>ñÍÆ·$Î4AyØt¨pV XÀ,DKcÂr›R4YɆº®]¾,r%FXé ÅwhÄÔÐñdÒÁ¶Ä­«¤¡ ;ªöÀ�åÜ€º-€ÂT˜o‹s½WŸ#ÕŒ(B‰ªàÖ!1²£bÔ±-0y¹LòE…EÒÈ"}¡Ç5£C‹ºÖE’]Í'v4½!Úbs‘Óú2Ï@M'$SrS´¼;%ªQ?ðxO( –Aà2‘£‡S¿P:ó Š°o5ýA©>j*ø31Ì¿æ'2c©œ#¥…cB¥Úpcš@‹Paq¬&8‘‹FiÝÿŸÂ:SSQLËŒL ��ÿû’D�Ý&×éé°^¨+<Å–‹¬›a§¤«Át‘¬`ôZ�`��)Šôoª\ ×!”i¸¶³wÊ{°½yHÒ6 íBø« =ËÈÎZd§O¾Ô ûÑ?'²&G׺âó¾±èµ(2÷ÖydqÂJh©w,.ðëÿÿûdB[PUt �Rr"Géí,!0!ç;!‰uF*w³*yÚç…“+øÚÙ–ë.·òFšíŸ½:¥õgzØ1žæD'+–ÌeûQiÐß_ܪd¹—*Ðõ˜ÇDÆÅTUpƒÎVUÅ´Ñ K‚Z¤.™qN­‡ ¥œã™ èÊ a5΢°kZPCÈ$¢ŒÖÛeÛôÌÈH/³‹k:«]te kTU\a¨zÆ …žÛv!nR±¦¤@Ó—èÚæ™Åè=R­Tƒ/§àß)ÛÇt"bIZÑñ¨…)hRÆÃt9 Wá`8ºeù±ºÌ1MØÂø.ç‘(ûPC!bfV(YebU4 Æß¤€æÌЪE-Cy#/,Š©µ15̸ÄÀÀÿû’D��ò#×k,ZpY¦k*=ˆŒ)?q‡°Kñs“¬`ô‰z›D�):ž¡$'LM­¥ìÖÜÉÅáE]"©:*ô©CL½:2h’ÇñÿrÖ‡´nÓß#â[4û‹ž:¥oRNÀÇ .•@‰[Ž>ŽÇT.Íñtumª3þê¦p�›’a& ÅADx“Ó™ÖÀš™Rú3;åS+·hq<}§ÒÒïMg“?y5Ë»Ÿµ~™É›‘1qkfåÓGì «OBÞD’)s÷¼@Z+ŽÒQÆÙQ¶ÃUR^f3§*É£ê)G2!Y‡SzÈîªzwÖs×îΚ9vï²,ë_–Ú®i ÜÓà–Ì NÔGD­—³éJI}ÒN¾ö‘m:¡mþv*¢ÖðO,ôé[1sK·õ.ÏH2�xˆâx—¤Òxý-l¥K‰Ê‚RIš`;J}³ ˆ¶ ºc'›à¡æ/âÿÒgQ„;¥›„ØdL&„ ä€eÇ[mÎ9¾ÕÃpèyÍ‹ŽEÕîêLAME3.10ÿû’D��"Ø&Øéép\DÚÝ=†> ðÕi§ SQ~khôŽX„¡d�nnUhYÀÌT% ÷krIÓ³˜«0€ißÑy™÷×J*®ãé�ÈØ6g—ËLLEnüÆÂÅ„ixaú;çwЧ5ºõŠ­Ì"©…<Ù94_Z®ê  �*P|�†6N!nðV+ˆê°p'6>BxN¹¯àˆÕ«†p„8Ñâ˜oÁ†Ñ 4b§Ÿ(÷¶ÿ™…;SQ7íºhhÉð#ÒQ­”l1ºü*ëÄÈ£q*˜>ïBËiHÙ“rHCƒPx/•e"TFÜŽÓEfbÕ Ñãúy9ǨÜ(¶ÞŠžÑ\ÂƉޙÎÜóÜ ¼¥rª¤^ž®dÙ£šýÚh ˜Áùçö³â© °@áç[O!èëÙ¤‘ñæçè7„©ÔÚ9MV\Mh\¬1Ïý3Ç­¦é¥†õ £a„baxÎ2")³[½áH̽:D~e”~áu†Ø*J\@@<lx˜…×%çP—èÐ4à Ÿ÷ñï}“SQ@���ÿû’D��Ý/ÛiåT^eû=ƒ<Œ8ÏgTô�w™m6ž€M§#@JnJ‰EÙKAÕ¢@OÕ3”ÄÕK¦¥# Øt† ¬^XuXkÙM?(PŠ¢#¹ºû'bŽGæ!égrG(YG…Ì´÷æÔ$ZÑÖéí_­NAW¨;`ª–øÏPr�[r½(z7G»²¨…XÀ!x´ *1J§,ñµm3Ç7* ˜¬aR S½òSüé-.PžÝ嘔’ÍIhY$Câ0›Î‹¸Ó„uÿ¢§V’•áL^}ƒBƶä=¾€€’mÉG@Òn°(ì,Â9p?T¬æÂ½ùFÖ ¼uµØŸ8‘¦Ž½`ýº $|Ê ùILÌ×Cv~-„:û?6õÌ_ü “ì`ÑA4MGj¥ûújÿÚ":ðŽô]®6ªi IÉ)t±ëR7›EyáÓ³M gLBk]PC=3 üZju®hÊÞdsåDZµŽSw‘WP[\ö#W<Ýí¥ÕrŠXã‰ÓΤzqÔúÿ»š±”êJb j(ÿû’D��Ä'×aà�^Dú°Ç¼� Cw8”� ެg°�.‹¶k”¬Iª=» åTF•YÓJ#VÜNYÓ…¨*£Íú;0˜%d¥b©6ŽY/'©ž+ÖYœÙÓŽt‡ïLÉ—×/ñÂÉu €‹y…NTÇõ~.­ ‰0ø P—Q,’"ö¢Wì…©­˜(*ƒð¬ ®"ìã=Z}¡da.êi_VBÙà€»\ˆ5"R…Ù‘Ž1âÏûc›Ën3\X~£¼«£–u$¦¦wø­ÿïþê×L0À/šà á{8Ø­.¾ ÷"Ô%,'IY–´C¬bÌ_pêUÕîIuJtLTsWsÍÿöé{Ž›uþtÿJ¹<wÄÄO|ñ1×â”ê÷éÇ17_SésÿŸP`Ûÿ«}kÀVNïóÀ*DÐX.kÑÈ„£A!äJ`´?HÞ¸¬vDÓ#sª'AñÙ/‚Q%S¦é€`üPPðB¢ J)kÍœÑýð…²+F^înïÏnùÛÜ{âÿ2þxãæÕgý~´ÄÐÿû’D��ð`[ï=@�]G mç �Œ;m§˜Q„¦«I„‰xŽ«³‰„:P&`½ŽP3ž§Sr0ÒH9¾on£„‚Ž!ç¡:!ûœÓËš‡ÏAáÄd]™9ù·5´×WÉÚ¾¿§M7G×ôçküöÍ6§hvÝ·ÿæ­ç;Í7ò­—M(âhRrZ­"³˜(‘,uTî†ØˆµZƒÃ 94)òD îÏj妿"Ç|Æükû3-×EËÛßm?][½§Úó#œÅß+! ¦)‡Ãá…†oñp"lç‘J™l”v@·¤PÃá*z¥º¤ý.™pÉ)÷÷€,ºËk«2µñÎÎV–ecño3ªèËm[¦ll§³ÕÖãbôtÕ´ýYþ•nOêd!"T=) ‰Þ9N¤�¥)ðB>H\eøÝëÕΈËK·°9£�µŠ–]0©c8ÞžÉ&ª† Ì b/ú¬Žçõ>V…*»DÕW¢ºßÿ³ïÎäý_§}ôÕA2>£„œ,°9õå·‹$«ÊHP˜ÿû’D��±-Z†ð]Dë é� UeuÇŒS¡­n5„‰=xgÈi.³ÍRK.‚*V™„{‡¦VZ쬢hu"’Š -3ÓCHòÄ5a, —ò©oåMaI€È•"© -Û‹ÊPÂ?“FËPÆ8ŠN!»¶ ÷bpQ´) e£ ±­êl¨Ì¦ðÓ$í$¼îhˆûš*)DÚ‡P®ó콋G Ìši'pnýcNƒˆỈƒDFÜ<ÐDÈÖŸyù (ñJšëãûlï³ýàl¬°ŠB¤¨Må2 ™nGaÜx­·¨ôdËO¢´çqÿ86 ŸLÅ©¾í a—ãÞLŠgÛºú{—LºÇ¹@Æä8ßкº;›«ú9Õ“Jîš°Ý›gÞ¯ZàŒ§K4>S½Ifû5d$$™aöfõ–°À\‡Y®$Â$àÁ�ag ›eËîè)Ò«NÚ´QÝœ’¤CÌÎüŽ©«5u•ÝF5‰ªh‰-Ó{ÛßäJ¶ŸZ8ýõýLÊ¡ÈwXï£{'¿¡éˆ)¨ ÿû’d��îVÛéæ@\ªëŒ<bš Õ‹uì<¥ÁV+­°ñ–(´Ú(0¶OA“A#'ñ„§z–eO8ëÀ-ÊdªÓ´ç}¶s³:ƒv@Ä•èÛ=YCÕœ¶t=/¦½¬¬ŽÅyS:ÕßôíöOôšˆ¤^4;Ã\›“÷I$±± íÍ kÆ£2›d!TØÊ¬’î¦3Ëî ”‘ü¡üv“Dœ \4©Ýò9¦v§õ®Õ@â®§Ó‘nŸèÙ>–×Þô C×RiÉøg<Yëñ¬˜}e2ÈÊdƈM»30| ‰ ­ÕKrH‘C¹<c0Ê⺄¦ÎÛ‰¾•ñå™Ñ G2¹9¦>f %L‘GHÆZ~ÎêÿGE5î4Æ{Yúuõ«Mi´}v];îm_÷п‰v\Ujß«Ò:%{)QFXm�豂šxgz-Ä’²û=Öé9m®hp¡�ì>-S"‹aAÐÊ“ÆDh™åìÔý;ÿAÏåc=Oûeï®þ¶ÛþàÝõçÐÿ˜z‚3«Üši´ÄÔP���ÿû’D��òVÛáãÀ\k›]<ÂzKñku§˜¯Ax®-¼ñ–iMYlÀ ™sf/úê\ˆ º¢J±‹Ü´saëö³SdÏ$'!BR†X,<¨f ½x@•7Ôe”æîÙoè³/B‹ßm_Ù;éoÑ×ÿæ}:wÌÿ('^uཱུÛÁŠÉˆ’@��FŠùm,5"`ŸH¸~æ£é|Zª^$¨(ψf';¬~z¼…¼ÜÞM¢ÿÃ]–©nN¿ZûïÕÑÓTkô?–ÊÙW鱿÷Ù¿?ê߀­Q–Í BìòÍ»÷-übºZì´’mÑ“(©< ê¼ù>Rj“ò[t±¥@ qÔ3Â?Þ¿Îdã]F± sw§úLwfm×SîêÔZ:cl‡Ký·×“ä/m¼Ï§7núêfQǼ½9A‚��2RÂêà 1‹ùu?Tëêç£zO²Ùà_KË—øì¡K!¸Ô!®t©Œ¸_ƒõî™Ìœbþ´îˆ­ßѱ }oþÿVÓûißVÛÿ÷åýZÖªãáÛLÐïwSQ@�ÿû’D��Ú][aãP^ ›<Å„ %ss§ MÁx.mðñ–8QÈ“d� 8ºâDzži„²¤â3Ü•é6iv©TÆQ¶i…›ÛÓvŸ|Æ L8sBc@]½O<ë°+çbeßgô!l`ÌýÛýÿëú¾¯¿ßïFJóç>žÙô Ç¯rº“¬ZâHÓ"N3È­V”eÉ:‘€Îi1y|¹ÚŽ™°ôcÎ͆+û¹š¹ÝÐǼLJÄk½î¯a;ɺ™›Mó‹áQÖM:¥4m3dýý¾4mxŸRæÆPFNJŠ%Véch’J£`Ð,MG±»�Ób ]ªƒf „3VI„µÊGU¤Ç"ÖÂj‚9*FYvÅÝ õÑ·«µÊu²5´¯ÎŸí§êm[nÿ·ï§W¢r>ú»I ²¤Cñ/Dç#p” B[ˆQ'<—%Ý4z8.‘m¨‘MXËdO=ÔÔWù‘9š/¤"»ýÊôû~ô¹ß²°Ç"AÏZÛÒ¡4Ñh{+vßÿèÚñvÛQԽؓƒ95|­Iˆ)¨ �ÿû’D��Ø\\iì)p[K›ª="t‹ôÉg¤ÍŒ®lèó (Wg#v ª|*dhá#¡™b³#LhÈ­ÇdÈ.&wÞ«;Çjt±å !Ì‹@é*Ù-Æ-N‰¥?¶í¤X½-odýS'ãr›õÿßS~vùı PÆ€ôUêë{µ�RMG¦y̪ˆzsóõÙÚ¥õ“*†Íi�y—mNœs‡Z½O¾EªÚ"–ÀìŠè¦[0V[lX0¶ë{{_è6«ÓJ¥´7ÿËùðlÇgÑbcí„ @�#*ªc·£nÙubµâЍ™Dj2Í¥*²å»½AÃÌÀe¶ˆ„ÈœÛ &2}!Ó‰+Îãòµ·þñoyü³nµã Ã!Š0†ÑsXJSÔäer«•“íž‘[ÿÕ„°��¤dJB!¬æÁ†wÇU(ÃQxȨë  g3_2i­¹¼Áâ3ž@ëlöz¬6á÷×Ýæ[>º*+§M FËíÿöLŽÒ&Û§ú9©ÍßFÓ1©BõhB§'GLAME�ÿû’D��Ý\\ùƒ,PX&:0ň )ss¦ SÁ®môñŠ UUhEA0)%Ôðôt ñÕð¨ž!eÂ˰©q=ð0 æ²±ù·•›‘(Œ"D\º ª5åY)&õ3\Ö×"`®%§èßÿm9{éûéÕÿ-#š+ º}\¨H@��"DGÑ èGÇ“Ç#Á;à$ñjõ8�I½Ûy=û¨’dfCkžkñò<Úg*«ÕؾÔí‡É癩©zmž½TWÝÝ–ÜHsúhí²7榀 c)ÀD+tºA"„û$ŠJM1Ñ–0»`rÓ5¥Å·Ý½)öBØÃ"šêvÿüÍ?¿qÃ_ý¸¿7‡ÆzìçtPò˜]ööÿ§~ßRó/Eg£ñÿ ùtV@Þ‹:)‘FáM vlÔJ…ÜWXG¸ÉɘÁƒü„tî¨wVÇÈfà 'hòŶC»8Èu.~jVýÚú=J­3›Èæ°‘`„+²E‘pg#ŽÖçYoMCéDÞ23hä•m:6}]áH?.˜‚šŠ�ÿû’D��Ê\Ýiã°YÅ}=– ¡qs§ O-tö ¸–ɬݠ NMT ÏMcu.ŠLÈʆ®'vú$“º•<þ Õ˜I- âR’°>‹”Èc`ï¥VªÔ{¼ÿ®97†wöµ“õï§\Í[iú'æz¦½{>ÞÒ þ‹[U« ‹“.MëE9ЮŒ}¹:_SE¹óyËØ ìöS­¢ëƒ2+ úÓ•^`?Yý&ãÜŸeü5+Ûù $åÚPêJ<Á¯D®·êso‡ôWÉ*ªªåžUßéšÉôÌ¢ rLðÝ+!áP]Ë3Çs·—fg%‚åT~>Eùšá&bÞÆÐ'æ:S漎¡š%ÝsQܯkÑÊâRxGig¯}¿6ÎÊ⪨¯Ne[ÿfEf•jOØ6ŒÅ y’I—@�Iͽ”Ç èí G´âKFÁ*³ðmB ÖL»ÙÙ•z¥_&-�º! qXmOõîïš¹d”Ÿ½.„| 8ŒDë=²sI äÇ‘xRHoa§zz“SQ@�ÿû’D��ß[iãL XÉ{m0ˆ 0ýsæ ³A†­´ôŽX‰ÇœH€�%(|g{ô,ä+ÚŽUzPè’:Ó ò³-±`.“½éÚ‘WÈ‘”8L}ÚÙI9aÇö Œ) éòVš@/.±@yêFõT†HNi[KnÕ+ÙrMZ�"+ÿ-(iGI�[¹(X$>�¡ÉIUZ&…W`l¼&)$2 Å»¡“½×ž&qè&¦µ¶{Ñ!ûaV¶‹FíÒû]:ÞÚYMûê™ÿé~½`¥¡ÑJÝ‚¹®ö|‘*$2³2"ŽK¢ð8``_DÐf;¬pº6C`,n4á±ÓËÝž åI\ 8$èQtš ÷.&hjg6ð}ÍBëj¢¤Z¢jeô7Þ‹ôãJ¡ØŠ,Ñ…TšaûçûÕõõÈ¢MêH�§/p.ä"®C˜†›ÆttË<3>"Õ@‡Й#hžôÞ[å ÌôÄ Ïuq·l3^òM8œ©/œ’Â7ËîCG‚•*öÚ¨™‚ ›ÐÀ.×ÄꢈbŸZ&Ýå8¢b j(��ÿû’D��á*]Ñæ´[Ë›š=‚ËéqsçŒRÁ‡-üô•xûÿí�JIÄèõª´ ò(© ªrÌó½v¤ÈT†aA¥4ŵ5« H'²X‹;jT*A·¥ûd0Ã�)MDÂö.šlåéÔ„Œ] x²ÉH ^§7}ÍTÛê@%&ë�›§€œD‘IÄG¸¨pœxNt¦°eý¬ì; ϱ Ì` n è…§çüC$»r9Úujimž¾¼_¦µöõjÿè}9è] \* ûkÓÊíÒꄬ« D�T“›£ÔqŒòÆJÏ*#‘…ÉçË™~xh´±À@=‹uC,*w7F•#µDeÞë¢6j#W¬· Hg´èÉ£3þÝU•Mÿ~ÿ«}…la µÇ+ôK!˜¤ £-áò!‚øõk‹“2úÈÈ\…�p* ³K)Væk .:†]¼¶÷ÃeÊÕµ d.·ëF)™©;¿S¾°FEAÓ÷%7°0ç4zmµ7$Óˆr7ÁRäK°B˜‚šŠ�ÿû’D��ç1[iæÐTÃËm0ˆ mqq§˜M}-´ó É6Úˆ)È,¥°—15$SqùFæ-™ŠÐFŸ›Ùû1D_5þ>˜Ì)8(dé¹ Ïs2=ÉDdrüÇ3ŸÌæÅÅÂêQœQÊvöÍ aÇ–rRBç×ÿ×iÅ’ �T¼�à¨)— ¦§+SÁCcÐTgÂQðV»CÂ;î."ªÞHžkÇsÇØæ¶³—™ÑÖog“i;‹´¥ÈäÔAGÉ•#×]·É(€J“wÚY'D"HWP’i£\®9â¤yçüø\öOøgöìaº°ßS½;Ô¹ÑÓ1Z‹O+“¯’Ó€¸’®e-^ç5_M R3›A—Þ•öz*Xëö\îhTÇÿ’×,Å n^ '@ÿJ‰{2K”›áoˆ¢%j7ÆdGGJhr;ºÙtþ^©Î)Lžm• w¢.û?Ò,òªÑé®·Z^ª:¹MmŒNØÁÓTÅ1[͘X¢7i09Ũ³úSSQLËŒL �ÿû’D��Ã(Ûiæ°\e=0Š M/oôÅ�’,-êžPñÈÝH�!<H¨¼P›¤„É`ê‚·hPH—†ƒ '°˜ž0ýJ T‰"…Z8f{æ^×!Ù¶™x±pÛÆÀÎ2¦y^•<³¤zÕá{.nõQÀãÛÙ.ý (��¥Æ€¬š !†  N"'Åcd­+K´p-A[µš¾É÷«LÒ2Ô»ÞZe!²“à·ùXüò>É]E ³ <`TÃíÏ¡l“JÙ«¾£¿¹rn@„ö裦PÑÔÐH¤æQ=ôÔ”DŽo64%–œTX–O\¹§ŽÛ¡¨asÚT´ªcÜæ0ŒÜæD«Ÿ·y½{5R“Ý•­D7ÛÚ•wït]Dþ‘è(^ÄgÔ(x ½›´WÝÈ@(¤êä¤×8… D”8ÜWîsÊ¡7ÃÂÅWX’ЂÈtVe«”qÎ5¡1B½TÊç0¬ˆüÙú»/]Í{º-Ú®UMÕ{tÕ?ÿWó «uþܪ9•Dìò\x—Ìë+ÿ:bÿû’D��ëRÛN<àUÆšàǬ���¤�� ��4ƒ€�óÇ8ð$ƒ‰8 £Å쟷%uoVÖà4$8m„Àì<xmÄ#‚޾‚s‡Z£§ñAKŽÿÍCÑôþ†¡ÓXÃ::£ÿî²®‡N3ôVÿüÔr§tÇü;ƒÌyN_Ã*Ÿø÷vù‹ð+EžnKä¤[ù4w“XiPîÿ3ã¡AÛ0J$šÿð¢2šØi¯ÿ›.ã–L£_ŽÿûœüôÛÕè:�!>%ÿÇŒ�Óõ¦ ¦¢™—˜��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Makefile.am.global�����������������������������������������������������������������������000644 �001751 �001751 �00000000245 12652752122 017363� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am.global,v 1.9 2016/01/29 21:06:26 aleidinger Exp $ # global section for every Makefile.am AUTOMAKE_OPTIONS = 1.15 foreign # end global section �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/MacDLLMain.c�������������������������������������������������������������������������000755 �001751 �001751 �00000000056 07425346435 016650� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MacDLLMain.c */ int main() { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/LAME_Classic_Final.pch���������������������������������������������������������������000755 �001751 �001751 �00000001401 07474633072 020622� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* LAME Classic Final.pch Precompiled header sources for Classic non-debug build of LAME on Macintosh */ #pragma precompile_target "LAME Classic Final Headers" #define TARGET_API_MAC_OS8 1 #include "Precompile_Common.h" #define LAME_LIBRARY_BUILD 1 // Building library #undef LIBSNDFILE // Build with LIBSNDFILE #define NOANALYSIS 1 // Build without frame-analyzer hooks #undef HAVE_MPGLIB // Build without MPGLIB decoder (forces GPL) #undef USE_LAYER_1 // Build without layer-1 decoding (needs MPGLIB) #undef USE_LAYER_2 // Build without layer-2 decoding (needs MPGLIB) #undef HAVE_VORBIS // Build without Ogg Vorbis #undef BRHIST // Build without histogram (not CLI encoder) #undef NDEBUG // Build final (non-debug) version ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/LAME_Carbon_Final.pch����������������������������������������������������������������000755 �001751 �001751 �00000001401 07474633072 020445� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* LAME Carbon Debug.pch Precompiled header sources for Carbon non-debug build of LAME on Macintosh */ #pragma precompile_target "LAME Carbon Final Headers" #define TARGET_API_MAC_CARBON 1 #include "Precompile_Common.h" #define LAME_LIBRARY_BUILD 1 // Building library #undef LIBSNDFILE // Build with LIBSNDFILE #define NOANALYSIS 1 // Build without frame-analyzer hooks #undef HAVE_MPGLIB // Build without MPGLIB decoder (forces GPL) #undef USE_LAYER_1 // Build without layer-1 decoding (needs MPGLIB) #undef USE_LAYER_2 // Build without layer-2 decoding (needs MPGLIB) #undef HAVE_VORBIS // Build without Ogg Vorbis #undef BRHIST // Build without histogram (not CLI encoder) #undef NDEBUG // Build final (non-debug) version ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/.DS_Store����������������������������������������������������������������������������000644 �001751 �001751 �00000014004 07425346434 016320� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������Bud1����������� ����������������������������������������������������������� �C�a�r�b�o��ÿ ÿÿÿTTTTTTTTTTTTTÿ*Tÿ��������ÿ ÿÿAÿTTTTTTTTTTTTTÿ*TTÿ�������ÿÿÿ;AÿTTTTTTTTTTTTTÿ*TTTÿ������ÿÿ;ÿÿTTTTTTTTTTTTTÿ*TTTTÿ�����ÿ ÿÿÿTTTTTTTTTTTTTÿTÿ����ÿ ÿÿAÿTTTTTTTTTTTTTÿÿÿÿÿÿÿÿÿ����ÿÿÿ;AÿTTTTTTTTTTTTTTÿ����ÿÿ;ÿÿTTTTTTTTTTTTTTTTTTTTÿ����ÿ ÿÿÿTTTTTTTTTTTTTTTTTTTTÿ����ÿ ÿÿAÿTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿTÿ����ÿÿÿ;AÿTTÿ��������������+ÿÿ����ÿÿ;ÿÿTTÿ�+++++++++++++ùÿÿ����ÿ ÿÿÿTTÿ�+++++++++++++ùÿÿ����ÿ ÿÿAÿTTÿ�++ÿÿÿ+ÿÿ+++++ùÿÿ����ÿÿÿ;AÿTTÿ�+++++++++++++ùÿÿ����ÿÿ;ÿÿTTÿ�++ÿÿ+ÿ+ÿÿÿ+++ùÿÿ����ÿ ÿÿÿTTÿ�+++++++++++++ùÿÿ����ÿ ÿÿAÿTTÿ�++ÿÿÿ+ÿ+ÿÿÿ++ùÿÿ����ÿÿÿ;AÿTTÿ�+++++++++++++ùÿÿ����ÿÿ;ÿÿTTÿ�++ÿ+ÿÿÿ+ÿÿ+++ùÿÿ����ÿ ÿÿÿTTÿ�+++++++++++++ùÿÿ����ÿ ÿÿAÿTTÿ�++ÿÿ+ÿ+ÿÿÿ+++ùÿÿ����ÿÿÿ;AÿTTÿ�+++++++++++++ùÿÿ����ÿÿ;ÿÿTTÿ�+++++++++++++ùÿÿ����ÿ ÿÿÿTTÿ+ùùùùùùùùùùùùùùÿÿ����ÿ ÿÿAÿTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ����ÿÿÿ;AÿTTTÿ����ÿÿ_‰ÿÿÿ����ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ�������������L�A�M�E� �C�a�r�b�o�n� �D�e�b�u�g�.�p�c�hIlocblob��������ÿÿÿÿÿÿ������L�A�M�E� �C�a�r�b�o�n� �F�i�n�a�l�.�p�c�hIlocblob������P���íÿÿÿÿÿÿ������L�A�M�E� �C�l�a�s�s�i�c� �D�e�b�u�g�.�p�c�hIlocblob������P���_ÿÿÿÿÿÿ������L�A�M�E� �C�l�a�s�s�i�c� �F�i�n�a�l�.�p�c�hIlocblob������ð���_ÿÿÿÿÿÿ������L�A�M�E�.�m�c�pIlocblob������P���ÿÿÿÿÿÿ������L�A�M�E�.�m�c�pdilcblob��� �����ïà���P����� �� ÿÿÿÿÿÿdà��� �M�a�c�D�L�L�M�a�i�n�.�cIlocblob������P���¦ÿÿÿÿÿÿ������P�r�e�c�o�m�p�i�l�e�_�C�o�m�m�o�n�.�hIlocblob��������¦ÿÿÿÿÿÿ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ������@������€��������������������������������� ������@������€����������������������������������� ������@������€����������������������������������� ������@�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#F@êÝ€¥œ ������������������ê!p������� �������o���������������������������¥œ j°êÝ€#F@iêÝ€Tlà������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ���E�� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DSDB����������������������������� ���`����������€���������������������������������� ������@������€����������������������������������� ������@������€����������������������������������� ������@����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#F@êÝ€¥œ ������������������ê!p������� �������o���������������������������¥œ j°êÝ€#F@iêÝ€Tlà�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/LAME_Classic_Debug.pch���������������������������������������������������������������000755 �001751 �001751 �00000001363 07474633072 020626� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* LAME Classic Debug.pch Precompiled header sources for Classic debug build of LAME on Macintosh */ #pragma precompile_target "LAME Classic Debug Headers" #define TARGET_API_MAC_OS8 1 #include "Precompile_Common.h" #define LAME_LIBRARY_BUILD 1 // Building library #undef LIBSNDFILE // Build with LIBSNDFILE #define NOANALYSIS 1 // Build without frame-analyzer hooks #undef HAVE_MPGLIB // Build without MPGLIB decoder (forces GPL) #undef USE_LAYER_1 // Build without layer-1 decoding (needs MPGLIB) #undef USE_LAYER_2 // Build without layer-2 decoding (needs MPGLIB) #undef HAVE_VORBIS // Build without Ogg Vorbis #undef BRHIST // Build without histogram (not CLI encoder) #define NDEBUG 1 // Build debug version �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/LAME_Carbon_Debug.pch����������������������������������������������������������������000755 �001751 �001751 �00000001363 07474633072 020451� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* LAME Carbon Debug.pch Precompiled header sources for Carbon debug build of LAME on Macintosh */ #pragma precompile_target "LAME Carbon Debug Headers" #define TARGET_API_MAC_CARBON 1 #include "Precompile_Common.h" #define LAME_LIBRARY_BUILD 1 // Building library #undef LIBSNDFILE // Build with LIBSNDFILE #define NOANALYSIS 1 // Build without frame-analyzer hooks #undef HAVE_MPGLIB // Build without MPGLIB decoder (forces GPL) #undef USE_LAYER_1 // Build without layer-1 decoding (needs MPGLIB) #undef USE_LAYER_2 // Build without layer-2 decoding (needs MPGLIB) #undef HAVE_VORBIS // Build without Ogg Vorbis #undef BRHIST // Build without histogram (not CLI encoder) #define NDEBUG 1 // Build debug version �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/Makefile.am��������������������������������������������������������������������������000644 �001751 �001751 �00000000435 07474633452 016677� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.1 2002/05/28 07:52:10 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ .DS_Store \ LAME.mcp \ LAME_Carbon_Debug.pch \ LAME_Carbon_Final.pch \ LAME_Classic_Debug.pch \ LAME_Classic_Final.pch \ MacDLLMain.c \ Precompile_Common.h �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/LAME.mcp�����������������������������������������������������������������������������000755 �001751 �001751 �00000675560 07425350723 016077� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������cool�����(�e��f(��H���ã���������CodeWarrior Project�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%����������I����������p����������•����������º����������ã��������� ���������1��� ������V��� ������~��� ������¦��� ������Ê��� ������ó��������� ���������C���������g���������Ž���������µ���������Ô���������ö��������� ���������F���������q���������•���������º���������â��������� ���������1���������U���������~���������«��� ������Î���!������î���"���������#������7���$������\���%���������&������¥���'������Ì���(������ñ���)���������*������?���+������g���,���������-������²���.������Ú���/���������0������&���1������O���2������|���3������Ÿ���4������Ã���5������ê���6���������7������0���8������R���9������|���:������¢���;������Í���<������ñ���=������ ���>������ >���?������ h���@������ ���A������ ±���B������ Ú���C������ ���D������ *���E������ J���F������ n���G������ “���H������ ¸���I������ Ý���J������ ���K������ (���L������ M���M������ r���N������ ›���O������ Ã���P������ é���Q������ ���R������ 6���S������ ^���T������ ‚���U������ «���V������ Ø���W������ û���X������ ���Y������ F���Z������ m���[������ Œ���\������ ®���]������ Ø���^������ þ���_������)���`������M���a������r���b������š���c������Ä���d������é���e������ ���f������6���g������c���h������†���i������¦���j������Ê���k������ï���l���������m������9���n������]���o������„���p������©���q������Î���r������÷���s���������t������E���u������j���v������’���w������º���x������Þ���y���������z������4���{������W���|������{���}������¢���~������É���������è���€������ ���������4���‚������Z���ƒ������…���„������©���…������Î���†������ö���‡������ ���ˆ������E���‰������i���Š������’���‹������¿���Œ������â������������Ž������&���������K���������p���‘������˜���’������¿���“������é���”���������•������9���–������e���—���������˜������¹���™������á���š������ ���›������7���œ������^���������Š���ž������º���Ÿ������à��� ���������¡������1���¢������[���£������}���¤������¢���¥������Ï���¦������ø���§������&���¨������M���©������u���ª������ ���«������Í���¬������õ���­���������®������H���¯������x���°������ž���±������Á���²������è���³���������´������8���µ������`���¶������‡���·������±���¸������Ù���¹���������º������-���»������X���¼���������½������©���¾������Ô���¿������ÿ���À������&���Á������R���Â������‚���Ã������¨���Ä������Ï���Å������ù���Æ������#���Ç������E���È������j���É������—���Ê������À���Ë������î���Ì���������Í������=���Î������h���Ï������•���Ð������½���Ñ������ä���Ò������ ���Ó������ @���Ô������ f���Õ������ ‰���Ö������ °���×������ Ø���Ø������!����Ù������!���Ú������!=���Û������!^���Ü������!}���Ý������!œ���Þ������!¿���ß������!á���à������"���á������" ���â������"B���ã������"d���ä������"‚���å������"¥���æ������"Ì���ç������"é���è������#���é������#(���ê������#I���ë������#b���ì������#~���í������#¢���î������#Â���ï������#ç���ð������$���ñ������$$���ò������$F���ó������$j���ô������$‰���õ������$§���ö������$Ê���÷������$ñ���ø������%���ù������%(���ú������%F���û������%e���ü������%„���ý������%–���þ������%Á���ÿ������%ë���������&��������&@��������&j��������&”��������&¿��������&é��������'��������'>��������'h�� ������'’�� ������'À�� ������'í�� ������(�� ������(H��������(u��������(¢��������(Ç��������(ë��������)��������)6��������)Z��������)ƒ��������)°��������)Ý��������*���������*$��������*K��������*o��������*˜��������*Å��������*ò��������+�� ������+9��!������+`��"������+„��#������+­��$������+Ú��%������,��&������,*��'������,N��(������,u��)������,™��*������,Â��+������,ï��,������-��-������-?��.������-c��/������-��0������-´��1������-à��2������.��3������.@��4������.f��5������.��6������.·��7������.Þ��8������/ ��9������/:��:������/j��;������/��<������/·��=������/Ø��>������/ö��?������0��@������0@��A������0g��B������0„��C������0¢��D������0½��E������0Ø��F������0÷��G������1��H������11��I������1L��J������1j��K������1…��L������1Ÿ��M������1½��N������1×��O������1ö��P������2��Q������22��R������2L��S������2i��T������2†��U������2›��V������2³��W������2Ó��X������2ï��Y������3��Z������3*��[������3E��\������3c��]������3ƒ��^������3ž��_������3»��`������3Õ��a������3ô��b������4��c������40��d������4F��e������4`��f������4{��g������4–��h������4³��i������4Í��j������4ì��k������5��l������52��m������5K��n������5e��o������5��p������5™��q������5·��r������5Ô��s������5ï��t������6 ��u������6&��v������6@��w������6Y��x������6v��y������6��z������6­��{������6Ï��|������6ç��}������7���~������7��������78��€������7L��������7c��‚������7‚��ƒ������7��„������7½��…������7Ö��†������7ð��‡������8 ��ˆ������8,��‰������8F��Š������8b��‹������8{��Œ������8™��������8»��Ž������8Ó��������8è��������9��‘������9��’������95��“������9Q��”������9j��•������9ˆ��–������9ª��—������9Ì��˜������9ä��™������9ý��š������:��›������:3��œ������:R��������:p��ž������:Œ��Ÿ������:§�� ������:Å��¡������:à��¢������:ú��£������;��¤������;2��¥������;Q��¦������;t��§������;��¨������;§��©������;Ä��ª������;á��«������;ö��¬������<��­������<.��®������<J��¯������<k��°������<…��±������< ��²������<¾��³������<Þ��´������<ù��µ������=��¶������=0��·������=O��¸������=r��¹������=‹��º������=¡��»������=»��¼������=Ö��½������=ñ��¾������>��¿������>(��À������>G��Á������>j��Â������>��Ã������>¦��Ä������>À��Å������>Ú��Æ������>ô��Ç������?��È������?/��É������?J��Ê������?d��Ë������?��Ì������?›��Í������?´��Î������?Ñ��Ï������?ê��Ð������@��Ñ������@*��Ò������@B��Ó������@[��Ô������@w��Õ������@“��Ö������@§��×������@¾��Ø������@Ý��Ù������@ø��Ú������A��Û������A1��Ü������AK��Ý������Ah��Þ������A‡��ß������A¡��à������A½��á������AÖ��â������Aô��ã������B��ä������B.��å������BC��æ������B\��ç������Bv��è������B��é������B¬��ê������BÅ��ë������Bã��ì������C��í������C'��î������C?��ï������CX��ð������Cw��ñ������C–��ò������C¹��ó������CÛ��ô������Cû��õ������D��ö������D<��÷������D[��ø������Dy��ù������D›��ú������D¹��û������DÜ��ü������E��ý������E ��þ������E>��ÿ������E_���������E€��������E™��������Eµ��������EÙ��������Eù��������F��������F<��������F[��������F}�� ������F¡�� ������FÀ�� ������Fá�� ������Fÿ�� ������G"��������GI��������Gf��������G€��������Gž��������G½��������GÜ��������Gý��������H��������H>��������He��������HŒ��������H©��������HÇ��������Hå��������I��������I%��������IF��������Ie�� ������Iƒ��!������I¤��"������IÂ��#������Iß��$������J���%������J��&������J?��'������Je��(������J��)������Jž��*������J¾��+������JÞ��,������Jö��-������K��.������K4��/������KS��0������Kw��1������K”��2������K²��3������KÓ��4������Kö��5������L��6������L4��7������LQ��8������Ls��9������L™��:������Lµ��;������LÎ��<������Lë��=������M ��>������M'��?������MG��@������Md��A������M†��B������M¬��C������MÒ��D������Mî��E������N ��F������N2��G������NY��H������N„��I������N®��J������NÖ��K������Ný��L������O'��M������ON��N������Ot��O������Ož��P������OÄ��Q������Oï��R������P��S������PC��T������Pi��U������P’��V������P»��W������PÜ��X������Q���Y������Q,��Z������QT��[������Q��\������Q§��]������QÎ��^������Qø��_������R$��`������RK��a������Rt��b������Rš��c������RÅ��d������Rô��e������S��f������S;��g������Sa��h������Sˆ��i������S¯��j������SØ��k������Sþ��l������T)��m������TX��n������T‡��o������T¬��p������TÒ��q������Tø��r������U��s������UH��t������Uq��u������U˜��v������U¾��w������Uç��x������V ��y������V2��z������V[��{������V€��|������Vª��}������VØ��~������Vü��������W!��€������WI��������Wq��‚������W‘��ƒ������W´��„������Wß��…������X��†������X2��‡������XW��ˆ������X}��‰������X¦��Š������XÑ��‹������X÷��Œ������Y��������YD��Ž������Yn��������Yœ��������YÀ��‘������Yá��’������Z��“������Z,��”������ZR��•������Zz��–������ZŸ��—������ZÉ��˜������Z÷��™������[%��š������[I��›������[n��œ������[•��������[¼��ž������[ç��Ÿ������\�� ������\9��¡������\`��¢������\Š��£������\±��¤������\×��¥������]��¦������]'��§������]R��¨������]��©������]¦��ª������]Ì��«������]õ��¬������^��­������^?��®������^c��¯������^��°������^·��±������^ä��²������_ ��³������_1��´������_[��µ������_‡��¶������_®��·������_×��¸������_ý��¹������`(��º������`W��»������`|��¼������`ž��½������`Ä��¾������`ë��¿������a��À������a;��Á������aa��Â������aŒ��Ã������a»��Ä������aê��Å������b��Æ������b5��Ç������b[��È������b��É������b«��Ê������bÔ��Ë������bû��Ì������c!��Í������cJ��Î������cp��Ï������c•��Ð������c¾��Ñ������cã��Ò������d ��Ó������d;��Ô������d_��Õ������d„��Ö������d¬��×������dÔ��Ø������dô��Ù������e��Ú������eB��Û������ei��Ü������e•��Ý������eº��Þ������eà��ß������f ��à������f4��á������fZ��â������f‚��ã������f§��ä������fÑ��å������fÿ��æ������g#��ç������gD��è������gi��é������g��ê������gµ��ë������gÝ��ì������h��í������h,��î������hZ��ï������hˆ��ð������h¬��ñ������hÑ��ò������hø��ó������i��ô������iJ��õ������it��ö������iœ��÷������iÃ��ø������ií��ù������j��ú������j:��û������jd��ü������jŠ��ý������jµ��þ������jä��ÿ������k ���������k/��������kX��������k��������k¢��������kÆ��������kò��������l��������lG��������lm�� ������l”�� ������l¾�� ������lê�� ������m�� ������m:��������m`��������m‹��������mº��������mß��������n��������n'��������nN��������nu��������nž��������nÄ��������nï��������o��������oM��������or��������o˜��������o¾��������oä��������p�� ������p7��!������p^��"������p„��#������p­��$������pÓ��%������pø��&������q!��'������qF��(������qp��)������qž��*������qÂ��+������qç��,������r��-������r7��.������rW��/������rz��0������r¥��1������rÌ��2������rø��3������s��4������sC��5������sl��6������s—��7������s½��8������så��9������t ��:������t4��;������tb��<������t†��=������t§��>������tÌ��?������tò��@������u��A������u@��B������ue��C������u��D������u½��E������uë��F������v��G������v4��H������v[��I������v‚��J������v­��K������v×��L������vÿ��M������w&��N������wP��O������ww��P������w��Q������wÇ��R������wí��S������x��T������xG��U������xl��V������x’��W������x»��X������xä��Y������y��Z������y)��[������yU��\������y}��]������yª��^������yÐ��_������y÷��`������z!��a������zM��b������zt��c������z��d������zÃ��e������zî��f������{��g������{B��h������{d��i������{Š��j������{±��k������{Ø��l������|��m������|'��n������|R��o������|��p������|°��q������|Õ��r������|û��s������}!��t������}G��u������}q��v������}š��w������}Á��x������}ç��y������~��z������~6��{������~[��|������~„��}������~©��~������~Ó����������€������%��������J��‚������r��ƒ������š��„������º��…������Ý��†������€��‡������€/��ˆ������€[��‰������€€��Š������€¦��‹������€Ï��Œ������€ú�������� ��Ž������H��������m��������—��‘������Å��’������é��“������‚ ��”������‚/��•������‚U��–������‚{��—������‚£��˜������‚È��™������‚ò��š������ƒ ��›������ƒN��œ������ƒr��������������������������������������������x��y��z��{��|��o��v��s��}��~����w��p��t��r��€����‚��ƒ��„��…��†��‡��ˆ��‰��Š��‹��Œ����Ž������u��‘��n��q��’��“��”��•��–��—��˜��Î��Ï��Ð��Ñ��Ò��Å��Ì��É��Ó��Ô��Õ��Í��Æ��Ê��È��Ö��×��Ø��Ù��Ú��Û��Ü��Ý��Þ��ß��à��á��â��ã��ä��å��æ��Ë��ç��Ä��Ç��è��é��ê��ë��ì��í��î��M��N��O��P��Q��D��K��H��R��S��T��L��E��I��G��U��V��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��J��f��C��F��g��h��i��j��k��l��m��£��¤��¥��¦��§��š��¡��ž��¨��©��ª��¢��›��Ÿ����«��¬��­��®��¯��°��±��²��³��´��µ��¶��·��¸��¹��º��»�� ��¼��™��œ��½��¾��¿��À��Á��Â��Ã��$��%��&��'��(����"����)��*��+��#���� ����,��-��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��!��=������>��?��@��A��B��C��D��ù��ú��û��ü��ý��ð��÷��ô��þ��ÿ�����ø��ñ��õ��ó������������������ �� �� �� �� ����������ö����ï��ò����������������z��{��|��}��~��q��x��u����€����y��r��v��t��‚��ƒ��„��…��†��‡��ˆ��‰��Š��‹��Œ����Ž������‘��’��w��“��p��s��”��•��–��—��˜��™��š��Ð��Ñ��Ò��Ó��Ô��Ç��Î��Ë��Õ��Ö��×��Ï��È��Ì��Ê��Ø��Ù��Ú��Û��Ü��Ý��Þ��ß��à��á��â��ã��ä��å��æ��ç��è��Í��é��Æ��É��ê��ë��ì��í��î��ï��ð��O��P��Q��R��S��F��M��J��T��U��V��N��G��K��I��W��X��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��L��h��E��H��i��j��k��l��m��n��o��¥��¦��§��¨��©��œ��£�� ��ª��«��¬��¤����¡��Ÿ��­��®��¯��°��±��²��³��´��µ��¶��·��¸��¹��º��»��¼��½��¢��¾��›��ž��¿��À��Á��Â��Ã��Ä��Å���S���T���U���V���W���L���I���P���X���Y���Z���R���M���Q���O���[���\���]���^���_���`���a���b���c���J���d�����e���f���g�������h���i���j���H���k���K���N�� ��!��"��#��$��%��&���w���x���y���z���{���p���m���t���|���}���~���v���q���u���s������€������‚���ƒ���„���…���†���‡���n���ˆ�����‰���Š���‹�������Œ������Ž���l������o���r��'��(��)��*��+��,��-���›���œ������ž���Ÿ���”���‘���˜��� ���¡���¢���š���•���™���—���£���¤���¥���¦���§���¨���©���ª���«���’���¬�� ���­���®���¯�� �� ���°���±���²������³���“���–��.��/��0��1��2��3��4���¿���À���Á���Â���Ã���¸���µ���¼���Ä���Å���Æ���¾���¹���½���»���Ç���È���É���Ê���Ë���Ì���Í���Î���Ï���¶���Ð�� ���Ñ���Ò���Ó�� �����Ô���Õ���Ö���´���×���·���º��5��6��7��8��9��:��;���ã���ä���å���æ���ç���Ü���Ù���à���è���é���ê���â���Ý���á���ß���ë���ì���í���î���ï���ð���ñ���ò���ó���Ú���ô�����õ���ö���÷�������ø���ù���ú���Ø���û���Û���Þ��<��=��>��?��@��A��B��� ��� ��� ��������������������������� ������ ���������������������������������������ý������������þ���ÿ��� ���!���"�������#�����������������������/���0���1���2���3���(���%���,���4���5���6���.���)���-���+���7���8���9���:���;���<���=���>���?���&���@������A���B���C�������D���E���F���$���G���'���*����������������&��'��(��)��*����$��!��+��,��-��%����"�� ��.��/��0��1��2��3��4��5��6��7��8��9��:��;��<��=��>��#��?������@��A��B��C��D��E��F��|��}��~����€��s��z��w����‚��ƒ��{��t��x��v��„��…��†��‡��ˆ��‰��Š��‹��Œ����Ž������‘��’��“��”��y��•��r��u��–��—��˜��™��š��›��œ��û��ü��ý��þ��ÿ��ò��ù��ö���������ú��ó��÷��õ�������������� �� �� �� �� ��������������ø����ñ��ô����������������Q��R��S��T��U��H��O��L��V��W��X��P��I��M��K��Y��Z��[��\��]��^��_��`��a��b��c��d��e��f��g��h��i��N��j��G��J��k��l��m��n��o��p��q���ü����������������������������������������������#����������6����������H����������Y����������g����������i��� �������|��� �������Ž��� �������˜��� �������¬��� �������¿����������Ë����������Ú����������è����������ñ���������������������������!���������:���������S���������k���������ƒ���������›���������³���������Î���������é���������û��������������������� ���������!������"���"������/���#������6���$������G���%������V���&������e���'������t���(���������)���������*������¬���+������¿���,������Ð���-������á���.������í���/������ú���0���������1���������2������(���3������6���4������C���5������S���6������c���7������r���8���������9������Ž���:���������;������©���<������º���=������Ï���>������Ú���?������â���@������î���A������û���B���������C���������D������%���E������:���F������E���G������Q���H������X���I������j���J������ƒ���K������œ���L������¸���M������Æ���N������Ó���O������á���P������î���Q���������R���������S������)���T������<���U������C���V������Z���W������a���X������z���Y������†���Z���������[������œ���\������¦���]������¯���^������¸���_������Â���`������Ë���a������Ö���b������ä���c������ï���d������ú���e���������f���������g���������h������+���i������?���j������L���k������b���l������y���m���������n������¡���o������²���p������Ì���q������å���r������ÿ���s���������t������4���u������>���v������X���w������q���x������Œ���y������¦���z������Â���{������Û���|���������������������������������������������������������������������������������������������������������������������� ���V����������������������������� ���W����������������������������� ���Y����������������������������� ���Z��������������������������������[��������������������������������\��������������������������������]��������������������������������^��������������������������������_��������������������������������`��������������������������������a��������������������������������b��������������������������������c��������������������������������d��������������������������������e��������������������������������f��������������������������������g�����������������������������������������������������������������������������������������������������������������������������!���j�����������������������������"���u��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��� ��� ��� ��� ����������������������������������������������������������� �����"������������ �� �� �� ����������������������������!��"���������������������������������� ��� ��� ��� ��� ���������������������������������������������������������������� �����#������������!�� �� �� ������������������������������#���������������������������������� ��� ��� ��� ��� ���������������������������������������������������������������� �����#�� ���������� �� �� ��������������������������������#���������������������������������� ��� ��� ��� ��� ���������������������������������������������������������������� �����#�������v����w����y����{���|���€��ö�� ����|������������������ ��ƒ—��„����ÉÙPçz°��������������������������ÿ����ÿ����ÿ����ÿ�����MSL C.PPC.Lib�InterfaceLib�MathLib�MSL RuntimePPC.Lib�MSL SIOUX.PPC.Lib�SimpleAlert.rsrc�SimpleAlert.c�x�MSL C.68K (2i).Lib�MSL SIOUX.68K.Lib�MacOS.lib�MathLib68K (2i).Lib�MSL Runtime68K.Lib�Application�ANSI Libraries�Mac Libraries�Carbon.r�MSL C.Carbon.Lib�MSL SIOUX.Carbon.Lib�CarbonLib�:MacOS Toolbox PPC Final�:MacOS Toolbox 68K Final�MacOS Toolbox PPC Debug�MacOS Toolbox PPC Final�MacOS Toolbox 68K Debug�MacOS Toolbox 68K Final�MacOS Toolbox Carbon Debug�MacOS Toolbox Carbon Final�MacOS Toolbox FAT�:a.out�Lib Import PPC�Rez�Balloon Help�MW C/C++ PPC�PPCAsm�XCOFF Import PPC�PEF Import PPC�Lib Import 68K�MPW Import 68K�MW C/C++ 68K�PEF Import 68K�:MacOS Toolbox Carbon Final�:MacOS Toolbox FAT�MacOS PPC Linker�MacOS 68K Linker�MacOS Merge�Source Trees�Access Paths�Debugger Runtime�Target Settings�File Mappings�Build Extras�Debugger Target�Custom Keywords�C/C++ Compiler�C/C++ Warnings�Output Flags�Packager Panel�PPC CodeGen�PPC Disassembler�PPC Global Optimizer�PPC Linker�PPC PEF�PPC Project�PPCAsm Panel�Rez Compiler�68K CodeGen�68K Disassembler�68K Global Optimizer�68K Linker�68K Project�CFM68K�MacOS Merge Panel�:MacOS Toolbox 68K Debug�:MacOS Toolbox PPC Debug�:MacOS Toolbox Carbon Debug�Classic Debug�Carbon Debug�Classic Final�Carbon Final�:LAME Carbon Debug�:LAME Classic Debug�:LAME Classic Final�:LAME Carbon Final�main.c�LAME Classic Debug.pch�lame.c�LAME Classic Debug.pch++�bitstream.c�util.c�quantize_pvt.c�version.c�VbrTag.c�id3tag.c�encoder.c�tables.c�quantize.c�vbrquantize.c�psymodel.c�takehiro.c�newmdct.c�reservoir.c�fft.c�MSL ShLibRuntime.Lib�MSL StdCRuntime.Lib�MacDLLMain.c�LAME Carbon Debug.pch�LAME Classic Final.pch�LAME Carbon Final.pch�DLL Classic Debug�DLL Carbon Debug�Encoder DLL Classic Debug�Encoder DLL Carbon Debug�Encoder DLL Classic Final�Encoder DLL Carbon Final�:LAME Encoder Classic Debug�set_get.c�Minimal DLL Classic Debug�Minimal DLL Carbon Debug�:LAME Minimal Carbon Debug�Minimal DLL Classic Final�:LAME Minimal Classic Final�Minimal DLL Carbon Final�:LAME Minimal Carbon Final������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������B���C���D���E���F������P���S���Q���R���s���w���{���y���I������K���)���*���J������/������ ��� ���X���3���6���7���M���O���������G���L���N���5���0���4���n���m���p���r���o���q���^���f���2���]������j���l���U���W���k���V���%���������i���,���-���H���+������������������������ ���T������ ���v���z���u���x���&������������� ������g��� ���������h���'���!���d���8���9���(���$���:���;���<���=���>���?���"���@���b���`���Z���e������A���t���������.���_���c���1���Y���a���\���[������#�������������������� ROOT������������GRUP������� Prefix���FILE�� FILE�� FILE��!FILE��"GRUP�������Sources���FILE��!FILE�� FILE��FILE��FILE��FILE�� FILE��FILE��FILE��FILE��FILE��FILE��"FILE��FILE��FILE�� FILE��FILE��FILE��GRUP������� Resources���FILE��GRUP�������ANSI Libraries���GRUP�������PPC���FILE��FILE��GRUP�������Carbon���FILE��FILE��GRUP������� Mac Libraries���GRUP������� PPC���FILE��FILE��FILE��FILE������È;`Ö€��5{����������€��ak�¥������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��a.out����������������������������������������������������������????APPL��€XÀ������������������������������������������������������������������????������������������������������€���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������main������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿ����ÿ����ÿ����ÿ����������������������������������������������������������������������������ÿ����ÿ����ÿ����ÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿ����ÿ����ÿ����ÿ�������������������������������������������� �����LAME Classic Final Headers��������������������������������������������������������������������������������� �����LAME Carbon Debug Headerss���������������������������������������������� ��a.out����������������������������������������������������������????APPL��€XÀ������������������������������������������������������������������????������������������������������€��������������������������������������������������������������������������������������������������"���������� �� �� ��������������������������������#����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ROOT������������GRUP������� Prefix���FILE�� FILE�� FILE��!FILE��"GRUP�������Sources���FILE��!FILE�� FILE��FILE��FILE��FILE�� FILE��FILE��FILE��FILE��FILE��FILE��"FILE��FILE��FILE�� FILE��FILE��FILE��GRUP������� Resources���FILE��GRUP�������ANSI Libraries���GRUP�������PPC���FILE��FILE��GRUP�������Carbon���FILE��FILE��GRUP������� Mac Libraries���GRUP������� PPC���FILE��FILE��FILE��FILE������ @€���ë��g=X������������ ������� A0� �����LAME Classic Debug Headers������������������������� ��a.out����������������������������������������������������������????APPL��€XÀ������������������������������������������������������������������????������������������������������€������������������������������������������������������������������������������������������������������������������������������������������������������������������JavaClasses.jar��������������ZIP MWZP������� Merge Out������������������������������������������������������????APPL���DLGXckidProjWSPC����������������������������������������������������������������������,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ rT������ r] ����������� r;°������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Bpÿý�H”°HØ �������f 0Ió��6!HqH”°�;�Ió��6"In8���ÿù��Ió��6#IùÈ����}�Ió��6$HUˆ����HØÀHÖ8HÖhHѨIó��5d����� HØ����������������HHÙ°Iô˜����������������Òø����H ��������������HÙÐHÙ�HÙp��������D����Iô˜����HÙˆ������at�����Iõ���������������������ts ��������������orH�HÙÐ����*()conHÙ˜Iõ����HÙèÒ¸������@EÀÿÿÿÿypointer_to_unary_function�HÙØ�����HÚ˜HÚ��������HÞ°������������������0�HͰ��������HÙPHäØ������������HÛH������„£u¸HÚ����HÚ8����HÚè�������������CT�HÚ8D����HÚ����HÚÀ������d1�HÚ8�HÝHÚ����HÚà ���DHÛ����HÙp������ø¢)X�������HÙÐ������������ �����Iõ€HÛ�HÍPH¯0HÜð�>�Ió��6Ú¥�P���HÛ0�������ÿÿÿÿ ����HÛ ����H����£BÈ����HÙp�������� ����H�����HÛ€����HÙÐ�������JavaClasses.jar����������������ZIP MWZP����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������JavaClasses.jar����������������ZIP MWZP�������� Merge Out������������������������������������������������������????APPL���DLGXckidProjWSPC������������������������������������������������������������������������������������������������²p����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������hdsk����n���ýP�����P������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���Y����������������������������� ���W����������������������������� ���Z��������������������������������[��������������������������������\��������������������������������]��������������������������������^��������������������������������_��������������������������������`��������������������������������a��������������������������������b��������������������������������c��������������������������������d��������������������������������e��������������������������������f��������������������������������g����������������������������������������������������������������j�����������������������������!���l�����������������������������#���u�����������������������������"���m���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAME Minimal Carbon Debugg�����LAMEshlb�����������������������������������������������������������������������������������������������������������������????���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���Y����������������������������� ���W����������������������������� ���Z��������������������������������[��������������������������������\��������������������������������]��������������������������������^��������������������������������_��������������������������������`��������������������������������a��������������������������������b��������������������������������c��������������������������������d��������������������������������e��������������������������������f��������������������������������g����������������������������������������������������������������j����������������������������� ���k�����������������������������#���u�����������������������������"���m���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� noname.exe����������������������@������������������������������������������������������������������� Merge Out������������������������������������������������������????APPL���DLGXckidProjWSPC��������� ��a.out����������������������������������������������������������????APPL��€XÀ������������������������������������������������������������������????������������������������������€������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ �����LAME Carbon Final Headerss���������������������������������������������������������������������� noname.exe����������������������@������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���Y����������������������������� ���W����������������������������� ���Z��������������������������������[��������������������������������\��������������������������������]��������������������������������^��������������������������������_��������������������������������`��������������������������������a��������������������������������b��������������������������������c��������������������������������d��������������������������������e��������������������������������f��������������������������������g����������������������������������������������������������������j�����������������������������"���m�����������������������������#���u�����������������������������"���m���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p������������������������������������������������������������������������������������http://java.sun.com/products/jdk/1.1/docs/api/�����������������������������������������������������������������������������������������(����•@��������������²p����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������main��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿBÑ`������Г¢ìÿÿ���ÿBÊ�MSIE�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start��������������������������������������������������������������������������������������������������������������������������� ������@����:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����::libmp3lame:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����::include:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����:MacOS Support:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����:MSL:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@��� ��MacOS PPC Linker��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Minimal DLL Classic Final�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MacOS PPC Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import PPC����������������������MPLF��������������������������������Lib Import PPC����������������������MWCD����������������������������������������������������������������`���RSRC��������������������������������Rez�����������������������������`���TEXT.arr����������������������������������������������������������������TEXT.bh�����������������������������Balloon Help������������������������TEXT.c������������������������������MW C/C++ PPC������������������������TEXT.c++����������������������������MW C/C++ PPC������������������������TEXT.cc�����������������������������MW C/C++ PPC������������������������TEXT.cp�����������������������������MW C/C++ PPC������������������������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ PPC�����������������������TEXT.pch����������������������������MW C/C++ PPC��������������������€���TEXT.pch++��������������������������MW C/C++ PPC��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.s������������������������������PPCAsm������������������������������XCOF��������������������������������XCOFF Import PPC��������������������docu����������������������������������������������������������������`���rsrc��������������������������������Rez�����������������������������`���shlb��������������������������������PEF Import PPC����������������������stub��������������������������������PEF Import PPC��������������������������.doc������������������������������������������������������������P�������.o������������������������������XCOFF Import PPC������������������������.ppob�����������������������������������������������������������`�������.rsrc���������������������������Rez�����������������������������`���None�����������������������������MMPr����������������������������������������������������������������@���Java Linker���������������������� RSRC�������������������������������������������������������������������TEXT.html��������������������������������������������������������������TEXT.java���������������������������MW Java�����������������������������TEXT.mf�����������������������������������������������������������������rsrc�����������������������������������������������������������������������.au�����������������������������JAR Importer��������������������@�������.class��������������������������MW Java���������������������������������.gif����������������������������JAR Importer��������������������@�������.jar����������������������������MW Java��������������������������������.zip����������������������������MW Java����������������������������MacOS 68K Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import 68K����������������������MPLF��������������������������������Lib Import 68K����������������������MWCD����������������������������������������������������������������`���OBJ ��������������������������������MPW Import 68K����������������������PLob����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ 68K������������������������TEXT.c++����������������������������MW C/C++ 68K������������������������TEXT.cc�����������������������������MW C/C++ 68K������������������������TEXT.cp�����������������������������MW C/C++ 68K������������������������TEXT.cpp����������������������������MW C/C++ 68K������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ 68K�����������������������TEXT.pch����������������������������MW C/C++ 68K��������������������€���TEXT.pch++��������������������������MW C/C++ 68K��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.seg����������������������������������������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������PEF Import 68K����������������������stub��������������������������������PEF Import 68K��������������������������.doc������������������������������������������������������������P�������.o������������������������������MPW Import 68K��������������������������.ppob�����������������������������������������������������������`�������.rsrc�����������������������������������������������������������`���MacOS Merge����������������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.r������������������������������Rez���������������������������������appe����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������������������������������������������Mach-O PPC Linker����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MLIB��������������������������������Lib Import Mach-O�������������������MMLB��������������������������������Lib Import Mach-O�������������������MPLF��������������������������������Lib Import Mach-O�������������������MWCD����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ MachPPC��������������������TEXT.c++����������������������������MW C/C++ MachPPC��������������������TEXT.cc�����������������������������MW C/C++ MachPPC��������������������TEXT.cp�����������������������������MW C/C++ MachPPC��������������������TEXT.cpp����������������������������MW C/C++ MachPPC��������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ MachPPC�������������������TEXT.pch����������������������������MW C/C++ MachPPC����������������€���TEXT.pch++��������������������������MW C/C++ MachPPC����������������€���TEXT.r������������������������������Rez���������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`�������.doc������������������������������������������������������������P���Win32 x86 Linker�����������������TEXT.c������������������������������MW C/C++ x86������������������������TEXT.c++����������������������������MW C/C++ x86������������������������TEXT.cc�����������������������������MW C/C++ x86������������������������TEXT.cp�����������������������������MW C/C++ x86������������������������TEXT.cpp����������������������������MW C/C++ x86������������������������TEXT.def����������������������������������������������������������������TEXT.h������������������������������MW C/C++ x86�����������������������TEXT.h++����������������������������MW C/C++ x86�����������������������TEXT.hpp����������������������������MW C/C++ x86�����������������������TEXT.ord����������������������������������������������������������������TEXT.pch����������������������������MW C/C++ x86��������������������€���TEXT.pch++��������������������������MW C/C++ x86��������������������€���TEXT.rc�����������������������������MW WinRC����������������������������iLIB��������������������������������Lib Import x86����������������������iOBJ��������������������������������Obj Import x86��������������������������.a������������������������������Lib Import x86��������������������������.doc������������������������������������������������������������P�������.lib����������������������������Lib Import x86��������������������������.o������������������������������Obj Import x86��������������������������.obj����������������������������Obj Import x86��������������������������.res����������������������������WinRes Import���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� noname.exe����������������������@��������������������������������������������������������������������������������������������������������������������������LAME (Encode-Only) (Carbon))������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������°�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������JavaClasses.jar����������������ZIP MWZP�������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������LAME Encoder Classic Debug�����LAMEshlb�����������������������������������������������������������������������������������������������������������������????�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Merge Out������������������������������������������������������????APPL���DLGXckidProjWSPC���������P��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'CODE' 'DATA' 'PICT'�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????�������������������(����|°��������������°��������������������LAME (Encode-Only) (Classic)���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAME Minimal Classic Final�����LAMEshlb�����������������������������������������������������������������������������������������������������������������????��������� noname.exe����������������������@�����������������������������������������������������������������������������������N¢LxKõàL9Ð�������f 0����[Pm¸Kõà£~0SD�>—Pm¸��N²¤ðB¼x�(�uPm¸��N³O‘ð¥Gpÿý�Pm¸��N´¥�P�����.�<Pm¸��Nµ£Óp³ 8ÿý�Pm¸��N¶¤@`�����(�Pm¸��NºKE¨N±¸�)�Pm¸��N»£ÒPBs€i�[Pm¸��N½NåÈTA ÿý�=Pm¸��NÀ¥ Ø£YÀ�.�Pm¸��NÁ¨`����ÿý��Pm¸��N¤@`N[p�(¾Pm¸��NÆ£Jà³ 8�)�\Pm¸��NǤœ �����)�Pm¸��NÈ?™˜�����;��Pm¸��NÉP%0³ @ÿùÐPm¸��NÊ>†°TA �}ØPm¸��NË£Ê P¦à� ;P����Kßø����������������T��� to ����������������������L;����:€��������Kßø����L;¨¥o(L;?°ÿÿÿÿŠ__gt�L;À�����o��������L;����������� �����KñˆL;è;p����D ����L<���� <X��������L;�������L<à �����KñˆL<(³ 8L<p ����L<@��� ��L<È¥�P����L<X�������������������L;��������L<° �����KñˆL<ˆ2ð8ÿÿÿÿ ����L< ��� <Ø����¥ Ø����L<¸��������{�O� ������@����:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����::libmp3lame:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����::include:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����:MacOS Support:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����:MSL:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� r€������ r‰ ����������� ryp��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��MacOS PPC Linker��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Minimal DLL Classic Debug�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������main����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tPickMeGy@G»��������f ðlFilterYDUPPGy@ewIOCompletionUPP�ÝDisposeNavEventUPP�ZATSUCountFontNames�GetSoundPreference��°NewDragReceiveHandlerUPP�PMConvertOldPrintRecord�aDisposeControlEditTextValidationUPP�]PBOpenForkSync�ïNewThemeIteratorUPP���NewSpeechChannel�ÓSRSetProperty�-SetPortDialogPort�˜InvokePMItemUPP�ÌDisposeTSMTEPostUpdateUPP� SetCursorComponent��SCMSetDefaultProfileByUse�ÀInvokeIconActionUPP�þNSLServiceIsInServiceList�µDisposeDebuggerDisposeThreadUPP��"PBWriteForkAsync��ZCMI���ateColorSyncFolder�gCMGetProfileByAVID�MPExtractTaskState�‡ATSUMatchFontsToText�’CreateTextToUnicodeInfo�jIdenticalText�ÓClearCurrentScrap�ATSUFontCount�yPMNewPrintSettings�uGetListUserHandle�4NSLStartServicesLookup��»InvokeOSLMarkUPP�áCMCoun���������MSIE��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������http://java.sun.com/products/jdk/1.1/docs/api/��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAME (Encode-Only) (Classic)��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'CODE' 'DATA' 'PICT'�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������BÀ������Г¢ì������������AD@������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.e�p����������������������������������������������������������������TEXT.h��������������LAME Minimal Carbon Final������LAMEshlb�����������������������������������������������������������������������������������������������������������������????��������������������������������� ������@����:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����::libmp3lame:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����::include:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����:MacOS Support:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����:MSL:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� r« ������ r´0����������� r¤€��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��MacOS PPC Linker��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Minimal DLL Carbon Debug�g����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MacOS PPC Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import PPC����������������������MPLF��������������������������������Lib Import PPC����������������������MWCD����������������������������������������������������������������`���RSRC��������������������������������Rez�����������������������������`���TEXT.arr����������������������������������������������������������������TEXT.bh�����������������������������Balloon Help������������������������TEXT.c������������������������������MW C/C++ PPC������������������������TEXT.c++����������������������������MW C/C++ PPC������������������������TEXT.cc�����������������������������MW C/C++ PPC������������������������TEXT.cp�����������������������������MW C/C++ PPC������������������������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ PPC�����������������������TEXT.pch����������������������������MW C/C++ PPC��������������������€���TEXT.pch++��������������������������MW C/C++ PPC��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.s������������������������������PPCAsm������������������������������XCOF��������������������������������XCOFF Import PPC��������������������docu����������������������������������������������������������������`���rsrc��������������������������������Rez�����������������������������`���shlb��������������������������������PEF Import PPC����������������������stub��������������������������������PEF Import PPC��������������������������.doc������������������������������������������������������������P�������.o������������������������������XCOFF Import PPC������������������������.ppob�����������������������������������������������������������`�������.rsrc���������������������������Rez�����������������������������`���None�����������������������������MMPr����������������������������������������������������������������@���Java Linker���������������������� RSRC�������������������������������������������������������������������TEXT.html��������������������������������������������������������������TEXT.java���������������������������MW Java�����������������������������TEXT.mf�����������������������������������������������������������������rsrc�����������������������������������������������������������������������.au�����������������������������JAR Importer��������������������@�������.class��������������������������MW Java���������������������������������.gif����������������������������JAR Importer��������������������@�������.jar����������������������������MW Java��������������������������������.zip����������������������������MW Java����������������������������MacOS 68K Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import 68K����������������������MPLF��������������������������������Lib Import 68K����������������������MWCD����������������������������������������������������������������`���OBJ ��������������������������������MPW Import 68K����������������������PLob����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ 68K������������������������TEXT.c++����������������������������MW C/C++ 68K������������������������TEXT.cc�����������������������������MW C/C++ 68K������������������������TEXT.cp�����������������������������MW C/C++ 68K������������������������TEXT.cpp����������������������������MW C/C++ 68K������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ 68K�����������������������TEXT.pch����������������������������MW C/C++ 68K��������������������€���TEXT.pch++��������������������������MW C/C++ 68K��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.seg����������������������������������������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������PEF Import 68K����������������������stub��������������������������������PEF Import 68K��������������������������.doc������������������������������������������������������������P�������.o������������������������������MPW Import 68K��������������������������.ppob�����������������������������������������������������������`�������.rsrc�����������������������������������������������������������`���MacOS Merge����������������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.r������������������������������Rez���������������������������������appe����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������������������������������������������Mach-O PPC Linker����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MLIB��������������������������������Lib Import Mach-O�������������������MMLB��������������������������������Lib Import Mach-O�������������������MPLF��������������������������������Lib Import Mach-O�������������������MWCD����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ MachPPC��������������������TEXT.c++����������������������������MW C/C++ MachPPC��������������������TEXT.cc�����������������������������MW C/C++ MachPPC��������������������TEXT.cp�����������������������������MW C/C++ MachPPC��������������������TEXT.cpp����������������������������MW C/C++ MachPPC��������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ MachPPC�������������������TEXT.pch����������������������������MW C/C++ MachPPC����������������€���TEXT.pch++��������������������������MW C/C++ MachPPC����������������€���TEXT.r������������������������������Rez���������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`�������.doc������������������������������������������������������������P���Win32 x86 Linker�����������������TEXT.c������������������������������MW C/C++ x86������������������������TEXT.c++����������������������������MW C/C++ x86������������������������TEXT.cc�����������������������������MW C/C++ x86������������������������TEXT.cp�����������������������������MW C/C++ x86������������������������TEXT.cpp����������������������������MW C/C++ x86������������������������TEXT.def����������������������������������������������������������������TEXT.h������������������������������MW C/C++ x86�����������������������TEXT.h++����������������������������MW C/C++ x86�����������������������TEXT.hpp����������������������������MW C/C++ x86�����������������������TEXT.ord����������������������������������������������������������������TEXT.pch����������������������������MW C/C++ x86��������������������€���TEXT.pch++��������������������������MW C/C++ x86��������������������€���TEXT.rc�����������������������������MW WinRC����������������������������iLIB��������������������������������Lib Import x86����������������������iOBJ��������������������������������Obj Import x86��������������������������.a������������������������������Lib Import x86��������������������������.doc������������������������������������������������������������P�������.lib����������������������������Lib Import x86��������������������������.o������������������������������Obj Import x86��������������������������.obj����������������������������Obj Import x86��������������������������.res����������������������������WinRes Import��������������������������������MSIE��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������http://java.sun.com/products/jdk/1.1/docs/api/���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????APPLp��qp������Œ ngs�Basic Topª°x PPC:PPC CodeGen�Basic Toolbox PPC:PPC Disassembler�Basic Toolbox PPC:PPC Linker�Basic Toolbox PPC:PPC PEF�Basic Toolbox PPC:PPC Project�Basic Toolbox PPC:PPCAsm Panel�Basic Toolbox PPC:Rez Compiler�Basic Toolbox PPC:WinRC �ompiler�Basic Toolbox PPC:x86 CodeGen�Basic Toolbox PPC:x86 Linker�Basic Toolbox PPC:x86 Project�Basic Toolbox FAT:Custom Keywords�Basic Toolbox FAT:Access Paths�Basic Toolbox FAT:Target Settings�Basic Toolbox FAT:File Mappings�Basic Toolbox FAT:Build Extras�Basic Toolbox FAT:68K CodeGen�Basic Toolbox FAT:68K Disassembler�Basic Toolbox FAT:68K Linker�Basic Toolbox FAT:68K Project�Basic Toolbox FAT:C/C++ Compiler�Basic Toolbox FAT:C/C++ Warnings�Basic Toolbox FAT:CFM68K�Basic Toolbox FAT:IR Optimizer�Basic To��ox FAT:Java Output�Basic Toolbox FAT:Java Project�Basic Toolbox FAT:Java VM�Basic Toolbox FAT:MacOS Merge Panel�Basic Toolbox FAT:Pascal Compiler�Basic Toolbox FAT:Pascal Warnings�Basic Toolbox FAT:PPC CodeGen�Basic Toolbox FAT:PPC Disassembler�Basic Tool�ox FAT:PPC Linker�Basic Toolbox FAT:PPC PEF�Basic Toolbox FAT:PPC Project�Basic Toolbox FAT:PPCAsm Panel�Basic Toolbox FAT:Rez Compiler�Basic Toolbox FAT:WinRC Compiler�Basic Toolbox FAT:x86 CodeGen�Basic Toolbox FAT:x86 Linker�Basic Toolbox FAT:x86 Project�Basic Toolbox DEBUG 68k:Custom Keywords�Basic Toolbox DEBUG 68k:Access Paths�Basic Toolbox DEBUG 68k:Target Settings�Basic Toolbox DEBUG 68k:File Mappings�Basic Toolbox DEBUG 68k:Build Extras�Basic Toolbox DEBUG 68k:68K CodeGen�Basic Toolbox DEBUG 68k:6����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������rge Out������������������������������������������������������????APPL���DLGXckidProjWSPC���DLGXckidProjWSPC���������������/������0� �����1������2� �����3������4������5������6������7� �����8������9������:������;������<������=������>������?������@������A������B������ noname.exe����������������������@������������������������������������������������������������������������������(��ÿ����MSIE��������������P��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'CODE' 'DATA' 'PICT'�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������main�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(����BÅð��������������ÃÐ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� rÕà������ rÞð����������� rÏ@������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ô%°9ßdˆP(ð8‘Å����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������v���������������t¸{#*ÿÿ£@���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������y���������������z¸{$%ÿÿôu���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������w���������������x¸{#3��>����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{���������������|¸{$&ÿÿ¤Ì������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������@����:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����::libmp3lame:������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����::include:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ�����:MacOS Support:����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@����:MSL:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿ@��� ��MacOS PPC Linker��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Minimal DLL Carbon Final�l����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������:���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MacOS PPC Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import PPC����������������������MPLF��������������������������������Lib Import PPC����������������������MWCD����������������������������������������������������������������`���RSRC��������������������������������Rez�����������������������������`���TEXT.arr����������������������������������������������������������������TEXT.bh�����������������������������Balloon Help������������������������TEXT.c������������������������������MW C/C++ PPC������������������������TEXT.c++����������������������������MW C/C++ PPC������������������������TEXT.cc�����������������������������MW C/C++ PPC������������������������TEXT.cp�����������������������������MW C/C++ PPC������������������������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ PPC�����������������������TEXT.pch����������������������������MW C/C++ PPC��������������������€���TEXT.pch++��������������������������MW C/C++ PPC��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.s������������������������������PPCAsm������������������������������XCOF��������������������������������XCOFF Import PPC��������������������docu����������������������������������������������������������������`���rsrc��������������������������������Rez�����������������������������`���shlb��������������������������������PEF Import PPC����������������������stub��������������������������������PEF Import PPC��������������������������.doc������������������������������������������������������������P�������.o������������������������������XCOFF Import PPC������������������������.ppob�����������������������������������������������������������`�������.rsrc���������������������������Rez�����������������������������`���None�����������������������������MMPr����������������������������������������������������������������@���Java Linker���������������������� RSRC�������������������������������������������������������������������TEXT.html��������������������������������������������������������������TEXT.java���������������������������MW Java�����������������������������TEXT.mf�����������������������������������������������������������������rsrc�����������������������������������������������������������������������.au�����������������������������JAR Importer��������������������@�������.class��������������������������MW Java���������������������������������.gif����������������������������JAR Importer��������������������@�������.jar����������������������������MW Java��������������������������������.zip����������������������������MW Java����������������������������MacOS 68K Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import 68K����������������������MPLF��������������������������������Lib Import 68K����������������������MWCD����������������������������������������������������������������`���OBJ ��������������������������������MPW Import 68K����������������������PLob����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ 68K������������������������TEXT.c++����������������������������MW C/C++ 68K������������������������TEXT.cc�����������������������������MW C/C++ 68K������������������������TEXT.cp�����������������������������MW C/C++ 68K������������������������TEXT.cpp����������������������������MW C/C++ 68K������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ 68K�����������������������TEXT.pch����������������������������MW C/C++ 68K��������������������€���TEXT.pch++��������������������������MW C/C++ 68K��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.seg����������������������������������������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������PEF Import 68K����������������������stub��������������������������������PEF Import 68K��������������������������.doc������������������������������������������������������������P�������.o������������������������������MPW Import 68K��������������������������.ppob�����������������������������������������������������������`�������.rsrc�����������������������������������������������������������`���MacOS Merge����������������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.r������������������������������Rez���������������������������������appe����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������������������������������������������Mach-O PPC Linker����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MLIB��������������������������������Lib Import Mach-O�������������������MMLB��������������������������������Lib Import Mach-O�������������������MPLF��������������������������������Lib Import Mach-O�������������������MWCD����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ MachPPC��������������������TEXT.c++����������������������������MW C/C++ MachPPC��������������������TEXT.cc�����������������������������MW C/C++ MachPPC��������������������TEXT.cp�����������������������������MW C/C++ MachPPC��������������������TEXT.cpp����������������������������MW C/C++ MachPPC��������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ MachPPC�������������������TEXT.pch����������������������������MW C/C++ MachPPC����������������€���TEXT.pch++��������������������������MW C/C++ MachPPC����������������€���TEXT.r������������������������������Rez���������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`�������.doc������������������������������������������������������������P���Win32 x86 Linker�����������������TEXT.c������������������������������MW C/C++ x86������������������������TEXT.c++����������������������������MW C/C++ x86������������������������TEXT.cc�����������������������������MW C/C++ x86������������������������TEXT.cp�����������������������������MW C/C++ x86������������������������TEXT.cpp����������������������������MW C/C++ x86������������������������TEXT.def����������������������������������������������������������������TEXT.h������������������������������MW C/C++ x86�����������������������TEXT.h++����������������������������MW C/C++ x86�����������������������TEXT.hpp����������������������������MW C/C++ x86�����������������������TEXT.ord����������������������������������������������������������������TEXT.pch����������������������������MW C/C++ x86��������������������€���TEXT.pch++��������������������������MW C/C++ x86��������������������€���TEXT.rc�����������������������������MW WinRC����������������������������iLIB��������������������������������Lib Import x86����������������������iOBJ��������������������������������Obj Import x86��������������������������.a������������������������������Lib Import x86��������������������������.doc������������������������������������������������������������P�������.lib����������������������������Lib Import x86��������������������������.o������������������������������Obj Import x86��������������������������.obj����������������������������Obj Import x86��������������������������.res����������������������������WinRes Import���������������������������late <>MÀMY°�������f 0char>::int_tMÀchar_traits<char>::to_int_type(const char_type& c) { return int_type((unsigned char)c); } template <> inline bool char_traits<char>::eq_int_type(const int_type& c1, const int_type& c2) { return static_cast<boo�>(c1 == c2); } template <> inline char_traits<char>::int_type char_traits<char>::eof() { return EOF; } #ifndef _MSL_NO_WCHART // char_traits<wchar_t> template <> struct char_traits<wchar_t> { typedef wchar_t char_type; typedef wint_t ���int_type; typedef streamoff off_type; typedef wstreampos pos_type; typedef mbstate_t state_type; static void assign(char_type& c1, const char_type& c2); static bool eq(const char_type& c1, const char_type& c2); static bool lt(const ch�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MRJApplication������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARZ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MSIE��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������http://java.sun.com/products/jdk/1.1/docs/api/��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAME (Encode-Only) (Carbon)���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'CODE' 'DATA' 'PICT'������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????�������MRJApplication�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAMELib�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????APPLt��ucÐ������µà������������tÿ����������������`���shlb��������������������������������������������������������������������MacOS PPC Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import PPC����������������������MPLF��������������������������������Lib Import PPC����������������������MWCD����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.arr����������������������������������������������������������������TEXT.c������������������������������MW C/C++ PPC������������������������TEXT.c++������������������������������C/C++ PPC������������������������TEXT.cc�����������������������������MW C/C++ PPC������������������������TEXT.cp�����������������������������MW C/C++ PPC������������������������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.e�p����������������������������������������������������������������TEXT.h������������������������������MW C/C++ PPC�����������������������TEXT.pch����������������������������MW C/C++ PPC��������������������€���TEXT.pch++��������������������������MW C/C++ PPC��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.s������������������������������PPCAsm������������������������������XCOF��������������������������������XCOFF Import PPC��������������������docu���������������� ������ ¸{& ÿÿäÔ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MSIE��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������http://java.sun.com/products/jdk/1.1/docs/api/��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������start���������������������������������������������������������������������������������������������������������������������������������������������������������������__start����������������������������������������������������������������������������������������������������������������������������LAME Carbon Final��������������LAMEshlb�����������������������������������������������������������������������������������������������������������������????����������������������������������������������������������������������������������������������������������������m���€��������m�SIntRemove�iuco�����������������������ojWSPC��������������������������������MacOS PPC Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import PPC����������������������MPLF��������������������������������Lib Import PPC����������������������MWCD����������������������������������������������������������������`���RSRC��������������������������������Rez�����������������������������`���TEXT.arr����������������������������������������������������������������TEXT.bh�����������������������������Balloon Help������������������������TEXT.c������������������������������MW C/C++ PPC������������������������TEXT.c++����������������������������MW C/C++ PPC������������������������TEXT.cc�����������������������������MW C/C++ PPC������������������������TEXT.cp�����������������������������MW C/C++ PPC������������������������TEXT.cpp����������������������������MW C/C++ PPC������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ PPC�����������������������TEXT.pch����������������������������MW C/C++ PPC��������������������€���TEXT.pch++��������������������������MW C/C++ PPC��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.s������������������������������PPCAsm������������������������������XCOF��������������������������������XCOFF Import PPC��������������������docu����������������������������������������������������������������`���rsrc��������������������������������Rez�����������������������������`���shlb��������������������������������PEF Import PPC����������������������stub��������������������������������PEF Import PPC��������������������������.doc������������������������������������������������������������P�������.o������������������������������XCOFF Import PPC������������������������.ppob�����������������������������������������������������������`�������.rsrc���������������������������Rez�����������������������������`���None�����������������������������MMPr����������������������������������������������������������������@���Java Linker���������������������� RSRC�������������������������������������������������������������������TEXT.html��������������������������������������������������������������TEXT.java���������������������������MW Java�����������������������������TEXT.mf�����������������������������������������������������������������rsrc�����������������������������������������������������������������������.au�����������������������������JAR Importer��������������������@�������.class��������������������������MW Java���������������������������������.gif����������������������������JAR Importer��������������������@�������.jar����������������������������MW Java��������������������������������.zip����������������������������MW Java����������������������������MacOS 68K Linker�����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MMLB��������������������������������Lib Import 68K����������������������MPLF��������������������������������Lib Import 68K����������������������MWCD����������������������������������������������������������������`���OBJ ��������������������������������MPW Import 68K����������������������PLob����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ 68K������������������������TEXT.c++����������������������������MW C/C++ 68K������������������������TEXT.cc�����������������������������MW C/C++ 68K������������������������TEXT.cp�����������������������������MW C/C++ 68K������������������������TEXT.cpp����������������������������MW C/C++ 68K������������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ 68K�����������������������TEXT.pch����������������������������MW C/C++ 68K��������������������€���TEXT.pch++��������������������������MW C/C++ 68K��������������������€���TEXT.r������������������������������Rez���������������������������������TEXT.seg����������������������������������������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������PEF Import 68K����������������������stub��������������������������������PEF Import 68K��������������������������.doc������������������������������������������������������������P�������.o������������������������������MPW Import 68K��������������������������.ppob�����������������������������������������������������������`�������.rsrc�����������������������������������������������������������`���MacOS Merge����������������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.r������������������������������Rez���������������������������������appe����������������������������������������������������������������`���rsrc����������������������������������������������������������������`���shlb��������������������������������������������������������������������Mach-O PPC Linker����������������APPL����������������������������������������������������������������`���Appl����������������������������������������������������������������`���MLIB��������������������������������Lib Import Mach-O�������������������MMLB��������������������������������Lib Import Mach-O�������������������MPLF��������������������������������Lib Import Mach-O�������������������MWCD����������������������������������������������������������������`���RSRC����������������������������������������������������������������`���TEXT.c������������������������������MW C/C++ MachPPC��������������������TEXT.c++����������������������������MW C/C++ MachPPC��������������������TEXT.cc�����������������������������MW C/C++ MachPPC��������������������TEXT.cp�����������������������������MW C/C++ MachPPC��������������������TEXT.cpp����������������������������MW C/C++ MachPPC��������������������TEXT.exp����������������������������������������������������������������TEXT.h������������������������������MW C/C++ MachPPC�������������������TEXT.pch����������������������������MW C/C++ MachPPC����������������€���TEXT.pch++��������������������������MW C/C++ MachPPC����������������€���TEXT.r������������������������������Rez���������������������������������docu����������������������������������������������������������������`���rsrc����������������������������������������������������������������`�������.doc������������������������������������������������������������P���Win32 x86 Linker�����������������TEXT.c������������������������������MW C/C++ x86������������������������TEXT.c++����������������������������MW C/C++ x86������������������������TEXT.cc�����������������������������MW C/C++ x86������������������������TEXT.cp�����������������������������MW C/C++ x86������������������������TEXT.cpp����������������������������MW C/C++ x86������������������������TEXT.def����������������������������������������������������������������TEXT.h������������������������������MW C/C++ x86�����������������������TEXT.h++����������������������������MW C/C++ x86�����������������������TEXT.hpp����������������������������MW C/C++ x86�����������������������TEXT.ord����������������������������������������������������������������TEXT.pch����������������������������MW C/C++ x86��������������������€���TEXT.pch++��������������������������MW C/C++ x86��������������������€���TEXT.rc�����������������������������MW WinRC����������������������������iLIB��������������������������������Lib Import x86����������������������iOBJ��������������������������������Obj Import x86��������������������������.a������������������������������Lib Import x86��������������������������.doc������������������������������������������������������������P�������.lib����������������������������Lib Import x86��������������������������.o������������������������������Obj Import x86��������������������������.obj����������������������������Obj Import x86��������������������������.res����������������������������WinRes Import������������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARZ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@���������������������������������������������������������������������������������������������������������������start��������������������������������������������������������������a.out����������������������������������������������������������????MBND���@�������������������������������������������������������������������������������������MRJApplication�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Pict�r�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Warr�o����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????APPLo��oÿ������ œ@�����������o�oÿP������Pp�@500Size (k)�oÿ0oÿЫ�����0�+âì�A… �A…n�A™à�A‚Ö��������A™î�A™àoÿ0�����`p� I�������gsoÿ0p� �����@p�� �����ͨinoÿ0p�@������ÐpP�“m�  �“mp�@� n�­n� � ������ÿ��A¢Î�Aº‚�������† E�ÿÿþ�P�¤P¼¼�ÿ������� Pµ0������������������������p�`������PpP500PEdTobjd�p�@p�à«�����0�+íŒ�A… �A…n�A™à�A‚Ö��������A™î�A™àp�@�����Pp  ������ÿÿp�@p0�����0p � �����ͨofp�@pP������Ðp`�°m�½ �°mpP�½n�Ên� � ����������A¢Î�Aº‚������������ÿþ�P¿¼P·„��������� Pµ0������������������������pp������Pp`64öð�����ppPpð«�����0�+èT�A… �A…n�A™à�A‚Ö��������A™î�A™àpP������@p@ Ñ������PpPp@������ p@ y������0pPoþ �����Àp€ y�����@oþ p€����� p€ ������¡oþ p �����€p€ y��R�� Roþ pÀ������p€ y�RPPob��oþ pà�����àp€ y�‚TMPL��oÿ0p������Àp€ y�²cfrg��p�@p ����� p€ y��©���pPp@������€p€�,�� V_�p`ÿ7�§_ÿB� �‰ÿV� �‰ÿÿpPp`�����@p€� ���������pPp ����� p€� ����`dÿpPpÀ������p€� ���������pPpà������àp€� ���������pPp�������Àp€� ���������pPp ������ p€� ���������pPp@������€p€� ���������pPp`������`p€� �����ͨ�pPp€������@p@� �7�a�K�u�bpPp «�� ��� �+ðœ� �7�a�K�u�`pPpÀ«�����`�+ðˆ����������������P¶ôP¶(P»(����������������������������������������������������b «����� �+æà09����9p¨ÿÿÿÿ��b@«����� �!¸äÙÚ�0� ”\Ðp`������p Ð}¸ %Î zboüÐ }Þ oV p2 ~º xÐ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MRJApplication������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARZ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������????APPLs��tS�������«������������sî@���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿþ��tЫ���� �+åÐ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������tЫ�� ��à�+ß´�MRJApplication��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MacOS Toolbox PPC Debug:Remote Debug�MacOS Toolbox PPC Debug:Auto-target�MacOS Toolbox PPC Debug:Packager Panel�MacOS Toolbox PPC Debug:Source Trees�MacOS Toolbox PPC Debug:Access Paths�MacOS Toolbox PPC Debug:Debugger Runtime�MacOS Toolbox PPC Debug:Target Settings�MacOS Toolbox PPC Debug:File Mappings�MacOS Toolbox PPC Debug:Build Extras�MacOS Toolbox PPC Debug:Debugger Target�MacOS Toolbox PPC Debug:Custom Keywords�MacOS Toolbox PPC Debug:68K CodeGen�MacOS Toolbox PPC Debug:68K Disassembler�MacOS Toolbox PPC Debug:68K Global Optimizer�MacOS Toolbox PPC Debug:68K Linker�MacOS Toolbox PPC Debug:68K Project�MacOS Toolbox PPC Debug:C/C++ Compiler�MacOS Toolbox PPC Debug:C/C++ Warnings�MacOS Toolbox PPC Debug:CFM68K�MacOS Toolbox PPC Debug:FTP Panel�MacOS Toolbox PPC Debug:Java Command Line�MacOS Toolbox PPC Debug:Java Language�MacOS Toolbox PPC Debug:Java MRJAppBuilder�MacOS Toolbox PPC Debug:Java Output�MacOS Toolbox PPC Debug:Java Project�MacOS Toolbox PPC Debug:JavaDoc Project�MacOS Toolbox PPC Debug:MacOS Merge Panel�MacOS Toolbox PPC Debug:Output Flags�MacOS Toolbox PPC Debug:PPC CodeGen�MacOS Toolbox PPC Debug:PPC Disassembler�MacOS Toolbox PPC Debug:PPC Global Optimizer�MacOS Toolbox PPC Debug:PPC Linker�MacOS Toolbox PPC Debug:PPC PEF�MacOS Toolbox PPC Debug:PPC Project�MacOS Toolbox PPC Debug:PPCAsm Panel�MacOS Toolbox PPC Debug:Rez Compiler�MacOS Toolbox PPC Final:Remote Debug�MacOS Toolbox PPC Final:Auto-target�MacOS Toolbox PPC Final:Packager Panel�MacOS Toolbox PPC Final:Source Trees�MacOS Toolbox PPC Final:Access Paths�MacOS Toolbox PPC Final:Debugger Runtime�MacOS Toolbox PPC Final:Target Settings�MacOS Toolbox PPC Final:File Mappings�MacOS Toolbox PPC Final:Build Extras�MacOS Toolbox PPC Final:Debugger Target�MacOS Toolbox PPC Final:Custom Keywords�MacOS Toolbox PPC Final:68K CodeGen�MacOS Toolbox PPC Final:68K Disassembler�MacOS Toolbox PPC Final:68K Global Optimizer�MacOS Toolbox PPC Final:68K Linker�MacOS Toolbox PPC Final:68K Project�MacOS Toolbox PPC Final:C/C++ Compiler�MacOS Toolbox PPC Final:C/C++ Warnings�MacOS Toolbox PPC Final:CFM68K�MacOS Toolbox PPC Final:FTP Panel�MacOS Toolbox PPC Final:Java Command Line�MacOS Toolbox PPC Final:Java Language�MacOS Toolbox PPC Final:Java MRJAppBuilder�MacOS Toolbox PPC Final:Java Output�MacOS Toolbox PPC Final:Java Project�MacOS Toolbox PPC Final:JavaDoc Project�MacOS Toolbox PPC Final:MacOS Merge Panel�MacOS Toolbox PPC Final:Output Flags�MacOS Toolbox PPC Final:PPC CodeGen�MacOS Toolbox PPC Final:PPC Disassembler�MacOS Toolbox PPC Final:PPC Global Optimizer�MacOS Toolbox PPC Final:PPC Linker�MacOS Toolbox PPC Final:PPC PEF�MacOS Toolbox PPC Final:PPC Project�MacOS Toolbox PPC Final:PPCAsm Panel�MacOS Toolbox PPC Final:Rez Compiler�MacOS Toolbox 68K Debug:Remote Debug�MacOS Toolbox 68K Debug:Auto-target�MacOS Toolbox 68K Debug:Packager Panel�MacOS Toolbox 68K Debug:Source Trees�MacOS Toolbox 68K Debug:Access Paths�MacOS Toolbox 68K Debug:Debugger Runtime�MacOS Toolbox 68K Debug:Target Settings�MacOS Toolbox 68K Debug:File Mappings�MacOS Toolbox 68K Debug:Build Extras�MacOS Toolbox 68K Debug:Debugger Target�MacOS Toolbox 68K Debug:Custom Keywords�MacOS Toolbox 68K Debug:68K CodeGen�MacOS Toolbox 68K Debug:68K Disassembler�MacOS Toolbox 68K Debug:68K Global Optimizer�MacOS Toolbox 68K Debug:68K Linker�MacOS Toolbox 68K Debug:68K Project�MacOS Toolbox 68K Debug:C/C++ Compiler�MacOS Toolbox 68K Debug:C/C++ Warnings�MacOS Toolbox 68K Debug:CFM68K�MacOS Toolbox 68K Debug:FTP Panel�MacOS Toolbox 68K Debug:Java Command Line�MacOS Toolbox 68K Debug:Java Language�MacOS Toolbox 68K Debug:Java MRJAppBuilder�MacOS Toolbox 68K Debug:Java Output�MacOS Toolbox 68K Debug:Java Project�MacOS Toolbox 68K Debug:JavaDoc Project�MacOS Toolbox 68K Debug:MacOS Merge Panel�MacOS Toolbox 68K Debug:Output Flags�MacOS Toolbox 68K Debug:PPC CodeGen�MacOS Toolbox 68K Debug:PPC Disassembler�MacOS Toolbox 68K Debug:PPC Global Optimizer�MacOS Toolbox 68K Debug:PPC Linker�MacOS Toolbox 68K Debug:PPC PEF�MacOS Toolbox 68K Debug:PPC Project�MacOS Toolbox 68K Debug:PPCAsm Panel�MacOS Toolbox 68K Debug:Rez Compiler�MacOS Toolbox 68K Final:Remote Debug�MacOS Toolbox 68K Final:Auto-target�MacOS Toolbox 68K Final:Packager Panel�MacOS Toolbox 68K Final:Source Trees�MacOS Toolbox 68K Final:Access Paths�MacOS Toolbox 68K Final:Debugger Runtime�MacOS Toolbox 68K Final:Target Settings�MacOS Toolbox 68K Final:File Mappings�MacOS Toolbox 68K Final:Build Extras�MacOS Toolbox 68K Final:Debugger Target�MacOS Toolbox 68K Final:Custom Keywords�MacOS Toolbox 68K Final:68K CodeGen�MacOS Toolbox 68K Final:68K Disassembler�MacOS Toolbox 68K Final:68K Global Optimizer�MacOS Toolbox 68K Final:68K Linker�MacOS Toolbox 68K Final:68K Project�MacOS Toolbox 68K Final:C/C++ Compiler�MacOS Toolbox 68K Final:C/C++ Warnings�MacOS Toolbox 68K Final:CFM68K�MacOS Toolbox 68K Final:FTP Panel�MacOS Toolbox 68K Final:Java Command Line�MacOS Toolbox 68K Final:Java Language�MacOS Toolbox 68K Final:Java MRJAppBuilder�MacOS Toolbox 68K Final:Java Output�MacOS Toolbox 68K Final:Java Project�MacOS Toolbox 68K Final:JavaDoc Project�MacOS Toolbox 68K Final:MacOS Merge Panel�MacOS Toolbox 68K Final:Output Flags�MacOS Toolbox 68K Final:PPC CodeGen�MacOS Toolbox 68K Final:PPC Disassembler�MacOS Toolbox 68K Final:PPC Global Optimizer�MacOS Toolbox 68K Final:PPC Linker�MacOS Toolbox 68K Final:PPC PEF�MacOS Toolbox 68K Final:PPC Project�MacOS Toolbox 68K Final:PPCAsm Panel�MacOS Toolbox 68K Final:Rez Compiler�MacOS Toolbox Carbon Debug:Remote Debug�MacOS Toolbox Carbon Debug:Auto-target�MacOS Toolbox Carbon Debug:Packager Panel�MacOS Toolbox Carbon Debug:Source Trees�MacOS Toolbox Carbon Debug:Access Paths�MacOS Toolbox Carbon Debug:Debugger Runtime�MacOS Toolbox Carbon Debug:Target Settings�MacOS Toolbox Carbon Debug:File Mappings�MacOS Toolbox Carbon Debug:Build Extras�MacOS Toolbox Carbon Debug:Debugger Target�MacOS Toolbox Carbon Debug:Custom Keywords�MacOS Toolbox Carbon Debug:68K CodeGen�MacOS Toolbox Carbon Debug:68K Disassembler�MacOS Toolbox Carbon Debug:68K Global Optimizer�MacOS Toolbox Carbon Debug:68K Linker�MacOS Toolbox Carbon Debug:68K Project�MacOS Toolbox Carbon Debug:C/C++ Compiler�MacOS Toolbox Carbon Debug:C/C++ Warnings�MacOS Toolbox Carbon Debug:CFM68K�MacOS Toolbox Carbon Debug:FTP Panel�MacOS Toolbox Carbon Debug:Java Command Line�MacOS Toolbox Carbon Debug:Java Language�MacOS Toolbox Carbon Debug:Java MRJAppBuilder�MacOS Toolbox Carbon Debug:Java Output�MacOS Toolbox Carbon Debug:Java Project�MacOS Toolbox Carbon Debug:JavaDoc Project�MacOS Toolbox Carbon Debug:MacOS Merge Panel�MacOS Toolbox Carbon Debug:Output Flags�MacOS Toolbox Carbon Debug:PPC CodeGen�MacOS Toolbox Carbon Debug:PPC Disassembler�MacOS Toolbox Carbon Debug:PPC Global Optimizer�MacOS Toolbox Carbon Debug:PPC Linker�MacOS Toolbox Carbon Debug:PPC PEF�MacOS Toolbox Carbon Debug:PPC Project�MacOS Toolbox Carbon Debug:PPCAsm Panel�MacOS Toolbox Carbon Debug:Rez Compiler�MacOS Toolbox Carbon Final:Remote Debug�MacOS Toolbox Carbon Final:Auto-target�MacOS Toolbox Carbon Final:Packager Panel�MacOS Toolbox Carbon Final:Source Trees�MacOS Toolbox Carbon Final:Access Paths�MacOS Toolbox Carbon Final:Debugger Runtime�MacOS Toolbox Carbon Final:Target Settings�MacOS Toolbox Carbon Final:File Mappings�MacOS Toolbox Carbon Final:Build Extras�MacOS Toolbox Carbon Final:Debugger Target�MacOS Toolbox Carbon Final:Custom Keywords�MacOS Toolbox Carbon Final:68K CodeGen�MacOS Toolbox Carbon Final:68K Disassembler�MacOS Toolbox Carbon Final:68K Global Optimizer�MacOS Toolbox Carbon Final:68K Linker�MacOS Toolbox Carbon Final:68K Project�MacOS Toolbox Carbon Final:C/C++ Compiler�MacOS Toolbox Carbon Final:C/C++ Warnings�MacOS Toolbox Carbon Final:CFM68K�MacOS Toolbox Carbon Final:FTP Panel�MacOS Toolbox Carbon Final:Java Command Line�MacOS Toolbox Carbon Final:Java Language�MacOS Toolbox Carbon Final:Java MRJAppBuilder�MacOS Toolbox Carbon Final:Java Output�MacOS Toolbox Carbon Final:Java Project�MacOS Toolbox Carbon Final:JavaDoc Project�MacOS Toolbox Carbon Final:MacOS Merge Panel�MacOS Toolbox Carbon Final:Output Flags�MacOS Toolbox Carbon Final:PPC CodeGen�MacOS Toolbox Carbon Final:PPC Disassembler�MacOS Toolbox Carbon Final:PPC Global Optimizer�MacOS Toolbox Carbon Final:PPC Linker�MacOS Toolbox Carbon Final:PPC PEF�MacOS Toolbox Carbon Final:PPC Project�MacOS Toolbox Carbon Final:PPCAsm Panel�MacOS Toolbox Carbon Final:Rez Compiler�MacOS Toolbox FAT:Remote Debug�MacOS Toolbox FAT:Auto-target�MacOS Toolbox FAT:Packager Panel�MacOS Toolbox FAT:Source Trees�MacOS Toolbox FAT:Access Paths�MacOS Toolbox FAT:Debugger Runtime�MacOS Toolbox FAT:Target Settings�MacOS Toolbox FAT:File Mappings�MacOS Toolbox FAT:Build Extras�MacOS Toolbox FAT:Debugger Target�MacOS Toolbox FAT:Custom Keywords�MacOS Toolbox FAT:68K CodeGen�MacOS Toolbox FAT:68K Disassembler�MacOS Toolbox FAT:68K Global Optimizer�MacOS Toolbox FAT:68K Linker�MacOS Toolbox FAT:68K Project�MacOS Toolbox FAT:C/C++ Compiler�MacOS Toolbox FAT:C/C++ Warnings�MacOS Toolbox FAT:CFM68K�MacOS Toolbox FAT:FTP Panel�MacOS Toolbox FAT:Java Command Line�MacOS Toolbox FAT:Java Language�MacOS Toolbox FAT:Java MRJAppBuilder�MacOS Toolbox FAT:Java Output�MacOS Toolbox FAT:Java Project�MacOS Toolbox FAT:JavaDoc Project�MacOS Toolbox FAT:MacOS Merge Panel�MacOS Toolbox FAT:Output Flags�MacOS Toolbox FAT:PPC CodeGen�MacOS Toolbox FAT:PPC Disassembler�MacOS Toolbox FAT:PPC Global Optimizer�MacOS Toolbox FAT:PPC Linker�MacOS Toolbox FAT:PPC PEF�MacOS Toolbox FAT:PPC Project�MacOS Toolbox FAT:PPCAsm Panel�MacOS Toolbox FAT:Rez Compiler�Project File List�MacOS Toolbox PPC Debug:PPC CodeGen Mach-O�MacOS Toolbox PPC Debug:PPC Mach-O Linker�MacOS Toolbox PPC Debug:PPC Mach-O Target�MacOS Toolbox PPC Final:PPC CodeGen Mach-O�MacOS Toolbox PPC Final:PPC Mach-O Linker�MacOS Toolbox PPC Final:PPC Mach-O Target�MacOS Toolbox 68K Debug:PPC CodeGen Mach-O�MacOS Toolbox 68K Debug:PPC Mach-O Linker�MacOS Toolbox 68K Debug:PPC Mach-O Target�MacOS Toolbox 68K Final:PPC CodeGen Mach-O�MacOS Toolbox 68K Final:PPC Mach-O Linker�MacOS Toolbox 68K Final:PPC Mach-O Target�MacOS Toolbox Carbon Debug:PPC CodeGen Mach-O�MacOS Toolbox Carbon Debug:PPC Mach-O Linker�MacOS Toolbox Carbon Debug:PPC Mach-O Target�MacOS Toolbox Carbon Final:PPC CodeGen Mach-O�MacOS Toolbox Carbon Final:PPC Mach-O Linker�MacOS Toolbox Carbon Final:PPC Mach-O Target�MacOS Toolbox FAT:PPC CodeGen Mach-O�MacOS Toolbox FAT:PPC Mach-O Linker�MacOS Toolbox FAT:PPC Mach-O Target�MacOS Toolbox PPC Debug:WinRC Compiler�MacOS Toolbox PPC Debug:x86 CodeGen�MacOS Toolbox PPC Debug:x86 Disassembler�MacOS Toolbox PPC Debug:x86 Exceptions Panel�MacOS Toolbox PPC Debug:x86 Global Optimizer�MacOS Toolbox PPC Debug:x86 Linker�MacOS Toolbox PPC Debug:x86 Project�MacOS Toolbox PPC Final:WinRC Compiler�MacOS Toolbox PPC Final:x86 CodeGen�MacOS Toolbox PPC Final:x86 Disassembler�MacOS Toolbox PPC Final:x86 Exceptions Panel�MacOS Toolbox PPC Final:x86 Global Optimizer�MacOS Toolbox PPC Final:x86 Linker�MacOS Toolbox PPC Final:x86 Project�MacOS Toolbox 68K Debug:WinRC Compiler�MacOS Toolbox 68K Debug:x86 CodeGen�MacOS Toolbox 68K Debug:x86 Disassembler�MacOS Toolbox 68K Debug:x86 Exceptions Panel�MacOS Toolbox 68K Debug:x86 Global Optimizer�MacOS Toolbox 68K Debug:x86 Linker�MacOS Toolbox 68K Debug:x86 Project�MacOS Toolbox 68K Final:WinRC Compiler�MacOS Toolbox 68K Final:x86 CodeGen�MacOS Toolbox 68K Final:x86 Disassembler�MacOS Toolbox 68K Final:x86 Exceptions Panel�MacOS Toolbox 68K Final:x86 Global Optimizer�MacOS Toolbox 68K Final:x86 Linker�MacOS Toolbox 68K Final:x86 Project�MacOS Toolbox Carbon Debug:WinRC Compiler�MacOS Toolbox Carbon Debug:x86 CodeGen�MacOS Toolbox Carbon Debug:x86 Disassembler�MacOS Toolbox Carbon Debug:x86 Exceptions Panel�MacOS Toolbox Carbon Debug:x86 Global Optimizer�MacOS Toolbox Carbon Debug:x86 Linker�MacOS Toolbox Carbon Debug:x86 Project�MacOS Toolbox Carbon Final:WinRC Compiler�MacOS Toolbox Carbon Final:x86 CodeGen�MacOS Toolbox Carbon Final:x86 Disassembler�MacOS Toolbox Carbon Final:x86 Exceptions Panel�MacOS Toolbox Carbon Final:x86 Global Optimizer�MacOS Toolbox Carbon Final:x86 Linker�MacOS Toolbox Carbon Final:x86 Project�MacOS Toolbox FAT:WinRC Compiler�MacOS Toolbox FAT:x86 CodeGen�MacOS Toolbox FAT:x86 Disassembler�MacOS Toolbox FAT:x86 Exceptions Panel�MacOS Toolbox FAT:x86 Global Optimizer�MacOS Toolbox FAT:x86 Linker�MacOS Toolbox FAT:x86 Project�Classic Debug:Source Trees�Classic Debug:Access Paths�Classic Debug:Debugger Runtime�Classic Debug:Target Settings�Classic Debug:File Mappings�Classic Debug:Build Extras�Classic Debug:Debugger Target�Classic Debug:Remote Debug�Classic Debug:Auto-target�Classic Debug:Custom Keywords�Classic Debug:68K CodeGen�Classic Debug:68K Disassembler�Classic Debug:68K Global Optimizer�Classic Debug:68K Linker�Classic Debug:68K Project�Classic Debug:C/C++ Compiler�Classic Debug:C/C++ Warnings�Classic Debug:CFM68K�Classic Debug:FTP Panel�Classic Debug:Java Command Line�Classic Debug:Java Language�Classic Debug:Java MRJAppBuilder�Classic Debug:Java Output�Classic Debug:Java Project�Classic Debug:JavaDoc Project�Classic Debug:MacOS Merge Panel�Classic Debug:Output Flags�Classic Debug:Packager Panel�Classic Debug:PPC CodeGen�Classic Debug:PPC Disassembler�Classic Debug:PPC Global Optimizer�Classic Debug:PPC Linker�Classic Debug:PPC PEF�Classic Debug:PPC Project�Classic Debug:PPCAsm Panel�Classic Debug:Rez Compiler�Classic Debug:WinRC Compiler�Classic Debug:x86 CodeGen�Classic Debug:x86 Disassembler�Classic Debug:x86 Exceptions Panel�Classic Debug:x86 Global Optimizer�Classic Debug:x86 Linker�Classic Debug:x86 Project�Carbon Debug:Source Trees�Carbon Debug:Access Paths�Carbon Debug:Debugger Runtime�Carbon Debug:Target Settings�Carbon Debug:File Mappings�Carbon Debug:Build Extras�Carbon Debug:Debugger Target�Carbon Debug:Remote Debug�Carbon Debug:Auto-target�Carbon Debug:Custom Keywords�Carbon Debug:68K CodeGen�Carbon Debug:68K Disassembler�Carbon Debug:68K Global Optimizer�Carbon Debug:68K Linker�Carbon Debug:68K Project�Carbon Debug:C/C++ Compiler�Carbon Debug:C/C++ Warnings�Carbon Debug:CFM68K�Carbon Debug:FTP Panel�Carbon Debug:Java Command Line�Carbon Debug:Java Language�Carbon Debug:Java MRJAppBuilder�Carbon Debug:Java Output�Carbon Debug:Java Project�Carbon Debug:JavaDoc Project�Carbon Debug:MacOS Merge Panel�Carbon Debug:Output Flags�Carbon Debug:Packager Panel�Carbon Debug:PPC CodeGen�Carbon Debug:PPC Disassembler�Carbon Debug:PPC Global Optimizer�Carbon Debug:PPC Linker�Carbon Debug:PPC PEF�Carbon Debug:PPC Project�Carbon Debug:PPCAsm Panel�Carbon Debug:Rez Compiler�Carbon Debug:WinRC Compiler�Carbon Debug:x86 CodeGen�Carbon Debug:x86 Disassembler�Carbon Debug:x86 Exceptions Panel�Carbon Debug:x86 Global Optimizer�Carbon Debug:x86 Linker�Carbon Debug:x86 Project�Classic Final:Source Trees�Classic Final:Access Paths�Classic Final:Debugger Runtime�Classic Final:Target Settings�Classic Final:File Mappings�Classic Final:Build Extras�Classic Final:Debugger Target�Classic Final:Remote Debug�Classic Final:Auto-target�Classic Final:Custom Keywords�Classic Final:68K CodeGen�Classic Final:68K Disassembler�Classic Final:68K Global Optimizer�Classic Final:68K Linker�Classic Final:68K Project�Classic Final:C/C++ Compiler�Classic Final:C/C++ Warnings�Classic Final:CFM68K�Classic Final:FTP Panel�Classic Final:Java Command Line�Classic Final:Java Language�Classic Final:Java MRJAppBuilder�Classic Final:Java Output�Classic Final:Java Project�Classic Final:JavaDoc Project�Classic Final:MacOS Merge Panel�Classic Final:Output Flags�Classic Final:Packager Panel�Classic Final:PPC CodeGen�Classic Final:PPC Disassembler�Classic Final:PPC Global Optimizer�Classic Final:PPC Linker�Classic Final:PPC PEF�Classic Final:PPC Project�Classic Final:PPCAsm Panel�Classic Final:Rez Compiler�Classic Final:WinRC Compiler�Classic Final:x86 CodeGen�Classic Final:x86 Disassembler�Classic Final:x86 Exceptions Panel�Classic Final:x86 Global Optimizer�Classic Final:x86 Linker�Classic Final:x86 Project�Carbon Final:Source Trees�Carbon Final:Access Paths�Carbon Final:Debugger Runtime�Carbon Final:Target Settings�Carbon Final:File Mappings�Carbon Final:Build Extras�Carbon Final:Debugger Target�Carbon Final:Remote Debug�Carbon Final:Auto-target�Carbon Final:Custom Keywords�Carbon Final:68K CodeGen�Carbon Final:68K Disassembler�Carbon Final:68K Global Optimizer�Carbon Final:68K Linker�Carbon Final:68K Project�Carbon Final:C/C++ Compiler�Carbon Final:C/C++ Warnings�Carbon Final:CFM68K�Carbon Final:FTP Panel�Carbon Final:Java Command Line�Carbon Final:Java Language�Carbon Final:Java MRJAppBuilder�Carbon Final:Java Output�Carbon Final:Java Project�Carbon Final:JavaDoc Project�Carbon Final:MacOS Merge Panel�Carbon Final:Output Flags�Carbon Final:Packager Panel�Carbon Final:PPC CodeGen�Carbon Final:PPC Disassembler�Carbon Final:PPC Global Optimizer�Carbon Final:PPC Linker�Carbon Final:PPC PEF�Carbon Final:PPC Project�Carbon Final:PPCAsm Panel�Carbon Final:Rez Compiler�Carbon Final:WinRC Compiler�Carbon Final:x86 CodeGen�Carbon Final:x86 Disassembler�Carbon Final:x86 Exceptions Panel�Carbon Final:x86 Global Optimizer�Carbon Final:x86 Linker�Carbon Final:x86 Project�DLL Classic Debug:Source Trees�DLL Classic Debug:Access Paths�DLL Classic Debug:Debugger Runtime�DLL Classic Debug:Target Settings�DLL Classic Debug:File Mappings�DLL Classic Debug:Build Extras�DLL Classic Debug:Debugger Target�DLL Classic Debug:Remote Debug�DLL Classic Debug:Auto-target�DLL Classic Debug:Custom Keywords�DLL Classic Debug:68K CodeGen�DLL Classic Debug:68K Disassembler�DLL Classic Debug:68K Global Optimizer�DLL Classic Debug:68K Linker�DLL Classic Debug:68K Project�DLL Classic Debug:C/C++ Compiler�DLL Classic Debug:C/C++ Warnings�DLL Classic Debug:CFM68K�DLL Classic Debug:FTP Panel�DLL Classic Debug:Java Command Line�DLL Classic Debug:Java Language�DLL Classic Debug:Java MRJAppBuilder�DLL Classic Debug:Java Output�DLL Classic Debug:Java Project�DLL Classic Debug:JavaDoc Project�DLL Classic Debug:MacOS Merge Panel�DLL Classic Debug:Output Flags�DLL Classic Debug:Packager Panel�DLL Classic Debug:PPC CodeGen�DLL Classic Debug:PPC Disassembler�DLL Classic Debug:PPC Global Optimizer�DLL Classic Debug:PPC Linker�DLL Classic Debug:PPC PEF�DLL Classic Debug:PPC Project�DLL Classic Debug:PPCAsm Panel�DLL Classic Debug:Rez Compiler�DLL Classic Debug:WinRC Compiler�DLL Classic Debug:x86 CodeGen�DLL Classic Debug:x86 Disassembler�DLL Classic Debug:x86 Exceptions Panel�DLL Classic Debug:x86 Global Optimizer�DLL Classic Debug:x86 Linker�DLL Classic Debug:x86 Project�DLL Carbon Debug:Source Trees�DLL Carbon Debug:Access Paths�DLL Carbon Debug:Debugger Runtime�DLL Carbon Debug:Target Settings�DLL Carbon Debug:File Mappings�DLL Carbon Debug:Build Extras�DLL Carbon Debug:Debugger Target�DLL Carbon Debug:Remote Debug�DLL Carbon Debug:Auto-target�DLL Carbon Debug:Custom Keywords�DLL Carbon Debug:68K CodeGen�DLL Carbon Debug:68K Disassembler�DLL Carbon Debug:68K Global Optimizer�DLL Carbon Debug:68K Linker�DLL Carbon Debug:68K Project�DLL Carbon Debug:C/C++ Compiler�DLL Carbon Debug:C/C++ Warnings�DLL Carbon Debug:CFM68K�DLL Carbon Debug:FTP Panel�DLL Carbon Debug:Java Command Line�DLL Carbon Debug:Java Language�DLL Carbon Debug:Java MRJAppBuilder�DLL Carbon Debug:Java Output�DLL Carbon Debug:Java Project�DLL Carbon Debug:JavaDoc Project�DLL Carbon Debug:MacOS Merge Panel�DLL Carbon Debug:Output Flags�DLL Carbon Debug:Packager Panel�DLL Carbon Debug:PPC CodeGen�DLL Carbon Debug:PPC Disassembler�DLL Carbon Debug:PPC Global Optimizer�DLL Carbon Debug:PPC Linker�DLL Carbon Debug:PPC PEF�DLL Carbon Debug:PPC Project�DLL Carbon Debug:PPCAsm Panel�DLL Carbon Debug:Rez Compiler�DLL Carbon Debug:WinRC Compiler�DLL Carbon Debug:x86 CodeGen�DLL Carbon Debug:x86 Disassembler�DLL Carbon Debug:x86 Exceptions Panel�DLL Carbon Debug:x86 Global Optimizer�DLL Carbon Debug:x86 Linker�DLL Carbon Debug:x86 Project�Encoder DLL Classic Debug:Source Trees�Encoder DLL Classic Debug:Access Paths�Encoder DLL Classic Debug:Debugger Runtime�Encoder DLL Classic Debug:Target Settings�Encoder DLL Classic Debug:File Mappings�Encoder DLL Classic Debug:Build Extras�Encoder DLL Classic Debug:Debugger Target�Encoder DLL Classic Debug:Remote Debug�Encoder DLL Classic Debug:Auto-target�Encoder DLL Classic Debug:Custom Keywords�Encoder DLL Classic Debug:68K CodeGen�Encoder DLL Classic Debug:68K Disassembler�Encoder DLL Classic Debug:68K Global Optimizer�Encoder DLL Classic Debug:68K Linker�Encoder DLL Classic Debug:68K Project�Encoder DLL Classic Debug:C/C++ Compiler�Encoder DLL Classic Debug:C/C++ Warnings�Encoder DLL Classic Debug:CFM68K�Encoder DLL Classic Debug:FTP Panel�Encoder DLL Classic Debug:Java Command Line�Encoder DLL Classic Debug:Java Language�Encoder DLL Classic Debug:Java MRJAppBuilder�Encoder DLL Classic Debug:Java Output�Encoder DLL Classic Debug:Java Project�Encoder DLL Classic Debug:JavaDoc Project�Encoder DLL Classic Debug:MacOS Merge Panel�Encoder DLL Classic Debug:Output Flags�Encoder DLL Classic Debug:Packager Panel�Encoder DLL Classic Debug:PPC CodeGen�Encoder DLL Classic Debug:PPC Disassembler�Encoder DLL Classic Debug:PPC Global Optimizer�Encoder DLL Classic Debug:PPC Linker�Encoder DLL Classic Debug:PPC PEF�Encoder DLL Classic Debug:PPC Project�Encoder DLL Classic Debug:PPCAsm Panel�Encoder DLL Classic Debug:Rez Compiler�Encoder DLL Classic Debug:WinRC Compiler�Encoder DLL Classic Debug:x86 CodeGen�Encoder DLL Classic Debug:x86 Disassembler�Encoder DLL Classic Debug:x86 Exceptions Panel�Encoder DLL Classic Debug:x86 Global Optimizer�Encoder DLL Classic Debug:x86 Linker�Encoder DLL Classic Debug:x86 Project�Encoder DLL Carbon Debug:Source Trees�Encoder DLL Carbon Debug:Access Paths�Encoder DLL Carbon Debug:Debugger Runtime�Encoder DLL Carbon Debug:Target Settings�Encoder DLL Carbon Debug:File Mappings�Encoder DLL Carbon Debug:Build Extras�Encoder DLL Carbon Debug:Debugger Target�Encoder DLL Carbon Debug:Remote Debug�Encoder DLL Carbon Debug:Auto-target�Encoder DLL Carbon Debug:Custom Keywords�Encoder DLL Carbon Debug:68K CodeGen�Encoder DLL Carbon Debug:68K Disassembler�Encoder DLL Carbon Debug:68K Global Optimizer�Encoder DLL Carbon Debug:68K Linker�Encoder DLL Carbon Debug:68K Project�Encoder DLL Carbon Debug:C/C++ Compiler�Encoder DLL Carbon Debug:C/C++ Warnings�Encoder DLL Carbon Debug:CFM68K�Encoder DLL Carbon Debug:FTP Panel�Encoder DLL Carbon Debug:Java Command Line�Encoder DLL Carbon Debug:Java Language�Encoder DLL Carbon Debug:Java MRJAppBuilder�Encoder DLL Carbon Debug:Java Output�Encoder DLL Carbon Debug:Java Project�Encoder DLL Carbon Debug:JavaDoc Project�Encoder DLL Carbon Debug:MacOS Merge Panel�Encoder DLL Carbon Debug:Output Flags�Encoder DLL Carbon Debug:Packager Panel�Encoder DLL Carbon Debug:PPC CodeGen�Encoder DLL Carbon Debug:PPC Disassembler�Encoder DLL Carbon Debug:PPC Global Optimizer�Encoder DLL Carbon Debug:PPC Linker�Encoder DLL Carbon Debug:PPC PEF�Encoder DLL Carbon Debug:PPC Project�Encoder DLL Carbon Debug:PPCAsm Panel�Encoder DLL Carbon Debug:Rez Compiler�Encoder DLL Carbon Debug:WinRC Compiler�Encoder DLL Carbon Debug:x86 CodeGen�Encoder DLL Carbon Debug:x86 Disassembler�Encoder DLL Carbon Debug:x86 Exceptions Panel�Encoder DLL Carbon Debug:x86 Global Optimizer�Encoder DLL Carbon Debug:x86 Linker�Encoder DLL Carbon Debug:x86 Project�Encoder DLL Classic Final:Source Trees�Encoder DLL Classic Final:Access Paths�Encoder DLL Classic Final:Debugger Runtime�Encoder DLL Classic Final:Target Settings�Encoder DLL Classic Final:File Mappings�Encoder DLL Classic Final:Build Extras�Encoder DLL Classic Final:Debugger Target�Encoder DLL Classic Final:Remote Debug�Encoder DLL Classic Final:Auto-target�Encoder DLL Classic Final:Custom Keywords�Encoder DLL Classic Final:68K CodeGen�Encoder DLL Classic Final:68K Disassembler�Encoder DLL Classic Final:68K Global Optimizer�Encoder DLL Classic Final:68K Linker�Encoder DLL Classic Final:68K Project�Encoder DLL Classic Final:C/C++ Compiler�Encoder DLL Classic Final:C/C++ Warnings�Encoder DLL Classic Final:CFM68K�Encoder DLL Classic Final:FTP Panel�Encoder DLL Classic Final:Java Command Line�Encoder DLL Classic Final:Java Language�Encoder DLL Classic Final:Java MRJAppBuilder�Encoder DLL Classic Final:Java Output�Encoder DLL Classic Final:Java Project�Encoder DLL Classic Final:JavaDoc Project�Encoder DLL Classic Final:MacOS Merge Panel�Encoder DLL Classic Final:Output Flags�Encoder DLL Classic Final:Packager Panel�Encoder DLL Classic Final:PPC CodeGen�Encoder DLL Classic Final:PPC Disassembler�Encoder DLL Classic Final:PPC Global Optimizer�Encoder DLL Classic Final:PPC Linker�Encoder DLL Classic Final:PPC PEF�Encoder DLL Classic Final:PPC Project�Encoder DLL Classic Final:PPCAsm Panel�Encoder DLL Classic Final:Rez Compiler�Encoder DLL Classic Final:WinRC Compiler�Encoder DLL Classic Final:x86 CodeGen�Encoder DLL Classic Final:x86 Disassembler�Encoder DLL Classic Final:x86 Exceptions Panel�Encoder DLL Classic Final:x86 Global Optimizer�Encoder DLL Classic Final:x86 Linker�Encoder DLL Classic Final:x86 Project�Encoder DLL Carbon Final:Source Trees�Encoder DLL Carbon Final:Access Paths�Encoder DLL Carbon Final:Debugger Runtime�Encoder DLL Carbon Final:Target Settings�Encoder DLL Carbon Final:File Mappings�Encoder DLL Carbon Final:Build Extras�Encoder DLL Carbon Final:Debugger Target�Encoder DLL Carbon Final:Remote Debug�Encoder DLL Carbon Final:Auto-target�Encoder DLL Carbon Final:Custom Keywords�Encoder DLL Carbon Final:68K CodeGen�Encoder DLL Carbon Final:68K Disassembler�Encoder DLL Carbon Final:68K Global Optimizer�Encoder DLL Carbon Final:68K Linker�Encoder DLL Carbon Final:68K Project�Encoder DLL Carbon Final:C/C++ Compiler�Encoder DLL Carbon Final:C/C++ Warnings�Encoder DLL Carbon Final:CFM68K�Encoder DLL Carbon Final:FTP Panel�Encoder DLL Carbon Final:Java Command Line�Encoder DLL Carbon Final:Java Language�Encoder DLL Carbon Final:Java MRJAppBuilder�Encoder DLL Carbon Final:Java Output�Encoder DLL Carbon Final:Java Project�Encoder DLL Carbon Final:JavaDoc Project�Encoder DLL Carbon Final:MacOS Merge Panel�Encoder DLL Carbon Final:Output Flags�Encoder DLL Carbon Final:Packager Panel�Encoder DLL Carbon Final:PPC CodeGen�Encoder DLL Carbon Final:PPC Disassembler�Encoder DLL Carbon Final:PPC Global Optimizer�Encoder DLL Carbon Final:PPC Linker�Encoder DLL Carbon Final:PPC PEF�Encoder DLL Carbon Final:PPC Project�Encoder DLL Carbon Final:PPCAsm Panel�Encoder DLL Carbon Final:Rez Compiler�Encoder DLL Carbon Final:WinRC Compiler�Encoder DLL Carbon Final:x86 CodeGen�Encoder DLL Carbon Final:x86 Disassembler�Encoder DLL Carbon Final:x86 Exceptions Panel�Encoder DLL Carbon Final:x86 Global Optimizer�Encoder DLL Carbon Final:x86 Linker�Encoder DLL Carbon Final:x86 Project�Minimal DLL Classic Debug:Source Trees�Minimal DLL Classic Debug:Access Paths�Minimal DLL Classic Debug:Debugger Runtime�Minimal DLL Classic Debug:Target Settings�Minimal DLL Classic Debug:File Mappings�Minimal DLL Classic Debug:Build Extras�Minimal DLL Classic Debug:Debugger Target�Minimal DLL Classic Debug:Remote Debug�Minimal DLL Classic Debug:Auto-target�Minimal DLL Classic Debug:Custom Keywords�Minimal DLL Classic Debug:68K CodeGen�Minimal DLL Classic Debug:68K Disassembler�Minimal DLL Classic Debug:68K Global Optimizer�Minimal DLL Classic Debug:68K Linker�Minimal DLL Classic Debug:68K Project�Minimal DLL Classic Debug:C/C++ Compiler�Minimal DLL Classic Debug:C/C++ Warnings�Minimal DLL Classic Debug:CFM68K�Minimal DLL Classic Debug:FTP Panel�Minimal DLL Classic Debug:Java Command Line�Minimal DLL Classic Debug:Java Language�Minimal DLL Classic Debug:Java MRJAppBuilder�Minimal DLL Classic Debug:Java Output�Minimal DLL Classic Debug:Java Project�Minimal DLL Classic Debug:JavaDoc Project�Minimal DLL Classic Debug:MacOS Merge Panel�Minimal DLL Classic Debug:Output Flags�Minimal DLL Classic Debug:Packager Panel�Minimal DLL Classic Debug:PPC CodeGen�Minimal DLL Classic Debug:PPC Disassembler�Minimal DLL Classic Debug:PPC Global Optimizer�Minimal DLL Classic Debug:PPC Linker�Minimal DLL Classic Debug:PPC PEF�Minimal DLL Classic Debug:PPC Project�Minimal DLL Classic Debug:PPCAsm Panel�Minimal DLL Classic Debug:Rez Compiler�Minimal DLL Classic Debug:WinRC Compiler�Minimal DLL Classic Debug:x86 CodeGen�Minimal DLL Classic Debug:x86 Disassembler�Minimal DLL Classic Debug:x86 Exceptions Panel�Minimal DLL Classic Debug:x86 Global Optimizer�Minimal DLL Classic Debug:x86 Linker�Minimal DLL Classic Debug:x86 Project�Minimal DLL Carbon Debug:Source Trees�Minimal DLL Carbon Debug:Access Paths�Minimal DLL Carbon Debug:Debugger Runtime�Minimal DLL Carbon Debug:Target Settings�Minimal DLL Carbon Debug:File Mappings�Minimal DLL Carbon Debug:Build Extras�Minimal DLL Carbon Debug:Debugger Target�Minimal DLL Carbon Debug:Remote Debug�Minimal DLL Carbon Debug:Auto-target�Minimal DLL Carbon Debug:Custom Keywords�Minimal DLL Carbon Debug:68K CodeGen�Minimal DLL Carbon Debug:68K Disassembler�Minimal DLL Carbon Debug:68K Global Optimizer�Minimal DLL Carbon Debug:68K Linker�Minimal DLL Carbon Debug:68K Project�Minimal DLL Carbon Debug:C/C++ Compiler�Minimal DLL Carbon Debug:C/C++ Warnings�Minimal DLL Carbon Debug:CFM68K�Minimal DLL Carbon Debug:FTP Panel�Minimal DLL Carbon Debug:Java Command Line�Minimal DLL Carbon Debug:Java Language�Minimal DLL Carbon Debug:Java MRJAppBuilder�Minimal DLL Carbon Debug:Java Output�Minimal DLL Carbon Debug:Java Project�Minimal DLL Carbon Debug:JavaDoc Project�Minimal DLL Carbon Debug:MacOS Merge Panel�Minimal DLL Carbon Debug:Output Flags�Minimal DLL Carbon Debug:Packager Panel�Minimal DLL Carbon Debug:PPC CodeGen�Minimal DLL Carbon Debug:PPC Disassembler�Minimal DLL Carbon Debug:PPC Global Optimizer�Minimal DLL Carbon Debug:PPC Linker�Minimal DLL Carbon Debug:PPC PEF�Minimal DLL Carbon Debug:PPC Project�Minimal DLL Carbon Debug:PPCAsm Panel�Minimal DLL Carbon Debug:Rez Compiler�Minimal DLL Carbon Debug:WinRC Compiler�Minimal DLL Carbon Debug:x86 CodeGen�Minimal DLL Carbon Debug:x86 Disassembler�Minimal DLL Carbon Debug:x86 Exceptions Panel�Minimal DLL Carbon Debug:x86 Global Optimizer�Minimal DLL Carbon Debug:x86 Linker�Minimal DLL Carbon Debug:x86 Project�Minimal DLL Classic Final:Source Trees�Minimal DLL Classic Final:Access Paths�Minimal DLL Classic Final:Debugger Runtime�Minimal DLL Classic Final:Target Settings�Minimal DLL Classic Final:File Mappings�Minimal DLL Classic Final:Build Extras�Minimal DLL Classic Final:Debugger Target�Minimal DLL Classic Final:Remote Debug�Minimal DLL Classic Final:Auto-target�Minimal DLL Classic Final:Custom Keywords�Minimal DLL Classic Final:68K CodeGen�Minimal DLL Classic Final:68K Disassembler�Minimal DLL Classic Final:68K Global Optimizer�Minimal DLL Classic Final:68K Linker�Minimal DLL Classic Final:68K Project�Minimal DLL Classic Final:C/C++ Compiler�Minimal DLL Classic Final:C/C++ Warnings�Minimal DLL Classic Final:CFM68K�Minimal DLL Classic Final:FTP Panel�Minimal DLL Classic Final:Java Command Line�Minimal DLL Classic Final:Java Language�Minimal DLL Classic Final:Java MRJAppBuilder�Minimal DLL Classic Final:Java Output�Minimal DLL Classic Final:Java Project�Minimal DLL Classic Final:JavaDoc Project�Minimal DLL Classic Final:MacOS Merge Panel�Minimal DLL Classic Final:Output Flags�Minimal DLL Classic Final:Packager Panel�Minimal DLL Classic Final:PPC CodeGen�Minimal DLL Classic Final:PPC Disassembler�Minimal DLL Classic Final:PPC Global Optimizer�Minimal DLL Classic Final:PPC Linker�Minimal DLL Classic Final:PPC PEF�Minimal DLL Classic Final:PPC Project�Minimal DLL Classic Final:PPCAsm Panel�Minimal DLL Classic Final:Rez Compiler�Minimal DLL Classic Final:WinRC Compiler�Minimal DLL Classic Final:x86 CodeGen�Minimal DLL Classic Final:x86 Disassembler�Minimal DLL Classic Final:x86 Exceptions Panel�Minimal DLL Classic Final:x86 Global Optimizer�Minimal DLL Classic Final:x86 Linker�Minimal DLL Classic Final:x86 Project������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������WARZ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MacOS Toolbox PPC Debug:Remote Debug�MacOS Toolbox PPC Debug:Auto-target�MacOS Toolbox PPC Debug:Packager Panel�MacOS Toolbox PPC Debug:Source Trees�MacOS Toolbox PPC Debug:Access Paths�MacOS Toolbox PPC Debug:Debugger Runtime�MacOS Toolbox PPC Debug:Target Settings�MacOS Toolbox PPC Debug:File Mappings�MacOS Toolbox PPC Debug:Build Extras�MacOS Toolbox PPC Debug:Debugger Target�MacOS Toolbox PPC Debug:Custom Keywords�MacOS Toolbox PPC Debug:68K CodeGen�MacOS Toolbox PPC Debug:68K Disassembler�MacOS Toolbox PPC Debug:68K Global Optimizer�MacOS Toolbox PPC Debug:68K Linker�MacOS Toolbox PPC Debug:68K Project�MacOS Toolbox PPC Debug:C/C++ Compiler�MacOS Toolbox PPC Debug:C/C++ Warnings�MacOS Toolbox PPC Debug:CFM68K�MacOS Toolbox PPC Debug:FTP Panel�MacOS Toolbox PPC Debug:Java Command Line�MacOS Toolbox PPC Debug:Java Language�MacOS Toolbox PPC Debug:Java MRJAppBuilder�MacOS Toolbox PPC Debug:Java Output�MacOS Toolbox PPC Debug:Java Project�MacOS Toolbox PPC Debug:JavaDoc Project�MacOS Toolbox PPC Debug:MacOS Merge Panel�MacOS Toolbox PPC Debug:Output Flags�MacOS Toolbox PPC Debug:PPC CodeGen�MacOS Toolbox PPC Debug:PPC Disassembler�MacOS Toolbox PPC Debug:PPC Global Optimizer�MacOS Toolbox PPC Debug:PPC Linker�MacOS Toolbox PPC Debug:PPC PEF�MacOS Toolbox PPC Debug:PPC Project�MacOS Toolbox PPC Debug:PPCAsm Panel�MacOS Toolbox PPC Debug:Rez Compiler�MacOS Toolbox PPC Final:Remote Debug�MacOS Toolbox PPC Final:Auto-target�MacOS Toolbox PPC Final:Packager Panel�MacOS Toolbox PPC Final:Source Trees�MacOS Toolbox PPC Final:Access Paths�MacOS Toolbox PPC Final:Debugger Runtime�MacOS Toolbox PPC Final:Target Settings�MacOS Toolbox PPC Final:File Mappings�MacOS Toolbox PPC Final:Build Extras�MacOS Toolbox PPC Final:Debugger Target�MacOS Toolbox PPC Final:Custom Keywords�MacOS Toolbox PPC Final:68K CodeGen�MacOS Toolbox PPC Final:68K Disassembler�MacOS Toolbox PPC Final:68K Global Optimizer�MacOS Toolbox PPC Final:68K Linker�MacOS Toolbox PPC Final:68K Project�MacOS Toolbox PPC Final:C/C++ Compiler�MacOS Toolbox PPC Final:C/C++ Warnings�MacOS Toolbox PPC Final:CFM68K�MacOS Toolbox PPC Final:FTP Panel�MacOS Toolbox PPC Final:Java Command Line�MacOS Toolbox PPC Final:Java Language�MacOS Toolbox PPC Final:Java MRJAppBuilder�MacOS Toolbox PPC Final:Java Output�MacOS Toolbox PPC Final:Java Project�MacOS Toolbox PPC Final:JavaDoc Project�MacOS Toolbox PPC Final:MacOS Merge Panel�MacOS Toolbox PPC Final:Output Flags�MacOS Toolbox PPC Final:PPC CodeGen�MacOS Toolbox PPC Final:PPC Disassembler�MacOS Toolbox PPC Final:PPC Global Optimizer�MacOS Toolbox PPC Final:PPC Linker�MacOS Toolbox PPC Final:PPC PEF�MacOS Toolbox PPC Final:PPC Project�MacOS Toolbox PPC Final:PPCAsm Panel�MacOS Toolbox PPC Final:Rez Compiler�MacOS Toolbox 68K Debug:Remote Debug�MacOS Toolbox 68K Debug:Auto-target�MacOS Toolbox 68K Debug:Packager Panel�MacOS Toolbox 68K Debug:Source Trees�MacOS Toolbox 68K Debug:Access Paths�MacOS Toolbox 68K Debug:Debugger Runtime�MacOS Toolbox 68K Debug:Target Settings�MacOS Toolbox 68K Debug:File Mappings�MacOS Toolbox 68K Debug:Build Extras�MacOS Toolbox 68K Debug:Debugger Target�MacOS Toolbox 68K Debug:Custom Keywords�MacOS Toolbox 68K Debug:68K CodeGen�MacOS Toolbox 68K Debug:68K Disassembler�MacOS Toolbox 68K Debug:68K Global Optimizer�MacOS Toolbox 68K Debug:68K Linker�MacOS Toolbox 68K Debug:68K Project�MacOS Toolbox 68K Debug:C/C++ Compiler�MacOS Toolbox 68K Debug:C/C++ Warnings�MacOS Toolbox 68K Debug:CFM68K�MacOS Toolbox 68K Debug:FTP Panel�MacOS Toolbox 68K Debug:Java Command Line�MacOS Toolbox 68K Debug:Java Language�MacOS Toolbox 68K Debug:Java MRJAppBuilder�MacOS Toolbox 68K Debug:Java Output�MacOS Toolbox 68K Debug:Java Project�MacOS Toolbox 68K Debug:JavaDoc Project�MacOS Toolbox 68K Debug:MacOS Merge Panel�MacOS Toolbox 68K Debug:Output Flags�MacOS Toolbox 68K Debug:PPC CodeGen�MacOS Toolbox 68K Debug:PPC Disassembler�MacOS Toolbox 68K Debug:PPC Global Optimizer�MacOS Toolbox 68K Debug:PPC Linker�MacOS Toolbox 68K Debug:PPC PEF�MacOS Toolbox 68K Debug:PPC Project�MacOS Toolbox 68K Debug:PPCAsm Panel�MacOS Toolbox 68K Debug:Rez Compiler�MacOS Toolbox 68K Final:Remote Debug�MacOS Toolbox 68K Final:Auto-target�MacOS Toolbox 68K Final:Packager Panel�MacOS Toolbox 68K Final:Source Trees�MacOS Toolbox 68K Final:Access Paths�MacOS Toolbox 68K Final:Debugger Runtime�MacOS Toolbox 68K Final:Target Settings�MacOS Toolbox 68K Final:File Mappings�MacOS Toolbox 68K Final:Build Extras�MacOS Toolbox 68K Final:Debugger Target�MacOS Toolbox 68K Final:Custom Keywords�MacOS Toolbox 68K Final:68K CodeGen�MacOS Toolbox 68K Final:68K Disassembler�MacOS Toolbox 68K Final:68K Global Optimizer�MacOS Toolbox 68K Final:68K Linker�MacOS Toolbox 68K Final:68K Project�MacOS Toolbox 68K Final:C/C++ Compiler�MacOS Toolbox 68K Final:C/C++ Warnings�MacOS Toolbox 68K Final:CFM68K�MacOS Toolbox 68K Final:FTP Panel�MacOS Toolbox 68K Final:Java Command Line�MacOS Toolbox 68K Final:Java Language�MacOS Toolbox 68K Final:Java MRJAppBuilder�MacOS Toolbox 68K Final:Java Output�MacOS Toolbox 68K Final:Java Project�MacOS Toolbox 68K Final:JavaDoc Project�MacOS Toolbox 68K Final:MacOS Merge Panel�MacOS Toolbox 68K Final:Output Flags�MacOS Toolbox 68K Final:PPC CodeGen�MacOS Toolbox 68K Final:PPC Disassembler�MacOS Toolbox 68K Final:PPC Global Optimizer�MacOS Toolbox 68K Final:PPC Linker�MacOS Toolbox 68K Final:PPC PEF�MacOS Toolbox 68K Final:PPC Project�MacOS Toolbox 68K Final:PPCAsm Panel�MacOS Toolbox 68K Final:Rez Compiler�MacOS Toolbox Carbon Debug:Remote Debug�MacOS Toolbox Carbon Debug:Auto-target�MacOS Toolbox Carbon Debug:Packager Panel�MacOS Toolbox Carbon Debug:Source Trees�MacOS Toolbox Carbon Debug:Access Paths�MacOS Toolbox Carbon Debug:Debugger Runtime�MacOS Toolbox Carbon Debug:Target Settings�MacOS Toolbox Carbon Debug:File Mappings�MacOS Toolbox Carbon Debug:Build Extras�MacOS Toolbox Carbon Debug:Debugger Target�MacOS Toolbox Carbon Debug:Custom Keywords�MacOS Toolbox Carbon Debug:68K CodeGen�MacOS Toolbox Carbon Debug:68K Disassembler�MacOS Toolbox Carbon Debug:68K Global Optimizer�MacOS Toolbox Carbon Debug:68K Linker�MacOS Toolbox Carbon Debug:68K Project�MacOS Toolbox Carbon Debug:C/C++ Compiler�MacOS Toolbox Carbon Debug:C/C++ Warnings�MacOS Toolbox Carbon Debug:CFM68K�MacOS Toolbox Carbon Debug:FTP Panel�MacOS Toolbox Carbon Debug:Java Command Line�MacOS Toolbox Carbon Debug:Java Language�MacOS Toolbox Carbon Debug:Java MRJAppBuilder�MacOS Toolbox Carbon Debug:Java Output�MacOS Toolbox Carbon Debug:Java Project�MacOS Toolbox Carbon Debug:JavaDoc Project�MacOS Toolbox Carbon Debug:MacOS Merge Panel�MacOS Toolbox Carbon Debug:Output Flags�MacOS Toolbox Carbon Debug:PPC CodeGen�MacOS Toolbox Carbon Debug:PPC Disassembler�MacOS Toolbox Carbon Debug:PPC Global Optimizer�MacOS Toolbox Carbon Debug:PPC Linker�MacOS Toolbox Carbon Debug:PPC PEF�MacOS Toolbox Carbon Debug:PPC Project�MacOS Toolbox Carbon Debug:PPCAsm Panel�MacOS Toolbox Carbon Debug:Rez Compiler�MacOS Toolbox Carbon Final:Remote Debug�MacOS Toolbox Carbon Final:Auto-target�MacOS Toolbox Carbon Final:Packager Panel�MacOS Toolbox Carbon Final:Source Trees�MacOS Toolbox Carbon Final:Access Paths�MacOS Toolbox Carbon Final:Debugger Runtime�MacOS Toolbox Carbon Final:Target Settings�MacOS Toolbox Carbon Final:File Mappings�MacOS Toolbox Carbon Final:Build Extras�MacOS Toolbox Carbon Final:Debugger Target�MacOS Toolbox Carbon Final:Custom Keywords�MacOS Toolbox Carbon Final:68K CodeGen�MacOS Toolbox Carbon Final:68K Disassembler�MacOS Toolbox Carbon Final:68K Global Optimizer�MacOS Toolbox Carbon Final:68K Linker�MacOS Toolbox Carbon Final:68K Project�MacOS Toolbox Carbon Final:C/C++ Compiler�MacOS Toolbox Carbon Final:C/C++ Warnings�MacOS Toolbox Carbon Final:CFM68K�MacOS Toolbox Carbon Final:FTP Panel�MacOS Toolbox Carbon Final:Java Command Line�MacOS Toolbox Carbon Final:Java Language�MacOS Toolbox Carbon Final:Java MRJAppBuilder�MacOS Toolbox Carbon Final:Java Output�MacOS Toolbox Carbon Final:Java Project�MacOS Toolbox Carbon Final:JavaDoc Project�MacOS Toolbox Carbon Final:MacOS Merge Panel�MacOS Toolbox Carbon Final:Output Flags�MacOS Toolbox Carbon Final:PPC CodeGen�MacOS Toolbox Carbon Final:PPC Disassembler�MacOS Toolbox Carbon Final:PPC Global Optimizer�MacOS Toolbox Carbon Final:PPC Linker�MacOS Toolbox Carbon Final:PPC PEF�MacOS Toolbox Carbon Final:PPC Project�MacOS Toolbox Carbon Final:PPCAsm Panel�MacOS Toolbox Carbon Final:Rez Compiler�MacOS Toolbox FAT:Remote Debug�MacOS Toolbox FAT:Auto-target�MacOS Toolbox FAT:Packager Panel�MacOS Toolbox FAT:Source Trees�MacOS Toolbox FAT:Access Paths�MacOS Toolbox FAT:Debugger Runtime�MacOS Toolbox FAT:Target Settings�MacOS Toolbox FAT:File Mappings�MacOS Toolbox FAT:Build Extras�MacOS Toolbox FAT:Debugger Target�MacOS Toolbox FAT:Custom Keywords�MacOS Toolbox FAT:68K CodeGen�MacOS Toolbox FAT:68K Disassembler�MacOS Toolbox FAT:68K Global Optimizer�MacOS Toolbox FAT:68K Linker�MacOS Toolbox FAT:68K Project�MacOS Toolbox FAT:C/C++ Compiler�MacOS Toolbox FAT:C/C++ Warnings�MacOS Toolbox FAT:CFM68K�MacOS Toolbox FAT:FTP Panel�MacOS Toolbox FAT:Java Command Line�MacOS Toolbox FAT:Java Language�MacOS Toolbox FAT:Java MRJAppBuilder�MacOS Toolbox FAT:Java Output�MacOS Toolbox FAT:Java Project�MacOS Toolbox FAT:JavaDoc Project�MacOS Toolbox FAT:MacOS Merge Panel�MacOS Toolbox FAT:Output Flags�MacOS Toolbox FAT:PPC CodeGen�MacOS Toolbox FAT:PPC Disassembler�MacOS Toolbox FAT:PPC Global Optimizer�MacOS Toolbox FAT:PPC Linker�MacOS Toolbox FAT:PPC PEF�MacOS Toolbox FAT:PPC Project�MacOS Toolbox FAT:PPCAsm Panel�MacOS Toolbox FAT:Rez Compiler�Project File List�MacOS Toolbox PPC Debug:PPC CodeGen Mach-O�MacOS Toolbox PPC Debug:PPC Mach-O Linker�MacOS Toolbox PPC Debug:PPC Mach-O Target�MacOS Toolbox PPC Final:PPC CodeGen Mach-O�MacOS Toolbox PPC Final:PPC Mach-O Linker�MacOS Toolbox PPC Final:PPC Mach-O Target�MacOS Toolbox 68K Debug:PPC CodeGen Mach-O�MacOS Toolbox 68K Debug:PPC Mach-O Linker�MacOS Toolbox 68K Debug:PPC Mach-O Target�MacOS Toolbox 68K Final:PPC CodeGen Mach-O�MacOS Toolbox 68K Final:PPC Mach-O Linker�MacOS Toolbox 68K Final:PPC Mach-O Target�MacOS Toolbox Carbon Debug:PPC CodeGen Mach-O�MacOS Toolbox Carbon Debug:PPC Mach-O Linker�MacOS Toolbox Carbon Debug:PPC Mach-O Target�MacOS Toolbox Carbon Final:PPC CodeGen Mach-O�MacOS Toolbox Carbon Final:PPC Mach-O Linker�MacOS Toolbox Carbon Final:PPC Mach-O Target�MacOS Toolbox FAT:PPC CodeGen Mach-O�MacOS Toolbox FAT:PPC Mach-O Linker�MacOS Toolbox FAT:PPC Mach-O Target�MacOS Toolbox PPC Debug:WinRC Compiler�MacOS Toolbox PPC Debug:x86 CodeGen�MacOS Toolbox PPC Debug:x86 Disassembler�MacOS Toolbox PPC Debug:x86 Exceptions Panel�MacOS Toolbox PPC Debug:x86 Global Optimizer�MacOS Toolbox PPC Debug:x86 Linker�MacOS Toolbox PPC Debug:x86 Project�MacOS Toolbox PPC Final:WinRC Compiler�MacOS Toolbox PPC Final:x86 CodeGen�MacOS Toolbox PPC Final:x86 Disassembler�MacOS Toolbox PPC Final:x86 Exceptions Panel�MacOS Toolbox PPC Final:x86 Global Optimizer�MacOS Toolbox PPC Final:x86 Linker�MacOS Toolbox PPC Final:x86 Project�MacOS Toolbox 68K Debug:WinRC Compiler�MacOS Toolbox 68K Debug:x86 CodeGen�MacOS Toolbox 68K Debug:x86 Disassembler�MacOS Toolbox 68K Debug:x86 Exceptions Panel�MacOS Toolbox 68K Debug:x86 Global Optimizer�MacOS Toolbox 68K Debug:x86 Linker�MacOS Toolbox 68K Debug:x86 Project�MacOS Toolbox 68K Final:WinRC Compiler�MacOS Toolbox 68K Final:x86 CodeGen�MacOS Toolbox 68K Final:x86 Disassembler�MacOS Toolbox 68K Final:x86 Exceptions Panel�MacOS Toolbox 68K Final:x86 Global Optimizer�MacOS Toolbox 68K Final:x86 Linker�MacOS Toolbox 68K Final:x86 Project�MacOS Toolbox Carbon Debug:WinRC Compiler�MacOS Toolbox Carbon Debug:x86 CodeGen�MacOS Toolbox Carbon Debug:x86 Disassembler�MacOS Toolbox Carbon Debug:x86 Exceptions Panel�MacOS Toolbox Carbon Debug:x86 Global Optimizer�MacOS Toolbox Carbon Debug:x86 Linker�MacOS Toolbox Carbon Debug:x86 Project�MacOS Toolbox Carbon Final:WinRC Compiler�MacOS Toolbox Carbon Final:x86 CodeGen�MacOS Toolbox Carbon Final:x86 Disassembler�MacOS Toolbox Carbon Final:x86 Exceptions Panel�MacOS Toolbox Carbon Final:x86 Global Optimizer�MacOS Toolbox Carbon Final:x86 Linker�MacOS Toolbox Carbon Final:x86 Project�MacOS Toolbox FAT:WinRC Compiler�MacOS Toolbox FAT:x86 CodeGen�MacOS Toolbox FAT:x86 Disassembler�MacOS Toolbox FAT:x86 Exceptions Panel�MacOS Toolbox FAT:x86 Global Optimizer�MacOS Toolbox FAT:x86 Linker�MacOS Toolbox FAT:x86 Project�Classic Debug:Source Trees�Classic Debug:Access Paths�Classic Debug:Debugger Runtime�Classic Debug:Target Settings�Classic Debug:File Mappings�Classic Debug:Build Extras�Classic Debug:Debugger Target�Classic Debug:Remote Debug�Classic Debug:Auto-target�Classic Debug:Custom Keywords�Classic Debug:68K CodeGen�Classic Debug:68K Disassembler�Classic Debug:68K Global Optimizer�Classic Debug:68K Linker�Classic Debug:68K Project�Classic Debug:C/C++ Compiler�Classic Debug:C/C++ Warnings�Classic Debug:CFM68K�Classic Debug:FTP Panel�Classic Debug:Java Command Line�Classic Debug:Java Language�Classic Debug:Java MRJAppBuilder�Classic Debug:Java Output�Classic Debug:Java Project�Classic Debug:JavaDoc Project�Classic Debug:MacOS Merge Panel�Classic Debug:Output Flags�Classic Debug:Packager Panel�Classic Debug:PPC CodeGen�Classic Debug:PPC Disassembler�Classic Debug:PPC Global Optimizer�Classic Debug:PPC Linker�Classic Debug:PPC PEF�Classic Debug:PPC Project�Classic Debug:PPCAsm Panel�Classic Debug:Rez Compiler�Classic Debug:WinRC Compiler�Classic Debug:x86 CodeGen�Classic Debug:x86 Disassembler�Classic Debug:x86 Exceptions Panel�Classic Debug:x86 Global Optimizer�Classic Debug:x86 Linker�Classic Debug:x86 Project�Carbon Debug:Source Trees�Carbon Debug:Access Paths�Carbon Debug:Debugger Runtime�Carbon Debug:Target Settings�Carbon Debug:File Mappings�Carbon Debug:Build Extras�Carbon Debug:Debugger Target�Carbon Debug:Remote Debug�Carbon Debug:Auto-target�Carbon Debug:Custom Keywords�Carbon Debug:68K CodeGen�Carbon Debug:68K Disassembler�Carbon Debug:68K Global Optimizer�Carbon Debug:68K Linker�Carbon Debug:68K Project�Carbon Debug:C/C++ Compiler�Carbon Debug:C/C++ Warnings�Carbon Debug:CFM68K�Carbon Debug:FTP Panel�Carbon Debug:Java Command Line�Carbon Debug:Java Language�Carbon Debug:Java MRJAppBuilder�Carbon Debug:Java Output�Carbon Debug:Java Project�Carbon Debug:JavaDoc Project�Carbon Debug:MacOS Merge Panel�Carbon Debug:Output Flags�Carbon Debug:Packager Panel�Carbon Debug:PPC CodeGen�Carbon Debug:PPC Disassembler�Carbon Debug:PPC Global Optimizer�Carbon Debug:PPC Linker�Carbon Debug:PPC PEF�Carbon Debug:PPC Project�Carbon Debug:PPCAsm Panel�Carbon Debug:Rez Compiler�Carbon Debug:WinRC Compiler�Carbon Debug:x86 CodeGen�Carbon Debug:x86 Disassembler�Carbon Debug:x86 Exceptions Panel�Carbon Debug:x86 Global Optimizer�Carbon Debug:x86 Linker�Carbon Debug:x86 Project�Classic Final:Source Trees�Classic Final:Access Paths�Classic Final:Debugger Runtime�Classic Final:Target Settings�Classic Final:File Mappings�Classic Final:Build Extras�Classic Final:Debugger Target�Classic Final:Remote Debug�Classic Final:Auto-target�Classic Final:Custom Keywords�Classic Final:68K CodeGen�Classic Final:68K Disassembler�Classic Final:68K Global Optimizer�Classic Final:68K Linker�Classic Final:68K Project�Classic Final:C/C++ Compiler�Classic Final:C/C++ Warnings�Classic Final:CFM68K�Classic Final:FTP Panel�Classic Final:Java Command Line�Classic Final:Java Language�Classic Final:Java MRJAppBuilder�Classic Final:Java Output�Classic Final:Java Project�Classic Final:JavaDoc Project�Classic Final:MacOS Merge Panel�Classic Final:Output Flags�Classic Final:Packager Panel�Classic Final:PPC CodeGen�Classic Final:PPC Disassembler�Classic Final:PPC Global Optimizer�Classic Final:PPC Linker�Classic Final:PPC PEF�Classic Final:PPC Project�Classic Final:PPCAsm Panel�Classic Final:Rez Compiler�Classic Final:WinRC Compiler�Classic Final:x86 CodeGen�Classic Final:x86 Disassembler�Classic Final:x86 Exceptions Panel�Classic Final:x86 Global Optimizer�Classic Final:x86 Linker�Classic Final:x86 Project�Carbon Final:Source Trees�Carbon Final:Access Paths�Carbon Final:Debugger Runtime�Carbon Final:Target Settings�Carbon Final:File Mappings�Carbon Final:Build Extras�Carbon Final:Debugger Target�Carbon Final:Remote Debug�Carbon Final:Auto-target�Carbon Final:Custom Keywords�Carbon Final:68K CodeGen�Carbon Final:68K Disassembler�Carbon Final:68K Global Optimizer�Carbon Final:68K Linker�Carbon Final:68K Project�Carbon Final:C/C++ Compiler�Carbon Final:C/C++ Warnings�Carbon Final:CFM68K�Carbon Final:FTP Panel�Carbon Final:Java Command Line�Carbon Final:Java Language�Carbon Final:Java MRJAppBuilder�Carbon Final:Java Output�Carbon Final:Java Project�Carbon Final:JavaDoc Project�Carbon Final:MacOS Merge Panel�Carbon Final:Output Flags�Carbon Final:Packager Panel�Carbon Final:PPC CodeGen�Carbon Final:PPC Disassembler�Carbon Final:PPC Global Optimizer�Carbon Final:PPC Linker�Carbon Final:PPC PEF�Carbon Final:PPC Project�Carbon Final:PPCAsm Panel�Carbon Final:Rez Compiler�Carbon Final:WinRC Compiler�Carbon Final:x86 CodeGen�Carbon Final:x86 Disassembler�Carbon Final:x86 Exceptions Panel�Carbon Final:x86 Global Optimizer�Carbon Final:x86 Linker�Carbon Final:x86 Project�DLL Classic Debug:Source Trees�DLL Classic Debug:Access Paths�DLL Classic Debug:Debugger Runtime�DLL Classic Debug:Target Settings�DLL Classic Debug:File Mappings�DLL Classic Debug:Build Extras�DLL Classic Debug:Debugger Target�DLL Classic Debug:Remote Debug�DLL Classic Debug:Auto-target�DLL Classic Debug:Custom Keywords�DLL Classic Debug:68K CodeGen�DLL Classic Debug:68K Disassembler�DLL Classic Debug:68K Global Optimizer�DLL Classic Debug:68K Linker�DLL Classic Debug:68K Project�DLL Classic Debug:C/C++ Compiler�DLL Classic Debug:C/C++ Warnings�DLL Classic Debug:CFM68K�DLL Classic Debug:FTP Panel�DLL Classic Debug:Java Command Line�DLL Classic Debug:Java Language�DLL Classic Debug:Java MRJAppBuilder�DLL Classic Debug:Java Output�DLL Classic Debug:Java Project�DLL Classic Debug:JavaDoc Project�DLL Classic Debug:MacOS Merge Panel�DLL Classic Debug:Output Flags�DLL Classic Debug:Packager Panel�DLL Classic Debug:PPC CodeGen�DLL Classic Debug:PPC Disassembler�DLL Classic Debug:PPC Global Optimizer�DLL Classic Debug:PPC Linker�DLL Classic Debug:PPC PEF�DLL Classic Debug:PPC Project�DLL Classic Debug:PPCAsm Panel�DLL Classic Debug:Rez Compiler�DLL Classic Debug:WinRC Compiler�DLL Classic Debug:x86 CodeGen�DLL Classic Debug:x86 Disassembler�DLL Classic Debug:x86 Exceptions Panel�DLL Classic Debug:x86 Global Optimizer�DLL Classic Debug:x86 Linker�DLL Classic Debug:x86 Project�DLL Carbon Debug:Source Trees�DLL Carbon Debug:Access Paths�DLL Carbon Debug:Debugger Runtime�DLL Carbon Debug:Target Settings�DLL Carbon Debug:File Mappings�DLL Carbon Debug:Build Extras�DLL Carbon Debug:Debugger Target�DLL Carbon Debug:Remote Debug�DLL Carbon Debug:Auto-target�DLL Carbon Debug:Custom Keywords�DLL Carbon Debug:68K CodeGen�DLL Carbon Debug:68K Disassembler�DLL Carbon Debug:68K Global Optimizer�DLL Carbon Debug:68K Linker�DLL Carbon Debug:68K Project�DLL Carbon Debug:C/C++ Compiler�DLL Carbon Debug:C/C++ Warnings�DLL Carbon Debug:CFM68K�DLL Carbon Debug:FTP Panel�DLL Carbon Debug:Java Command Line�DLL Carbon Debug:Java Language�DLL Carbon Debug:Java MRJAppBuilder�DLL Carbon Debug:Java Output�DLL Carbon Debug:Java Project�DLL Carbon Debug:JavaDoc Project�DLL Carbon Debug:MacOS Merge Panel�DLL Carbon Debug:Output Flags�DLL Carbon Debug:Packager Panel�DLL Carbon Debug:PPC CodeGen�DLL Carbon Debug:PPC Disassembler�DLL Carbon Debug:PPC Global Optimizer�DLL Carbon Debug:PPC Linker�DLL Carbon Debug:PPC PEF�DLL Carbon Debug:PPC Project�DLL Carbon Debug:PPCAsm Panel�DLL Carbon Debug:Rez Compiler�DLL Carbon Debug:WinRC Compiler�DLL Carbon Debug:x86 CodeGen�DLL Carbon Debug:x86 Disassembler�DLL Carbon Debug:x86 Exceptions Panel�DLL Carbon Debug:x86 Global Optimizer�DLL Carbon Debug:x86 Linker�DLL Carbon Debug:x86 Project�Encoder DLL Classic Debug:Source Trees�Encoder DLL Classic Debug:Access Paths�Encoder DLL Classic Debug:Debugger Runtime�Encoder DLL Classic Debug:Target Settings�Encoder DLL Classic Debug:File Mappings�Encoder DLL Classic Debug:Build Extras�Encoder DLL Classic Debug:Debugger Target�Encoder DLL Classic Debug:Remote Debug�Encoder DLL Classic Debug:Auto-target�Encoder DLL Classic Debug:Custom Keywords�Encoder DLL Classic Debug:68K CodeGen�Encoder DLL Classic Debug:68K Disassembler�Encoder DLL Classic Debug:68K Global Optimizer�Encoder DLL Classic Debug:68K Linker�Encoder DLL Classic Debug:68K Project�Encoder DLL Classic Debug:C/C++ Compiler�Encoder DLL Classic Debug:C/C++ Warnings�Encoder DLL Classic Debug:CFM68K�Encoder DLL Classic Debug:FTP Panel�Encoder DLL Classic Debug:Java Command Line�Encoder DLL Classic Debug:Java Language�Encoder DLL Classic Debug:Java MRJAppBuilder�Encoder DLL Classic Debug:Java Output�Encoder DLL Classic Debug:Java Project�Encoder DLL Classic Debug:JavaDoc Project�Encoder DLL Classic Debug:MacOS Merge Panel�Encoder DLL Classic Debug:Output Flags�Encoder DLL Classic Debug:Packager Panel�Encoder DLL Classic Debug:PPC CodeGen�Encoder DLL Classic Debug:PPC Disassembler�Encoder DLL Classic Debug:PPC Global Optimizer�Encoder DLL Classic Debug:PPC Linker�Encoder DLL Classic Debug:PPC PEF�Encoder DLL Classic Debug:PPC Project�Encoder DLL Classic Debug:PPCAsm Panel�Encoder DLL Classic Debug:Rez Compiler�Encoder DLL Classic Debug:WinRC Compiler�Encoder DLL Classic Debug:x86 CodeGen�Encoder DLL Classic Debug:x86 Disassembler�Encoder DLL Classic Debug:x86 Exceptions Panel�Encoder DLL Classic Debug:x86 Global Optimizer�Encoder DLL Classic Debug:x86 Linker�Encoder DLL Classic Debug:x86 Project�Encoder DLL Carbon Debug:Source Trees�Encoder DLL Carbon Debug:Access Paths�Encoder DLL Carbon Debug:Debugger Runtime�Encoder DLL Carbon Debug:Target Settings�Encoder DLL Carbon Debug:File Mappings�Encoder DLL Carbon Debug:Build Extras�Encoder DLL Carbon Debug:Debugger Target�Encoder DLL Carbon Debug:Remote Debug�Encoder DLL Carbon Debug:Auto-target�Encoder DLL Carbon Debug:Custom Keywords�Encoder DLL Carbon Debug:68K CodeGen�Encoder DLL Carbon Debug:68K Disassembler�Encoder DLL Carbon Debug:68K Global Optimizer�Encoder DLL Carbon Debug:68K Linker�Encoder DLL Carbon Debug:68K Project�Encoder DLL Carbon Debug:C/C++ Compiler�Encoder DLL Carbon Debug:C/C++ Warnings�Encoder DLL Carbon Debug:CFM68K�Encoder DLL Carbon Debug:FTP Panel�Encoder DLL Carbon Debug:Java Command Line�Encoder DLL Carbon Debug:Java Language�Encoder DLL Carbon Debug:Java MRJAppBuilder�Encoder DLL Carbon Debug:Java Output�Encoder DLL Carbon Debug:Java Project�Encoder DLL Carbon Debug:JavaDoc Project�Encoder DLL Carbon Debug:MacOS Merge Panel�Encoder DLL Carbon Debug:Output Flags�Encoder DLL Carbon Debug:Packager Panel�Encoder DLL Carbon Debug:PPC CodeGen�Encoder DLL Carbon Debug:PPC Disassembler�Encoder DLL Carbon Debug:PPC Global Optimizer�Encoder DLL Carbon Debug:PPC Linker�Encoder DLL Carbon Debug:PPC PEF�Encoder DLL Carbon Debug:PPC Project�Encoder DLL Carbon Debug:PPCAsm Panel�Encoder DLL Carbon Debug:Rez Compiler�Encoder DLL Carbon Debug:WinRC Compiler�Encoder DLL Carbon Debug:x86 CodeGen�Encoder DLL Carbon Debug:x86 Disassembler�Encoder DLL Carbon Debug:x86 Exceptions Panel�Encoder DLL Carbon Debug:x86 Global Optimizer�Encoder DLL Carbon Debug:x86 Linker�Encoder DLL Carbon Debug:x86 Project�Encoder DLL Classic Final:Source Trees�Encoder DLL Classic Final:Access Paths�Encoder DLL Classic Final:Debugger Runtime�Encoder DLL Classic Final:Target Settings�Encoder DLL Classic Final:File Mappings�Encoder DLL Classic Final:Build Extras�Encoder DLL Classic Final:Debugger Target�Encoder DLL Classic Final:Remote Debug�Encoder DLL Classic Final:Auto-target�Encoder DLL Classic Final:Custom Keywords�Encoder DLL Classic Final:68K CodeGen�Encoder DLL Classic Final:68K Disassembler�Encoder DLL Classic Final:68K Global Optimizer�Encoder DLL Classic Final:68K Linker�Encoder DLL Classic Final:68K Project�Encoder DLL Classic Final:C/C++ Compiler�Encoder DLL Classic Final:C/C++ Warnings�Encoder DLL Classic Final:CFM68K�Encoder DLL Classic Final:FTP Panel�Encoder DLL Classic Final:Java Command Line�Encoder DLL Classic Final:Java Language�Encoder DLL Classic Final:Java MRJAppBuilder�Encoder DLL Classic Final:Java Output�Encoder DLL Classic Final:Java Project�Encoder DLL Classic Final:JavaDoc Project�Encoder DLL Classic Final:MacOS Merge Panel�Encoder DLL Classic Final:Output Flags�Encoder DLL Classic Final:Packager Panel�Encoder DLL Classic Final:PPC CodeGen�Encoder DLL Classic Final:PPC Disassembler�Encoder DLL Classic Final:PPC Global Optimizer�Encoder DLL Classic Final:PPC Linker�Encoder DLL Classic Final:PPC PEF�Encoder DLL Classic Final:PPC Project�Encoder DLL Classic Final:PPCAsm Panel�Encoder DLL Classic Final:Rez Compiler�Encoder DLL Classic Final:WinRC Compiler�Encoder DLL Classic Final:x86 CodeGen�Encoder DLL Classic Final:x86 Disassembler�Encoder DLL Classic Final:x86 Exceptions Panel�Encoder DLL Classic Final:x86 Global Optimizer�Encoder DLL Classic Final:x86 Linker�Encoder DLL Classic Final:x86 Project�Encoder DLL Carbon Final:Source Trees�Encoder DLL Carbon Final:Access Paths�Encoder DLL Carbon Final:Debugger Runtime�Encoder DLL Carbon Final:Target Settings�Encoder DLL Carbon Final:File Mappings�Encoder DLL Carbon Final:Build Extras�Encoder DLL Carbon Final:Debugger Target�Encoder DLL Carbon Final:Remote Debug�Encoder DLL Carbon Final:Auto-target�Encoder DLL Carbon Final:Custom Keywords�Encoder DLL Carbon Final:68K CodeGen�Encoder DLL Carbon Final:68K Disassembler�Encoder DLL Carbon Final:68K Global Optimizer�Encoder DLL Carbon Final:68K Linker�Encoder DLL Carbon Final:68K Project�Encoder DLL Carbon Final:C/C++ Compiler�Encoder DLL Carbon Final:C/C++ Warnings�Encoder DLL Carbon Final:CFM68K�Encoder DLL Carbon Final:FTP Panel�Encoder DLL Carbon Final:Java Command Line�Encoder DLL Carbon Final:Java Language�Encoder DLL Carbon Final:Java MRJAppBuilder�Encoder DLL Carbon Final:Java Output�Encoder DLL Carbon Final:Java Project�Encoder DLL Carbon Final:JavaDoc Project�Encoder DLL Carbon Final:MacOS Merge Panel�Encoder DLL Carbon Final:Output Flags�Encoder DLL Carbon Final:Packager Panel�Encoder DLL Carbon Final:PPC CodeGen�Encoder DLL Carbon Final:PPC Disassembler�Encoder DLL Carbon Final:PPC Global Optimizer�Encoder DLL Carbon Final:PPC Linker�Encoder DLL Carbon Final:PPC PEF�Encoder DLL Carbon Final:PPC Project�Encoder DLL Carbon Final:PPCAsm Panel�Encoder DLL Carbon Final:Rez Compiler�Encoder DLL Carbon Final:WinRC Compiler�Encoder DLL Carbon Final:x86 CodeGen�Encoder DLL Carbon Final:x86 Disassembler�Encoder DLL Carbon Final:x86 Exceptions Panel�Encoder DLL Carbon Final:x86 Global Optimizer�Encoder DLL Carbon Final:x86 Linker�Encoder DLL Carbon Final:x86 Project�Minimal DLL Classic Debug:Source Trees�Minimal DLL Classic Debug:Access Paths�Minimal DLL Classic Debug:Debugger Runtime�Minimal DLL Classic Debug:Target Settings�Minimal DLL Classic Debug:File Mappings�Minimal DLL Classic Debug:Build Extras�Minimal DLL Classic Debug:Debugger Target�Minimal DLL Classic Debug:Remote Debug�Minimal DLL Classic Debug:Auto-target�Minimal DLL Classic Debug:Custom Keywords�Minimal DLL Classic Debug:68K CodeGen�Minimal DLL Classic Debug:68K Disassembler�Minimal DLL Classic Debug:68K Global Optimizer�Minimal DLL Classic Debug:68K Linker�Minimal DLL Classic Debug:68K Project�Minimal DLL Classic Debug:C/C++ Compiler�Minimal DLL Classic Debug:C/C++ Warnings�Minimal DLL Classic Debug:CFM68K�Minimal DLL Classic Debug:FTP Panel�Minimal DLL Classic Debug:Java Command Line�Minimal DLL Classic Debug:Java Language�Minimal DLL Classic Debug:Java MRJAppBuilder�Minimal DLL Classic Debug:Java Output�Minimal DLL Classic Debug:Java Project�Minimal DLL Classic Debug:JavaDoc Project�Minimal DLL Classic Debug:MacOS Merge Panel�Minimal DLL Classic Debug:Output Flags�Minimal DLL Classic Debug:Packager Panel�Minimal DLL Classic Debug:PPC CodeGen�Minimal DLL Classic Debug:PPC Disassembler�Minimal DLL Classic Debug:PPC Global Optimizer�Minimal DLL Classic Debug:PPC Linker�Minimal DLL Classic Debug:PPC PEF�Minimal DLL Classic Debug:PPC Project�Minimal DLL Classic Debug:PPCAsm Panel�Minimal DLL Classic Debug:Rez Compiler�Minimal DLL Classic Debug:WinRC Compiler�Minimal DLL Classic Debug:x86 CodeGen�Minimal DLL Classic Debug:x86 Disassembler�Minimal DLL Classic Debug:x86 Exceptions Panel�Minimal DLL Classic Debug:x86 Global Optimizer�Minimal DLL Classic Debug:x86 Linker�Minimal DLL Classic Debug:x86 Project�Minimal DLL Carbon Debug:Source Trees�Minimal DLL Carbon Debug:Access Paths�Minimal DLL Carbon Debug:Debugger Runtime�Minimal DLL Carbon Debug:Target Settings�Minimal DLL Carbon Debug:File Mappings�Minimal DLL Carbon Debug:Build Extras�Minimal DLL Carbon Debug:Debugger Target�Minimal DLL Carbon Debug:Remote Debug�Minimal DLL Carbon Debug:Auto-target�Minimal DLL Carbon Debug:Custom Keywords�Minimal DLL Carbon Debug:68K CodeGen�Minimal DLL Carbon Debug:68K Disassembler�Minimal DLL Carbon Debug:68K Global Optimizer�Minimal DLL Carbon Debug:68K Linker�Minimal DLL Carbon Debug:68K Project�Minimal DLL Carbon Debug:C/C++ Compiler�Minimal DLL Carbon Debug:C/C++ Warnings�Minimal DLL Carbon Debug:CFM68K�Minimal DLL Carbon Debug:FTP Panel�Minimal DLL Carbon Debug:Java Command Line�Minimal DLL Carbon Debug:Java Language�Minimal DLL Carbon Debug:Java MRJAppBuilder�Minimal DLL Carbon Debug:Java Output�Minimal DLL Carbon Debug:Java Project�Minimal DLL Carbon Debug:JavaDoc Project�Minimal DLL Carbon Debug:MacOS Merge Panel�Minimal DLL Carbon Debug:Output Flags�Minimal DLL Carbon Debug:Packager Panel�Minimal DLL Carbon Debug:PPC CodeGen�Minimal DLL Carbon Debug:PPC Disassembler�Minimal DLL Carbon Debug:PPC Global Optimizer�Minimal DLL Carbon Debug:PPC Linker�Minimal DLL Carbon Debug:PPC PEF�Minimal DLL Carbon Debug:PPC Project�Minimal DLL Carbon Debug:PPCAsm Panel�Minimal DLL Carbon Debug:Rez Compiler�Minimal DLL Carbon Debug:WinRC Compiler�Minimal DLL Carbon Debug:x86 CodeGen�Minimal DLL Carbon Debug:x86 Disassembler�Minimal DLL Carbon Debug:x86 Exceptions Panel�Minimal DLL Carbon Debug:x86 Global Optimizer�Minimal DLL Carbon Debug:x86 Linker�Minimal DLL Carbon Debug:x86 Project�Minimal DLL Classic Final:Source Trees�Minimal DLL Classic Final:Access Paths�Minimal DLL Classic Final:Debugger Runtime�Minimal DLL Classic Final:Target Settings�Minimal DLL Classic Final:File Mappings�Minimal DLL Classic Final:Build Extras�Minimal DLL Classic Final:Debugger Target�Minimal DLL Classic Final:Remote Debug�Minimal DLL Classic Final:Auto-target�Minimal DLL Classic Final:Custom Keywords�Minimal DLL Classic Final:68K CodeGen�Minimal DLL Classic Final:68K Disassembler�Minimal DLL Classic Final:68K Global Optimizer�Minimal DLL Classic Final:68K Linker�Minimal DLL Classic Final:68K Project�Minimal DLL Classic Final:C/C++ Compiler�Minimal DLL Classic Final:C/C++ Warnings�Minimal DLL Classic Final:CFM68K�Minimal DLL Classic Final:FTP Panel�Minimal DLL Classic Final:Java Command Line�Minimal DLL Classic Final:Java Language�Minimal DLL Classic Final:Java MRJAppBuilder�Minimal DLL Classic Final:Java Output�Minimal DLL Classic Final:Java Project�Minimal DLL Classic Final:JavaDoc Project�Minimal DLL Classic Final:MacOS Merge Panel�Minimal DLL Classic Final:Output Flags�Minimal DLL Classic Final:Packager Panel�Minimal DLL Classic Final:PPC CodeGen�Minimal DLL Classic Final:PPC Disassembler�Minimal DLL Classic Final:PPC Global Optimizer�Minimal DLL Classic Final:PPC Linker�Minimal DLL Classic Final:PPC PEF�Minimal DLL Classic Final:PPC Project�Minimal DLL Classic Final:PPCAsm Panel�Minimal DLL Classic Final:Rez Compiler�Minimal DLL Classic Final:WinRC Compiler�Minimal DLL Classic Final:x86 CodeGen�Minimal DLL Classic Final:x86 Disassembler�Minimal DLL Classic Final:x86 Exceptions Panel�Minimal DLL Classic Final:x86 Global Optimizer�Minimal DLL Classic Final:x86 Linker�Minimal DLL Classic Final:x86 Project�Minimal DLL Carbon Final:Source Trees�Minimal DLL Carbon Final:Access Paths�Minimal DLL Carbon Final:Debugger Runtime�Minimal DLL Carbon Final:Target Settings�Minimal DLL Carbon Final:File Mappings�Minimal DLL Carbon Final:Build Extras�Minimal DLL Carbon Final:Debugger Target�Minimal DLL Carbon Final:Remote Debug�Minimal DLL Carbon Final:Auto-target�Minimal DLL Carbon Final:Custom Keywords�Minimal DLL Carbon Final:68K CodeGen�Minimal DLL Carbon Final:68K Disassembler�Minimal DLL Carbon Final:68K Global Optimizer�Minimal DLL Carbon Final:68K Linker�Minimal DLL Carbon Final:68K Project�Minimal DLL Carbon Final:C/C++ Compiler�Minimal DLL Carbon Final:C/C++ Warnings�Minimal DLL Carbon Final:CFM68K�Minimal DLL Carbon Final:FTP Panel�Minimal DLL Carbon Final:Java Command Line�Minimal DLL Carbon Final:Java Language�Minimal DLL Carbon Final:Java MRJAppBuilder�Minimal DLL Carbon Final:Java Output�Minimal DLL Carbon Final:Java Project�Minimal DLL Carbon Final:JavaDoc Project�Minimal DLL Carbon Final:MacOS Merge Panel�Minimal DLL Carbon Final:Output Flags�Minimal DLL Carbon Final:Packager Panel�Minimal DLL Carbon Final:PPC CodeGen�Minimal DLL Carbon Final:PPC Disassembler�Minimal DLL Carbon Final:PPC Global Optimizer�Minimal DLL Carbon Final:PPC Linker�Minimal DLL Carbon Final:PPC PEF�Minimal DLL Carbon Final:PPC Project�Minimal DLL Carbon Final:PPCAsm Panel�Minimal DLL Carbon Final:Rez Compiler�Minimal DLL Carbon Final:WinRC Compiler�Minimal DLL Carbon Final:x86 CodeGen�Minimal DLL Carbon Final:x86 Disassembler�Minimal DLL Carbon Final:x86 Exceptions Panel�Minimal DLL Carbon Final:x86 Global Optimizer�Minimal DLL Carbon Final:x86 Linker�Minimal DLL Carbon Final:x86 Project�����������������������������������������������������������������������������������������������������������â(��„�mstr��������������(��+€mstl��������������,¨��€mstn��������������J�� �mstr��è����������;(���mstl��è����������V���mstn��è����������A(���mtpl�������������F(���€mtps�������������F¨���mtpi�������������F¸���`mtlo�������������Ž��� mtsl�������������yI���mtpl�������������G���€mtps�������������G˜���mtpi�������������G¨���`mtlo�������������Ý*��� mtsl�������������J���mtpl�������������H���€mtps�������������Hˆ���mtpi�������������H˜���`mtlo������������J��� mtsl�������������ˆ.���mtpl�������������Hø���€mtps�������������Ix���mtpi�������������e���`mtlo������������OÞ��� mtsl������������`È��dmtgl��è����������Iˆ���moti��������������X���PLst�‡9Z���ý�����ßL��,mpsi��è����������I ���(msti��è����������IÈ���(msti��������������kB���mall�������������Hè���¤mapl�������������Øö���pref�Gqƒ���þ�����çL���^pref�HÝ���ÿ����� ���¤pref�GmX��������Ù ���pref�GÚå�������®���^pref�GËÑ������� ���¤pref�GÏï�������Ù"���pref�Gwµ�������°���^pref�H 9����������¤pref�Grb�������çª���pref�GÖ¡�������²���^pref�Gá™����������¤pref�H d�� �����çÀ���pref�GÍO�� �����´���^pref�H;¢�� ��������¤pref�GGD�� �����éø���pref�H(�� �����¶���^pref�H+����������¤pref�GÀ1�������ê���pref�GÄ�������¸���^pref�Hô����������¤pref�H<0��������a‹���pref�ûŠD��ò������âˆ�� ˆpref�û]÷��ó������í��pref�ûí¡��ô������ò ��pref�ûÓÅ��õ�����ê$��!pref�ûBŒ��ö������a“��pref�ü t��÷������ø4�� pref�ûE��ø������ûT��pref�ûrˆ��ù������J���pref�ûT9��ú������bš���pref�û‚c��û������b´���pref�û>x��ü������bÈ��� pref�û/��ý������bÒ��� pref�ûAà��þ������bÞ���pref�û÷Ï��ÿ������cÿ��pref�ûí–���������h¼���>pref�ûåþ��������bì���pref�ûfP��������Ù¢��Úpref�ûå0�������[:��Žpref�ûw�������Oþ��pref�û`��������wÐ��pref�ûÊ�������º��Üpref�û0Ø��������jb���2pref�ûjŸ������� &��€pref�ûÏ �� �����áê��pref�ûß©�� ������j”���bpref�û…�� ������.���Øpref�ûÑ�� �����/–��pref�ü‘�� ������e���pref�ûö��������bú��� pref�û)S��������f¤��� pref�ûáy��������Ô‹���Êpref�û‹º��������ÝJ��pref�û?C��������ÕU���¨pref�ûâ��������jö���.pref�ûP6�������J(�� pref�û³×��������u¨���"pref�û«*��������j(���pref�û%z��������k$���pref�ûJ��������xà���pref�ûhø��������f°��� pref�û+��������Û|���’pref�û‚��������‡¦���jpref�ûg6��������ai���pref�û`�������¾�� ˆpref�û'Í�������F��pref�ûgœ�������V��pref�ûº¯�� �����j��!pref�û³R��!������e��pref�û «��"������Ž5�� pref�û'Q��#������ß‚��pref�û‹Ï��$������Ið���pref�û$¼��%������aq���pref�ük��&������c]���pref�û€y��'������cq��� pref�ûá"��(������c{��� pref�ûÜ>��)������c‡���pref�ûÌæ��*������hú��pref�û_Ì��+������c•���>pref�ûšâ��,������cÓ���pref�ûà��-������s¨��Úpref�ûŠ��.�����5ª��Žpref�û]��/�����¦��pref�ûƒ��0������uÊ��pref�ûÇl��1�����;8��Üpref�ûï��2������vÚ���2pref�û4ß��3�����K��€pref�ûŠ~��4�����=l��pref�û³#��5������w ���bpref�ûF]��6������‘U���Øpref�ûè§��7�����S”��pref�û|Ê��8������cá���pref�ü´��9������cõ��� pref�û4@��:������f†��� pref�û²Y��;������’-���Êpref�û€t��<������Ñ•��pref�û¯��=������~I���¨pref�ûÙ1��>������wn���.pref�û¡Û��?������×v�� pref�ûƒÅ��@������u‚���"pref�ûzŽ��A������j����pref�ûpi��B������f’���pref�ûWÝ��C������j<���pref�ûÊÑ��D������k6��� pref�ûçÈ��E������Ò­���’pref�ûZk��F������„J���jpref�û”¥��G������\®���pref�ü3��H������’÷�� ˆpref�ûå-��I������kJ��pref�ûbž��J��������pref�ûÂÀ��K������£“��!pref�üCˆ��L������\¶��pref�ûÿƒ��M������]½�� pref�ü3 ��N������pZ��pref�ûÒÎ��O������`Ý���pref�ü$��P������`á���pref�üDÞ��Q������`û���pref�û‘ù��R������a��� pref�ûê·��S������a��� pref�ûÖ��T������a%���pref�ü@��U������…$��pref�ûò_��V������c���>pref�û{§��W������a3���pref�ûpª��X������Ä•��Úpref�ûù»��Y������Æo��Žpref�û·^��Z������Ëý��pref�û¹÷��[������†*��pref�û[X��\�����DZ��Üpref�û_U��]������s`���2pref�üF��^�����Ù¨��€pref�ûÈ“��_������þZ��pref�û¢ƒ��`������„´���bpref�û¿í��a������Ó?���Øpref�ûÐU��b�����@€��pref�ûÝê��c������aA���pref�û˜Å��d������aU��� pref�üB��e������cB��� pref�ûóè��f������Ü���Êpref�ûl½��g�����n��pref�üDf��h������Þb���¨pref�ûïØ��i������xú���.pref�ûÁt��j�����†�� pref�ûôx��k������wœ���"pref�ûn7��l������s’���pref�ü-µ��m������~ñ���pref�ûÔ��n���������pref�ûZæ��o������cN��� pref�û¹³��p�����’���’pref�ûÉ��q������Ñ���jpref�ûN®��r������Iô���pref�ûY”��s�����i,�� ˆpref�û§¼��t�����U��pref�û¹×��u�����s´��pref�ûuˆ��v�����yÈ��!pref�ûýg��w������ZJ��pref�ü��x�����L4�� pref�ûSÎ��y�����šÊ��pref�û³b��z������Iü���pref�ûzø��{������J����pref�ûÊÅ��|������[Q���pref�ü6��}������[e��� pref�ûÒ ��~������[o��� pref�üß��������[{���pref�ü,È��€������[‰��pref�û“p��������‡:���>pref�ûj��‚������\���pref�ü9¨��ƒ�����F”��Úpref�ü-��„�����Ð��Žpref�ûõ��…�����£^��pref�ûËó��†������Õý��pref�û{g��‡�����¨f��Üpref�ûq±��ˆ������Ô���2pref�ûëC��‰�����¸B��€pref�ü1+��Š�����ÀÂ��pref�û·*��‹������× ���bpref�ûÉ3��Œ�����$���Øpref�ûÖ.�������Ù8��pref�û÷g��Ž������j���pref�ü(%��������\��� pref�ûVF��������jV��� pref�û¼m��‘�����Z���Êpref�ûTL��’�����ÃÖ��pref�ü��“�����ü���¨pref�ûÿâ��”������‡x���.pref�ü��•�����Äî�� pref�ü4Ø��–���������"pref�ûþ£��—������y(���pref�ü-h��˜������w¾���pref�ûš”��™������ˆ���pref�ü��š������y<��� pref�ü b��›�����Æú���’pref�û ��œ������ß ���jpref�û‰ä������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/Precompile_Common.h������������������������������������������������������������������000755 �001751 �001751 �00000004255 07425346435 020430� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Common Precompiled headers for LAME on Macintosh Precompiled header source for building LAME on Macintosh using CodeWarrior. Includes most definitions normally generated by configure in config.h, except for the ones that vary from subproject to subproject */ #define TARGET_MAC_DLL 1 #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif #define HAVE_ALLOCA 1 #define HAVE_LONG_DOUBLE 1 #define STDC_HEADERS 1 #define TIME_WITH_SYS_TIME 1 #define WORDS_BIGENDIAN 1 #define uint8_t UInt8 #define uint16_t UInt16 #define uint32_t UInt32 #define uint64_t unsigned long long #define ieee854_float80_t long double #define ieee754_float64_t double #define ieee754_float32_t float #define SIZEOF_DOUBLE 8 #define SIZEOF_FLOAT 4 #define SIZEOF_INT 4 #define SIZEOF_LONG 4 #define SIZEOF_LONG_LONG 8 #define SIZEOF_SHORT 2 #define SIZEOF_UNSIGNED_INT 4 #define SIZEOF_UNSIGNED_LONG 4 #define SIZEOF_UNSIGNED_LONG_LONG 8 #define SIZEOF_UNSIGNED_SHORT 2 #define HAVE_GETTIMEOFDAY 1 #define HAVE_SOCKET 1 #define HAVE_STRTOL 1 #define HAVE_ERRNO_H 1 #define HAVE_FCNTL_H 1 #define HAVE_LIMITS_H 1 #define HAVE_STRING_H 1 #define HAVE_SYS_TIME_H 1 #define HAVE_UNISTD_H 1 #define PACKAGE "lame" #define VERSION "3.91" #define PROTOTYPES 1 #define HAVE_IEEE854_FLOAT80 1 #define LIMIT_STACK_USAGE 1 // The following definitions have been pulled out to specific targets' // pch files: // LAME_LIBRARY_BUILD 1 for building the DLL // LIBSNDFILE 1 for building with LibSndFile, applies // only to CLI encoder // NOANALYSIS 1 for building without hooks for the // MP3 frame analyzer // HAVE_MPGLIB 1 for building with MP3 decoding library. // Note MPGLIB, unlike LAME itself, is // GPL as opposed to LGPL and thus unsuitable // for compilation into a DLL that would be used // from a closed-source app. // USE_LAYER_1 1 for building layer-1 decoding into MPGLIB // USE_LAYER_2 1 for building layer-2 decoding into MPGLIB // HAVE_VORBIS 1 for building vorbis support // NDEBUG 1 for building with debug info // BRHIST 1 for histogram display in CLI encoder #define HAVE_TERMCAP 1 #include <MacTypes.h> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/mac/Makefile.in��������������������������������������������������������������������������000644 �001751 �001751 �00000031400 13170220146 016662� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = mac ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ .DS_Store \ LAME.mcp \ LAME_Carbon_Debug.pch \ LAME_Carbon_Final.pch \ LAME_Classic_Debug.pch \ LAME_Classic_Final.pch \ MacDLLMain.c \ Precompile_Common.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mac/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mac/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Dll/BladeMP3EncDLL.def�������������������������������������������������������������������000644 �001751 �001751 �00000001411 07571717355 017605� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������LIBRARY lame_enc.DLL EXPORTS beInitStream @1 beEncodeChunk @2 beDeinitStream @3 beCloseStream @4 beVersion @5 beWriteVBRHeader @6 beEncodeChunkFloatS16NI @7 beFlushNoGap @8 beWriteInfoTag @9 lame_init @100 lame_close @101 lame_init_params @102 lame_encode_buffer_interleaved @110 lame_encode_flush @120 lame_mp3_tags_fid @130 lame_set_num_samples @1000 lame_get_num_samples @1001 lame_set_in_samplerate @1002 lame_get_in_samplerate @1003 lame_set_num_channels @1004 lame_get_num_channels @1005 lame_set_scale @1006 lame_get_scale @1007 lame_set_scale_left @1008 lame_get_scale_left @1009 lame_set_scale_right @1010 lame_get_scale_right @1011 lame_set_out_samplerate @1012 lame_get_out_samplerate @1013 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Dll/Makefile.in��������������������������������������������������������������������������000644 �001751 �001751 �00000031350 13170220146 016641� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Dll ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = BladeMP3EncDLL.c \ BladeMP3EncDLL.def \ BladeMP3EncDLL.h \ Example.cpp \ LameDLLInterface.htm \ MP3export.pas \ Makefile.mingw32 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Dll/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Dll/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/Dll/LameDLLInterface.htm�����������������������������������������������������������������000644 �001751 �001751 �00000060243 07522570434 020360� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> <title>Lame-

 

Lame-enc DLL
Interface version 1.32 (and above)
(Lame engine version: 3.93 or higher)
Programmers Manual

The lame_enc.dll and this manual is copyright by Albert L Faber
Originally the the DLL interface is modeled after the BladeEnc DLL interface
which is copyrighted by Tord Jansson and Jukka Poikolainen
This document and the DLL interface may be distributed freely

as long as modifications are released under the LGPL license.

 

Homepage: http://www.cdex.n3.net
E-mail: mailto: afaber@users.sourceforge.net





Distribution

People and companies  who wants to distribute lame_enc.dll with their commercial products are free to do so as far as I'm concerned (LGPL license), but should be aware that lame_enc.dll might infringe certain MP3 related software patents held by Fraunhofer IIS in certain countries.


 

Disclaimer

lame_enc.dll and this manual is distributed 'as is' with no warranty of any kind. The Author is not to be held responsible for the result of any use or misuse of this product.
 
 

Current Bugs and Limitations

Although the interface is designed to be able to handle multiple parallel streams it can't be done yet due to limitations in the engine, only one stream is allowed.
 

Future Compatibility

This interface should be compatible with all future versions of lame_enc.DLL without any need to recompile your programs. You should therefore not check the version number upon start and prevent users from running your program with a later version of lame_enc.DLL.
 


How to use the DLL

1. Fill in a BE_CONFIG structure and send it to beInitStream(). Make sure that BE_ERR_SUCCESSFUL is returned.

2. Reserve at least the amount of memory returned in dwBufferSize as your output buffer.

3. Call beEncodeChunk() until you've encoded everything you want.

4. Call beDeinitStream() to make sure that all encoded data is flushed out before closing the stream.

5. Close the stream using beCloseStream()

6. Finally, call the beWriteVBRHeader() functions, to insert the INFO tag MP3 Header. This is an extension of the Xing VBR tag which is also used for CBR encodings. This call can only be omitted if the INFO tag was explicilty disabled in the BE_CONFIG Structure.

A handy feature is the available Lame_enc.dll debug option, which will dump the important lame internal settings to a text file.
 

 

Return Values

See the header-file for a complete list of function return values. All functions should return BE_ERR_SUCCESSFUL unless something went wrong.
 


Type definitions

The DLL is by default compiled with the MS Visual C/C++ compiler, which has the following type definitions:

Type Description
CHAR signed char (8 bits)
BYTE unsigned char (8 bits)
SHORT signed short (16 bits)
WORD unsigned short (16 bits)
INT signed long (32 bits)
LONG signed long (32 bits)
BOOL signed long (32 bits) (YES, 32 bits for a one bit value)
TRUE = 0
FALSE=-1
DWORD unsigned long (32 bits)
FLOAT floating point (32 bits)
DOUBLE float point (64 bits)
LPCSTR const char* (32 bits pointer to zero terminated character string)

Within the lame_enc.dll All the structure elements are one byte alligned (due to backwards compatibility with BladEnc.DLL!

 


The BE_CONFIG Structure

Currently there the BE_CONFIG structure has to varians, the old MP3 config structure that is truly compatible with the old BladeEnc interface, and the new defined LHV1 structure, which can set far more options in the lame encoder

 

The MP3 BE_CONFIG - structure (OBSOLETE)

This is the old structure as it was originally defined by the BladeEnc.DLL interface. However, I do highly recommend to use the new Lame specific config structure, since it gives you more control over the Lame encoder settings.

These are the members of the BE_CONFIG structure you need to fill in before you call beInitStream():
 

dwConfig Specifies what kind of output you want. Since only MP3 currently is supported you must set this to BE_CONFIG_MP3
format.mp3.dwSampleRate      Samplerate in Hz for MP3 file. This can be set to either 32000, 44100 or 48000.
format.mp3.byMode Stereomode for MP3 file. This can be either BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL or BE_MP3_MODE_MONO.
format.mp3.bitrate Bitrate (i.e. size) of MP3 file in kBit/s. Allowed bitrates are: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320.
format.mp3.bCopyright If this is set to TRUE the Copyright bit in the MP3 stream will be set.
format.mp3.bCRC Set this to TRUE in order to enable CRC-checksum in the bitstream.
format.mp3.bOriginal If this is set to TRUE the Original bit in the MP3 stream will be set.
format.mp3.bPrivate If this is set to TRUE the Private bit in the MP3 stream will be set.

 

The LHV1 BE_CONFIG - structure (recommended)

These are the members of the LHV1 BE_CONFIG structure, you need to fill in before you call beInitStream():

dwConfig Specifies what kind of output you want. Since only MP3 currently is supported you must set this to BE_CONFIG_LAME
   
format.LHV1.dwStructVersion Indicates the version number of the structure, current version number is 1
format.LHV1.dwStructSize Specifies the size of the BE_CONFIG structure (currently 331 bytes)
   
format.LHV1.dwSampleRate  Samplerate in Hz for MP3 file. This can be set to either:
32000, 44100 or 48000 for MPEG-I
16000, 22050 or 24000 for MPEG-I
8000, 11025 or 12000 for MPEG-II.5
format.LHV1.dwReSampleRate Specifies to which sample rate the input stream has to be resampled, if set to 0, the encoder will decide which ReSample rate to use
format.LHV1.nMode Stereomode for MP3 file. This can be either BE_MP3_MODE_STEREO, BE_MP3_MODE_JSTEREO, BE_MP3_MODE_DUALCHANNEL or BE_MP3_MODE_MONO.
format.LHV1.dwBitrate For CBR, this specifies the actual bitrate, for VBR, it specifies the minimum bitrate
Allowed bitrates are: 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320.for MPEG-I
Allowed bitrates are: 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144 and 160.for MPEG-II

Note: dwBitrate is used as the minimum bitrate in the case of using a VBR mode.

format.LHV1.dwMaxBitrate When VBR mode is enabled, it specifies the maximum allowed bitrate (see also dwBitrate to specify the minium bitrate), for CBR mode this setting is ignored.
format.LHV1.nPreset Keep in mind that the presets can overwrite some of the other settings, since it is called right before the encoder is initialized
The nPreset option can be set to one of the following presets values::

LQP_NOPRESET (don't use any presets)
LQP_NORMAL_QUALITY (quality is set to 5)
LQP_LOW_QUALITY (quality is set to 9)
LQP_HIGH_QUALITY (quality is set to 2)
LQP_VOICE_QUALITY (use for voice encoding)
LQP_R3MIX (r3mix preset option)
LQP_VERYHIGH_QUALITY (quality is set to 0)
LQP_STANDARD (lame command line alt-preset standard)
LQP_FAST_STANDARD (lame command line alt-preset fast standard)
LQP_EXTREME (lame command line alt-preset extreme)
LQP_FAST_EXTREME (lame command line alt-preset fast extreme)
LQP_INSANE (lame command line alt-preset insane)
LQP_ABR (lame command line alt-preset abr)
LQP_CBR(lame command line alt-preset cbr)

(old lame preset options)
LQP_PHONE
LQP_SW
LQP_AM
LQP_FM
LQP_VOICE
LQP_RADIO
LQP_TAPE
LQP_HIFI
LQP_CD
LQP_STUDIO

 
format.LHV1.bCopyright If this is set to TRUE the Copyright bit in the MP3 stream will be set.
format.LHV1.bCRC Set this to TRUE in order to enable CRC-checksum in the bitstream.
format.LHV1.bOriginal If this is set to TRUE the Original bit in the MP3 stream will be set.
format.LHV1.bPrivate If this is set to TRUE the Private bit in the MP3 stream will be set.
   
format.LHV1.nVbrMethod Sepecifes if the VBR method to use, currently the following settings are supported:

VBR_METHOD_NONE (don't use VBR, use CBR encoding instead),
VBR_METHOD_DEFAULT (default VBR method)
VBR_METHOD_OLD (old VBR method, proven to be reliable)
VBR_METHOD_NEW (new VBR method, faster than VBR_METHOD_OLD)
VBR_METHOD_MTRH (depreciated, same as VBR_METHOD_NEW)
VBR_METHOD_ABR (Average Bitrate Encoding, see also
format.LHV1.dwVbrAbr_bps)

format.LHV1.bWriteVBRHeader Sepecifes if the a XING VBR header should be written or not. When this option is enabled, you have to call the beWriteVBRHeader function when encoding has been completed. Keep in mind that the VBR info tag can also be written for CBR encoded files, the TAG info can be useful for additional info like encoder delay and the like.
format.LHV1.bEnableVBR Specifies if VBR encoding option shall be used or not, possible values are TRUE/FALSE
format.LHV1.nVBRQuality Quality option if VBR is enabled (0=highest quality, 9 is lowest quality)
format.LHV1.dwVbrAbr_bps If the Average Bit Rate is specified, the lame encoder ignores the nVBRQuality settings (However, bEnableVBR must be set to TRUE and the format.LHV1.nVbrMethod parameter should be set to VBR_METHOD_ABR). The allowed range for the format.LHV1.dwVbrAbr_bps parameter any integer value between:

MPEG-I: 32000 .. 320000 bps
MPEG-II: 8000 .. 160000 bps

   
format.LHV1.bNoBitRes Disables the bit-resorvoir and disables the insertion of padded frames
format.LHV1.nQuality Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality is set to 5. This is done to be backward compatible. So to set quality to 3, you have to set the nQuality parameter to 0xFC03.
format.mp3.btReserved For future use, set all elements to zero

 

 


beInitStream()

Synopsis: BE_ERR beInitStream( PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream )
Parameters:
pbeConfig Pointer at the struct containing encoder settings.
dwSamples Pointer at double word where number of samples to send to each beEncodeChunk() is returned.
dwBufferSize Pointer at double word where minimum size in bytes of output buffer is returned.
phbeStream Pointer at integer where Stream handle is returned.
Description: This function is the first to call before starting an encoding stream.

beEncodeChunk()

Synopsis: BE_ERR beEncodeChunk( HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput )
Parameters:
hbeStream Handle of the stream.
nSamples Number of samples to be encoded for this call. This should be identical to what is returned by beInitStream(), unless you are encoding the last chunk, which might be smaller.
pSamples Pointer at the 16-bit signed samples to be encoded. These should be in stereo when encoding a stereo MP3 and mono when encoding a mono MP3.
pOutput Where to write the encoded data. This buffer should be at least of the minimum size returned by beInitStream().
pdwOutput Where to return number of bytes of encoded data written. The amount of data written might vary from chunk to chunk.
Description: Encodes a chunk of samples. Please note that if you have set the output to generate mono MP3 files you must feed beEncodeChunk() with mono samples!

beDeinitStream()

Synopsis: BE_ERR beDeinitStream( HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput )
Parameters:
hbeStream Handle of the stream.
pOutput Where to write the encoded data. This buffer should be at least of the minimum size returned by beInitStream().
pdwOutput Where to return number of bytes of encoded data written.
Description: This function should be called after encoding the last chunk in order to flush the encoder. It writes any encoded data that still might be left inside the encoder to the output buffer. This function should NOT be called unless you have encoded all of the chunks in your stream.

beCloseStream()

Synopsis: BE_ERR beCloseStream( HBE_STREAM hbeStream )
Parameters:
hbeStream Handle of the stream.
Description: Last function to be called when finished encoding a stream. Should unlike beDeinitStream() also be called if the encoding is canceled.

beVersion()

Synopsis: VOID beVersion( PBE_VERSION pbeVersion )
Parameters:
pbeVersion Pointer at struct where version number, release date and URL for homepage is returned.
Description: Returns information like version numbers (both of the DLL and encoding engine), release date and URL for lame_enc's homepage. All this information should be made available to the user of your product through a dialog box or something similar.

 


 

beWriteVBRHeader()

Synopsis: VOID beWriteVBRHeader( LPCSTR pszMP3FileName )
Parameters:
pszMP3FileName Const Pointer zero terminated string, that contains the MP3 file name.
Description: Writes a Xing Header in front of the MP3 file. Make sure that the MP3 file is closed, and the the beConfig.format.LHV1.bWriteVBRHeader has been set to TRUE. In addition, it is always save to call beWriteVBRHeader after the encoding has been finished, even when the beConfig.format.LHV1.bWriteVBRHeader is not set to TRUE

 

 


 

Lame_enc.dll debug option

The lame_enc.dll has a built-in debug option, that dumps all the important internal settings to a text file. To enable this feature, create a text file in the Windows directory which is named lame_enc.ini, and should contain the following two lines

[debug]
WriteLogFile=1

Save this text file, and each time you encode a file, the settings are added to a file name lame_enc.txt, that is located in the same directory as the lame_enc.dll

 


 

lame-3.100/Dll/README000644 001751 001751 00000001171 07143344306 015462 0ustar00netchildnetchild000000 000000 This directory contains a Windows DLL interface to the LAME encoding engine. This DLL is compatible with the BladeEnc.dll. See BladeMP3EncDLL.c for details of the calling sequence, and BladeMP3EncDLL.h for details of the data that must be passed to the DLL. As of yet, there is no other documentation. To use this DLL as a replacement for BladeEnc.dll, you need to populate the 'mp3' struct. To use more advanced features of LAME, you need to populate the LHV1 struct instead. Delphi 4 Users: Gabriel Gélin has contributed a .PAS file, do you can access the DLL from Delphi. See MP3export.pas. lame-3.100/Dll/BladeMP3EncDLL.c000644 001751 001751 00000074533 13167215267 017301 0ustar00netchildnetchild000000 000000 /* * Blade DLL Interface for LAME. * * Copyright (c) 1999 - 2002 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include "BladeMP3EncDLL.h" #include #include #include #ifdef __cplusplus extern "C" { #endif #define Min(A, B) ((A) < (B) ? (A) : (B)) #define Max(A, B) ((A) > (B) ? (A) : (B)) #define _RELEASEDEBUG 0 // lame_enc DLL version number const BYTE MAJORVERSION = 1; const BYTE MINORVERSION = 32; // Local variables static DWORD dwSampleBufferSize=0; static HMODULE gs_hModule=NULL; static BOOL gs_bLogFile=FALSE; static lame_global_flags* gfp_save = NULL; // Local function prototypes static void dump_config( lame_global_flags* gfp ); static void DebugPrintf( const char* pzFormat, ... ); static void DispErr( char const* strErr ); static void PresetOptions( lame_global_flags *gfp, LONG myPreset ); static void DebugPrintf(const char* pzFormat, ...) { char szBuffer[1024]={'\0',}; char szFileName[MAX_PATH+1]={'\0',}; va_list ap; // Get the full module (DLL) file name GetModuleFileNameA( gs_hModule, szFileName, sizeof( szFileName ) ); // change file name extention szFileName[ strlen(szFileName) - 3 ] = 't'; szFileName[ strlen(szFileName) - 2 ] = 'x'; szFileName[ strlen(szFileName) - 1 ] = 't'; // start at beginning of the list va_start(ap, pzFormat); // copy it to the string buffer _vsnprintf(szBuffer, sizeof(szBuffer), pzFormat, ap); // log it to the file? if ( gs_bLogFile ) { FILE* fp = NULL; // try to open the log file fp=fopen( szFileName, "a+" ); // check file open result if (fp) { // write string to the file fputs(szBuffer,fp); // close the file fclose(fp); } } #if defined _DEBUG || defined _RELEASEDEBUG OutputDebugStringA( szBuffer ); #endif va_end(ap); } static void PresetOptions( lame_global_flags *gfp, LONG myPreset ) { switch (myPreset) { /*-1*/case LQP_NOPRESET: break; /*0*/case LQP_NORMAL_QUALITY: /* lame_set_quality( gfp, 5 );*/ break; /*1*/case LQP_LOW_QUALITY: lame_set_quality( gfp, 9 ); break; /*2*/case LQP_HIGH_QUALITY: lame_set_quality( gfp, 2 ); break; /*3*/case LQP_VOICE_QUALITY: // --voice flag for experimental voice mode lame_set_mode( gfp, MONO ); lame_set_preset( gfp, 56); break; /*4*/case LQP_R3MIX: // --R3MIX lame_set_preset( gfp, R3MIX); break; /*5*/case LQP_VERYHIGH_QUALITY: lame_set_quality( gfp, 0 ); break; /*6*/case LQP_STANDARD: // --PRESET STANDARD lame_set_preset( gfp, STANDARD); break; /*7*/case LQP_FAST_STANDARD: // --PRESET FAST STANDARD lame_set_preset( gfp, STANDARD_FAST); break; /*8*/case LQP_EXTREME: // --PRESET EXTREME lame_set_preset( gfp, EXTREME); break; /*9*/case LQP_FAST_EXTREME: // --PRESET FAST EXTREME: lame_set_preset( gfp, EXTREME_FAST); break; /*10*/case LQP_INSANE: // --PRESET INSANE lame_set_preset( gfp, INSANE); break; /*11*/case LQP_ABR: // --PRESET ABR // handled in beInitStream break; /*12*/case LQP_CBR: // --PRESET CBR // handled in beInitStream break; /*13*/case LQP_MEDIUM: // --PRESET MEDIUM lame_set_preset( gfp, MEDIUM); break; /*14*/case LQP_FAST_MEDIUM: // --PRESET FAST MEDIUM lame_set_preset( gfp, MEDIUM_FAST); break; /*1000*/case LQP_PHONE: lame_set_mode( gfp, MONO ); lame_set_preset( gfp, 16); break; /*2000*/case LQP_SW: lame_set_mode( gfp, MONO ); lame_set_preset( gfp, 24); break; /*3000*/case LQP_AM: lame_set_mode( gfp, MONO ); lame_set_preset( gfp, 40); break; /*4000*/case LQP_FM: lame_set_preset( gfp, 112); break; /*5000*/case LQP_VOICE: lame_set_mode( gfp, MONO ); lame_set_preset( gfp, 56); break; /*6000*/case LQP_RADIO: lame_set_preset( gfp, 112); break; /*7000*/case LQP_TAPE: lame_set_preset( gfp, 112); break; /*8000*/case LQP_HIFI: lame_set_preset( gfp, 160); break; /*9000*/case LQP_CD: lame_set_preset( gfp, 192); break; /*10000*/case LQP_STUDIO: lame_set_preset( gfp, 256); break; } } __declspec(dllexport) BE_ERR beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream) { int actual_bitrate; //2001-12-18 BE_CONFIG lameConfig = { 0, }; int nInitReturn = 0; lame_global_flags* gfp = NULL; // Init the global flags structure gfp = lame_init(); *phbeStream = (HBE_STREAM)gfp; // clear out structure memset(&lameConfig,0x00,CURRENT_STRUCT_SIZE); // Check if this is a regular BLADE_ENCODER header if (pbeConfig->dwConfig!=BE_CONFIG_LAME) { int nCRC=pbeConfig->format.mp3.bCRC; int nVBR=(nCRC>>12)&0x0F; // Copy parameter from old Blade structure lameConfig.format.LHV1.dwSampleRate =pbeConfig->format.mp3.dwSampleRate; //for low bitrates, LAME will automatically downsample for better //sound quality. Forcing output samplerate = input samplerate is not a good idea //unless the user specifically requests it: //lameConfig.format.LHV1.dwReSampleRate=pbeConfig->format.mp3.dwSampleRate; lameConfig.format.LHV1.nMode =(pbeConfig->format.mp3.byMode&0x0F); lameConfig.format.LHV1.dwBitrate =pbeConfig->format.mp3.wBitrate; lameConfig.format.LHV1.bPrivate =pbeConfig->format.mp3.bPrivate; lameConfig.format.LHV1.bOriginal =pbeConfig->format.mp3.bOriginal; lameConfig.format.LHV1.bCRC =nCRC&0x01; lameConfig.format.LHV1.bCopyright =pbeConfig->format.mp3.bCopyright; // Fill out the unknowns lameConfig.format.LHV1.dwStructSize=CURRENT_STRUCT_SIZE; lameConfig.format.LHV1.dwStructVersion=CURRENT_STRUCT_VERSION; // Get VBR setting from fourth nibble if ( nVBR>0 ) { lameConfig.format.LHV1.bWriteVBRHeader = TRUE; lameConfig.format.LHV1.bEnableVBR = TRUE; lameConfig.format.LHV1.nVBRQuality = nVBR-1; } // Get Quality from third nibble lameConfig.format.LHV1.nPreset=((nCRC>>8)&0x0F); } else { // Copy the parameters memcpy(&lameConfig,pbeConfig,pbeConfig->format.LHV1.dwStructSize); } // --------------- Set arguments to LAME encoder ------------------------- // Set input sample frequency lame_set_in_samplerate( gfp, lameConfig.format.LHV1.dwSampleRate ); // disable INFO/VBR tag by default. // if this tag is used, the calling program must call beWriteVBRTag() // after encoding. But the original DLL documentation does not // require the // app to call beWriteVBRTag() unless they have specifically // set LHV1.bWriteVBRHeader=TRUE. Thus the default setting should // be disabled. lame_set_bWriteVbrTag( gfp, 0 ); //2001-12-18 Dibrom's ABR preset stuff if(lameConfig.format.LHV1.nPreset == LQP_ABR) // --ALT-PRESET ABR { actual_bitrate = lameConfig.format.LHV1.dwVbrAbr_bps / 1000; // limit range if( actual_bitrate > 320) { actual_bitrate = 320; } if( actual_bitrate < 8 ) { actual_bitrate = 8; } lame_set_preset( gfp, actual_bitrate ); } // end Dibrom's ABR preset 2001-12-18 ****** START OF CBR if(lameConfig.format.LHV1.nPreset == LQP_CBR) // --ALT-PRESET CBR { actual_bitrate = lameConfig.format.LHV1.dwBitrate; lame_set_preset(gfp, actual_bitrate); lame_set_VBR(gfp, vbr_off); } // end Dibrom's CBR preset 2001-12-18 // The following settings only used when preset is not one of the LAME QUALITY Presets if ( (int)lameConfig.format.LHV1.nPreset < (int) LQP_STANDARD ) { switch ( lameConfig.format.LHV1.nMode ) { case BE_MP3_MODE_STEREO: lame_set_mode( gfp, STEREO ); lame_set_num_channels( gfp, 2 ); break; case BE_MP3_MODE_JSTEREO: lame_set_mode( gfp, JOINT_STEREO ); //lame_set_force_ms( gfp, bForceMS ); // no check box to force this? lame_set_num_channels( gfp, 2 ); break; case BE_MP3_MODE_MONO: lame_set_mode( gfp, MONO ); lame_set_num_channels( gfp, 1 ); break; case BE_MP3_MODE_DUALCHANNEL: lame_set_mode( gfp, DUAL_CHANNEL ); lame_set_num_channels( gfp, 2 ); break; default: { DebugPrintf("Invalid lameConfig.format.LHV1.nMode, value is %d\n",lameConfig.format.LHV1.nMode); return BE_ERR_INVALID_FORMAT_PARAMETERS; } } if ( lameConfig.format.LHV1.bEnableVBR ) { /* set VBR quality */ lame_set_VBR_q( gfp, lameConfig.format.LHV1.nVBRQuality ); /* select proper VBR method */ switch ( lameConfig.format.LHV1.nVbrMethod) { case VBR_METHOD_NONE: lame_set_VBR( gfp, vbr_off ); break; case VBR_METHOD_DEFAULT: lame_set_VBR( gfp, vbr_default ); break; case VBR_METHOD_OLD: lame_set_VBR( gfp, vbr_rh ); break; case VBR_METHOD_MTRH: case VBR_METHOD_NEW: /* * the --vbr-mtrh commandline switch is obsolete. * now --vbr-mtrh is known as --vbr-new */ lame_set_VBR( gfp, vbr_mtrh ); break; case VBR_METHOD_ABR: lame_set_VBR( gfp, vbr_abr ); break; default: /* unsupported VBR method */ assert( FALSE ); } } else { /* use CBR encoding method, so turn off VBR */ lame_set_VBR( gfp, vbr_off ); } /* Set bitrate. (CDex users always specify bitrate=Min bitrate when using VBR) */ lame_set_brate( gfp, lameConfig.format.LHV1.dwBitrate ); /* check if we have to use ABR, in order to backwards compatible, this * condition should still be checked indepedent of the nVbrMethod method */ if (lameConfig.format.LHV1.dwVbrAbr_bps > 0 ) { /* set VBR method to ABR */ lame_set_VBR( gfp, vbr_abr ); /* calculate to kbps, round to nearest kbps */ lame_set_VBR_mean_bitrate_kbps( gfp, ( lameConfig.format.LHV1.dwVbrAbr_bps + 500 ) / 1000 ); /* limit range */ if( lame_get_VBR_mean_bitrate_kbps( gfp ) > 320) { lame_set_VBR_mean_bitrate_kbps( gfp, 320 ); } if( lame_get_VBR_mean_bitrate_kbps( gfp ) < 8 ) { lame_set_VBR_mean_bitrate_kbps( gfp, 8 ); } } } // First set all the preset options if ( LQP_NOPRESET != lameConfig.format.LHV1.nPreset ) { PresetOptions( gfp, lameConfig.format.LHV1.nPreset ); } // Set frequency resampling rate, if specified if ( lameConfig.format.LHV1.dwReSampleRate > 0 ) { lame_set_out_samplerate( gfp, lameConfig.format.LHV1.dwReSampleRate ); } switch ( lameConfig.format.LHV1.nMode ) { case BE_MP3_MODE_MONO: lame_set_mode( gfp, MONO ); lame_set_num_channels( gfp, 1 ); break; default: break; } // Use strict ISO encoding? lame_set_strict_ISO( gfp, ( lameConfig.format.LHV1.bStrictIso ) ? 1 : 0 ); // Set copyright flag? if ( lameConfig.format.LHV1.bCopyright ) { lame_set_copyright( gfp, 1 ); } // Do we have to tag it as non original if ( !lameConfig.format.LHV1.bOriginal ) { lame_set_original( gfp, 0 ); } else { lame_set_original( gfp, 1 ); } // Add CRC? if ( lameConfig.format.LHV1.bCRC ) { lame_set_error_protection( gfp, 1 ); } else { lame_set_error_protection( gfp, 0 ); } // Set private bit? if ( lameConfig.format.LHV1.bPrivate ) { lame_set_extension( gfp, 1 ); } else { lame_set_extension( gfp, 0 ); } // Set VBR min bitrate, if specified if ( lameConfig.format.LHV1.dwBitrate > 0 ) { lame_set_VBR_min_bitrate_kbps( gfp, lameConfig.format.LHV1.dwBitrate ); } // Set Maxbitrate, if specified if ( lameConfig.format.LHV1.dwMaxBitrate > 0 ) { lame_set_VBR_max_bitrate_kbps( gfp, lameConfig.format.LHV1.dwMaxBitrate ); } // Set bit resovoir option if ( lameConfig.format.LHV1.bNoRes ) { lame_set_disable_reservoir( gfp,1 ); } // check if the VBR tag is required if ( lameConfig.format.LHV1.bWriteVBRHeader ) { lame_set_bWriteVbrTag( gfp, 1 ); } else { lame_set_bWriteVbrTag( gfp, 0 ); } // Override Quality setting, use HIGHBYTE = NOT LOWBYTE to be backwards compatible if ( ( lameConfig.format.LHV1.nQuality & 0xFF ) == ((~( lameConfig.format.LHV1.nQuality >> 8 )) & 0xFF) ) { lame_set_quality( gfp, lameConfig.format.LHV1.nQuality & 0xFF ); } if ( 0 != ( nInitReturn = lame_init_params( gfp ) ) ) { return nInitReturn; } //LAME encoding call will accept any number of samples. if ( 0 == lame_get_version( gfp ) ) { // For MPEG-II, only 576 samples per frame per channel *dwSamples= 576 * lame_get_num_channels( gfp ); } else { // For MPEG-I, 1152 samples per frame per channel *dwSamples= 1152 * lame_get_num_channels( gfp ); } // Set the input sample buffer size, so we know what we can expect dwSampleBufferSize = *dwSamples; // Set MP3 buffer size, conservative estimate *dwBufferSize=(DWORD)( 1.25 * ( *dwSamples / lame_get_num_channels( gfp ) ) + 7200 ); // For debugging purposes dump_config( gfp ); // Everything went OK, thus return SUCCESSFUL return BE_ERR_SUCCESSFUL; } __declspec(dllexport) BE_ERR beFlushNoGap(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput) { int nOutputSamples = 0; lame_global_flags* gfp = (lame_global_flags*)hbeStream; // Init the global flags structure nOutputSamples = lame_encode_flush_nogap( gfp, pOutput, LAME_MAXMP3BUFFER ); if ( nOutputSamples < 0 ) { *pdwOutput = 0; return BE_ERR_BUFFER_TOO_SMALL; } else { *pdwOutput = nOutputSamples; } return BE_ERR_SUCCESSFUL; } __declspec(dllexport) BE_ERR beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput) { int nOutputSamples = 0; lame_global_flags* gfp = (lame_global_flags*)hbeStream; nOutputSamples = lame_encode_flush( gfp, pOutput, 0 ); if ( nOutputSamples < 0 ) { *pdwOutput = 0; return BE_ERR_BUFFER_TOO_SMALL; } else { *pdwOutput = nOutputSamples; } return BE_ERR_SUCCESSFUL; } __declspec(dllexport) BE_ERR beCloseStream(HBE_STREAM hbeStream) { lame_global_flags* gfp = (lame_global_flags*)hbeStream; // lame will be close in VbrWriteTag function if ( !lame_get_bWriteVbrTag( gfp ) ) { // clean up of allocated memory lame_close( gfp ); gfp_save = NULL; } else { gfp_save = (lame_global_flags*)hbeStream; } // DeInit encoder return BE_ERR_SUCCESSFUL; } __declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion) { // DLL Release date char lpszDate[20] = { '\0', }; char lpszTemp[5] = { '\0', }; lame_version_t lv = { 0, }; // Set DLL interface version pbeVersion->byDLLMajorVersion=MAJORVERSION; pbeVersion->byDLLMinorVersion=MINORVERSION; get_lame_version_numerical ( &lv ); // Set Engine version number (Same as Lame version) pbeVersion->byMajorVersion = (BYTE)lv.major; pbeVersion->byMinorVersion = (BYTE)lv.minor; pbeVersion->byAlphaLevel = (BYTE)lv.alpha; pbeVersion->byBetaLevel = (BYTE)lv.beta; #ifdef MMX_choose_table pbeVersion->byMMXEnabled=1; #else pbeVersion->byMMXEnabled=0; #endif memset( pbeVersion->btReserved, 0, sizeof( pbeVersion->btReserved ) ); // Get compilation date strcpy(lpszDate,__DATE__); // Get the first three character, which is the month strncpy(lpszTemp,lpszDate,3); lpszTemp[3] = '\0'; pbeVersion->byMonth=1; // Set month if (strcmp(lpszTemp,"Jan")==0) pbeVersion->byMonth = 1; if (strcmp(lpszTemp,"Feb")==0) pbeVersion->byMonth = 2; if (strcmp(lpszTemp,"Mar")==0) pbeVersion->byMonth = 3; if (strcmp(lpszTemp,"Apr")==0) pbeVersion->byMonth = 4; if (strcmp(lpszTemp,"May")==0) pbeVersion->byMonth = 5; if (strcmp(lpszTemp,"Jun")==0) pbeVersion->byMonth = 6; if (strcmp(lpszTemp,"Jul")==0) pbeVersion->byMonth = 7; if (strcmp(lpszTemp,"Aug")==0) pbeVersion->byMonth = 8; if (strcmp(lpszTemp,"Sep")==0) pbeVersion->byMonth = 9; if (strcmp(lpszTemp,"Oct")==0) pbeVersion->byMonth = 10; if (strcmp(lpszTemp,"Nov")==0) pbeVersion->byMonth = 11; if (strcmp(lpszTemp,"Dec")==0) pbeVersion->byMonth = 12; // Get day of month string (char [4..5]) pbeVersion->byDay = (BYTE) atoi( lpszDate + 4 ); // Get year of compilation date (char [7..10]) pbeVersion->wYear = (WORD) atoi( lpszDate + 7 ); memset( pbeVersion->zHomepage, 0x00, BE_MAX_HOMEPAGE ); strcpy( pbeVersion->zHomepage, "http://www.mp3dev.org/" ); } __declspec(dllexport) BE_ERR beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput) { // Encode it int dwSamples; int nOutputSamples = 0; lame_global_flags* gfp = (lame_global_flags*)hbeStream; dwSamples = nSamples / lame_get_num_channels( gfp ); // old versions of lame_enc.dll required exactly 1152 samples // and worked even if nSamples accidently set to 2304 // simulate this behavoir: if ( 1 == lame_get_num_channels( gfp ) && nSamples == 2304) { dwSamples/= 2; } if ( 1 == lame_get_num_channels( gfp ) ) { nOutputSamples = lame_encode_buffer(gfp,pSamples,pSamples,dwSamples,pOutput,0); } else { nOutputSamples = lame_encode_buffer_interleaved(gfp,pSamples,dwSamples,pOutput,0); } if ( nOutputSamples < 0 ) { *pdwOutput=0; return BE_ERR_BUFFER_TOO_SMALL; } else { *pdwOutput = (DWORD)nOutputSamples; } return BE_ERR_SUCCESSFUL; } // accept floating point audio samples, scaled to the range of a signed 16-bit // integer (within +/- 32768), in non-interleaved channels -- DSPguru, jd __declspec(dllexport) BE_ERR beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, DWORD nSamples, PFLOAT buffer_l, PFLOAT buffer_r, PBYTE pOutput, PDWORD pdwOutput) { int nOutputSamples; lame_global_flags* gfp = (lame_global_flags*)hbeStream; nOutputSamples = lame_encode_buffer_float(gfp,buffer_l,buffer_r,nSamples,pOutput,0); if ( nOutputSamples >= 0 ) { *pdwOutput = (DWORD) nOutputSamples; } else { *pdwOutput=0; return BE_ERR_BUFFER_TOO_SMALL; } return BE_ERR_SUCCESSFUL; } static int maybeSyncWord(FILE* fpStream) { unsigned char mp3_frame_header[4]; size_t nbytes = fread(mp3_frame_header, 1, sizeof(mp3_frame_header), fpStream); if ( nbytes != sizeof(mp3_frame_header) ) { return -1; } if ( mp3_frame_header[0] != 0xffu ) { return -1; /* doesn't look like a sync word */ } if ( (mp3_frame_header[1] & 0xE0u) != 0xE0u ) { return -1; /* doesn't look like a sync word */ } return 0; } static int skipId3v2(FILE * fpStream, size_t lametag_frame_size) { size_t nbytes; size_t id3v2TagSize = 0; unsigned char id3v2Header[10]; /* seek to the beginning of the stream */ if (fseek(fpStream, 0, SEEK_SET) != 0) { return -2; /* not seekable, abort */ } /* read 10 bytes in case there's an ID3 version 2 header here */ nbytes = fread(id3v2Header, 1, sizeof(id3v2Header), fpStream); if (nbytes != sizeof(id3v2Header)) { return -3; /* not readable, maybe opened Write-Only */ } /* does the stream begin with the ID3 version 2 file identifier? */ if (!strncmp((char *) id3v2Header, "ID3", 3)) { /* the tag size (minus the 10-byte header) is encoded into four * bytes where the most significant bit is clear in each byte */ id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) | ((id3v2Header[7] & 0x7f) << 14) | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) + sizeof id3v2Header; } /* Seek to the beginning of the audio stream */ if ( fseek(fpStream, id3v2TagSize, SEEK_SET) != 0 ) { return -2; } if ( maybeSyncWord(fpStream) != 0) { return -1; } if ( fseek(fpStream, id3v2TagSize+lametag_frame_size, SEEK_SET) != 0 ) { return -2; } if ( maybeSyncWord(fpStream) != 0) { return -1; } /* OK, it seems we found our LAME-Tag/Xing frame again */ /* Seek to the beginning of the audio stream */ if ( fseek(fpStream, id3v2TagSize, SEEK_SET) != 0 ) { return -2; } return 0; } static BE_ERR updateLameTagFrame(lame_global_flags* gfp, FILE* fpStream) { size_t n = lame_get_lametag_frame( gfp, 0, 0 ); /* ask for bufer size */ if ( n > 0 ) { unsigned char* buffer = 0; size_t m = 1; if ( 0 != skipId3v2(fpStream, n) ) { DispErr( "Error updating LAME-tag frame:\n\n" "can't locate old frame\n" ); return BE_ERR_INVALID_FORMAT_PARAMETERS; } buffer = (unsigned char*)malloc( n ); if ( buffer == 0 ) { DispErr( "Error updating LAME-tag frame:\n\n" "can't allocate frame buffer\n" ); return BE_ERR_INVALID_FORMAT_PARAMETERS; } /* Put it all to disk again */ n = lame_get_lametag_frame( gfp, buffer, n ); if ( n > 0 ) { m = fwrite( buffer, n, 1, fpStream ); } free( buffer ); if ( m != 1 ) { DispErr( "Error updating LAME-tag frame:\n\n" "couldn't write frame into file\n" ); return BE_ERR_INVALID_FORMAT_PARAMETERS; } } return BE_ERR_SUCCESSFUL; } __declspec(dllexport) BE_ERR beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName ) { FILE* fpStream = NULL; BE_ERR beResult = BE_ERR_SUCCESSFUL; lame_global_flags* gfp = (lame_global_flags*)hbeStream; if ( NULL != gfp ) { // Do we have to write the VBR tag? if ( lame_get_bWriteVbrTag( gfp ) ) { // Try to open the file fpStream=fopen( lpszFileName, "rb+" ); // Check file open result if ( NULL == fpStream ) { beResult = BE_ERR_INVALID_FORMAT_PARAMETERS; DispErr( "Error updating LAME-tag frame:\n\n" "can't open file for reading and writing\n" ); } else { beResult = updateLameTagFrame( gfp, fpStream ); // Close the file stream fclose( fpStream ); } } // clean up of allocated memory lame_close( gfp ); } else { beResult = BE_ERR_INVALID_FORMAT_PARAMETERS; } // return result return beResult; } // for backwards compatiblity __declspec(dllexport) BE_ERR beWriteVBRHeader(LPCSTR lpszFileName) { return beWriteInfoTag( (HBE_STREAM)gfp_save, lpszFileName ); } BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { (void) lpReserved; gs_hModule = (HMODULE) hModule; switch( ul_reason_for_call ) { case DLL_PROCESS_ATTACH: // Enable debug/logging? gs_bLogFile = GetPrivateProfileIntA("Debug","WriteLogFile",gs_bLogFile,"lame_enc.ini"); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: break; } return TRUE; } static void dump_config( lame_global_flags* gfp ) { DebugPrintf("\n\nLame_enc configuration options:\n"); DebugPrintf("==========================================================\n"); DebugPrintf("version =%d\n",lame_get_version( gfp ) ); DebugPrintf("Layer =3\n"); DebugPrintf("mode ="); switch ( lame_get_mode( gfp ) ) { case STEREO: DebugPrintf( "Stereo\n" ); break; case JOINT_STEREO: DebugPrintf( "Joint-Stereo\n" ); break; case DUAL_CHANNEL: DebugPrintf( "Forced Stereo\n" ); break; case MONO: DebugPrintf( "Mono\n" ); break; case NOT_SET: /* FALLTROUGH */ default: DebugPrintf( "Error (unknown)\n" ); break; } DebugPrintf("Input sample rate =%.1f kHz\n", lame_get_in_samplerate( gfp ) /1000.0 ); DebugPrintf("Output sample rate =%.1f kHz\n", lame_get_out_samplerate( gfp ) /1000.0 ); DebugPrintf("bitrate =%d kbps\n", lame_get_brate( gfp ) ); DebugPrintf("Quality Setting =%d\n", lame_get_quality( gfp ) ); DebugPrintf("Low pass frequency =%d\n", lame_get_lowpassfreq( gfp ) ); DebugPrintf("Low pass width =%d\n", lame_get_lowpasswidth( gfp ) ); DebugPrintf("High pass frequency =%d\n", lame_get_highpassfreq( gfp ) ); DebugPrintf("High pass width =%d\n", lame_get_highpasswidth( gfp ) ); DebugPrintf("No short blocks =%d\n", lame_get_no_short_blocks( gfp ) ); DebugPrintf("Force short blocks =%d\n", lame_get_force_short_blocks( gfp ) ); DebugPrintf("de-emphasis =%d\n", lame_get_emphasis( gfp ) ); DebugPrintf("private flag =%d\n", lame_get_extension( gfp ) ); DebugPrintf("copyright flag =%d\n", lame_get_copyright( gfp ) ); DebugPrintf("original flag =%d\n", lame_get_original( gfp ) ); DebugPrintf("CRC =%s\n", lame_get_error_protection( gfp ) ? "on" : "off" ); DebugPrintf("Fast mode =%s\n", ( lame_get_quality( gfp ) )? "enabled" : "disabled" ); DebugPrintf("Force mid/side stereo =%s\n", ( lame_get_force_ms( gfp ) )?"enabled":"disabled" ); DebugPrintf("Disable Reservoir =%d\n", lame_get_disable_reservoir( gfp ) ); DebugPrintf("Allow diff-short =%d\n", lame_get_allow_diff_short( gfp ) ); DebugPrintf("Interchannel masking =%f\n", lame_get_interChRatio( gfp ) ); DebugPrintf("Strict ISO Encoding =%s\n", ( lame_get_strict_ISO( gfp ) ) ?"Yes":"No"); DebugPrintf("Scale =%5.2f\n", lame_get_scale( gfp ) ); DebugPrintf("VBR =%s, VBR_q =%d, VBR method =", ( lame_get_VBR( gfp ) !=vbr_off ) ? "enabled": "disabled", lame_get_VBR_q( gfp ) ); switch ( lame_get_VBR( gfp ) ) { case vbr_off: DebugPrintf( "vbr_off\n" ); break; case vbr_mt : DebugPrintf( "vbr_mt \n" ); break; case vbr_rh : DebugPrintf( "vbr_rh \n" ); break; case vbr_mtrh: DebugPrintf( "vbr_mtrh \n" ); break; case vbr_abr: DebugPrintf( "vbr_abr (average bitrate %d kbps)\n", lame_get_VBR_mean_bitrate_kbps( gfp ) ); break; default: DebugPrintf("error, unknown VBR setting\n"); break; } DebugPrintf("Vbr Min bitrate =%d kbps\n", lame_get_VBR_min_bitrate_kbps( gfp ) ); DebugPrintf("Vbr Max bitrate =%d kbps\n", lame_get_VBR_max_bitrate_kbps( gfp ) ); DebugPrintf("Write VBR Header =%s\n", ( lame_get_bWriteVbrTag( gfp ) ) ?"Yes":"No"); DebugPrintf("VBR Hard min =%d\n", lame_get_VBR_hard_min( gfp ) ); DebugPrintf("ATH Only =%d\n", lame_get_ATHonly( gfp ) ); DebugPrintf("ATH short =%d\n", lame_get_ATHshort( gfp ) ); DebugPrintf("ATH no =%d\n", lame_get_noATH( gfp ) ); DebugPrintf("ATH type =%d\n", lame_get_ATHtype( gfp ) ); DebugPrintf("ATH lower =%f\n", lame_get_ATHlower( gfp ) ); DebugPrintf("ATH aa =%d\n", lame_get_athaa_type( gfp ) ); //DebugPrintf("ATH aa loudapprox =%d\n", lame_get_athaa_loudapprox( gfp ) ); DebugPrintf("ATH aa sensitivity =%f\n", lame_get_athaa_sensitivity( gfp ) ); DebugPrintf("Experimental nspsytune =%d\n", lame_get_exp_nspsytune( gfp ) ); DebugPrintf("Experimental X =%d\n", lame_get_experimentalX( gfp ) ); DebugPrintf("Experimental Y =%d\n", lame_get_experimentalY( gfp ) ); DebugPrintf("Experimental Z =%d\n", lame_get_experimentalZ( gfp ) ); } static void DispErr(char const* strErr) { MessageBoxA(NULL,strErr,"LAME_ENC.DLL",MB_OK|MB_ICONHAND); } #ifdef __cplusplus } #endif lame-3.100/Dll/Makefile.am000644 001751 001751 00000000373 11463015676 016646 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.11 2010/10/30 13:21:02 robert Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = BladeMP3EncDLL.c \ BladeMP3EncDLL.def \ BladeMP3EncDLL.h \ Example.cpp \ LameDLLInterface.htm \ MP3export.pas \ Makefile.mingw32 lame-3.100/Dll/Makefile.mingw32000644 001751 001751 00000002517 12652743632 017542 0ustar00netchildnetchild000000 000000 # This makefile compiles lame_enc.dll with mingw32 (and possibly cygwin) # Of course, you must first build ../libmp3lame/libmp3lame.a. # liblame_enc.a can be used to link the lame_enc.dll to your programs. # Tested with EAC 0.9pb9 (my own favorite, http://www.exactaudiocopy.de/) # example.exe compiles and works, too. # Vladislav Naumov, # # PS: to 'make clean' you need rm. MS's del is unusable. # PPS: quick build: # make -fMakefile.mingw32 DLL_NAME = lame_enc LAME_SRC_ROOT = .. OFILES = BladeMP3EncDLL.o $(DLL_NAME)_exp.o CFLAGS = -I$(LAME_SRC_ROOT)/include -I$(LAME_SRC_ROOT)/libmp3lame CC = g++ LD = g++ DLLTOOL = dlltool LFLAGS = -L$(LAME_SRC_ROOT)/libmp3lame/.libs -o $(DLL_NAME).dll -mdll -s LIBS = -lmp3lame all: $(DLL_NAME).dll example.exe BladeMP3EncDLL.o: BladeMP3EncDLL.c BladeMP3EncDLL.h ../include/lame.h \ ../libmp3lame/lame_global_flags.h ../libmp3lame/version.h $(DLL_NAME).dll : $(OFILES) $(LD) $(LFLAGS) $(OFILES) $(LIBS) $(DLL_NAME)_exp.o : BladeMP3EncDLL.o $(DLLTOOL) --input-def BladeMP3EncDLL.def --output-lib lib$(DLL_NAME).a --output-exp $(DLL_NAME)_exp.o --dllname $(DLL_NAME) BladeMP3EncDLL.o %.o : %.c $(CC) $(CFLAGS) -c $< -o $@ example.exe : Example.cpp BladeMP3EncDLL.h $(CC) Example.cpp -o example.exe clean : rm -f $(DLL_NAME).dll $(OFILES) example.exe lame-3.100/Dll/MP3export.pas000644 001751 001751 00000024633 07757163011 017163 0ustar00netchildnetchild000000 000000 unit MP3export; interface Uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //type definitions //typedef unsigned long HBE_STREAM; //typedef HBE_STREAM *PHBE_STREAM; //typedef unsigned long BE_ERR; THBE_STREAM = LongWord; PHBE_STREAM = ^PHBE_STREAM; BE_ERR = LongWord; const // encoding formats //#define BE_CONFIG_MP3 0 //#define BE_CONFIG_LAME 256 BE_CONFIG_MP3 = 0; BE_CONFIG_LAME = 256; // error codes //#define BE_ERR_SUCCESSFUL 0x00000000 //#define BE_ERR_INVALID_FORMAT 0x00000001 //#define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002 //#define BE_ERR_NO_MORE_HANDLES 0x00000003 //#define BE_ERR_INVALID_HANDLE 0x00000004 BE_ERR_SUCCESSFUL: LongWord = 0; BE_ERR_INVALID_FORMAT: LongWord = 1; BE_ERR_INVALID_FORMAT_PARAMETERS: LongWord = 2; BE_ERR_NO_MORE_HANDLES: LongWord = 3; BE_ERR_INVALID_HANDLE: LongWord = 4; // other constants BE_MAX_HOMEPAGE = 256; // format specific variables BE_MP3_MODE_STEREO = 0; BE_MP3_MODE_DUALCHANNEL = 2; BE_MP3_MODE_MONO = 3; type TMP3 = packed record dwSampleRate : LongWord; byMode : Byte; wBitRate : Word; bPrivate : LongWord; bCRC : LongWord; bCopyright : LongWord; bOriginal : LongWord; end; TLHV1 = packed record // STRUCTURE INFORMATION dwStructVersion: DWORD; dwStructSize: DWORD; // BASIC ENCODER SETTINGS dwSampleRate: DWORD; // ALLOWED SAMPLERATE VALUES DEPENDS ON dwMPEGVersion dwReSampleRate: DWORD; // DOWNSAMPLERATE, 0=ENCODER DECIDES nMode: Integer; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO dwBitrate: DWORD; // CBR bitrate, VBR min bitrate dwMaxBitrate: DWORD; // CBR ignored, VBR Max bitrate nQuality: Integer; // Quality setting (NORMAL,HIGH,LOW,VOICE) dwMpegVersion: DWORD; // MPEG-1 OR MPEG-2 dwPsyModel: DWORD; // FUTURE USE, SET TO 0 dwEmphasis: DWORD; // FUTURE USE, SET TO 0 // BIT STREAM SETTINGS bPrivate: LONGBOOL; // Set Private Bit (TRUE/FALSE) bCRC: LONGBOOL; // Insert CRC (TRUE/FALSE) bCopyright: LONGBOOL; // Set Copyright Bit (TRUE/FALSE) bOriginal: LONGBOOL; // Set Original Bit (TRUE/FALSE_ // VBR STUFF bWriteVBRHeader: LONGBOOL; // WRITE XING VBR HEADER (TRUE/FALSE) bEnableVBR: LONGBOOL; // USE VBR ENCODING (TRUE/FALSE) nVBRQuality: Integer; // VBR QUALITY 0..9 btReserved: array[0..255] of Byte; // FUTURE USE, SET TO 0 end; TAAC = packed record dwSampleRate : LongWord; byMode : Byte; wBitRate : Word; byEncodingMethod : Byte; end; TFormat = packed record case byte of 1 : (mp3 : TMP3); 2 : (lhv1 : TLHV1); 3 : (aac : TAAC); end; TBE_Config = packed record dwConfig : LongWord; format : TFormat; end; PBE_Config = ^TBE_Config; //typedef struct { // // BladeEnc DLL Version number // // BYTE byDLLMajorVersion; // BYTE byDLLMinorVersion; // // // BladeEnc Engine Version Number // // BYTE byMajorVersion; // BYTE byMinorVersion; // // // DLL Release date // // BYTE byDay; // BYTE byMonth; // WORD wYear; // // // BladeEnc Homepage URL // // CHAR zHomepage[BE_MAX_HOMEPAGE + 1]; // //} BE_VERSION, *PBE_VERSION; TBE_Version = record byDLLMajorVersion : Byte; byDLLMinorVersion : Byte; byMajorVersion : Byte; byMinorVersion : Byte; byDay : Byte; byMonth : Byte; wYear : Word; zHomePage : Array[0..BE_MAX_HOMEPAGE + 1] of Char; end; PBE_Version = ^TBE_Version; //__declspec(dllexport) BE_ERR beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream); //__declspec(dllexport) BE_ERR beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput); //__declspec(dllexport) BE_ERR beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput); //__declspec(dllexport) BE_ERR beCloseStream(HBE_STREAM hbeStream); //__declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion); { Function beInitStream(var pbeConfig: TBE_CONFIG; var dwSample: LongWord; var dwBufferSize: LongWord; var phbeStream: THBE_STREAM ): BE_Err; cdecl; external 'Bladeenc.dll'; //Function beEncodeChunk(hbeStream: THBE_STREAM; nSamples: LongWord; pSample: PSmallInt;pOutput: PByte; var pdwOutput: LongWord): BE_Err; cdecl; external 'Bladeenc.dll'; Function beEncodeChunk(hbeStream: THBE_STREAM; nSamples: LongWord; var pSample;var pOutput; var pdwOutput: LongWord): BE_Err; stdcall; cdecl 'Bladeenc.dll'; Function beDeinitStream(hbeStream: THBE_STREAM; var pOutput; var pdwOutput: LongWord): BE_Err; cdecl; external 'Bladeenc.dll'; Function beCloseStream(hbeStream: THBE_STREAM): BE_Err; cdecl; external 'Bladeenc.dll'; Procedure beVersion(var pbeVersion: TBE_VERSION); cdecl; external 'Bladeenc.dll'; } Function beInitStream(var pbeConfig: TBE_CONFIG; var dwSample: LongWord; var dwBufferSize: LongWord; var phbeStream: THBE_STREAM ): BE_Err; cdecl; external 'Lame_enc.dll'; //Function beEncodeChunk(hbeStream: THBE_STREAM; nSamples: LongWord; pSample: PSmallInt;pOutput: PByte; var pdwOutput: LongWord): BE_Err; cdecl; external 'Lame_enc.dll'; Function beEncodeChunk(hbeStream: THBE_STREAM; nSamples: LongWord; var pSample;var pOutput; var pdwOutput: LongWord): BE_Err; cdecl; external 'Lame_enc.dll'; Function beDeinitStream(hbeStream: THBE_STREAM; var pOutput; var pdwOutput: LongWord): BE_Err; cdecl; external 'Lame_enc.dll'; Function beCloseStream(hbeStream: THBE_STREAM): BE_Err; cdecl; external 'Lame_enc.dll'; Procedure beVersion(var pbeVersion: TBE_VERSION); cdecl; external 'Lame_enc.dll'; Procedure EncodeWavToMP3(fs, fd: Integer); implementation Uses InternetSnd, TraiteWav; {----------------------------------------} Procedure EncodeWavToMP3(fs, fd: Integer); var err: Integer; beConfig: TBE_Config; dwSamples, dwSamplesMP3 : LongWord; hbeStream : THBE_STREAM; error: BE_ERR; pBuffer: PSmallInt; pMP3Buffer: PByte; Marque:PChar; done: LongWord; dwWrite: LongWord; ToRead: LongWord; ToWrite: LongWord; i:Integer; begin beConfig.dwConfig := BE_CONFIG_LAME; { beConfig.Format.mp3.dwSampleRate := WavInfo.SamplesPerSec; beConfig.Format.mp3.byMode := BE_MP3_MODE_STEREO; beConfig.Format.mp3.wBitrate := strToInt(MainFrm.Mp3BitRate.Text); beConfig.Format.mp3.bCopyright := 0; beConfig.Format.mp3.bCRC := $00000000; beConfig.Format.mp3.bOriginal := 0; beConfig.Format.mp3.bPrivate := 0; } //Structure information beConfig.Format.lhv1.dwStructVersion := 1; beConfig.Format.lhv1.dwStructSize := SizeOf(beConfig); //Basic encoder setting beConfig.Format.lhv1.dwSampleRate := WavInfo.SamplesPerSec; beConfig.Format.lhv1.dwReSampleRate := 44100; beConfig.Format.lhv1.nMode := BE_MP3_MODE_STEREO; beConfig.Format.lhv1.dwBitrate := strToInt(MainFrm.Mp3BitRate.Text); beConfig.Format.lhv1.dwMaxBitrate := strToInt(MainFrm.Mp3BitRate.Text); beConfig.Format.lhv1.nQuality := 2; beConfig.Format.lhv1.dwMPegVersion := 1; //MPEG1 beConfig.Format.lhv1.dwPsyModel := 0; beConfig.Format.lhv1.dwEmphasis := 0; //Bit Stream Settings beConfig.Format.lhv1.bPrivate := False; beConfig.Format.lhv1.bCRC := False; beConfig.Format.lhv1.bCopyright := True; beConfig.Format.lhv1.bOriginal := True; //VBR Stuff beConfig.Format.lhv1.bWriteVBRHeader := false; beConfig.Format.lhv1.bEnableVBR := false; beConfig.Format.lhv1.nVBRQuality := 0; i := 0; error := beInitStream(beConfig, dwSamples, dwSamplesMP3, hbeStream); if error = BE_ERR_SUCCESSFUL then begin pBuffer := AllocMem(dwSamples*2); pMP3Buffer := AllocMem(dwSamplesMP3); try done := 0; error := FileSeek(fs, 0, 0); While (done < TotalSize) do begin if (done + dwSamples*2 < TotalSize) then ToRead := dwSamples*2 else begin ToRead := TotalSize-done; //FillChar(buf[0],dwSamples*2,0); FillChar(pbuffer^,dwSamples,0); end; //if FileRead(fs, buf[0], toread) = -1 if FileRead(fs, pbuffer^, toread) = -1 then raise Exception.Create('Erreur de lecture'); //error := beEncodeChunk(hbeStream, toRead div 2, Buf[0], TmpBuf[0], toWrite); error := beEncodeChunk(hbeStream, toRead div 2, pBuffer^, pMP3Buffer^, toWrite); if error <> BE_ERR_SUCCESSFUL then begin beCloseStream(hbeStream); raise Exception.Create('Echec de l''encodage'); end; //if FileWrite(fd, TmpBuf[0], toWrite) = -1 if FileWrite(fd, pMP3Buffer^, toWrite) = -1 then raise Exception.Create('Erreur d''écriture'); done := done + toread; inc(i); if i mod 64 = 0 then begin MainFrm.ProgressBar1.Position := round(100*done/Totalsize); Application.ProcessMessages; end; end; error := beDeInitStream(hbeStream, pMP3Buffer^, dwWrite); //error := beDeInitStream(hbeStream, TmpBuf[0], dwWrite); if error <> BE_ERR_SUCCESSFUL then begin beCloseStream(hbeStream); raise Exception.Create('Echec à la sortie'); end; if dwWrite <> 0 then begin //if FileWrite(fd, TmpBuf[0], dwWrite) = -1 if FileWrite(fd, pMP3Buffer^, dwWrite) = -1 then raise Exception.Create('Erreur à la dernière écriture'); end; beCloseStream(hbeStream); finally FreeMem(pBuffer); FreeMem(pMP3Buffer); end; end else begin end; end; end. lame-3.100/Dll/BladeMP3EncDLL.h000644 001751 001751 00000016743 11647372644 017311 0ustar00netchildnetchild000000 000000 /* * Blade Type of DLL Interface for Lame encoder * * Copyright (c) 1999-2002 A.L. Faber * Based on bladedll.h version 1.0 written by Jukka Poikolainen * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef ___BLADEDLL_H_INCLUDED___ #define ___BLADEDLL_H_INCLUDED___ #ifdef __GNUC__ #define ATTRIBUTE_PACKED __attribute__((packed)) #else #define ATTRIBUTE_PACKED #pragma pack(push) #pragma pack(1) #endif #ifdef __cplusplus extern "C" { #endif /* encoding formats */ #define BE_CONFIG_MP3 0 #define BE_CONFIG_LAME 256 /* type definitions */ typedef void* HBE_STREAM; typedef HBE_STREAM *PHBE_STREAM; typedef unsigned long BE_ERR; /* error codes */ #define BE_ERR_SUCCESSFUL 0x00000000 #define BE_ERR_INVALID_FORMAT 0x00000001 #define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002 #define BE_ERR_NO_MORE_HANDLES 0x00000003 #define BE_ERR_INVALID_HANDLE 0x00000004 #define BE_ERR_BUFFER_TOO_SMALL 0x00000005 /* other constants */ #define BE_MAX_HOMEPAGE 128 /* format specific variables */ #define BE_MP3_MODE_STEREO 0 #define BE_MP3_MODE_JSTEREO 1 #define BE_MP3_MODE_DUALCHANNEL 2 #define BE_MP3_MODE_MONO 3 #define MPEG1 1 #define MPEG2 0 #ifdef _BLADEDLL #undef FLOAT #include #endif #define CURRENT_STRUCT_VERSION 1 #define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG) // is currently 331 bytes typedef enum { VBR_METHOD_NONE = -1, VBR_METHOD_DEFAULT = 0, VBR_METHOD_OLD = 1, VBR_METHOD_NEW = 2, VBR_METHOD_MTRH = 3, VBR_METHOD_ABR = 4 } VBRMETHOD; typedef enum { LQP_NOPRESET =-1, // QUALITY PRESETS LQP_NORMAL_QUALITY = 0, LQP_LOW_QUALITY = 1, LQP_HIGH_QUALITY = 2, LQP_VOICE_QUALITY = 3, LQP_R3MIX = 4, LQP_VERYHIGH_QUALITY = 5, LQP_STANDARD = 6, LQP_FAST_STANDARD = 7, LQP_EXTREME = 8, LQP_FAST_EXTREME = 9, LQP_INSANE = 10, LQP_ABR = 11, LQP_CBR = 12, LQP_MEDIUM = 13, LQP_FAST_MEDIUM = 14, // NEW PRESET VALUES LQP_PHONE =1000, LQP_SW =2000, LQP_AM =3000, LQP_FM =4000, LQP_VOICE =5000, LQP_RADIO =6000, LQP_TAPE =7000, LQP_HIFI =8000, LQP_CD =9000, LQP_STUDIO =10000 } LAME_QUALITY_PRESET; typedef struct { DWORD dwConfig; // BE_CONFIG_XXXXX // Currently only BE_CONFIG_MP3 is supported union { struct { DWORD dwSampleRate; // 48000, 44100 and 32000 allowed BYTE byMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO WORD wBitrate; // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed BOOL bPrivate; BOOL bCRC; BOOL bCopyright; BOOL bOriginal; } mp3; // BE_CONFIG_MP3 struct { // STRUCTURE INFORMATION DWORD dwStructVersion; DWORD dwStructSize; // BASIC ENCODER SETTINGS DWORD dwSampleRate; // SAMPLERATE OF INPUT FILE DWORD dwReSampleRate; // DOWNSAMPLERATE, 0=ENCODER DECIDES LONG nMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO DWORD dwBitrate; // CBR bitrate, VBR min bitrate DWORD dwMaxBitrate; // CBR ignored, VBR Max bitrate LONG nPreset; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum DWORD dwMpegVersion; // FUTURE USE, MPEG-1 OR MPEG-2 DWORD dwPsyModel; // FUTURE USE, SET TO 0 DWORD dwEmphasis; // FUTURE USE, SET TO 0 // BIT STREAM SETTINGS BOOL bPrivate; // Set Private Bit (TRUE/FALSE) BOOL bCRC; // Insert CRC (TRUE/FALSE) BOOL bCopyright; // Set Copyright Bit (TRUE/FALSE) BOOL bOriginal; // Set Original Bit (TRUE/FALSE) // VBR STUFF BOOL bWriteVBRHeader; // WRITE XING VBR HEADER (TRUE/FALSE) BOOL bEnableVBR; // USE VBR ENCODING (TRUE/FALSE) INT nVBRQuality; // VBR QUALITY 0..9 DWORD dwVbrAbr_bps; // Use ABR in stead of nVBRQuality VBRMETHOD nVbrMethod; BOOL bNoRes; // Disable Bit resorvoir (TRUE/FALSE) // MISC SETTINGS BOOL bStrictIso; // Use strict ISO encoding rules (TRUE/FALSE) WORD nQuality; // Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality=5 // FUTURE USE, SET TO 0, align strucutre to 331 bytes BYTE btReserved[255-4*sizeof(DWORD) - sizeof( WORD )]; } LHV1; // LAME header version 1 struct { DWORD dwSampleRate; BYTE byMode; WORD wBitrate; BYTE byEncodingMethod; } aac; } format; } BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED; typedef struct { // BladeEnc DLL Version number BYTE byDLLMajorVersion; BYTE byDLLMinorVersion; // BladeEnc Engine Version Number BYTE byMajorVersion; BYTE byMinorVersion; // DLL Release date BYTE byDay; BYTE byMonth; WORD wYear; // BladeEnc Homepage URL CHAR zHomepage[BE_MAX_HOMEPAGE + 1]; BYTE byAlphaLevel; BYTE byBetaLevel; BYTE byMMXEnabled; BYTE btReserved[125]; } BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED; #ifndef _BLADEDLL typedef BE_ERR (*BEINITSTREAM) (PBE_CONFIG, PDWORD, PDWORD, PHBE_STREAM); typedef BE_ERR (*BEENCODECHUNK) (HBE_STREAM, DWORD, PSHORT, PBYTE, PDWORD); // added for floating point audio -- DSPguru, jd typedef BE_ERR (*BEENCODECHUNKFLOATS16NI) (HBE_STREAM, DWORD, PFLOAT, PFLOAT, PBYTE, PDWORD); typedef BE_ERR (*BEDEINITSTREAM) (HBE_STREAM, PBYTE, PDWORD); typedef BE_ERR (*BECLOSESTREAM) (HBE_STREAM); typedef VOID (*BEVERSION) (PBE_VERSION); typedef BE_ERR (*BEWRITEVBRHEADER) (LPCSTR); typedef BE_ERR (*BEWRITEINFOTAG) (HBE_STREAM, LPCSTR ); #define TEXT_BEINITSTREAM "beInitStream" #define TEXT_BEENCODECHUNK "beEncodeChunk" #define TEXT_BEENCODECHUNKFLOATS16NI "beEncodeChunkFloatS16NI" #define TEXT_BEDEINITSTREAM "beDeinitStream" #define TEXT_BECLOSESTREAM "beCloseStream" #define TEXT_BEVERSION "beVersion" #define TEXT_BEWRITEVBRHEADER "beWriteVBRHeader" #define TEXT_BEFLUSHNOGAP "beFlushNoGap" #define TEXT_BEWRITEINFOTAG "beWriteInfoTag" #else __declspec(dllexport) BE_ERR beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream); __declspec(dllexport) BE_ERR beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput); // added for floating point audio -- DSPguru, jd __declspec(dllexport) BE_ERR beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, DWORD nSamples, PFLOAT buffer_l, PFLOAT buffer_r, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beCloseStream(HBE_STREAM hbeStream); __declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion); __declspec(dllexport) BE_ERR beWriteVBRHeader(LPCSTR lpszFileName); __declspec(dllexport) BE_ERR beFlushNoGap(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName ); #endif #ifdef __cplusplus } #endif #ifndef __GNUC__ #pragma pack(pop) #endif #endif lame-3.100/Dll/Example.cpp000644 001751 001751 00000017510 12155556620 016710 0ustar00netchildnetchild000000 000000 /* * LAME DLL Sample Code. * * Copyright (c) 2000 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "BladeMP3EncDLL.h" BEINITSTREAM beInitStream=NULL; BEENCODECHUNK beEncodeChunk=NULL; BEDEINITSTREAM beDeinitStream=NULL; BECLOSESTREAM beCloseStream=NULL; BEVERSION beVersion=NULL; BEWRITEVBRHEADER beWriteVBRHeader=NULL; BEWRITEINFOTAG beWriteInfoTag=NULL; // Main program int main(int argc, char *argv[]) { HINSTANCE hDLL =NULL; FILE* pFileIn =NULL; FILE* pFileOut =NULL; BE_VERSION Version ={0,}; BE_CONFIG beConfig ={0,}; CHAR strFileIn[255] ={'0',}; CHAR strFileOut[255] ={'0',}; DWORD dwSamples =0; DWORD dwMP3Buffer =0; HBE_STREAM hbeStream =0; BE_ERR err =0; PBYTE pMP3Buffer =NULL; PSHORT pWAVBuffer =NULL; // check number of arguments if(argc != 2) { fprintf(stderr,"Usage: %s \n", argv[0]); fprintf(stderr,"Descr: Short demo to show how to use the lame_enc.dll library file\n"); fprintf(stderr,"Note : WAV file is assumed to to have the following parameters\n"); fprintf(stderr," : 44100 Hz, stereo, 16 Bits per sample\n"); return -1; } // Setup the file names strcpy(strFileIn ,argv[1]); strcpy(strFileOut,argv[1]); // Add mp3 extention strcat(strFileOut,".mp3"); // Load lame_enc.dll library (Make sure though that you set the // project/settings/debug Working Directory correctly, otherwhise the DLL can't be loaded hDLL = LoadLibrary("lame_enc.dll"); if ( NULL == hDLL ) { hDLL = LoadLibrary("..\\..\\output\\lame_enc.dll"); } if( NULL == hDLL ) { fprintf(stderr,"Error loading lame_enc.DLL"); return -1; } // Get Interface functions from the DLL beInitStream = (BEINITSTREAM) GetProcAddress(hDLL, TEXT_BEINITSTREAM); beEncodeChunk = (BEENCODECHUNK) GetProcAddress(hDLL, TEXT_BEENCODECHUNK); beDeinitStream = (BEDEINITSTREAM) GetProcAddress(hDLL, TEXT_BEDEINITSTREAM); beCloseStream = (BECLOSESTREAM) GetProcAddress(hDLL, TEXT_BECLOSESTREAM); beVersion = (BEVERSION) GetProcAddress(hDLL, TEXT_BEVERSION); beWriteVBRHeader= (BEWRITEVBRHEADER) GetProcAddress(hDLL,TEXT_BEWRITEVBRHEADER); beWriteInfoTag = (BEWRITEINFOTAG) GetProcAddress(hDLL,TEXT_BEWRITEINFOTAG); // Check if all interfaces are present if(!beInitStream || !beEncodeChunk || !beDeinitStream || !beCloseStream || !beVersion || !beWriteVBRHeader) { printf("Unable to get LAME interfaces"); return -1; } // Get the version number beVersion( &Version ); printf( "lame_enc.dll version %u.%02u (%u/%u/%u)\n" "lame_enc Engine %u.%02u\n" "lame_enc homepage at %s\n\n", Version.byDLLMajorVersion, Version.byDLLMinorVersion, Version.byDay, Version.byMonth, Version.wYear, Version.byMajorVersion, Version.byMinorVersion, Version.zHomepage); // Try to open the WAV file, be sure to open it as a binary file! pFileIn = fopen( strFileIn, "rb" ); // Check file open result if(pFileIn == NULL) { fprintf(stderr,"Error opening %s", argv[1]); return -1; } // Open MP3 file pFileOut= fopen(strFileOut,"wb+"); // Check file open result if(pFileOut == NULL) { fprintf(stderr,"Error creating file %s", strFileOut); fclose(pFileIn); return -1; } memset(&beConfig,0,sizeof(beConfig)); // clear all fields // use the LAME config structure beConfig.dwConfig = BE_CONFIG_LAME; // this are the default settings for testcase.wav beConfig.format.LHV1.dwStructVersion = 1; beConfig.format.LHV1.dwStructSize = sizeof(beConfig); beConfig.format.LHV1.dwSampleRate = 44100; // INPUT FREQUENCY beConfig.format.LHV1.dwReSampleRate = 0; // DON"T RESAMPLE beConfig.format.LHV1.nMode = BE_MP3_MODE_JSTEREO; // OUTPUT IN STREO beConfig.format.LHV1.dwBitrate = 128; // MINIMUM BIT RATE beConfig.format.LHV1.nPreset = LQP_R3MIX; // QUALITY PRESET SETTING beConfig.format.LHV1.dwMpegVersion = MPEG1; // MPEG VERSION (I or II) beConfig.format.LHV1.dwPsyModel = 0; // USE DEFAULT PSYCHOACOUSTIC MODEL beConfig.format.LHV1.dwEmphasis = 0; // NO EMPHASIS TURNED ON beConfig.format.LHV1.bOriginal = TRUE; // SET ORIGINAL FLAG beConfig.format.LHV1.bWriteVBRHeader = TRUE; // Write INFO tag // beConfig.format.LHV1.dwMaxBitrate = 320; // MAXIMUM BIT RATE // beConfig.format.LHV1.bCRC = TRUE; // INSERT CRC // beConfig.format.LHV1.bCopyright = TRUE; // SET COPYRIGHT FLAG // beConfig.format.LHV1.bPrivate = TRUE; // SET PRIVATE FLAG // beConfig.format.LHV1.bWriteVBRHeader = TRUE; // YES, WRITE THE XING VBR HEADER // beConfig.format.LHV1.bEnableVBR = TRUE; // USE VBR // beConfig.format.LHV1.nVBRQuality = 5; // SET VBR QUALITY beConfig.format.LHV1.bNoRes = TRUE; // No Bit resorvoir // Preset Test // beConfig.format.LHV1.nPreset = LQP_PHONE; // Init the MP3 Stream err = beInitStream(&beConfig, &dwSamples, &dwMP3Buffer, &hbeStream); // Check result if(err != BE_ERR_SUCCESSFUL) { fprintf(stderr,"Error opening encoding stream (%lu)", err); fclose(pFileIn); fclose(pFileOut); return -1; } // Allocate MP3 buffer pMP3Buffer = new BYTE[dwMP3Buffer]; // Allocate WAV buffer pWAVBuffer = new SHORT[dwSamples]; // Check if Buffer are allocated properly if(!pMP3Buffer || !pWAVBuffer) { printf("Out of memory"); fclose(pFileIn); fclose(pFileOut); return -1; } DWORD dwRead=0; DWORD dwWrite=0; DWORD dwDone=0; DWORD dwFileSize=0; // Seek to end of file fseek(pFileIn,0,SEEK_END); // Get the file size dwFileSize=ftell(pFileIn); // Seek back to start of WAV file, // but skip the first 44 bytes, since that's the WAV header fseek(pFileIn,44,SEEK_SET); // Convert All PCM samples while ( (dwRead=fread(pWAVBuffer,sizeof(SHORT),dwSamples,pFileIn)) >0 ) { // Encode samples err = beEncodeChunk(hbeStream, dwRead, pWAVBuffer, pMP3Buffer, &dwWrite); // Check result if(err != BE_ERR_SUCCESSFUL) { beCloseStream(hbeStream); fprintf(stderr,"beEncodeChunk() failed (%lu)", err); return -1; } // write dwWrite bytes that are returned in tehe pMP3Buffer to disk if(fwrite(pMP3Buffer,1,dwWrite,pFileOut) != dwWrite) { fprintf(stderr,"Output file write error"); return -1; } dwDone += dwRead*sizeof(SHORT); printf("Done: %0.2f%% \r", 100 * (float)dwDone/(float)(dwFileSize)); } // Deinit the stream err = beDeinitStream(hbeStream, pMP3Buffer, &dwWrite); // Check result if(err != BE_ERR_SUCCESSFUL) { beCloseStream(hbeStream); fprintf(stderr,"beExitStream failed (%lu)", err); return -1; } // Are there any bytes returned from the DeInit call? // If so, write them to disk if( dwWrite ) { if( fwrite( pMP3Buffer, 1, dwWrite, pFileOut ) != dwWrite ) { fprintf(stderr,"Output file write error"); return -1; } } // close the MP3 Stream beCloseStream( hbeStream ); // Delete WAV buffer delete [] pWAVBuffer; // Delete MP3 Buffer delete [] pMP3Buffer; // Close input file fclose( pFileIn ); // Close output file fclose( pFileOut ); if ( beWriteInfoTag ) { // Write the INFO Tag beWriteInfoTag( hbeStream, strFileOut ); } else { beWriteVBRHeader( strFileOut ); } // Were done, return OK result return 0; } lame-3.100/doc/man/000755 001751 001751 00000000000 13170221265 015402 5ustar00netchildnetchild000000 000000 lame-3.100/doc/Makefile.in000644 001751 001751 00000045514 13170220146 016702 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign SUBDIRS = html man all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/doc/html/000755 001751 001751 00000000000 13170221265 015573 5ustar00netchildnetchild000000 000000 lame-3.100/doc/Makefile.am000644 001751 001751 00000000175 07230612070 016664 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.2 2001/01/15 15:16:08 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global SUBDIRS = html man lame-3.100/doc/html/usage.html000644 001751 001751 00000013412 11777343237 017605 0ustar00netchildnetchild000000 000000 Usage of the commandline encoder
LAME Official Logo

Common and recommended switches

Common settings

% lame [options] inputfile [outputfile]
  • Constant Bitrate: -b number or --preset cbr number Valid values for the -b settings depend on the sampling rate1.
    lame -b 128 sample.wav sample.mp3
  • Variable Bitrate (ABR mode): --abr number or --preset number Valid values for the --abr setting range from 8 to 320.
    lame --abr 128 sample.wav sample.mp3
  • Variable Bitrate (VBR mode): -V number Valid values are from 0 to 9, with decimal values possible, where 0 is the highest quality while 9.999 is the lowest one.
    lame -V2 sample.wav sample.mp3

Hydrogenaudio recommended settings

    Very high quality, HiFi, home, or quiet listening, with best file size : -V0 (avg. 245 kbps) or -V1 (avg. 225 kbps) or -V2 (avg. 190 kbps) or -V3 (avg. 175 kbps).

    VBR settings will normally produce transparent results. Audible differences between these presets may exist, but are rare.

  • Very high quality, HiFi, home, or quiet listening, with maximum file size2 : -b 320

    This CBR mode will maximize the MP3's bitrate and overall file size. The extra space may allow for some parts of the audio to be compressed with fewer sacrifices, but to date, no one has produced ABX test results demonstrating that perceived quality is ever better than the highest VBR profiles described above.

  • Portable, listening in noisy conditions, lower bitrate, smaller file size: -V4 (avg. 160 kbps) or -V5 (avg. 130 kbps) or -V6 (avg. 115 kbps)

    -V6 produces an "acceptable" quality, while -V4 should be close to perceptual transparency.

  • Very low bitrate, small sizes, eg. for voice, radio, mono encoding : --abr 80 (stereo) or --abr 56 -m m (mono)

    For very low bitrates, up to 100kbps, ABR is most often the best solution. --preset voice is only available in the command line front-end, and is there for compatibility. It is currently mapped to --abr 56 -mm, so that means that the recommendation would be to encode in mono, and use ABR.

  1. Codec sample frequencies (kHz) bitrates (kbps)
    MPEG-1 layer III 32, 44.1, 48 32 40 48 56 64 80 96 112 128 160 192 224 256 320
    MPEG-2 layer III 16, 22.05, 24 8 16 24 32 40 48 56 64 80 96 112 128 144 160
    MPEG-2.5 layer III 8, 11.025, 12 8 16 24 32 40 48 56 64
  2. Lossy codecs, like MP3, should not be used for archiving, since the nature of lossy encoding always changes the original sound, even if it sounds transparent. Use lossless codecs for this purpose.
lame-3.100/doc/html/Makefile.am000644 001751 001751 00000000720 12156036155 017633 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.9 2013/06/12 09:16:29 rbrito Exp $ AUTOMAKE_OPTIONS = foreign docdir = $(datadir)/doc pkgdocdir = $(docdir)/$(PACKAGE) htmldir = $(docdir)/html pkghtmldir = $(pkgdocdir)/html pkghtml_DATA = \ about.html \ abr.html \ cbr.html \ contact.html \ contributors.html \ detailed.html \ history.html \ index.html \ introduction.html \ links.html \ list.html \ ms_stereo.html \ usage.html \ vbr.html EXTRA_DIST = $(pkghtml_DATA) lame-3.100/doc/html/index.html000644 001751 001751 00000005411 11404473004 017567 0ustar00netchildnetchild000000 000000 LAME High-End MPEG Layer III (MP3) Encoder
LAME Official Logo

The LAME Project

LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.

It is developed as an educational tool to be used in learning about MP3 encoding. The goal of the LAME project is to use the open source model to improve the psycho acoustics, noise shaping and speed of MP3.

LAME is not for everyone - it is distributed as source code only and requires the ability to use a C compiler. However, many popular ripping and encoding programs include the LAME encoding engine, see: Software which uses LAME.

Using the LAME encoding engine (or other mp3 encoding technology) in your software may require a patent license in some countries.

lame-3.100/doc/html/links.html000644 001751 001751 00000062350 12413037702 017607 0ustar00netchildnetchild000000 000000 Links related to LAME
LAME Official Logo

LAME and MP3-related Links

Quick Links:

Free (open source) software which supports or uses LAME:

  Multiplatform:

  • FFmpeg An awesome collection of codecs (libavcodec) for pretty much all popular audio and video formats.
  • Traverso, a cross-platform Digital Audio Workstation (DAW).
  • andromeda (PHP and ASP) Dynamically presents collections of mp3s as streaming web sites.
  • getID3() (PHP) PHP4 script that extracts useful information from MP3s & other multimedia file formats. Reads Lame tags.
  • rip (Perl) Script for ripping and encoding.
  • VideoLAN A powerful multimedia player and streaming solution for Win32, Linux, MacOS, BeOS...
  • Audacity Open source multiplatform audio editor.
  • jRipper (Java) CD ripper frontend.
  • Tradebit is a file hosting service that offers server-side MP3 encoding with LAME.
  • fre:ac (Formerly BonkEnc) A CD ripper, encoder & converter that uses LAME for MP3 encoding.

  Posix (Linux, MacOS X, BSD, Solaris, etc.):

  • k3b An exceptional CD burning and ripping frontend for KDE.
  • avifile AVI/DIVX encoder and decoder.
  • Grip A gtk-based cd-player, ripper and encoder. Supports cddb, cdparanoia and LAME.
  • Transcode Several command line utilities to transcode several audio and video formats.
  • Mp3Maker A WindowMaker enhanced front end to cdda2wav/cdparanoia and LAME/bladeenc.
  • ripperX GTK frontend for rippers and several encoders featuring CDDB support.
  • T.E.A.R. frontend to LAME, cdparanoia and CDDB.
  • Xmcd. CD Player with CDDB and ripping to MP3 and OGG.
  • xtunes GTK frontend for LAME, MAD, cdparanoia, cdrecord and more.
  • DLame Perl script to distribute the LAME encoding task among several machines in a network.
  • Strec Stream recorder - A perl wrapper for dsproxy, realplayer and LAME.
  • TCDR a menu-driven console frontend for CD recording and ripping that uses LAME to rip CDs into MP3 files.
  • DarkIce Live streamer for IceCast.
  • LiveIce Real time streaming of mp3s. Works with IceCast.
  • MuSE A mixing, encoding and streaming engine.
  • Flash For Linux a Flash-like development library.
  • ABCDE "A Better CD Encoder" - Shell script to automatize ripping, encoding and tagging process.
  • Arson - a KDE fronted to CD burning and ripping tools.
  • Cripple - A command-line/batch CD ripper/encoder frontend.

  MacOS Classic:

  Windows:

  • CDex Ripper & encoder, includes LAME binaries (the Blade compatible dll).
  • LameDropXPd OggDrop style drag'n'drop frontend.
  • DVDx DVD to VCD/SVCD/AVI(XviD...) one-step converter.
  • OmniEncoder a fully featured frontend for LAME and several other encoders.
  • LAMEX An activex control for LAME, and a GUI. Source code only, includes LAME.
  • m3w A live mp3 streamer for the WWW. Works with LAME, icecast, soundcard input.
  • out_lame Winamp output plug-in. Create MP3 files directly from Winamp!
  • RazorLame The RazorBlade front end now supports LAME.
  • winLAME The only *nice* windows UI for LAME, according to the author :-)
  • bbc2mp3 a tool for saving BBC "Listen Again" programmes as MP3 files.
  • Aaron's Sonar Mp3 Patch a Cakewalk Sonar plugin written in AutoHotkey.

Free (closed source) software which supports or uses LAME:

  • Foobar2000 (Windows) an audio player with spartan interface but lots of components and an almost fanatical focus on audio quality.
  • Audiograbber (Windows) CD ripper/encoder.
  • EnLAMEr (Windows) frontend for lame.exe
  • EAC (Windows) Exact Audio Copy: High quality CD ripper.
  • jtvmaker (Java) A web slideshow generating and photo sharing tool using LAME.
  • Wavosaur Free audio editor and batch processor.
  • LameBatch (Windows) frontend for lame.exe
  • Hard Disk Ogg a line-in recorder that can encode directly to MP3, among other formats.
  • LAMEr (Windows) Can also encode from line-in.
  • RipTrax (Windows) Advanced CD Ripper with support for LAME and Vorbis.
  • Music Conduit (Windows) A working substitute for the Transfer to Device feature in Windows Media Player.
  • WORM MP3 Encoder (Windows) MP3 encoder based on LAME with reported improvements.
  • ZLURP (Windows, Mac, Linux) Ripper and encoder. Includes LAME binaries.
  • iTunes-LAME (MacOS) Integrates LAME into Apple iTunes, as an alternative to the default (rather poor) encoder.
  • LameBrain (MacOS) LAME frontend for MacOS X.
  • SecondSpin (Amiga) ripper & encoder.

Commercial software which supports or uses LAME:


LAME Binaries:

Linux:

Windows:

  • RareWares offers several compiled LAME versions, including modified versions featuring special functionality.
  • From the Encoder/Windows section of Arturo "Buanzo" Busleiman offers up-to-date Windows and Mac OS LAME compiles on his Argentina-hosted site. .
  • In the encoders section of MAZ Sound.

MacOS X:

  • Thalictrum offers optimized binaries for both Intel and PowerPC Macs.
  • KJams has a QuickTime component, which allows you to export audio from QuickTime and related apps to MP3 using LAME.
  • The FINK project provides LAME binaries compiled for MacOS X.

Solaris:

  • Sunfreeware provides up-to-date binaries for several versions of Sun Solaris, both SPARC and x86 architectures.

Etc.:

Amiga:


Other MP3 Encoders:

  • Takehiro Tominaga has done some amazing work on LAME recently (see history). His versions are available here (source code only). Fortunately for us, Takehiro takes the time to fold many of his improvements back into LAME.
  • George Kotorlis created a multithreaded version of LAME called fpMP3Enc based on his multicore framework Fiber Pool.
  • GOGO-no-coda MP3 encoder (Alternate link) A forked version of LAME with many key routines rewritten in assembly (I.E, it's much faster). Uses the NASM assembler.
  • FhG MP3enc 3.1. The gold standard of encoders. All other encoders strive to sound this good. Demo version only encodes up to 30 seconds.
    Update: according to recent listening tests, Lame already surpassed FhG encoders in quality at most bitrates. :-)
  • FhG l3enc. The older brother of MP3enc. Very slow, but with quite reasonable quality.
  • FhG Fastencc this "free" encoder was created with libraries stolen from Fraunhofer. It's the faster brother of MP3enc, and also the only FhG encoder to offer VBR encoding. Quality is not on par with MP3enc or LAME.
  • BladeEnc One of the first free encoders for Linux. Development has stopped at version 0.94.2. Quality is not satisfactory.
  • Xing MP3 encoder Reasonable quality and extremely fast encoder. Is now the MP3 encoder used in Real Jukebox and Real Player, and has been recently released under an Open Source license (it's still limited to Windows though)
  • QDesign MP3 encoder Horrible quality. Only listed here for completeness purposes.
  • ReallyRareWares is an online museum preserving obsolete and defunct encoders for several audio formats, including old LAME versions and obscure MP3 encoders (most of these encoders are simply compiles of the MPEG reference sources - dist10 - though)

MP3 Encoder Comparisons based on listening tests:

MP3 Encoding Web Sites:

  • Hydrogenaudio - Public discussion forum focused on psychoacoustic audio compression, featuring an MP3 section.
  • MAZ Sound Encoders and other audio software.

General MP3 Web Sites:

MP3 Related Software and Hardware:

  • A favorite Linux ripper: cdparanoia (also, GNU's libcdio, a multiplatform port of CDparanoia)
  • How to figure out which codec was used to make that mp3? Use EncSpot
  • Open source embedded mp3? Cantante
  • The MAD decoder Bug free, 24bit and GPL!
  • PCAVtech sound card benchmarks
  • Maate looks like a very sophisticated MP3 analysis package. They also have a good description of MP3 frames.
  • A nice .wav file viewer and editor: sweep
  • mptrim: Trim silence and adjust volume of mp3 files.
  • mp3check: A program to check integrity of mp3 files.
  • Mpcut: X11 mp3 frame editor.
  • mp3asm: A program to cut and paste mp3 frames.
  • MP3Splitter: Win32 MP3 splitter and frame statistics.
  • jchopwave: Source code to a utility to split up .wav files.

MP3 Encoding direct from line-in:

  • mpegrec: Linux/Win32 line-in/mic MP3 recorder (requires LAME).
  • MixMP3 by Dmitry Lesnikov
  • Messer by Dariusz Sieradzki
  • LAMEr, also a nice Windows frontend

Patent Information:

lame-3.100/doc/html/introduction.html000644 001751 001751 00000016666 11404473004 021217 0ustar00netchildnetchild000000 000000 Introduction to encoding
LAME Official Logo

Introduction to encoding

Introduction

There is a lot of confusion surrounding the terms audio compression 1, audio encoding, and audio decoding. This section will give you an overview what audio coding (another one of these terms...) is all about.

The purpose of audio compression

Up to the advent of audio compression, high-quality digital audio data took a lot of hard disk space to store. Let us go through a short example.

You want to sample 1 minute of your favourite song and store it on your harddisk. Because you want CD quality, you sample at 44.1 kHz, stereo, with 16 bits per sample.

44100 Hz means that you have 44100 values per second coming in from your sound card (or input file). Multiply that by two because you have two channels. Multiply by another factor of two because you have two bytes per value (that's what 16 bit means). The song will take up 44100 samples/s · 2 channels · 2 bytes/sample · 60 s/min ~ 10 MBytes of storage space on your harddisk.

In order to stream this over internet, a speed of at least 1.41Mbits/ s is needed, which wasn't a common speed at all at the time MP3 was invented. If you wanted to download that, given an average 56k modem connected at 44k, it would take 1.41Mbits · 1000 kbits/Mbit / 44 kbits ~ 32 times as much.
This means 32 minutes just to download one minute of music!

Digital audio coding, which - in this context - is synonymously called digital audio compression as well, is the art of minimizing storage space (or channel bandwidth) requirements for audio data. Modern perceptual audio coding techniques (like MPEG Layer III) exploit the properties of the human ear (the perception of sound) to achieve a size reduction by a factor of 11 with little or no perceptible loss of quality.

Therefore, such schemes are the key technology for high quality low bit-rate applications, like soundtracks for CD-ROM games, solid-state sound memories, Internet audio, digital audio broadcasting systems, and the like.

The two parts of audio compression

Audio compression really consists of two parts. The first part, called encoding, transforms the digital audio data that resides, say, in a WAVE file, into a highly compressed form called bitstream. To play the bitstream on your soundcard, you need the second part, called decoding. Decoding takes the bitstream and re-expands it to a WAVE file.

The program that effects the first part is called an audio encoder. LAME is such an encoder . The program that does the second part is called an audio decoder. Nowadays there are lots of players that decode MP3

Compression ratios, bitrate and quality

It has not been explicitly mentioned up to now: What you end up with after encoding and decoding is not the same sound file anymore: All superfluous information has been squeezed out, so to say. It is not the same file, but it will sound the same - more or less, depending on how much compression has been performed on it.

Generally speaking, the lower the compression ratio achieved, the better the sound quality will be in the end - and vice versa.
Table 1.1 gives you a rough estimate about the quality you can expect.

Because compression ratio is a somewhat unwieldy measure, experts use the term bitrate when speaking of the strength of compression. Bitrate denotes the average number of bits that one second of audio data will take up in your compressed bitstream. Usually the units used will be kbps, which is kbits/s, or 1000 bits/s (not 1024).
To calculate the number of bytes per second of audio data, simply divide the number of bits per second by eight.

table 1.1: bitrate versus sound quality
Bitrate Bandwidth Quality comparable to
16 kbps mono 5.5 khz above shortwave radio / telephone
32 kbps mono 8.5 khz near AM (medium wave) radio
64kbps mono, 128 kbps stereo 16 khz FM radio
-V 3~-V 0 (160~200 kbps)
(variable bitrate)
18~20 khz perceptual transparency versus CD2
  1. Audio compression (also called coding) means reduce the size (bytes) that the original source requires to be stored. This is not the same than compressors in DSP (or audio effects). The latter reduces the dynamic range of the audio so that there is less difference in perceived loudness between its strong and subtle parts.
  2. Lossy encoding (as opposed to lossless) cannot guarantee transparency all of the time. This is the value accepted as the sweet spot.
lame-3.100/doc/html/Makefile.in000644 001751 001751 00000035665 13170220146 017654 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/html ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkghtmldir)" DATA = $(pkghtml_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = $(docdir)/html includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign pkgdocdir = $(docdir)/$(PACKAGE) pkghtmldir = $(pkgdocdir)/html pkghtml_DATA = \ about.html \ abr.html \ cbr.html \ contact.html \ contributors.html \ detailed.html \ history.html \ index.html \ introduction.html \ links.html \ list.html \ ms_stereo.html \ usage.html \ vbr.html EXTRA_DIST = $(pkghtml_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/html/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/html/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkghtmlDATA: $(pkghtml_DATA) @$(NORMAL_INSTALL) @list='$(pkghtml_DATA)'; test -n "$(pkghtmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkghtmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkghtmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkghtmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkghtmldir)" || exit $$?; \ done uninstall-pkghtmlDATA: @$(NORMAL_UNINSTALL) @list='$(pkghtml_DATA)'; test -n "$(pkghtmldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkghtmldir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkghtmldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkghtmlDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkghtmlDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkghtmlDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-pkghtmlDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/doc/html/contact.html000644 001751 001751 00000010452 11404473004 020114 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: Contact Information
LAME Official Logo

Contact Information

MP3 encoder mailing list

For general discussions and comments about LAME and MP3 encoding, you can check the MP3 encoder mailing list. Keep in mind this is not the preferred list if you want to get in touch with the developers.

Archives are also available (older archives: before October 2000)

LAME development mailing list

The lame-dev list is right place for everything related to LAME development: bug reports, questions and suggestions concerning the encoder, the documentation and the web pages. It's also the best way to get in touch with the active developers. Archives are provided by SourceForge.

CVS mailing list

If you want to be automatically notified of commits to CVS, you can subscribe to the lame-cvs list.

IRC

Some developers and other interested parties can eventually be found on the #mp3encoder channel on the FreeNode Network.

Bug reports/tracker

To submit bug reports, you can use the bug tracker besides the lame-dev mailing list. Please be descriptive in your bug report. You should clearly mention your problem, LAME version used and how to reproduce the bug.

Contact developers

Here is the list of developers. If you encounter a problem, please use any of the ways mentioned above instead of directly contact a developer.

Contact the Webmaster

The current Webmaster for the LAME project is Roberto Amorim. You can contact him through e-mail.

lame-3.100/doc/html/ms_stereo.html000644 001751 001751 00000012612 11404473004 020461 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: Mid/Side Stereo
LAME Official Logo

LAME - Mid/Side Stereo

During years, what is called Joint-stereo has been misunderstood.
Joint stereo in MP3 is a mechanism to selectively choose between three modes of storing stereo information. These three modes are Simple Stereo , Mid-Side Stereo, and Intensity-Stereo.

In Simple Stereo, the encoder analyzes the left and the right channels independently and stores the information as-is, without further checking the similarities in the signal1

In Mid-Side Stereo, the encoder analyzes the left, right2 , mid (l+r) and side (l-r) channels. It then gives more bits to the mid than the side channel (as usually the side channel is less complex) and then stores just the mid and side channels into the resulting MP3.
This way, the mid channel can be encoded as if the frame was bigger, and as such have more quality with the same bitrate.
Note: Mid/side in MP3 is switched frame-by-frame. In AAC, it can be switched band by band.

Intensity-Stereo (not supported in LAME) uses a technique known as joint frequency encoding, which is based on the principle of sound localization.
Human hearing is predominantly less acute at perceiving the direction of certain audio frequencies. By exploiting this 'limitation', intensity stereo coding can reduce the data rate of an audio stream with little or no perceived change in apparent quality.
It works by merging the upper spectrum into just one channel (thus reducing overall differences between channels) and transmiting a little side information about how to pan certain frequency regions.
This type of coding does not perfectly reconstruct the original audio because of the loss of information and can cause unwanted artifacts. However, for very low bitrates this tool usually provides a gain of perceived quality. 3

The LAME mid/side switching criterion, and mid/side masking thresholds are taken from Johnston and Ferreira, Sum-Difference Stereo Transform Coding, Proc. IEEE ICASSP (1992) p 569-571.

The MPEG AAC standard claims to use mid/side encoding based on this paper.

  1. This is not the same than dual-mono. Dual-mono should be used where the left and right channels of the input file contain two different streams, where you should choose one (as in two different languages)
  2. If one channel has much less noise masking in a certain band than the other, it could happen than the noise spread (by mid/side stereo) may no longer be masked for that channel. If both channels have the same masking, then the noise spread between both channels will be equally well masked.
    To prevent this from happening, there is an analysis done on the left and right channel to determine the noise masking thresholds and properly mask the noise.
  3. Quote from wikipedia Joint_stereo.
lame-3.100/doc/html/history.html000644 001751 001751 00000314254 13154046617 020203 0ustar00netchildnetchild000000 000000 LAME Changelog

History

Starting with LAME 3.0:
red = features and bug fixes which affect quality
blue = features and bug fixes which affect speed
black = usability, portability, other

LAME 3.100   2017 (in preparation)

  • Rogério Brito
    • Don't include the debian directory as one that is needed during builds. Patch taken from Debian's packaging of lame.
    • Resurrect Owen Taylor's code dated from 97-11-3 to properly deal with GTK1. This was transplanted back from aclocal.m4 with a patch provided by Andres Mejia. This change makes it easy to regenerate autotools' files with a simple invocation of autoconf -vfi.
    • Fix possible race condition causing build failures in libmp3lame. Discovered in automated builds by the Debian project with patch provided by Andres Mejia.
  • Robert Hegemann
    • Improved detection of MPEG audio data in RIFF WAVE files. Tracker item [ 3545112 ] Invalid sampling detection
    • New switch --gain <decibel>, range -20.0 to +12.0, a more convenient way to apply Gain adjustment in decibels, than the use of --scale <factor>.
    • Fix for tracker item [ 3558466 ] Bug in path handling
    • Fix for tracker item [ 3567844 ] problem with Tag genre
    • Fix for tracker item [ 3565659 ] no progress indication with pipe input
    • Fix for tracker item [ 3544957 ] scale (empty) silent encode without warning
    • Fix for tracker item [ 3580176 ] environment variable LAMEOPT doesn't work anymore
    • Fix for tracker item [ 3608583 ] input file name displayed with wrong character encoding (on windows console with CP_UTF8)
    • Fix for bug ticket [ #447 ] Fix dereference NULL and Buffer not NULL terminated issues. Thanks to Surabhi Mishra
    • Fix for bug ticket [ #445 ] dereference of a null pointer possible in loop. Thanks to Renu Tyagi
    • Fix for bug ticket [ #449 ] Make sure functions with SSE instructions maintain their own properly aligned stack. Thanks to Fabian Greffrath
    • Fix for bug ticket [ #458 ] Multiple Stack and Heap Corruptions from Malicious File. Thanks to Gareth Evans and Elio Blanca
    • Fix for bug ticket [ #460 ] A division by zero vulnerability. Thanks to Wang Shiyang, Liu Bingchang
    • Fix for bug ticket [ #461 ] CVE-2017-9410 fill_buffer_resample function in libmp3lame/util.c heap-based buffer over-read and ap
    • Fix for bug ticket [ #462 ] CVE-2017-9411 fill_buffer_resample function in libmp3lame/util.c invalid memory read and application crash
    • Fix for bug ticket [ #463 ] CVE-2017-9412 unpack_read_samples function in frontend/get_audio.c invalid memory read and application crash
    • Fix for bug ticket [ #434 ] clip detect scale suggestion unaware of scale input value
    • HIP decoder bug fixed: decoding mixed blocks of lower sample frequency Layer3 data resulted in internal buffer overflow (write). Thanks to Henri Salo
  • Alexander Leidinger
    • Feature request, patch ticket [ #27 ] Add lame_encode_buffer_interleaved_int() by Michael Fink


LAME 3.99.5   February 28 2012

  • Rogério Brito
    • autotools: Fix compilation on alpha using proper ifdef guards. Thanks to Andres Mejia.
    • Small correction of the documentation.
  • Robert Hegemann
    • Workaround for cygwin build problem. Tracker item [ 3480692 ] mingw-w64 compilation error
    • Fix for a problem when LAME is compiled with fast floating point math. It could result in bitrate bloat with silent input data.
    • Bug fix for tracker item [ 3486753 ] Artifacts at the beginning of decoded file

LAME 3.99.4   January 25 2012

  • Robert Hegemann
    • Fix for tracker item [ 3475581 ] lame crashes at .w64 input file
    • Addressing things brought to attention by tracker item [ 3463197 ] 3.99.x problem WFED and PCST frames
      • WFED and PCST frames can now be added, to tag podcasts iTunes recognizes
      • USER frames are now supported
      • COMM frames can now have a description, when passed via --tv "COMM=description=full text"
      • possible divide-by-zero exception should be fixed
      • adding malformed user-defined-frames could result in abnormal program termination, fixed

LAME 3.99.3   November 26 2011

  • Robert Hegemann
    • Fix for tracker item [ 3441349 ] --tg does not handle genre number when adding unicode tag

LAME 3.99.2   November 18 2011

  • Robert Hegemann
    • Due to some bugs in 3rd party HW/SW decoders, those were not be able to make use of LAME's extended info tag anymore, resulting in problems with things like gapless playback.

LAME 3.99.1   November 5 2011

  • Robert Hegemann
    • Fixes for several issues with ID3v2 unicode tags, using Big-Endian text encodings. Because of several other software (like Windows Media Player), LAME writes Little-Endian unicode tags only.
      Thanks to Taihei Monma, for reporting these issues. Tracker items: [ 3431203, 3431222, 3431241 ]

LAME 3.99   October 15 2011

  • 3.99 beta 1 becomes 3.99

LAME 3.99 beta 1   not yet released

  • Robert Hegemann
    • Fix for Bugtracker item [ 3395813 ] id3tag_set_fieldvalue for URL link frames Broken
    • Fix for Bugtracker item [ 3368977 ] Wave Parser doesn't pad chunks
    • Fix for Bugtracker item [ 3034259 ] confusing fatal error: can't update LAME-tag frame!

LAME 3.99 beta 0   not officially released

  • Josep Maria Antolín Segura
    • Documentation work
  • Rogério Brito
    • Improve Debian packaging.
      • Include suggestions made by Fabian Greffrath
      • Update version of the Debian package to reflect that it is taken from CVS.
      • Get rid of a transitional package
      • Much more to come...
    • Minor fix to validate the history file correctly
  • Robert Hegemann
    • Porting of LAME mp3rtp program to Windows platform
    • Fix: for free format mp3 above 320 kbps, the maximum allowed bits was limited too far.
    • Changed behaviour: LAME replaces common suffixes by MP3/WAV when no output filename was given. For example, a simple lame x.wav will create output file x.mp3
    • UNICODE support on Windows OS, file names and ID3v2 tags; related: Bugtracker item [ 3052230 ] Lame.exe can't find files with non-ASCII names
    • Added support for WAVE FORMAT IEEE FLOAT input files
    • New switch --swap-channel added, see tracker item [ 1118412 ] RFE: option to swap L and R channels
    • New switches -m l and -m r to select either left or right channel for mono encoding.
    • Feature request item [ 3134258 ] Allow larger images with LAME (>128KB)
    • Fix for Bugtracker item [ 2962223 ] Encoder delay and padding values ignored when re-encoding
    • Fix for Bugtracker item [ 2986823 ] Error when building Lame with NASM support -still exists
    • Fix for Bugtracker item [ 3125235 ] make -f Makefile.mingw32 fails
    • Fix for Bugtracker item [ 3021935 ] ID3 tag TXXX cannot be used more than once
    • Fix for Bugtracker item [ 3025801 ] gain_analysis.h needs int constants
    • Fix for Bugtracker item [ 3277412 ] Segmentation fault at layer2.c:105 with --decode
    • Changes in new VBR code:
      • tuning on PSY model
      • tuning on VBR scale and resulting bitrates
      • Minor bug fix for sfb21 encoding
    • All encoding modes use the PSY model from new VBR code, addresses Bugtracker item [ 3187397 ] Strange compression behavior
    • Fix for a possible out of bounds array access in HIP decoder, addresses Bugtracker item [ 3091776 ] crash at III_dequantize_sample

LAME 3.98.4    March 22 2010

  • Joseph Flynn
    • Improvements for LAME DirectShow filter:
      • Added support for the DirectShow IAMStreamConfig Interface to the LAME encoder filter output pin.
      • Modified the DirectShow filter registration section so that the LAME Encoder filter is correctly registered in the Audio Compressors filter category. This will allow third-party encoding applications using the DirectShow System Device Enumerator Interface to correctly detect the LAME encoder when querying the Audio Compressors filter group.
      • Modified the filter registration information so that the MP3 audio subtype is correctly reported as being supported on the encoder output pin. This will allow third-party encoding applications using the DirectShow IFilterMapper2 Interface to recognize that the LAME encoder supports MP3 output.
      • Altered the Filter Merit Value that was being used when the filter was registered so that it is now using the standard DirectShow compressor filter merit value of MERIT_DO_NOT_USE (0x200000). Previously, the filter was being registered using a value of MERIT_SW_COMPRESSOR (0x100000), which was at a lower priority (i.e. worse priority) than MERIT_DO_NOT_USE. This prevented the LAME Encoder filter from being selected for use by some third-party encoding applications.
      • Added code to calculate the frame length of the audio frames used for the nBlockSize element of the WAVEFORMATEX output structure. Previously this value was simply hard-coded to 1.
  • Robert Hegemann
    • Fix for Bugtracker item [ 2973877 ] A problem regarding the new drain code

LAME 3.98.3    February 27 2010

  • Rogério Brito:
    • Update the debian packaging for the new release.
  • Robert Hegemann
    • The ignore-tag-errors switch had no effect when embedding album art, fixed.
    • Library API change: lame_decode functions are now obsolete but still present, please use hip_decode instead. The reason for this change is: lame_decode functions use a single global variable within the library to store decoder setup, hip_decode functions don't. The encoder now uses hip_decode internally and it is now possible to use clipdetect feature while reencoding mp3 to mp3.
    • Workaround for FFMPEG bug, which uses to call lame_encode_flush more than once in a loop.
    • Windows: program icon and version info added (when building with VC9)
    • Fix for Bugtracker item [ 2688413 ] lib name problem in Microsoft Visual Studio 6
    • Fix for Bugtracker items [ 2051870, 2423650, 2928684 ] several small documentation issues
    • Fix for Bugtracker item [ 2723518 ] resampling in 3.98 and 3.99alpha
    • Fix for Bugtracker item [ 2891879 ] Because of Windows API change, there was a problem with the prority switch.
    • Fix for Bugtracker item [ 2893101 ] Access Violation in BladeMP3EncDLL if UNICODE was defined.
    • Fix for Bugtracker item [ 2887359 ] Wrong length in ID3v2 tag when num_samples isn't set
    • Fix for Bugtracker item [ 2872590 ] LameTAG: "Music length" missmatch in LAME 3.98
    • Fix for Bugtracker item [ 2824296 ] wrong enc_padding value in LAME 3.99a and 3.98.3 (from CVS)
    • Revisiting the FhG decoder problem (FhG V1.5 build 50, ships with MS Windows): enabling the new-drain-code seems to solve that issue better, than restricting the buffer size (see below: 3.98 beta 1, May 16 2007).
    • Patch submitted by Bernhard Doebler, tracker item [ 2807676 ] Error when building Lame with NASM support
    • Patch submitted by Mancuso Raffaele, tracker item [ 2406420 ] compile lame_enc.dll under cygwin

LAME 3.98.2    September 22 2008

  • Robert Hegemann
    • Fix for Bugtracker item [ 2123206 ] lame 3.98.1 segfaults with -h

LAME 3.98.1    September 21 2008

  • Rogério Brito:
    • More fixes for the abx tool for Unix systems:
      • Plugged a memory leak.
      • Fixed an endianness problem: users of big-endian machines can now do abx tests.
    • Fixed history's HTML doctype
    • Fixed history so that it finally validates at W3's validator
    • Fixed compilation of frontend mp3rtp.c. Thanks to Kris Karas. Bugtracker item [ 2015432 ] mp3rtp missing uint16_t in lame 3.98
  • Robert Hegemann:
    • Fix for Bugtracker item [ 2031704 ] --id3v1-only didnt work in 3.98-final
    • Fix for Bugtracker item [ 2022035 ] encoder_padding value and resampling
    • Fix for Bugtracker item [ 2029282 ] Frequency filtering API broken in 3.98
    • Fix for Bugtracker item [ 2039648 ] potential memory leak in parse_args() function in parse.c
    • Fix for some tagging issues:
      • Made search for ID3v1 genres more sloppy, abbrevations may match more often as some simple typos. Examples:
        • --tg "Alt. Rock" matches genre "Alternate Rock"
        • --tg "acapela" matches genre "A Cappella"
      • New switch --pad-id3v2-size "n": adds ID3v2 tag with n padding bytes.

LAME 3.98    July 4 2008

  • Anton Sergunov:
    • Frontend DirectShow: enabling LAME dshow filter to connect to "File Writer Filter".
  • Rogério Brito:
    • Updates to the Debian Packaging
    • Fixes to the abx tool for Unix systems (so that more people can evaluate LAME's compression against the original files)
  • Alexander Leidinger:
    • explicitely link the math lib to the lame lib
    • add switch to disable the use of the compaq optimized math lib

LAME 3.98 beta 8   April 13 2008

  • Robert Hegemann:
    • LAME now accepts a floating point value in the range [0,...,10[ as VBR quality setting, like -V5.678
    • Found and fixed some suspicious code in additive masking calculation for VBR-NEW
    • bug-fix:experimental code was defaulted by accident for VBR-NEW
    • fix for some endianess problem on big-endian machines

LAME 3.98 beta 7   April 6 2008

  • Robert Hegemann:
    • libmp3lame API: allow frontends to separately retrieve LAME/Xing and ID3 data, because the old library automatism makes it impossible to make fully buffered encodes.
    • libmp3lame API: added some experimental unicode ID3 tagging code.
    • frontends: write itself final ID3 tags and LAME/Xing header frame
    • lame_enc.dll: writes itself final LAME/Xing header frame
    • Latest changes to the new VBR psymodel:
      • uses a different spreading function
      • bug-fix for out-of-bounds array access (program stack corruption possible)

LAME 3.98 beta 6   December 16 2007

  • Robert Hegemann:
    • Feature request [ 1811483 ] WAVE_FORMAT_EXTENSIBLE support (PCM)
    • Fix for some rare scalefactor selection issue the newer vbr code had at low compression levels
    • Fix for Bugtracker item[ 1813496 ] AIFF parsing bug
    • Latest changes to the new VBR code:
      • it now has its own psy model, a derivation from NSPSY.
      • some more tuning has been done for this new psy model. Many thanks to Horst Albrecht and Myles Thaiss.
      • the "out-of-bits" strategy is reworked
    • It was possible, that the "interchannel masking effects feature" was used by the dual-channel-mode for bi-lingual encodings too. It was meant to work on stereo L/R channels only.

LAME 3.98 beta 5   August 12 2007

  • Jonathan Stott:
    • Bug tracker items: [ 1590693 ] ID3v2 tag not writing, [ 1636267 ] ID3v2 tags overwritten
      If the output file is opened 'write-only', then LAME can't update the LAME tag. In this case LAME silently overwrote the first bytes of the file and an optional ID3v2 tag disappeared. Now an error message will be printed and no data is written in this case.
  • Robert Hegemann:
    • Fix for Bugtracker item [ 1719593 ] Track numbers > 255 not allowed even with --id3v2-only
    • Fix for Bugtracker item [ 1742623 ] fail(lame --mp3input -m m -b 128 --resample 8 *.mp3 **.mp3)
      The problem here was, the input files are MPEG-1 Layer2 files named as MP3s. Even if you leave out the --mp3input switch LAME tried to decode the input files as Layer3 files because of the file name extension and because it found some valid looking Layer3 synchronization header. The fixed LAME version does not assume the file name extension is always correct and treats the files depending on the first found MPEG sync word. The files in question are now correctly detected as Layer2 files and transcoding does succeed.
    • Fix for Bugtracker item [ 1445175 ] Input being stdin fails in Windows on WAV files
      The problem here was, seeking on pipes shows some different behaviour depending on C-Library implementations. The workaround tries to detect it's working on a pipe and doing some reading instead of seeking in that case.
    • Fixing some memory leak in the 'lame_enc.dll'.
    • Fix for Bugtracker items [ 1160757, 1160741 ] --little-endian / --big-endian not working
      These switches where originally intended to be used together with Libsndfile only.
    • Fix for Bugtracker item [ 1746336 ] Incorrect Bitrate with ABR und --resample, LAME 3.98b4
      Some earlier bug-fix had some typo. As a result, when adding a '--resample 123' switch, the average bitrate rised upto maximum bitrate.

LAME 3.98 beta 4   June 23 2007

  • Dennis Lambe Jr: Added support for total track count (id3v2) in the frontend
  • Nyaochi:
    • Ability to set user-defined ID3v2.3 frame
    • Ability to include albumArt in ID3v2.3 tag
  • Robert Hegemann:
    • Bugfix: the "play length in ms", which is stored in the ID3v2 tag TLEN, was not correctly computed. Some hardware and software players were confused by this garbage data.
    • Out of bits strategy for the newer VBR code overhauled
    • LAME API: the ID3 tag functions do not store the pointers passed anymore, they do make deep copies of strings passed as parameters.
    • Changes in LAME frontend switches regarding ID3 tags:
      --tg "MyGenre" will route unknown ID3v1 genres to "Other" for ID3v1 tags and will be stored as plain text "MyGenre" for ID3v2 tags. Genres given by known ID3v1 numbers will be stored as its corresponding text in ID3v2 tags.
      --tn "02/02" will store the track number specified as plain text as-is for ID3v2 tags.

LAME 3.98 beta 3   May 22 2007

  • Robert Hegemann:
    • Fixes regarding max number of bits limitation

LAME 3.98 beta 2   May 20 2007

  • Robert Hegemann:
    • Bug tracker item: [ 1693461 ]; Fixed memory leaks in ACM codec
    • Fixed encoding of non-standard sampling rates in CBR
    • Improved VBR strategy when running out of bits

LAME 3.98 beta 1   May 16 2007

  • Alexander Leidinger:
    • Add TLEN (ID3v2) support (Submitted by: Linus Walleij).
    • Add number of total tracks per album (ID3v2) support (Submitted by: Kyle VanderBeek).
    • Some seatbelts for overflowing arrays in the ID3v2 support.
    • Update the RPM spec (Submitted by: Kyle VanderBeek).
    • Fix some mem-leaks in the error case.
    • Update to newer autotools versions.
    • Update to use a recent libsndfile (submitted by libsndfile author).
    • Intrinsics support enabled for gcc
  • Robert Hegemann:
    • The newer VBR code is now LAME's default VBR routine
    • Fixed: in case of not enough bits the new vbr code incorrectly used old vbr routine
    • Improved ATH adjustment in low volume cases
    • Fixed (PSY model): mapping from convolution bands to partition bands was broken since we replaced tables by own calculation several years ago
    • Fixed (PSY model): loss of fraction in equal loudness weighting
    • Fixed (PSY model): in NSPSY highpass filter, out of bounds access in fircoef
    • Known problem samples for the new VBR code: many of them are at an acceptable quality level now; with a big 'Thank You' to Francis Niechcial
    • Modified VBR strategy to handle out of bits cases
    • Restricted bitreservoir size for 320 kbps frames to the size used for sideinfo, because of decoding problems with FhG decoders installed on almost every Windows system
    • LAME aborts on unsupported input files or unrecognized parameter options passed more often now
    • Bug tracker item: [ 1596306 ] "fatal error during initialization"; an invalid MPEG samplerate was returned by optimum_samplefreq function
    • Bug tracker item: [ 1585942 ] lame not --silent when TERM not set; in case LAME was build with TERMCAP defined and no TERM environment is defined, now we do not issue an error message and silently fallback to the default behaviour as if LAME was compiled without TERMCAP defined.
    • Bug tracker item: [ 1711980 ] LAME writes invalid Xing header when ID3 tags exist; LAME was sometimes writing an invalid Xing/Info header
    • Feature request: [ 1588283 ] Flushing output stream in lame.exe; 'flush' option added
    • Added FFTSSE and FFT3DNOW assembler code from Lame4 branch
    • Changes in lame frontend switches: -k removed, add lowpass and highpass switches if you need to change them; --short/noshort/allshort - degraded into DEVELOPER ONLY switches normal users shouldn't use them; -X -Z degraded to DEVELOPER ONLY switches, -X is too tough to communicate to end users and -Z isn't used actualy
    • Fixed some console printing problems
    • Windows: ACM code now uses LAME library API only, all references to private include files are removed
    • Windows: DirectShow code now uses LAME library API only, all references to private include files are removed
    • Windows: disabled code that resets processor affinity, because this doesn't belong to LAME, but seems to work around some problems the parent process has (in most cases EAC)
  • John33:
    • Fixed mp2 and mp3 decoding: For mp3 and mp2 decoding, this now yields the same output as foobar2000 but the error checking remains unchanged
  • Gabriel Bouvigne:
    • VC8 project files
    • Added support for x64 under VC8
    • Restricted MPEG 2.5 to 64kbps frames
  • Takehiro Tominaga:
    • SSE version of FFT

LAME 3.97   September 24 2006

  • 3.97 beta 3 becomes 3.97

LAME 3.97 beta 3   August 19 2006

  • Gabriel Bouvigne:
    • Workaround against a short blocks detection issue

LAME 3.97 beta 2   November 26 2005

  • Gabriel Bouvigne:
    • Fixed an initialization error when input is not using a standard sampling frequency
    • Fixed a possible assertion failure in very low bitrate encoding
    • Slight change regarding ATH adjustment with V5
    • Reinstated bit reservoir for 320kbps CBR
    • ReplayGain analysis should now be faster when encountering silent parts
  • Takehiro Tominaga:
    • Fixed a possible link problem of assembly code

LAME 3.97 beta 1   September 12 2005

  • Takehiro Tominaga:
    • Fixed an out of array access in mp3rtp
    • Fixed a quality setting in DLL
    • Fixed display when using --silent
  • Vitaly Ivanov:
    • Updated DirectShow interface
  • Robert Hegemann:
    • Fixed an out of array access
    • Fixed some small rounding problem in vbr-new quantization routines
    • Fixed a bug in vbr-new regarding high frequencies (sfb21) when using -Y
    • Fixed a few bugs in vbr-new when using -Y
    • Updated scalefactors allocation scheme in vbr-new
    • Fixed mingw32 configure problems
    • Resolved some compiler warnings
    • Updated command-line visualisation
  • Gabriel Bouvigne:
    • Changed some FLOAT8 to FLOAT
    • Added project files for VC7
    • Reworked -q1 and -q0
    • Updated presets
    • Fixed an error in ISO quantization on systems not using the IEEE754 hack
    • Faster quantization
    • SSE version of init_xrpow
  • Rogério Brito:
    • Updated Debian packaging
    • Documentation work
  • Chris Miller:
    • Support for x64 platform SDK in makefile.msvc

LAME 3.96.1    July 25 2004

  • Robert Hegemann:
    • Fixed a rare bug in vbr-new (could lead to crashes or data corruption)
  • Gabriel Bouvigne:
    • some fixes in ACM codec
    • fixed padding when encoding to 320kbps
    • fixed block size selection for mid and side channels

LAME 3.96    April 11 2004

  • Gabriel Bouvigne:
    • new quantization selection mode (used in ABR/CBR)
    • set sfscale for ABR/CBR up to 160kbps

LAME 3.96 beta 2    March 28 2004

  • Takehiro Tominaga:
    • removed unnecessary integer convertion in resampling
  • Robert Hegemann:
    • reworked scalefactor allocation in vbr-new
    • fixed a freeformat decoding problem
  • Gabriel Bouvigne:
    • updated minimal bitrate for V1 and V2
  • Aleksander Korzynski:
    • added ability to disable ReplayGain analysis

LAME 3.96 beta    March 7 2004

  • Takehiro Tominaga:
    • fixed decoding issue
  • Aleksander Korzynski:
    • changed internal ReplayGain handling
    • fixed some issues when ReplayGain is used with resampling
  • Robert Hegemann:
    • added standard ISO quantization for vbr-new, used at lower quality settings
    • faster count_bits for vbr-new
    • faster find_scalefac_ave function for vbr-new
    • fixed an out of array access in psychoacoustic models; this bug could make some psy calculations worthless and sometimes let lame crash
    • fixed an error on silent scalefactor bands; this bug resulted in huffman data overrun problems while decoding, resulting in audible glitches
    • fixed a freeformat decoding bug
  • Gabriel Bouvigne:
    • adjusted short block thresholds
    • fixed some array addressing bugs
    • made ReplayGain analysis reentrant
  • David Chandler: fixed a crash in quantize_xrpow
  • Michal Bacik: fixed a crash when using 8kHz
  • Goran Markovic: fixed some decoding bugs
  • John Edwards: fixed a too small buffer in ReplayGain code

LAME 3.95.1    January 12 2004

  • Gabriel Bouvigne:
    • fixed a crash when using vbr-new
    • changed ReplayGain reference level to 89dB

LAME 3.95    January 11 2004

  • Gabriel Bouvigne:
    • fixed lowpass values when using vbr with mono files
    • faster quantization loops
    • faster count_bits
    • fixed a buffer requirement error in ACM codec
  • Takehiro TOMINAGA:
    • fixed mpglib and other decoding support code to prevent the crash when invalid mp3 input
  • removed Layer I decoding support
  • use FastLog and IEEE 754 hack on PowerPC too (approx. 10 percent faster)

LAME 3.94 beta December 15 2003

  • Takehiro Tominaga:
    • fixed block switching of nspsytune
    • best huffman divide in the inner loop. This should improve the quality, but PAINFULLY slow. So it is not enabled by default. Use -q0 to use it.
    • Changed -q option mapping. "-q2" until version 3.93 is now "-q3".
    • saving bits by better scalefactor storing
    • removed Vorbis support
    • substep quantization.This should help breaking the SFB21 bloating problem
    • made psychoacoustic model aware of ATH adjustements
    • use ATH value as short block masking lower limit
    • several fixes in psychoacoustic model
    • more robust decoding
  • Mark Taylor / Gabriel Bouvigne: fixed issues in VBR header
  • Mark Taylor: workaround against some hardware decoder defficiencies
  • Aleksander Korzynski: ability to compute the "Radio" ReplayGain and detect clipping on the fly. The ReplayGain value is stored in the Lame tag.
  • Gabriel Bouvigne:
    • work on presets
    • use presets by default for cbr/abr
    • use presets by default for vbr
    • analog silence detection in partitionned sfb21
    • do not compute noise in upper 0 part of the spectrum
    • only compute noise in modified scalefactor bands
  • Guillaume Lessard:
    • nogap related changes
  • Alexander Leidinger:
    • prevent closing the input fd prematurely if the input is a named pipe

LAME 3.93.1    December 1 2002

  • Gabriel Bouvigne:
    • preset medium added to the dll interface
    • fix for abr/cbr presets
    • fix -q0 switch
  • Alexander Leidinger: fix link problem on systems where socket() resides in libsocket

LAME 3.93    November 16 2002

  • Takehiro Tominaga:
    • bit allocation for pre-echo control improved for single channel encodings
    • substep noise shaping
    • optimizations by changing data structure
    • noise shaping model 2 fix
    • nspsytune FIR filter clean up
    • fix small psymodel bugs(DC current estimation, preecho detection of non-VBR mode, and nspsymode initialization)
    • portability fixes for Tru64 UNIX
  • Albert Faber: some fixes in the DLL
  • Simon Blandford: fixes for channel scaling in mono mode
  • Dominique Duvivier: some optimizations and a faster log10 function
  • Mark Taylor:
    • some tag related fixes in the direct show filter and in the ACM codec
    • fixed a mono encoding bug found by Justin Schoeman
    • calc_noise bug fix
    • other fixes
  • Alexander Leidinger:
    • update to autoconf 2.53, rewrite some configure tests
    • Akos Maroy: determine gcc version even with gcc 3.1
    • Andrew Bachmann: compile shared libs on BeOS (and perhaps other arches)
    • ultrasparc switches for gcc 3.1
    • fixes for SunOS 4.x
    • fixes for 64bit arches
    • CFLAGS fix for IRIX
    • don't override CFLAGS if exptopt isn't requested
  • Robert Hegeman:
    • some fixes
    • some fixes for VBR
  • Gabriel Bouvigne:
    • --noasm switch. Might help Cyrix/Via users
    • presets and alt-presets merged

LAME 3.92    April 14 2002

  • Alexander Leidinger:  add non linear psymodel (compile time option, disabled by default), workaround a bug in gcc 3.0.3 (compiler options, based upon suggestions from various people, see archives and changelog for more)
  • Steve Lhomme:  ACM wrapper (MS-Windows codec)
  • Steve Lhomme:  less memory copying on stereo (interleaved) input
  • Takehiro Tominaga: Inter-channel masking, enables with --interch x option
  • For buggy versions of gcc compiler (2.96*), back off on some of the advanced compiler options

LAME 3.91    December 29 2001

  • Darin Morrison:  Bugfix for --alt-preset (for content with low volume, clean vocals), only important for the "fast standard" preset
  • Alexander Leidinger:
    • add some missing files to the distribution
    • add --alt-preset to the man page

LAME 3.90    December 21 2001

  • Many small improvements and bug fixes not added to history
  • John Dahlstrom:  more fine tuning on the auto adjustment of the ATH
  • Robert Hegemann:  small speed and quality improvements for the old VBR code (--vbr-old).
  • Robert Hegemann:  some short block bug fixes
  • Robert Hegemann:  Big improvements to --vbr-mtrh, now encodes much more frequencies over 16khz
  • Robert Hegemann:  --vbr-new code disabled (outdated and lower quality) and replaced with --vbr-mtrh (Both --vbr-new and --vbr-mtrh now default to mtrh)
  • Robert Hegemann:  reordering of --longhelp to give more information, --extrahelp dropped
  • Darin Morrison:  Totally revamped and extremely high quality unified preset system and other general quality improvements now available with --alt-presets:
    • some improvements to psychoacoustics (vast improvements over default L.A.M.E. modes) when --alt-preset is used including:
      • Improved tuning of short block usage.
      • Improved quantization selection usage (the -X modes), now adapts between appropriate modes on the fly. Also helps on "dropout" problems and with pre-echo cases.
      • Improved joint stereo usage. Thresholds are better tuned now and fix some "dropout" problems L.A.M.E. suffers from on clips like serioustrouble.
      • Improved noise shaping usage. Now switches between noise shaping modes on the fly (toggles -Z on and off when appropriate) which allows lower bitrates but without the quality compromise.
      • Clips vastly improved over default L.A.M.E. modes (vbr/cbr/abr, including --r3mix): castanets, florida_seq, death2, fatboy, spahm, gbtinc, ravebase, short, florida_seq, hihat, bassdrum, 2nd_vent_clip, serioustrouble, bloodline, and others. No degraded clips known.
      • VBR bitrates are now more "stable" with less fluctuation -- not dipping too low on some music and not increasing too high unnecessarily on other music. "--alt-preset standard" provides bitrates roughly within the range of 180-220kbps, often averaging close to 192kbps.
    • --alt-presets replace the --dm-presets and "metal" preset is removed and replaced with generic abr and cbr presets.
    • --alt-preset extreme (note the 'e') replaces xtreme to help eliminate some confusion
    • --alt-preset vbr modes now have a fast option which offers almost no compromise in speed.
    • --alt-preset standard (and "fast standard") are now much lower in bitrate, matching --r3mix with an overall average, though offering higher quality especially on difficult test samples.
    • --alt-presets are no longer just "presets" as in a collection of switches, instead they are now quality "modes" because of special code level tunings (those mentioned above).
    • Use --alt-preset help for more information.
  • Roel VdB: more tuning on the --r3mix preset
  • Jon Dee, Roel VdB:  INFO tag
  • Alexander Leidinger, mp3gain@hotmail.com:  added --scale-l and --scale-r to scale stereo channels independantly
  • Takehiro Tominaga:  new noise shaping mode, offering more "cutting edge" shaping according to masking, enabled via -q0
  • Mark Taylor:  More work on --nogap
  • Gabriel Bouvigne:  Small changes to abr code for more accurate final bitrate
  • Gabriel Bouvigne, mp3gain@hotmail.com:  Preliminary ReplayGain analysis code added (not functional yet)
  • Gabriel Bouvigne, Alexander Leidinger:  Documentation updates
  • John Dahlstrom, DSPguru@math.com:  floating point interface function in the Windows DLL

LAME 3.89beta   July 5 2001

  • John Stewart:  long filename support for Win9x/NT.
  • Takehiro Tominaga:  LAME can calculate the CRC of VBR header, so now "lame -pv" works fine.
  • Robert Hegemann:  Improvements of the new VBR code (--vbr-mtrh).
  • Robert Hegemann: New VBR code (--vbr-mtrh) is now defaulted to get more feedback. The VBR speed is now on par with CBR. We will use the old VBR code in the release.
  • Gabriel Bouvigne: Change of the maximum frame size limit. LAME should now be more friendly with hardware players.
  • Gabriel Bouvigne: Size of VBR is now more balanced according to the -V value.
  • Alexander Leidinger: Finished the implementation of the set/get functions.
  • John Dahlstrom: LAME now handles 24bits input
  • Mark Taylor: bugs in lame --decode causing truncation of mp3 file fixed
  • Mark Taylor: preliminary --nogap support
  • "Final" API completed: shared library safe!  This API is frozen and should be backwords compatiable with future versions of libmp3lame.so, but we will continue to add new functionality.  

LAME 3.88beta   March 25 2001

  • A lot of work that was never added to the History!
  • Frank Klemm and Gabriel Bouvigne:  New ATH formula.  Big improvement for high bitrate encodings.
  • Takehiro Tominaga: Temporal masking
  • Gabriel Bouvigne/Mark Taylor: auto adjustment of ATH
  • Robert Hegemann:  Better outer_loop stopping criterion.  Enabled with -q2 or better.
  • Robert Hegemann/Naoki Shibata:  slow/carefull noise shaping.  -q3..9:  amplify all distorted bands.  -q2: amplify distorted bands within 50%.  -q1-0:  amplify only most distorted band at each iteration.
  • Takehiro Tominaga: Interframe, shortblock temporal masking.
  • Takehiro Tominaga:  LAME restructured into a shared library and front end application.  Slight changes to the API. More changes are coming to turn LAME into a true shared library (right now you have to recompile if you upgrade the library :-(
  • Naoki Shibata:
    • improvements to psychoacoustics (--nspsytune)
    • BUG in long block pre echo control fixed (some out of range array access in M/S psychoacoustics)
  • Ralf Kempkens:    Visual Basic Script for lame, suggested to put it on your Windows Desktop and you can drag'n'drop Waves to encode on it.
  • Alexander Stumpf:    improved lame.bat for 4Dos users
  • Mark Taylor: Several bugs fixed in the resampling code.
  • Frank Klemm, Robert Hegemann:    added assembler code for CPU feature detection on runtime (MMX, 3DNow, SIMD)
  • Takehiro Tominaga: 3DNow FFT code.
  • Florian Bome, Alexander Leidinger:    more work on configure stuff
  • Alexander Leidinger:   automake/libtool generated Makefiles and TONS of other work.
  • Alexander Leidinger:   Much work towards shared library style API.
  • Anonymous: New more efficient RTP code.
  • Mark Taylor: psycho-acoustic data now computed for all scalefactor bands (up to 24 kHz)
  • Mark Taylor, Takehiro Tominaga: All ISO table data replaced by formulas - should improve MPEG2.5 results for which we never had correct table data.

LAME 3.87alpha  September 25 2000

  • Mark Taylor:  Bug fixed in LAME/mpglib error recovery when encountering a corrupt  MP3 frame during *decoding*.
  • Albert Faber:  added LayerI+II decoding support
  • Frank Klemm:  added improved CRC calculation
  • Frank Klemm: substantial code cleanup/improvements
  • Robert Hegemann:  Bug fixes
    • in huffman_init, could lead to segmentation faults (only in rare cases, most likely at lower sample rates)
    • M/S switching at lower sample rates (the fact there is no 2nd granule was ignored)
  • Robert Hegemann:  speed up in  VBR
  • Jarmo Laakkonen:  Amiga/GCC settings for Makefile.unix.
  • Magnus Holmgren:  README and Makefile for (free) Borland C++  compiler. Will also compile lame_enc.dll, but this is untested.
  • Florian Bome:   LAME finally has a  ./configure script!!

LAME 3.86beta  August 6 2000

  • Christopher Wise:  A makefile for DJGPP, the DOS version of gcc.  Now most windows users should be able to compile LAME with minimal effort.
  • Robert Hegemann:  old VBR:   fixed some bugs and Takehiro's scalefac_scale feature (not yet on by  default.)  older LAME versions did not allow to spent more than 2500 bits of 4095 possible bits to a granule per channel, now fixed.
  • Robert Hegemann:  new VBR:   analog silence treatment like in old VBR
  • William Welch:  Improved options for Linux/Alpha gcc and ccc compilers in Makefile.
  • Mathew Hendry:  setting appropriate CRC bit for additional Xing-VBR tagging frame
  • Don Melton:  added ID3 version 2 TAG support
  • John Dahlstrom: fixed bug allowing timing information (for status in command line encoder) to overflow.
  • Tamito KAJIYAMA, Fixed several bugs in the LAME/Vorbis interface.
  • Mark Taylor:  lame --decode will recognize Album ID tags
  • Naoki Shibata:  Additive masking and other improvements to psycho acoustics.  (not yet on by default)

LAME 3.85beta   July 3 2000

  • Takehiro Tominaga:  mid/side stereo demasking thresholds updated.
  • Takehiro Tominaga: New short block MDCT coefficient data structure.  Should allow for future speed improvements.
  • Robert Hegemann:  fixed bug in old VBR routine, the --noath mode messed up the VBR routine resulting in very large files
  • Robert Hegemann: found bugs in some sections when using 32 bit floating point.  Default is now back to 64bit floating point.
  • Takehiro Tominaga:  Modified PE formula to use ATH.
  • S.T.L.:  README.DJGPP - instructions for compiling LAME with DJGPP, the dos version of gcc.

LAME 3.84beta  June 30  2000

  • Mark Weinstein:  .wav file output (with --decode option) was writing the wrong filesize in the .wav file.  Now fixed.
  • Mark Taylor:  (optional) Vorbis support, both encoding and decoding.  LAME can now produce .ogg files, or even re-encode your entire .ogg collection into mp3.   (Just kidding: it is always a bad idea to convert from one lossy format to another)
  • ?: Bug fixed causing VBR to crash under windows.   (pretab[] array overflow)
  • Sergey Sapelin: Another bug found in the mpg123 MPEG2 tables.  Now fixed for the mpg123 based decoder in LAME.
  • Marco Remondini:  VBR histogram works in win32.  compile with -DBRHIST -DNOTERMCAP
  • Takehiro Tominaga:  LAME CBR will now use scalefac_scale to expand the dynamic range of the scalefactors.
  • Iwasa Kazmi:  Library improvements:  exit()'s, printf, fprintf's are being replaced by interceptable macros.

LAME 3.83beta  May 19  2000

  • Mark Taylor:  Bug in buffering routines:  in some cases, could cause MDCT  to read past end of buffer.  Rare in MPEG2, even more rare for MPEG1, but potentially serious!
  • Mark Taylor:  MDCT/polyphase filterbank was not being "primed" properly.  Does not effect output unless you set the encoder delay lower than the default of 576 samples.
  • Mark Taylor:  "vdbj" and "Caster"  found several VBR bugs (now fixed):   1.  Analog silence detection only checked frequencies up to 16 kHz.  2.  VBR mode could still somehow avoid -F mode.  3.  VBR mode would ignore noise above 16 kHz (scalefactor band 22), Now calc_noise1 will compute the noise in this band when in VBR mode.  Not calculated in CBR  mode since CBR algorithm has no way of using this information.
  • Mark Taylor:  scalefactor band 22 info (masking(=ATH),  noise and energy) now displayed in frame analyzer.
  • VBR code ATH tuning was disabled by accident in 3.81, now fixed.
  • Mark Taylor:  lame --decode will produce .wav files.  (oops - size is off by a factor of 4)

LAME 3.82beta   May 11 2000

  • Robert Hegemann:  Fixed bug in high bitrate joint stereo encodings.
  • Naoki Shibata:  new long block MDCT routine

LAME 3.81beta  May 8 2000

  • all ISO code removed!
  • Takehiro Tominaga and Naoki Shibata:  new window subband routines.
  • Naoki Shibata:  Bug fix in mpglib (decoding) lib:  in some cases, MDCT coefficients from previous granule was incorrectly used for the next granule.
  • ISO 7680 bit buffer limitation removed.  It can be reactivated with "--strictly-enforce-ISO"  Please report any trouble with high bitrates.

LAME 3.80beta  May 6 2000

  • Takehiro Tominaga:  more efficient and faster huffman encoding!
  • Takehiro Tominaga and Mark Taylor:  much improved short block compression!
  • Tomasz Motylewski and Mark Taylor:  MPEG2.5 now supported!
  • Mark Taylor: incorporated Takehiro's bitstream.c!  bitstream.c used by default, but old ISO bitstream code can also be used.
  • Scott  Manley and Mark Taylor:  good resampling routine finaly in LAME.  uses a 19 point FIR filter with Blackman window.  Very slow for non integer resampling ratios.
  • Iwasa Kazmi:  fixed SIGBUS error:  VBR and id3 tags were using data after it was free()'d.
  • Robert Hegemann:  Improved VBR tuning.  #define RH_QUALITY_CONTROL and #RH_SIDE_VBR now the defaults.
  • Robert Hegemann:   LAME version string now added to ancillary data.
  • Kimmo Mustonen:  VBR histogram support for Amiga.
  • Casper Gripenberg:  VBR stats (but not histogram) for DOS verson.
  • Robert Hegemann:  rare VBR overflow bug fixed.
  • Zack:  -F option strictly enforces the VBR min bitrate.  Without -F, LAME will ignore the minimum bitrate when encoding analog silence.
  • Shawn Riley:  User can now specify a compression ratio (--comp <arg>) instead of a bit rate.  Default settings based on a compression ratio of 11.0
  • Mark Taylor:  free format bitstreams can be created with --freeformat, and specify any integer bitrate from 8 to 320kbs with -b.
  • Mark Taylor: lame be used as a decoder (output raw pcm only):  lame --decode input.mp3 output.pcm

LAME 3.70   April 6 2000

  • "LAME 3.69beta" becomes LAME 3.70 "stable"

LAME 3.69beta   April 6 2000

  • "spahm":  default mode selection bug fixed.  In some cases, lame was defaulting to regular stereo instead of jstereo when the user did not specify a mode.

LAME 3.68beta  April 4 2000

  • Mark Taylor: mono encoding bug in DLL fixed.
  • Ingo Saitz: bug in --cwlimit argument parsing fixed.
  • Scott Manly: bug in 4-point resample code fixed.

LAME 3.67beta  March 27 2000

  • Robert Hegemann:  jstereo now enabled for MPEG2 encodings
  • Mark Taylor: old M/S stereo mode which used L/R maskings has been removed.
  • Mark Taylor: Xing MPEG2 VBR headers now working.
  • Mark Taylor:  When quantized coefficients are all 0 in a band, set scalefactors to 0 also to save a few bits.
  • Ingo Saitz:  Problems with framesize calculation when using -f fast-math option fixed.

LAME 3.66beta March 21 2000

  • Bug fixes in BladeEnc DLL, possible click in last mp3 frame, VBR historgram display, byteswapping option, ASM quantize routines work for both float and double.

LAME 3.65beta   March 17 2000

  • Enabled ASM version of quantize_xrpow() - accidently disabled in lame3.64.

LAME 3.64beta  March 16 2000

  • Don Melton:  id3v1.1 tags & id3 bugfixes
  • Gabriel Bouvigne:  L/R matching block type fix
  • Bug fixed which was allowing quantized values to exceed the maximum when not using -h
  • Mark Taylor: Fitlers based on polyphase filterbank.  should be slightly better since the responce is independent of the blocktype, and they are slightly faster.
  • Mark Taylor: API:  the API changed slightly - and this should be the final version. There is a new routine: lame_encode_buffer() which takes an arbritray sized input buffer, resamples & filters if necessary, encodes, and returns the mp3buffer.  There are also several new #defines, so it is possible to compile a simple encoding library with no decoding or file I/O or command line parsing.  see the file API for details.
  • Mark Taylor: MSVC stuff:  lame.exe (with and without the frame analyzer) and the CDex lame_enc.dll should compile under MSVC.  The MSVC5 project files may need some tweaking.  In particular, you need to make sure LAMEPARSE, LAMESNDFILE and HAVEMPGLIB are defined.  (and HAVEGTK for the GTK stuff).

LAME 3.63beta  February 20  2000

  • Robert Hegemann:  FPE with -h fixed?
  • Mathey Hendry:  FPE error catching for Cygwin, FPE fix for vbr mode and output to /dev/null
  • Jeremy Hall:  Fixed problems with input files where the number of samples is not known.
  • Mathew Hendry:  ASM quantize_xrpow() for GNU i386
  • Wilfried Behne  quantize_xrpow ()for PowerPC and non-ASM
  • Takehiro Tominaga:  GOGO FFTs  (not yet used?)

LAME 3.62beta   February 9 2000

  • Iwasa Kazmi:  frame analyzer short block display of single subblocks (press 1,2  or 3)
  • Ingo Saitz:  --help option added, with output to stdout
  • Alfred Weyers: short block AAC spreading function bug fixed
  • Takehiro Tominaga:  new scalefac data structure - improves performance!
  • Lionel Bonnet:  Bug fixed in MPEG2 scalefactor routine: scalefactors were being severly limited.
  • Takehiro Tominaga:  faster FFT routines from.  These routines are also compatible with the GOGO routines, in case someone is interested in porting them back to LAME.
  • Sigbjørn Skjæret, Takehiro Tominaga:  faster pow() code.
  • Joachim Kuebart:  Found some unitialized variables that were effecting quality for encodings which did not use the -h option (now fixed).
  • Mark Taylor: More modularization work.   It is now possible to use LAME as a library where you can set the encoding parameters directly and do your own file i/o.   The calling program is now it's own mp3 output.  For an example of the LAME API, see main.c, or mp3rtp.c or mp3x.c.  These can all be compiled as stand alone programs which link with libmp3lame.a.
  • Felix vos Leitner:  mp3rtp fixes.  mp3rtp is a standalone program which will encode and stream with RTP.
  • Robert Hegemann:  Information written to stderr displaying exactly which type of lowpass filter (if any) is being used.
  • Iwasa Kazmi:  mpglib (the mpg123 decoder) scsfi decoding fixes.
  • Takehiro Tominaga:  More mpglib scsfi decoding fixes.

LAME 3.61beta  January 14 2000

  • Mark Taylor: Fixed bug with lowpass filters when using VBR with a 64kbs or lower min bitrate setting.
  • Takehiro Tominaga:  more efficient huffman encoding splitting.

LAME 3.60beta   January 9 2000

  • Mark Taylor: Distribution now comes with self test.  Needs work to be automated, see 'make test' in Makefile.
  • Mark Taylor: AAC spreading function now the default
  • Gabriel Bouvigne: updated HTML docs
  • Felix von Leitner: compute correct file length from Xing header (if present) when input file is a mp3 file
  • Felix von Leitner: mp3rtp (standalone) program now included.  Not yet tested.  mp3rtp ip:port:ttl  <infile>   /dev/null will stream directly to ip:port using  RTP.

LAME 3.59beta  January 4 2000

  • Takehiro Tominaga:  --noath option.  Disables ATH maskings.
  • Gabriel Bouvigne:  updated HTML docs.
  • Iwasa Kazmi:  makefile fixes
  • Mark Taylor:  Fixed bug where first frame of data was always overwritten with 0's.  Thanks to 'gol'
  • Mark Taylor:  bug fixes in mid/side masking ratios (thanks to Menno Bakker)
  • Mark Taylor:  replaced norm_l, norm_s table data with formulas.

LAME 3.58beta  December 13 1999

  • Segher Boessenkool:  More accurate quantization procedure!  Enabled with -h.
  • Mathew Hendry, Acy Stapp and Takehiro Tominaga: ASM optimizations for quantize_xrpow and quantize_xrpow_ISO.
  • Chuck Zenkus:  "encoder inside" logo on web page
  • Mark Taylor:   a couple people have asked for this.   Allow LAME to overide VBR_min_bitrate if analog_silence detected.   Analog_silence defined a la Robert:   energy  < ATH.
  • An Van Lam: Valid bitrates were being printed for layer 2, not layer 3!
  • Ethan Yeo:  Makefile.MSVC updated
  • Mark Stephens:  updated all MSVC project files
  • Robert Hegemann:  lowpass and highpass filters can be enabled with --lowpass, --highpass
  • Mark Taylor:  MS switching is now smoother: ms_ratio average over 4 granules
  • Takehiro Tominaga:  Scalefactor pre-emphasis fixed (and now turned back on)
  • Takehiro Tominaga:  Bug in M/S maskings:  switch to turn on stereo demasking code was buggy.

LAME 3.57beta  November 22 1999

  • Sigbjørn Skjæret, patch to allow encoding from 8bit input files when using LIBSNDFILE
  • Mark Taylor: Automatic downsampling to nearest valid samplerate.
  • Mark Taylor: Scalefactor bands demarked on MDCT plot in frameanalyzer
  • Mark Taylor: Scalefactor preemphasis disabled for now.   The algorithm was often doing more harm than good.

LAME 3.56beta  November 19 1999

  • Kimmo Mustonen: portabilty code cleanup.
  • Vladimir Marek: id3 genre patch.
  • Conrad Sanderson: new applypatch script.
  • Mark Taylor: Initial window type now "STOP_TYPE" to reduce initial attenuation.  This is needed because the new encoder delay is so short.  With a NORM_TYPE, the first 240 samples would be attenuated.
  • Mark Taylor: Padding at end of file now adjusted (hopefully!) to produce as little padding as possible while still guarantee all input samples are encoded.
  • Takehiro Tominaga:  Reduced shortblock extra bit allocation formulas by 10% since new huffman coding is at least 10% more efficient.

LAME 3.55beta  November 11 1999

  • Albert Faber:  updated BladeEnc.dll
  • Mark Taylor: Simple lowpass filter added to linear downsampling routine.
  • Nils Faerber: updated man page.
  • Mark Taylor: All floating point variables are delcared FLOAT or  FLOAT8.  Change the definition of FLOAT8 in machine.h to run at 32bit preceision.
  • Mark Taylor: Bug (introduced in 3.54beta) in stereo->mono downsampling fixed.

LAME 3.54beta  November 8 1999

  • Mark Taylor: Encoder delay is now 48 samples.  Can be adjusted to 1160 to sync with FhG (see ENCDELAY in encoder.h)  This is kind of amazing, since if Takehiro put his MDCT/filterbank routine in a decoder, we could have a total  delay of only 96 samples.
  • Mark Taylor: More inconstancies found and fixed in MPEG2 tables.
  • Mark Taylor: Resampling from an MP3 input file now works.  But we still dont have a lowpass filter so dont expect good results.

LAME 3.53beta  November 8 1999

  • Takehiro Tominaga:  Fixed MPEG2 problem in new MDCT routines.  Takehiro's combined filterbank/MDCT routine is now the default.  Removes all buffering from psymodel.c and the filterbanks/MDCT routines.

LAME 3.52beta  November 8 1999

  • By permission of copyright holders of all GPL code in LAME,  all GPL code is now released under a modified version of the LGPL (see the README file)
  • By popular demand, all C++ comments changed to C style comments
  • Mark Taylor: Linear resampling now works.  Use --resample to set an output samplerate different from the input samplerate.  (doesn't seem to work with mp3 input files, and there is no lowpass filter, so dont expect good results just yet)
  • Takehiro Tominaga:  Faster Huffman encoding routines
The following changes are disabled because of MPEG2 problems.  But to try them, set MDCTDELAY=48 in encoder.h, instead of MDCTDELAY=528.:
  • Takehiro Tominaga:  New MDCT routines with shorter delay (48 samples instead of 528) and even faster than the old routines.
  • Takehiro Tominaga:  Removed extra buffering in psymodel.c

LAME 3.51  November 7 1999

  • Takehiro Tominaga: Bug in quantize.c absolute threshold of hearing calculation for non-44.1 kHz input files.

LAME 3.50  November 1 1999

  • LAME 3.37beta becomes official LAME 3.50 release

LAME 3.37beta  November 1 1999

  • Lionel Bonnet:  Found severe bug in MPEG2 Short block SNR.
  • Sergey Sapelin:  VBR Toc improvement.
  • Sergey Dubov: fskip() routine
  • Conrad Sanderson: replacement for filterbank.c.   Not much faster but amazingly simpler.

LAME 3.36beta  October 25 1999

  • Albert Faber:  more MSVC and BladeDLL updates
  • Kimmo Mustonen:  Much code cleanup and Amiga updates
  • Anton Oleynikov: Borland C updates
  • Mark Taylor: More stdin fixes:  For some reason, forward fseek()'s would fail when used on pipes even though it is okay with redirection from "<". So I changed all the forward fseek()'s to use fread().  This should improve stdin support for wav/aiff files.  If you know the input file is raw pcm, you can still use the '-r' option to avoid *all* seeking of any kind.

LAME 3.35beta  October 21 1999

  • Leonid Kulakov:  Serious bug in MPEG2 scalefactor band tables fixed.
  • Portability patches from:  Anton Oleynikov, Sigbjørn Skjæret, Mathew Hendry, Richard Gorton
  • Alfred Weyers: compiler options, updated timestatus.
  • Albert Faber:  BladeDll and other updates (new machine.h).
  • Monty:  updated Makefile to fix gcc inline math bug.

LAME 3.34beta  October 12 1999

  • Mark Taylor: Bug fixed:  minimum bitrate in VBR mode could be ignored for a few frames.
  • Mark Taylor: New (minor) VBR tunings.
  • Tim Ruddick: New wav/aiff header parsing routines.  Better parsing and fewer fseek()'s.
  • Anton Oleynikov:  patches to work with Borland C
  • Gabriel Bouvigne:  Experimental voice option enabled with --voice

LAME 3.33beta  October 11 1999

  • Robert Hegemann: RH VBR mode now the default and only VBR mode.  The new code will always quantize to 0 distortion and the quality is increased by reducing the masking from the psy-model.  -X0 is still the default for now.
  • Robert Hegemann: new -X5 mode
  • Mathew Hendry: New timing code, removes the need for HAVETIMES
  • Mathew Hendry:  assembler quantize_xrpow for Windows
  • Iwasa Kazmi:  stdin/stdout patch for Windows
  • Mark Taylor: New option: "--athonly" will ignore the psy-model output and use only the absolute threshold of hearing for the masking.

LAME 3.32beta  October 8 1999

  • Takehiro Tominaga:  faster long block spreading function convolution for non 44.1 kHz sampling frequencies, and faster short block spreading function convolution for all sampling frequencies.
  • Takehiro Tominaga:  Completly rewritten huffman table selection and count_bits().  More efficient table selection results in many more bits per frame.
  • Takehiro Tominaga:  More efficient scalefac compress setting.
  • Mike Cheng: new calc_noise2()
  • Alfred Weyers: patch for timestatus() seconds rollover

LAME 3.31beta  September 28 1999

  • Albert Faber:  updated his BladeDLL code.  This allows LAME to be compiled into a BladeEnc compatiable .dll.
  • Mike Cheng: faster l3psycho_ener() routine.
  • Sigbjørn Skjæret: more code cleanup.

LAME  3.30beta  September 27 1999

  • Conrad Sanderson:  ID3 tag code added (type 'lame' for instructions)
  • new mdct.c from Mike Cheng (no faster, but much cleaner code)
  • Mathew Hendry: Microsoft nmake makefile and a couple other changes for MSVC
  • More modulization work:  One input sound file interface handles mp3's, uncompressed audio, with or without LIBSNDFILE.  Fixes (hopefully) a bunch of file I/O bugs introduced in 3.29 (Mark Taylor)
  • LAME will now print valid samplerate/bitrate combinations (Mark Taylor)
  • stdin/stdout fix for OS/2 (Paul Hartman)
  • For mp3 input files, totalframes estimated based on filesize and first frame bitrate. (Mark Taylor)
  • Updated all functions with new style prototypes.  (Sigbjørn Skjæret)

LAME 3.29beta  September 21 1999

  • Bug in bigv_bitcount fixed.  Loop.c was overestimating the number of bits needed, resulting in wasted bits every frame.  (Leonid A. Kulakov)
  • Bug in *_choose_table() fixed   These routines would not sellect the optimal Huffman table in some cases.   (Leonid A. Kulakov)
  • Tuning of ATH normalization (macik)
  • Removed unused variables and fixed function prototypes (Sigbjørn Skjæret)
  • Sami Farin sent a  .wav  file that  LAME built in support choked on.   I added a slightly more sophisticated wav header parsing to handle this, but if you have trouble, use libsndfile.
  • Resampling hooks and options added.  Buffering and resampling routines need to be written.
  • LAME will now take an mp3 file as input.  When resampling code is working, LAME will be able to (for example) convert a high bitrate stereo mp3 to a low bitrate mono mp3 for streaming.

LAME 3.28beta  September 15 1999

  • Serious bug fixed in high frequency MDCT coefficients.  Huffman coding was reversing the order of the count1 block quadruples.   (Leonid A. Kulakov)
  • nint() problems under Tru64 unix fixed and preprocessor variable HAVE_NINT removed.  (Bob Bell)
  • Compiler warning fixes and code cleanup   (Sigbjørn Skjæret, Lionel Bonnet)
  • USAGE file now includes suggestions for downsampling.  For low bitrate encodings, proper downsampling can give dramatically better results.  (John Hayward-Warburton)

LAME 3.27beta  September 12 1999

  • Several bugs in encode.c and l3bitstream.c fixed by Lionel Bonnet.
  • Bugs in new VBR (#define RH) formula for mono input file and mid/side encoding fixed.

LAME 3.26beta  September 10 1999

  • The "-m m" option (mono .mp3 file) will automatically mix left and right channels if the input file is stereo.  (Alfred Weyers)
  • New quant_compare algorithm (method for deciding which of two quantizations is better) enabled with -X4 (Greg Maxwell)
  • New mid/side VBR bit allocation formula.  Mid channel bits are set by the quality requirements, and then the side channel uses a reduced number of bits (in a proportion coming from the fixed bitrate code).  This might not be optimal, but it should be pretty good and no one knows what the optimal solution should be.  (Greg Maxwell)
  • New VBR (#define RH) tunings based on detailed listening tests by Macik and Greg Maxwell.
  • Sigbjørn Skjæret fixed several compiler warnings (which turned out to be potential bugs)
  • Takehiro Tominaga fixed a low bitrate bug in reduce_side()
  • Alfred Weyers fixed some buffer overflows.
  • New ATH (absolute threshold of hearing) formula replaces buggy ISO code, and adds  analog silence treatment  (removal of coefficients below below ATH).   These are turned on by default but have not been fully tested.  (Robert Hegemann)
  • Bug in short block spreading function fixed.  (Robert Hegemann)

LAME 3.25beta  August 22 1999

  • Sigbjørn Skjæret fixed a zero byte malloc call.  This bug  was introduced in 3.24 and causes problems on non Linux systems.
  • Bit allocation routines would sometimes allocate more than 4095 bits to one channel of one granule.  A couple of people reported problems that might be caused by this, especially at higher bitrates.
  • Nils Faerber updated the man page and fixed many of the compiler warnings.

LAME 3.24beta   August 15 1999

  • This release contains the following new code (for developers) which is disabled by default:
  • Robert Hegemann:  Completely overhauled VBR code.  Now computes exact number of bits required for the given qualty and then quantized with the appropriate bitrate.
  • Several new quantization quality measures.

LAME 3.23beta  August 8 1999

  • Very nice continuously updated VBR histogram display from Iwasa Kazmi.  (disabled with --nohist).
  • More modulerization work.  The encoding engine can now be compiled into libmp3lame, but the interface is awkward.
  • Bug fixed in FFT Hann window formula (Leonid A. Kulakov).
  • New LAME logo on the download page.  Created by Chris Michalisles.
  • Several VBR algorithm improvements from Robert Hegemann.  New quantization noise metrics and VBR quality measure takes into account mid/side encoding.  Should produce smaller files with the same quality, especially when using jstereo.

LAME 3.22beta  July 27 1999

  • Downsampling (stereo to mono) bug with MPEG2 fixed.  (Mike Oliphant)
  • Downsampling now merges L & R channels - before it only took the L channel.
  • More modularization and code cleanup from Albert Faber and myself.
  • Input filesize limit removed for raw pcm input files.  For other file types, LAME will still only read the first 2^32 samples, (27 hours of playing time at 44.1 kHz).

LAME 3.21beta  July 26 1999

  • Correct Mid/Side masking thresholds for JSTEREO mode!  This is enabled with -h.  It  makes LAME about 20% slower since it computes psycho-acoustics for L,R Mid and Side channels.
  • "Analog silence" threshold added.  Keeps VBR from upping the bitrate during very quite passages.  (Robert.Hegemann)
  • New VBR quality setting from Robert Hegemann.  It is based on the idea that distortion at lower bit rates sounds worse than at higher bitrates, and so the allowed distortion (VBR quality setting) is proportional to the bitrate.  Because of this, default minimum bitrate is now 32kbs.
  • Expermental subblock gain code enabled with -Z.
  • New "-r" option for raw pcm input files.  With -r, LAME will not do any fseek()'s or look for wav and aiff headers on the input file.
  • Bug fixes in mp3x (frame analyzer) for viewing frames near end of the file.
  • Bug fixed to allow setting the sampling rate of raw pcm input files.

LAME 3.20beta  July 19 1999

  • Bug in get_audio.c fixed.  Libsndfile wrappers would not compile (Miguel Revilla  Rodriguez)
  • Nils Faerber found some unitialized variables and some wierd extranous computations in filter_subband, now fixed.  This was causing seg faults on some machines.

LAME 3.19beta  July 18 1999

  • Oops!  Robert Hegemann immediatly found a bug in the new  (old -Z option) quantization code.  calc_noise1 was not returning tot_noise, so non ms-stereo frames were buggy.

LAME 3.18beta  July 17 1999

  • Many psycho-acoustic bug fixes.  Dan Nelson discovered a bug in MPEG2: For short blocks, the code assumes 42 partition bands.  MPEG1 sometimes has less, MPEG2 can have more.  In MPEG1, this bug would not have effected the output if your compiler initializes static variables to 0 on creation.  In MPEG2 it leads to array out-of-bounds access errors. Finally, there was a related bug in MPEG1/MPEG2, short & long blocks where the energy above 16 kHz was all added to partition band 0. (the lowest frequeny partition band!)
  • The -Z option (Gabriel Bouvigne's idea of using total quantization noise to choose between two quantizations with the same value of "over") is now the default.  I believe this helps remove the trilling sound in Jan's testsignal4.wav.  The quality of testsignal2.wav and testsignal4.wav are now better than Xing and getting closer to FhG.
  • Bug fixes in frame & sample count for downsampling mode. (ben "jacobs")
  • Patches to improve modulization.  (ben "jacobs")

LAME 3.17beta  July 11 1999

  • substantial code cleanup towards goal of making LAME more modular.

LAME 3.16beta  July 11 1999

  • New tunings of window switching, and better bit allocation based on pe.  (Jan Rafaj.  improves both testsignal2.wav and testsignal4.wav).
  • Bug in mid/side quantization when side channel was zero fixed.  (Albert Faber)
  • Removed some extranous computations in l3psy.c (Robert Hegemann)
  • More detailed timing status info, including hours display. (Sakari Ailus) and percentage indicator (Conrad Sanderson).
  • Window_subband and calc_noise1,calc_noise2 speedups.  Quantize_xrpow speedup should be significant on non GNU/intel systems. (Mike Cheng)
  • Better initial guess for VBR bitrate.  Should speed up VBR encoding.  (Gabriel Bouvigne)
  • More advanced .wav header parsing.  fixes bugs involving click in first frame. (Robert.Hegemann)
  • Correct filesize and total frame computation when using LIBSNDFILE (ben "jacobs")
  • Click in last frame (buffering problem) when using libsndfile fixed.
  • Audio I/O code overhauled.  There is now a uniform audio i/o interface to libsndfile or the LAME built in wav/aiff routines.  All audio i/o code localized to get_audio.c.

LAME 3.15beta

  • times()/clock() problem fixed for non-unix OS.  (Ben "Jacobs")
  • Fixed uninitialized pe[] when using fast mode.  (Ben "Jacobs")

LAME 3.13  June 24 1999

  • Patches for BeOS from Gertjan van Ratingen.
  • Makefile info for OS/2 Warp 4.0  (from dink.org).
  • Status display now based on wall clock time, not cpu time.
  • mem_alloc no longer allocates twice as much memory as needed (Jan Peman).

3.12pre9

  • Updated BLADEDLL code to handle recent changes (Albert Faber).
  • Bug fixed in parsing options when not using GTK (Albert Faber).
  • MPEG2 Layer III psycho acoustics now working.
  • Improved huffman encoding Chris Matrakidis. (10% faster).  I dont know how he finds these improvements!  LAME with full quality now encodes faster than real time on my PII 266.
  • Fixed time display when encoding takes more than 60 minutes.

3.12pre8

  • New mid/side stereo criterion.  LAME will use mid/side stereo only when the difference between L & R masking thresholds (averaged over all scalefactors) is less then 5db.  In several test samples it does a very good job mimicking the FhG encoder.
  • Bug in mid/side stereo fixed:  independent variation of mid & side channel scalefactors disabled.  Because of the way outer_loop is currently coded, when encoding mid/side coefficietns using left/right thresholds, you have to vary the scalefactors simultaneously.
  • Bug in side/mid energy ratio calculation fixed. (Thanks to Robert Hegemann)
  • Default mode is stereo (not jstereo) if bitrate is chosen as 192kbs or higher.  Tero Auvinen first pointed out that FhG seems to think at 160kbs, their encoder is so good it doesn't need jstereo tricks. Since LAME is not as good as FhG, I am going to claim that 192kbs LAME is so good it doens't need jstereo tricks, and thus it is disabled by default.
  • WAV header parsing for big-endian machines, and automatic detection of big-endian machines.  (Thanks to  Sigbjørn Skjæret).
  • added 56 sample delay to sync LAME with FhG.
  • MP3x (frame analyzer) can now handle MPEG2 streams.

3.12pre7

  • MPEG2 layer III now working!  lower bit rates (down to 8kbs) and 3 more sampling frequencies:  16000, 22050, 24000Hz. Quality is poor - the psy-model does not yet work with these sampling frequencies.
  • Fixed "ERROR: outer_loop(): huff_bits < 0." bug when using VBR.
  • bash and sh scripts to run LAME on multiple files now included.  (from Robert Hegemann and Gerhard Wesp respectively)
  • bug fix in encoding times for longer files from  (Alvaro Martinez Echevarria)
  • yet another segfault in the frame analyzer fixed.
  • ISO psy-model/bit allocation routines removed.  This allowed makeframe() to be made much simpler, and most of the complicated buffering is now gone. Eventually I would like the encoding engine to be a stand alone library.

3.12pre6

  • Better VBR tuning.  Find minimum bitrate with distortion less than the allows maximum.  A minimum bit rate is imposed on frames with short blocks (where the measured distortion can not be trusted).   A minimum frame bitrate can be specified with -b, default=64kbs.
  • LIBSNDFILE support.  With libsndfile, LAME can encode almost all sound formats.  Albert Faber did the work for this, including getting libsndfile running under win32.
  • CRC checksum now working!   (Thanks to Johannes Overmann )
  • frame analyzer will now work with mono .mp3 files
  • more code tweeks from Jan Peman.
  • Compaq-Alpha(Linux) fixes and speedups from Nils Faerber.
  • Faster bin_search_StepSize from Juha Laukala.
  • Faster quantize() from Mike Cheng
  • Faster quantize_xrpow() from Chris Matrakidis.  xrpow_flag removed since this option is now on by default.
  • Fixed .wav header parsing from Nils Faerber.
  • Xing VBR frame info header code from Albert Faber.   "Xing" and "LAME 3.12" embedded in first frame.
  • Bug in VBR bit allocation based on "over" value fixed.

LAME 3.11  June 3 1999

  • Almost all warnings (-Wall) now fixed!  (Thanks to Jan Peman)
  • More coding improvements from Gabriel Bouvigne and Warren Toomey.
  • VBR  (variable bit rate).   Increases bit rate for short blocks and for frames where the number of bands containing audible distortion is greater than a given value.  Much tuning needs to be done.
  • Patch to remove all atan() calls from James Droppo.

LAME 3.10 May 30 1999

  • Fast mode (-f)  disables psycho-acoustic model for real time encoding on older machines.  Thanks to Lauri Ahonen who first sent a patch for this.
  • New bit reservoir usage scheme to accommodate the new pre-echo detection formulas.
  • Tuning of AWS and ENER_AWS pre-echo formulas by Gabriel Bouvigne and myself.  They work great!  now on by default.
  • In jstereo, force blocktypes for left & right channels to be identical.  FhG seems to do this.  It can be disabled with "-d".
  • Patches to compile MP3x under win32 (Thanks to Albert Faber).
  • bin_serach_stepsize limited to a quantizationStepSize of  -210 through 45.
  • outer_loop()  will now vary Mid & Side scalefactors independently.  Can lead to better quantizations, but it is slower (twice as many quantizations to look at).  Running with "-m f" does not need this and will run at the old speed
  • Bug in inner_loop would allow quantizations larger than allowed.  (introduced in lame3.04, now fixed.)
  • Updated HTML documentation from Gabriel Bouvigne.
  • Unix  man page from William Schelter.
  • numlines[] bug fixed.  (Thanks to Rafael Luebbert, MPecker author).
  • Quantization speed improvements from Chirs Matrakidis.
  • When comparing quantizations with the same number of bands with audible distortion, use the one with the largest scalefactors, not the first one outer_loop happened to find.
  • Improved defination of best quantization when using -f (fast mode).
  • subblock code now working.  But no algorithm to choose subblock gains yet.
  • Linux now segfaults on floating point exceptions.  Should prevent me from releasing binaries that crash on other operating systems.

LAME 3.04 May 22 1999

  • Preliminary documentation from Gabriel Bouvigne.
  • I wouldn't have thought it was possible, but now there are even more speed improvements from Chris Matrakidis!  Removed one FFT when using joint stereo, and many improvements in loop.c.
  • "Fake" ms_stereo mode renamed "Force" ms_stereo since it forces mid/side stereo on all frames.  For some music this is said to be a problem, but for most music mode is probably better than the default jstereo because it uses specialized mid/side channel masking thresholds.
  • Small bugs in Force ms_stereo mode fixed.
  • Compaq Alpha fixes from Nathan Slingerland.
  • Some new experimental pre-echo detection formulas in l3psy.c (#ifdef AWS and #ifdef ENER_AWS, both off by default.  Thanks to Gabriel Bouvigne and Andre Osterhues)
  • Several bugs in the syncing of data displayed by mp3x (the frame analyzer) were fixed.
  • highq (-h) option added.  This turns on things (just one so far) that should sound better but slow down LAME.

LAME 3.03 May 18 1999

  • Faster (20%) & cleaner FFT (Thanks to Chris Matrakidis  http://www.geocities.com/ResearchTriangle/8869/fft_summary.html)
  • mods so it works with VC++ (Thanks to Gabriel Bouvigne, www.mp3tech.org)
  • MP3s marked "original" by default  (Thanks to Gabriel Bouvigne, www.mp3tech.org)
  • Can now be compiled into a BladeEnc compatible .DLL   (Thanks to  Albert Faber, CDex author)
  • Patches for "silent mode" and stdin/stdout  (Thanks to Lars Magne Ingebrigtsen)
  • Fixed rare bug: if a long_block is sandwiched between two short_blocks, it must be changed to a short_block, but the short_block ratios have not been computed in l3psy.c.  Now always compute short_block ratios just in case.
  • Fixed bug with initial quantize step size when many coefficients are zero.  (Thanks to Martin Weghofer).
  • Bug fixed in MP3x display of audible distortion.
  • improved status display (Thanks to Lauri Ahonen).

LAME 3.02 May 12 1999

  • encoder could use ms_stereo even if channel 0 and 1 block types were different.  (Thanks to Jan Rafaj)
  • added -k option to disable the 16 kHz cutoff at 128kbs.  This cutoff is never used at higher bitrates. (Thanks to Jan Rafaj)
  • modified pe bit allocation formula to make sense at bit rates other than 128kbs.
  • fixed l3_xmin initialization problem which showed up under FreeBSD.  (Thanks to Warren Toomey)

LAME 3.01 May 11 1999

  • max_name_size increased to 300  (Thanks to Mike Oliphant)
  • patch to allow seeks on input file (Thanks to Scott Manley)
  • fixes for mono modes (Thanks to everyone who pointed this out)
  • overflow in calc_noise2 fixed
  • bit reservoir overflow when encoding lots of frames with all zeros  (Thanks to Jani Frilander)

LAME 3.0 May 10 1999

  • added GPSYCHO (developed by Mark Taylor)
  • added MP3x (developed by Mark Taylor)
  • LAME now maintained by Mark Taylor

November 8 1998

  • Version 2.1f released
  • 50% faster filter_subband() routine in encode.c contributed by James Droppo

November 2 1998

  • Version 2.1e released.
  • New command line switch -a auto-resamples a stereo input file to mono.
  • New command line switch -r resamples from 44.1 kHz to 32 kHz [this switch doesn't work really well. Very tinny sounding output files. Has to do with the way I do the resampling probably]
  • Both of these were put into the ISO code in the encode.c file, and are simply different ways of filling the input buffers from a file.

October 31 1998

  • Version 2.1d released
  • Fixed memory alloc in musicin.c (for l3_sb_sample)
  • Added new command line switch (-x) to force swapping of byte order
  • Cleaned up memory routines in l3psy.c. All the mem_alloc() and free() routines where changed so that it was only done once and not every single time the routine was called.
  • Added a compile time switch -DTIMER that includes all timing info. It's a switch for the time being until some other people have tested on their system. Timing code has a tendency to do different things on different platforms.

October 18 1998

  • Version 2.1b released.
  • Fixed up bug: all PCM files were being read as WAV.
  • Played with the mem_alloc routine to fix crash under amigaos (just allocating twice as much memory as needed). Might see if we can totally do without this routine. Individual malloc()s where they are needed instead
  • Put Jan Peman's quality switch back in. This reduces quality via the '-q <int>' switch. Fun speedup which is mostly harmless if you're not concerned with quality.
  • Compiling with amiga-gcc works fine

October 16 1998

  • Version 2.1a released. User input/output has been cleaned up a bit. WAV file reading is there in a very rudimentary sense ie the program will recognize the header and skip it, but not read it. The WAV file is assumed to be 16bit stereo 44.1 kHz.

October 6 1998

  • Version 2.1 released with all tables now incorporated into the exe. Thanks to Lars Magne Ingebrigtseni

October 4 1998

  • In response to some concerns about the quality of the encoder, I have rebuilt the encoder from scratch and carefully compared output at all stages with the output of the unmodified ISO encoder.
  • Version 2.0 of LAME is built from the ISO source code (dist10), and incorporates modifications from myself and the 8hz effort. The output file from LAME v2.0 is identical to the output of the ISO encoder for my test file. Since I do not have heaps of time, I left the ISO AIFF file reader in the code, and did not incorporate a WAV file reader.
  • Added section on quality.

October 1 1998

  • Updated web page and released LAME v1.0

Up to September 1998

Working on the 8hz source code...

  • Patched the 8hz source code
  • 45% faster than original source (on my freebsd p166).
    • m1 - sped up the mdct.c and quantize() functions [MDCTD, MDCTD2, LOOPD]
    • m2 - sped up the filter_subband routine using Stephane Tavenard's work from musicin [FILTST]
    • m2 - minor cleanup of window_subband [WINDST2]
    • m2 - Cleaned up a few bits in l3psy.c. Replaced a sparse matrix multiply with a hand configured unrolling [PSYD]
    • m3 - (amiga only) Added in the asm FFT for m68k (based on sources from Henryk Richter and Stephane Tavenard)
    • m4 - raw pcm support back in
    • m5 - put in a byte-ordering switch for raw PCM reading (just in case)
    • m6 - reworked the whole fft.c file. fft now 10-15% faster.
    • m7 - totally new fft routine. exploits fact that this is a real->complex fft. About twice as fast as previous fastest fft (in m6). (C fft routine is faster than the asm one on an m68k!)
    • m8
      • Now encodes from stdin. Use '-' as the input filename. Thanks to Brad Threatt
      • Worked out that the 1024point FFT only ever uses the first 6 phi values, and the first 465 energy values. Saves a bunch of calculations.
      • Added a speed-up/quality switch. Speed is increased but quality is decreased slightly. My ears are bad enough not to be able to notice the difference in quality at low settings :). Setting '-q 1' improves speed by about 10%. '-q 100' improves speed by about 26%. Enoding of my test track goes from 111s (at default '-q 0') to 82s (at -q 100). Thanks to Jan Peman for this tip.
    • m9 - fixed an error in l3psy.c. numlines[] is overwritten with incorrect data. Added a new variable numlines_s[] to fix this. Thanks again to Jan Peman.
    • m10 - Down to 106 seconds by selecting a few more compiler options. Also added a pow20() function in l3loop.c to speed up (ever so slightly) calls to pow(2.0, x)
    • m11
      • No speedups. Just cleaned up some bits of the code.
      • Changed K&R prototyping to 'normal' format. Thanks to Steffan Haeuser for his help here.
      • Changed some C++ style comments to normal C comments in huffman.c
      • Removed the #warning from psy_data.h (it was getting annoying!)
      • Removed reference in bitstream.c to malloc.h. Is there a system left where malloc.h hasn't been superceded by stdlib.h?
  • In Progess:
    • my PSYD hack for the spreading functions is only valid for 44.1 kHz - Should really put in a "if freq = 44.1 kHz" switch for it. Someone might want to extend the speedup for 48 and 32 kHz.
    • Putting in Jan Peman's quantanf_init speedup.

Valid HTML 4.01 Transitional

lame-3.100/doc/html/detailed.html000644 001751 001751 00000151043 12251146501 020236 0ustar00netchildnetchild000000 000000 Detailed command-line switches
LAME Official Logo

Detailed command line switches

Options ordered by feature

SettingBrief description
Input options
By default, LAME accepts a PCM audio sample inside a .WAV container as the input file, in 8, 16, 24 and 32 bits integer and in IEEE FLOAT. If it is compiled with libsndfile, then it also supports the extra formats that the library supports.
There is also support for RAW PCM data and and piped input
-For piped/streamed Input, use "-" as the input and/or output file name.
--out-dir pathIf no explicit output file is specified, a file will be written at given path. Ignored when using piped/streamed input
--mp1input1Input file is an MPEG layer I file. Implicit if extension is .mp1
--mp2input1Input file is an MPEG layer II file. Implicit if extension is .mp2
--mp3input1Input file is an MPEG layer III file. Implicit if extension is .mp3
--scale numberScale input (multiply PCM data) by number.
--scale-l numberScale channel 0 (left) input (multiply PCM data ) by number
--scale-r numberScale channel 1 (right) input (multiply PCM data) by number
--gain numberapply Gain adjustment in decibels, range -20.0 to +12.0.
--swap-channelSwap Left and Right channels
--nogap file1 file2 ...Gapless encoding for a set of contiguous files
--nogapout dirOutput dir for gapless encoding (must precede --nogap)
--nogaptagsAllow the use of VBR tags in gapless encoding
Input options for RAW PCM
-rAssume input file is raw PCM.
-s numberInput sampling frequency in kHz (Default is 44.1Khz)
--signed / --unsigned Input is signed (default) or unsigned
--bitwidth w Input bit width is w (default 16)
-x Force byte-swapping of input stream
--little-endian / --big-endian Input is little-endian (default) or big-endian
-aDownmix from stereo to mono file for mono encoding. Needed with RAW input for the -mm mode to do the downmix.
Constant Bit Rate (CBR)
-b numberSet the bitrate in kbps, default 128 kbps
--cbrEnforce use of constant bitrate
--comp ratioChoose bitrate to obtain the specified compression ratio
--freeformatProduce a free format bitstream instead of the standard one. Supported bitrates between 8 and 640 kbps. Scarce support by decoders.
Variable Bit Rate (ABR)
--abr numberSpecify average bitrate desired (instead of quality)
Variable Bit Rate (VBR)
-V numberQuality setting for VBR. default number=4.
Decimal values can be specified, like: 4.51
0=highest quality, bigger files. 9.999=lowest quality, smaller files
--vbr-oldUse old variable bitrate (VBR) routine
-b numberSpecify a minimum allowed bitrate. default 32 kbps (See -F setting below)
-B numberSpecify a maximum allowed bitrate. default 320 kbps
-FEnforce -b option for digital silence frames too, rather than encoding them at 8 or 32 kbps.
-tDisable VBR informational tag
-TEnable and force writing LAME Tag
-YAllows -V2, -V1 and -V0 to not to encode the highest frequencies accurately, if doing so causes disproportional increases in bitrate. This is the same that CBR and ABR modes do.
Operational options
--preset typeEnables some preconfigured settings. Check below for each of the valid values
--priority numberSets the process priority:
0,1 = Low priority
2 = normal priority (default)
3,4 = High priority
--flushFlush output stream as soon as possible
--decodeInput=mp3 file, output=wav
--decode-mp3delay samplesSet the encoder delay to use to decode the input .mp3 file
-tDisable writing wav header when using --decode
--noasm typeDisable assembly optimizations for mmx/3dnow/sse
Noise shaping & psycho acoustic algorithms
-q numbernumber = 0...9. Default -q 3
-q 0: Highest quality, very slow
-q 9: Poor quality, but fast
Please, see notes in the detailed description
-m modejoint, simple, force, dual-mono, mono, left, right. default is j.
joint = joins the best possible of MS and LR stereo
simple = force LR stereo on all frames
force = force MS stereo on all frames.
Filter and resampling options:
--resample sfreqSampling frequency of output file(kHz)- default=automatic
--lowpass numberFrequency(kHz), lowpass filter cutoff above freq. Range [0.001..50]kHz or [50..50000]Hz
--lowpass-width numberFrequency(kHz), lowpass window width. Range [0.001..16]kHz or [16..50000]Hz - (See further restriction in the detailed explanation)
--highpass numberFrequency(kHz), highpass filter cutoff below freq. Range [0.001..16]kHz or [16..50000]Hz (See further restriction in the detailed explanation)
--highpass-width numberFrequency(kHz), highpass window width - (See further restriction in the detailed explanation)
ID3 tag Information
--tt titleAudio/song title (max 30 chars for version 1 tag)
--ta artistAudio/song artist (max 30 chars for version 1 tag)
--tl albumAudio/song album (max 30 chars for version 1 tag)
--ty yearAudio/song year of issue (1 to 9999)
--tc commentUser-defined text (max 30 chars for v1 tag, 28 for v1.1)
--tn track[/total]Audio/song track number and (optionally) the total number of tracks on the original recording.
(track and total each 1 to 255. just the track number creates v1.1 tag, providing a total forces v2.0).
--tg genreAudio/song genre (name or number in list)
--ti fileAudio/song albumArt (jpeg/png/gif file, 128KB max, v2.3)
--tv id=valueText or URL frame specified by id and value (v2.3 tag). User defined frame. Syntax: --tv "TXXX=description=content"
--add-id3v2Force addition of version 2 tag
--id3v1-onlyAdd only a version 1 tag
--id3v2-onlyAdd only a version 2 tag
--id3v2-latin1Add following options in ISO-8859-1 text encoding
--id3v2-utf16Add following options in unicode text encoding
--space-id3v1Pad version 1 tag with spaces instead of nulls
--pad-id3v2-size nAdds ID3v2 tag with n padding bytes
--genre-listPrint alphabetically sorted ID3 genre list and exit
--ignore-tag-errorsIgnore errors in values passed for tags
Note: A version 2 tag will NOT be added unless one of the input fields won't fit in a version 1 tag (e.g. the title string is longer than 30 characters), or the '--add-id3v2' or '--id3v2-only' options are used, or output is redirected to stdout.
MP3 header/stream options:
-e modeDe-emphasis n/5/c (obsolete)
-cMark as copyright
-oMark as non-original
-pError detection. adds 16 bit checksum to every frame (the checksum is computed correctly)
--strictly-enforce-ISOComply as much as possible to ISO MPEG spec
--replaygain-fastCompute RG fast but slightly inaccurately (default)
--replaygain-accurate1Compute RG more accurately and find the peak sample
--noreplaygainDisable ReplayGain analysis
--clipdetect1Enable --replaygain-accurate and print a message whether clipping occurs and how far the waveform is from full scale
Verbosity:
--disptime secsPrint progress report every secs seconds
--nohistDisable VBR histogram display
--silent / --quietDon't print anything on screen
--verbosePrint a lot of useful information
--version / --licensePrint License information
--help / --usageShows the common list of switches. Add id3 or dev to get help for a specified topic
--longhelpShows the complete list of switches
Experimental switches for developers. Only enabled in alpha/debug versions. Can change from version to version
--noresDisables the bit reservour. Each frame will become independent from previous ones, but the quality will be lower.
--buffer-constraint xavailable values for x: default, strict, maximum
--noathturns ATH down to a flat noise floor
--athshortignore GPSYCHO for short blocks, use ATH only
--athonlyignore GPSYCHO completely, use ATH only
--athtype xselects between different ATH types [0-4]
--athlower xLower the ATH by x.x dB's
--athaa-type nATH auto adjust: 0 'no' else 'loudness based'
--athaa-sensitivity xactivation offset in -/+ dB for ATH auto-adjustment
--shortAllow the use of short blocs (default)
--noshortDisable use of short blocks
--allshortUse only short blocks
--shortthreshold x[,y]short block switching threshold, x for L/R/M channel, y for S channel
--temporal-masking xx=0 disables, x=1 enables temporal masking effect
--notempAlias of --temporal-masking 0
--nssafejointM/S switching criterion
--nsmsfix xM/S switching tuning [effective 0-3.5]
--ns-bass xAdjust masking for sfbs 0 - 6 (long) 0 - 5 (short)
--ns-alto xAdjust masking for sfbs 7 - 13 (long) 6 - 10 (short)
--ns-treble xAdjust masking for sfbs 14 - 21 (long) 11 - 12 (short)
--ns-sfb21 xChange ns-treble by x dB for sfb21
-Z [n]always do calculate short block maskings
--substepuse pseudo substep noise shaping method types 0-2
-X n[,m]selects between different noise measurements n for long block, m for short. if m is omitted, m = n
--vbr-newIn LAME 3.98, the new VBR was made default, and this switch may be used for experimental tweaks.
Aliases and removed settings
-fAlias of -q 7.
-hAlias of -q 2.
-vAlias of -V 4
-SAlias of --silent
--alt-presetAlias of --preset
--r3mixAlias of -V 3
--vbr-mtrhAlias of LAME 3.98 default vbr mode
--pad-id3v2Alias of --pad-id3v2-size 128
-dNo longer supported
-kNo longer supported
--cwlimitNo longer supported
--ogginputNo longer supported. Compile with libsndfile instead
--briefCurrently unused
--interch xCurrently unused
--nspsytuneCurrently unused

Detailed description in alphabetical order

-a Downmix

mix the stereo input file to mono and encode as mono.

This option is only needed in the case of raw PCM stereo input (because LAME cannot determine the number of channels in the input file). To encode a stereo PCM input file as mono, use "lame -m m -a"

For WAV and AIFF input files, using "-m m" will always produce a mono .mp3 file from both mono and stereo input.

--abr n Average bitrate encoding (aka Safe VBR)

turns on encoding with a targeted average bitrate of n kbps, allowing to use frames of different sizes. The allowed range of n is 8...320 kbps, you can use any integer value within that range.

--add-id3v2 Force addition of version 2 tag

Tells LAME to add the tag information as id3v2. This implies adding both, a version 1 and a version 2 tag, if the values fit on a version 1 tag. See --id3v1-only and --id3v2-only if you want a more fine-grained control.

-b n Bitrate

Codec sample frequencies (kHz) bitrates (kbps)
MPEG-1 layer III 32, 48, 44.1 32 40 48 56 64 80 96 112 128 160 192 224 256 320
MPEG-2 layer III 16, 24, 22.05 8 16 24 32 40 48 56 64 80 96 112 128 144 160
MPEG-2.5 layer III 8, 12, 11.025 8 16 24 32 40 48 56 64

The bitrate to be used. Default is 128kbps in MPEG1 (64 for mono), 64kbps in MPEG2 (32 for mono) and 32kbps in MPEG2.5 (16 for mono).

When used with variable bitrate encodings (VBR), -b specifies the minimum bitrate to use. This is useful only if you need to circumvent a buggy hardware device with strange bitrate constrains. (You will need the -F setting too for digital silence).
Default for ABR/VBR is the minimum allowed bitrate for the MPEG version. (i.e. no limit)

-B n Max bitrate

see also option "-b" for allowed bitrates.

Maximum allowed bitrate when using VBR/ABR.

Using -B is NOT RECOMMENDED. A 128 kbps CBR bitstream, because of the bit reservoir, can actually have frames which use as many bits as a 320 kbps frame. ABR/VBR modes minimize the use of the bit reservoir, and thus need to allow 320 kbps frames to get the same flexibility as CBR streams. This is useful only if you need to circumvent a buggy hardware device with strange bitrate constrains.
Default value is the maximum allowed bitrate for the MPEG versio (i.e. no limit)

--big-endian Set the byte order to big-endian.

This switch tells LAME that the RAW pcm input is encoded in big-endian instead of little-endian.

--bitwidth Sets the bitwidth value

With RAW pcm input, this switch lets specify the bitwidth of the same (8 bits, 16 bits...)

-c copyright flag

mark the encoded file as copyrighted

--cbr Enforce constant bitrate encoding

This switch disables the VBR encoding. Examples:

lame -V 0 --cbr input.wav
Will encode at -b 128 (ignore completely -V and encode at default bitrate)
lame --preset 160 --cbr
Will encode at -b 160 (ignore ABR and use the specified bitrate)
lame --abr 200 --cbr
Will encode at -b 192 (ignore ABR and use the nearest bitrate to the one specified)

--clipdetect Clipping detection

Enable --replaygain-accurate and print a message whether clipping occurs and how far in dB the waveform is from full scale.

This option is not usable if the MP3 decoder was explicitly disabled in the build of LAME.

See also: --replaygain-accurate

--comp x Indicate a compression ratio instead of a bitrate

Use this in place of the -b setting if you prefer to indicate a compression ratio (integer value). The ratio is the value of original-filesize/desired-filesize

--decode MP3 decode capability

This uses LAME's HIP2 decoder to decode an MP3 (layers 1, 2 and 3) file to a wav file.

If -t is used (disable wav header), LAME will output raw pcm in native endian format (use -x to swap bytes).

This option is not usable if the MP3 decoder was explicitly disabled in the build of LAME.

--decode-mp3delay x Indicate a different encoder delay for decoding

When decoding an mp3 file, LAME automatically corrects for the start delay that the encoder had to put into it.
This setting lets you specify a different delay than LAME's own one, so that it is possible to compensate for the delay of mp3's generated with other encoders.

--disptime secs Update the display each secs

Use this setting to change the frequency that LAME updates the display when encoding a file. Allows decimal values (like 0.5)

-e n/5/c Write the de-emphasis flag

n = (none, default)
5 = 50/15 microseconds
c = ccitt j.17

All this does is set a flag in the bitstream. If you have a PCM input file where one of the above types of (obsolete) emphasis has been applied, you can set this flag in LAME. Then the mp3 decoder should de-emphasize the output during playback, although most decoders ignore this flag.

A better solution would be to apply the de-emphasis with a standalone utility before encoding, and then encode without -e.

-F Enforce the minimum bitrate

Enforces the minimum bitrate. Without this option, passages of analog silence will be encoded at the minimum bitrate possible (32 or 8, depending on MPEG version).

--flush Flush the output stream as soon as possible

This setting forces a flush of the data written as soon as the operation has finished. This is mostly useful in case of streams. With files, it may degrade performance, since the OS has to write to disk in smaller chunks.

--freeformat Encode to freeformat stream

LAME will produce a fixed bitrate, free format bitstream. User must specify the desired bitrate in kbps, which can be any integer between 8 and 640.

Not supported by most decoders. Compliant decoders (of which there are few) are only required to support up to 320 kbps.

Decoders knwon to handle free format:

Supports up to
MAD640 kbps
"lame --decode"640 kbps
l3dec310 kbps

--gain Apply gain in decibels.

Apply Gain adjustment in decibels, range -20.0 to +12.0. 0dBFS means no amplification.

--genre-list Print alphabetical ordered list of known genres

Tell LAME to print the list of genres with their index to be used with the --tg setting.

123 Acappella
34 Acid
74 Acid Jazz
73 Acid Punk
99 Acoustic
20 Alternative
40 Alternative Rock
26 Ambient
145 Anime
90 Avantgarde
116 Ballad
41 Bass
135 Beat
85 Bebob
96 Big Band
138 Black Metal
89 Bluegrass
0 Blues
107 Booty Bass
132 BritPop
65 Cabaret
88 Celtic
104 Chamber Music
102 Chanson
97 Chorus
136 Christian Gangsta
61 Christian Rap
141 Christian Rock
32 Classical
1 Classic Rock
112 Club
128 Club-House
57 Comedy
140 Contemporary Christian
2 Country
139 Crossover
58 Cult
3 Dance
125 Dance Hall
50 Darkwave
22 Death Metal
4 Disco
55 Dream
127 Drum & Bass
122 Drum Solo
120 Duet
98 Easy Listening
52 Electronic
48 Ethnic
54 Eurodance
124 Euro-House
25 Euro-Techno
84 Fast Fusion
80 Folk
115 Folklore
81 Folk-Rock
119 Freestyle
5 Funk
30 Fusion
36 Game
59 Gangsta
126 Goa
38 Gospel
49 Gothic
91 Gothic Rock
6 Grunge
129 Hardcore
79 Hard Rock
137 Heavy Metal
7 Hip-Hop
35 House
100 Humour
131 Indie
19 Industrial
33 Instrumental
46 Instrumental Pop
47 Instrumental Rock
8 Jazz
29 Jazz+Funk
146 JPop
63 Jungle
86 Latin
71 Lo-Fi
45 Meditative
142 Merengue
9 Metal
77 Musical
82 National Folk
64 Native US
133 Negerpunk
10 New Age
66 New Wave
39 Noise
11 Oldies
103 Opera
12 Other
75 Polka
134 Polsk Punk
13 Pop
53 Pop-Folk
62 Pop/Funk
109 Porn Groove
117 Power Ballad
23 Pranks
108 Primus
92 Progressive Rock
67 Psychedelic
93 Psychedelic Rock
43 Punk
121 Punk Rock
15 Rap
68 Rave
14 R&B
16 Reggae
76 Retro
87 Revival
118 Rhythmic Soul
17 Rock
78 Rock & Roll
143 Salsa
114 Samba
110 Satire
69 Showtunes
21 Ska
111 Slow Jam
95 Slow Rock
105 Sonata
42 Soul
37 Sound Clip
24 Soundtrack
56 Southern Rock
44 Space
101 Speech
83 Swing
94 Symphonic Rock
106 Symphony
147 SynthPop
113 Tango
18 Techno
51 Techno-Industrial
130 Terror
144 Thrash Metal
60 Top 40
70 Trailer
31 Trance
72 Tribal
27 Trip-Hop
28 Vocal

--help Print the command line help.

Print the short command line help and exit.

--highpass number Use a highpass filter when encoding

Enables a highpass filter of the specified frequency when encoding the source. Range [0.001..50]kHz or [50..50000]Hz.
This is usually not required, and the gains are usually minimal. May be useful to remove an interference signal on 50Hz or 60Hz, or a DC offset. (default: disabled)
Note: The current implementation has a minimum highpass frequency of (67.5/62)% of the sample rate (I.e. 481Hz at 44Khz).

--highpass-width width Set the width of the decaying curve.

Specify the width in Hz of the decaying curve of the highpass. Range [16..50000]Hz
The minimum (and default) width is 75% of a band's width (which is 1/64th of the sample rate).
Note: See the remark in the --highpass command above.

--id3v1-only Disable the use of id3v2.

Put it before any tag setting.
This setting tells LAME to use ID3 v1 tag only, and not create an ID3v2 even if it thinks it should.

--id3v2-only Disable the user ov id3v1.

Put it before any tag setting.
This setting tells LAME to use ID3 v2 tag only. An ID3 v1 tag would not be written.

--ignore-tag-errors Ignore tag information errors

Put it before any tag setting.
This tells lame to ignore the tag information that sees as erroneous and continue encoding without those. Without this setting, errors are reported and encoding does not start.

--license Print the license page

Prints version and license information about LAME encoder.

--little-endian Set the byte order to little-endian.

This switch tells LAME that the RAW pcm input is encoded in little-endian. It is the default setting.

--longhelp Shows the detailed help

Prints a help page with all of the command-line switches and a brief explanation of them.

--lowpass number Use a lowpass filter when encoding

Enables a lowpass filter of the specified frequency when encoding the source. Range [0.001..50]kHz or [50..50000]Hz

Using a lowpass filter helps reducing the amount of data to encode. This is important in MP3 due to a limitation in very high frequencies (>16Khz). The default value depends on the target bitrate/quality. It is not recommended to change it as a general basis.

--lowpass-width width Set the width of the decaying curve.

Specify the width in Hz of the decaying curve of the lowpass. Range [0.001..16]kHz or [16..50000]Hz
The lowpass is in the center of this curve. The minimum (and default) width is 75% of a band's width (which is 1/64th of the sample rate).

-m x Channel modes

-m mmono
-m lget only the left channel of a stereo signal for a mono output
-m rget only the right channel of a stereo signal for a mono output
-m sforced L/R stereo
-m j /
-m a
automatic switch between L/R and M/S stereo
-m fforced mid/side stereo
-m ddual (independent) channels.

MONO is the default mode for mono input files. If "-m m" is specified for a stereo input file, the two channels will be averaged into a mono signal. (Note: See comments about the -a switch for RAW PCM streams)

FORCED L/R STEREO encodes the left and the right signals independently, and gives more or less bits to each, depending on the currently available.

JOINT STEREO is the default mode of encoding. jstereo means the encoder can use (on a frame by frame basis) either L/R stereo or mid/side stereo. In mid/side stereo, the mid (L+R) and side (L-R) channels are encoded, and more bits are allocated to the mid channel than the side channel. When there isn't too much stereo separation, this effectively increases the bandwidth, so having higher quality with the same amount of bits.
Using mid/side stereo inappropriately can result in audible compression artifacts. Too much switching between mid/side and regular stereo can also sound bad. To determine when to switch to mid/side stereo, LAME uses a much more sophisticated algorithm than the one described in the ISO documentation.

FORCED MID/SIDE STEREO forces all frames to be encoded with mid/side stereo. It should only be used if you are sure every frame of the input file has very little stereo seperation.

DUAL CHANNEL mode is similar to encode the left and right as two mono signals. Its purpose was meant for Dual language streams where only one of them should be decoded. Most decoders just decode them as a stereo stream

--mp1input --mp2input --mp3input MPEG layer I, II or III input file

Assume the input file is an MP1/2/3 file. LAME will decode the input file before re-encoding it. Since MP3 is a lossy format, this is not recommended in general. But it is useful for creating low bitrate mp3s from high bitrate mp3s. If the filename ends in ".mp3" LAME will assume it is an MP3. For stdin or MP3 files which don't end in .mp3 you need to use this switch.

--noasm value Disables the specified assembler instructions

When the encoder is compiled with assembler optimizations, this setting allows to disable them at runtime (They are only enabled if the CPU supports them). The purpose of this setting is to detect problems in those optimizations, and/or check the speed difference.

--nogap file1 file2 [...] Encodes multiple continuous files.

Encodes multiple files (ordered by position) which are meant to be played gaplessly.

By default, LAME will encode the files with accurate length, but the first and last frame may contain a few erroneous samples for signals that don't fade-in/out (as is the case of continuous playback).

This setting solves that by using the samples from the next/previous file to compute the encoding.

--nogapout dir Specify a directory for the output of the files encoded with --nogap

This setting should precede --nogap, and is used to specify the alternate directory where to store the encoded files. The default one is the input file directory.

--nogaptags Enables the use of VBR tags with files encoded with --nogap

Tells LAME to put VBR tags to encoded files if they are encoded in VBR or ABR modes. Else, using the --nogap option doesn't generate it.

--nohist Disable bitrate Histogram

By default, LAME will display a bitrate histogram while producing VBR mp3 files. This will disable that feature.

--noreplaygain Disable ReplayGain analysis

By default ReplayGain analysis is enabled. This switch disables it.

See also: --replaygain-accurate, --replaygain-fast

-o non-original

Mark the encoded file as a copy

-p CRC error detection

Turn on CRC error protection. It will add a cyclic redundancy check (CRC) code in each frame, allowing to detect transmission errors that could occur on the MP3 stream. However, it takes 16 bits per frame that would otherwise be used for encoding, and then will slightly reduce the sound quality.

--pad-id3v2 Pad ID3v2 tag.

Pads the ID3v2 tag with extra 128bytes to allow it to expand.

--preset x Enable one of the presets

SettingMeaning
--preset medium-V 5 --vbr-old
--preset standard-V 2 --vbr-old
--preset extreme-V 0 --vbr-old
--preset insane-b 320 --vbr-old
--preset fast xxxIn versions older than LAME 3.98, "fast" was needed to enable the vbr-new routine. It is no longer needed.
 
--preset number--abr number
--preset cbr number-b number
Old compatibility settings. Meaningless
--preset phone-b 16 -m m
--preset phon+ / lw / mw-eu-b 24 -m m
--preset mw-us-b 40 -m m
--preset voice-b 56 -m m
--preset fm / radio-b 112
--preset hifi-b 160
--preset cd-b 192
--preset studio-b 256

--priority value Set process priority

(Windows and OS/2 only)

Sets the process priority for LAME while running under Windows and/or IBM OS/2. This can be very useful to avoid the system becoming slow and/or unresponsive. By setting LAME to run in a lower priority, you leave more time for the system to update basic processing (drawing windows, polling keyboard/mouse, etc). The impact in LAME's performance is minimal if you use priority 0 to 2.

The valid parameters are:

PriorityWindowsOS/2
0Low priority IDLE_PRIORITY_CLASSIDLE, delta = 0
1Medium priority IDLE_PRIORITY_CLASSIDLE, delta = +31
2Regular priority NORMAL_PRIORITY_CLASSREGULAR, delta = -31
3High priority HIGH_PRIORITY_CLASSREGULAR, delta = 0
4Maximum priority HIGH_PRIORITY_CLASSREGULAR, delta = +31

Note that if you call '--priority' without a parameter, then priority 0 will be assumed.

-q n Algorithm quality selection

Bitrate is of course the main influence on quality. The higher the bitrate, the higher the quality. But for a given bitrate, we have a choice of algorithms to determine the best scalefactors and Huffman coding (noise shaping).

For CBR, ABR and --vbr-old modes, the following table applies

-q 0Use the best algorithms (Best Huffman coding search, full outer loop, and the highest precision of several parameters).
-q 1 to -q 4Similar to -q 0 without the full outer loop and with decreasing precision of parameters the further from -q 0. -q 3 is the default
-q 5 and -q 6Same as -q 7, but enables noise shaping and increases subblock gain
-q 7 to -q 9Same as -f. Very fast, OK quality. Psychoacoustics are used for pre-echo and mid/side stereo, but no noise-shaping is done.

For the default VBR mode since LAME 3.98, the following table applies

-q 0 to -q 4include all features of the other modes and additionally use the best search when applying Huffman coding.
-q 5 and -q 6 include all features of -q7, calculate and consider actual quantisation noise, and additionally enable subblock gain.
-q 7 to -q 9This level uses a psymodel but does not calculate quantisation noise when encoding: it takes a quick guess.

--quiet Don't print any output in the screen

Disables the screen output. Useful for job processing or other times where screen output is undesirable.

-r Input file is raw pcm

Assume the input file is raw pcm. Sampling rate and mono/stereo must be specified on the command line. Without -r, LAME will perform several fseek()'s on the input file looking for WAV and AIFF headers.

Not supported if LAME is compiled to use LIBSNDFILE.

--replaygain-accurate Slightly more accurate ReplayGain analysis and finding the peak sample

Compute "Radio" ReplayGain on the decoded data stream. Find the peak sample by decoding on the fly the encoded data stream and store it in the file.

ReplayGain analysis does _not_ affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from http://www.replaygain.org/

By default, LAME performs ReplayGain analysis on the input data (after the user-specified volume scaling). This behaviour might give slightly inaccurate results because the data on the output of a lossy compression/decompression sequence differs from the initial input data. When --replaygain-accurate is specified the mp3 stream gets decoded on the fly and the analysis is performed on the decoded data stream. Although theoretically this method gives more accurate results, it has several disadvantages:

  • tests have shown that the difference between the ReplayGain values computed on the input data and decoded data is usually no greater than 0.5dB, although the minimum volume difference the human ear can perceive is about 1.0dB
  • decoding on the fly significantly slows down the encoding process
The apparent advantage is that:
  • with --replaygain-accurate the peak sample is determined and stored in the file. The knowledge of the peak sample can be useful to decoders (players) to prevent a negative effect called 'clipping' that introduces distortion into sound.

Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1.

This option is not usable if the MP3 decoder was _explicitly_ disabled in the build of LAME. (Note: if LAME is compiled without the MP3 decoder, ReplayGain analysis is performed on the input data after user-specified volume scaling).

See also: --replaygain-fast, --noreplaygain, --clipdetect

--replaygain-fast Fast ReplayGain analysis

Compute "Radio" ReplayGain of the input data stream after user-specified volume scaling and/or resampling.

ReplayGain analysis does _not_ affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from http://www.replaygain.org/

Only the "Radio" ReplayGain value is computed. It is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1.

This switch is enabled by default.

See also: --replaygain-accurate, --noreplaygain

--resample n Output sampling frequency in kHz

where n = 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48

Output sampling frequency. Resample the input if necessary.

If not specified, LAME may sometimes resample automatically when faced with extreme compression conditions (like encoding a 44.1 kHz input file at 32 kbps). To disable this automatic resampling, you have to use --resample to set the output sample rate equal to the input sample rate. In that case, LAME will not perform any extra computations.

-s n Sampling frequency in kHz

where n = sampling rate in kHz.

Required for raw PCM input files. Otherwise it will be determined from the header information in the input file.

LAME will automatically resample the input file to one of the supported MP3 sample rates if necessary.

--scale arg --scale-l arg --scale-r arg Scale the amplitude of the input file

Scales input by arg. This just multiplies the PCM data (after it has been converted to floating point) by arg.

arg > 1: increase volume
arg = 1: no effect
arg < 1: reduce volume

Use with care, since most MP3 decoders will truncate data which decodes to values greater than 32768.

The l and r variants apply the scaling only to left (channel 0) or right (channel 1) respectively.

--signed Input RAW uses signed values

Use with RAW pcm to indicate if the data is signed (values centered at zero) or unsigned (all positive values). This is the default value.

--silent Don't print any output in the screen

Disables the screen output. Useful for job processing or other times where screen output is undesirable.

--space-id3v1 Use spaces for padding.

Use spaces instead of null values for padding data in an ID3v1 tag.

--strictly-enforce-ISO Strict ISO compliance

With this option, LAME will enforce the 7680 bit limitation on total frame size. This results in many wasted bits for high bitrate encodings. Some decoders need it.

-t Disable VBR tag or disable WAV header

This setting has two different uses:

When encoding to VBR, this setting disables writing the VBR Tag (also known as XING tag). This tag is embedded by default in the frame 0 of the MP3 file. It lets VBR aware players to correctly seek and compute playing times in such files.

When decoding MP3 to WAV using --decode, this flag will disable writing the WAV header. The output will be raw pcm, native endian format. Use -x to swap bytes.

-T Force the usage of the LAME tag

By default, LAME already adds a LAME tag when encoding. This setting overrides the -t setting, and implies --nogaptags.

--unsigned Input RAW uses unsigned values

Use with RAW pcm to indicate if the data is signed (values centered at zero) or unsigned (all positive values).

--usage Print the command line help.

Print the short command line help and exit.

-V n Enable VBR encoding

Encodes using the VBR algorithm, at the indicated quality.
0=highest quality, bigger files. 9.999=lowest quality, smaller files. Decimal values can be specified, like: 4.51
On average, the resulting bitrates are as follows:
SettingAverage bitrate (kbps)
0245
2190
3175
4165
5130

Using -V 7 or higher (lower quality) is not recommended. ABR usually produces better results.

--vbr-old Uses the old VBR method of encoding

Tells LAME to encode to VBR using the old (slower) method of encoding.

--verboseProgram verbosity

Print a lot of information on screen.

--version Prints the license page

Prints version and license information about LAME encoder.

-x Swap input bytes

swap bytes in the input file (and output file when using --decode). For sorting out little endian/big endian type problems. If your encodings sound like static, try this first.

-Y Ignore noise in sbf21, like CBR mode does

Allows -V2, -V1 and -V0 to not encode the highest frequencies accurately, if doing so causes disproportional increases in bitrate. This is the same that CBR and ABR modes do.
Due to the design of the MP3 format, to keep precision in the last scalefactor band, an encoder needs to increase the precision in all the bands (not only in this one).
The consequence is an increase of bitrate (+60kbps in some cases) compared to not keeping that precision. Generally, this band should allow for distortions, so using this switch shouldn't cause harm.

 

  1. If compiled with decoding capabilities
  2. HIP stands for Hip Isn't a Player and is based off of Michael Hipp's mpglib 0.2a
lame-3.100/doc/html/list.html000644 001751 001751 00000004640 11404473004 017436 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: The LAME Mailing List
LAME Official Logo

The LAME Mailing List

Thanks to Jan Peman for running the mp3encoder mailing list for several years!

In September of 2000, the list was moved and is now run by Warren Toomey. To join, visit the mp3encoder mailing list webpage.

The development list is run by SourceForge

lame-3.100/doc/html/about.html000644 001751 001751 00000012224 11476244463 017610 0ustar00netchildnetchild000000 000000 About the LAME encoder
LAME Official Logo

About LAME

LAME development started around mid-1998. Mike Cheng started it as a patch against the 8hz-MP3 encoder sources. After some quality concerns raised by others, he decided to start from scratch based on the dist10 sources. His goal was only to speed up the dist10 sources, and leave its quality untouched. That branch (a patch against the reference sources) became Lame 2.0, and not until Lame 3.81 (May 2000) the latest remainings of dist10 code were removed, making LAME no more only a patch.

The project quickly became a team project. Mike Cheng eventually left leadership and started working on tooLame, an MP2 encoder. Mark Taylor became leader and started pursuing increased quality in addition to better speed. He can be considered the initiator of the LAME project in its current form. He released version 3.0 featuring gpsycho, a new psychoacoustic model he developed.

In early 2003 Mark left project leadership, and since then the project has been lead through the cooperation of the active developers (currently 4 individuals).

Today, LAME is considered the best MP3 encoder at mid-high bitrates and at VBR1, mostly thanks to the dedicated work of its developers and the open source licensing model that allowed the project to tap into engineering resources from all around the world. Both quality and speed improvements are still happening, probably making LAME the only MP3 encoder still being actively developed.

LAME features:

  • Supports MPEG1, MPEG2 and MPEG2.52 layer III encoding.
  • Encodes in CBR (constant bitrate) and in two types of variable bitrate, VBR and ABR3, as well as freeformat.
  • Supports mono and stereo signals. Stereo signals are encoded by default with an advanced algorithm4 to maximize the quality.
  • Tuned default parameters for optimum encoding.
  • Fast. Encodes to -V 2 at 17 times realtime on a P4 2.8Ghz.
  • Uses an advanced psycho acoustic and noise shaping model improved during years.
  • Developed under the LGPL GNU license
  1. See the results of several blind tests conducted by hydrogenaudio members.
  2. MPEG1 sample rates are 32Khz, 44.1Khz and 48Khz.
    MPEG2 sample rates are 16Khz, 22.05Khz and 24Khz.
    MPEG 2.5 does not exist as a standard. It is an extension from fraunhofer that added the possibility to encode in 8Khz, 11,025Khz and 12Khz.
  3. See Variable Bit Rate and Average Bit Rate (ABR).
  4. The stereo encoding of LAME automatically switches between Mid-Side and simple-stereo to maximize the available bits while preserving the quality. More info in Mid/Side Stereo
lame-3.100/doc/html/cbr.html000644 001751 001751 00000010676 11472275766 017263 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: Constant Bit Rate
LAME Official Logo

LAME - Constant Bit Rate

Suggested usage:

lame -b 128 input.wav output.mp3

CBR encoding is the basic encoding mode of MP3: The bitrate is kept constant across the entire file, which means the same number of bits is allocated to encode each second of audio, and internally, frames of audio data occur at regular, predictable intervals, given a predictable file size for a given duration. CBR is therefore the "opposite" of VBR.

That said, in some formats there may be some variability in the number of bits that contain actual audio information from frame to frame. This concept manifests in the bit reservoir of MP3s. In a CBR MP3, even though the frames are of a fixed size, the audio data is not necessarily distributed consistently between them; audio for one frame might use fewer bits than the frame has, so that frame adds the spare bits to a reservoir that can supplement the bits allocated to the next frame. Thus, the effective bitrate is allowed to vary somewhat in a CBR MP3, even though there is a fixed number of frames for the duration of audio. For example, for a 256kbps file, the bitrate of a single frame can be up to 320 kbps, but the frame immediately before and/or after that one would have to use fewer bits, whereas in VBR, there would be no such restriction. Consequently, the amount of variability across the entire MP3 is not as great as that afforded by VBR, but it is not insignificant; a CBR encoder that does not efficiently use the reservoir will likely produce a lower quality file than one that does.

ABR is a more flexible way to encode where filesize is important, but still giving some flexibility to choose frame sizes.

Who should use CBR

CBR is useful for people who are concerned about maintaining maximum compatibility, especially with certain streaming applications and some hardware-based decoders that don't reliably support VBR.

CBR is also useful for people who desire the ability to obtain accurate estimates of the bitrate or approximate duration of a file's decoded audio without scanning and partially decoding the entire file.

lame-3.100/doc/html/vbr.html000644 001751 001751 00000006413 11404473004 017254 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: Variable Bit Rate
LAME Official Logo

LAME - Variable Bit Rate

Suggested usage:

lame -V2 input.wav output.mp3

In Variable Bitrate (VBR) coding, the user chooses a desired quality level instead of a bitrate. A correct implementation should be able to maintain the same quality perception, changing the bitrate to a higher or lower one whenever the audio file is more or less complex. With MP3, this is not always possible.

VBR encoding is the logical way of encoding data. General data compressors (like .zip and .rar) are VBR, as lossless codecs are as well. Being able to indicate a quality value, the encoder decides for each frame, which is the most appropiate bitrate to keep it.

The main advantage of using VBR is that the encoder will use the smallest amount of bytes needed to keep the asked quality. The inconvenience is that the file size is quite unpredictable, and can change from file to file in more than 50kbps. (or nearly double the size, with different genres and quasi-mono content)

lame-3.100/doc/html/contributors.html000644 001751 001751 00000013260 11404473004 021216 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder :: Developers
LAME Official Logo

LAME Developers

Note: if possible, please do not contact developers directly, but proceed as mentioned in the contact page.

LAME was originally developed by Mike Cheng, from 1998 to 1999. After he retired, the project started being maintained by Mark Taylor till early 2003. After 2003, the project became managed by core developpers' teamwork, with no official hierarchy or leadership.

The following list only represents some of the individuals (in alphabetical order of family name) that contributed resources to LAME development. LAME owes its quality and speed to contributions from many other people, including the many people who post to the mp3encoder mailing list. See History for more complete details.

Primary developers:
Robert Hegemann Tuning, optimizations, psychoacoustics...
Alexander Leidinger Multiplatform configuration, libraries handling, release management...
Rogério Brito Debian packaging, debugging.
Primary developers - Retired:
Gabriel Bouvigne Tuning, optimizations, psychoacoustics...
Mike Cheng Maintainer of LAME v2.x.
Frank Klemm Psychoacoustics, optimizations.
Naoki Shibata Psychoacoustics (NSPsytune model, NSSafeJoint).
Mark Taylor Maintainer of LAME v3.x, initial implementer of GPsycho psychoacoustic model.
Takehiro Tominaga Psychoacoustics, bitstream, optimizations, assembly code...
Additional developers:
Roberto Amorim Web pages and documentation.
John Dahlstrom Adaptive ATH.
John Dee LAME extended VBR header.
Dominique Duvivier Speed optimizations.
Albert Faber Author of CDex and lame_enc.dll.
Peter Gubanov LAME DirectShow Filter.
Guillaume Lessard  
Steve Lhomme LAME ACM codec.
Don Melton id3v1 and v2 code.
Darin Morrison Presets tuning.
Kyle VanderBeek Python bindings, website clean-up.
lame-3.100/doc/html/abr.html000644 001751 001751 00000010216 11472275766 017247 0ustar00netchildnetchild000000 000000 LAME MP3 Encoder ::Average Bit Rate (ABR)
LAME Official Logo

LAME - Average Bit Rate (ABR)

Suggested usage:

lame --abr 128 input.wav output.mp3

ABR is a mix between CBR and VBR.

Like CBR, the files will have the (approximate) bitrate specified in the commandline, and uses the CBR algorithm to compute the number of bits needed to encode each frame.

Like VBR, the files will use different frame bitrates so instead of relying on bit reservoir like CBR, each frame just uses the smallest possible bitrate that can encode it.

The difference between ABR and true VBR is in how the desired number of bits is chosen. The true VBR mode determines the number of bits based on the quantization noise. VBR figures out how many bits are needed so that the quantization noise is less than the allowed masking.

ABR mode uses the CBR formula to determine the desired number of bits. This formula is based on the perceptual entropy, which is a rough measure of how difficult the frame is to encode.

The majority of frames in a VBR MP3 produced with an ABR method is normally at or near the target bitrate chosen by the user, but each frame can still potentially vary within the normal range of 8 to 320 kbps. The ABR encoder will typically limit the range of bitrates it can choose from, or will greatly favor certain bitrates, in an effort to ensure that the average comes out near the target.

Who should use ABR

ABR encoding is desirable for users who want the general benefits of VBR (an optimum bitrate from frame to frame) but with a relatively predictable file size like they would get with constant bitrate (CBR), and a greater preference for bitrates that are near a desired target. Inevitably, some frames will be encoded with more bits than necessary, but the result will always be equal to or better than that of CBR for the target bitrate.

lame-3.100/doc/man/lame.1000644 001751 001751 00000066666 13144574735 016444 0ustar00netchildnetchild000000 000000 .TH lame 1 "December 08, 2013" "LAME 3.99" "LAME audio compressor" .SH NAME lame \- create mp3 audio files .SH SYNOPSIS lame [options] .SH DESCRIPTION .PP LAME is a program which can be used to create compressed audio files. (Lame ain't an MP3 encoder). These audio files can be played back by popular MP3 players such as mpg123 or madplay. To read from stdin, use "\-" for . To write to stdout, use "\-" for . .SH OPTIONS Input options: .TP .B \-r Assume the input file is raw pcm. Sampling rate and mono/stereo/jstereo must be specified on the command line. For each stereo sample, LAME expects the input data to be ordered left channel first, then right channel. By default, LAME expects them to be signed integers with a bitwidth of 16 and stored in little-endian. Without .B \-r, LAME will perform several .I fseek()'s on the input file looking for WAV and AIFF headers. .br Might not be available on your release. .TP .B \-x Swap bytes in the input file (or output file when using .B \-\-decode). .br For sorting out little endian/big endian type problems. If your encodings sounds like static, try this first. .br Without using .B \-x, LAME will treat input file as native endian. .TP .BI \-s " sfreq" .I sfreq = 8/11.025/12/16/22.05/24/32/44.1/48 Required only for raw PCM input files. Otherwise it will be determined from the header of the input file. LAME will automatically resample the input file to one of the supported MP3 samplerates if necessary. .TP .BI \-\-bitwidth " n" Input bit width per sample. .br .I n = 8, 16, 24, 32 (default 16) Required only for raw PCM input files. Otherwise it will be determined from the header of the input file. .TP .BI \-\-signed Instructs LAME that the samples from the input are signed (the default for 16, 24 and 32 bits raw pcm data). Required only for raw PCM input files. .TP .BI \-\-unsigned Instructs LAME that the samples from the input are unsigned (the default for 8 bits raw pcm data, where 0x80 is zero). Required only for raw PCM input files and only available at bitwidth 8. .TP .BI \-\-little-endian Instructs LAME that the samples from the input are in little-endian form. Required only for raw PCM input files. .TP .BI \-\-big-endian Instructs LAME that the samples from the input are in big-endian form. Required only for raw PCM input files. .TP .B \-\-mp1input Assume the input file is a MPEG Layer I (ie MP1) file. .br If the filename ends in ".mp1" LAME will assume it is a MPEG Layer I file. For stdin or Layer I files which do not end in .mp1 you need to use this switch. .TP .B \-\-mp2input Assume the input file is a MPEG Layer II (ie MP2) file. .br If the filename ends in ".mp2" LAME will assume it is a MPEG Layer II file. For stdin or Layer II files which do not end in .mp2 you need to use this switch. .TP .B \-\-mp3input Assume the input file is a MP3 file. .br Useful for downsampling from one mp3 to another. As an example, it can be useful for streaming through an IceCast server. .br If the filename ends in ".mp3" LAME will assume it is an MP3. For stdin or MP3 files which do not end in .mp3 you need to use this switch. .TP .BI \-\-nogap " file1 file2 ..." gapless encoding for a set of contiguous files .TP .BI \-\-nogapout " dir" output dir for gapless encoding (must precede \-\-nogap) .TP .BI \-\-out-dir " dir" If no explicit output file is specified, a file will be written at given path. Ignored when using piped/streamed input .PP Operational options: .TP .BI \-m " mode" .I mode = s, j, f, d, m, l, r Joint-stereo is the default mode for stereo files. .B (s)imple stereo (Forced LR) .br In this mode, the encoder makes no use of potentially existing correlations between the two input channels. It can, however, negotiate the bit demand between both channel, i.e. give one channel more bits if the other contains silence or needs less bits because of a lower complexity. .B (j)oint stereo .br In this mode, the encoder can use (on a frame by frame basis) either L/R stereo or mid/side stereo. In mid/side stereo, the mid (L+R) and side (L-R) channels are encoded, and more bits are allocated to the mid channel than the side channel. When there isn't too much stereo separation, this effectively increases the bandwidth, so having higher quality with the same amount of bits. Using mid/side stereo inappropriately can result in audible compression artifacts. Too much switching between mid/side and regular stereo can also sound bad. To determine when to switch to mid/side stereo, LAME uses a much more sophisticated algorithm than the one described in the ISO documentation. .B (f)orced MS stereo .br Forces all frames to be encoded with mid/side stereo. It should be used only if you are sure that every frame of the input file has very little stereo separation. .B (d)ual channel .br In this mode, the 2 channels will be totally independently encoded. Each channel will have exactly half of the bitrate. This mode is designed for applications like dual languages encoding (for example: English in one channel and French in the other). Using this encoding mode for regular stereo files will result in a lower quality encoding. .B (m)ono .br The input will be encoded as a mono signal. If it was a stereo signal, it will be downsampled to mono. The downmix is calculated as the sum of the left and right channel, attenuated by 6 dB. Also note that, if using a stereo RAW PCM stream, you need to use the -a parameter. .B (l)eft channel only .br The input will be encoded as a mono signal. If it was a stereo signal, the left channel will be encoded only. .B (r)ight channel only .br The input will be encoded as a mono signal. If it was a stereo signal, the right channel will be encoded only. .TP .B \-a Mix the stereo input file to mono and encode as mono. .br The downmix is calculated as the sum of the left and right channel, attenuated by 6 dB. This option is only needed in the case of raw PCM stereo input (because LAME cannot determine the number of channels in the input file). To encode a stereo RAW PCM input file as mono, use .B lame \-a \-m m For WAV and AIFF input files, using .B \-m m will always produce a mono .mp3 file from both mono and stereo input. .TP .B \-\-freeformat Produces a free format bitstream. With this option, you can use .B \-b with any bitrate higher than 8 kbps. However, even if an mp3 decoder is required to support free bitrates at least up to 320 kbps, many players are unable to deal with it. Tests have shown that the following decoders support free format: .br .B in_mpg123 up to 560 kbps .br .B l3dec up to 310 kbps .br .B LAME up to 640 kbps .br .B MAD up to 640 kbps .TP .B \-\-decode Uses LAME for decoding to a wav file. The input file can be any input type supported by encoding, including layer II files. LAME uses a fork of mpglib known as HIP for decoding. If .B \-t is used (disable wav header), LAME will output raw pcm in native endian format. You can use .B \-x to swap bytes order. This option is not usable if the MP3 decoder was .B explicitly disabled in the build of LAME. .TP .BI \-t Disable writing of the INFO Tag on encoding. .br This tag is embedded in frame 0 of the MP3 file. It includes some information about the encoding options of the file, and in VBR it lets VBR aware players correctly seek and compute playing times of VBR files. When .B \-\-decode is specified (decode to WAV), this flag will disable writing of the WAV header. The output will be raw pcm, native endian format. Use .B \-x to swap bytes. .TP .BI \-\-comp " arg" Instead of choosing bitrate, using this option, user can choose compression ratio to achieve. .TP .BI \-\-scale " n" .PD 0 .TP .BI \-\-scale\-l " n" .TP .BI \-\-scale\-r " n" Scales input (every channel, only left channel or only right channel) by .I n. This just multiplies the PCM data (after it has been converted to floating point) by .I n. .I n > 1: increase volume .br .I n = 1: no effect .br .I n < 1: reduce volume Use with care, since most MP3 decoders will truncate data which decodes to values greater than 32768. .PD .TP .B \-\-replaygain\-fast Compute ReplayGain fast but slightly inaccurately. This computes "Radio" ReplayGain on the input data stream after user\(hyspecified volume\(hyscaling and/or resampling. The ReplayGain analysis does .I not affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from .B http://www.replaygain.org/. Only the "RadioGain" Replaygain value is computed, it is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1. This switch is enabled by default. See also: .B \-\-replaygain\-accurate, \-\-noreplaygain .TP .B \-\-replaygain\-accurate Compute ReplayGain more accurately and find the peak sample. This computes "Radio" ReplayGain on the decoded data stream, finds the peak sample by decoding on the fly the encoded data stream and stores it in the file. The ReplayGain analysis does .I not affect the content of a compressed data stream itself, it is a value stored in the header of a sound file. Information on the purpose of ReplayGain and the algorithms used is available from .B http://www.replaygain.org/. By default, LAME performs ReplayGain analysis on the input data (after the user\(hyspecified volume scaling). This behavior might give slightly inaccurate results because the data on the output of a lossy compression/decompression sequence differs from the initial input data. When .B \-\-replaygain-accurate is specified the mp3 stream gets decoded on the fly and the analysis is performed on the decoded data stream. Although theoretically this method gives more accurate results, it has several disadvantages: .RS 8 .IP "*" 4 tests have shown that the difference between the ReplayGain values computed on the input data and decoded data is usually not greater than 0.5dB, although the minimum volume difference the human ear can perceive is about 1.0dB .IP "*" 4 decoding on the fly significantly slows down the encoding process .RE .RS 7 The apparent advantage is that: .RE .RS 8 .IP "*" 4 with .B \-\-replaygain-accurate the real peak sample is determined and stored in the file. The knowledge of the peak sample can be useful to decoders (players) to prevent a negative effect called 'clipping' that introduces distortion into the sound. .RE .RS 7 Only the "RadioGain" ReplayGain value is computed, it is stored in the LAME tag. The analysis is performed with the reference volume equal to 89dB. Note: the reference volume has been changed from 83dB on transition from version 3.95 to 3.95.1. This option is not usable if the MP3 decoder was .B explicitly disabled in the build of LAME. (Note: if LAME is compiled without the MP3 decoder, ReplayGain analysis is performed on the input data after user-specified volume scaling). See also: .B \-\-replaygain-fast, \-\-noreplaygain \-\-clipdetect .RE .TP .B \-\-noreplaygain Disable ReplayGain analysis. By default ReplayGain analysis is enabled. This switch disables it. See also: .B \-\-replaygain-fast, \-\-replaygain-accurate .TP .B \-\-clipdetect Clipping detection. Enable .B \-\-replaygain-accurate and print a message whether clipping occurs and how far in dB the waveform is from full scale. This option is not usable if the MP3 decoder was .B explicitly disabled in the build of LAME. See also: .B \-\-replaygain-accurate .TP .B \-\-preset " type | [cbr] kbps" Use one of the built-in presets. Have a look at the PRESETS section below. .B \-\-preset help gives more infos about the the used options in these presets. .TP .B \-\-noasm " type" Disable specific assembly optimizations ( .B mmx / .B 3dnow / .B sse ). Quality will not increase, only speed will be reduced. If you have problems running Lame on a Cyrix/Via processor, disabling mmx optimizations might solve your problem. .PP Verbosity: .TP .BI \-\-disptime " n" Set the delay in seconds between two display updates. .TP .B \-\-nohist By default, LAME will display a bitrate histogram while producing VBR mp3 files. This will disable that feature. .br Histogram display might not be available on your release. .TP .B -S .PD 0 .TP .B \-\-silent .TP .B \-\-quiet Do not print anything on the screen. .PD .TP .B \-\-verbose Print a lot of information on the screen. .TP .B \-\-help Display a list of available options. .PP Noise shaping & psycho acoustic algorithms: .TP .BI -q " qual" 0 <= .I qual <= 9 Bitrate is of course the main influence on quality. The higher the bitrate, the higher the quality. But for a given bitrate, we have a choice of algorithms to determine the best scalefactors and Huffman encoding (noise shaping). For CBR and ABR, the following table applies: .B -q 0: .br Use the best algorithms (Best Huffman coding search, full outer loop, and the highest precision of several parameters). .B -q 1 to q 4: .br Similar to -q 0 without the full outer loop and decreasing precision of parameters the further from q0. -q 3 is the default. .B -q 5 and -q 6: .br Same as -q 7, but enables noise shaping and increases subblock gain .B -q 7 to -q 9: .br Same as -f. Very fast, OK quality. Psychoacoustics are used for pre-echo and mid/side stereo, but no noise-shaping is done. For the default VBR mode since LAME 3.98, the following table applies : .B -q 0 to -q 4: .br include all features of the other modes and additionally use the best search when applying Huffman coding. .B -q 5 and -q 6: .br include all features of -q7, calculate and consider actual quantisation noise, and additionally enable subblock gain. .B -q 7 to -q 9 .br This level uses a psymodel but does not calculate quantisation noise when encoding: it takes a quick guess. .TP .B -h Alias of .B -q 2 .TP .B -f Alias of .B -q 7 .PP CBR (constant bitrate, the default) options: .TP .BI -b " n" For MPEG-1 (sampling frequencies of 32, 44.1 and 48 kHz) .br .I n = 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 For MPEG-2 (sampling frequencies of 16, 22.05 and 24 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 For MPEG-2.5 (sampling frequencies of 8, 11.025 and 12 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64 Default is 128 for MPEG1 and 64 for MPEG2 and 32 for MPEG2.5 (64, 32 and 16 respectively in case of mono). .TP .BI \-\-cbr enforce use of constant bitrate. Used to disable VBR or ABR encoding even if their settings are enabled. .PP ABR (average bitrate) options: .TP .BI \-\-abr " n" Turns on encoding with a targeted average bitrate of n kbits, allowing to use frames of different sizes. The allowed range of .I n is 8 - 310, you can use any integer value within that range. It can be combined with the .B -b and .B -B switches like: .B lame \-\-abr .I 123 .B -b .I 64 .B -B .I 192 a.wav a.mp3 which would limit the allowed frame sizes between 64 and 192 kbits. The use of .B -B is NOT RECOMMENDED. A 128 kbps CBR bitstream, because of the bit reservoir, can actually have frames which use as many bits as a 320 kbps frame. VBR modes minimize the use of the bit reservoir, and thus need to allow 320 kbps frames to get the same flexibility as CBR streams. .PP VBR (variable bitrate) options: .TP .B -v use variable bitrate .B (\-\-vbr-new) .TP .B \-\-vbr-old Invokes the oldest, most tested VBR algorithm. It produces very good quality files, though is not very fast. This has, up through v3.89, been considered the "workhorse" VBR algorithm. .TP .B \-\-vbr-new Invokes the newest VBR algorithm. During the development of version 3.90, considerable tuning was done on this algorithm, and it is now considered to be on par with the original .B \-\-vbr-old. It has the added advantage of being very fast (over twice as fast as .B \-\-vbr-old ). This is the default since 3.98. .TP .BI -V " n" 0 <= .I n <= 9.999 .br Enable VBR (Variable BitRate) and specifies the value of VBR quality (default = 4). Decimal values can be specified, like 4.51. .br 0 = highest quality. .PP ABR and VBR options: .TP .BI -b " bitrate" For MPEG-1 (sampling frequencies of 32, 44.1 and 48 kHz) .br .I n = 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 For MPEG-2 (sampling frequencies of 16, 22.05 and 24 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 For MPEG-2.5 (sampling frequencies of 8, 11.025 and 12 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64 Specifies the minimum bitrate to be used. However, in order to avoid wasted space, the smallest frame size available will be used during silences. .TP .BI -B " bitrate" For MPEG-1 (sampling frequencies of 32, 44.1 and 48 kHz) .br .I n = 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 For MPEG-2 (sampling frequencies of 16, 22.05 and 24 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 For MPEG-2.5 (sampling frequencies of 8, 11.025 and 12 kHz) .br .I n = 8, 16, 24, 32, 40, 48, 56, 64 Specifies the maximum allowed bitrate. Note: If you own an mp3 hardware player build upon a MAS 3503 chip, you must set maximum bitrate to no more than 224 kpbs. .TP .B -F Strictly enforce the .B -b option. .br This is mainly for use with hardware players that do not support low bitrate mp3. Without this option, the minimum bitrate will be ignored for passages of analog silence, i.e. when the music level is below the absolute threshold of human hearing (ATH). .PP Experimental options: .TP .BI -X " n" 0 <= .I n <= 7 When LAME searches for a "good" quantization, it has to compare the actual one with the best one found so far. The comparison says which one is better, the best so far or the actual. The .B -X parameter selects between different approaches to make this decision, .B -X0 being the default mode: .B -X0 .br The criteria are (in order of importance): .br * less distorted scalefactor bands .br * the sum of noise over the thresholds is lower .br * the total noise is lower .B -X1 .br The actual is better if the maximum noise over all scalefactor bands is less than the best so far. .B -X2 .br The actual is better if the total sum of noise is lower than the best so far. .B -X3 .br The actual is better if the total sum of noise is lower than the best so far and the maximum noise over all scalefactor bands is less than the best so far plus 2dB. .B -X4 .br Not yet documented. .B -X5 .br The criteria are (in order of importance): .br * the sum of noise over the thresholds is lower .br * the total sum of noise is lower .B -X6 .br The criteria are (in order of importance): .br * the sum of noise over the thresholds is lower .br * the maximum noise over all scalefactor bands is lower .br * the total sum of noise is lower .B -X7 .br The criteria are: .br * less distorted scalefactor bands .br or .br * the sum of noise over the thresholds is lower .TP .B -Y lets LAME ignore noise in sfb21, like in CBR .PP MP3 header/stream options: .TP .BI -e " emp" .I emp = n, 5, c n = (none, default) .br 5 = 0/15 microseconds .br c = citt j.17 All this does is set a flag in the bitstream. If you have a PCM input file where one of the above types of (obsolete) emphasis has been applied, you can set this flag in LAME. Then the mp3 decoder should de-emphasize the output during playback, although most decoders ignore this flag. A better solution would be to apply the de-emphasis with a standalone utility before encoding, and then encode without .B -e. .TP .B -c Mark the encoded file as being copyrighted. .TP .B -o Mark the encoded file as being a copy. .TP .B -p Turn on CRC error protection. .br It will add a cyclic redundancy check (CRC) code in each frame, allowing to detect transmission errors that could occur on the MP3 stream. However, it takes 16 bits per frame that would otherwise be used for encoding, and then will slightly reduce the sound quality. .TP .B \-\-nores Disable the bit reservoir. Each frame will then become independent from previous ones, but the quality will be lower. .TP .B \-\-strictly-enforce-ISO With this option, LAME will enforce the 7680 bit limitation on total frame size. .br This results in many wasted bits for high bitrate encodings but will ensure strict ISO compatibility. This compatibility might be important for hardware players. .PP Filter options: .TP .BI \-\-lowpass " freq" Set a lowpass filtering frequency in kHz. Frequencies above the specified one will be cutoff. .TP .BI \-\-lowpass-width " freq" Set the width of the lowpass filter. The default value is 15% of the lowpass frequency. .TP .BI \-\-highpass " freq" Set an highpass filtering frequency in kHz. Frequencies below the specified one will be cutoff. .TP .BI \-\-highpass-width " freq" Set the width of the highpass filter in kHz. The default value is 15% of the highpass frequency. .TP .BI \-\-resample " sfreq" .I sfreq = 8, 11.025, 12, 16, 22.05, 24, 32, 44.1, 48 .br Select output sampling frequency (only supported for encoding). .br If not specified, LAME will automatically resample the input when using high compression ratios. .PP ID3 tag options: .TP .BI \-\-tt " title" audio/song title (max 30 chars for version 1 tag) .TP .BI \-\-ta " artist" audio/song artist (max 30 chars for version 1 tag) .TP .BI \-\-tl " album" audio/song album (max 30 chars for version 1 tag) .TP .BI \-\-ty " year" audio/song year of issue (1 to 9999) .TP .BI \-\-tc " comment" user-defined text (max 30 chars for v1 tag, 28 for v1.1) .TP .BI \-\-tn " track[/total]" audio/song track number and (optionally) the total number of tracks on the original recording. (track and total each 1 to 255. Providing just the track number creates v1.1 tag, providing a total forces v2.0). .TP .BI \-\-tg " genre" audio/song genre (name or number in list) .TP .BI \-\-tv " id=value" Text or URL frame specified by id and value (v2.3 tag). User defined frame. Syntax: \-\-tv "TXXX=description=content" .TP .B \-\-add-id3v2 force addition of version 2 tag .TP .B \-\-id3v1-only add only a version 1 tag .TP .B \-\-id3v2-only add only a version 2 tag .TP .B \-\-id3v2-latin1 add following options in ISO-8859-1 text encoding. .TP .B \-\-id3v2-utf16 add following options in unicode text encoding. .TP .B \-\-space-id3v1 pad version 1 tag with spaces instead of nulls .TP .B \-\-pad-id3v2 same as \-\-pad-id3v2-size 128 .TP .B \-\-pad-id3v2-size "num" adds version 2 tag, pad with extra "num" bytes .TP .B \-\-genre-list print alphabetically sorted ID3 genre list and exit .TP .B \-\-ignore-tag-errors ignore errors in values passed for tags, use defaults in case an error occurs .PP Analysis options: .TP .B \-g run graphical analysis on . can also be a .mp3 file. (This feature is a compile time option. Your binary may for speed reasons be compiled without this.) .SH ID3 TAGS LAME is able to embed ID3 v1, v1.1 or v2 tags inside the encoded MP3 file. This allows to have some useful information about the music track included inside the file. Those data can be read by most MP3 players. Lame will smartly choose which tags to use. It will add ID3 v2 tags only if the input comments won't fit in v1 or v1.1 tags, i.e. if they are more than 30 characters. In this case, both v1 and v2 tags will be added, to ensure reading of tags by MP3 players which are unable to read ID3 v2 tags. .SH ENCODING MODES LAME is able to encode your music using one of its 3 encoding modes: constant bitrate (CBR), average bitrate (ABR) and variable bitrate (VBR). .TP .B Constant Bitrate (CBR) This is the default encoding mode, and also the most basic. In this mode, the bitrate will be the same for the whole file. It means that each part of your mp3 file will be using the same number of bits. The musical passage being a difficult one to encode or an easy one, the encoder will use the same bitrate, so the quality of your mp3 is variable. Complex parts will be of a lower quality than the easiest ones. The main advantage is that the final files size won't change and can be accurately predicted. .TP .B Average Bitrate (ABR) In this mode, you choose the encoder will maintain an average bitrate while using higher bitrates for the parts of your music that need more bits. The result will be of higher quality than CBR encoding but the average file size will remain predictable, so this mode is highly recommended over CBR. This encoding mode is similar to what is referred as vbr in AAC or Liquid Audio (2 other compression technologies). .TP .B Variable bitrate (VBR) In this mode, you choose the desired quality on a scale from 9 (lowest quality/biggest distortion) to 0 (highest quality/lowest distortion). Then encoder tries to maintain the given quality in the whole file by choosing the optimal number of bits to spend for each part of your music. The main advantage is that you are able to specify the quality level that you want to reach, but the inconvenient is that the final file size is totally unpredictable. .SH PRESETS The .B \-\-preset switches are aliases over LAME settings. To activate these presets: .PP For VBR modes (generally highest quality): .TP .B \-\-preset medium This preset should provide near transparency to most people on most music. .TP .B \-\-preset standard This preset should generally be transparent to most people on most music and is already quite high in quality. .TP .B \-\-preset extreme If you have extremely good hearing and similar equipment, this preset will generally provide slightly higher quality than the .B standard mode. .PP For CBR 320kbps (highest quality possible from the .B \-\-preset switches): .TP .B \-\-preset insane This preset will usually be overkill for most people and most situations, but if you must have the absolute highest quality with no regard to filesize, this is the way to go. .PP For ABR modes (high quality per given bitrate but not as high as VBR): .TP .B \-\-preset " kbps" Using this preset will usually give you good quality at a specified bitrate. Depending on the bitrate entered, this preset will determine the optimal settings for that particular situation. While this approach works, it is not nearly as flexible as VBR, and usually will not attain the same level of quality as VBR at higher bitrates. .TP .B cbr If you use the ABR mode (read above) with a significant bitrate such as 80, 96, 112, 128, 160, 192, 224, 256, 320, you can use the .B \-\-preset cbr " kbps" option to force CBR mode encoding instead of the standard ABR mode. ABR does provide higher quality but CBR may be useful in situations such as when streaming an MP3 over the Internet may be important. .SH EXAMPLES .LP Fixed bit rate jstereo 128kbs encoding: .IP .B lame \-b .I 128 sample.wav sample.mp3 .LP Fixed bit rate jstereo 128 kbps encoding, highest quality: .IP .B lame \-q 0 \-b .I 128 sample.wav sample.mp3 .LP To disable joint stereo encoding (slightly faster, but less quality at bitrates <= 128 kbps): .IP .B lame \-m .I s sample.wav sample.mp3 .LP Variable bitrate (use \-V n to adjust quality/filesize): .IP .B lame \-V .I 2 sample.wav sample.mp3 .LP Streaming mono 22.05 kHz raw pcm, 24 kbps output: .IP .B cat .I inputfile .B | lame \-r \-m .I m .B \-b .I 24 .B \-s .I 22.05 \- \- .B > .I output .LP Streaming mono 44.1 kHz raw pcm, with downsampling to 22.05 kHz: .IP .B cat .I inputfile .B | lame \-r \-m .I m .B \-b .I 24 .B \-\-resample .I 22.05 \- \- .B > .I output .LP Encode with the .B standard preset: .IP .B lame \-\-preset standard .I sample.wav sample.mp3 .SH BUGS .PP Probably there are some. .SH SEE ALSO .BR mpg123 (1) , .BR madplay (1) , .BR sox (1) .SH AUTHORS .nf LAME originally developed by Mike Cheng and now maintained by Mark Taylor, and the LAME team. GPSYCHO psycho-acoustic model by Mark Taylor. (See http://www.mp3dev.org/). mpglib by Michael Hipp Manual page by William Schelter, Nils Faerber, Alexander Leidinger, and Rog\['e]rio Brito. .\" Local Variables: .\" mode: nroff .\" End: lame-3.100/doc/man/Makefile.in000644 001751 001751 00000036766 13170220146 017466 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign man_MANS = lame.1 EXTRA_DIST = ${man_MANS} all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/doc/man/Makefile.am000644 001751 001751 00000000203 12156036155 017436 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.2 2013/06/12 09:16:29 rbrito Exp $ AUTOMAKE_OPTIONS = foreign man_MANS = lame.1 EXTRA_DIST = ${man_MANS} lame-3.100/dshow/resource.h000644 001751 001751 00000004467 10342553511 017221 0ustar00netchildnetchild000000 000000 //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by Property.rc // #define IDS_AUDIO_PROPS_TITLE 3 #define IDS_AUDIO_ADVANCED_TITLE 4 #define IDS_ABOUT 5 #define IDD_AUDIOENCPROPS 100 #define IDD_ADVPROPS 102 #define IDD_ABOUT 105 #define IDI_ICON2 106 #define IDC_COMBO_CBR 1004 #define IDC_CHECK_COPYRIGHT 1007 #define IDC_CHECK_ORIGINAL 1008 #define IDC_CHECK_CRC 1009 #define IDC_CHECK_PES 1010 #define IDC_COMBO_VBRMIN 1013 #define IDC_TITLE_TEXT 1016 #define IDC_RADIO_CBR 1019 #define IDC_RADIO_VBR 1020 #define IDC_SLIDER_QUALITY 1021 #define IDC_TEXT_QUALITY 1023 #define IDC_COMBO_VBRMAX 1024 #define IDC_COMBO_SAMPLE_RATE 1025 #define IDC_COMBO_VBRq 1026 #define IDC_RADIO_STEREO 1027 #define IDC_RADIO_JSTEREO 1028 #define IDC_RADIO_DUAL 1029 #define IDC_RADIO_MONO 1030 #define IDC_CHECK_ENFORCE_MIN 1031 #define IDC_CHECK_VOICE 1032 #define IDC_CHECK_KEEP_ALL_FREQ 1033 #define IDC_CHECK_STRICT_ISO 1034 #define IDC_CHECK_DISABLE_SHORT_BLOCK 1035 #define IDC_CHECK_XING_TAG 1036 #define IDC_CHECK_FORCE_MS 1037 #define IDC_CHECK_MODE_FIXED 1038 #define IDC_RICHEDIT_LAME 1039 #define IDC_CHECK_OVERLAP 1039 #define IDC_CHECK_STOP 1040 #define IDC_EDIT_TEXT 1044 #define IDC_LAME_LA 1044 #define IDC_FORCE_MONO 1045 #define IDC_LAME_VER 1046 #define IDC_LAME_URL 1047 #define IDC_SET_DURATION 1048 #define IDC_STATIC -1 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 107 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1049 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif lame-3.100/dshow/REG.CPP000644 001751 001751 00000013521 11103146220 016160 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Registry calls handling class * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "reg.h" namespace Lame { CRegKey::CRegKey(void) { m_hRootKey = NULL; m_name[0] = 0; m_hKey = NULL; } CRegKey::CRegKey(HKEY rt, PTSTR pName) { m_hRootKey = rt; m_hKey = NULL; if(pName) { lstrcpy(m_name, pName); Open(m_hRootKey, m_name); } else m_name[0] = 0; } CRegKey::~CRegKey(void) { Close(); } BOOL CRegKey::Open(HKEY rootKey, PTSTR pName) { if(m_hKey) Close(); m_hRootKey = rootKey; if(pName) { lstrcpy(m_name, pName); if(RegOpenKeyEx(m_hRootKey, m_name, 0, KEY_ALL_ACCESS, &m_hKey) != ERROR_SUCCESS) { m_hKey = NULL; return FALSE; } } else { m_name[0] = 0; m_hKey = m_hRootKey; } return TRUE; } BOOL CRegKey::Create(HKEY rootKey, PTSTR pName) { if(m_hKey) Close(); m_hRootKey = rootKey; if(pName) { lstrcpy(m_name, pName); if(RegCreateKeyEx(m_hRootKey, pName, NULL, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, NULL) != ERROR_SUCCESS) { m_hKey = NULL; return FALSE; } } else { m_name[0] = 0; } m_hRootKey = m_hKey; return TRUE; } BOOL CRegKey::Open(PTSTR an) { TCHAR achName[MAX_PATH]; if(m_hKey) Close(); lstrcpy(achName, m_name); if(an) lstrcat(achName, an); if(RegOpenKeyEx(m_hRootKey, achName, 0, KEY_ALL_ACCESS, &m_hKey) != ERROR_SUCCESS) { m_hKey = NULL; return FALSE; } return TRUE; } BOOL CRegKey::Create(PTSTR an) { TCHAR achName[MAX_PATH]; if(m_hKey) Close(); lstrcpy(achName, m_name); if(an) lstrcat(achName, an); if(RegCreateKeyEx(m_hRootKey, achName, NULL, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &m_hKey, NULL) != ERROR_SUCCESS) { m_hKey = NULL; return FALSE; } return TRUE; } BOOL CRegKey::Close(void) { if(m_hKey && m_hKey != m_hRootKey) RegCloseKey(m_hKey); m_hKey = 0; return TRUE; } BOOL CRegKey::getFlag(PTSTR valuename, BOOL bDefault) { if(!m_hKey) return bDefault; DWORD cbData; DWORD dwData; DWORD dwType; cbData = sizeof(dwData); if(RegQueryValueEx(m_hKey, valuename, NULL, &dwType, (PBYTE)&dwData, &cbData) == ERROR_SUCCESS) { if(dwType == REG_DWORD) return (dwData) ? TRUE : FALSE; } return bDefault; } void CRegKey::setFlag(PTSTR valuename, BOOL bValue, BOOL bDefault) { if(getFlag(valuename, bDefault) == bValue ) return; RegSetValueEx(m_hKey, valuename, 0, REG_DWORD, (PBYTE)&bValue, sizeof(bValue)); } void CRegKey::setFlag(PTSTR valuename, BOOL bValue) { RegSetValueEx(m_hKey, valuename, 0, REG_DWORD, (PBYTE)&bValue, sizeof(bValue)); } DWORD CRegKey::getDWORD(PTSTR valuename, DWORD bDefault) { DWORD dwData; DWORD cbData; DWORD dwType; if(!m_hKey) return bDefault; cbData = sizeof(dwData); if(RegQueryValueEx(m_hKey, valuename, NULL, &dwType, (PBYTE)&dwData, &cbData) == ERROR_SUCCESS) { if(dwType == REG_DWORD) { return (UINT)dwData; } } return bDefault; } void CRegKey::setDWORD(PTSTR valuename, DWORD dwValue, DWORD dwDefault) { DWORD dwData = dwValue; if(getDWORD(valuename, dwDefault) == dwValue) return; RegSetValueEx(m_hKey, valuename, 0, REG_DWORD, (PBYTE)&dwData, sizeof(dwData)); } void CRegKey::setDWORD(PTSTR valuename, DWORD dwValue) { DWORD dwData = dwValue; RegSetValueEx(m_hKey, valuename, 0, REG_DWORD, (PBYTE)&dwData, sizeof(dwData)); } DWORD CRegKey::getString(PTSTR valuename, PTSTR pDefault, PTSTR pResult, int cbSize) { DWORD dwType; cbSize *= sizeof(TCHAR); // for unicode strings if(m_hKey) { if(RegQueryValueEx(m_hKey, valuename, NULL, &dwType, (LPBYTE)pResult, (LPDWORD)&cbSize) == ERROR_SUCCESS) { if(dwType == REG_SZ) { return(cbSize - 1); } } } lstrcpy(pResult, pDefault); return lstrlen(pDefault); } void CRegKey::setString(PTSTR valuename, PTSTR pData) { RegSetValueEx(m_hKey, valuename, 0, REG_SZ, (LPBYTE)pData, (lstrlen(pData) + 1)*sizeof(TCHAR)); } DWORD CRegKey::getBinary(PTSTR valuename, PVOID pDefault, PVOID pResult, int cbSize) { DWORD dwType; if(RegQueryValueEx(m_hKey, valuename, NULL, &dwType, (LPBYTE)pResult, (LPDWORD)&cbSize) == ERROR_SUCCESS) { if(dwType == REG_BINARY) { return cbSize; } } memmove(pResult, pDefault, cbSize); return cbSize; } DWORD CRegKey::setBinary(PTSTR valuename, PVOID pData, int cbSize) { RegSetValueEx(m_hKey, valuename, 0, REG_BINARY, (LPBYTE)pData, cbSize); return cbSize; } } // namespace Lame lame-3.100/dshow/Mpegac.h000644 001751 001751 00000024073 11201650121 016547 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * DirectShow filter implementation * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "Encoder.h" #define KEY_LAME_ENCODER "SOFTWARE\\GNU\\LAME MPEG Layer III Audio Encoder Filter" #define VALUE_BITRATE "Bitrate" #define VALUE_VARIABLE "Variable" #define VALUE_VARIABLEMIN "VariableMin" #define VALUE_VARIABLEMAX "VariableMax" #define VALUE_QUALITY "Quality" #define VALUE_VBR_QUALITY "VBR Quality" #define VALUE_SAMPLE_RATE "Sample Rate" #define VALUE_STEREO_MODE "Stereo Mode" #define VALUE_FORCE_MS "Force MS" #define VALUE_LAYER "Layer" #define VALUE_ORIGINAL "Original" #define VALUE_COPYRIGHT "Copyright" #define VALUE_CRC "CRC" #define VALUE_FORCE_MONO "Force Mono" #define VALUE_SET_DURATION "Set Duration" #define VALUE_SAMPLE_OVERLAP "Allow sample overlap" #define VALUE_PES "PES" #define VALUE_ENFORCE_MIN "EnforceVBRmin" #define VALUE_VOICE "Voice Mode" #define VALUE_KEEP_ALL_FREQ "Keep All Frequencies" #define VALUE_STRICT_ISO "Strict ISO" #define VALUE_DISABLE_SHORT_BLOCK "No Short Block" #define VALUE_XING_TAG "Xing Tag" #define VALUE_MODE_FIXED "Mode Fixed" typedef struct { DWORD nSampleRate; DWORD nBitRate; MPEG_mode ChMode; //Channel coding mode } current_output_format_t; typedef struct { DWORD nSampleRate; DWORD nBitRate; } output_caps_t; typedef struct { LONGLONG sample; REFERENCE_TIME delta; BOOL applied; } resync_point_t; #define RESYNC_COUNT 4 // The maximum number of capabilities that we can expose in our IAMStreamConfig // implementation is currently set to 100. This number is larger than we // should ever realistically need. However, a cleaner implementation might // be to use a dynamically sized array like std::vector or CAtlArray to // hold this data. #define MAX_IAMSTREAMCONFIG_CAPS 100 /////////////////////////////////////////////////////////////////// // CMpegAudEnc class - implementation for ITransformFilter interface /////////////////////////////////////////////////////////////////// class CMpegAudEncOutPin; class CMpegAudEncPropertyPage; class CMpegAudEnc : public CTransformFilter, public ISpecifyPropertyPages, public IAudioEncoderProperties, public CPersistStream { public: DECLARE_IUNKNOWN static CUnknown *CreateInstance(LPUNKNOWN lpunk, HRESULT *phr); LPAMOVIESETUP_FILTER GetSetupData(); HRESULT Reconnect(); HRESULT Receive(IMediaSample *pSample); HRESULT CheckInputType(const CMediaType* mtIn); HRESULT CheckTransform(const CMediaType* mtIn, const CMediaType* mtOut); HRESULT DecideBufferSize(IMemAllocator * pAllocator, ALLOCATOR_PROPERTIES *pprop); HRESULT GetMediaType (int iPosition, CMediaType *pMediaType); HRESULT SetMediaType (PIN_DIRECTION direction,const CMediaType *pmt); // HRESULT StartStreaming(); HRESULT StopStreaming(); HRESULT EndOfStream(); HRESULT BeginFlush(); ~CMpegAudEnc(void); // ISpecifyPropertyPages STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv); STDMETHODIMP GetPages(CAUUID *pPages); // IAudioEncoderProperties STDMETHODIMP get_PESOutputEnabled(DWORD *dwEnabled); // PES header. Obsolete STDMETHODIMP set_PESOutputEnabled(DWORD dwEnabled); // PES header. Obsolete STDMETHODIMP get_MPEGLayer(DWORD *dwLayer); STDMETHODIMP set_MPEGLayer(DWORD dwLayer); STDMETHODIMP get_Bitrate(DWORD *dwBitrate); STDMETHODIMP set_Bitrate(DWORD dwBitrate); STDMETHODIMP get_Variable(DWORD *dwVariable); STDMETHODIMP set_Variable(DWORD dwVariable); STDMETHODIMP get_VariableMin(DWORD *dwMin); STDMETHODIMP set_VariableMin(DWORD dwMin); STDMETHODIMP get_VariableMax(DWORD *dwMax); STDMETHODIMP set_VariableMax(DWORD dwMax); STDMETHODIMP get_Quality(DWORD *dwQuality); STDMETHODIMP set_Quality(DWORD dwQuality); STDMETHODIMP get_VariableQ(DWORD *dwVBRq); STDMETHODIMP set_VariableQ(DWORD dwVBRq); STDMETHODIMP get_SourceSampleRate(DWORD *dwSampleRate); STDMETHODIMP get_SourceChannels(DWORD *dwChannels); STDMETHODIMP get_SampleRate(DWORD *dwSampleRate); STDMETHODIMP set_SampleRate(DWORD dwSampleRate); STDMETHODIMP get_ChannelMode(DWORD *dwChannelMode); STDMETHODIMP set_ChannelMode(DWORD dwChannelMode); STDMETHODIMP get_ForceMS(DWORD *dwFlag); STDMETHODIMP set_ForceMS(DWORD dwFlag); STDMETHODIMP get_EnforceVBRmin(DWORD *dwFlag); STDMETHODIMP set_EnforceVBRmin(DWORD dwFlag); STDMETHODIMP get_VoiceMode(DWORD *dwFlag); STDMETHODIMP set_VoiceMode(DWORD dwFlag); STDMETHODIMP get_KeepAllFreq(DWORD *dwFlag); STDMETHODIMP set_KeepAllFreq(DWORD dwFlag); STDMETHODIMP get_StrictISO(DWORD *dwFlag); STDMETHODIMP set_StrictISO(DWORD dwFlag); STDMETHODIMP get_NoShortBlock(DWORD *dwNoShortBlock); STDMETHODIMP set_NoShortBlock(DWORD dwNoShortBlock); STDMETHODIMP get_XingTag(DWORD *dwXingTag); STDMETHODIMP set_XingTag(DWORD dwXingTag); STDMETHODIMP get_ModeFixed(DWORD *dwModeFixed); STDMETHODIMP set_ModeFixed(DWORD dwModeFixed); STDMETHODIMP get_CRCFlag(DWORD *dwFlag); STDMETHODIMP set_CRCFlag(DWORD dwFlag); STDMETHODIMP get_ForceMono(DWORD *dwFlag); STDMETHODIMP set_ForceMono(DWORD dwFlag); STDMETHODIMP get_SetDuration(DWORD *dwFlag); STDMETHODIMP set_SetDuration(DWORD dwFlag); STDMETHODIMP get_OriginalFlag(DWORD *dwFlag); STDMETHODIMP set_OriginalFlag(DWORD dwFlag); STDMETHODIMP get_CopyrightFlag(DWORD *dwFlag); STDMETHODIMP set_CopyrightFlag(DWORD dwFlag); STDMETHODIMP get_SampleOverlap(DWORD *dwFlag); STDMETHODIMP set_SampleOverlap(DWORD dwFlag); STDMETHODIMP get_ParameterBlockSize(BYTE *pcBlock, DWORD *pdwSize); STDMETHODIMP set_ParameterBlockSize(BYTE *pcBlock, DWORD dwSize); STDMETHODIMP DefaultAudioEncoderProperties(); STDMETHODIMP LoadAudioEncoderPropertiesFromRegistry(); STDMETHODIMP SaveAudioEncoderPropertiesToRegistry(); STDMETHODIMP InputTypeDefined(); STDMETHODIMP ApplyChanges(); // CPersistStream HRESULT WriteToStream(IStream *pStream); HRESULT ReadFromStream(IStream *pStream); int SizeMax(); STDMETHODIMP GetClassID(CLSID *pClsid); private: CMpegAudEnc(LPUNKNOWN lpunk, HRESULT *phr); HRESULT FlushEncodedSamples(); void ReadPresetSettings(MPEG_ENCODER_CONFIG *pmabsi); void LoadOutputCapabilities(DWORD sample_rate); // Encoder object CEncoder m_Encoder; REFERENCE_TIME m_rtStreamTime; REFERENCE_TIME m_rtFrameTime; REFERENCE_TIME m_rtEstimated; // Synchronization data LONGLONG m_samplesIn; LONGLONG m_samplesOut; int m_samplesPerFrame; int m_bytesPerSample; float m_bytesToDuration; resync_point_t m_sync[RESYNC_COUNT]; int m_sync_in_idx; int m_sync_out_idx; BOOL m_hasFinished; CCritSec m_cs; DWORD m_setDuration; DWORD m_allowOverlap; REFERENCE_TIME m_rtBytePos; BOOL m_bStreamOutput; // Binary stream output long m_cbStreamAlignment; // Stream block size int m_CapsNum; int m_currentMediaTypeIndex; output_caps_t OutputCaps[MAX_IAMSTREAMCONFIG_CAPS]; protected: friend class CMpegAudEncOutPin; friend class CMpegAudEncPropertyPage; }; class CMpegAudEncOutPin : public CTransformOutputPin, public IAMStreamConfig { public: ////////////////////////////////////////////////////////////////////////// // IUnknown ////////////////////////////////////////////////////////////////////////// DECLARE_IUNKNOWN STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv); ////////////////////////////////////////////////////////////////////////// // IAMStreamConfig ////////////////////////////////////////////////////////////////////////// HRESULT STDMETHODCALLTYPE SetFormat(AM_MEDIA_TYPE *pmt); HRESULT STDMETHODCALLTYPE GetFormat(AM_MEDIA_TYPE **ppmt); HRESULT STDMETHODCALLTYPE GetNumberOfCapabilities(int *piCount, int *piSize); HRESULT STDMETHODCALLTYPE GetStreamCaps(int iIndex, AM_MEDIA_TYPE **pmt, BYTE *pSCC); ////////////////////////////////////////////////////////////////////////// // CTransformOutputPin ////////////////////////////////////////////////////////////////////////// CMpegAudEncOutPin( CMpegAudEnc * pFilter, HRESULT * pHr ); ~CMpegAudEncOutPin(); HRESULT CheckMediaType(const CMediaType *pmtOut); HRESULT GetMediaType(int iPosition, CMediaType *pmt); HRESULT SetMediaType(const CMediaType *pmt); private: BOOL m_SetFormat; CMpegAudEnc *m_pFilter; current_output_format_t m_CurrentOutputFormat; protected: friend class CMpegAudEnc; }; lame-3.100/dshow/Makefile.am000644 001751 001751 00000000601 11105565230 017236 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.6 2008/11/09 13:50:16 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ Encoder.cpp \ Encoder.h \ Mpegac.cpp \ Mpegac.def \ Mpegac.h \ PropPage.cpp \ PropPage.h \ PropPage_adv.cpp \ PropPage_adv.h \ Property.rc \ README \ REG.CPP \ REG.H \ UIDS.H \ aboutprp.cpp \ aboutprp.h \ elogo.ico \ iaudioprops.h \ resource.h lame-3.100/dshow/PropPage_adv.h000644 001751 001751 00000003451 10342553511 017731 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Advanced property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ class CMpegAudEncPropertyPageAdv : public CBasePropertyPage { public: static CUnknown *CreateInstance( LPUNKNOWN punk, HRESULT *phr ); CMpegAudEncPropertyPageAdv( LPUNKNOWN punk, HRESULT *phr ); HRESULT OnConnect(IUnknown *pUnknown); HRESULT OnDisconnect(); HRESULT OnActivate(); HRESULT OnDeactivate(); HRESULT OnApplyChanges(); BOOL OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); private: void InitPropertiesDialog(HWND hwndParent); void EnableControls(HWND hwndParent, bool bEnable); void SetDirty(void); DWORD m_dwEnforceVBRmin; DWORD m_dwVoiceMode; DWORD m_dwKeepAllFreq; DWORD m_dwStrictISO; DWORD m_dwNoShortBlock; DWORD m_dwXingTag; DWORD m_dwChannelMode; DWORD m_dwForceMS; DWORD m_dwModeFixed; DWORD m_dwOverlap; DWORD m_dwSetStop; IAudioEncoderProperties *m_pAEProps; }; lame-3.100/dshow/UIDS.H000644 001751 001751 00000003175 10256755272 016105 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * CLSIDs of the filter and property pages * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ // {b8d27088-df5f-4b7c-98dc-0e91a1696286} DEFINE_GUID(CLSID_LAMEDShowFilter, 0xb8d27088, 0xff5f, 0x4b7c, 0x98, 0xdc, 0x0e, 0x91, 0xa1, 0x69, 0x62, 0x86); // {b8d27089-df5f-4b7c-98dc-0e91a1696286} DEFINE_GUID(CLSID_LAMEDShow_PropertyPage, 0xb8d27089, 0xff5f, 0x4b7c, 0x98, 0xdc, 0x0e, 0x91, 0xa1, 0x69, 0x62, 0x86); // {b8d2708a-df5f-4b7c-98dc-0e91a1696286} DEFINE_GUID(CLSID_LAMEDShow_PropertyPageAdv, 0xb8d2708a, 0xff5f, 0x4b7c, 0x98, 0xdc, 0x0e, 0x91, 0xa1, 0x69, 0x62, 0x86); // {FE69EDD1-04CB-11d5-994A-000021D1FE2F} DEFINE_GUID(CLSID_LAMEDShow_About, 0xfe69edd1, 0xf4cb, 0x11d5, 0x99, 0x4a, 0x0, 0x0, 0x21, 0xd1, 0xfe, 0x2f); DEFINE_GUID(MEDIASUBTYPE_MP3, 0x00000055, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);lame-3.100/dshow/README000644 001751 001751 00000005370 11170137632 016075 0ustar00netchildnetchild000000 000000 LAME DirectShow Filter Version 1.0 Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. This library is a Microsoft(R) DirectShow(R) wrapper filter for LAME library. It adds DirectShow interface to the library and two property pages so you can tune some encoding parameters. We are interested to hear from you, when you use this package as part of another project. Filter Homepage http://www.elecard.com/products/layer3encoder.shtml Vitaly Ivanov vitaly.ivanov@elecard.net.ru NOTE: 1st: build dx9sdk/Samples/DShow/BaseClasses Project 2nd: copy resulting strmbase.lib (or strmbasd.lib for debug support) into LAME's DShow folder 3rd: add the BaseClasses directory path to the Visual Studio Include and Library directory search path lists i.e. for Visual Studio 6 choose: Tools -> Options -> Directories 4th: build LAME .DLL builds (if you didn't yet) 5th: build LAME DShow Filter TROUBLESHOOTING FAQ: Q. When trying to open a workspace file (.dsw), I get an "empty" workspace (i.e. there are no source files listed) and/or when trying to open a project file (.dsp), I get a "This makefile was not generated by Developer Studio" error. A. Often, this can be caused by having UNIX line breaks (LF) in the .dsw and .dsp files, as opposed to Windows line breaks (CR\LF). It is interesting to note that .dsw and .dsp files are just text files; you can open them up in any text editor. If you open the .dsw and .dsp files in a text editor that can't handle UNIX line breaks (namely Notepad) you will probably see big, black squares at the end of lines. You can "fix" this error by following this procedure. 1) Do NOT let Microsoft Visual C++ attempt to fix the problem! Press "No" when prompted. 2) Open the .dsw and .dsp files in a text editor that understands UNIX line breaks. WordPad is one and it is available with most copies of Windows. 3) Once open, simply re-save the file (In WordPad, make sure you set the Save As type to "Text Document"). All UNIX line breaks should then be automatically converted to Windows line breaks. lame-3.100/dshow/Mpegac.def000644 001751 001751 00000001770 10256755271 017102 0ustar00netchildnetchild000000 000000 ; ; LAME MP3 encoder for DirectShow ; ; Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. ; ; This library is free software; you can redistribute it and/or ; modify it under the terms of the GNU Library General Public ; License as published by the Free Software Foundation; either ; version 2 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 ; Library General Public License for more details. ; ; You should have received a copy of the GNU Library General Public ; License along with this library; if not, write to the ; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ; Boston, MA 02111-1307, USA. ; LIBRARY lame.ax EXPORTS DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE lame-3.100/dshow/aboutprp.cpp000644 001751 001751 00000011413 11103146220 017535 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * About property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include #include "iaudioprops.h" #include "aboutprp.h" #include "mpegac.h" #include "resource.h" #include "Reg.h" #include // ------------------------------------------------------------------------- // CMAEAbout // ------------------------------------------------------------------------- CHAR lpszText[] = "This library is free software; you can redistribute it \r\n" "and/or modify it under the terms of the GNU \r\n" "Library General Public License\r\n" "as published by the Free Software Foundation;\r\n" "either version 2 of the License,\r\n" "or (at your option) any later version.\r\n" "\r\n" "This library is distributed in the hope that it will be useful,\r\n" "but WITHOUT ANY WARRANTY;\r\n" "without even the implied warranty of MERCHANTABILITY or \r\n" "FITNESS FOR A PARTICULAR PURPOSE. See the GNU \r\n" "Library General Public License for more details.\r\n" "\r\n" "You should have received a copy of the GNU\r\n" "Library General Public License\r\n" "along with this library; if not, write to the\r\n" "Free Software Foundation,\r\n" "Inc., 59 Temple Place - Suite 330,\r\n" "Boston, MA 02111-1307, USA.\r\n"; // // CreateInstance // CUnknown * WINAPI CMAEAbout::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr) { CUnknown *punk = new CMAEAbout(lpunk, phr); if (punk == NULL) { *phr = E_OUTOFMEMORY; } return punk; } // // Constructor // // Creaete a Property page object for the MPEG options CMAEAbout::CMAEAbout(LPUNKNOWN lpunk, HRESULT *phr) : CBasePropertyPage(NAME("About LAME Ain't MP3 Encoder"), lpunk, IDD_ABOUT,IDS_ABOUT) , m_fWindowInactive(TRUE) { ASSERT(phr); // InitCommonControls(); } // // OnConnect // // Give us the filter to communicate with HRESULT CMAEAbout::OnConnect(IUnknown *pUnknown) { return NOERROR; } // // OnDisconnect // // Release the interface HRESULT CMAEAbout::OnDisconnect() { // Release the interface return NOERROR; } // // OnActivate // // Called on dialog creation HRESULT CMAEAbout::OnActivate(void) { // Add text to the window. m_fWindowInactive = FALSE; SendDlgItemMessage(m_hwnd, IDC_LAME_LA, WM_SETTEXT, 0, (LPARAM)lpszText); CHAR strbuf[250]; #pragma warning(push) #pragma warning(disable: 4995) sprintf(strbuf, "LAME Encoder Version %s", get_lame_version()); SendDlgItemMessage(m_hwnd, IDC_LAME_VER, WM_SETTEXT, 0, (LPARAM)strbuf); sprintf(strbuf, "LAME Project Homepage: %s", get_lame_url()); SendDlgItemMessage(m_hwnd, IDC_LAME_URL, WM_SETTEXT, 0, (LPARAM)strbuf); #pragma warning(pop) return NOERROR; } // // OnDeactivate // // Called on dialog destruction HRESULT CMAEAbout::OnDeactivate(void) { m_fWindowInactive = TRUE; return NOERROR; } // // OnApplyChanges // // User pressed the Apply button, remember the current settings HRESULT CMAEAbout::OnApplyChanges(void) { return NOERROR; } // // OnReceiveMessages // // Handles the messages for our property window BOOL CMAEAbout::OnReceiveMessage( HWND hwnd , UINT uMsg , WPARAM wParam , LPARAM lParam) { if (m_fWindowInactive) return FALSE; switch (uMsg) { case WM_DESTROY: return TRUE; default: return FALSE; } return TRUE; } // // SetDirty // // notifies the property page site of changes void CMAEAbout::SetDirty() { m_bDirty = TRUE; if (m_pPageSite) m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY); } lame-3.100/dshow/Property.rc000644 001751 001751 00000021464 11170135571 017371 0ustar00netchildnetchild000000 000000 //Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS #include "resource.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Russisch resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) #ifdef _WIN32 LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT #pragma code_page(1251) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""resource.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // Russisch resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_AUDIOENCPROPS DIALOGEX 0, 0, 228, 121 STYLE WS_CHILD | WS_VISIBLE FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN CONTROL "Constant Bit Rate",IDC_RADIO_CBR,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,4,2,71,10 CONTROL "Variable Bit Rate",IDC_RADIO_VBR,"Button", BS_AUTORADIOBUTTON,4,31,69,10 COMBOBOX IDC_COMBO_CBR,52,14,76,92,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP COMBOBOX IDC_COMBO_VBRMIN,52,44,76,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_COMBO_VBRMAX,52,62,76,86,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP, WS_EX_TRANSPARENT CONTROL "Copyright",IDC_CHECK_COPYRIGHT,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,151,39,45,10 CONTROL "Original/Copy",IDC_CHECK_ORIGINAL,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,151,51,59,10 CONTROL "CRC Protected",IDC_CHECK_CRC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,151,63,63,10 CONTROL "Slider1",IDC_SLIDER_QUALITY,"msctls_trackbar32", TBS_BOTH | TBS_NOTICKS | WS_GROUP | WS_TABSTOP,66,101,96, 15 LTEXT "kbps",IDC_STATIC,4,16,22,8 CONTROL "Min",IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,4, 46,13,11 LTEXT "Max",IDC_STATIC,4,64,16,11 LTEXT "Encoding Quality",IDC_STATIC,4,105,54,8,NOT WS_GROUP LTEXT "0",IDC_TEXT_QUALITY,170,104,47,10 COMBOBOX IDC_COMBO_SAMPLE_RATE,151,14,59,104,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Target Sample Rate",IDC_STATIC,"Static", SS_LEFTNOWORDWRAP | NOT WS_VISIBLE | WS_GROUP,152,2,66,8 COMBOBOX IDC_COMBO_VBRq,52,80,76,90,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "VBR Quality",IDC_STATIC,4,82,40,8 CONTROL "Force Mono",IDC_FORCE_MONO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,151,75,54,10 END IDD_ADVPROPS DIALOG DISCARDABLE 0, 0, 228, 129 STYLE WS_CHILD | WS_VISIBLE FONT 8, "MS Sans Serif" BEGIN CONTROL "Mono",IDC_RADIO_MONO,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,109,93,34,10 CONTROL "Standard stereo",IDC_RADIO_STEREO,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,109,36,67,11 CONTROL "Joint stereo",IDC_RADIO_JSTEREO,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,109,51,60,10 GROUPBOX "Mode Selection",IDC_STATIC,103,26,118,82,BS_CENTER | WS_GROUP CONTROL "Strictly enforce VBR min bitrate",IDC_CHECK_ENFORCE_MIN, "Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,8,113, 10 CONTROL "Voice encoding mode",IDC_CHECK_VOICE,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,21,85,10 CONTROL "Keep all frequencies",IDC_CHECK_KEEP_ALL_FREQ,"Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_GROUP | WS_TABSTOP,7, 34,80,10 CONTROL "Strict ISO compliance",IDC_CHECK_STRICT_ISO,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,47,84,10 CONTROL "Disable short blocks",IDC_CHECK_DISABLE_SHORT_BLOCK, "Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_GROUP | WS_TABSTOP,7,60,79,10 CONTROL "Enable Xing VBR tag",IDC_CHECK_XING_TAG,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,73,83,10 CONTROL "Dual channel",IDC_RADIO_DUAL,"Button", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,109,79,58,10 CONTROL "Forced mid / side stereo",IDC_CHECK_FORCE_MS,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,122,65,92,10 CONTROL "Mode Fixed",IDC_CHECK_MODE_FIXED,"Button", BS_AUTOCHECKBOX | WS_DISABLED | WS_GROUP | WS_TABSTOP,7, 86,53,10 CONTROL "Allow sample overlap",IDC_CHECK_OVERLAP,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,99,82,10 CONTROL "Set sample stop time",IDC_CHECK_STOP,"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,112,81,10 END IDD_ABOUT DIALOG DISCARDABLE 0, 0, 228, 121 STYLE WS_CHILD FONT 8, "MS Sans Serif" BEGIN LTEXT "LAME Ain't MP3 Encoder (X.XX engine)",IDC_LAME_VER,7,8, 208,8 LTEXT "LAME Project Homepage: http://www.mp3dev.org", IDC_LAME_URL,7,19,192,8 EDITTEXT IDC_LAME_LA,7,31,214,83,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_AUDIOENCPROPS, DIALOG BEGIN RIGHTMARGIN, 223 BOTTOMMARGIN, 118 END IDD_ADVPROPS, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 221 TOPMARGIN, 5 BOTTOMMARGIN, 121 END IDD_ABOUT, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 221 TOPMARGIN, 7 BOTTOMMARGIN, 114 END END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,61,24875 PRODUCTVERSION 1,0,61,24875 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "LAME DirectShow Filter\0" VALUE "CompanyName", "\0" VALUE "FileDescription", "LAME Audio Encoder\0" VALUE "FileVersion", "1, 0, 61, 90411\0" VALUE "InternalName", "LAME Audio Encoder\0" VALUE "LegalCopyright", "Copyright © 2005 Elecard Ltd.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "lame.ax\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "LAME Audio Encoder\0" VALUE "ProductVersion", "1, 0, 61, 90411\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC ///////////////////////////////////////////////////////////////////////////// // // String Table // STRINGTABLE DISCARDABLE BEGIN IDS_AUDIO_PROPS_TITLE "MPEG Layer III Audio Encoder" IDS_AUDIO_ADVANCED_TITLE "Advanced" IDS_ABOUT "About" END #endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED lame-3.100/dshow/Makefile.in000644 001751 001751 00000031560 13170220146 017255 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = dshow ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ Encoder.cpp \ Encoder.h \ Mpegac.cpp \ Mpegac.def \ Mpegac.h \ PropPage.cpp \ PropPage.h \ PropPage_adv.cpp \ PropPage_adv.h \ Property.rc \ README \ REG.CPP \ REG.H \ UIDS.H \ aboutprp.cpp \ aboutprp.h \ elogo.ico \ iaudioprops.h \ resource.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign dshow/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign dshow/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/dshow/Encoder.h000644 001751 001751 00000012462 11027515162 016744 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * LAME encoder wrapper * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #if !defined(AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_) #define AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include const unsigned int dwBitRateValue[2][14] = { {32,40,48,56,64,80,96,112,128,160,192,224,256,320}, // MPEG-1 {8,16,24,32,40,48,56,64,80,96,112,128,144,160} // MPEG-2/2.5 }; /* #define STEREO 0 #define JOINT_STEREO 1 #define DUAL_CHANNEL 2 #define MONO 3 */ #define OUT_BUFFER_SIZE 16384 #define OUT_BUFFER_GUARD 8192 #define OUT_BUFFER_MAX (OUT_BUFFER_SIZE - OUT_BUFFER_GUARD) typedef struct { DWORD dwSampleRate; //SF in Hz DWORD dwBitrate; //BR in bit per second vbr_mode vmVariable; DWORD dwVariableMin; //specify a minimum allowed bitrate DWORD dwVariableMax; //specify a maximum allowed bitrate DWORD dwQuality; //Encoding quality DWORD dwVBRq; // VBR quality setting (0=highest quality, 9=lowest) long lLayer; //Layer: 1 or 2 MPEG_mode ChMode; //Channel coding mode: see doc DWORD dwForceMS; DWORD bCRCProtect; //Is CRC protection activated? DWORD bForceMono; DWORD bSetDuration; DWORD bCopyright; //Is the stream protected by copyright? DWORD bOriginal; //Is the stream an original? DWORD dwPES; // PES header. Obsolete DWORD dwEnforceVBRmin; DWORD dwVoiceMode; DWORD dwKeepAllFreq; DWORD dwStrictISO; DWORD dwNoShortBlock; DWORD dwXingTag; DWORD dwModeFixed; DWORD bSampleOverlap; } MPEG_ENCODER_CONFIG; class CEncoder { public: CEncoder(); virtual ~CEncoder(); // Initialize encoder with PCM stream properties HRESULT SetInputType(LPWAVEFORMATEX lpwfex, bool bJustCheck = FALSE); // returns E_INVALIDARG if not supported // GetInputType - returns current input type HRESULT GetInputType(WAVEFORMATEX *pwfex) { if(m_bInpuTypeSet) { memcpy(pwfex, &m_wfex, sizeof(WAVEFORMATEX)); return S_OK; } else return E_UNEXPECTED; } // Set MPEG audio parameters HRESULT SetOutputType(MPEG_ENCODER_CONFIG &mabsi); // returns E_INVALIDARG if not supported or // not compatible with input type // Return current MPEG audio settings HRESULT GetOutputType(MPEG_ENCODER_CONFIG* pmabsi) { if (m_bOutpuTypeSet) { memcpy(pmabsi, &m_mabsi, sizeof(MPEG_ENCODER_CONFIG)); return S_OK; } else return E_UNEXPECTED; } // Set if output stream is a PES. Obsolete void SetPES(bool bPES) { m_mabsi.dwPES = false;//bPES; } // Is output stream a PES. Obsolete BOOL IsPES() const { return (BOOL)m_mabsi.dwPES; } // Initialize encoder SDK HRESULT Init(); // Close encoder SDK HRESULT Close(IStream* pStream); // Encode media sample data int Encode(const short * pdata, int data_size); int GetFrame(const unsigned char ** pframe); // Returns block of a mp3 file, witch size integer multiples of cbAlign int GetBlockAligned(const unsigned char ** pblock, int* piBufferSize, const long& cbAlign); HRESULT Finish(); protected: HRESULT updateLameTagFrame(IStream* pStream); HRESULT skipId3v2(IStream *pStream, size_t lametag_frame_size); HRESULT maybeSyncWord(IStream *pStream); HRESULT SetDefaultOutputType(LPWAVEFORMATEX lpwfex); // Input media type WAVEFORMATEX m_wfex; // Output media type MPEG_ENCODER_CONFIG m_mabsi; // Compressor private data lame_global_flags * pgf; // Compressor miscelaneous state BOOL m_bInpuTypeSet; BOOL m_bOutpuTypeSet; BOOL m_bFinished; int m_frameCount; unsigned char * m_outFrameBuf; int m_outOffset; int m_outReadOffset; CCritSec m_lock; }; #endif // !defined(AFX_VITECENCODER_H__40DC8A44_B937_11D2_A381_A2FD7C37FA15__INCLUDED_) lame-3.100/dshow/Encoder.cpp000644 001751 001751 00000041344 11027515162 017300 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * LAME encoder wrapper * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include "Encoder.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CEncoder::CEncoder() : m_bInpuTypeSet(FALSE), m_bOutpuTypeSet(FALSE), m_bFinished(FALSE), m_outOffset(0), m_outReadOffset(0), m_frameCount(0), pgf(NULL) { m_outFrameBuf = new unsigned char[OUT_BUFFER_SIZE]; } CEncoder::~CEncoder() { Close(NULL); if (m_outFrameBuf) delete [] m_outFrameBuf; } ////////////////////////////////////////////////////////////////////// // SetInputType - check if given input type is supported ////////////////////////////////////////////////////////////////////// HRESULT CEncoder::SetInputType(LPWAVEFORMATEX lpwfex, bool bJustCheck) { CAutoLock l(&m_lock); if (lpwfex->wFormatTag == WAVE_FORMAT_PCM) { if (lpwfex->nChannels == 1 || lpwfex->nChannels == 2) { if (lpwfex->nSamplesPerSec == 48000 || lpwfex->nSamplesPerSec == 44100 || lpwfex->nSamplesPerSec == 32000 || lpwfex->nSamplesPerSec == 24000 || lpwfex->nSamplesPerSec == 22050 || lpwfex->nSamplesPerSec == 16000 || lpwfex->nSamplesPerSec == 12000 || lpwfex->nSamplesPerSec == 11025 || lpwfex->nSamplesPerSec == 8000) { if (lpwfex->wBitsPerSample == 16) { if (!bJustCheck) { memcpy(&m_wfex, lpwfex, sizeof(WAVEFORMATEX)); m_bInpuTypeSet = true; } return S_OK; } } } } if (!bJustCheck) m_bInpuTypeSet = false; return E_INVALIDARG; } ////////////////////////////////////////////////////////////////////// // SetOutputType - try to initialize encoder with given output type ////////////////////////////////////////////////////////////////////// HRESULT CEncoder::SetOutputType(MPEG_ENCODER_CONFIG &mabsi) { CAutoLock l(&m_lock); m_mabsi = mabsi; m_bOutpuTypeSet = true; return S_OK; } ////////////////////////////////////////////////////////////////////// // SetDefaultOutputType - sets default MPEG audio properties according // to input type ////////////////////////////////////////////////////////////////////// HRESULT CEncoder::SetDefaultOutputType(LPWAVEFORMATEX lpwfex) { CAutoLock l(&m_lock); if(lpwfex->nChannels == 1 || m_mabsi.bForceMono) m_mabsi.ChMode = MONO; if((lpwfex->nSamplesPerSec < m_mabsi.dwSampleRate) || (lpwfex->nSamplesPerSec % m_mabsi.dwSampleRate != 0)) m_mabsi.dwSampleRate = lpwfex->nSamplesPerSec; return S_OK; } ////////////////////////////////////////////////////////////////////// // Init - initialized or reiniyialized encoder SDK with given input // and output settings ////////////////////////////////////////////////////////////////////// HRESULT CEncoder::Init() { CAutoLock l(&m_lock); m_outOffset = 0; m_outReadOffset = 0; m_bFinished = FALSE; m_frameCount = 0; if (!pgf) { if (!m_bInpuTypeSet || !m_bOutpuTypeSet) return E_UNEXPECTED; // Init Lame library // note: newer, safer interface which doesn't // allow or require direct access to 'gf' struct is being written // see the file 'API' included with LAME. if (pgf = lame_init()) { lame_set_num_channels(pgf, m_wfex.nChannels); lame_set_in_samplerate(pgf, m_wfex.nSamplesPerSec); lame_set_out_samplerate(pgf, m_mabsi.dwSampleRate); if ((lame_get_out_samplerate(pgf) >= 32000) && (m_mabsi.dwBitrate < 32)) lame_set_brate(pgf, 32); else lame_set_brate(pgf, m_mabsi.dwBitrate); lame_set_VBR(pgf, m_mabsi.vmVariable); lame_set_VBR_min_bitrate_kbps(pgf, m_mabsi.dwVariableMin); lame_set_VBR_max_bitrate_kbps(pgf, m_mabsi.dwVariableMax); lame_set_copyright(pgf, m_mabsi.bCopyright); lame_set_original(pgf, m_mabsi.bOriginal); lame_set_error_protection(pgf, m_mabsi.bCRCProtect); lame_set_bWriteVbrTag(pgf, m_mabsi.dwXingTag); lame_set_strict_ISO(pgf, m_mabsi.dwStrictISO); lame_set_VBR_hard_min(pgf, m_mabsi.dwEnforceVBRmin); if (lame_get_num_channels(pgf) == 2 && !m_mabsi.bForceMono) { //int act_br = pgf->VBR ? pgf->VBR_min_bitrate_kbps + pgf->VBR_max_bitrate_kbps / 2 : pgf->brate; // Disabled. It's for user's consideration now //int rel = pgf->out_samplerate / (act_br + 1); //pgf->mode = rel < 200 ? m_mabsi.ChMode : JOINT_STEREO; lame_set_mode(pgf, m_mabsi.ChMode); } else lame_set_mode(pgf, MONO); if (lame_get_mode(pgf) == JOINT_STEREO) lame_set_force_ms(pgf, m_mabsi.dwForceMS); else lame_set_force_ms(pgf, 0); // pgf->mode_fixed = m_mabsi.dwModeFixed; if (m_mabsi.dwVoiceMode != 0) { lame_set_lowpassfreq(pgf,12000); ///pgf->VBR_max_bitrate_kbps = 160; } if (m_mabsi.dwKeepAllFreq != 0) { ///pgf->lowpassfreq = -1; ///pgf->highpassfreq = -1; /// not available anymore } lame_set_quality(pgf, m_mabsi.dwQuality); lame_set_VBR_q(pgf, m_mabsi.dwVBRq); lame_init_params(pgf); // encoder delay compensation { int const nch = lame_get_num_channels(pgf); short * start_padd = (short *)calloc(48, nch * sizeof(short)); int out_bytes = 0; if (nch == 2) out_bytes = lame_encode_buffer_interleaved(pgf, start_padd, 48, m_outFrameBuf, OUT_BUFFER_SIZE); else out_bytes = lame_encode_buffer(pgf, start_padd, start_padd, 48, m_outFrameBuf, OUT_BUFFER_SIZE); if (out_bytes > 0) m_outOffset += out_bytes; free(start_padd); } return S_OK; } return E_FAIL; } return S_OK; } ////////////////////////////////////////////////////////////////////// // Close - closes encoder ////////////////////////////////////////////////////////////////////// HRESULT CEncoder::Close(IStream* pStream) { CAutoLock l(&m_lock); if (pgf) { if(lame_get_bWriteVbrTag(pgf) && pStream) { updateLameTagFrame(pStream); } lame_close(pgf); pgf = NULL; } return S_OK; } ////////////////////////////////////////////////////////////////////// // Encode - encodes data placed on pdata and returns // the number of processed bytes ////////////////////////////////////////////////////////////////////// int CEncoder::Encode(const short * pdata, int data_size) { CAutoLock l(&m_lock); if (!pgf || !m_outFrameBuf || !pdata || data_size < 0 || (data_size & (sizeof(short) - 1))) return -1; // some data left in the buffer, shift to start if (m_outReadOffset > 0) { if (m_outOffset > m_outReadOffset) memmove(m_outFrameBuf, m_outFrameBuf + m_outReadOffset, m_outOffset - m_outReadOffset); m_outOffset -= m_outReadOffset; } m_outReadOffset = 0; m_bFinished = FALSE; int bytes_processed = 0; int const nch = lame_get_num_channels(pgf); while (1) { int nsamples = (data_size - bytes_processed) / (sizeof(short) * nch); if (nsamples <= 0) break; if (nsamples > 1152) nsamples = 1152; if (m_outOffset >= OUT_BUFFER_MAX) break; int out_bytes = 0; if (nch == 2) out_bytes = lame_encode_buffer_interleaved( pgf, (short *)(pdata + (bytes_processed / sizeof(short))), nsamples, m_outFrameBuf + m_outOffset, OUT_BUFFER_SIZE - m_outOffset); else out_bytes = lame_encode_buffer( pgf, pdata + (bytes_processed / sizeof(short)), pdata + (bytes_processed / sizeof(short)), nsamples, m_outFrameBuf + m_outOffset, OUT_BUFFER_SIZE - m_outOffset); if (out_bytes < 0) return -1; m_outOffset += out_bytes; bytes_processed += nsamples * nch * sizeof(short); } return bytes_processed; } // // Finsh - flush the buffered samples // HRESULT CEncoder::Finish() { CAutoLock l(&m_lock); if (!pgf || !m_outFrameBuf || (m_outOffset >= OUT_BUFFER_MAX)) return E_FAIL; m_outOffset += lame_encode_flush(pgf, m_outFrameBuf + m_outOffset, OUT_BUFFER_SIZE - m_outOffset); m_bFinished = TRUE; return S_OK; } int getFrameLength(const unsigned char * pdata) { if (!pdata || pdata[0] != 0xff || (pdata[1] & 0xe0) != 0xe0) return -1; const int sample_rate_tab[4][4] = { {11025,12000,8000,1}, {1,1,1,1}, {22050,24000,16000,1}, {44100,48000,32000,1} }; #define MPEG_VERSION_RESERVED 1 #define MPEG_VERSION_1 3 #define LAYER_III 1 #define BITRATE_FREE 0 #define BITRATE_RESERVED 15 #define SRATE_RESERVED 3 #define EMPHASIS_RESERVED 2 int version_id = (pdata[1] & 0x18) >> 3; int layer = (pdata[1] & 0x06) >> 1; int bitrate_id = (pdata[2] & 0xF0) >> 4; int sample_rate_id = (pdata[2] & 0x0C) >> 2; int padding = (pdata[2] & 0x02) >> 1; int emphasis = pdata[3] & 0x03; if (version_id != MPEG_VERSION_RESERVED && layer == LAYER_III && bitrate_id != BITRATE_FREE && bitrate_id != BITRATE_RESERVED && sample_rate_id != SRATE_RESERVED && emphasis != EMPHASIS_RESERVED) { int spf = (version_id == MPEG_VERSION_1) ? 1152 : 576; int sample_rate = sample_rate_tab[version_id][sample_rate_id]; int bitrate = dwBitRateValue[version_id != MPEG_VERSION_1][bitrate_id - 1] * 1000; return (bitrate * spf) / (8 * sample_rate) + padding; } return -1; } int CEncoder::GetFrame(const unsigned char ** pframe) { if (!pgf || !m_outFrameBuf || !pframe) return -1; while ((m_outOffset - m_outReadOffset) > 4) { int frame_length = getFrameLength(m_outFrameBuf + m_outReadOffset); if (frame_length < 0) { m_outReadOffset++; } else if (frame_length <= (m_outOffset - m_outReadOffset)) { *pframe = m_outFrameBuf + m_outReadOffset; m_outReadOffset += frame_length; m_frameCount++; // don't deliver the first and the last frames if (m_frameCount != 1 && !(m_bFinished && (m_outOffset - m_outReadOffset) < 5)) return frame_length; } else break; } return 0; } //////////////////////////////////////////////////////////////////////////////// // Returns block of a mp3 file, witch size integer multiples of cbAlign // or not aligned if finished //////////////////////////////////////////////////////////////////////////////// int CEncoder::GetBlockAligned(const unsigned char ** pblock, int* piBufferSize, const long& cbAlign) { ASSERT(piBufferSize); if (!pgf || !m_outFrameBuf || !pblock) return -1; int iBlockLen = m_outOffset - m_outReadOffset; ASSERT(iBlockLen >= 0); if(!m_bFinished) { if(cbAlign > 0) iBlockLen-=iBlockLen%cbAlign; *piBufferSize = iBlockLen; } else { if(cbAlign && iBlockLen%cbAlign) { *piBufferSize = iBlockLen + cbAlign - iBlockLen%cbAlign; } else { *piBufferSize = iBlockLen; } } if(iBlockLen) { *pblock = m_outFrameBuf + m_outReadOffset; m_outReadOffset+=iBlockLen; } return iBlockLen; } HRESULT CEncoder::maybeSyncWord(IStream *pStream) { HRESULT hr = S_OK; unsigned char mp3_frame_header[4]; ULONG nbytes; if(FAILED(hr = pStream->Read(mp3_frame_header, sizeof(mp3_frame_header), &nbytes))) return hr; if ( nbytes != sizeof(mp3_frame_header) ) { return E_FAIL; } if ( mp3_frame_header[0] != 0xffu ) { return S_FALSE; /* doesn't look like a sync word */ } if ( (mp3_frame_header[1] & 0xE0u) != 0xE0u ) { return S_FALSE; /* doesn't look like a sync word */ } return S_OK; } HRESULT CEncoder::skipId3v2(IStream *pStream, size_t lametag_frame_size) { HRESULT hr = S_OK; ULONG nbytes; size_t id3v2TagSize = 0; unsigned char id3v2Header[10]; LARGE_INTEGER seekTo; /* seek to the beginning of the stream */ seekTo.QuadPart = 0; if (FAILED(hr = pStream->Seek(seekTo, STREAM_SEEK_SET, NULL))) { return hr; /* not seekable, abort */ } /* read 10 bytes in case there's an ID3 version 2 header here */ hr = pStream->Read(id3v2Header, sizeof(id3v2Header), &nbytes); if (FAILED(hr)) return hr; if(nbytes != sizeof(id3v2Header)) { return E_FAIL; /* not readable, maybe opened Write-Only */ } /* does the stream begin with the ID3 version 2 file identifier? */ if (!strncmp((char *) id3v2Header, "ID3", 3)) { /* the tag size (minus the 10-byte header) is encoded into four * bytes where the most significant bit is clear in each byte */ id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) | ((id3v2Header[7] & 0x7f) << 14) | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) + sizeof id3v2Header; } /* Seek to the beginning of the audio stream */ seekTo.QuadPart = id3v2TagSize; if (FAILED(hr = pStream->Seek(seekTo, STREAM_SEEK_SET, NULL))) { return hr; } if (S_OK != (hr = maybeSyncWord(pStream))) { return SUCCEEDED(hr)?E_FAIL:hr; } seekTo.QuadPart = id3v2TagSize+lametag_frame_size; if (FAILED(hr = pStream->Seek(seekTo, STREAM_SEEK_SET, NULL))) { return hr; } if (S_OK != (hr = maybeSyncWord(pStream))) { return SUCCEEDED(hr)?E_FAIL:hr; } /* OK, it seems we found our LAME-Tag/Xing frame again */ /* Seek to the beginning of the audio stream */ seekTo.QuadPart = id3v2TagSize; if (FAILED(hr = pStream->Seek(seekTo, STREAM_SEEK_SET, NULL))) { return hr; } return S_OK; } // Updates VBR tag HRESULT CEncoder::updateLameTagFrame(IStream* pStream) { HRESULT hr = S_OK; size_t n = lame_get_lametag_frame( pgf, 0, 0 ); /* ask for bufer size */ if ( n > 0 ) { unsigned char* buffer = 0; ULONG m = n; if ( FAILED(hr = skipId3v2(pStream, n) )) { /*DispErr( "Error updating LAME-tag frame:\n\n" "can't locate old frame\n" );*/ return hr; } buffer = (unsigned char*)malloc( n ); if ( buffer == 0 ) { /*DispErr( "Error updating LAME-tag frame:\n\n" "can't allocate frame buffer\n" );*/ return E_OUTOFMEMORY; } /* Put it all to disk again */ n = lame_get_lametag_frame( pgf, buffer, n ); if ( n > 0 ) { hr = pStream->Write(buffer, n, &m); } free( buffer ); if ( m != n ) { /*DispErr( "Error updating LAME-tag frame:\n\n" "couldn't write frame into file\n" );*/ return E_FAIL; } } return hr; } lame-3.100/dshow/elogo.ico000644 001751 001751 00000001376 07243501620 017016 0ustar00netchildnetchild000000 000000  è( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ` ` ` ` ` ` ` ` ` ÿÿÿÿÿÿÿÿ` ` ` ` ` ` ` ` ` ÿÿÿÿÿÿÿÿ` ` ý` ý` ý` ý` ý` ý` ý` lame-3.100/dshow/Mpegac.cpp000644 001751 001751 00000176001 11201647721 017115 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * DirectShow filter implementation * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include //#include #include "uids.h" #include "iaudioprops.h" #include "mpegac.h" #include "resource.h" #include "PropPage.h" #include "PropPage_adv.h" #include "aboutprp.h" #include "Encoder.h" #include "Reg.h" #ifndef _INC_MMREG #include #endif // default parameters #define DEFAULT_LAYER 3 #define DEFAULT_STEREO_MODE JOINT_STEREO #define DEFAULT_FORCE_MS 0 #define DEFAULT_MODE_FIXED 0 #define DEFAULT_ENFORCE_MIN 0 #define DEFAULT_VOICE 0 #define DEFAULT_KEEP_ALL_FREQ 0 #define DEFAULT_STRICT_ISO 0 #define DEFAULT_DISABLE_SHORT_BLOCK 0 #define DEFAULT_XING_TAG 0 #define DEFAULT_SAMPLE_RATE 44100 #define DEFAULT_BITRATE 128 #define DEFAULT_VARIABLE 0 #define DEFAULT_CRC 0 #define DEFAULT_FORCE_MONO 0 #define DEFAULT_SET_DURATION 1 #define DEFAULT_SAMPLE_OVERLAP 1 #define DEFAULT_COPYRIGHT 0 #define DEFAULT_ORIGINAL 0 #define DEFAULT_VARIABLEMIN 80 #define DEFAULT_VARIABLEMAX 160 #define DEFAULT_ENCODING_QUALITY 5 #define DEFAULT_VBR_QUALITY 4 #define DEFAULT_PES 0 #define DEFAULT_FILTER_MERIT MERIT_DO_NOT_USE // Standard compressor merit value #define GET_DATARATE(kbps) (kbps * 1000 / 8) #define GET_FRAMELENGTH(bitrate, sample_rate) ((WORD)(((sample_rate < 32000 ? 72000 : 144000) * (bitrate))/(sample_rate))) #define DECLARE_PTR(type, ptr, expr) type* ptr = (type*)(expr); // Create a list of all (or mostly all) of the encoder CBR output capabilities which // will be parsed into a list of capabilities used by the IAMStreamConfig Interface output_caps_t OutputCapabilities[] = { // {SampleRate, BitRate} { 48000, 320 },{ 48000, 256 },{ 48000, 224 },{ 48000, 192 }, // MPEG 1.0 Spec @ 48KHz { 48000, 160 },{ 48000, 128 },{ 48000, 112 },{ 48000, 96 }, { 48000, 80 },{ 48000, 64 },{ 48000, 56 },{ 48000, 48 }, { 48000, 40 },{ 48000, 32 }, { 24000, 160 },{ 24000, 144 },{ 24000, 128 },{ 24000, 112 }, // MPEG 2.0 Spec @ 24KHz { 24000, 96 },{ 24000, 80 },{ 24000, 64 },{ 24000, 56 }, { 24000, 48 },{ 24000, 40 },{ 24000, 32 },{ 24000, 24 }, { 24000, 16 },{ 24000, 8 }, { 12000, 64 },{ 12000, 56 },{ 12000, 48 },{ 12000, 40 }, // MPEG 2.5 Spec @ 12KHz { 12000, 32 },{ 12000, 24 },{ 12000, 16 },{ 12000, 8 }, // --------------------------- -------------------------- { 44100, 320 },{ 44100, 256 },{ 44100, 224 },{ 44100, 192 }, // MPEG 1.0 Spec @ 44.1KHz { 44100, 160 },{ 44100, 128 },{ 44100, 112 },{ 44100, 96 }, { 44100, 80 },{ 44100, 64 },{ 44100, 56 },{ 44100, 48 }, { 44100, 40 },{ 44100, 32 }, { 22050, 160 },{ 22050, 144 },{ 22050, 128 },{ 22050, 112 }, // MPEG 2.0 Spec @ 22.05KHz { 22050, 96 },{ 22050, 80 },{ 22050, 64 },{ 22050, 56 }, { 22050, 48 },{ 22050, 40 },{ 22050, 32 },{ 22050, 24 }, { 22050, 16 },{ 22050, 8 }, { 11025, 64 },{ 11025, 56 },{ 11025, 48 },{ 11025, 40 }, // MPEG 2.5 Spec @ 11.025KHz { 11025, 32 },{ 11025, 24 },{ 11025, 16 },{ 11025, 8 }, // --------------------------- -------------------------- { 32000, 320 },{ 32000, 256 },{ 32000, 224 },{ 32000, 192 }, // MPEG 1.0 Spec @ 32KHz { 32000, 160 },{ 32000, 128 },{ 32000, 112 },{ 32000, 96 }, { 32000, 80 },{ 32000, 64 },{ 32000, 56 },{ 32000, 48 }, { 32000, 40 },{ 32000, 32 }, { 16000, 160 },{ 16000, 144 },{ 16000, 128 },{ 16000, 112 }, // MPEG 2.0 Spec @ 16KHz { 16000, 96 },{ 16000, 80 },{ 16000, 64 },{ 16000, 56 }, { 16000, 48 },{ 16000, 40 },{ 16000, 32 },{ 16000, 24 }, { 16000, 16 },{ 16000, 8 }, { 8000, 64 },{ 8000, 56 },{ 8000, 48 },{ 8000, 40 }, // MPEG 2.5 Spec @ 8KHz { 8000, 32 },{ 8000, 24 },{ 8000, 16 },{ 8000, 8 } }; /* Registration setup stuff */ // Setup data AMOVIESETUP_MEDIATYPE sudMpgInputType[] = { { &MEDIATYPE_Audio, &MEDIASUBTYPE_PCM } }; AMOVIESETUP_MEDIATYPE sudMpgOutputType[] = { { &MEDIATYPE_Audio, &MEDIASUBTYPE_MPEG1AudioPayload }, { &MEDIATYPE_Audio, &MEDIASUBTYPE_MPEG2_AUDIO }, { &MEDIATYPE_Audio, &MEDIASUBTYPE_MP3 }, { &MEDIATYPE_Stream, &MEDIASUBTYPE_MPEG1Audio } }; AMOVIESETUP_PIN sudMpgPins[] = { { L"PCM Input", FALSE, // bRendered FALSE, // bOutput FALSE, // bZero FALSE, // bMany &CLSID_NULL, // clsConnectsToFilter NULL, // ConnectsToPin NUMELMS(sudMpgInputType), // Number of media types sudMpgInputType }, { L"MPEG Output", FALSE, // bRendered TRUE, // bOutput FALSE, // bZero FALSE, // bMany &CLSID_NULL, // clsConnectsToFilter NULL, // ConnectsToPin NUMELMS(sudMpgOutputType), // Number of media types sudMpgOutputType } }; AMOVIESETUP_FILTER sudMpgAEnc = { &CLSID_LAMEDShowFilter, L"LAME Audio Encoder", DEFAULT_FILTER_MERIT, // Standard compressor merit value NUMELMS(sudMpgPins), // 2 pins sudMpgPins }; /*****************************************************************************/ // COM Global table of objects in this dll static WCHAR g_wszName[] = L"LAME Audio Encoder"; CFactoryTemplate g_Templates[] = { { g_wszName, &CLSID_LAMEDShowFilter, CMpegAudEnc::CreateInstance, NULL, &sudMpgAEnc }, { L"LAME Audio Encoder Property Page", &CLSID_LAMEDShow_PropertyPage, CMpegAudEncPropertyPage::CreateInstance}, { L"LAME Audio Encoder Property Page", &CLSID_LAMEDShow_PropertyPageAdv, CMpegAudEncPropertyPageAdv::CreateInstance}, { L"LAME Audio Encoder About", &CLSID_LAMEDShow_About, CMAEAbout::CreateInstance} }; // Count of objects listed in g_cTemplates int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); //////////////////////////////////////////// // Declare the DirectShow filter information. // Used by IFilterMapper2() in the call to DllRegisterServer() // to register the filter in the CLSID_AudioCompressorCategory. REGFILTER2 rf2FilterReg = { 1, // Version number. DEFAULT_FILTER_MERIT, // Merit. This should match the merit specified in the AMOVIESETUP_FILTER definition NUMELMS(sudMpgPins), // Number of pins. sudMpgPins // Pointer to pin information. }; STDAPI DllRegisterServer(void) { HRESULT hr = AMovieDllRegisterServer2(TRUE); if (FAILED(hr)) { return hr; } IFilterMapper2 *pFM2 = NULL; hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, IID_IFilterMapper2, (void **)&pFM2); if (SUCCEEDED(hr)) { hr = pFM2->RegisterFilter( CLSID_LAMEDShowFilter, // Filter CLSID. g_wszName, // Filter name. NULL, // Device moniker. &CLSID_AudioCompressorCategory, // Audio compressor category. g_wszName, // Instance data. &rf2FilterReg // Filter information. ); pFM2->Release(); } return hr; } STDAPI DllUnregisterServer() { HRESULT hr = AMovieDllRegisterServer2(FALSE); if (FAILED(hr)) { return hr; } IFilterMapper2 *pFM2 = NULL; hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER, IID_IFilterMapper2, (void **)&pFM2); if (SUCCEEDED(hr)) { hr = pFM2->UnregisterFilter(&CLSID_AudioCompressorCategory, g_wszName, CLSID_LAMEDShowFilter); pFM2->Release(); } return hr; } CUnknown *CMpegAudEnc::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr) { CMpegAudEnc *punk = new CMpegAudEnc(lpunk, phr); if (punk == NULL) *phr = E_OUTOFMEMORY; return punk; } CMpegAudEnc::CMpegAudEnc(LPUNKNOWN lpunk, HRESULT *phr) : CTransformFilter(NAME("LAME Audio Encoder"), lpunk, CLSID_LAMEDShowFilter), CPersistStream(lpunk, phr) { // ENCODER OUTPUT PIN // Override the output pin with our own which will implement the IAMStreamConfig Interface CTransformOutputPin *pOut = new CMpegAudEncOutPin( this, phr ); if (pOut == NULL) { *phr = E_OUTOFMEMORY; return; } else if (FAILED(*phr)) { // A failed return code should delete the object delete pOut; return; } m_pOutput = pOut; // ENCODER INPUT PIN // Since we've created our own output pin we must also create // the input pin ourselves because the CTransformFilter base class // will create an extra output pin if the input pin wasn't created. CTransformInputPin *pIn = new CTransformInputPin(NAME("LameEncoderInputPin"), this, // Owner filter phr, // Result code L"Input"); // Pin name if (pIn == NULL) { *phr = E_OUTOFMEMORY; return; } else if (FAILED(*phr)) { // A failed return code should delete the object delete pIn; return; } m_pInput = pIn; MPEG_ENCODER_CONFIG mec; ReadPresetSettings(&mec); m_Encoder.SetOutputType(mec); m_CapsNum = 0; m_hasFinished = TRUE; m_bStreamOutput = FALSE; m_currentMediaTypeIndex = 0; } CMpegAudEnc::~CMpegAudEnc(void) { } LPAMOVIESETUP_FILTER CMpegAudEnc::GetSetupData() { return &sudMpgAEnc; } HRESULT CMpegAudEnc::Receive(IMediaSample * pSample) { CAutoLock lock(&m_cs); if (!pSample) return S_OK; BYTE * pSourceBuffer = NULL; if (pSample->GetPointer(&pSourceBuffer) != S_OK || !pSourceBuffer) return S_OK; long sample_size = pSample->GetActualDataLength(); REFERENCE_TIME rtStart, rtStop; BOOL gotValidTime = (pSample->GetTime(&rtStart, &rtStop) != VFW_E_SAMPLE_TIME_NOT_SET); if (sample_size <= 0 || pSourceBuffer == NULL || m_hasFinished || (gotValidTime && rtStart < 0)) return S_OK; if (gotValidTime) { if (m_rtStreamTime < 0) { m_rtStreamTime = rtStart; m_rtEstimated = rtStart; } else { resync_point_t * sync = m_sync + m_sync_in_idx; if (sync->applied) { REFERENCE_TIME rtGap = rtStart - m_rtEstimated; // if old sync data is applied and gap is greater than 1 ms // then make a new synchronization point if (rtGap > 10000 || (m_allowOverlap && rtGap < -10000)) { sync->sample = m_samplesIn; sync->delta = rtGap; sync->applied = FALSE; m_rtEstimated += sync->delta; if (m_sync_in_idx < (RESYNC_COUNT - 1)) m_sync_in_idx++; else m_sync_in_idx = 0; } } } } m_rtEstimated += (LONGLONG)(m_bytesToDuration * sample_size); m_samplesIn += sample_size / m_bytesPerSample; while (sample_size > 0) { int bytes_processed = m_Encoder.Encode((short *)pSourceBuffer, sample_size); if (bytes_processed <= 0) return S_OK; FlushEncodedSamples(); sample_size -= bytes_processed; pSourceBuffer += bytes_processed; } return S_OK; } HRESULT CMpegAudEnc::FlushEncodedSamples() { IMediaSample * pOutSample = NULL; BYTE * pDst = NULL; if(m_bStreamOutput) { HRESULT hr = S_OK; const unsigned char * pblock = NULL; int iBufferSize; int iBlockLength = m_Encoder.GetBlockAligned(&pblock, &iBufferSize, m_cbStreamAlignment); if(!iBlockLength) return S_OK; hr = m_pOutput->GetDeliveryBuffer(&pOutSample, NULL, NULL, 0); if (hr == S_OK && pOutSample) { hr = pOutSample->GetPointer(&pDst); if (hr == S_OK && pDst) { CopyMemory(pDst, pblock, iBlockLength); REFERENCE_TIME rtEndPos = m_rtBytePos + iBufferSize; EXECUTE_ASSERT(S_OK == pOutSample->SetTime(&m_rtBytePos, &rtEndPos)); pOutSample->SetActualDataLength(iBufferSize); m_rtBytePos += iBlockLength; m_pOutput->Deliver(pOutSample); } pOutSample->Release(); } return S_OK; } if (m_rtStreamTime < 0) m_rtStreamTime = 0; while (1) { const unsigned char * pframe = NULL; int frame_size = m_Encoder.GetFrame(&pframe); if (frame_size <= 0 || !pframe) break; if (!m_sync[m_sync_out_idx].applied && m_sync[m_sync_out_idx].sample <= m_samplesOut) { m_rtStreamTime += m_sync[m_sync_out_idx].delta; m_sync[m_sync_out_idx].applied = TRUE; if (m_sync_out_idx < (RESYNC_COUNT - 1)) m_sync_out_idx++; else m_sync_out_idx = 0; } REFERENCE_TIME rtStart = m_rtStreamTime; REFERENCE_TIME rtStop = rtStart + m_rtFrameTime; HRESULT hr = S_OK; hr = m_pOutput->GetDeliveryBuffer(&pOutSample, NULL, NULL, 0); if (hr == S_OK && pOutSample) { hr = pOutSample->GetPointer(&pDst); if (hr == S_OK && pDst) { CopyMemory(pDst, pframe, frame_size); pOutSample->SetActualDataLength(frame_size); pOutSample->SetSyncPoint(TRUE); pOutSample->SetTime(&rtStart, m_setDuration ? &rtStop : NULL); m_pOutput->Deliver(pOutSample); } pOutSample->Release(); } m_samplesOut += m_samplesPerFrame; m_rtStreamTime = rtStop; } return S_OK; } //////////////////////////////////////////////////////////////////////////// // StartStreaming - prepare to receive new data //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::StartStreaming() { WAVEFORMATEX * pwfxIn = (WAVEFORMATEX *) m_pInput->CurrentMediaType().Format(); m_bytesPerSample = pwfxIn->nChannels * sizeof(short); DWORD dwOutSampleRate; if(MEDIATYPE_Stream == m_pOutput->CurrentMediaType().majortype) { MPEG_ENCODER_CONFIG mcfg; if(FAILED(m_Encoder.GetOutputType(&mcfg))) return E_FAIL; dwOutSampleRate = mcfg.dwSampleRate; } else { dwOutSampleRate = ((WAVEFORMATEX *) m_pOutput->CurrentMediaType().Format())->nSamplesPerSec; } m_samplesPerFrame = (dwOutSampleRate >= 32000) ? 1152 : 576; m_rtFrameTime = MulDiv(10000000, m_samplesPerFrame, dwOutSampleRate); m_samplesIn = m_samplesOut = 0; m_rtStreamTime = -1; m_rtBytePos = 0; // initialize encoder m_Encoder.Init(); m_hasFinished = FALSE; for (int i = 0; i < RESYNC_COUNT; i++) { m_sync[i].sample = 0; m_sync[i].delta = 0; m_sync[i].applied = TRUE; } m_sync_in_idx = 0; m_sync_out_idx = 0; get_SetDuration(&m_setDuration); get_SampleOverlap(&m_allowOverlap); return S_OK; } HRESULT CMpegAudEnc::StopStreaming() { IStream *pStream = NULL; if(m_bStreamOutput && m_pOutput->IsConnected() != FALSE) { IPin * pDwnstrmInputPin = m_pOutput->GetConnected(); if(pDwnstrmInputPin && FAILED(pDwnstrmInputPin->QueryInterface(IID_IStream, (LPVOID*)(&pStream)))) { pStream = NULL; } } m_Encoder.Close(pStream); if(pStream) pStream->Release(); return S_OK; } //////////////////////////////////////////////////////////////////////////// // EndOfStream - stop data processing //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::EndOfStream() { CAutoLock lock(&m_cs); // Flush data m_Encoder.Finish(); FlushEncodedSamples(); IStream *pStream = NULL; if(m_bStreamOutput && m_pOutput->IsConnected() != FALSE) { IPin * pDwnstrmInputPin = m_pOutput->GetConnected(); if(pDwnstrmInputPin) { if(FAILED(pDwnstrmInputPin->QueryInterface(IID_IStream, (LPVOID*)(&pStream)))) { pStream = NULL; } } } if(pStream) { ULARGE_INTEGER size; size.QuadPart = m_rtBytePos; pStream->SetSize(size); } m_Encoder.Close(pStream); if(pStream) pStream->Release(); m_hasFinished = TRUE; return CTransformFilter::EndOfStream(); } //////////////////////////////////////////////////////////////////////////// // BeginFlush - stop data processing //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::BeginFlush() { HRESULT hr = CTransformFilter::BeginFlush(); if (SUCCEEDED(hr)) { CAutoLock lock(&m_cs); DWORD dwDstSize = 0; // Flush data m_Encoder.Finish(); FlushEncodedSamples(); IStream *pStream = NULL; if(m_bStreamOutput && m_pOutput->IsConnected() != FALSE) { IPin * pDwnstrmInputPin = m_pOutput->GetConnected(); if(pDwnstrmInputPin && SUCCEEDED(pDwnstrmInputPin->QueryInterface(IID_IStream, (LPVOID*)(&pStream)))) { ULARGE_INTEGER size; size.QuadPart = m_rtBytePos; pStream->SetSize(size); pStream->Release(); } } m_rtStreamTime = -1; m_rtBytePos = 0; } return hr; } //////////////////////////////////////////////////////////////////////////// // SetMediaType - called when filters are connecting //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::SetMediaType(PIN_DIRECTION direction, const CMediaType * pmt) { HRESULT hr = S_OK; if (direction == PINDIR_INPUT) { if (*pmt->FormatType() != FORMAT_WaveFormatEx) return VFW_E_INVALIDMEDIATYPE; if (pmt->FormatLength() < sizeof(WAVEFORMATEX)) return VFW_E_INVALIDMEDIATYPE; DbgLog((LOG_TRACE,1,TEXT("CMpegAudEnc::SetMediaType(), direction = PINDIR_INPUT"))); // Pass input media type to encoder m_Encoder.SetInputType((LPWAVEFORMATEX)pmt->Format()); WAVEFORMATEX * pwfx = (WAVEFORMATEX *)pmt->Format(); if (pwfx) m_bytesToDuration = (float)1.e7 / (float)(pwfx->nChannels * sizeof(short) * pwfx->nSamplesPerSec); else m_bytesToDuration = 0.0; // Parse the encoder output capabilities into the subset of capabilities that are supported // for the current input format. This listing will be utilized by the IAMStreamConfig Interface. LoadOutputCapabilities(pwfx->nSamplesPerSec); Reconnect(); } else if (direction == PINDIR_OUTPUT) { // Before we set the output type, we might need to reconnect // the input pin with a new type. if (m_pInput && m_pInput->IsConnected()) { // Check if the current input type is compatible. hr = CheckTransform(&m_pInput->CurrentMediaType(), &m_pOutput->CurrentMediaType()); if (FAILED(hr)) { // We need to reconnect the input pin. // Note: The CheckMediaType method has already called QueryAccept on the upstream filter. hr = m_pGraph->Reconnect(m_pInput); return hr; } } // WAVEFORMATEX wfIn; // m_Encoder.GetInputType(&wfIn); // if (wfIn.nSamplesPerSec % // ((LPWAVEFORMATEX)pmt->Format())->nSamplesPerSec != 0) // return VFW_E_TYPE_NOT_ACCEPTED; } return hr; } //////////////////////////////////////////////////////////////////////////// // CheckInputType - check if you can support mtIn //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::CheckInputType(const CMediaType* mtIn) { if (*mtIn->Type() == MEDIATYPE_Audio && *mtIn->FormatType() == FORMAT_WaveFormatEx) if (mtIn->FormatLength() >= sizeof(WAVEFORMATEX)) if (mtIn->IsTemporalCompressed() == FALSE) return m_Encoder.SetInputType((LPWAVEFORMATEX)mtIn->Format(), true); return E_INVALIDARG; } //////////////////////////////////////////////////////////////////////////// // CheckTransform - checks if we can support the transform from this input to this output //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::CheckTransform(const CMediaType* mtIn, const CMediaType* mtOut) { if(MEDIATYPE_Stream != mtOut->majortype) { if (*mtOut->FormatType() != FORMAT_WaveFormatEx) return VFW_E_INVALIDMEDIATYPE; if (mtOut->FormatLength() < sizeof(WAVEFORMATEX)) return VFW_E_INVALIDMEDIATYPE; MPEG_ENCODER_CONFIG mec; if(FAILED(m_Encoder.GetOutputType(&mec))) return S_OK; if (((LPWAVEFORMATEX)mtIn->Format())->nSamplesPerSec % mec.dwSampleRate != 0) return S_OK; if (mec.dwSampleRate != ((LPWAVEFORMATEX)mtOut->Format())->nSamplesPerSec) return VFW_E_TYPE_NOT_ACCEPTED; return S_OK; } else if(mtOut->subtype == MEDIASUBTYPE_MPEG1Audio) return S_OK; return VFW_E_TYPE_NOT_ACCEPTED; } //////////////////////////////////////////////////////////////////////////// // DecideBufferSize - sets output buffers number and size //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::DecideBufferSize( IMemAllocator* pAllocator, ALLOCATOR_PROPERTIES* pProperties) { HRESULT hr = S_OK; if(m_bStreamOutput) m_cbStreamAlignment = pProperties->cbAlign; /// if (pProperties->cBuffers == 0) pProperties->cBuffers = 1; // If downstream filter didn't suggest a buffer count then default to 1 pProperties->cbBuffer = OUT_BUFFER_SIZE; // ASSERT(pProperties->cbBuffer); ALLOCATOR_PROPERTIES Actual; hr = pAllocator->SetProperties(pProperties,&Actual); if(FAILED(hr)) return hr; if (Actual.cbBuffer < pProperties->cbBuffer || Actual.cBuffers < pProperties->cBuffers) {// can't use this allocator return E_INVALIDARG; } return S_OK; } //////////////////////////////////////////////////////////////////////////// // GetMediaType - overrideable for suggesting output pin media types //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::GetMediaType(int iPosition, CMediaType *pMediaType) { DbgLog((LOG_TRACE,1,TEXT("CMpegAudEnc::GetMediaType()"))); return m_pOutput->GetMediaType(iPosition, pMediaType); } //////////////////////////////////////////////////////////////////////////// // Reconnect - called after a manual change has been made to the // encoder parameters to reset the filter output media type structure // to match the current encoder out MPEG audio properties //////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::Reconnect() { HRESULT hr = S_FALSE; if (m_pOutput && m_pOutput->IsConnected() && m_State == State_Stopped) { MPEG_ENCODER_CONFIG mec; hr = m_Encoder.GetOutputType(&mec); if ((hr = m_Encoder.SetOutputType(mec)) == S_OK) { // Create an updated output MediaType using the current encoder settings CMediaType cmt; cmt.InitMediaType(); m_pOutput->GetMediaType(m_currentMediaTypeIndex, &cmt); // If the updated MediaType matches the current output MediaType no reconnect is needed if (m_pOutput->CurrentMediaType() == cmt) return S_OK; // Attempt to reconnect the output pin using the updated MediaType if (S_OK == (hr = m_pOutput->GetConnected()->QueryAccept(&cmt))) { hr = m_pOutput->SetMediaType(&cmt); if ( FAILED(hr) ) { return(hr); } hr = m_pGraph->Reconnect(m_pOutput); } else hr = m_pOutput->SetMediaType(&cmt); } } return hr; } //////////////////////////////////////////////////////////////////////////// // LoadOutputCapabilities - create a list of the currently supported output // format capabilities which will be used by the IAMStreamConfig Interface //////////////////////////////////////////////////////////////////////////// void CMpegAudEnc::LoadOutputCapabilities(DWORD sample_rate) { m_CapsNum = 0; // Clear out any existing output capabilities ZeroMemory(OutputCaps, sizeof(OutputCaps)); // Create the set of Constant Bit Rate output capabilities that are // supported for the current input pin sampling rate. for (int i = 0; i < NUMELMS(OutputCapabilities); i++) { if (0 == sample_rate % OutputCapabilities[i].nSampleRate) { // Add this output capability to the OutputCaps list OutputCaps[m_CapsNum] = OutputCapabilities[i]; m_CapsNum++; // Don't overrun the hard-coded capabilities array limit if (m_CapsNum > (int)MAX_IAMSTREAMCONFIG_CAPS) break; } } } // // Read persistent configuration from Registry // void CMpegAudEnc::ReadPresetSettings(MPEG_ENCODER_CONFIG * pmec) { DbgLog((LOG_TRACE,1,TEXT("CMpegAudEnc::ReadPresetSettings()"))); Lame::CRegKey rk(HKEY_CURRENT_USER, KEY_LAME_ENCODER); pmec->dwBitrate = rk.getDWORD(VALUE_BITRATE,DEFAULT_BITRATE); pmec->dwVariableMin = rk.getDWORD(VALUE_VARIABLEMIN,DEFAULT_VARIABLEMIN); pmec->dwVariableMax = rk.getDWORD(VALUE_VARIABLEMAX,DEFAULT_VARIABLEMAX); pmec->vmVariable = rk.getDWORD(VALUE_VARIABLE, DEFAULT_VARIABLE) ? vbr_rh : vbr_off; pmec->dwQuality = rk.getDWORD(VALUE_QUALITY,DEFAULT_ENCODING_QUALITY); pmec->dwVBRq = rk.getDWORD(VALUE_VBR_QUALITY,DEFAULT_VBR_QUALITY); pmec->lLayer = rk.getDWORD(VALUE_LAYER, DEFAULT_LAYER); pmec->bCRCProtect = rk.getDWORD(VALUE_CRC, DEFAULT_CRC); pmec->bForceMono = rk.getDWORD(VALUE_FORCE_MONO, DEFAULT_FORCE_MONO); pmec->bSetDuration = rk.getDWORD(VALUE_SET_DURATION, DEFAULT_SET_DURATION); pmec->bSampleOverlap = rk.getDWORD(VALUE_SAMPLE_OVERLAP, DEFAULT_SAMPLE_OVERLAP); pmec->bCopyright = rk.getDWORD(VALUE_COPYRIGHT, DEFAULT_COPYRIGHT); pmec->bOriginal = rk.getDWORD(VALUE_ORIGINAL, DEFAULT_ORIGINAL); pmec->dwSampleRate = rk.getDWORD(VALUE_SAMPLE_RATE, DEFAULT_SAMPLE_RATE); pmec->dwPES = rk.getDWORD(VALUE_PES, DEFAULT_PES); pmec->ChMode = (MPEG_mode)rk.getDWORD(VALUE_STEREO_MODE, DEFAULT_STEREO_MODE); pmec->dwForceMS = rk.getDWORD(VALUE_FORCE_MS, DEFAULT_FORCE_MS); pmec->dwEnforceVBRmin = rk.getDWORD(VALUE_ENFORCE_MIN, DEFAULT_ENFORCE_MIN); pmec->dwVoiceMode = rk.getDWORD(VALUE_VOICE, DEFAULT_VOICE); pmec->dwKeepAllFreq = rk.getDWORD(VALUE_KEEP_ALL_FREQ, DEFAULT_KEEP_ALL_FREQ); pmec->dwStrictISO = rk.getDWORD(VALUE_STRICT_ISO, DEFAULT_STRICT_ISO); pmec->dwNoShortBlock = rk.getDWORD(VALUE_DISABLE_SHORT_BLOCK, DEFAULT_DISABLE_SHORT_BLOCK); pmec->dwXingTag = rk.getDWORD(VALUE_XING_TAG, DEFAULT_XING_TAG); pmec->dwModeFixed = rk.getDWORD(VALUE_MODE_FIXED, DEFAULT_MODE_FIXED); rk.Close(); } //////////////////////////////////////////////////////////////// // Property page handling //////////////////////////////////////////////////////////////// HRESULT CMpegAudEnc::GetPages(CAUUID *pcauuid) { GUID *pguid; pcauuid->cElems = 3; pcauuid->pElems = pguid = (GUID *) CoTaskMemAlloc(sizeof(GUID) * pcauuid->cElems); if (pcauuid->pElems == NULL) return E_OUTOFMEMORY; pguid[0] = CLSID_LAMEDShow_PropertyPage; pguid[1] = CLSID_LAMEDShow_PropertyPageAdv; pguid[2] = CLSID_LAMEDShow_About; return S_OK; } STDMETHODIMP CMpegAudEnc::NonDelegatingQueryInterface(REFIID riid, void ** ppv) { if (riid == IID_ISpecifyPropertyPages) return GetInterface((ISpecifyPropertyPages *) this, ppv); else if(riid == IID_IPersistStream) return GetInterface((IPersistStream *)this, ppv); // else if (riid == IID_IVAudioEncSettings) // return GetInterface((IVAudioEncSettings*) this, ppv); else if (riid == IID_IAudioEncoderProperties) return GetInterface((IAudioEncoderProperties*) this, ppv); return CTransformFilter::NonDelegatingQueryInterface(riid, ppv); } //////////////////////////////////////////////////////////////// //IVAudioEncSettings interface methods //////////////////////////////////////////////////////////////// // // IAudioEncoderProperties // STDMETHODIMP CMpegAudEnc::get_PESOutputEnabled(DWORD *dwEnabled) { *dwEnabled = (DWORD)m_Encoder.IsPES(); DbgLog((LOG_TRACE, 1, TEXT("get_PESOutputEnabled -> %d"), *dwEnabled)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_PESOutputEnabled(DWORD dwEnabled) { m_Encoder.SetPES((BOOL)!!dwEnabled); DbgLog((LOG_TRACE, 1, TEXT("set_PESOutputEnabled(%d)"), !!dwEnabled)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_MPEGLayer(DWORD *dwLayer) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwLayer = (DWORD)mec.lLayer; DbgLog((LOG_TRACE, 1, TEXT("get_MPEGLayer -> %d"), *dwLayer)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_MPEGLayer(DWORD dwLayer) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); if (dwLayer == 2) mec.lLayer = 2; else if (dwLayer == 1) mec.lLayer = 1; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_MPEGLayer(%d)"), dwLayer)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_Bitrate(DWORD *dwBitrate) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwBitrate = (DWORD)mec.dwBitrate; DbgLog((LOG_TRACE, 1, TEXT("get_Bitrate -> %d"), *dwBitrate)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_Bitrate(DWORD dwBitrate) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwBitrate = dwBitrate; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_Bitrate(%d)"), dwBitrate)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_Variable(DWORD *dwVariable) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwVariable = (DWORD)(mec.vmVariable == vbr_off ? 0 : 1); DbgLog((LOG_TRACE, 1, TEXT("get_Variable -> %d"), *dwVariable)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_Variable(DWORD dwVariable) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.vmVariable = dwVariable ? vbr_rh : vbr_off; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_Variable(%d)"), dwVariable)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_VariableMin(DWORD *dwMin) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwMin = (DWORD)mec.dwVariableMin; DbgLog((LOG_TRACE, 1, TEXT("get_Variablemin -> %d"), *dwMin)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_VariableMin(DWORD dwMin) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwVariableMin = dwMin; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_Variablemin(%d)"), dwMin)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_VariableMax(DWORD *dwMax) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwMax = (DWORD)mec.dwVariableMax; DbgLog((LOG_TRACE, 1, TEXT("get_Variablemax -> %d"), *dwMax)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_VariableMax(DWORD dwMax) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwVariableMax = dwMax; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_Variablemax(%d)"), dwMax)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_Quality(DWORD *dwQuality) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwQuality=(DWORD)mec.dwQuality; DbgLog((LOG_TRACE, 1, TEXT("get_Quality -> %d"), *dwQuality)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_Quality(DWORD dwQuality) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwQuality = dwQuality; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_Quality(%d)"), dwQuality)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_VariableQ(DWORD *dwVBRq) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwVBRq=(DWORD)mec.dwVBRq; DbgLog((LOG_TRACE, 1, TEXT("get_VariableQ -> %d"), *dwVBRq)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_VariableQ(DWORD dwVBRq) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwVBRq = dwVBRq; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_VariableQ(%d)"), dwVBRq)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_SourceSampleRate(DWORD *dwSampleRate) { *dwSampleRate = 0; WAVEFORMATEX wf; if(FAILED(m_Encoder.GetInputType(&wf))) return E_FAIL; *dwSampleRate = wf.nSamplesPerSec; DbgLog((LOG_TRACE, 1, TEXT("get_SourceSampleRate -> %d"), *dwSampleRate)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_SourceChannels(DWORD *dwChannels) { WAVEFORMATEX wf; if(FAILED(m_Encoder.GetInputType(&wf))) return E_FAIL; *dwChannels = wf.nChannels; DbgLog((LOG_TRACE, 1, TEXT("get_SourceChannels -> %d"), *dwChannels)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_SampleRate(DWORD *dwSampleRate) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwSampleRate = mec.dwSampleRate; DbgLog((LOG_TRACE, 1, TEXT("get_SampleRate -> %d"), *dwSampleRate)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_SampleRate(DWORD dwSampleRate) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); DWORD dwOldSampleRate = mec.dwSampleRate; mec.dwSampleRate = dwSampleRate; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_SampleRate(%d)"), dwSampleRate)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_ChannelMode(DWORD *dwChannelMode) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwChannelMode = mec.ChMode; DbgLog((LOG_TRACE, 1, TEXT("get_ChannelMode -> %d"), *dwChannelMode)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_ChannelMode(DWORD dwChannelMode) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.ChMode = (MPEG_mode)dwChannelMode; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ChannelMode(%d)"), dwChannelMode)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_ForceMS(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwForceMS; DbgLog((LOG_TRACE, 1, TEXT("get_ForceMS -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_ForceMS(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwForceMS = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ForceMS(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_CRCFlag(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bCRCProtect; DbgLog((LOG_TRACE, 1, TEXT("get_CRCFlag -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_ForceMono(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bForceMono; DbgLog((LOG_TRACE, 1, TEXT("get_ForceMono -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_SetDuration(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bSetDuration; DbgLog((LOG_TRACE, 1, TEXT("get_SetDuration -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_SampleOverlap(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bSampleOverlap; DbgLog((LOG_TRACE, 1, TEXT("get_SampleOverlap -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_CRCFlag(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bCRCProtect = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_CRCFlag(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_ForceMono(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bForceMono = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ForceMono(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_SetDuration(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bSetDuration = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_SetDuration(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_SampleOverlap(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bSampleOverlap = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_SampleOverlap(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_EnforceVBRmin(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwEnforceVBRmin; DbgLog((LOG_TRACE, 1, TEXT("get_EnforceVBRmin -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_EnforceVBRmin(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwEnforceVBRmin = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_EnforceVBRmin(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_VoiceMode(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwVoiceMode; DbgLog((LOG_TRACE, 1, TEXT("get_VoiceMode -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_VoiceMode(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwVoiceMode = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_VoiceMode(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_KeepAllFreq(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwKeepAllFreq; DbgLog((LOG_TRACE, 1, TEXT("get_KeepAllFreq -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_KeepAllFreq(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwKeepAllFreq = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_KeepAllFreq(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_StrictISO(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.dwStrictISO; DbgLog((LOG_TRACE, 1, TEXT("get_StrictISO -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_StrictISO(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwStrictISO = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_StrictISO(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_NoShortBlock(DWORD *dwNoShortBlock) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwNoShortBlock = mec.dwNoShortBlock; DbgLog((LOG_TRACE, 1, TEXT("get_NoShortBlock -> %d"), *dwNoShortBlock)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_NoShortBlock(DWORD dwNoShortBlock) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwNoShortBlock = dwNoShortBlock; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_NoShortBlock(%d)"), dwNoShortBlock)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_XingTag(DWORD *dwXingTag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwXingTag = mec.dwXingTag; DbgLog((LOG_TRACE, 1, TEXT("get_XingTag -> %d"), *dwXingTag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_XingTag(DWORD dwXingTag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwXingTag = dwXingTag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_XingTag(%d)"), dwXingTag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_OriginalFlag(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bOriginal; DbgLog((LOG_TRACE, 1, TEXT("get_OriginalFlag -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_OriginalFlag(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bOriginal = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_OriginalFlag(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_CopyrightFlag(DWORD *dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwFlag = mec.bCopyright; DbgLog((LOG_TRACE, 1, TEXT("get_CopyrightFlag -> %d"), *dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_CopyrightFlag(DWORD dwFlag) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.bCopyright = dwFlag; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_CopyrightFlag(%d)"), dwFlag)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_ModeFixed(DWORD *dwModeFixed) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); *dwModeFixed = mec.dwModeFixed; DbgLog((LOG_TRACE, 1, TEXT("get_ModeFixed -> %d"), *dwModeFixed)); return S_OK; } STDMETHODIMP CMpegAudEnc::set_ModeFixed(DWORD dwModeFixed) { MPEG_ENCODER_CONFIG mec; m_Encoder.GetOutputType(&mec); mec.dwModeFixed = dwModeFixed; m_Encoder.SetOutputType(mec); DbgLog((LOG_TRACE, 1, TEXT("set_ModeFixed(%d)"), dwModeFixed)); return S_OK; } STDMETHODIMP CMpegAudEnc::get_ParameterBlockSize(BYTE *pcBlock, DWORD *pdwSize) { DbgLog((LOG_TRACE, 1, TEXT("get_ParameterBlockSize -> %d%d"), *pcBlock, *pdwSize)); if (pcBlock != NULL) { if (*pdwSize >= sizeof(MPEG_ENCODER_CONFIG)) { m_Encoder.GetOutputType((MPEG_ENCODER_CONFIG*)pcBlock); return S_OK; } else { *pdwSize = sizeof(MPEG_ENCODER_CONFIG); return E_FAIL; } } else if (pdwSize != NULL) { *pdwSize = sizeof(MPEG_ENCODER_CONFIG); return S_OK; } return E_FAIL; } STDMETHODIMP CMpegAudEnc::set_ParameterBlockSize(BYTE *pcBlock, DWORD dwSize) { DbgLog((LOG_TRACE, 1, TEXT("get_ParameterBlockSize(%d, %d)"), *pcBlock, dwSize)); if (sizeof(MPEG_ENCODER_CONFIG) == dwSize){ m_Encoder.SetOutputType(*(MPEG_ENCODER_CONFIG*)pcBlock); return S_OK; } else return E_FAIL; } STDMETHODIMP CMpegAudEnc::DefaultAudioEncoderProperties() { DbgLog((LOG_TRACE, 1, TEXT("DefaultAudioEncoderProperties()"))); HRESULT hr = InputTypeDefined(); if (FAILED(hr)) return hr; DWORD dwSourceSampleRate; get_SourceSampleRate(&dwSourceSampleRate); set_PESOutputEnabled(DEFAULT_PES); set_MPEGLayer(DEFAULT_LAYER); set_Bitrate(DEFAULT_BITRATE); set_Variable(FALSE); set_VariableMin(DEFAULT_VARIABLEMIN); set_VariableMax(DEFAULT_VARIABLEMAX); set_Quality(DEFAULT_ENCODING_QUALITY); set_VariableQ(DEFAULT_VBR_QUALITY); set_SampleRate(dwSourceSampleRate); set_CRCFlag(DEFAULT_CRC); set_ForceMono(DEFAULT_FORCE_MONO); set_SetDuration(DEFAULT_SET_DURATION); set_SampleOverlap(DEFAULT_SAMPLE_OVERLAP); set_OriginalFlag(DEFAULT_ORIGINAL); set_CopyrightFlag(DEFAULT_COPYRIGHT); set_EnforceVBRmin(DEFAULT_ENFORCE_MIN); set_VoiceMode(DEFAULT_VOICE); set_KeepAllFreq(DEFAULT_KEEP_ALL_FREQ); set_StrictISO(DEFAULT_STRICT_ISO); set_NoShortBlock(DEFAULT_DISABLE_SHORT_BLOCK); set_XingTag(DEFAULT_XING_TAG); set_ForceMS(DEFAULT_FORCE_MS); set_ChannelMode(DEFAULT_STEREO_MODE); set_ModeFixed(DEFAULT_MODE_FIXED); return S_OK; } STDMETHODIMP CMpegAudEnc::LoadAudioEncoderPropertiesFromRegistry() { DbgLog((LOG_TRACE, 1, TEXT("LoadAudioEncoderPropertiesFromRegistry()"))); MPEG_ENCODER_CONFIG mec; ReadPresetSettings(&mec); if(m_Encoder.SetOutputType(mec) == S_FALSE) return S_FALSE; return S_OK; } STDMETHODIMP CMpegAudEnc::SaveAudioEncoderPropertiesToRegistry() { DbgLog((LOG_TRACE, 1, TEXT("SaveAudioEncoderPropertiesToRegistry()"))); Lame::CRegKey rk; MPEG_ENCODER_CONFIG mec; if(m_Encoder.GetOutputType(&mec) == S_FALSE) return E_FAIL; if(rk.Create(HKEY_CURRENT_USER, KEY_LAME_ENCODER)) { rk.setDWORD(VALUE_BITRATE, mec.dwBitrate); rk.setDWORD(VALUE_VARIABLE, mec.vmVariable); rk.setDWORD(VALUE_VARIABLEMIN, mec.dwVariableMin); rk.setDWORD(VALUE_VARIABLEMAX, mec.dwVariableMax); rk.setDWORD(VALUE_QUALITY, mec.dwQuality); rk.setDWORD(VALUE_VBR_QUALITY, mec.dwVBRq); rk.setDWORD(VALUE_CRC, mec.bCRCProtect); rk.setDWORD(VALUE_FORCE_MONO, mec.bForceMono); rk.setDWORD(VALUE_SET_DURATION, mec.bSetDuration); rk.setDWORD(VALUE_SAMPLE_OVERLAP, mec.bSampleOverlap); rk.setDWORD(VALUE_PES, mec.dwPES); rk.setDWORD(VALUE_COPYRIGHT, mec.bCopyright); rk.setDWORD(VALUE_ORIGINAL, mec.bOriginal); rk.setDWORD(VALUE_SAMPLE_RATE, mec.dwSampleRate); rk.setDWORD(VALUE_STEREO_MODE, mec.ChMode); rk.setDWORD(VALUE_FORCE_MS, mec.dwForceMS); rk.setDWORD(VALUE_XING_TAG, mec.dwXingTag); rk.setDWORD(VALUE_DISABLE_SHORT_BLOCK, mec.dwNoShortBlock); rk.setDWORD(VALUE_STRICT_ISO, mec.dwStrictISO); rk.setDWORD(VALUE_KEEP_ALL_FREQ, mec.dwKeepAllFreq); rk.setDWORD(VALUE_VOICE, mec.dwVoiceMode); rk.setDWORD(VALUE_ENFORCE_MIN, mec.dwEnforceVBRmin); rk.setDWORD(VALUE_MODE_FIXED, mec.dwModeFixed); rk.Close(); } // Reconnect filter graph Reconnect(); return S_OK; } STDMETHODIMP CMpegAudEnc::InputTypeDefined() { WAVEFORMATEX wf; if(FAILED(m_Encoder.GetInputType(&wf))) { DbgLog((LOG_TRACE, 1, TEXT("!InputTypeDefined()"))); return E_FAIL; } DbgLog((LOG_TRACE, 1, TEXT("InputTypeDefined()"))); return S_OK; } STDMETHODIMP CMpegAudEnc::ApplyChanges() { return Reconnect(); } // // CPersistStream stuff // // what is our class ID? STDMETHODIMP CMpegAudEnc::GetClassID(CLSID *pClsid) { CheckPointer(pClsid, E_POINTER); *pClsid = CLSID_LAMEDShowFilter; return S_OK; } HRESULT CMpegAudEnc::WriteToStream(IStream *pStream) { DbgLog((LOG_TRACE,1,TEXT("WriteToStream()"))); MPEG_ENCODER_CONFIG mec; if(m_Encoder.GetOutputType(&mec) == S_FALSE) return E_FAIL; return pStream->Write(&mec, sizeof(mec), 0); } // what device should we use? Used to re-create a .GRF file that we // are in HRESULT CMpegAudEnc::ReadFromStream(IStream *pStream) { MPEG_ENCODER_CONFIG mec; HRESULT hr = pStream->Read(&mec, sizeof(mec), 0); if(FAILED(hr)) return hr; if(m_Encoder.SetOutputType(mec) == S_FALSE) return S_FALSE; DbgLog((LOG_TRACE,1,TEXT("ReadFromStream() succeeded"))); hr = S_OK; return hr; } // How long is our data? int CMpegAudEnc::SizeMax() { return sizeof(MPEG_ENCODER_CONFIG); } ////////////////////////////////////////////////////////////////////////// // CMpegAudEncOutPin is the one and only output pin of CMpegAudEnc // ////////////////////////////////////////////////////////////////////////// CMpegAudEncOutPin::CMpegAudEncOutPin( CMpegAudEnc * pFilter, HRESULT * pHr ) : CTransformOutputPin( NAME("LameEncoderOutputPin"), pFilter, pHr, L"Output\0" ), m_pFilter(pFilter) { m_SetFormat = FALSE; } CMpegAudEncOutPin::~CMpegAudEncOutPin() { } STDMETHODIMP CMpegAudEncOutPin::NonDelegatingQueryInterface(REFIID riid, void **ppv) { if(riid == IID_IAMStreamConfig) { CheckPointer(ppv, E_POINTER); return GetInterface((IAMStreamConfig*)(this), ppv); } return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv); } ////////////////////////////////////////////////////////////////////////// // This is called after the output format has been negotiated and // will update the LAME encoder settings so that it matches the // settings specified in the MediaType structure. ////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEncOutPin::SetMediaType(const CMediaType *pmt) { // Retrieve the current LAME encoder configuration MPEG_ENCODER_CONFIG mec; m_pFilter->m_Encoder.GetOutputType(&mec); // Annotate if we are using the MEDIATYPE_Stream output type m_pFilter->m_bStreamOutput = (pmt->majortype == MEDIATYPE_Stream); if (pmt->majortype == MEDIATYPE_Stream) { // Update the encoder configuration using the settings that were // cached in the CMpegAudEncOutPin::GetMediaType() call mec.dwSampleRate = m_CurrentOutputFormat.nSampleRate; mec.dwBitrate = m_CurrentOutputFormat.nBitRate; mec.ChMode = m_CurrentOutputFormat.ChMode; } else { // Update the encoder configuration directly using the values // passed via the CMediaType structure. MPEGLAYER3WAVEFORMAT *pfmt = (MPEGLAYER3WAVEFORMAT*) pmt->Format(); mec.dwSampleRate = pfmt->wfx.nSamplesPerSec; mec.dwBitrate = pfmt->wfx.nAvgBytesPerSec * 8 / 1000; if (pfmt->wfx.nChannels == 1) { mec.ChMode = MONO; } else if (pfmt->wfx.nChannels == 2 && mec.ChMode == MONO && !mec.bForceMono) { mec.ChMode = STEREO; } } m_pFilter->m_Encoder.SetOutputType(mec); // Now configure this MediaType on the output pin HRESULT hr = CTransformOutputPin::SetMediaType(pmt); return hr; } ////////////////////////////////////////////////////////////////////////// // Retrieve the various MediaTypes that match the advertised formats // supported on the output pin and configure an AM_MEDIA_TYPE output // structure that is based on the selected format. ////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEncOutPin::GetMediaType(int iPosition, CMediaType *pmt) { if (iPosition < 0) return E_INVALIDARG; // If iPosition equals zero then we always return the currently configured MediaType if (iPosition == 0) { *pmt = m_mt; return S_OK; } switch (iPosition) { case 1: { pmt->SetType(&MEDIATYPE_Audio); pmt->SetSubtype(&MEDIASUBTYPE_MP3); break; } case 2: { pmt->SetType(&MEDIATYPE_Stream); pmt->SetSubtype(&MEDIASUBTYPE_MPEG1Audio); pmt->SetFormatType(&GUID_NULL); break; } case 3: { // The last case that we evaluate is the MPEG2_PES format, but if the // encoder isn't configured for it then just return VFW_S_NO_MORE_ITEMS if ( !m_pFilter->m_Encoder.IsPES() ) { return VFW_S_NO_MORE_ITEMS; } pmt->SetType(&MEDIATYPE_MPEG2_PES); pmt->SetSubtype(&MEDIASUBTYPE_MPEG2_AUDIO); break; } default: return VFW_S_NO_MORE_ITEMS; } // Output capabilities are dependent on the input so insure it is connected if ( !m_pFilter->m_pInput->IsConnected() ) { pmt->SetFormatType(&FORMAT_None); return NOERROR; } // Annotate the current MediaType index for recall in CMpegAudEnc::Reconnect() m_pFilter->m_currentMediaTypeIndex = iPosition; // Configure the remaining AM_MEDIA_TYPE parameters using the cached encoder settings. // Since MEDIATYPE_Stream doesn't have a format block the current settings // for CHANNEL MODE, BITRATE and SAMPLERATE are cached in m_CurrentOutputFormat for use // when we setup the LAME encoder in the call to CMpegAudEncOutPin::SetMediaType() MPEG_ENCODER_CONFIG mec; m_pFilter->m_Encoder.GetOutputType(&mec); // Retrieve the current encoder config WAVEFORMATEX wf; // Retrieve the input configuration m_pFilter->m_Encoder.GetInputType(&wf); // Use the current encoder sample rate unless it isn't a modulus of the input rate if ((wf.nSamplesPerSec % mec.dwSampleRate) == 0) { m_CurrentOutputFormat.nSampleRate = mec.dwSampleRate; } else { m_CurrentOutputFormat.nSampleRate = wf.nSamplesPerSec; } // Select the output channel config based on the encoder config and input channel count m_CurrentOutputFormat.ChMode = mec.ChMode; switch (wf.nChannels) // Determine if we need to alter ChMode based upon the channel count and ForceMono flag { case 1: { m_CurrentOutputFormat.ChMode = MONO; break; } case 2: { if (mec.ChMode == MONO && !mec.bForceMono) { m_CurrentOutputFormat.ChMode = STEREO; } else if ( mec.bForceMono ) { m_CurrentOutputFormat.ChMode = MONO; } break; } } // Select the encoder bit rate. In VBR mode we set the data rate parameter // of the WAVE_FORMAT_MPEGLAYER3 structure to the minimum VBR value m_CurrentOutputFormat.nBitRate = (mec.vmVariable == vbr_off) ? mec.dwBitrate : mec.dwVariableMin; if (pmt->majortype == MEDIATYPE_Stream) return NOERROR; // No further config required for MEDIATYPE_Stream // Now configure the remainder of the WAVE_FORMAT_MPEGLAYER3 format block // and its parent AM_MEDIA_TYPE structure DECLARE_PTR(MPEGLAYER3WAVEFORMAT, p_mp3wvfmt, pmt->AllocFormatBuffer(sizeof(MPEGLAYER3WAVEFORMAT))); ZeroMemory(p_mp3wvfmt, sizeof(MPEGLAYER3WAVEFORMAT)); p_mp3wvfmt->wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3; p_mp3wvfmt->wfx.nChannels = (m_CurrentOutputFormat.ChMode == MONO) ? 1 : 2; p_mp3wvfmt->wfx.nSamplesPerSec = m_CurrentOutputFormat.nSampleRate; p_mp3wvfmt->wfx.nAvgBytesPerSec = GET_DATARATE(m_CurrentOutputFormat.nBitRate); p_mp3wvfmt->wfx.nBlockAlign = 1; p_mp3wvfmt->wfx.wBitsPerSample = 0; p_mp3wvfmt->wfx.cbSize = sizeof(MPEGLAYER3WAVEFORMAT) - sizeof(WAVEFORMATEX); p_mp3wvfmt->wID = MPEGLAYER3_ID_MPEG; p_mp3wvfmt->fdwFlags = MPEGLAYER3_FLAG_PADDING_ISO; p_mp3wvfmt->nBlockSize = GET_FRAMELENGTH(m_CurrentOutputFormat.nBitRate, p_mp3wvfmt->wfx.nSamplesPerSec); p_mp3wvfmt->nFramesPerBlock = 1; p_mp3wvfmt->nCodecDelay = 0; pmt->SetTemporalCompression(FALSE); pmt->SetSampleSize(OUT_BUFFER_SIZE); pmt->SetFormat((LPBYTE)p_mp3wvfmt, sizeof(MPEGLAYER3WAVEFORMAT)); pmt->SetFormatType(&FORMAT_WaveFormatEx); return NOERROR; } ////////////////////////////////////////////////////////////////////////// // This method is called to see if a given output format is supported ////////////////////////////////////////////////////////////////////////// HRESULT CMpegAudEncOutPin::CheckMediaType(const CMediaType *pmtOut) { // Fail if the input pin is not connected. if (!m_pFilter->m_pInput->IsConnected()) { return VFW_E_NOT_CONNECTED; } // Reject any media types that we know in advance our // filter cannot use. if (pmtOut->majortype != MEDIATYPE_Audio && pmtOut->majortype != MEDIATYPE_Stream) { return S_FALSE; } // If SetFormat was previously called, check whether pmtOut exactly // matches the format that was specified in SetFormat. // Return S_OK if they match, or VFW_E_INVALIDMEDIATYPE otherwise.) if ( m_SetFormat ) { if (*pmtOut != m_mt) { return VFW_E_INVALIDMEDIATYPE; } else { return S_OK; } } // Now do the normal check for this media type. HRESULT hr; hr = m_pFilter->CheckTransform (&m_pFilter->m_pInput->CurrentMediaType(), // The input type. pmtOut); // The proposed output type. if (hr == S_OK) { return S_OK; // This format is compatible with the current input type. } // This format is not compatible with the current input type. // Maybe we can reconnect the input pin with a new input type. // Enumerate the upstream filter's preferred output types, and // see if one of them will work. CMediaType *pmtEnum; BOOL fFound = FALSE; IEnumMediaTypes *pEnum; hr = m_pFilter->m_pInput->GetConnected()->EnumMediaTypes(&pEnum); if (hr != S_OK) { return E_FAIL; } while (hr = pEnum->Next(1, (AM_MEDIA_TYPE **)&pmtEnum, NULL), hr == S_OK) { // Check this input type against the proposed output type. hr = m_pFilter->CheckTransform(pmtEnum, pmtOut); if (hr != S_OK) { DeleteMediaType(pmtEnum); continue; // Try the next one. } // This input type is a possible candidate. But, we have to make // sure that the upstream filter can switch to this type. hr = m_pFilter->m_pInput->GetConnected()->QueryAccept(pmtEnum); if (hr != S_OK) { // The upstream filter will not switch to this type. DeleteMediaType(pmtEnum); continue; // Try the next one. } fFound = TRUE; DeleteMediaType(pmtEnum); break; } pEnum->Release(); if (fFound) { // This output type is OK, but if we are asked to use it, we will // need to reconnect our input pin. (See SetFormat, below.) return S_OK; } else { return VFW_E_INVALIDMEDIATYPE; } } ////////////////////////////////////////////////////////////////////////// // IAMStreamConfig ////////////////////////////////////////////////////////////////////////// HRESULT STDMETHODCALLTYPE CMpegAudEncOutPin::SetFormat(AM_MEDIA_TYPE *pmt) { CheckPointer(pmt, E_POINTER); HRESULT hr; // Hold the filter state lock, to make sure that streaming isn't // in the middle of starting or stopping: CAutoLock cObjectLock(&m_pFilter->m_csFilter); // Cannot set the format unless the filter is stopped. if (m_pFilter->m_State != State_Stopped) { return VFW_E_NOT_STOPPED; } // The set of possible output formats depends on the input format, // so if the input pin is not connected, return a failure code. if (!m_pFilter->m_pInput->IsConnected()) { return VFW_E_NOT_CONNECTED; } // If the pin is already using this format, there's nothing to do. if (IsConnected() && CurrentMediaType() == *pmt) { if ( m_SetFormat ) return S_OK; } // See if this media type is acceptable. if ((hr = CheckMediaType((CMediaType *)pmt)) != S_OK) { return hr; } // If we're connected to a downstream filter, we have to make // sure that the downstream filter accepts this media type. if (IsConnected()) { hr = GetConnected()->QueryAccept(pmt); if (hr != S_OK) { return VFW_E_INVALIDMEDIATYPE; } } // Now make a note that from now on, this is the only format allowed, // and refuse anything but this in the CheckMediaType() code above. m_SetFormat = TRUE; m_mt = *pmt; // Changing the format means reconnecting if necessary. if (IsConnected()) { m_pFilter->m_pGraph->Reconnect(this); } return NOERROR; } HRESULT STDMETHODCALLTYPE CMpegAudEncOutPin::GetFormat(AM_MEDIA_TYPE **ppmt) { *ppmt = CreateMediaType(&m_mt); return S_OK; } HRESULT STDMETHODCALLTYPE CMpegAudEncOutPin::GetNumberOfCapabilities(int *piCount, int *piSize) { // The set of possible output formats depends on the input format, // so if the input pin is not connected, return a failure code. if (!m_pFilter->m_pInput->IsConnected()) { return VFW_E_NOT_CONNECTED; } // Retrieve the current encoder configuration MPEG_ENCODER_CONFIG mec; m_pFilter->m_Encoder.GetOutputType(&mec); // If the encoder is in VBR mode GetStreamCaps() isn't implemented if (mec.vmVariable != vbr_off) { *piCount = 0; } else { *piCount = m_pFilter->m_CapsNum; } *piSize = sizeof(AUDIO_STREAM_CONFIG_CAPS); return S_OK; } HRESULT STDMETHODCALLTYPE CMpegAudEncOutPin::GetStreamCaps(int iIndex, AM_MEDIA_TYPE **pmt, BYTE *pSCC) { // The set of possible output formats depends on the input format, // so if the input pin is not connected, return a failure code. if (!m_pFilter->m_pInput->IsConnected()) { return VFW_E_NOT_CONNECTED; } // If we don't have a capabilities array GetStreamCaps() isn't implemented if (m_pFilter->m_CapsNum == 0) return E_NOTIMPL; // If the encoder is in VBR mode GetStreamCaps() isn't implemented MPEG_ENCODER_CONFIG mec; m_pFilter->m_Encoder.GetOutputType(&mec); if (mec.vmVariable != vbr_off) return E_NOTIMPL; if (iIndex < 0) return E_INVALIDARG; if (iIndex > m_pFilter->m_CapsNum) return S_FALSE; // Load the MPEG Layer3 WaveFormatEx structure with the appropriate entries // for this IAMStreamConfig index element. *pmt = CreateMediaType(&m_mt); if (*pmt == NULL) return E_OUTOFMEMORY; DECLARE_PTR(MPEGLAYER3WAVEFORMAT, p_mp3wvfmt, (*pmt)->pbFormat); (*pmt)->majortype = MEDIATYPE_Audio; (*pmt)->subtype = MEDIASUBTYPE_MP3; (*pmt)->bFixedSizeSamples = TRUE; (*pmt)->bTemporalCompression = FALSE; (*pmt)->lSampleSize = OUT_BUFFER_SIZE; (*pmt)->formattype = FORMAT_WaveFormatEx; (*pmt)->cbFormat = sizeof(MPEGLAYER3WAVEFORMAT); p_mp3wvfmt->wfx.wFormatTag = WAVE_FORMAT_MPEGLAYER3; p_mp3wvfmt->wfx.nChannels = 2; p_mp3wvfmt->wfx.nSamplesPerSec = m_pFilter->OutputCaps[iIndex].nSampleRate; p_mp3wvfmt->wfx.nAvgBytesPerSec = GET_DATARATE(m_pFilter->OutputCaps[iIndex].nBitRate); p_mp3wvfmt->wfx.nBlockAlign = 1; p_mp3wvfmt->wfx.wBitsPerSample = 0; p_mp3wvfmt->wfx.cbSize = sizeof(MPEGLAYER3WAVEFORMAT) - sizeof(WAVEFORMATEX); p_mp3wvfmt->wID = MPEGLAYER3_ID_MPEG; p_mp3wvfmt->fdwFlags = MPEGLAYER3_FLAG_PADDING_ISO; p_mp3wvfmt->nBlockSize = GET_FRAMELENGTH(m_pFilter->OutputCaps[iIndex].nBitRate, m_pFilter->OutputCaps[iIndex].nSampleRate); p_mp3wvfmt->nFramesPerBlock = 1; p_mp3wvfmt->nCodecDelay = 0; // Set up the companion AUDIO_STREAM_CONFIG_CAPS structure // We are only using the CHANNELS element of the structure DECLARE_PTR(AUDIO_STREAM_CONFIG_CAPS, pascc, pSCC); ZeroMemory(pascc, sizeof(AUDIO_STREAM_CONFIG_CAPS)); pascc->guid = MEDIATYPE_Audio; pascc->MinimumChannels = 1; pascc->MaximumChannels = 2; pascc->ChannelsGranularity = 1; pascc->MinimumSampleFrequency = p_mp3wvfmt->wfx.nSamplesPerSec; pascc->MaximumSampleFrequency = p_mp3wvfmt->wfx.nSamplesPerSec; pascc->SampleFrequencyGranularity = 0; pascc->MinimumBitsPerSample = p_mp3wvfmt->wfx.wBitsPerSample; pascc->MaximumBitsPerSample = p_mp3wvfmt->wfx.wBitsPerSample; pascc->BitsPerSampleGranularity = 0; return S_OK; } lame-3.100/dshow/REG.H000644 001751 001751 00000004460 11103146220 015727 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Registry calls handling class * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __REG__ #define __REG__ namespace Lame { class CRegKey { protected: TCHAR m_name[MAX_PATH]; HKEY m_hKey; HKEY m_hRootKey; public: CRegKey(void); CRegKey(HKEY rootKey, PTSTR pName); ~CRegKey(void); BOOL Open(HKEY rootKey, PTSTR pName); BOOL Create(HKEY rootKey, PTSTR pName); BOOL Open(PTSTR an = NULL); BOOL Create(PTSTR an = NULL); BOOL Close(void); operator HKEY () const { return m_hKey; }; BOOL getFlag(PTSTR valuename, BOOL bDefault); void setFlag(PTSTR valuename, BOOL bValue, BOOL bDefault); void setFlag(PTSTR valuename, BOOL bValue); DWORD getDWORD(PTSTR valuename, DWORD bDefault); void setDWORD(PTSTR valuename, DWORD dwValue); void setDWORD(PTSTR valuename, DWORD dwValue, DWORD dwDefault); DWORD getString(PTSTR valuename, PTSTR pDefault, PTSTR pResult, int cbSize); void setString(PTSTR valuename, PTSTR pData); DWORD getBinary(PTSTR valuename, PVOID pDefault, PVOID pResult, int cbSize); DWORD setBinary(PTSTR valuename, PVOID pData, int cbSize); }; class CRegEnumKey { public: CRegEnumKey(HKEY hKey) { m_hKey = hKey; m_dwIndex = 0; } ~CRegEnumKey() { } LONG Next(LPTSTR pszStr, DWORD cbName) { FILETIME ftLastWriteTime; LONG lRet = RegEnumKeyEx(m_hKey, m_dwIndex, pszStr, &cbName, NULL, NULL, NULL, &ftLastWriteTime); m_dwIndex++; return lRet; } void Reset(void) { m_dwIndex = 0; } protected: HKEY m_hKey; DWORD m_dwIndex; }; } #endif // __REG__ lame-3.100/dshow/aboutprp.h000644 001751 001751 00000002543 10256755272 017233 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * About property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ class CMAEAbout: public CBasePropertyPage { public: CMAEAbout(LPUNKNOWN lpUnk, HRESULT *phr); static CUnknown * WINAPI CreateInstance(LPUNKNOWN lpunk, HRESULT *phr); HRESULT OnActivate(); HRESULT OnConnect(IUnknown *pUnknown); HRESULT OnDisconnect(); HRESULT OnDeactivate(); HRESULT OnApplyChanges(); BOOL OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); private: void SetDirty(void); BOOL m_fWindowInactive; }; lame-3.100/dshow/PropPage.cpp000644 001751 001751 00000046123 10342553511 017435 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Basic property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include "iaudioprops.h" #include "mpegac.h" #include "resource.h" #include "PropPage.h" #include "Reg.h" // strings to appear in comboboxes const char * szBitRateString[2][14] = { { "32 kbps","40 kbps","48 kbps","56 kbps", "64 kbps","80 kbps","96 kbps","112 kbps", "128 kbps","160 kbps","192 kbps","224 kbps", "256 kbps","320 kbps" }, { "8 kbps","16 kbps","24 kbps","32 kbps", "40 kbps","48 kbps","56 kbps","64 kbps", "80 kbps","96 kbps","112 kbps","128 kbps", "144 kbps","160 kbps" } }; LPCSTR szQualityDesc[10] = { "High", "High", "High", "High", "High", "Medium", "Medium", "Low", "Low", "Fast mode" }; LPCSTR szVBRqDesc[10] = { "0 - ~1:4", "1 - ~1:5", "2 - ~1:6", "3 - ~1:7", "4 - ~1:9", "5 - ~1:9", "6 - ~1:10", "7 - ~1:11", "8 - ~1:12", "9 - ~1:14" }; struct SSampleRate { DWORD dwSampleRate; LPCSTR lpSampleRate; }; SSampleRate srRates[9] = { // MPEG-1 {48000, "48 kHz"}, {44100, "44.1 kHz"}, {32000, "32 kHz"}, // MPEG-2 {24000, "24 kHz"}, {22050, "22.05 kHz"}, {16000, "16 kHz"}, // MPEG-2.5 {12000, "12 kHz"}, {11025, "11.025 kHz"}, { 8000, "8 kHz"} }; //////////////////////////////////////////////////////////////// // CreateInstance //////////////////////////////////////////////////////////////// CUnknown *CMpegAudEncPropertyPage::CreateInstance( LPUNKNOWN punk, HRESULT *phr ) { CMpegAudEncPropertyPage *pNewObject = new CMpegAudEncPropertyPage( punk, phr ); if( pNewObject == NULL ) *phr = E_OUTOFMEMORY; return pNewObject; } //////////////////////////////////////////////////////////////// // Constructor //////////////////////////////////////////////////////////////// CMpegAudEncPropertyPage::CMpegAudEncPropertyPage(LPUNKNOWN punk, HRESULT *phr) : CBasePropertyPage(NAME("Encoder Property Page"), punk, IDD_AUDIOENCPROPS, IDS_AUDIO_PROPS_TITLE) , m_pAEProps(NULL) { ASSERT(phr); m_srIdx = 0; InitCommonControls(); } // // OnConnect // // Give us the filter to communicate with HRESULT CMpegAudEncPropertyPage::OnConnect(IUnknown *pUnknown) { ASSERT(m_pAEProps == NULL); // Ask the filter for it's control interface HRESULT hr = pUnknown->QueryInterface(IID_IAudioEncoderProperties,(void **)&m_pAEProps); if (FAILED(hr)) return E_NOINTERFACE; ASSERT(m_pAEProps); // Get current filter state m_pAEProps->get_Bitrate(&m_dwBitrate); m_pAEProps->get_Variable(&m_dwVariable); m_pAEProps->get_VariableMin(&m_dwMin); m_pAEProps->get_VariableMax(&m_dwMax); m_pAEProps->get_Quality(&m_dwQuality); m_pAEProps->get_VariableQ(&m_dwVBRq); m_pAEProps->get_SampleRate(&m_dwSampleRate); m_pAEProps->get_CRCFlag(&m_dwCRC); m_pAEProps->get_ForceMono(&m_dwForceMono); m_pAEProps->get_CopyrightFlag(&m_dwCopyright); m_pAEProps->get_OriginalFlag(&m_dwOriginal); return NOERROR; } // // OnDisconnect // // Release the interface HRESULT CMpegAudEncPropertyPage::OnDisconnect() { // Release the interface if (m_pAEProps == NULL) return E_UNEXPECTED; m_pAEProps->set_Bitrate(m_dwBitrate); m_pAEProps->set_Variable(m_dwVariable); m_pAEProps->set_VariableMin(m_dwMin); m_pAEProps->set_VariableMax(m_dwMax); m_pAEProps->set_Quality(m_dwQuality); m_pAEProps->set_VariableQ(m_dwVBRq); m_pAEProps->set_SampleRate(m_dwSampleRate); m_pAEProps->set_CRCFlag(m_dwCRC); m_pAEProps->set_ForceMono(m_dwForceMono); m_pAEProps->set_CopyrightFlag(m_dwCopyright); m_pAEProps->set_OriginalFlag(m_dwOriginal); m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); m_pAEProps->Release(); m_pAEProps = NULL; return NOERROR; } // // OnActivate // // Called on dialog creation HRESULT CMpegAudEncPropertyPage::OnActivate(void) { InitPropertiesDialog(m_hwnd); return NOERROR; } // // OnDeactivate // // Called on dialog destruction HRESULT CMpegAudEncPropertyPage::OnDeactivate(void) { return NOERROR; } //////////////////////////////////////////////////////////////// // OnReceiveMessage - message handler function //////////////////////////////////////////////////////////////// BOOL CMpegAudEncPropertyPage::OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_HSCROLL: if ((HWND)lParam == m_hwndQuality) { int pos = SendMessage(m_hwndQuality, TBM_GETPOS, 0, 0); if (pos >= 0 && pos < 10) { SetDlgItemText(hwnd,IDC_TEXT_QUALITY,szQualityDesc[pos]); m_pAEProps->set_Quality(pos); SetDirty(); } } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_COMBO_CBR: if (HIWORD(wParam) == CBN_SELCHANGE) { int nBitrate = SendDlgItemMessage(hwnd, IDC_COMBO_CBR, CB_GETCURSEL, 0, 0L); DWORD dwSampleRate; m_pAEProps->get_SampleRate(&dwSampleRate); DWORD dwBitrate; if (dwSampleRate >= 32000) { // Consider MPEG-1 dwBitrate = dwBitRateValue[0][nBitrate]; } else { // Consider MPEG-2/2.5 dwBitrate = dwBitRateValue[1][nBitrate]; } m_pAEProps->set_Bitrate(dwBitrate); SetDirty(); } break; case IDC_COMBO_VBRMIN: if (HIWORD(wParam) == CBN_SELCHANGE) { int nVariableMin = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMIN, CB_GETCURSEL, 0, 0L); DWORD dwSampleRate; m_pAEProps->get_SampleRate(&dwSampleRate); DWORD dwMin; if (dwSampleRate >= 32000) { // Consider MPEG-1 dwMin = dwBitRateValue[0][nVariableMin]; } else { // Consider MPEG-2/2.5 dwMin = dwBitRateValue[1][nVariableMin]; } m_pAEProps->set_VariableMin(dwMin); SetDirty(); } break; case IDC_COMBO_VBRMAX: if (HIWORD(wParam) == CBN_SELCHANGE) { int nVariableMax = SendDlgItemMessage(hwnd, IDC_COMBO_VBRMAX, CB_GETCURSEL, 0, 0L); DWORD dwSampleRate; m_pAEProps->get_SampleRate(&dwSampleRate); DWORD dwMax; if (dwSampleRate >= 32000) { // Consider MPEG-1 dwMax = dwBitRateValue[0][nVariableMax]; } else { // Consider MPEG-2/2.5 dwMax = dwBitRateValue[1][nVariableMax]; } m_pAEProps->set_VariableMax(dwMax); SetDirty(); } break; case IDC_COMBO_SAMPLE_RATE: if (HIWORD(wParam) == CBN_SELCHANGE) { int nSampleRate = SendDlgItemMessage(hwnd, IDC_COMBO_SAMPLE_RATE, CB_GETCURSEL, 0, 0L); if (nSampleRate < 0) nSampleRate = 0; else if (nSampleRate > 2) nSampleRate = 2; DWORD dwSampleRate = srRates[nSampleRate * 3 + m_srIdx].dwSampleRate; m_pAEProps->set_SampleRate(dwSampleRate); InitPropertiesDialog(hwnd); SetDirty(); } break; case IDC_COMBO_VBRq: if (HIWORD(wParam) == CBN_SELCHANGE) { int nVBRq = SendDlgItemMessage(hwnd, IDC_COMBO_VBRq, CB_GETCURSEL, 0, 0L); if (nVBRq >=0 && nVBRq <=9) m_pAEProps->set_VariableQ(nVBRq); SetDirty(); } break; case IDC_RADIO_CBR: case IDC_RADIO_VBR: m_pAEProps->set_Variable(LOWORD(wParam)-IDC_RADIO_CBR); SetDirty(); break; case IDC_CHECK_PES: m_pAEProps->set_PESOutputEnabled(IsDlgButtonChecked(hwnd, IDC_CHECK_PES)); SetDirty(); break; case IDC_CHECK_COPYRIGHT: m_pAEProps->set_CopyrightFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_COPYRIGHT)); SetDirty(); break; case IDC_CHECK_ORIGINAL: m_pAEProps->set_OriginalFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_ORIGINAL)); SetDirty(); break; case IDC_CHECK_CRC: m_pAEProps->set_CRCFlag(IsDlgButtonChecked(hwnd, IDC_CHECK_CRC)); SetDirty(); break; case IDC_FORCE_MONO: m_pAEProps->set_ForceMono(IsDlgButtonChecked(hwnd, IDC_FORCE_MONO)); SetDirty(); break; } return TRUE; case WM_DESTROY: return TRUE; default: return FALSE; } return TRUE; } // // OnApplyChanges // HRESULT CMpegAudEncPropertyPage::OnApplyChanges() { m_pAEProps->get_Bitrate(&m_dwBitrate); m_pAEProps->get_Variable(&m_dwVariable); m_pAEProps->get_VariableMin(&m_dwMin); m_pAEProps->get_VariableMax(&m_dwMax); m_pAEProps->get_Quality(&m_dwQuality); m_pAEProps->get_VariableQ(&m_dwVBRq); m_pAEProps->get_SampleRate(&m_dwSampleRate); m_pAEProps->get_CRCFlag(&m_dwCRC); m_pAEProps->get_ForceMono(&m_dwForceMono); m_pAEProps->get_CopyrightFlag(&m_dwCopyright); m_pAEProps->get_OriginalFlag(&m_dwOriginal); m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); m_pAEProps->ApplyChanges(); return S_OK; } // // Initialize dialogbox controls with proper values // void CMpegAudEncPropertyPage::InitPropertiesDialog(HWND hwndParent) { EnableControls(hwndParent, TRUE); m_hwndQuality = GetDlgItem(hwndParent,IDC_SLIDER_QUALITY); DWORD dwQuality; m_pAEProps->get_Quality(&dwQuality); SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETRANGE, 1, MAKELONG (2,9)); SendDlgItemMessage(hwndParent, IDC_SLIDER_QUALITY, TBM_SETPOS, 1, dwQuality); if (dwQuality>=0 && dwQuality<10) SetDlgItemText(hwndParent,IDC_TEXT_QUALITY,szQualityDesc[dwQuality]); // // initialize sample rate selection // DWORD dwSourceSampleRate; m_pAEProps->get_SourceSampleRate(&dwSourceSampleRate); SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_RESETCONTENT, 0, 0L); switch (dwSourceSampleRate) { case 48000: case 24000: case 12000: m_srIdx = 0; break; case 32000: case 16000: case 8000: m_srIdx = 2; break; case 44100: case 22050: case 11025: default: m_srIdx = 1; } for (int i = 0; i < 3; i++) SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)srRates[i * 3 + m_srIdx].lpSampleRate); DWORD dwSampleRate; m_pAEProps->get_SampleRate(&dwSampleRate); m_pAEProps->set_SampleRate(dwSampleRate); int nSR = 0; while (dwSampleRate != srRates[nSR * 3 + m_srIdx].dwSampleRate && nSR < 3) { nSR++; } if (nSR >= 3) nSR = 0; SendDlgItemMessage(hwndParent, IDC_COMBO_SAMPLE_RATE, CB_SETCURSEL, nSR, 0); DWORD dwChannels; m_pAEProps->get_SourceChannels(&dwChannels); // //initialize VBRq combo box // int k; SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_RESETCONTENT, 0, 0); for (k = 0; k < 10; k++) SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szVBRqDesc[k]); DWORD dwVBRq; m_pAEProps->get_VariableQ(&dwVBRq); if (dwVBRq<0) dwVBRq = 0; if (dwVBRq>9) dwVBRq = 9; m_pAEProps->set_VariableQ(dwVBRq); SendDlgItemMessage(hwndParent, IDC_COMBO_VBRq, CB_SETCURSEL, dwVBRq, 0); ////////////////////////////////////// // initialize CBR selection ////////////////////////////////////// int nSt; SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_RESETCONTENT, 0, 0); if (dwSampleRate >= 32000) { // If target sampling rate is less than 32000, consider // MPEG 1 audio nSt = 0; for (int i = 0; i < 14; i++) SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][i]); } else { // Consider MPEG 2 / 2.5 audio nSt = 1; for (int i = 0; i < 14 ; i++) SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][i]); } DWORD dwBitrate; m_pAEProps->get_Bitrate(&dwBitrate); int nBitrateSel = 0; // BitRateValue[][i] is in ascending order // We use this fact. We also know there are 14 bitrate values available. // We are going to use the closest possible, so we can limit loop with 13 while (nBitrateSel < 13 && dwBitRateValue[nSt][nBitrateSel] < dwBitrate) nBitrateSel++; SendDlgItemMessage(hwndParent, IDC_COMBO_CBR, CB_SETCURSEL, nBitrateSel, 0); // check if the specified bitrate is found exactly and correct if not if (dwBitRateValue[nSt][nBitrateSel] != dwBitrate) { dwBitrate = dwBitRateValue[nSt][nBitrateSel]; // we can change it, because it is independent of any other parameters // (but depends on some of them!) m_pAEProps->set_Bitrate(dwBitrate); } // // Check VBR/CBR radio button // DWORD dwVariable; m_pAEProps->get_Variable(&dwVariable); CheckRadioButton(hwndParent, IDC_RADIO_CBR, IDC_RADIO_VBR, IDC_RADIO_CBR + dwVariable); ////////////////////////////////////////////////// // initialize VBR selection ////////////////////////////////////////////////// //VBRMIN, VBRMAX int j, nST; SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_RESETCONTENT, 0, 0); if (dwSampleRate >= 32000) { nST = 0; for (j=0; j<14 ;j++) { SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]); SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[0][j]); } } else { nST = 1; for (j = 0; j < 14; j++) { SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]); SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)szBitRateString[1][j]); } } DWORD dwMin,dwMax; m_pAEProps->get_VariableMin(&dwMin); m_pAEProps->get_VariableMax(&dwMax); int nVariableMinSel = 0; int nVariableMaxSel = 0; // BitRateValue[][i] is in ascending order // We use this fact. We also know there are 14 bitrate values available. // We are going to use the closest possible, so we can limit loop with 13 while (nVariableMinSel<13 && dwBitRateValue[nST][nVariableMinSel] < dwMin) nVariableMinSel++; SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMIN, CB_SETCURSEL, nVariableMinSel, 0); while (nVariableMaxSel<13 && dwBitRateValue[nST][nVariableMaxSel] < dwMax) nVariableMaxSel++; SendDlgItemMessage(hwndParent, IDC_COMBO_VBRMAX, CB_SETCURSEL, nVariableMaxSel, 0); // check if the specified bitrate is found exactly and correct if not if (dwBitRateValue[nST][nVariableMinSel] != dwMin) { dwMin = dwBitRateValue[nST][nVariableMinSel]; // we can change it, because it is independent of any other parameters // (but depends on some of them!) m_pAEProps->set_VariableMin(dwMin); } // check if the specified bitrate is found exactly and correct if not if (dwBitRateValue[nST][nVariableMaxSel] != dwMax) { dwMax = dwBitRateValue[nST][nVariableMaxSel]; // we can change it, because it is independent of any other parameters // (but depends on some of them!) m_pAEProps->set_VariableMax(dwMax); } // // initialize checkboxes // DWORD dwPES; m_pAEProps->get_PESOutputEnabled(&dwPES); dwPES = 0; CheckDlgButton(hwndParent, IDC_CHECK_PES, dwPES ? BST_CHECKED : BST_UNCHECKED); DWORD dwCRC; m_pAEProps->get_CRCFlag(&dwCRC); CheckDlgButton(hwndParent, IDC_CHECK_CRC, dwCRC ? BST_CHECKED : BST_UNCHECKED); DWORD dwForceMono; m_pAEProps->get_ForceMono(&dwForceMono); CheckDlgButton(hwndParent, IDC_FORCE_MONO, dwForceMono ? BST_CHECKED : BST_UNCHECKED); DWORD dwCopyright; m_pAEProps->get_CopyrightFlag(&dwCopyright); CheckDlgButton(hwndParent, IDC_CHECK_COPYRIGHT, dwCopyright ? BST_CHECKED : BST_UNCHECKED); DWORD dwOriginal; m_pAEProps->get_OriginalFlag(&dwOriginal); CheckDlgButton(hwndParent, IDC_CHECK_ORIGINAL, dwOriginal ? BST_CHECKED : BST_UNCHECKED); } //////////////////////////////////////////////////////////////// // EnableControls //////////////////////////////////////////////////////////////// void CMpegAudEncPropertyPage::EnableControls(HWND hwndParent, bool bEnable) { EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_PES), false);//bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_CBR), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_CBR), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_VBR), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMIN), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_VBRMAX), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_COPYRIGHT), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_ORIGINAL), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_CRC), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_FORCE_MONO), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_SLIDER_QUALITY), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_COMBO_SAMPLE_RATE), bEnable); } // // SetDirty // // notifies the property page site of changes void CMpegAudEncPropertyPage::SetDirty() { m_bDirty = TRUE; if (m_pPageSite) m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY); } lame-3.100/dshow/PropPage.h000644 001751 001751 00000004251 10342553511 017076 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Basic property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ class CMpegAudEncPropertyPage : public CBasePropertyPage { public: static CUnknown *CreateInstance( LPUNKNOWN punk, HRESULT *phr ); CMpegAudEncPropertyPage( LPUNKNOWN punk, HRESULT *phr ); HRESULT OnConnect(IUnknown *pUnknown); HRESULT OnDisconnect(); HRESULT OnActivate(); HRESULT OnDeactivate(); HRESULT OnApplyChanges(); BOOL OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam); private: void InitPropertiesDialog(HWND hwndParent); void EnableControls(HWND hwndParent, bool bEnable); void SetDirty(void); DWORD m_dwBitrate; //constant bit rate DWORD m_dwVariable; //flag - whether the variable bit rate set DWORD m_dwMin; //specify a minimum allowed bitrate DWORD m_dwMax; //specify a maximum allowed bitrate DWORD m_dwQuality; //encoding quality DWORD m_dwVBRq; //VBR quality setting (0=highest quality, 9=lowest) DWORD m_dwSampleRate; DWORD m_dwChannelMode; DWORD m_dwCRC; DWORD m_dwForceMono; DWORD m_dwCopyright; DWORD m_dwOriginal; HWND m_hwndQuality; //Slider window handle int m_srIdx; IAudioEncoderProperties *m_pAEProps; }; lame-3.100/dshow/iaudioprops.h000644 001751 001751 00000021774 10342553511 017730 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Interface definition * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ // A custom interface to allow the user to modify audio // encoder properties #ifndef __IAUDIOPROPERTIES__ #define __IAUDIOPROPERTIES__ #ifdef __cplusplus extern "C" { #endif // {ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee} DEFINE_GUID(IID_IAudioEncoderProperties, 0xca7e9ef0, 0x1cbe, 0x11d3, 0x8d, 0x29, 0x00, 0xa0, 0xc9, 0x4b, 0xbf, 0xee); // // Configuring MPEG audio encoder parameters with unspecified // input stream type may lead to misbehaviour and confusing // results. In most cases the specified parameters will be // overridden by defaults for the input media type. // To archive proper results use this interface on the // audio encoder filter with input pin connected to the valid // source. // DECLARE_INTERFACE_(IAudioEncoderProperties, IUnknown) { // Is PES output enabled? Return TRUE or FALSE STDMETHOD(get_PESOutputEnabled) (THIS_ DWORD *dwEnabled ) PURE; // Enable/disable PES output STDMETHOD(set_PESOutputEnabled) (THIS_ DWORD dwEnabled ) PURE; // Get target compression bitrate in Kbits/s STDMETHOD(get_Bitrate) (THIS_ DWORD *dwBitrate ) PURE; // Set target compression bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_Bitrate) (THIS_ DWORD dwBitrate ) PURE; // Get variable bitrate flag STDMETHOD(get_Variable) (THIS_ DWORD *dwVariable ) PURE; // Set variable bitrate flag STDMETHOD(set_Variable) (THIS_ DWORD dwVariable ) PURE; // Get variable bitrate in Kbits/s STDMETHOD(get_VariableMin) (THIS_ DWORD *dwmin ) PURE; // Set variable bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_VariableMin) (THIS_ DWORD dwmin ) PURE; // Get variable bitrate in Kbits/s STDMETHOD(get_VariableMax) (THIS_ DWORD *dwmax ) PURE; // Set variable bitrate in Kbits/s // Not all numbers available! See spec for details! STDMETHOD(set_VariableMax) (THIS_ DWORD dwmax ) PURE; // Get compression quality STDMETHOD(get_Quality) (THIS_ DWORD *dwQuality ) PURE; // Set compression quality // Not all numbers available! See spec for details! STDMETHOD(set_Quality) (THIS_ DWORD dwQuality ) PURE; // Get VBR quality STDMETHOD(get_VariableQ) (THIS_ DWORD *dwVBRq ) PURE; // Set VBR quality // Not all numbers available! See spec for details! STDMETHOD(set_VariableQ) (THIS_ DWORD dwVBRq ) PURE; // Get source sample rate. Return E_FAIL if input pin // in not connected. STDMETHOD(get_SourceSampleRate) (THIS_ DWORD *dwSampleRate ) PURE; // Get source number of channels. Return E_FAIL if // input pin is not connected. STDMETHOD(get_SourceChannels) (THIS_ DWORD *dwChannels ) PURE; // Get sample rate for compressed audio bitstream STDMETHOD(get_SampleRate) (THIS_ DWORD *dwSampleRate ) PURE; // Set sample rate. See genaudio spec for details STDMETHOD(set_SampleRate) (THIS_ DWORD dwSampleRate ) PURE; // Get channel mode. See genaudio.h for details STDMETHOD(get_ChannelMode) (THIS_ DWORD *dwChannelMode ) PURE; // Set channel mode STDMETHOD(set_ChannelMode) (THIS_ DWORD dwChannelMode ) PURE; // Is CRC enabled? STDMETHOD(get_CRCFlag) (THIS_ DWORD *dwFlag ) PURE; // Enable/disable CRC STDMETHOD(set_CRCFlag) (THIS_ DWORD dwFlag ) PURE; // Force mono STDMETHOD(get_ForceMono) (THIS_ DWORD *dwFlag ) PURE; // Force mono STDMETHOD(set_ForceMono) (THIS_ DWORD dwFlag ) PURE; // Set duration STDMETHOD(get_SetDuration) (THIS_ DWORD *dwFlag ) PURE; // Set duration STDMETHOD(set_SetDuration) (THIS_ DWORD dwFlag ) PURE; // Control 'original' flag STDMETHOD(get_OriginalFlag) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_OriginalFlag) (THIS_ DWORD dwFlag ) PURE; // Control 'copyright' flag STDMETHOD(get_CopyrightFlag) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_CopyrightFlag) (THIS_ DWORD dwFlag ) PURE; // Control 'Enforce VBR Minimum bitrate' flag STDMETHOD(get_EnforceVBRmin) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_EnforceVBRmin) (THIS_ DWORD dwFlag ) PURE; // Control 'Voice' flag STDMETHOD(get_VoiceMode) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_VoiceMode) (THIS_ DWORD dwFlag ) PURE; // Control 'Keep All Frequencies' flag STDMETHOD(get_KeepAllFreq) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_KeepAllFreq) (THIS_ DWORD dwFlag ) PURE; // Control 'Strict ISO complience' flag STDMETHOD(get_StrictISO) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_StrictISO) (THIS_ DWORD dwFlag ) PURE; // Control 'Disable short block' flag STDMETHOD(get_NoShortBlock) (THIS_ DWORD *dwDisable ) PURE; STDMETHOD(set_NoShortBlock) (THIS_ DWORD dwDisable ) PURE; // Control 'Xing VBR Tag' flag STDMETHOD(get_XingTag) (THIS_ DWORD *dwXingTag ) PURE; STDMETHOD(set_XingTag) (THIS_ DWORD dwXingTag ) PURE; // Control 'Forced mid/ side stereo' flag STDMETHOD(get_ForceMS) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_ForceMS) (THIS_ DWORD dwFlag ) PURE; // Control 'ModeFixed' flag STDMETHOD(get_ModeFixed) (THIS_ DWORD *dwFlag ) PURE; STDMETHOD(set_ModeFixed) (THIS_ DWORD dwFlag ) PURE; //Receive the block of encoder //configuration parametres STDMETHOD(get_ParameterBlockSize) (THIS_ BYTE *pcBlock, DWORD *pdwSize ) PURE; // Set encoder configuration parametres STDMETHOD(set_ParameterBlockSize) (THIS_ BYTE *pcBlock, DWORD dwSize ) PURE; // Set default audio encoder parameters depending // on current input stream type STDMETHOD(DefaultAudioEncoderProperties) (THIS_ ) PURE; // By default the modified properties are not saved to // the registry immediately, so the filter needs to be // forced to do this. Omitting this step may lead to // misbehavior and confusing results. STDMETHOD(LoadAudioEncoderPropertiesFromRegistry) (THIS_ ) PURE; STDMETHOD(SaveAudioEncoderPropertiesToRegistry) (THIS_ ) PURE; // Determine whether the filter can be configured. If this // function returns E_FAIL then input format hasn't been // specified and filter behavior is unpredictable. If S_OK, // the filter could be configured with correct values. STDMETHOD(InputTypeDefined) (THIS_ ) PURE; // Reconnects output pin (crucial for Fraunhofer MPEG Layer-3 Decoder) STDMETHOD(ApplyChanges) (THIS_ ) PURE; // Allow output sample overlap in terms of DirectShow // timestamps (i.e. when sample's start time is less // than previous sample's end time). Avi Mux doesn't like this STDMETHOD(set_SampleOverlap) (THIS_ DWORD dwFlag ) PURE; STDMETHOD(get_SampleOverlap) (THIS_ DWORD *dwFlag ) PURE; }; #ifdef __cplusplus } #endif #endif // __IAUDIOPROPERTIES__ lame-3.100/dshow/PropPage_adv.cpp000644 001751 001751 00000026700 10342553511 020266 0ustar00netchildnetchild000000 000000 /* * LAME MP3 encoder for DirectShow * Advanced property page * * Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include #include #include #include "iaudioprops.h" #include "mpegac.h" #include "resource.h" #include "PropPage_adv.h" #include "Reg.h" #define MPG_MD_STEREO 0 #define MPG_MD_JOINT_STEREO 1 #define MPG_MD_DUAL_CHANNEL 2 #define MPG_MD_MONO 3 // Strings which apear in comboboxes const char *chChMode[4] = { "Mono", "Standard stereo", "Joint stereo", "Dual channel"}; //////////////////////////////////////////////////////////////// // CreateInstance //////////////////////////////////////////////////////////////// CUnknown *CMpegAudEncPropertyPageAdv::CreateInstance( LPUNKNOWN punk, HRESULT *phr ) { CMpegAudEncPropertyPageAdv *pNewObject = new CMpegAudEncPropertyPageAdv( punk, phr ); if( pNewObject == NULL ) *phr = E_OUTOFMEMORY; return pNewObject; } //////////////////////////////////////////////////////////////// // Constructor //////////////////////////////////////////////////////////////// CMpegAudEncPropertyPageAdv::CMpegAudEncPropertyPageAdv(LPUNKNOWN punk, HRESULT *phr) : CBasePropertyPage(NAME("Encoder Advanced Property Page"), punk, IDD_ADVPROPS, IDS_AUDIO_ADVANCED_TITLE), m_pAEProps(NULL) { ASSERT(phr); InitCommonControls(); } // // OnConnect // // Give us the filter to communicate with HRESULT CMpegAudEncPropertyPageAdv::OnConnect(IUnknown *pUnknown) { ASSERT(m_pAEProps == NULL); // Ask the filter for it's control interface HRESULT hr = pUnknown->QueryInterface(IID_IAudioEncoderProperties,(void **)&m_pAEProps); if (FAILED(hr) || !m_pAEProps) return E_NOINTERFACE; ASSERT(m_pAEProps); // Get current filter state // m_pAEProps->LoadAudioEncoderPropertiesFromRegistry(); m_pAEProps->get_EnforceVBRmin(&m_dwEnforceVBRmin); m_pAEProps->get_VoiceMode(&m_dwVoiceMode); m_pAEProps->get_KeepAllFreq(&m_dwKeepAllFreq); m_pAEProps->get_StrictISO(&m_dwStrictISO); m_pAEProps->get_NoShortBlock(&m_dwNoShortBlock); m_pAEProps->get_XingTag(&m_dwXingTag); m_pAEProps->get_ChannelMode(&m_dwChannelMode); m_pAEProps->get_ForceMS(&m_dwForceMS); m_pAEProps->get_ModeFixed(&m_dwModeFixed); m_pAEProps->get_SampleOverlap(&m_dwOverlap); m_pAEProps->get_SetDuration(&m_dwSetStop); return NOERROR; } // // OnDisconnect // // Release the interface HRESULT CMpegAudEncPropertyPageAdv::OnDisconnect() { // Release the interface if (m_pAEProps == NULL) return E_UNEXPECTED; m_pAEProps->set_EnforceVBRmin(m_dwEnforceVBRmin); m_pAEProps->set_VoiceMode(m_dwVoiceMode); m_pAEProps->set_KeepAllFreq(m_dwKeepAllFreq); m_pAEProps->set_StrictISO(m_dwStrictISO); m_pAEProps->set_NoShortBlock(m_dwNoShortBlock); m_pAEProps->set_XingTag(m_dwXingTag); m_pAEProps->set_ChannelMode(m_dwChannelMode); m_pAEProps->set_ForceMS(m_dwForceMS); m_pAEProps->set_ModeFixed(m_dwModeFixed); m_pAEProps->set_SampleOverlap(m_dwOverlap); m_pAEProps->set_SetDuration(m_dwSetStop); m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); m_pAEProps->Release(); m_pAEProps = NULL; return NOERROR; } // // OnActivate // // Called on dialog creation HRESULT CMpegAudEncPropertyPageAdv::OnActivate(void) { InitPropertiesDialog(m_hwnd); return NOERROR; } // // OnDeactivate // // Called on dialog destruction HRESULT CMpegAudEncPropertyPageAdv::OnDeactivate(void) { return NOERROR; } //////////////////////////////////////////////////////////////// // OnReceiveMessage - message handler function //////////////////////////////////////////////////////////////// BOOL CMpegAudEncPropertyPageAdv::OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_RADIO_STEREO: case IDC_RADIO_JSTEREO: case IDC_RADIO_DUAL: case IDC_RADIO_MONO: { DWORD dwChannelMode = LOWORD(wParam) - IDC_RADIO_STEREO; CheckRadioButton(hwnd, IDC_RADIO_STEREO, IDC_RADIO_MONO, LOWORD(wParam)); if (dwChannelMode == MPG_MD_JOINT_STEREO) EnableWindow(GetDlgItem(hwnd,IDC_CHECK_FORCE_MS),TRUE); else EnableWindow(GetDlgItem(hwnd,IDC_CHECK_FORCE_MS),FALSE); m_pAEProps->set_ChannelMode(dwChannelMode); SetDirty(); } break; case IDC_CHECK_ENFORCE_MIN: m_pAEProps->set_EnforceVBRmin(IsDlgButtonChecked(hwnd, IDC_CHECK_ENFORCE_MIN)); SetDirty(); break; case IDC_CHECK_VOICE: m_pAEProps->set_VoiceMode(IsDlgButtonChecked(hwnd, IDC_CHECK_VOICE)); SetDirty(); break; case IDC_CHECK_KEEP_ALL_FREQ: m_pAEProps->set_KeepAllFreq(IsDlgButtonChecked(hwnd, IDC_CHECK_KEEP_ALL_FREQ)); SetDirty(); break; case IDC_CHECK_STRICT_ISO: m_pAEProps->set_StrictISO(IsDlgButtonChecked(hwnd, IDC_CHECK_STRICT_ISO)); SetDirty(); break; case IDC_CHECK_DISABLE_SHORT_BLOCK: m_pAEProps->set_NoShortBlock(IsDlgButtonChecked(hwnd, IDC_CHECK_DISABLE_SHORT_BLOCK)); SetDirty(); break; case IDC_CHECK_XING_TAG: m_pAEProps->set_XingTag(IsDlgButtonChecked(hwnd, IDC_CHECK_XING_TAG)); SetDirty(); break; case IDC_CHECK_FORCE_MS: m_pAEProps->set_ForceMS(IsDlgButtonChecked(hwnd, IDC_CHECK_FORCE_MS)); SetDirty(); break; case IDC_CHECK_MODE_FIXED: m_pAEProps->set_ModeFixed(IsDlgButtonChecked(hwnd, IDC_CHECK_MODE_FIXED)); SetDirty(); break; case IDC_CHECK_OVERLAP: m_pAEProps->set_SampleOverlap(IsDlgButtonChecked(hwnd, IDC_CHECK_OVERLAP)); SetDirty(); break; case IDC_CHECK_STOP: m_pAEProps->set_SetDuration(IsDlgButtonChecked(hwnd, IDC_CHECK_STOP)); SetDirty(); break; } return TRUE; case WM_DESTROY: return TRUE; default: return FALSE; } return TRUE; } // // OnApplyChanges // HRESULT CMpegAudEncPropertyPageAdv::OnApplyChanges() { m_pAEProps->get_EnforceVBRmin(&m_dwEnforceVBRmin); m_pAEProps->get_VoiceMode(&m_dwVoiceMode); m_pAEProps->get_KeepAllFreq(&m_dwKeepAllFreq); m_pAEProps->get_StrictISO(&m_dwStrictISO); m_pAEProps->get_ChannelMode(&m_dwChannelMode); m_pAEProps->get_ForceMS(&m_dwForceMS); m_pAEProps->get_NoShortBlock(&m_dwNoShortBlock); m_pAEProps->get_XingTag(&m_dwXingTag); m_pAEProps->get_ModeFixed(&m_dwModeFixed); m_pAEProps->get_SampleOverlap(&m_dwOverlap); m_pAEProps->get_SetDuration(&m_dwSetStop); m_pAEProps->SaveAudioEncoderPropertiesToRegistry(); m_pAEProps->ApplyChanges(); return S_OK; } // // Initialize dialogbox controls with proper values // void CMpegAudEncPropertyPageAdv::InitPropertiesDialog(HWND hwndParent) { EnableControls(hwndParent, TRUE); // // initialize radio bottons // DWORD dwChannelMode; m_pAEProps->get_ChannelMode(&dwChannelMode); CheckRadioButton(hwndParent, IDC_RADIO_STEREO, IDC_RADIO_MONO, IDC_RADIO_STEREO + dwChannelMode); if (dwChannelMode == MPG_MD_JOINT_STEREO) EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), TRUE); else EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), FALSE); // // initialize checkboxes // DWORD dwEnforceVBRmin; m_pAEProps->get_EnforceVBRmin(&dwEnforceVBRmin); CheckDlgButton(hwndParent, IDC_CHECK_ENFORCE_MIN, dwEnforceVBRmin ? BST_CHECKED : BST_UNCHECKED); DWORD dwVoiceMode; m_pAEProps->get_VoiceMode(&dwVoiceMode); CheckDlgButton(hwndParent, IDC_CHECK_VOICE, dwVoiceMode ? BST_CHECKED : BST_UNCHECKED); DWORD dwKeepAllFreq; m_pAEProps->get_KeepAllFreq(&dwKeepAllFreq); CheckDlgButton(hwndParent, IDC_CHECK_KEEP_ALL_FREQ, dwKeepAllFreq ? BST_CHECKED : BST_UNCHECKED); DWORD dwStrictISO; m_pAEProps->get_StrictISO(&dwStrictISO); CheckDlgButton(hwndParent, IDC_CHECK_STRICT_ISO, dwStrictISO ? BST_CHECKED : BST_UNCHECKED); DWORD dwNoShortBlock; m_pAEProps->get_NoShortBlock(&dwNoShortBlock); CheckDlgButton(hwndParent, IDC_CHECK_DISABLE_SHORT_BLOCK, dwNoShortBlock ? BST_CHECKED : BST_UNCHECKED); DWORD dwXingEnabled; m_pAEProps->get_XingTag(&dwXingEnabled); CheckDlgButton(hwndParent, IDC_CHECK_XING_TAG, dwXingEnabled ? BST_CHECKED : BST_UNCHECKED); DWORD dwForceMS; m_pAEProps->get_ForceMS(&dwForceMS); CheckDlgButton(hwndParent, IDC_CHECK_FORCE_MS, dwForceMS ? BST_CHECKED : BST_UNCHECKED); DWORD dwModeFixed; m_pAEProps->get_ModeFixed(&dwModeFixed); CheckDlgButton(hwndParent, IDC_CHECK_MODE_FIXED, dwModeFixed ? BST_CHECKED : BST_UNCHECKED); DWORD dwOverlap; m_pAEProps->get_SampleOverlap(&dwOverlap); CheckDlgButton(hwndParent, IDC_CHECK_OVERLAP, dwOverlap ? BST_CHECKED : BST_UNCHECKED); DWORD dwStopTime; m_pAEProps->get_SetDuration(&dwStopTime); CheckDlgButton(hwndParent, IDC_CHECK_STOP, dwStopTime ? BST_CHECKED : BST_UNCHECKED); } //////////////////////////////////////////////////////////////// // EnableControls //////////////////////////////////////////////////////////////// void CMpegAudEncPropertyPageAdv::EnableControls(HWND hwndParent, bool bEnable) { EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_ENFORCE_MIN), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_STEREO), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_JSTEREO), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_DUAL), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_MONO), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_VOICE), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_KEEP_ALL_FREQ), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_STRICT_ISO), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_DISABLE_SHORT_BLOCK), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_XING_TAG), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_MODE_FIXED), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_OVERLAP), bEnable); EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_STOP), bEnable); } // // SetDirty // // notifies the property page site of changes void CMpegAudEncPropertyPageAdv::SetDirty() { m_bDirty = TRUE; if (m_pPageSite) m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY); } lame-3.100/mpglib/tabinit.c000644 001751 001751 00000013450 13154046620 017137 0ustar00netchildnetchild000000 000000 /* * tabinit.c * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: tabinit.c,v 1.17 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include "tabinit.h" #include "mpg123.h" #ifdef WITH_DMALLOC #include #endif static int table_init_called = 0; real decwin[512 + 32]; static real cos64[16], cos32[8], cos16[4], cos8[2], cos4[1]; real *pnts[] = { cos64, cos32, cos16, cos8, cos4 }; /* *INDENT-OFF* */ static const double dewin[512] = { 0.000000000,-0.000015259,-0.000015259,-0.000015259, -0.000015259,-0.000015259,-0.000015259,-0.000030518, -0.000030518,-0.000030518,-0.000030518,-0.000045776, -0.000045776,-0.000061035,-0.000061035,-0.000076294, -0.000076294,-0.000091553,-0.000106812,-0.000106812, -0.000122070,-0.000137329,-0.000152588,-0.000167847, -0.000198364,-0.000213623,-0.000244141,-0.000259399, -0.000289917,-0.000320435,-0.000366211,-0.000396729, -0.000442505,-0.000473022,-0.000534058,-0.000579834, -0.000625610,-0.000686646,-0.000747681,-0.000808716, -0.000885010,-0.000961304,-0.001037598,-0.001113892, -0.001205444,-0.001296997,-0.001388550,-0.001480103, -0.001586914,-0.001693726,-0.001785278,-0.001907349, -0.002014160,-0.002120972,-0.002243042,-0.002349854, -0.002456665,-0.002578735,-0.002685547,-0.002792358, -0.002899170,-0.002990723,-0.003082275,-0.003173828, -0.003250122,-0.003326416,-0.003387451,-0.003433228, -0.003463745,-0.003479004,-0.003479004,-0.003463745, -0.003417969,-0.003372192,-0.003280640,-0.003173828, -0.003051758,-0.002883911,-0.002700806,-0.002487183, -0.002227783,-0.001937866,-0.001617432,-0.001266479, -0.000869751,-0.000442505, 0.000030518, 0.000549316, 0.001098633, 0.001693726, 0.002334595, 0.003005981, 0.003723145, 0.004486084, 0.005294800, 0.006118774, 0.007003784, 0.007919312, 0.008865356, 0.009841919, 0.010848999, 0.011886597, 0.012939453, 0.014022827, 0.015121460, 0.016235352, 0.017349243, 0.018463135, 0.019577026, 0.020690918, 0.021789551, 0.022857666, 0.023910522, 0.024932861, 0.025909424, 0.026840210, 0.027725220, 0.028533936, 0.029281616, 0.029937744, 0.030532837, 0.031005859, 0.031387329, 0.031661987, 0.031814575, 0.031845093, 0.031738281, 0.031478882, 0.031082153, 0.030517578, 0.029785156, 0.028884888, 0.027801514, 0.026535034, 0.025085449, 0.023422241, 0.021575928, 0.019531250, 0.017257690, 0.014801025, 0.012115479, 0.009231567, 0.006134033, 0.002822876, -0.000686646,-0.004394531,-0.008316040,-0.012420654, -0.016708374,-0.021179199,-0.025817871,-0.030609131, -0.035552979,-0.040634155,-0.045837402,-0.051132202, -0.056533813,-0.061996460,-0.067520142,-0.073059082, -0.078628540,-0.084182739,-0.089706421,-0.095169067, -0.100540161,-0.105819702,-0.110946655,-0.115921021, -0.120697021,-0.125259399,-0.129562378,-0.133590698, -0.137298584,-0.140670776,-0.143676758,-0.146255493, -0.148422241,-0.150115967,-0.151306152,-0.151962280, -0.152069092,-0.151596069,-0.150497437,-0.148773193, -0.146362305,-0.143264771,-0.139450073,-0.134887695, -0.129577637,-0.123474121,-0.116577148,-0.108856201, -0.100311279,-0.090927124,-0.080688477,-0.069595337, -0.057617187,-0.044784546,-0.031082153,-0.016510010, -0.001068115, 0.015228271, 0.032379150, 0.050354004, 0.069168091, 0.088775635, 0.109161377, 0.130310059, 0.152206421, 0.174789429, 0.198059082, 0.221984863, 0.246505737, 0.271591187, 0.297210693, 0.323318481, 0.349868774, 0.376800537, 0.404083252, 0.431655884, 0.459472656, 0.487472534, 0.515609741, 0.543823242, 0.572036743, 0.600219727, 0.628295898, 0.656219482, 0.683914185, 0.711318970, 0.738372803, 0.765029907, 0.791213989, 0.816864014, 0.841949463, 0.866363525, 0.890090942, 0.913055420, 0.935195923, 0.956481934, 0.976852417, 0.996246338, 1.014617920, 1.031936646, 1.048156738, 1.063217163, 1.077117920, 1.089782715, 1.101211548, 1.111373901, 1.120223999, 1.127746582, 1.133926392, 1.138763428, 1.142211914, 1.144287109, 1.144989014 }; /* *INDENT-ON* */ void make_decode_tables(long scaleval) { int i, j, k, kr, divv; real *table, *costab; if (table_init_called) return; table_init_called = 1; for (i = 0; i < 5; i++) { kr = 0x10 >> i; divv = 0x40 >> i; costab = pnts[i]; for (k = 0; k < kr; k++) costab[k] = (real) (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] = (real) (dewin[j] * 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] = (real) (dewin[j] * scaleval); if (i % 32 == 31) table -= 1023; if (i % 64 == 63) scaleval = -scaleval; } } lame-3.100/mpglib/layer1.h000644 001751 001751 00000002110 11351677373 016712 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAYER1_H_INCLUDED #define LAYER1_H_INCLUDED void hip_init_tables_layer1(void); int decode_layer1_sideinfo(PMPSTR mp); int decode_layer1_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point); #endif lame-3.100/mpglib/decode_i386.c000644 001751 001751 00000023765 11351677373 017527 0ustar00netchildnetchild000000 000000 /* * decode_i396.c: Mpeg Layer-1,2,3 audio decoder * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * * Slighlty optimized for machines without autoincrement/decrement. * The performance is highly compiler dependend. Maybe * the decode.c version for 'normal' processor may be faster * even for Intel processors. */ /* $Id: decode_i386.c,v 1.22 2010/03/22 14:30:19 robert Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #ifdef STDC_HEADERS # include # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #if defined(__riscos__) && defined(FPA10) #include "ymath.h" #else #include #endif #include "decode_i386.h" #include "dct64_i386.h" #include "tabinit.h" #ifdef WITH_DMALLOC #include #endif /* old WRITE_SAMPLE_CLIPPED */ #define WRITE_SAMPLE_CLIPPED(TYPE,samples,sum,clip) \ if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \ else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; } \ else { *(samples) = (TYPE)((sum)>0 ? (sum)+0.5 : (sum)-0.5) ; } #define WRITE_SAMPLE_UNCLIPPED(TYPE,samples,sum,clip) \ *samples = (TYPE)sum; /* *INDENT-OFF* */ /* versions: clipped (when TYPE == short) and unclipped (when TYPE == real) of synth_1to1_mono* functions */ #define SYNTH_1TO1_MONO_CLIPCHOICE(TYPE,SYNTH_1TO1) \ TYPE samples_tmp[64]; \ TYPE *tmp1 = samples_tmp; \ int i,ret; \ int pnt1 = 0; \ \ ret = SYNTH_1TO1 (mp,bandPtr,0,(unsigned char *) samples_tmp,&pnt1); \ out += *pnt; \ \ for(i=0;i<32;i++) { \ *( (TYPE *) out) = *tmp1; \ out += sizeof(TYPE); \ tmp1 += 2; \ } \ *pnt += 32*sizeof(TYPE); \ \ return ret; /* *INDENT-ON* */ int synth_1to1_mono(PMPSTR mp, real * bandPtr, unsigned char *out, int *pnt) { SYNTH_1TO1_MONO_CLIPCHOICE(short, synth_1to1) } int synth_1to1_mono_unclipped(PMPSTR mp, real * bandPtr, unsigned char *out, int *pnt) { SYNTH_1TO1_MONO_CLIPCHOICE(real, synth_1to1_unclipped) } /* *INDENT-OFF* */ /* versions: clipped (when TYPE == short) and unclipped (when TYPE == real) of synth_1to1* functions */ #define SYNTH_1TO1_CLIPCHOICE(TYPE,WRITE_SAMPLE) \ static const int step = 2; \ int bo; \ TYPE *samples = (TYPE *) (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; \ \ { \ 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 (TYPE,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 (TYPE,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 (TYPE,samples,sum,clip); \ } \ } \ *pnt += 64*sizeof(TYPE); \ \ return clip; /* *INDENT-ON* */ int synth_1to1(PMPSTR mp, real * bandPtr, int channel, unsigned char *out, int *pnt) { SYNTH_1TO1_CLIPCHOICE(short, WRITE_SAMPLE_CLIPPED) } int synth_1to1_unclipped(PMPSTR mp, real * bandPtr, int channel, unsigned char *out, int *pnt) { SYNTH_1TO1_CLIPCHOICE(real, WRITE_SAMPLE_UNCLIPPED) } lame-3.100/mpglib/AUTHORS000644 001751 001751 00000001134 11351701062 016400 0ustar00netchildnetchild000000 000000 Michael Hipp Author of orignal mpglib version 0.2a. Albert L. Faber Aleksander Korzynski Alexander Leidinger Frank Klemm Gabriel Bouvigne Leigh Smith Mark Taylor Myers Carpenter Naoki Shibata Robert Hegemann Sigbjorn Skjaeret Stefan Bellon Steve Lhomme Takehiro TOMINAGA lame-3.100/mpglib/dct64_i386.h000644 001751 001751 00000001775 11351677373 017232 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MPGLIB_DCT64_I386_H_INCLUDED #define MPGLIB_DCT64_I386_H_INCLUDED #include "common.h" void dct64(real * a, real * b, real * c); #endif lame-3.100/mpglib/mpg123.h000644 001751 001751 00000007317 11351677373 016544 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MPG123_H_INCLUDED #define MPG123_H_INCLUDED #include #ifdef STDC_HEADERS # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #include #if defined(__riscos__) && defined(FPA10) #include "ymath.h" #else #include #endif #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #undef REAL_IS_FLOAT #define REAL_IS_FLOAT #ifdef REAL_IS_FLOAT # define real float #elif defined(REAL_IS_LONG_DOUBLE) # define real long double #else # define real double #endif #define FALSE 0 #define TRUE 1 #define SBLIMIT 32 #define SSLIMIT 18 #define MPG_MD_STEREO 0 #define MPG_MD_JOINT_STEREO 1 #define MPG_MD_DUAL_CHANNEL 2 #define MPG_MD_MONO 3 #define MAXFRAMESIZE 2880 /* AF: ADDED FOR LAYER1/LAYER2 */ #define SCALE_BLOCK 12 /* Pre Shift fo 16 to 8 bit converter table */ #define AUSHIFT (3) struct frame { int stereo; int single; /* single channel (monophonic) */ int lsf; /* 0 = MPEG-1, 1 = MPEG-2/2.5 */ int mpeg25; /* 1 = MPEG-2.5, 0 = MPEG-1/2 */ int header_change; int lay; /* Layer */ int error_protection; /* 1 = CRC-16 code following header */ int bitrate_index; int sampling_frequency; /* sample rate of decompressed audio in Hz */ int padding; int extension; int mode; int mode_ext; int copyright; int original; int emphasis; int framesize; /* computed framesize */ /* AF: ADDED FOR LAYER1/LAYER2 */ int II_sblimit; struct al_table2 const *alloc; int down_sample_sblimit; int down_sample; }; 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]; }; #endif lame-3.100/mpglib/interface.c000644 001751 001751 00000047651 13154046620 017457 0ustar00netchildnetchild000000 000000 /* * interface.c * * Copyright (C) 1999-2012 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: interface.c,v 1.69 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "common.h" #include "interface.h" #include "tabinit.h" #include "layer3.h" #include "lame.h" #include "machine.h" #include "VbrTag.h" #include "decode_i386.h" #include "layer1.h" #include "layer2.h" #ifdef WITH_DMALLOC #include #endif extern void lame_report_def(const char* format, va_list args); /* #define HIP_DEBUG */ int InitMP3(PMPSTR mp) { hip_init_tables_layer1(); hip_init_tables_layer2(); hip_init_tables_layer3(); if (mp) { memset(mp, 0, sizeof(MPSTR)); mp->framesize = 0; mp->num_frames = 0; mp->enc_delay = -1; mp->enc_padding = -1; mp->vbr_header = 0; mp->header_parsed = 0; mp->side_parsed = 0; mp->data_parsed = 0; mp->free_format = 0; mp->old_free_format = 0; mp->ssize = 0; mp->dsize = 0; mp->fsizeold = -1; mp->bsize = 0; mp->head = mp->tail = NULL; mp->fr.single = -1; mp->bsnum = 0; mp->wordpointer = mp->bsspace[mp->bsnum] + 512; mp->bitindex = 0; mp->synth_bo = 1; mp->sync_bitstream = 1; mp->report_dbg = &lame_report_def; mp->report_err = &lame_report_def; mp->report_msg = &lame_report_def; } make_decode_tables(32767); return 1; } void ExitMP3(PMPSTR mp) { if (mp) { struct buf *b, *bn; b = mp->tail; while (b) { free(b->pnt); bn = b->next; free(b); b = bn; } } } static struct buf * addbuf(PMPSTR mp, unsigned char *buf, int size) { struct buf *nbuf; nbuf = (struct buf *) malloc(sizeof(struct buf)); if (!nbuf) { lame_report_fnc(mp->report_err, "hip: addbuf() Out of memory!\n"); return NULL; } nbuf->pnt = (unsigned char *) malloc((size_t) size); if (!nbuf->pnt) { free(nbuf); return NULL; } nbuf->size = size; memcpy(nbuf->pnt, buf, (size_t) 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; } void remove_buf(PMPSTR mp) { struct buf *buf = mp->tail; mp->tail = buf->next; if (mp->tail) mp->tail->prev = NULL; else { mp->tail = mp->head = NULL; } free(buf->pnt); free(buf); } static int read_buf_byte(PMPSTR mp) { unsigned int b; int pos; pos = mp->tail->pos; while (pos >= mp->tail->size) { remove_buf(mp); if (!mp->tail) { lame_report_fnc(mp->report_err, "hip: Fatal error! tried to read past mp buffer\n"); exit(1); } pos = mp->tail->pos; } b = mp->tail->pnt[pos]; mp->bsize--; mp->tail->pos++; return b; } static void read_head(PMPSTR 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; } static void copy_mp(PMPSTR mp, int size, unsigned char *ptr) { int len = 0; while (len < size && mp->tail) { int nlen; int blen = mp->tail->size - mp->tail->pos; if ((size - len) <= blen) { nlen = size - len; } else { nlen = blen; } memcpy(ptr + len, mp->tail->pnt + mp->tail->pos, (size_t) nlen); len += nlen; mp->tail->pos += nlen; mp->bsize -= nlen; if (mp->tail->pos == mp->tail->size) { remove_buf(mp); } } } /* number of bytes needed by GetVbrTag to parse header */ #define XING_HEADER_SIZE 194 /* traverse mp data structure without changing it (just like sync_buffer) pull out Xing bytes call vbr header check code from LAME if we find a header, parse it and also compute the VBR header size if no header, do nothing. bytes = number of bytes before MPEG header. skip this many bytes before starting to read return value: number of bytes in VBR header, including syncword */ static int check_vbr_header(PMPSTR mp, int bytes) { int i, pos; struct buf *buf = mp->tail; unsigned char xing[XING_HEADER_SIZE]; VBRTAGDATA pTagData; pos = buf->pos; /* skip to valid header */ for (i = 0; i < bytes; ++i) { while (pos >= buf->size) { buf = buf->next; if (!buf) return -1; /* fatal error */ pos = buf->pos; } ++pos; } /* now read header */ for (i = 0; i < XING_HEADER_SIZE; ++i) { while (pos >= buf->size) { buf = buf->next; if (!buf) return -1; /* fatal error */ pos = buf->pos; } xing[i] = buf->pnt[pos]; ++pos; } /* check first bytes for Xing header */ mp->vbr_header = GetVbrTag(&pTagData, xing); if (mp->vbr_header) { mp->num_frames = pTagData.frames; mp->enc_delay = pTagData.enc_delay; mp->enc_padding = pTagData.enc_padding; /* lame_report_fnc(mp->report_msg,"hip: delays: %i %i \n",mp->enc_delay,mp->enc_padding); */ /* lame_report_fnc(mp->report_msg,"hip: Xing VBR header dectected. MP3 file has %i frames\n", pTagData.frames); */ if (pTagData.headersize < 1) return 1; return pTagData.headersize; } return 0; } static int sync_buffer(PMPSTR mp, int free_match) { /* traverse mp structure without modifying pointers, looking * for a frame valid header. * if free_format, valid header must also have the same * samplerate. * return number of bytes in mp, before the header * return -1 if header is not found */ unsigned int b[4] = { 0, 0, 0, 0 }; int i, h, pos; struct buf *buf = mp->tail; if (!buf) return -1; pos = buf->pos; for (i = 0; i < mp->bsize; i++) { /* get 4 bytes */ b[0] = b[1]; b[1] = b[2]; b[2] = b[3]; while (pos >= buf->size) { buf = buf->next; if (!buf) { return -1; /* not enough data to read 4 bytes */ } pos = buf->pos; } b[3] = buf->pnt[pos]; ++pos; if (i >= 3) { struct frame *fr = &mp->fr; unsigned long head; head = b[0]; head <<= 8; head |= b[1]; head <<= 8; head |= b[2]; head <<= 8; head |= b[3]; h = head_check(head, fr->lay); if (h && free_match) { /* just to be even more thorough, match the sample rate */ int mode, stereo, sampling_frequency, mpeg25, lsf; if (head & (1 << 20)) { lsf = (head & (1 << 19)) ? 0x0 : 0x1; mpeg25 = 0; } else { lsf = 1; mpeg25 = 1; } mode = ((head >> 6) & 0x3); stereo = (mode == MPG_MD_MONO) ? 1 : 2; if (mpeg25) sampling_frequency = 6 + ((head >> 10) & 0x3); else sampling_frequency = ((head >> 10) & 0x3) + (lsf * 3); h = ((stereo == fr->stereo) && (lsf == fr->lsf) && (mpeg25 == fr->mpeg25) && (sampling_frequency == fr->sampling_frequency)); } if (h) { return i - 3; } } } return -1; } void decode_reset(PMPSTR mp) { #if 0 remove_buf(mp); /* start looking for next frame */ /* mp->fsizeold = mp->framesize; */ mp->fsizeold = -1; mp->old_free_format = mp->free_format; mp->framesize = 0; mp->header_parsed = 0; mp->side_parsed = 0; mp->data_parsed = 0; mp->sync_bitstream = 1; /* TODO check if this is right */ #else InitMP3(mp); /* Less error prone to just to reinitialise. */ #endif } int audiodata_precedesframes(PMPSTR mp) { if (mp->fr.lay == 3) return layer3_audiodata_precedesframes(mp); else return 0; /* For Layer 1 & 2 the audio data starts at the frame that describes it, so no audio data precedes. */ } static int decodeMP3_clipchoice(PMPSTR mp, unsigned char *in, int isize, char *out, int *done, int (*synth_1to1_mono_ptr) (PMPSTR, real *, unsigned char *, int *), int (*synth_1to1_ptr) (PMPSTR, real *, int, unsigned char *, int *)) { int i, iret, bits, bytes; if (in && isize && addbuf(mp, in, isize) == NULL) return MP3_ERR; /* First decode header */ if (!mp->header_parsed) { if (mp->fsizeold == -1 || mp->sync_bitstream) { int vbrbytes; mp->sync_bitstream = 0; /* This is the very first call. sync with anything */ /* bytes= number of bytes before header */ bytes = sync_buffer(mp, 0); /* now look for Xing VBR header */ if (mp->bsize >= bytes + XING_HEADER_SIZE) { /* vbrbytes = number of bytes in entire vbr header */ vbrbytes = check_vbr_header(mp, bytes); } else { /* not enough data to look for Xing header */ #ifdef HIP_DEBUG lame_report_fnc(mp->report_dbg, "hip: not enough data to look for Xing header\n"); #endif return MP3_NEED_MORE; } if (mp->vbr_header) { /* do we have enough data to parse entire Xing header? */ if (bytes + vbrbytes > mp->bsize) { /* lame_report_fnc(mp->report_err,"hip: not enough data to parse entire Xing header\n"); */ return MP3_NEED_MORE; } /* read in Xing header. Buffer data in case it * is used by a non zero main_data_begin for the next * frame, but otherwise dont decode Xing header */ #ifdef HIP_DEBUG lame_report_fnc(mp->report_dbg, "hip: found xing header, skipping %i bytes\n", vbrbytes + bytes); #endif for (i = 0; i < vbrbytes + bytes; ++i) read_buf_byte(mp); /* now we need to find another syncword */ /* just return and make user send in more data */ return MP3_NEED_MORE; } } else { /* match channels, samplerate, etc, when syncing */ bytes = sync_buffer(mp, 1); } /* buffer now synchronized */ if (bytes < 0) { /* lame_report_fnc(mp->report_err,"hip: need more bytes %d\n", bytes); */ return MP3_NEED_MORE; } if (bytes > 0) { /* there were some extra bytes in front of header. * bitstream problem, but we are now resynced * should try to buffer previous data in case new * frame has nonzero main_data_begin, but we need * to make sure we do not overflow buffer */ int size; if (mp->fsizeold != -1) { lame_report_fnc(mp->report_err, "hip: bitstream problem, resyncing skipping %d bytes...\n", bytes); } mp->old_free_format = 0; #if 1 /* FIXME: correct ??? */ mp->sync_bitstream = 1; #endif /* skip some bytes, buffer the rest */ size = (int) (mp->wordpointer - (mp->bsspace[mp->bsnum] + 512)); if (size > MAXFRAMESIZE) { /* wordpointer buffer is trashed. probably cant recover, but try anyway */ lame_report_fnc(mp->report_err, "hip: wordpointer trashed. size=%i (%i) bytes=%i \n", size, MAXFRAMESIZE, bytes); size = 0; mp->wordpointer = mp->bsspace[mp->bsnum] + 512; } /* buffer contains 'size' data right now we want to add 'bytes' worth of data, but do not exceed MAXFRAMESIZE, so we through away 'i' bytes */ i = (size + bytes) - MAXFRAMESIZE; for (; i > 0; --i) { --bytes; read_buf_byte(mp); } copy_mp(mp, bytes, mp->wordpointer); mp->fsizeold += bytes; } read_head(mp); if (!decode_header(mp, &mp->fr, mp->header)) return MP3_ERR; mp->header_parsed = 1; mp->framesize = mp->fr.framesize; mp->free_format = (mp->framesize == 0); if (mp->fr.lsf) mp->ssize = (mp->fr.stereo == 1) ? 9 : 17; else mp->ssize = (mp->fr.stereo == 1) ? 17 : 32; if (mp->fr.error_protection) mp->ssize += 2; mp->bsnum = 1 - mp->bsnum; /* toggle buffer */ mp->wordpointer = mp->bsspace[mp->bsnum] + 512; mp->bitindex = 0; /* for very first header, never parse rest of data */ if (mp->fsizeold == -1) { #ifdef HIP_DEBUG lame_report_fnc(mp->report_dbg, "hip: not parsing the rest of the data of the first header\n"); #endif return MP3_NEED_MORE; } } /* end of header parsing block */ /* now decode side information */ if (!mp->side_parsed) { /* Layer 3 only */ if (mp->fr.lay == 3) { if (mp->bsize < mp->ssize) return MP3_NEED_MORE; copy_mp(mp, mp->ssize, mp->wordpointer); if (mp->fr.error_protection) getbits(mp, 16); bits = decode_layer3_sideinfo(mp); /* bits = actual number of bits needed to parse this frame */ /* can be negative, if all bits needed are in the reservoir */ if (bits < 0) bits = 0; /* read just as many bytes as necessary before decoding */ mp->dsize = (bits + 7) / 8; if (!mp->free_format) { /* do not read more than framsize data */ int framesize = mp->fr.framesize - mp->ssize; if (mp->dsize > framesize) { lame_report_fnc(mp->report_err, "hip: error audio data exceeds framesize by %d bytes\n", mp->dsize - framesize); mp->dsize = framesize; } } #ifdef HIP_DEBUG lame_report_fnc(mp->report_dbg, "hip: %d bits needed to parse layer III frame, number of bytes to read before decoding dsize = %d\n", bits, mp->dsize); #endif /* this will force mpglib to read entire frame before decoding */ /* mp->dsize= mp->framesize - mp->ssize; */ } else { /* Layers 1 and 2 */ /* check if there is enough input data */ if (mp->fr.framesize > mp->bsize) return MP3_NEED_MORE; /* takes care that the right amount of data is copied into wordpointer */ mp->dsize = mp->fr.framesize; mp->ssize = 0; } mp->side_parsed = 1; } /* now decode main data */ iret = MP3_NEED_MORE; if (!mp->data_parsed) { if (mp->dsize > mp->bsize) { return MP3_NEED_MORE; } copy_mp(mp, mp->dsize, mp->wordpointer); *done = 0; /*do_layer3(&mp->fr,(unsigned char *) out,done); */ switch (mp->fr.lay) { case 1: if (mp->fr.error_protection) getbits(mp, 16); if (decode_layer1_frame(mp, (unsigned char *) out, done) < 0) return MP3_ERR; break; case 2: if (mp->fr.error_protection) getbits(mp, 16); decode_layer2_frame(mp, (unsigned char *) out, done); break; case 3: decode_layer3_frame(mp, (unsigned char *) out, done, synth_1to1_mono_ptr, synth_1to1_ptr); break; default: lame_report_fnc(mp->report_err, "hip: invalid layer %d\n", mp->fr.lay); } mp->wordpointer = mp->bsspace[mp->bsnum] + 512 + mp->ssize + mp->dsize; mp->data_parsed = 1; iret = MP3_OK; } /* remaining bits are ancillary data, or reservoir for next frame * If free format, scan stream looking for next frame to determine * mp->framesize */ if (mp->free_format) { if (mp->old_free_format) { /* free format. bitrate must not vary */ mp->framesize = mp->fsizeold_nopadding + (mp->fr.padding); } else { bytes = sync_buffer(mp, 1); if (bytes < 0) return iret; mp->framesize = bytes + mp->ssize + mp->dsize; mp->fsizeold_nopadding = mp->framesize - mp->fr.padding; #if 0 lame_report_fnc(mp->report_dbg,"hip: freeformat bitstream: estimated bitrate=%ikbs \n", 8*(4+mp->framesize)*freqs[mp->fr.sampling_frequency]/ (1000*576*(2-mp->fr.lsf))); #endif } } /* buffer the ancillary data and reservoir for next frame */ bytes = mp->framesize - (mp->ssize + mp->dsize); if (bytes > mp->bsize) { return iret; } if (bytes > 0) { int size; #if 1 /* FIXME: while loop OK ??? */ while (bytes > 512) { read_buf_byte(mp); bytes--; mp->framesize--; } #endif copy_mp(mp, bytes, mp->wordpointer); mp->wordpointer += bytes; size = (int) (mp->wordpointer - (mp->bsspace[mp->bsnum] + 512)); if (size > MAXFRAMESIZE) { lame_report_fnc(mp->report_err, "hip: fatal error. MAXFRAMESIZE not large enough.\n"); } } /* the above frame is completely parsed. start looking for next frame */ mp->fsizeold = mp->framesize; mp->old_free_format = mp->free_format; mp->framesize = 0; mp->header_parsed = 0; mp->side_parsed = 0; mp->data_parsed = 0; return iret; } int decodeMP3(PMPSTR mp, unsigned char *in, int isize, char *out, int osize, int *done) { if (osize < 4608) { lame_report_fnc(mp->report_err, "hip: Insufficient memory for decoding buffer %d\n", osize); return MP3_ERR; } /* passing pointers to the functions which clip the samples */ return decodeMP3_clipchoice(mp, in, isize, out, done, synth_1to1_mono, synth_1to1); } int decodeMP3_unclipped(PMPSTR mp, unsigned char *in, int isize, char *out, int osize, int *done) { /* we forbid input with more than 1152 samples per channel for output in unclipped mode */ if (osize < (int) (1152 * 2 * sizeof(real))) { lame_report_fnc(mp->report_err, "hip: out space too small for unclipped mode\n"); return MP3_ERR; } /* passing pointers to the functions which don't clip the samples */ return decodeMP3_clipchoice(mp, in, isize, out, done, synth_1to1_mono_unclipped, synth_1to1_unclipped); } lame-3.100/mpglib/layer2.h000644 001751 001751 00000002205 11351677373 016720 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAYER2_H_INCLUDED #define LAYER2_H_INCLUDED struct al_table2 { short bits; short d; }; void hip_init_tables_layer2(void); int decode_layer2_sideinfo(PMPSTR mp); int decode_layer2_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point); #endif lame-3.100/mpglib/common.c000644 001751 001751 00000023371 13154046620 017000 0ustar00netchildnetchild000000 000000 /* * common.c: some common bitstream operations * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: common.c,v 1.42 2017/08/19 14:20:27 robert Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #ifdef HAVE_FCNTL_H #include #endif #ifdef macintosh #include #include #else #include #include #endif #include #include "common.h" #ifdef WITH_DMALLOC #include #endif /* In C++ the array first must be prototyped, why ? */ /* *INDENT-OFF* */ 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,} } }; const long freqs[9] = { 44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000 }; /* *INDENT-ON* */ real muls[27][64]; #if 0 static void get_II_stuff(struct frame *fr) { /* *INDENT-OFF* */ static const int translate [3] [2] [16] = /* char ? */ { { { 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 } } }; /* *INDENT-ON* */ int table, sblim; static const struct al_table2 *tables[5] = { alloc_0, alloc_1, alloc_2, alloc_3, alloc_4 }; static 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; } #endif #define HDRCMPMASK 0xfffffd00 #define MAX_INPUT_FRAMESIZE 4096 int head_check(unsigned long head, int check_layer) { /* look for a valid header. if check_layer > 0, then require that nLayer = check_layer. */ /* bits 13-14 = layer 3 */ int nLayer = 4 - ((head >> 17) & 3); if ((head & 0xffe00000) != 0xffe00000) { /* syncword */ return FALSE; } if (nLayer == 4) return FALSE; if (check_layer > 0 && nLayer != check_layer) return FALSE; if (((head >> 12) & 0xf) == 0xf) { /* bits 16,17,18,19 = 1111 invalid bitrate */ return FALSE; } if (((head >> 10) & 0x3) == 0x3) { /* bits 20,21 = 11 invalid sampling freq */ return FALSE; } if ((head & 0x3) == 0x2) /* invalid emphasis */ return FALSE; return TRUE; } #if 0 static void print_header(PMPSTR mp, struct frame *fr) { static const char *modes[4] = { "Stereo", "Joint-Stereo", "Dual-Channel", "Single-Channel" }; static const char *layers[4] = { "Unknown", "I", "II", "III" }; lame_report_fnc(mp->report_msg, "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); lame_report_fnc(mp->report_msg, "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); lame_report_fnc(mp->report_msg, "Bitrate: %d Kbits/s, Extension value: %d\n", tabsel_123[fr->lsf][fr->lay - 1][fr->bitrate_index], fr->extension); } static void print_header_compact(PMPSTR mp, struct frame *fr) { static const char *modes[4] = { "stereo", "joint-stereo", "dual-channel", "mono" }; static const char *layers[4] = { "Unknown", "I", "II", "III" }; lame_report_fnc(mp->report_err, "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 /* * decode a header and write the information * into the frame structure */ int decode_header(PMPSTR mp, struct frame *fr, unsigned long newhead) { 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->lay != 3 && fr->mpeg25) { lame_report_fnc(mp->report_err, "MPEG-2.5 is supported by Layer3 only\n"); return 0; } if (((newhead >> 10) & 0x3) == 0x3) { lame_report_fnc(mp->report_err, "Stream error\n"); return 0; } 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; switch (fr->lay) { case 1: 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; fr->down_sample = 0; fr->down_sample_sblimit = SBLIMIT >> (fr->down_sample); break; case 2: fr->framesize = (long) tabsel_123[fr->lsf][1][fr->bitrate_index] * 144000; fr->framesize /= freqs[fr->sampling_frequency]; fr->framesize += fr->padding - 4; fr->down_sample = 0; fr->down_sample_sblimit = SBLIMIT >> (fr->down_sample); break; 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 if (fr->framesize > MAX_INPUT_FRAMESIZE) { lame_report_fnc(mp->report_err, "Frame size too big.\n"); fr->framesize = MAX_INPUT_FRAMESIZE; return (0); } if (fr->bitrate_index == 0) fr->framesize = 0; else { 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: lame_report_fnc(mp->report_err, "Sorry, layer %d not supported\n", fr->lay); return (0); } /* print_header(mp, fr); */ return 1; } unsigned int getbits(PMPSTR mp, int number_of_bits) { unsigned long rval; if (number_of_bits <= 0 || !mp->wordpointer) return 0; { rval = mp->wordpointer[0]; rval <<= 8; rval |= mp->wordpointer[1]; rval <<= 8; rval |= mp->wordpointer[2]; rval <<= mp->bitindex; rval &= 0xffffff; mp->bitindex += number_of_bits; rval >>= (24 - number_of_bits); mp->wordpointer += (mp->bitindex >> 3); mp->bitindex &= 7; } return rval; } unsigned int getbits_fast(PMPSTR mp, int number_of_bits) { unsigned long rval; { rval = mp->wordpointer[0]; rval <<= 8; rval |= mp->wordpointer[1]; rval <<= mp->bitindex; rval &= 0xffff; mp->bitindex += number_of_bits; rval >>= (16 - number_of_bits); mp->wordpointer += (mp->bitindex >> 3); mp->bitindex &= 7; } return rval; } unsigned char get_leq_8_bits(PMPSTR mp, unsigned int number_of_bits) { assert(number_of_bits <= 8); return (unsigned char) getbits_fast(mp, number_of_bits); } unsigned short get_leq_16_bits(PMPSTR mp, unsigned int number_of_bits) { assert(number_of_bits <= 16); return (unsigned short) getbits_fast(mp, number_of_bits); } int set_pointer(PMPSTR mp, long backstep) { unsigned char *bsbufold; if (mp->fsizeold < 0 && backstep > 0) { lame_report_fnc(mp->report_err, "hip: Can't step back %ld bytes!\n", backstep); return MP3_ERR; } bsbufold = mp->bsspace[1 - mp->bsnum] + 512; mp->wordpointer -= backstep; if (backstep) memcpy(mp->wordpointer, bsbufold + mp->fsizeold - backstep, (size_t) backstep); mp->bitindex = 0; return MP3_OK; } lame-3.100/mpglib/layer3.h000644 001751 001751 00000002452 11351677373 016725 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAYER3_H_INCLUDED #define LAYER3_H_INCLUDED void hip_init_tables_layer3(void); int decode_layer3_sideinfo(PMPSTR mp); int decode_layer3_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point, int (*synth_1to1_mono_ptr) (PMPSTR, real *, unsigned char *, int *), int (*synth_1to1_ptr) (PMPSTR, real *, int, unsigned char *, int *)); int layer3_audiodata_precedesframes(PMPSTR mp); #endif lame-3.100/mpglib/depcomp000755 001751 001751 00000056017 13126231407 016722 0ustar00netchildnetchild000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/mpglib/decode_i386.h000644 001751 001751 00000002460 11351677373 017521 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef DECODE_I386_H_INCLUDED #define DECODE_I386_H_INCLUDED #include "common.h" int synth_1to1_mono(PMPSTR mp, real * bandPtr, unsigned char *out, int *pnt); int synth_1to1(PMPSTR mp, real * bandPtr, int channel, unsigned char *out, int *pnt); int synth_1to1_mono_unclipped(PMPSTR mp, real * bandPtr, unsigned char *out, int *pnt); int synth_1to1_unclipped(PMPSTR mp, real * bandPtr, int channel, unsigned char *out, int *pnt); #endif lame-3.100/mpglib/huffman.h000644 001751 001751 00000041156 11351677373 017156 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * huffman tables ... recalcualted to work with my optimzed * decoder scheme (MH) * * probably we could save a few bytes of memory, because the * smaller tables are often the part of a bigger table */ /* *INDENT-OFF* */ struct newhuff { const unsigned int linbits; const short * const table; }; static const short tab0[] = { 0 }; static const short tab1[] = { -5, -3, -1, 17, 1, 16, 0 }; static const short tab2[] = { -15, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 17, -1, 1, 16, 0 }; static const short tab3[] = { -13, -11, -9, -5, -3, -1, 34, 2, 18, -1, 33, 32, 16, 17, -1, 1, 0 }; static const short tab5[] = { -29, -25, -23, -15, -7, -5, -3, -1, 51, 35, 50, 49, -3, -1, 19, 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; static const short tab6[] = { -25, -19, -13, -9, -5, -3, -1, 51, 3, 35, -1, 50, 48, -1, 19, 49, -3, -1, 34, 2, 18, -3, -1, 33, 32, 1, -1, 17, -1, 16, 0 }; static const short tab7[] = { -69, -65, -57, -39, -29, -17, -11, -7, -3, -1, 85, 69, -1, 84, 83, -1, 53, 68, -3, -1, 37, 82, 21, -5, -1, 81, -1, 5, 52, -1, 80, -1, 67, 51, -5, -3, -1, 36, 66, 20, -1, 65, 64, -11, -7, -3, -1, 4, 35, -1, 50, 3, -1, 19, 49, -3, -1, 48, 34, 18, -5, -1, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; static const short tab8[] = { -65, -63, -59, -45, -31, -19, -13, -7, -5, -3, -1, 85, 84, 69, 83, -3, -1, 53, 68, 37, -3, -1, 82, 5, 21, -5, -1, 81, -1, 52, 67, -3, -1, 80, 51, 36, -5, -3, -1, 66, 20, 65, -3, -1, 4, 64, -1, 35, 50, -9, -7, -3, -1, 19, 49, -1, 3, 48, 34, -1, 2, 32, -1, 18, 33, 17, -3, -1, 1, 16, 0 }; static const short tab9[] = { -63, -53, -41, -29, -19, -11, -5, -3, -1, 85, 69, 53, -1, 83, -1, 84, 5, -3, -1, 68, 37, -1, 82, 21, -3, -1, 81, 52, -1, 67, -1, 80, 4, -7, -3, -1, 36, 66, -1, 51, 64, -1, 20, 65, -5, -3, -1, 35, 50, 19, -1, 49, -1, 3, 48, -5, -3, -1, 34, 2, 18, -1, 33, 32, -3, -1, 17, 1, -1, 16, 0 }; static const short tab10[] = { -125,-121,-111, -83, -55, -35, -21, -13, -7, -3, -1, 119, 103, -1, 118, 87, -3, -1, 117, 102, 71, -3, -1, 116, 86, -1, 101, 55, -9, -3, -1, 115, 70, -3, -1, 85, 84, 99, -1, 39, 114, -11, -5, -3, -1, 100, 7, 112, -1, 98, -1, 69, 53, -5, -1, 6, -1, 83, 68, 23, -17, -5, -1, 113, -1, 54, 38, -5, -3, -1, 37, 82, 21, -1, 81, -1, 52, 67, -3, -1, 22, 97, -1, 96, -1, 5, 80, -19, -11, -7, -3, -1, 36, 66, -1, 51, 4, -1, 20, 65, -3, -1, 64, 35, -1, 50, 3, -3, -1, 19, 49, -1, 48, 34, -7, -3, -1, 18, 33, -1, 2, 32, 17, -1, 1, 16, 0 }; static const short tab11[] = { -121,-113, -89, -59, -43, -27, -17, -7, -3, -1, 119, 103, -1, 118, 117, -3, -1, 102, 71, -1, 116, -1, 87, 85, -5, -3, -1, 86, 101, 55, -1, 115, 70, -9, -7, -3, -1, 69, 84, -1, 53, 83, 39, -1, 114, -1, 100, 7, -5, -1, 113, -1, 23, 112, -3, -1, 54, 99, -1, 96, -1, 68, 37, -13, -7, -5, -3, -1, 82, 5, 21, 98, -3, -1, 38, 6, 22, -5, -1, 97, -1, 81, 52, -5, -1, 80, -1, 67, 51, -1, 36, 66, -15, -11, -7, -3, -1, 20, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -5, -3, -1, 3, 48, 34, 33, -5, -1, 18, -1, 2, 32, 17, -3, -1, 1, 16, 0 }; static const short tab12[] = { -115, -99, -73, -45, -27, -17, -9, -5, -3, -1, 119, 103, 118, -1, 87, 117, -3, -1, 102, 71, -1, 116, 101, -3, -1, 86, 55, -3, -1, 115, 85, 39, -7, -3, -1, 114, 70, -1, 100, 23, -5, -1, 113, -1, 7, 112, -1, 54, 99, -13, -9, -3, -1, 69, 84, -1, 68, -1, 6, 5, -1, 38, 98, -5, -1, 97, -1, 22, 96, -3, -1, 53, 83, -1, 37, 82, -17, -7, -3, -1, 21, 81, -1, 52, 67, -5, -3, -1, 80, 4, 36, -1, 66, 20, -3, -1, 51, 65, -1, 35, 50, -11, -7, -5, -3, -1, 64, 3, 48, 19, -1, 49, 34, -1, 18, 33, -7, -5, -3, -1, 2, 32, 0, 17, -1, 1, 16 }; static const short tab13[] = { -509,-503,-475,-405,-333,-265,-205,-153,-115, -83, -53, -35, -21, -13, -9, -7, -5, -3, -1, 254, 252, 253, 237, 255, -1, 239, 223, -3, -1, 238, 207, -1, 222, 191, -9, -3, -1, 251, 206, -1, 220, -1, 175, 233, -1, 236, 221, -9, -5, -3, -1, 250, 205, 190, -1, 235, 159, -3, -1, 249, 234, -1, 189, 219, -17, -9, -3, -1, 143, 248, -1, 204, -1, 174, 158, -5, -1, 142, -1, 127, 126, 247, -5, -1, 218, -1, 173, 188, -3, -1, 203, 246, 111, -15, -7, -3, -1, 232, 95, -1, 157, 217, -3, -1, 245, 231, -1, 172, 187, -9, -3, -1, 79, 244, -3, -1, 202, 230, 243, -1, 63, -1, 141, 216, -21, -9, -3, -1, 47, 242, -3, -1, 110, 156, 15, -5, -3, -1, 201, 94, 171, -3, -1, 125, 215, 78, -11, -5, -3, -1, 200, 214, 62, -1, 185, -1, 155, 170, -1, 31, 241, -23, -13, -5, -1, 240, -1, 186, 229, -3, -1, 228, 140, -1, 109, 227, -5, -1, 226, -1, 46, 14, -1, 30, 225, -15, -7, -3, -1, 224, 93, -1, 213, 124, -3, -1, 199, 77, -1, 139, 184, -7, -3, -1, 212, 154, -1, 169, 108, -1, 198, 61, -37, -21, -9, -5, -3, -1, 211, 123, 45, -1, 210, 29, -5, -1, 183, -1, 92, 197, -3, -1, 153, 122, 195, -7, -5, -3, -1, 167, 151, 75, 209, -3, -1, 13, 208, -1, 138, 168, -11, -7, -3, -1, 76, 196, -1, 107, 182, -1, 60, 44, -3, -1, 194, 91, -3, -1, 181, 137, 28, -43, -23, -11, -5, -1, 193, -1, 152, 12, -1, 192, -1, 180, 106, -5, -3, -1, 166, 121, 59, -1, 179, -1, 136, 90, -11, -5, -1, 43, -1, 165, 105, -1, 164, -1, 120, 135, -5, -1, 148, -1, 119, 118, 178, -11, -3, -1, 27, 177, -3, -1, 11, 176, -1, 150, 74, -7, -3, -1, 58, 163, -1, 89, 149, -1, 42, 162, -47, -23, -9, -3, -1, 26, 161, -3, -1, 10, 104, 160, -5, -3, -1, 134, 73, 147, -3, -1, 57, 88, -1, 133, 103, -9, -3, -1, 41, 146, -3, -1, 87, 117, 56, -5, -1, 131, -1, 102, 71, -3, -1, 116, 86, -1, 101, 115, -11, -3, -1, 25, 145, -3, -1, 9, 144, -1, 72, 132, -7, -5, -1, 114, -1, 70, 100, 40, -1, 130, 24, -41, -27, -11, -5, -3, -1, 55, 39, 23, -1, 113, -1, 85, 7, -7, -3, -1, 112, 54, -1, 99, 69, -3, -1, 84, 38, -1, 98, 53, -5, -1, 129, -1, 8, 128, -3, -1, 22, 97, -1, 6, 96, -13, -9, -5, -3, -1, 83, 68, 37, -1, 82, 5, -1, 21, 81, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -19, -11, -5, -1, 65, -1, 4, 64, -3, -1, 35, 50, 19, -3, -1, 49, 3, -1, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16, 0 }; static const short tab15[] = { -495,-445,-355,-263,-183,-115, -77, -43, -27, -13, -7, -3, -1, 255, 239, -1, 254, 223, -1, 238, -1, 253, 207, -7, -3, -1, 252, 222, -1, 237, 191, -1, 251, -1, 206, 236, -7, -3, -1, 221, 175, -1, 250, 190, -3, -1, 235, 205, -1, 220, 159, -15, -7, -3, -1, 249, 234, -1, 189, 219, -3, -1, 143, 248, -1, 204, 158, -7, -3, -1, 233, 127, -1, 247, 173, -3, -1, 218, 188, -1, 111, -1, 174, 15, -19, -11, -3, -1, 203, 246, -3, -1, 142, 232, -1, 95, 157, -3, -1, 245, 126, -1, 231, 172, -9, -3, -1, 202, 187, -3, -1, 217, 141, 79, -3, -1, 244, 63, -1, 243, 216, -33, -17, -9, -3, -1, 230, 47, -1, 242, -1, 110, 240, -3, -1, 31, 241, -1, 156, 201, -7, -3, -1, 94, 171, -1, 186, 229, -3, -1, 125, 215, -1, 78, 228, -15, -7, -3, -1, 140, 200, -1, 62, 109, -3, -1, 214, 227, -1, 155, 185, -7, -3, -1, 46, 170, -1, 226, 30, -5, -1, 225, -1, 14, 224, -1, 93, 213, -45, -25, -13, -7, -3, -1, 124, 199, -1, 77, 139, -1, 212, -1, 184, 154, -7, -3, -1, 169, 108, -1, 198, 61, -1, 211, 210, -9, -5, -3, -1, 45, 13, 29, -1, 123, 183, -5, -1, 209, -1, 92, 208, -1, 197, 138, -17, -7, -3, -1, 168, 76, -1, 196, 107, -5, -1, 182, -1, 153, 12, -1, 60, 195, -9, -3, -1, 122, 167, -1, 166, -1, 192, 11, -1, 194, -1, 44, 91, -55, -29, -15, -7, -3, -1, 181, 28, -1, 137, 152, -3, -1, 193, 75, -1, 180, 106, -5, -3, -1, 59, 121, 179, -3, -1, 151, 136, -1, 43, 90, -11, -5, -1, 178, -1, 165, 27, -1, 177, -1, 176, 105, -7, -3, -1, 150, 74, -1, 164, 120, -3, -1, 135, 58, 163, -17, -7, -3, -1, 89, 149, -1, 42, 162, -3, -1, 26, 161, -3, -1, 10, 160, 104, -7, -3, -1, 134, 73, -1, 148, 57, -5, -1, 147, -1, 119, 9, -1, 88, 133, -53, -29, -13, -7, -3, -1, 41, 103, -1, 118, 146, -1, 145, -1, 25, 144, -7, -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 71, -7, -3, -1, 40, 130, -1, 24, 129, -7, -3, -1, 116, 8, -1, 128, 86, -3, -1, 101, 55, -1, 115, 70, -17, -7, -3, -1, 39, 114, -1, 100, 23, -3, -1, 85, 113, -3, -1, 7, 112, 54, -7, -3, -1, 99, 69, -1, 84, 38, -3, -1, 98, 22, -3, -1, 6, 96, 53, -33, -19, -9, -5, -1, 97, -1, 83, 68, -1, 37, 82, -3, -1, 21, 81, -3, -1, 5, 80, 52, -7, -3, -1, 67, 36, -1, 66, 51, -1, 65, -1, 20, 4, -9, -3, -1, 35, 50, -3, -1, 64, 3, 19, -3, -1, 49, 48, 34, -9, -7, -3, -1, 18, 33, -1, 2, 32, 17, -3, -1, 1, 16, 0 }; static const short tab16[] = { -509,-503,-461,-323,-103, -37, -27, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 175, -1, 250, 159, -3, -1, 249, 248, 143, -7, -3, -1, 127, 247, -1, 111, 246, 255, -9, -5, -3, -1, 95, 245, 79, -1, 244, 243, -53, -1, 240, -1, 63, -29, -19, -13, -7, -5, -1, 206, -1, 236, 221, 222, -1, 233, -1, 234, 217, -1, 238, -1, 237, 235, -3, -1, 190, 205, -3, -1, 220, 219, 174, -11, -5, -1, 204, -1, 173, 218, -3, -1, 126, 172, 202, -5, -3, -1, 201, 125, 94, 189, 242, -93, -5, -3, -1, 47, 15, 31, -1, 241, -49, -25, -13, -5, -1, 158, -1, 188, 203, -3, -1, 142, 232, -1, 157, 231, -7, -3, -1, 187, 141, -1, 216, 110, -1, 230, 156, -13, -7, -3, -1, 171, 186, -1, 229, 215, -1, 78, -1, 228, 140, -3, -1, 200, 62, -1, 109, -1, 214, 155, -19, -11, -5, -3, -1, 185, 170, 225, -1, 212, -1, 184, 169, -5, -1, 123, -1, 183, 208, 227, -7, -3, -1, 14, 224, -1, 93, 213, -3, -1, 124, 199, -1, 77, 139, -75, -45, -27, -13, -7, -3, -1, 154, 108, -1, 198, 61, -3, -1, 92, 197, 13, -7, -3, -1, 138, 168, -1, 153, 76, -3, -1, 182, 122, 60, -11, -5, -3, -1, 91, 137, 28, -1, 192, -1, 152, 121, -1, 226, -1, 46, 30, -15, -7, -3, -1, 211, 45, -1, 210, 209, -5, -1, 59, -1, 151, 136, 29, -7, -3, -1, 196, 107, -1, 195, 167, -1, 44, -1, 194, 181, -23, -13, -7, -3, -1, 193, 12, -1, 75, 180, -3, -1, 106, 166, 179, -5, -3, -1, 90, 165, 43, -1, 178, 27, -13, -5, -1, 177, -1, 11, 176, -3, -1, 105, 150, -1, 74, 164, -5, -3, -1, 120, 135, 163, -3, -1, 58, 89, 42, -97, -57, -33, -19, -11, -5, -3, -1, 149, 104, 161, -3, -1, 134, 119, 148, -5, -3, -1, 73, 87, 103, 162, -5, -1, 26, -1, 10, 160, -3, -1, 57, 147, -1, 88, 133, -9, -3, -1, 41, 146, -3, -1, 118, 9, 25, -5, -1, 145, -1, 144, 72, -3, -1, 132, 117, -1, 56, 131, -21, -11, -5, -3, -1, 102, 40, 130, -3, -1, 71, 116, 24, -3, -1, 129, 128, -3, -1, 8, 86, 55, -9, -5, -1, 115, -1, 101, 70, -1, 39, 114, -5, -3, -1, 100, 85, 7, 23, -23, -13, -5, -1, 113, -1, 112, 54, -3, -1, 99, 69, -1, 84, 38, -3, -1, 98, 22, -1, 97, -1, 6, 96, -9, -5, -1, 83, -1, 53, 68, -1, 37, 82, -1, 81, -1, 21, 5, -33, -23, -13, -7, -3, -1, 52, 67, -1, 80, 36, -3, -1, 66, 51, 20, -5, -1, 65, -1, 4, 64, -1, 35, 50, -3, -1, 19, 49, -3, -1, 3, 48, 34, -3, -1, 18, 33, -1, 2, 32, -3, -1, 17, 1, 16, 0 }; static const short tab24[] = { -451,-117, -43, -25, -15, -7, -3, -1, 239, 254, -1, 223, 253, -3, -1, 207, 252, -1, 191, 251, -5, -1, 250, -1, 175, 159, -1, 249, 248, -9, -5, -3, -1, 143, 127, 247, -1, 111, 246, -3, -1, 95, 245, -1, 79, 244, -71, -7, -3, -1, 63, 243, -1, 47, 242, -5, -1, 241, -1, 31, 240, -25, -9, -1, 15, -3, -1, 238, 222, -1, 237, 206, -7, -3, -1, 236, 221, -1, 190, 235, -3, -1, 205, 220, -1, 174, 234, -15, -7, -3, -1, 189, 219, -1, 204, 158, -3, -1, 233, 173, -1, 218, 188, -7, -3, -1, 203, 142, -1, 232, 157, -3, -1, 217, 126, -1, 231, 172, 255,-235, -143, -77, -45, -25, -15, -7, -3, -1, 202, 187, -1, 141, 216, -5, -3, -1, 14, 224, 13, 230, -5, -3, -1, 110, 156, 201, -1, 94, 186, -9, -5, -1, 229, -1, 171, 125, -1, 215, 228, -3, -1, 140, 200, -3, -1, 78, 46, 62, -15, -7, -3, -1, 109, 214, -1, 227, 155, -3, -1, 185, 170, -1, 226, 30, -7, -3, -1, 225, 93, -1, 213, 124, -3, -1, 199, 77, -1, 139, 184, -31, -15, -7, -3, -1, 212, 154, -1, 169, 108, -3, -1, 198, 61, -1, 211, 45, -7, -3, -1, 210, 29, -1, 123, 183, -3, -1, 209, 92, -1, 197, 138, -17, -7, -3, -1, 168, 153, -1, 76, 196, -3, -1, 107, 182, -3, -1, 208, 12, 60, -7, -3, -1, 195, 122, -1, 167, 44, -3, -1, 194, 91, -1, 181, 28, -57, -35, -19, -7, -3, -1, 137, 152, -1, 193, 75, -5, -3, -1, 192, 11, 59, -3, -1, 176, 10, 26, -5, -1, 180, -1, 106, 166, -3, -1, 121, 151, -3, -1, 160, 9, 144, -9, -3, -1, 179, 136, -3, -1, 43, 90, 178, -7, -3, -1, 165, 27, -1, 177, 105, -1, 150, 164, -17, -9, -5, -3, -1, 74, 120, 135, -1, 58, 163, -3, -1, 89, 149, -1, 42, 162, -7, -3, -1, 161, 104, -1, 134, 119, -3, -1, 73, 148, -1, 57, 147, -63, -31, -15, -7, -3, -1, 88, 133, -1, 41, 103, -3, -1, 118, 146, -1, 25, 145, -7, -3, -1, 72, 132, -1, 87, 117, -3, -1, 56, 131, -1, 102, 40, -17, -7, -3, -1, 130, 24, -1, 71, 116, -5, -1, 129, -1, 8, 128, -1, 86, 101, -7, -5, -1, 23, -1, 7, 112, 115, -3, -1, 55, 39, 114, -15, -7, -3, -1, 70, 100, -1, 85, 113, -3, -1, 54, 99, -1, 69, 84, -7, -3, -1, 38, 98, -1, 22, 97, -5, -3, -1, 6, 96, 53, -1, 83, 68, -51, -37, -23, -15, -9, -3, -1, 37, 82, -1, 21, -1, 5, 80, -1, 81, -1, 52, 67, -3, -1, 36, 66, -1, 51, 20, -9, -5, -1, 65, -1, 4, 64, -1, 35, 50, -1, 19, 49, -7, -5, -3, -1, 3, 48, 34, 18, -1, 33, -1, 2, 32, -3, -1, 17, 1, -1, 16, 0 }; static const short tab_c0[] = { -29, -21, -13, -7, -3, -1, 11, 15, -1, 13, 14, -3, -1, 7, 5, 9, -3, -1, 6, 3, -1, 10, 12, -3, -1, 2, 1, -1, 4, 8, 0 }; static const short tab_c1[] = { -15, -7, -3, -1, 15, 14, -1, 13, 12, -3, -1, 11, 10, -1, 9, 8, -7, -3, -1, 7, 6, -1, 5, 4, -3, -1, 3, 2, -1, 1, 0 }; static const struct newhuff ht[] = { { /* 0 */ 0 , tab0 } , { /* 2 */ 0 , tab1 } , { /* 3 */ 0 , tab2 } , { /* 3 */ 0 , tab3 } , { /* 0 */ 0 , tab0 } , { /* 4 */ 0 , tab5 } , { /* 4 */ 0 , tab6 } , { /* 6 */ 0 , tab7 } , { /* 6 */ 0 , tab8 } , { /* 6 */ 0 , tab9 } , { /* 8 */ 0 , tab10 } , { /* 8 */ 0 , tab11 } , { /* 8 */ 0 , tab12 } , { /* 16 */ 0 , tab13 } , { /* 0 */ 0 , tab0 } , { /* 16 */ 0 , tab15 } , { /* 16 */ 1 , tab16 } , { /* 16 */ 2 , tab16 } , { /* 16 */ 3 , tab16 } , { /* 16 */ 4 , tab16 } , { /* 16 */ 6 , tab16 } , { /* 16 */ 8 , tab16 } , { /* 16 */ 10, tab16 } , { /* 16 */ 13, tab16 } , { /* 16 */ 4 , tab24 } , { /* 16 */ 5 , tab24 } , { /* 16 */ 6 , tab24 } , { /* 16 */ 7 , tab24 } , { /* 16 */ 8 , tab24 } , { /* 16 */ 9 , tab24 } , { /* 16 */ 11, tab24 } , { /* 16 */ 13, tab24 } }; static const struct newhuff htc[] = { { /* 1 , 1 , */ 0 , tab_c0 } , { /* 1 , 1 , */ 0 , tab_c1 } }; /* *INDENT-ON* */ lame-3.100/mpglib/dct64_i386.c000644 001751 001751 00000027147 11351677373 017226 0ustar00netchildnetchild000000 000000 /* * dct64_i368.c * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * * Discrete Cosine Tansform (DCT) for subband synthesis * optimized for machines with no auto-increment. * The performance is highly compiler dependend. Maybe * the dct64.c version for 'normal' processor may be faster * even for Intel processors. */ /* $Id: dct64_i386.c,v 1.14 2010/03/22 14:30:19 robert Exp $ */ #ifdef HAVE_CONFIG_H #include #endif #include "dct64_i386.h" #include "tabinit.h" #ifdef WITH_DMALLOC #include #endif static void dct64_1(real * out0, real * out1, real * b1, real * b2, real * samples) { { real *costab = pnts[0]; b1[0x00] = samples[0x00] + samples[0x1F]; b1[0x1F] = (samples[0x00] - samples[0x1F]) * costab[0x0]; b1[0x01] = samples[0x01] + samples[0x1E]; b1[0x1E] = (samples[0x01] - samples[0x1E]) * costab[0x1]; b1[0x02] = samples[0x02] + samples[0x1D]; b1[0x1D] = (samples[0x02] - samples[0x1D]) * costab[0x2]; b1[0x03] = samples[0x03] + samples[0x1C]; b1[0x1C] = (samples[0x03] - samples[0x1C]) * costab[0x3]; b1[0x04] = samples[0x04] + samples[0x1B]; b1[0x1B] = (samples[0x04] - samples[0x1B]) * costab[0x4]; b1[0x05] = samples[0x05] + samples[0x1A]; b1[0x1A] = (samples[0x05] - samples[0x1A]) * costab[0x5]; b1[0x06] = samples[0x06] + samples[0x19]; b1[0x19] = (samples[0x06] - samples[0x19]) * costab[0x6]; b1[0x07] = samples[0x07] + samples[0x18]; b1[0x18] = (samples[0x07] - samples[0x18]) * costab[0x7]; b1[0x08] = samples[0x08] + samples[0x17]; b1[0x17] = (samples[0x08] - samples[0x17]) * costab[0x8]; b1[0x09] = samples[0x09] + samples[0x16]; b1[0x16] = (samples[0x09] - samples[0x16]) * costab[0x9]; b1[0x0A] = samples[0x0A] + samples[0x15]; b1[0x15] = (samples[0x0A] - samples[0x15]) * costab[0xA]; b1[0x0B] = samples[0x0B] + samples[0x14]; b1[0x14] = (samples[0x0B] - samples[0x14]) * costab[0xB]; b1[0x0C] = samples[0x0C] + samples[0x13]; b1[0x13] = (samples[0x0C] - samples[0x13]) * costab[0xC]; b1[0x0D] = samples[0x0D] + samples[0x12]; b1[0x12] = (samples[0x0D] - samples[0x12]) * costab[0xD]; b1[0x0E] = samples[0x0E] + samples[0x11]; b1[0x11] = (samples[0x0E] - samples[0x11]) * costab[0xE]; b1[0x0F] = samples[0x0F] + samples[0x10]; b1[0x10] = (samples[0x0F] - samples[0x10]) * costab[0xF]; } { real *costab = pnts[1]; b2[0x00] = b1[0x00] + b1[0x0F]; b2[0x0F] = (b1[0x00] - b1[0x0F]) * costab[0]; b2[0x01] = b1[0x01] + b1[0x0E]; b2[0x0E] = (b1[0x01] - b1[0x0E]) * costab[1]; b2[0x02] = b1[0x02] + b1[0x0D]; b2[0x0D] = (b1[0x02] - b1[0x0D]) * costab[2]; b2[0x03] = b1[0x03] + b1[0x0C]; b2[0x0C] = (b1[0x03] - b1[0x0C]) * costab[3]; b2[0x04] = b1[0x04] + b1[0x0B]; b2[0x0B] = (b1[0x04] - b1[0x0B]) * costab[4]; b2[0x05] = b1[0x05] + b1[0x0A]; b2[0x0A] = (b1[0x05] - b1[0x0A]) * costab[5]; b2[0x06] = b1[0x06] + b1[0x09]; b2[0x09] = (b1[0x06] - b1[0x09]) * costab[6]; b2[0x07] = b1[0x07] + b1[0x08]; b2[0x08] = (b1[0x07] - b1[0x08]) * costab[7]; b2[0x10] = b1[0x10] + b1[0x1F]; b2[0x1F] = (b1[0x1F] - b1[0x10]) * costab[0]; b2[0x11] = b1[0x11] + b1[0x1E]; b2[0x1E] = (b1[0x1E] - b1[0x11]) * costab[1]; b2[0x12] = b1[0x12] + b1[0x1D]; b2[0x1D] = (b1[0x1D] - b1[0x12]) * costab[2]; b2[0x13] = b1[0x13] + b1[0x1C]; b2[0x1C] = (b1[0x1C] - b1[0x13]) * costab[3]; b2[0x14] = b1[0x14] + b1[0x1B]; b2[0x1B] = (b1[0x1B] - b1[0x14]) * costab[4]; b2[0x15] = b1[0x15] + b1[0x1A]; b2[0x1A] = (b1[0x1A] - b1[0x15]) * costab[5]; b2[0x16] = b1[0x16] + b1[0x19]; b2[0x19] = (b1[0x19] - b1[0x16]) * costab[6]; b2[0x17] = b1[0x17] + b1[0x18]; b2[0x18] = (b1[0x18] - b1[0x17]) * costab[7]; } { real *costab = pnts[2]; b1[0x00] = b2[0x00] + b2[0x07]; b1[0x07] = (b2[0x00] - b2[0x07]) * costab[0]; b1[0x01] = b2[0x01] + b2[0x06]; b1[0x06] = (b2[0x01] - b2[0x06]) * costab[1]; b1[0x02] = b2[0x02] + b2[0x05]; b1[0x05] = (b2[0x02] - b2[0x05]) * costab[2]; b1[0x03] = b2[0x03] + b2[0x04]; b1[0x04] = (b2[0x03] - b2[0x04]) * costab[3]; b1[0x08] = b2[0x08] + b2[0x0F]; b1[0x0F] = (b2[0x0F] - b2[0x08]) * costab[0]; b1[0x09] = b2[0x09] + b2[0x0E]; b1[0x0E] = (b2[0x0E] - b2[0x09]) * costab[1]; b1[0x0A] = b2[0x0A] + b2[0x0D]; b1[0x0D] = (b2[0x0D] - b2[0x0A]) * costab[2]; b1[0x0B] = b2[0x0B] + b2[0x0C]; b1[0x0C] = (b2[0x0C] - b2[0x0B]) * costab[3]; b1[0x10] = b2[0x10] + b2[0x17]; b1[0x17] = (b2[0x10] - b2[0x17]) * costab[0]; b1[0x11] = b2[0x11] + b2[0x16]; b1[0x16] = (b2[0x11] - b2[0x16]) * costab[1]; b1[0x12] = b2[0x12] + b2[0x15]; b1[0x15] = (b2[0x12] - b2[0x15]) * costab[2]; b1[0x13] = b2[0x13] + b2[0x14]; b1[0x14] = (b2[0x13] - b2[0x14]) * costab[3]; b1[0x18] = b2[0x18] + b2[0x1F]; b1[0x1F] = (b2[0x1F] - b2[0x18]) * costab[0]; b1[0x19] = b2[0x19] + b2[0x1E]; b1[0x1E] = (b2[0x1E] - b2[0x19]) * costab[1]; b1[0x1A] = b2[0x1A] + b2[0x1D]; b1[0x1D] = (b2[0x1D] - b2[0x1A]) * costab[2]; b1[0x1B] = b2[0x1B] + b2[0x1C]; b1[0x1C] = (b2[0x1C] - b2[0x1B]) * costab[3]; } { real const cos0 = pnts[3][0]; real const cos1 = pnts[3][1]; b2[0x00] = b1[0x00] + b1[0x03]; b2[0x03] = (b1[0x00] - b1[0x03]) * cos0; b2[0x01] = b1[0x01] + b1[0x02]; b2[0x02] = (b1[0x01] - b1[0x02]) * cos1; b2[0x04] = b1[0x04] + b1[0x07]; b2[0x07] = (b1[0x07] - b1[0x04]) * cos0; b2[0x05] = b1[0x05] + b1[0x06]; b2[0x06] = (b1[0x06] - b1[0x05]) * cos1; b2[0x08] = b1[0x08] + b1[0x0B]; b2[0x0B] = (b1[0x08] - b1[0x0B]) * cos0; b2[0x09] = b1[0x09] + b1[0x0A]; b2[0x0A] = (b1[0x09] - b1[0x0A]) * cos1; b2[0x0C] = b1[0x0C] + b1[0x0F]; b2[0x0F] = (b1[0x0F] - b1[0x0C]) * cos0; b2[0x0D] = b1[0x0D] + b1[0x0E]; b2[0x0E] = (b1[0x0E] - b1[0x0D]) * cos1; b2[0x10] = b1[0x10] + b1[0x13]; b2[0x13] = (b1[0x10] - b1[0x13]) * cos0; b2[0x11] = b1[0x11] + b1[0x12]; b2[0x12] = (b1[0x11] - b1[0x12]) * cos1; b2[0x14] = b1[0x14] + b1[0x17]; b2[0x17] = (b1[0x17] - b1[0x14]) * cos0; b2[0x15] = b1[0x15] + b1[0x16]; b2[0x16] = (b1[0x16] - b1[0x15]) * cos1; b2[0x18] = b1[0x18] + b1[0x1B]; b2[0x1B] = (b1[0x18] - b1[0x1B]) * cos0; b2[0x19] = b1[0x19] + b1[0x1A]; b2[0x1A] = (b1[0x19] - b1[0x1A]) * cos1; b2[0x1C] = b1[0x1C] + b1[0x1F]; b2[0x1F] = (b1[0x1F] - b1[0x1C]) * cos0; b2[0x1D] = b1[0x1D] + b1[0x1E]; b2[0x1E] = (b1[0x1E] - b1[0x1D]) * cos1; } { real const cos0 = pnts[4][0]; b1[0x00] = b2[0x00] + b2[0x01]; b1[0x01] = (b2[0x00] - b2[0x01]) * cos0; b1[0x02] = b2[0x02] + b2[0x03]; b1[0x03] = (b2[0x03] - b2[0x02]) * cos0; b1[0x02] += b1[0x03]; b1[0x04] = b2[0x04] + b2[0x05]; b1[0x05] = (b2[0x04] - b2[0x05]) * cos0; b1[0x06] = b2[0x06] + b2[0x07]; b1[0x07] = (b2[0x07] - b2[0x06]) * cos0; b1[0x06] += b1[0x07]; b1[0x04] += b1[0x06]; b1[0x06] += b1[0x05]; b1[0x05] += b1[0x07]; b1[0x08] = b2[0x08] + b2[0x09]; b1[0x09] = (b2[0x08] - b2[0x09]) * cos0; b1[0x0A] = b2[0x0A] + b2[0x0B]; b1[0x0B] = (b2[0x0B] - b2[0x0A]) * cos0; b1[0x0A] += b1[0x0B]; b1[0x0C] = b2[0x0C] + b2[0x0D]; b1[0x0D] = (b2[0x0C] - b2[0x0D]) * cos0; b1[0x0E] = b2[0x0E] + b2[0x0F]; b1[0x0F] = (b2[0x0F] - b2[0x0E]) * cos0; b1[0x0E] += b1[0x0F]; b1[0x0C] += b1[0x0E]; b1[0x0E] += b1[0x0D]; b1[0x0D] += b1[0x0F]; b1[0x10] = b2[0x10] + b2[0x11]; b1[0x11] = (b2[0x10] - b2[0x11]) * cos0; b1[0x12] = b2[0x12] + b2[0x13]; b1[0x13] = (b2[0x13] - b2[0x12]) * cos0; b1[0x12] += b1[0x13]; b1[0x14] = b2[0x14] + b2[0x15]; b1[0x15] = (b2[0x14] - b2[0x15]) * cos0; b1[0x16] = b2[0x16] + b2[0x17]; b1[0x17] = (b2[0x17] - b2[0x16]) * cos0; b1[0x16] += b1[0x17]; b1[0x14] += b1[0x16]; b1[0x16] += b1[0x15]; b1[0x15] += b1[0x17]; b1[0x18] = b2[0x18] + b2[0x19]; b1[0x19] = (b2[0x18] - b2[0x19]) * cos0; b1[0x1A] = b2[0x1A] + b2[0x1B]; b1[0x1B] = (b2[0x1B] - b2[0x1A]) * cos0; b1[0x1A] += b1[0x1B]; b1[0x1C] = b2[0x1C] + b2[0x1D]; b1[0x1D] = (b2[0x1C] - b2[0x1D]) * cos0; b1[0x1E] = b2[0x1E] + b2[0x1F]; b1[0x1F] = (b2[0x1F] - b2[0x1E]) * cos0; b1[0x1E] += b1[0x1F]; b1[0x1C] += b1[0x1E]; b1[0x1E] += b1[0x1D]; b1[0x1D] += b1[0x1F]; } out0[0x10 * 16] = b1[0x00]; out0[0x10 * 12] = b1[0x04]; out0[0x10 * 8] = b1[0x02]; out0[0x10 * 4] = b1[0x06]; out0[0x10 * 0] = b1[0x01]; out1[0x10 * 0] = b1[0x01]; out1[0x10 * 4] = b1[0x05]; out1[0x10 * 8] = b1[0x03]; out1[0x10 * 12] = b1[0x07]; b1[0x08] += b1[0x0C]; out0[0x10 * 14] = b1[0x08]; b1[0x0C] += b1[0x0a]; out0[0x10 * 10] = b1[0x0C]; b1[0x0A] += b1[0x0E]; out0[0x10 * 6] = b1[0x0A]; b1[0x0E] += b1[0x09]; out0[0x10 * 2] = b1[0x0E]; b1[0x09] += b1[0x0D]; out1[0x10 * 2] = b1[0x09]; b1[0x0D] += b1[0x0B]; out1[0x10 * 6] = b1[0x0D]; b1[0x0B] += b1[0x0F]; out1[0x10 * 10] = b1[0x0B]; out1[0x10 * 14] = b1[0x0F]; b1[0x18] += b1[0x1C]; out0[0x10 * 15] = b1[0x10] + b1[0x18]; out0[0x10 * 13] = b1[0x18] + b1[0x14]; b1[0x1C] += b1[0x1a]; out0[0x10 * 11] = b1[0x14] + b1[0x1C]; out0[0x10 * 9] = b1[0x1C] + b1[0x12]; b1[0x1A] += b1[0x1E]; out0[0x10 * 7] = b1[0x12] + b1[0x1A]; out0[0x10 * 5] = b1[0x1A] + b1[0x16]; b1[0x1E] += b1[0x19]; out0[0x10 * 3] = b1[0x16] + b1[0x1E]; out0[0x10 * 1] = b1[0x1E] + b1[0x11]; b1[0x19] += b1[0x1D]; out1[0x10 * 1] = b1[0x11] + b1[0x19]; out1[0x10 * 3] = b1[0x19] + b1[0x15]; b1[0x1D] += b1[0x1B]; out1[0x10 * 5] = b1[0x15] + b1[0x1D]; out1[0x10 * 7] = b1[0x1D] + b1[0x13]; b1[0x1B] += b1[0x1F]; out1[0x10 * 9] = b1[0x13] + b1[0x1B]; out1[0x10 * 11] = b1[0x1B] + b1[0x17]; out1[0x10 * 13] = b1[0x17] + b1[0x1F]; out1[0x10 * 15] = b1[0x1F]; } /* * the call via dct64 is a trick to force GCC to use * (new) registers for the b1,b2 pointer to the bufs[xx] field */ void dct64(real * a, real * b, real * c) { real bufs[0x40]; dct64_1(a, b, bufs, bufs + 0x20, c); } lame-3.100/mpglib/Makefile.in000644 001751 001751 00000046716 13170220147 017415 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = mpglib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libmpgdecoder_la_LIBADD = am_libmpgdecoder_la_OBJECTS = common.lo dct64_i386.lo decode_i386.lo \ interface.lo layer1.lo layer2.lo layer3.lo tabinit.lo libmpgdecoder_la_OBJECTS = $(am_libmpgdecoder_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmpgdecoder_la_SOURCES) DIST_SOURCES = $(libmpgdecoder_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global $(top_srcdir)/depcomp AUTHORS \ README depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ @CONFIG_DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ -I$(top_srcdir)/libmp3lame -I$(top_builddir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ AUTHORS \ README noinst_LTLIBRARIES = libmpgdecoder.la libmpgdecoder_la_SOURCES = common.c \ dct64_i386.c \ decode_i386.c \ interface.c \ layer1.c \ layer2.c \ layer3.c \ tabinit.c noinst_HEADERS = common.h \ dct64_i386.h \ decode_i386.h \ huffman.h \ interface.h \ l2tables.h \ layer1.h \ layer2.h \ layer3.h \ mpg123.h \ mpglib.h \ tabinit.h LCLINTFLAGS = \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign mpglib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign mpglib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmpgdecoder.la: $(libmpgdecoder_la_OBJECTS) $(libmpgdecoder_la_DEPENDENCIES) $(EXTRA_libmpgdecoder_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libmpgdecoder_la_OBJECTS) $(libmpgdecoder_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dct64_i386.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode_i386.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/layer1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/layer2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/layer3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tabinit.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section lclint.txt: ${libmpgdecoder_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${libmpgdecoder_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/mpglib/layer1.c000644 001751 001751 00000016477 13154046620 016716 0ustar00netchildnetchild000000 000000 /* * layer1.c: Mpeg Layer-1 audio decoder * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: layer1.c,v 1.31 2017/08/23 13:22:23 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include "common.h" #include "decode_i386.h" #ifdef WITH_DMALLOC #include #endif #include "layer1.h" static int gd_are_hip_tables_layer1_initialized = 0; void hip_init_tables_layer1(void) { if (gd_are_hip_tables_layer1_initialized) { return; } gd_are_hip_tables_layer1_initialized = 1; } typedef struct sideinfo_layer_I_struct { unsigned char allocation[SBLIMIT][2]; unsigned char scalefactor[SBLIMIT][2]; } sideinfo_layer_I; static int I_step_one(PMPSTR mp, sideinfo_layer_I* si) { struct frame *fr = &(mp->fr); int jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext << 2) + 4 : 32; int i; int illegal_value_detected = 0; unsigned char const ba15 = 15; /* bit pattern not allowed, looks like sync(?) */ memset(si, 0, sizeof(*si)); assert(fr->stereo == 1 || fr->stereo == 2); if (fr->stereo == 2) { for (i = 0; i < jsbound; i++) { unsigned char b0 = get_leq_8_bits(mp, 4); /* values 0-15 */ unsigned char b1 = get_leq_8_bits(mp, 4); /* values 0-15 */ si->allocation[i][0] = b0; si->allocation[i][1] = b1; if (b0 == ba15 || b1 == ba15) illegal_value_detected = 1; } for (i = jsbound; i < SBLIMIT; i++) { unsigned char b = get_leq_8_bits(mp, 4); /* values 0-15 */ si->allocation[i][0] = b; si->allocation[i][1] = b; if (b == ba15) illegal_value_detected = 1; } for (i = 0; i < SBLIMIT; i++) { unsigned char n0 = si->allocation[i][0]; unsigned char n1 = si->allocation[i][1]; unsigned char b0 = n0 ? get_leq_8_bits(mp, 6) : 0; /* values 0-63 */ unsigned char b1 = n1 ? get_leq_8_bits(mp, 6) : 0; /* values 0-63 */ si->scalefactor[i][0] = b0; si->scalefactor[i][1] = b1; } } else { for (i = 0; i < SBLIMIT; i++) { unsigned char b0 = get_leq_8_bits(mp, 4); /* values 0-15 */ si->allocation[i][0] = b0; if (b0 == ba15) illegal_value_detected = 1; } for (i = 0; i < SBLIMIT; i++) { unsigned char n0 = si->allocation[i][0]; unsigned char b0 = n0 ? get_leq_8_bits(mp, 6) : 0; /* values 0-63 */ si->scalefactor[i][0] = b0; } } return illegal_value_detected; } static void I_step_two(PMPSTR mp, sideinfo_layer_I *si, real fraction[2][SBLIMIT]) { double r0, r1; struct frame *fr = &(mp->fr); int ds_limit = fr->down_sample_sblimit; int i; assert(fr->stereo == 1 || fr->stereo == 2); if (fr->stereo == 2) { int jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext << 2) + 4 : 32; for (i = 0; i < jsbound; i++) { unsigned char i0 = si->scalefactor[i][0]; unsigned char i1 = si->scalefactor[i][1]; unsigned char n0 = si->allocation[i][0]; unsigned char n1 = si->allocation[i][1]; assert( i0 < 64 ); assert( i1 < 64 ); assert( n0 < 16 ); assert( n1 < 16 ); if (n0 > 0) { unsigned short v = get_leq_16_bits(mp, n0 + 1); /* 0-65535 */ r0 = (((-1) << n0) + v + 1) * muls[n0 + 1][i0]; } else { r0 = 0; } if (n1 > 0) { unsigned short v = get_leq_16_bits(mp, n1 + 1); /* 0-65535 */ r1 = (((-1) << n1) + v + 1) * muls[n1 + 1][i1]; } else { r1 = 0; } fraction[0][i] = (real)r0; fraction[1][i] = (real)r1; } for (i = jsbound; i < SBLIMIT; i++) { unsigned char i0 = si->scalefactor[i][0]; unsigned char i1 = si->scalefactor[i][1]; unsigned char n = si->allocation[i][0]; assert( i0 < 64 ); assert( i1 < 64 ); assert( n < 16 ); if (n > 0) { unsigned short v = get_leq_16_bits(mp, n + 1); /* 0-65535 */ unsigned int w = (((-1) << n) + v + 1); r0 = w * muls[n + 1][i0]; r1 = w * muls[n + 1][i1]; } else { r0 = r1 = 0; } fraction[0][i] = (real)r0; fraction[1][i] = (real)r1; } for (i = ds_limit; i < SBLIMIT; i++) { fraction[0][i] = 0.0; fraction[1][i] = 0.0; } } else { for (i = 0; i < SBLIMIT; i++) { unsigned char n = si->allocation[i][0]; unsigned char j = si->scalefactor[i][0]; assert( j < 64 ); assert( n < 16 ); if (n > 0) { unsigned short v = get_leq_16_bits(mp, n + 1); r0 = (((-1) << n) + v + 1) * muls[n + 1][j]; } else { r0 = 0; } fraction[0][i] = (real)r0; } for (i = ds_limit; i < SBLIMIT; i++) { fraction[0][i] = 0.0; } } } int decode_layer1_sideinfo(PMPSTR mp) { (void) mp; /* FIXME: extract side information and check values */ return 0; } int decode_layer1_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point) { real fraction[2][SBLIMIT]; /* FIXME: change real -> double ? */ sideinfo_layer_I si; struct frame *fr = &(mp->fr); int single = fr->single; int i, clip = 0; if (I_step_one(mp, &si)) { lame_report_fnc(mp->report_err, "hip: Aborting layer 1 decode, illegal bit allocation value\n"); return -1; } if (fr->stereo == 1 || single == 3) single = 0; if (single >= 0) { /* decoding one of possibly two channels */ for (i = 0; i < SCALE_BLOCK; i++) { I_step_two(mp, &si, fraction); clip += synth_1to1_mono(mp, (real *) fraction[single], pcm_sample, pcm_point); } } else { for (i = 0; i < SCALE_BLOCK; i++) { int p1 = *pcm_point; I_step_two(mp, &si, fraction); clip += synth_1to1(mp, (real *) fraction[0], 0, pcm_sample, &p1); clip += synth_1to1(mp, (real *) fraction[1], 1, pcm_sample, pcm_point); } } return clip; } lame-3.100/mpglib/l2tables.h000644 001751 001751 00000027255 11351677373 017246 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * 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 */ const struct al_table2 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} }; const struct al_table2 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} }; const struct al_table2 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} }; const struct al_table2 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} }; const struct al_table2 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} }; lame-3.100/mpglib/README000644 001751 001751 00000001613 11351701062 016212 0ustar00netchildnetchild000000 000000 hip - Hip Isn't a Player A LGPLed mpeg audio decoding library. Based off of Michael Hipp's mpglib 0.2a , with many improvements by the lame development team (see AUTHORS). The interface to the library is based off of vorbisfile. If you add mp3 support to your app using this library it should be a snap to add Ogg Vorbis support as well. This isn't as fast as mpg123 will be for decoding as none of it is in assmbler. Seeking currently isn't implemented. From mpglib's orginal README: ============================= PLEASE NOTE: This software may contain patented algorithms (at least patented in some countries). It may be not allowed to sell/use products based on this source code in these countries. Check this out first! COPYRIGHT of MP3 music: Please note, that the duplicating of copyrighted music without explicit permission violates the rights of the owner. lame-3.100/mpglib/tabinit.h000644 001751 001751 00000002046 11351677373 017157 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MPGLIB_TABINIT_H_INCLUDED #define MPGLIB_TABINIT_H_INCLUDED #include "mpg123.h" extern real decwin[512 + 32]; extern real *pnts[5]; void make_decode_tables(long scale); #endif lame-3.100/mpglib/mpglib.h000644 001751 001751 00000006246 11351677373 017005 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _MPGLIB_H_ #define _MPGLIB_H_ #include "lame.h" #ifndef plotting_data_defined #define plotting_data_defined struct plotting_data; typedef struct plotting_data plotting_data; #endif extern void lame_report_fnc(lame_report_function f, const char *format, ...); 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; }; typedef struct mpstr_tag { struct buf *head, *tail; /* buffer linked list pointers, tail points to oldest buffer */ int vbr_header; /* 1 if valid Xing vbr header detected */ int num_frames; /* set if vbr header present */ int enc_delay; /* set if vbr header present */ int enc_padding; /* set if vbr header present */ /* header_parsed, side_parsed and data_parsed must be all set 1 before the full frame has been parsed */ int header_parsed; /* 1 = header of current frame has been parsed */ int side_parsed; /* 1 = header of sideinfo of current frame has been parsed */ int data_parsed; int free_format; /* 1 = free format frame */ int old_free_format; /* 1 = last frame was free format */ int bsize; int framesize; int ssize; /* number of bytes used for side information, including 2 bytes for CRC-16 if present */ int dsize; int fsizeold; /* size of previous frame, -1 for first */ int fsizeold_nopadding; struct frame fr; /* holds the parameters decoded from the header */ struct III_sideinfo sideinfo; unsigned char bsspace[2][MAXFRAMESIZE + 1024]; /* bit stream space used ???? */ /* 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; int sync_bitstream; /* 1 = bitstream is yet to be synchronized */ int bitindex; unsigned char *wordpointer; plotting_data *pinfo; lame_report_function report_msg; lame_report_function report_dbg; lame_report_function report_err; } MPSTR, *PMPSTR; #define MP3_ERR -1 #define MP3_OK 0 #define MP3_NEED_MORE 1 #endif /* _MPGLIB_H_ */ lame-3.100/mpglib/Makefile.am000644 001751 001751 00000001765 11463015676 017413 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.18 2010/10/30 13:21:02 robert Exp $ include $(top_srcdir)/Makefile.am.global INCLUDES = @INCLUDES@ -I$(top_srcdir)/libmp3lame -I$(top_builddir) EXTRA_DIST = \ AUTHORS \ README DEFS = @DEFS@ @CONFIG_DEFS@ noinst_LTLIBRARIES = libmpgdecoder.la libmpgdecoder_la_SOURCES = common.c \ dct64_i386.c \ decode_i386.c \ interface.c \ layer1.c \ layer2.c \ layer3.c \ tabinit.c noinst_HEADERS = common.h \ dct64_i386.h \ decode_i386.h \ huffman.h \ interface.h \ l2tables.h \ layer1.h \ layer2.h \ layer3.h \ mpg123.h \ mpglib.h \ tabinit.h LCLINTFLAGS= \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint lclint.txt: ${libmpgdecoder_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${libmpgdecoder_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck lame-3.100/mpglib/common.h000644 001751 001751 00000002736 11351677373 017023 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef COMMON_H_INCLUDED #define COMMON_H_INCLUDED #include "mpg123.h" #include "mpglib.h" extern const int tabsel_123[2][3][16]; extern const long freqs[9]; extern real muls[27][64]; int head_check(unsigned long head, int check_layer); int decode_header(PMPSTR mp, struct frame *fr, unsigned long newhead); unsigned int getbits(PMPSTR mp, int number_of_bits); unsigned int getbits_fast(PMPSTR mp, int number_of_bits); unsigned char get_leq_8_bits(PMPSTR mp, unsigned int number_of_bits); unsigned short get_leq_16_bits(PMPSTR mp, unsigned int number_of_bits); int set_pointer(PMPSTR mp, long backstep); #endif lame-3.100/mpglib/layer3.c000644 001751 001751 00000175233 13154046620 016714 0ustar00netchildnetchild000000 000000 /* * layer3.c: Mpeg Layer-3 audio decoder * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: layer3.c,v 1.69 2017/08/20 20:06:57 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include "common.h" #include "huffman.h" #include "lame.h" #include "machine.h" #include "encoder.h" #include "lame-analysis.h" #include "decode_i386.h" #include "layer3.h" #ifdef WITH_DMALLOC #include #endif static int gd_are_hip_tables_layer3_initialized = 0; static real ispow[8207]; static real aa_ca[8], aa_cs[8]; static real COS1[12][6]; static real win[4][36]; static real win1[4][36]; static real gainpow2[256 + 118 + 4]; static real COS9[9]; static real COS6_1, COS6_2; static real tfcos36[9]; static real tfcos12[3]; struct bandInfoStruct { short longIdx[23]; short longDiff[22]; short shortIdx[14]; short shortDiff[13]; }; static int longLimit[9][23]; static int shortLimit[9][14]; /* *INDENT-OFF* */ static const struct bandInfoStruct bandInfo[9] = { /* MPEG 1.0 */ { {0,4,8,12,16,20,24,30,36,44,52,62,74, 90,110,134,162,196,238,288,342,418,576}, {4,4,4,4,4,4,6,6,8, 8,10,12,16,20,24,28,34,42,50,54, 76,158}, {0,4*3,8*3,12*3,16*3,22*3,30*3,40*3,52*3,66*3, 84*3,106*3,136*3,192*3}, {4,4,4,4,6,8,10,12,14,18,22,30,56} } , { {0,4,8,12,16,20,24,30,36,42,50,60,72, 88,106,128,156,190,230,276,330,384,576}, {4,4,4,4,4,4,6,6,6, 8,10,12,16,18,22,28,34,40,46,54, 54,192}, {0,4*3,8*3,12*3,16*3,22*3,28*3,38*3,50*3,64*3, 80*3,100*3,126*3,192*3}, {4,4,4,4,6,6,10,12,14,16,20,26,66} } , { {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576} , {4,4,4,4,4,4,6,6,8,10,12,16,20,24,30,38,46,56,68,84,102, 26} , {0,4*3,8*3,12*3,16*3,22*3,30*3,42*3,58*3,78*3,104*3,138*3,180*3,192*3} , {4,4,4,4,6,8,12,16,20,26,34,42,12} } , /* MPEG 2.0 */ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 } , {0,4*3,8*3,12*3,18*3,24*3,32*3,42*3,56*3,74*3,100*3,132*3,174*3,192*3} , {4,4,4,6,6,8,10,14,18,26,32,42,18 } } , /* docs: 332. mpg123: 330 */ { {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576}, {6,6,6,6,6,6,8,10,12,14,16,18,22,26,32,38,46,54,62,70,76,36 } , {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,136*3,180*3,192*3} , {4,4,4,6,8,10,12,14,18,24,32,44,12 } } , { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54 }, {0,4*3,8*3,12*3,18*3,26*3,36*3,48*3,62*3,80*3,104*3,134*3,174*3,192*3}, {4,4,4,6,8,10,12,14,18,24,30,40,18 } } , /* MPEG 2.5 */ { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, {4,4,4,6,8,10,12,14,18,24,30,40,18} }, { {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576} , {6,6,6,6,6,6,8,10,12,14,16,20,24,28,32,38,46,52,60,68,58,54}, {0,12,24,36,54,78,108,144,186,240,312,402,522,576}, {4,4,4,6,8,10,12,14,18,24,30,40,18} }, { {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, {12,12,12,12,12,12,16,20,24,28,32,40,48,56,64,76,90,2,2,2,2,2}, {0, 24, 48, 72,108,156,216,288,372,480,486,492,498,576}, {8,8,8,12,16,20,24,28,36,2,2,2,26} } , }; /* *INDENT-ON* */ static int mapbuf0[9][152]; static int mapbuf1[9][156]; static int mapbuf2[9][44]; static int *map[9][3]; static int *mapend[9][3]; static unsigned int n_slen2[512]; /* MPEG 2.0 slen for 'normal' mode */ static unsigned int i_slen2[256]; /* MPEG 2.0 slen for intensity stereo */ static real tan1_1[16], tan2_1[16], tan1_2[16], tan2_2[16]; static real pow1_1[2][16], pow2_1[2][16], pow1_2[2][16], pow2_2[2][16]; static unsigned int get1bit(PMPSTR mp) { unsigned char rval; rval = *mp->wordpointer << mp->bitindex; mp->bitindex++; mp->wordpointer += (mp->bitindex >> 3); mp->bitindex &= 7; return rval >> 7; } static real get_gain(real const* gain_ptr, int idx, int* overflow) { static const real* const gainpow2_end_ptr = gainpow2 + (sizeof(gainpow2)/sizeof(gainpow2[0])) -1; real const * ptr = &gain_ptr[idx]; if (&gain_ptr[idx] > gainpow2_end_ptr) { ptr = gainpow2_end_ptr; if (overflow) *overflow = 1; } return *ptr; } /* * init tables for layer-3 */ void hip_init_tables_layer3(void) { int i, j, k; if (gd_are_hip_tables_layer3_initialized) { return; } gd_are_hip_tables_layer3_initialized = 1; for (i = -256; i < 118 + 4; i++) gainpow2[i + 256] = pow((double) 2.0, -0.25 * (double) (i + 210)); for (i = 0; i < 8207; i++) ispow[i] = pow((double) i, (double) 4.0 / 3.0); for (i = 0; i < 8; i++) { static const double Ci[8] = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }; double sq = sqrt(1.0 + Ci[i] * Ci[i]); aa_cs[i] = 1.0 / sq; aa_ca[i] = Ci[i] / sq; } for (i = 0; i < 18; i++) { win[0][i] = win[1][i] = 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 0) + 1)) / cos(M_PI * (double) (2 * (i + 0) + 19) / 72.0); win[0][i + 18] = win[3][i + 18] = 0.5 * sin(M_PI / 72.0 * (double) (2 * (i + 18) + 1)) / cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0); } for (i = 0; i < 6; i++) { win[1][i + 18] = 0.5 / cos(M_PI * (double) (2 * (i + 18) + 19) / 72.0); win[3][i + 12] = 0.5 / cos(M_PI * (double) (2 * (i + 12) + 19) / 72.0); win[1][i + 24] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 13)) / cos(M_PI * (double) (2 * (i + 24) + 19) / 72.0); win[1][i + 30] = win[3][i] = 0.0; win[3][i + 6] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI * (double) (2 * (i + 6) + 19) / 72.0); } for (i = 0; i < 9; i++) COS9[i] = cos(M_PI / 18.0 * (double) i); for (i = 0; i < 9; i++) tfcos36[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 36.0); for (i = 0; i < 3; i++) tfcos12[i] = 0.5 / cos(M_PI * (double) (i * 2 + 1) / 12.0); COS6_1 = cos(M_PI / 6.0 * (double) 1); COS6_2 = cos(M_PI / 6.0 * (double) 2); for (i = 0; i < 12; i++) { win[2][i] = 0.5 * sin(M_PI / 24.0 * (double) (2 * i + 1)) / cos(M_PI * (double) (2 * i + 7) / 24.0); for (j = 0; j < 6; j++) COS1[i][j] = cos(M_PI / 24.0 * (double) ((2 * i + 7) * (2 * j + 1))); } for (j = 0; j < 4; j++) { static int const len[4] = { 36, 36, 12, 36 }; for (i = 0; i < len[j]; i += 2) win1[j][i] = +win[j][i]; for (i = 1; i < len[j]; i += 2) win1[j][i] = -win[j][i]; } for (i = 0; i < 16; i++) { double t = tan((double) i * M_PI / 12.0); tan1_1[i] = t / (1.0 + t); tan2_1[i] = 1.0 / (1.0 + t); tan1_2[i] = M_SQRT2 * t / (1.0 + t); tan2_2[i] = M_SQRT2 / (1.0 + t); for (j = 0; j < 2; j++) { double base = pow(2.0, -0.25 * (j + 1.0)); double p1 = 1.0, p2 = 1.0; if (i > 0) { if (i & 1) p1 = pow(base, (i + 1.0) * 0.5); else p2 = pow(base, i * 0.5); } pow1_1[j][i] = p1; pow2_1[j][i] = p2; pow1_2[j][i] = M_SQRT2 * p1; pow2_2[j][i] = M_SQRT2 * p2; } } for (j = 0; j < 9; j++) { struct bandInfoStruct const *bi = (struct bandInfoStruct const *) &bandInfo[j]; int *mp; int cb, lwin; short const *bdf; int switch_idx = (j < 3) ? 8 : 6; mp = map[j][0] = mapbuf0[j]; bdf = bi->longDiff; for (i = 0, cb = 0; cb < switch_idx; cb++, i += *bdf++) { *mp++ = (*bdf) >> 1; *mp++ = i; *mp++ = 3; *mp++ = cb; } bdf = bi->shortDiff + 3; for (cb = 3; cb < 13; cb++) { int l = (*bdf++) >> 1; for (lwin = 0; lwin < 3; lwin++) { *mp++ = l; *mp++ = i + lwin; *mp++ = lwin; *mp++ = cb; } i += 6 * l; } mapend[j][0] = mp; mp = map[j][1] = mapbuf1[j]; bdf = bi->shortDiff + 0; for (i = 0, cb = 0; cb < 13; cb++) { int l = (*bdf++) >> 1; for (lwin = 0; lwin < 3; lwin++) { *mp++ = l; *mp++ = i + lwin; *mp++ = lwin; *mp++ = cb; } i += 6 * l; } mapend[j][1] = mp; mp = map[j][2] = mapbuf2[j]; bdf = bi->longDiff; for (cb = 0; cb < 22; cb++) { *mp++ = (*bdf++) >> 1; *mp++ = cb; } mapend[j][2] = mp; } for (j = 0; j < 9; j++) { for (i = 0; i < 23; i++) { longLimit[j][i] = (bandInfo[j].longIdx[i] - 1 + 8) / 18 + 1; if (longLimit[j][i] > SBLIMIT) longLimit[j][i] = SBLIMIT; } for (i = 0; i < 14; i++) { shortLimit[j][i] = (bandInfo[j].shortIdx[i] - 1) / 18 + 1; if (shortLimit[j][i] > SBLIMIT) shortLimit[j][i] = SBLIMIT; } } for (i = 0; i < 5; i++) { for (j = 0; j < 6; j++) { for (k = 0; k < 6; k++) { int n = k + j * 6 + i * 36; i_slen2[n] = i | (j << 3) | (k << 6) | (3 << 12); } } } for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { int n = k + j * 4 + i * 16; i_slen2[n + 180] = i | (j << 3) | (k << 6) | (4 << 12); } } } for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { int n = j + i * 3; i_slen2[n + 244] = i | (j << 3) | (5 << 12); n_slen2[n + 500] = i | (j << 3) | (2 << 12) | (1 << 15); } } for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { for (k = 0; k < 4; k++) { int l; for (l = 0; l < 4; l++) { int n = l + k * 4 + j * 16 + i * 80; n_slen2[n] = i | (j << 3) | (k << 6) | (l << 9) | (0 << 12); } } } } for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { for (k = 0; k < 4; k++) { int n = k + j * 4 + i * 20; n_slen2[n + 400] = i | (j << 3) | (k << 6) | (1 << 12); } } } } /* * read additional side information */ static void III_get_side_info_1(PMPSTR mp, int stereo, int ms_stereo, long sfreq, int single) { int ch, gr; int powdiff = (single == 3) ? 4 : 0; mp->sideinfo.main_data_begin = getbits(mp, 9); if (stereo == 1) mp->sideinfo.private_bits = getbits_fast(mp, 5); else mp->sideinfo.private_bits = getbits_fast(mp, 3); for (ch = 0; ch < stereo; ch++) { mp->sideinfo.ch[ch].gr[0].scfsi = -1; mp->sideinfo.ch[ch].gr[1].scfsi = getbits_fast(mp, 4); } for (gr = 0; gr < 2; gr++) { for (ch = 0; ch < stereo; ch++) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]); gr_infos->part2_3_length = getbits(mp, 12); gr_infos->big_values = getbits_fast(mp, 9); if (gr_infos->big_values > 288) { lame_report_fnc(mp->report_err, "big_values too large! %i\n", gr_infos->big_values); gr_infos->big_values = 288; } { unsigned int qss = getbits_fast(mp, 8); gr_infos->pow2gain = gainpow2 + 256 - qss + powdiff; if (mp->pinfo != NULL) { mp->pinfo->qss[gr][ch] = qss; } } if (ms_stereo) gr_infos->pow2gain += 2; gr_infos->scalefac_compress = getbits_fast(mp, 4); /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */ if (get1bit(mp)) { int i; gr_infos->block_type = getbits_fast(mp, 2); gr_infos->mixed_block_flag = get1bit(mp); gr_infos->table_select[0] = getbits_fast(mp, 5); gr_infos->table_select[1] = getbits_fast(mp, 5); /* * table_select[2] not needed, because there is no region2, * but to satisfy some verifications tools we set it either. */ gr_infos->table_select[2] = 0; for (i = 0; i < 3; i++) { unsigned int sbg = (getbits_fast(mp, 3) << 3); gr_infos->full_gain[i] = gr_infos->pow2gain + sbg; if (mp->pinfo != NULL) mp->pinfo->sub_gain[gr][ch][i] = sbg / 8; } if (gr_infos->block_type == 0) { lame_report_fnc(mp->report_err, "Blocktype == 0 and window-switching == 1 not allowed.\n"); /* error seems to be very good recoverable, so don't exit */ /* exit(1); */ } /* region_count/start parameters are implicit in this case. */ gr_infos->region1start = 36 >> 1; gr_infos->region2start = 576 >> 1; } else { unsigned int i, r0c, r1c, region0index, region1index; for (i = 0; i < 3; i++) gr_infos->table_select[i] = getbits_fast(mp, 5); r0c = getbits_fast(mp, 4); r1c = getbits_fast(mp, 3); region0index = r0c+1; if (region0index > 22) { lame_report_fnc(mp->report_err, "region0index=%d > 22\n", region0index); region0index = 22; } region1index = r0c+1 + r1c+1; if (region1index > 22) { lame_report_fnc(mp->report_err, "region1index=%d > 22\n", region1index); region1index = 22; } gr_infos->region1start = bandInfo[sfreq].longIdx[region0index] >> 1; gr_infos->region2start = bandInfo[sfreq].longIdx[region1index] >> 1; gr_infos->block_type = 0; gr_infos->mixed_block_flag = 0; } gr_infos->preflag = get1bit(mp); gr_infos->scalefac_scale = get1bit(mp); gr_infos->count1table_select = get1bit(mp); } } } /* * Side Info for MPEG 2.0 / LSF */ static void III_get_side_info_2(PMPSTR mp, int stereo, int ms_stereo, long sfreq, int single) { int ch; int powdiff = (single == 3) ? 4 : 0; mp->sideinfo.main_data_begin = getbits(mp, 8); if (stereo == 1) mp->sideinfo.private_bits = get1bit(mp); else mp->sideinfo.private_bits = getbits_fast(mp, 2); for (ch = 0; ch < stereo; ch++) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[0]); unsigned int qss; gr_infos->part2_3_length = getbits(mp, 12); gr_infos->big_values = getbits_fast(mp, 9); if (gr_infos->big_values > 288) { lame_report_fnc(mp->report_err, "big_values too large! %i\n", gr_infos->big_values); gr_infos->big_values = 288; } qss = getbits_fast(mp, 8); gr_infos->pow2gain = gainpow2 + 256 - qss + powdiff; if (mp->pinfo != NULL) { mp->pinfo->qss[0][ch] = qss; } if (ms_stereo) gr_infos->pow2gain += 2; gr_infos->scalefac_compress = getbits(mp, 9); /* window-switching flag == 1 for block_Type != 0 .. and block-type == 0 -> win-sw-flag = 0 */ if (get1bit(mp)) { int i; gr_infos->block_type = getbits_fast(mp, 2); gr_infos->mixed_block_flag = get1bit(mp); gr_infos->table_select[0] = getbits_fast(mp, 5); gr_infos->table_select[1] = getbits_fast(mp, 5); /* * table_select[2] not needed, because there is no region2, * but to satisfy some verifications tools we set it either. */ gr_infos->table_select[2] = 0; for (i = 0; i < 3; i++) { unsigned int sbg = (getbits_fast(mp, 3) << 3); gr_infos->full_gain[i] = gr_infos->pow2gain + sbg; if (mp->pinfo != NULL) mp->pinfo->sub_gain[0][ch][i] = sbg / 8; } if (gr_infos->block_type == 0) { lame_report_fnc(mp->report_err, "Blocktype == 0 and window-switching == 1 not allowed.\n"); /* error seems to be very good recoverable, so don't exit */ /* exit(1); */ } /* region_count/start parameters are implicit in this case. */ if (gr_infos->block_type == 2) { if (gr_infos->mixed_block_flag == 0) gr_infos->region1start = 36 >> 1; else gr_infos->region1start = 48 >> 1; } else gr_infos->region1start = 54 >> 1; if (sfreq == 8) gr_infos->region1start *= 2; gr_infos->region2start = 576 >> 1; } else { unsigned int i, r0c, r1c, region0index, region1index; for (i = 0; i < 3; i++) gr_infos->table_select[i] = getbits_fast(mp, 5); r0c = getbits_fast(mp, 4); r1c = getbits_fast(mp, 3); region0index = r0c+1; if (region0index > 22) { lame_report_fnc(mp->report_err, "region0index=%d > 22\n", region0index); region0index = 22; } region1index = r0c+1 + r1c+1; if (region1index > 22) { lame_report_fnc(mp->report_err, "region1index=%d > 22\n", region1index); region1index = 22; } gr_infos->region1start = bandInfo[sfreq].longIdx[region0index] >> 1; gr_infos->region2start = bandInfo[sfreq].longIdx[region1index] >> 1; gr_infos->block_type = 0; gr_infos->mixed_block_flag = 0; } gr_infos->scalefac_scale = get1bit(mp); gr_infos->count1table_select = get1bit(mp); } } /* * read scalefactors */ static int III_get_scale_factors_1(PMPSTR mp, int *scf, struct gr_info_s *gr_infos) { static const unsigned char slen[2][16] = { {0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, {0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3} }; int numbits; int num0 = slen[0][gr_infos->scalefac_compress]; int num1 = slen[1][gr_infos->scalefac_compress]; if (gr_infos->block_type == 2) { int i = 18; numbits = (num0 + num1) * 18; if (gr_infos->mixed_block_flag) { for (i = 8; i; i--) *scf++ = getbits_fast(mp, num0); i = 9; numbits -= num0; /* num0 * 17 + num1 * 18 */ } for (; i; i--) *scf++ = getbits_fast(mp, num0); for (i = 18; i; i--) *scf++ = getbits_fast(mp, num1); *scf++ = 0; *scf++ = 0; *scf++ = 0; /* short[13][0..2] = 0 */ } else { int i; int scfsi = gr_infos->scfsi; if (scfsi < 0) { /* scfsi < 0 => granule == 0 */ for (i = 11; i; i--) *scf++ = getbits_fast(mp, num0); for (i = 10; i; i--) *scf++ = getbits_fast(mp, num1); numbits = (num0 + num1) * 10 + num0; } else { numbits = 0; if (!(scfsi & 0x8)) { for (i = 6; i; i--) *scf++ = getbits_fast(mp, num0); numbits += num0 * 6; } else { scf += 6; } if (!(scfsi & 0x4)) { for (i = 5; i; i--) *scf++ = getbits_fast(mp, num0); numbits += num0 * 5; } else { scf += 5; } if (!(scfsi & 0x2)) { for (i = 5; i; i--) *scf++ = getbits_fast(mp, num1); numbits += num1 * 5; } else { scf += 5; } if (!(scfsi & 0x1)) { for (i = 5; i; i--) *scf++ = getbits_fast(mp, num1); numbits += num1 * 5; } else { scf += 5; } } *scf++ = 0; /* no l[21] in original sources */ } return numbits; } static int III_get_scale_factors_2(PMPSTR mp, int *scf, struct gr_info_s *gr_infos, int i_stereo) { unsigned char const *pnt; int i, j; unsigned int slen; int n = 0; int numbits = 0; /* *INDENT-OFF* */ static const unsigned char stab[3][6][4] = { { { 6, 5, 5,5 } , { 6, 5, 7,3 } , { 11,10,0,0} , { 7, 7, 7,0 } , { 6, 6, 6,3 } , { 8, 8,5,0} } , { { 9, 9, 9,9 } , { 9, 9,12,6 } , { 18,18,0,0} , {12,12,12,0 } , {12, 9, 9,6 } , { 15,12,9,0} } , { { 6, 9, 9,9 } , { 6, 9,12,6 } , { 15,18,0,0} , { 6,15,12,0 } , { 6,12, 9,6 } , { 6,18,9,0} } }; /* *INDENT-ON* */ if (i_stereo) /* i_stereo AND second channel -> do_layer3() checks this */ slen = i_slen2[gr_infos->scalefac_compress >> 1]; else slen = n_slen2[gr_infos->scalefac_compress]; gr_infos->preflag = (slen >> 15) & 0x1; n = 0; if (gr_infos->block_type == 2) { n++; if (gr_infos->mixed_block_flag) n++; } pnt = (unsigned char const *) stab[n][(slen >> 12) & 0x7]; for (i = 0; i < 4; i++) { int num = slen & 0x7; slen >>= 3; if (num) { for (j = 0; j < (int) (pnt[i]); j++) *scf++ = getbits_fast(mp, num); numbits += pnt[i] * num; } else { for (j = 0; j < (int) (pnt[i]); j++) *scf++ = 0; } } n = (n << 1) + 1; for (i = 0; i < n; i++) *scf++ = 0; return numbits; } /* *INDENT-OFF* */ static const int pretab1 [22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0}; /* char enough ? */ static const int pretab2 [22] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* *INDENT-ON* */ /* * don't forget to apply the same changes to III_dequantize_sample_ms() !!! */ static int III_dequantize_sample(PMPSTR mp, real xr[SBLIMIT][SSLIMIT], int *scf, struct gr_info_s *gr_infos, int sfreq, int part2bits) { int shift = 1 + gr_infos->scalefac_scale; real *xrpnt = (real *) xr, xr_value=0; int l[3], l3; int part2remain = gr_infos->part2_3_length - part2bits; int *me; real const * const xr_endptr = &xr[SBLIMIT-1][SSLIMIT-1]; int isbug = 0; int bobug = 0; int bobug_sb = 0, bobug_l3=0; #define BUFFER_OVERFLOW_BUG() if(!bobug){bobug=1;bobug_sb=cb;bobug_l3=l3;}else /* lame_report_fnc(mp->report_dbg,"part2remain = %d, gr_infos->part2_3_length = %d, part2bits = %d\n", part2remain, gr_infos->part2_3_length, part2bits); */ { int i; for (i = (&xr[SBLIMIT][0] - xrpnt) >> 1; i > 0; i--) { *xrpnt++ = 0.0; *xrpnt++ = 0.0; } xrpnt = (real *) xr; } { int bv = gr_infos->big_values; int region1 = gr_infos->region1start; int region2 = gr_infos->region2start; l3 = ((576 >> 1) - bv) >> 1; /* * we may lose the 'odd' bit here !! * check this later again */ if (bv <= region1) { l[0] = bv; l[1] = 0; l[2] = 0; } else { l[0] = region1; if (bv <= region2) { l[1] = bv - l[0]; l[2] = 0; } else { l[1] = region2 - l[0]; l[2] = bv - region2; } } } /* MDH crash fix */ { int i; for (i = 0; i < 3; i++) { if (l[i] < 0) { lame_report_fnc(mp->report_err, "hip: Bogus region length (%d)\n", l[i]); l[i] = 0; } } } /* end MDH crash fix */ if (gr_infos->block_type == 2) { /* * decoding with short or mixed mode BandIndex table */ int i, max[4]; int step = 0, lwin = 0, cb = 0; real v = 0.0; int *m, mc; if (gr_infos->mixed_block_flag) { max[3] = -1; max[0] = max[1] = max[2] = 2; m = map[sfreq][0]; me = mapend[sfreq][0]; } else { max[0] = max[1] = max[2] = max[3] = -1; /* max[3] not really needed in this case */ m = map[sfreq][1]; me = mapend[sfreq][1]; } mc = 0; for (i = 0; i < 2; i++) { int lp = l[i]; struct newhuff const *h = (struct newhuff const *) (ht + gr_infos->table_select[i]); for (; lp; lp--, mc--) { int x, y; if ((!mc)) { mc = *m++; xrpnt = ((real *) xr) + (*m++); lwin = *m++; cb = *m++; if (lwin == 3) { v = get_gain(gr_infos->pow2gain, (*scf++) << shift, &isbug); step = 1; } else { v = get_gain(gr_infos->full_gain[lwin], (*scf++) << shift, &isbug); step = 3; } } { short const *val = (short const *) h->table; while ((y = *val++) < 0) { if (get1bit(mp)) val -= y; part2remain--; } x = y >> 4; y &= 0xf; } if (x == 15) { max[lwin] = cb; part2remain -= h->linbits + 1; x += getbits(mp, (int) h->linbits); if (get1bit(mp)) xr_value = -ispow[x] * v; else xr_value = ispow[x] * v; } else if (x) { max[lwin] = cb; if (get1bit(mp)) xr_value = -ispow[x] * v; else xr_value = ispow[x] * v; part2remain--; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt = xr_value; else BUFFER_OVERFLOW_BUG(); xrpnt += step; if (y == 15) { max[lwin] = cb; part2remain -= h->linbits + 1; y += getbits(mp, (int) h->linbits); if (get1bit(mp)) xr_value = -ispow[y] * v; else xr_value = ispow[y] * v; } else if (y) { max[lwin] = cb; if (get1bit(mp)) xr_value = -ispow[y] * v; else xr_value = ispow[y] * v; part2remain--; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt = xr_value; else BUFFER_OVERFLOW_BUG(); xrpnt += step; } } for (; (l3 > 0) && (part2remain > 0); l3--) { struct newhuff const *h = (struct newhuff const *) (htc + gr_infos->count1table_select); short const *val = (short const *) h->table; short a; while ((a = *val++) < 0) { part2remain--; if (part2remain < 0) { part2remain++; a = 0; break; } if (get1bit(mp)) val -= a; } for (i = 0; i < 4; i++) { if (!(i & 1)) { if (!mc) { mc = *m++; xrpnt = ((real *) xr) + (*m++); lwin = *m++; cb = *m++; if (lwin == 3) { v = get_gain(gr_infos->pow2gain, (*scf++) << shift, &isbug); step = 1; } else { v = get_gain(gr_infos->full_gain[lwin], (*scf++) << shift, &isbug); step = 3; } } mc--; } if ((a & (0x8 >> i))) { max[lwin] = cb; part2remain--; if (part2remain < 0) { part2remain++; break; } if (get1bit(mp)) xr_value = -v; else xr_value = v; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt = xr_value; else BUFFER_OVERFLOW_BUG(); xrpnt += step; } } while (m < me) { if (!mc) { mc = *m++; xrpnt = ((real *) xr) + *m++; if ((*m++) == 3) step = 1; else step = 3; m++; /* cb */ } mc--; if (xrpnt <= xr_endptr) *xrpnt = 0.0; else BUFFER_OVERFLOW_BUG(); xrpnt += step; if (xrpnt <= xr_endptr) *xrpnt = 0.0; else BUFFER_OVERFLOW_BUG(); xrpnt += step; /* we could add a little opt. here: * if we finished a band for window 3 or a long band * further bands could copied in a simple loop without a * special 'map' decoding */ } gr_infos->maxband[0] = max[0] + 1; gr_infos->maxband[1] = max[1] + 1; gr_infos->maxband[2] = max[2] + 1; gr_infos->maxbandl = max[3] + 1; { int rmax = max[0] > max[1] ? max[0] : max[1]; rmax = (rmax > max[2] ? rmax : max[2]) + 1; gr_infos->maxb = rmax ? shortLimit[sfreq][rmax] : longLimit[sfreq][max[3] + 1]; } } else { /* * decoding with 'long' BandIndex table (block_type != 2) */ int const *pretab = (int const *) (gr_infos->preflag ? pretab1 : pretab2); int i, max = -1; int cb = 0; int *m = map[sfreq][2]; real v = 0.0; int mc = 0; /* * long hash table values */ for (i = 0; i < 3; i++) { int lp = l[i]; struct newhuff const *h = (struct newhuff const *) (ht + gr_infos->table_select[i]); for (; lp; lp--, mc--) { int x, y; if (!mc) { mc = *m++; v = get_gain(gr_infos->pow2gain, ((*scf++) + (*pretab++)) << shift, &isbug); cb = *m++; } { short const *val = (short const *) h->table; while ((y = *val++) < 0) { if (get1bit(mp)) val -= y; part2remain--; } x = y >> 4; y &= 0xf; } if (x == 15) { max = cb; part2remain -= h->linbits + 1; x += getbits(mp, (int) h->linbits); if (get1bit(mp)) xr_value = -ispow[x] * v; else xr_value = ispow[x] * v; } else if (x) { max = cb; if (get1bit(mp)) xr_value = -ispow[x] * v; else xr_value = ispow[x] * v; part2remain--; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt++ = xr_value; else BUFFER_OVERFLOW_BUG(); if (y == 15) { max = cb; part2remain -= h->linbits + 1; y += getbits(mp, (int) h->linbits); if (get1bit(mp)) xr_value = -ispow[y] * v; else xr_value = ispow[y] * v; } else if (y) { max = cb; if (get1bit(mp)) xr_value = -ispow[y] * v; else xr_value = ispow[y] * v; part2remain--; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt++ = xr_value; else BUFFER_OVERFLOW_BUG(); } } /* * short (count1table) values */ for (; l3 && (part2remain > 0); l3--) { struct newhuff const *h = (struct newhuff const *) (htc + gr_infos->count1table_select); short const *val = (short const *) h->table; short a; while ((a = *val++) < 0) { part2remain--; if (part2remain < 0) { part2remain++; a = 0; break; } if (get1bit(mp)) val -= a; } for (i = 0; i < 4; i++) { if (!(i & 1)) { if (!mc) { mc = *m++; cb = *m++; v = get_gain(gr_infos->pow2gain, ((*scf++) + (*pretab++)) << shift, &isbug); } mc--; } if ((a & (0x8 >> i))) { max = cb; part2remain--; if (part2remain < 0) { part2remain++; break; } if (get1bit(mp)) xr_value = -v; else xr_value = v; } else xr_value = 0.0; if (xrpnt <= xr_endptr) *xrpnt++ = xr_value; else BUFFER_OVERFLOW_BUG(); } } /* * zero part */ while (xrpnt <= xr_endptr) *xrpnt++ = 0.0; gr_infos->maxbandl = max + 1; gr_infos->maxb = longLimit[sfreq][gr_infos->maxbandl]; } #undef BUFFER_OVERFLOW_BUG if (bobug) { /* well, there was a bug report, where this happened! The problem was, that mixed blocks summed up to over 576, because of a wrong long/short switching index. It's likely, that the buffer overflow is fixed now, after correcting mixed block map. */ lame_report_fnc (mp->report_err ,"hip: OOPS, part2remain=%d l3=%d cb=%d bv=%d region1=%d region2=%d b-type=%d mixed=%d\n" ,part2remain ,bobug_l3 ,bobug_sb ,gr_infos->big_values ,gr_infos->region1start ,gr_infos->region2start ,gr_infos->block_type ,gr_infos->mixed_block_flag ); } if (isbug) { /* there is a bug report, where there is trouble with IS coded short block gain. Is intensity stereo coding implementation correct? Likely not. */ int i_stereo = 0; if (mp->fr.mode == MPG_MD_JOINT_STEREO) { i_stereo = mp->fr.mode_ext & 0x1; } lame_report_fnc (mp->report_err ,"hip: OOPS, 'gainpow2' buffer overflow lsf=%d i-stereo=%d b-type=%d mixed=%d\n" ,mp->fr.lsf ,i_stereo ,gr_infos->block_type ,gr_infos->mixed_block_flag ); } while (part2remain > 16) { getbits(mp, 16); /* Dismiss stuffing Bits */ part2remain -= 16; } if (part2remain > 0) getbits(mp, part2remain); else if (part2remain < 0) { lame_report_fnc(mp->report_err, "hip: Can't rewind stream by %d bits!\n", -part2remain); return 1; /* -> error */ } return 0; } /* intensity position, transmitted via a scalefactor value, allowed range is 0 - 15 */ static int scalefac_to_is_pos(int sf) { if (0 <= sf && sf <= 15) return sf; return (sf < 0 ? 0 : 15); } /* * III_stereo: calculate real channel values for Joint-I-Stereo-mode */ static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT], int *scalefac, struct gr_info_s *gr_infos, int sfreq, int ms_stereo, int lsf) { real(*xr)[SBLIMIT * SSLIMIT] = (real(*)[SBLIMIT * SSLIMIT]) xr_buf; struct bandInfoStruct const *bi = (struct bandInfoStruct const *) &bandInfo[sfreq]; real *tabl1, *tabl2; if (lsf) { int p = gr_infos->scalefac_compress & 0x1; if (ms_stereo) { tabl1 = pow1_2[p]; tabl2 = pow2_2[p]; } else { tabl1 = pow1_1[p]; tabl2 = pow2_1[p]; } } else { if (ms_stereo) { tabl1 = tan1_2; tabl2 = tan2_2; } else { tabl1 = tan1_1; tabl2 = tan2_1; } } if (gr_infos->block_type == 2) { int lwin, do_l = 0; if (gr_infos->mixed_block_flag) do_l = 1; for (lwin = 0; lwin < 3; lwin++) { /* process each window */ /* get first band with zero values */ int is_p, sb, idx, sfb = gr_infos->maxband[lwin]; /* sfb is minimal 3 for mixed mode */ if (sfb > 3) do_l = 0; for (; sfb < 12; sfb++) { is_p = scalefac[sfb * 3 + lwin - gr_infos->mixed_block_flag]; /* scale: 0-15 */ is_p = scalefac_to_is_pos(is_p); if (is_p != 7) { real t1, t2; sb = bi->shortDiff[sfb]; idx = bi->shortIdx[sfb] + lwin; t1 = tabl1[is_p]; t2 = tabl2[is_p]; for (; sb > 0; sb--, idx += 3) { real v = xr[0][idx]; xr[0][idx] = v * t1; xr[1][idx] = v * t2; } } } #if 1 /* in the original: copy 10 to 11 , here: copy 11 to 12 maybe still wrong??? (copy 12 to 13?) */ is_p = scalefac[11 * 3 + lwin - gr_infos->mixed_block_flag]; /* scale: 0-15 */ sb = bi->shortDiff[12]; idx = bi->shortIdx[12] + lwin; #else is_p = scalefac[10 * 3 + lwin - gr_infos->mixed_block_flag]; /* scale: 0-15 */ sb = bi->shortDiff[11]; idx = bi->shortIdx[11] + lwin; #endif is_p = scalefac_to_is_pos(is_p); if (is_p != 7) { real t1, t2; t1 = tabl1[is_p]; t2 = tabl2[is_p]; for (; sb > 0; sb--, idx += 3) { real v = xr[0][idx]; xr[0][idx] = v * t1; xr[1][idx] = v * t2; } } } /* end for(lwin; .. ; . ) */ if (do_l) { /* also check l-part, if ALL bands in the three windows are 'empty' * and mode = mixed_mode */ int sfb = gr_infos->maxbandl; int idx = bi->longIdx[sfb]; for (; sfb < 8; sfb++) { int sb = bi->longDiff[sfb]; int is_p = scalefac[sfb]; /* scale: 0-15 */ is_p = scalefac_to_is_pos(is_p); if (is_p != 7) { real t1, t2; t1 = tabl1[is_p]; t2 = tabl2[is_p]; for (; sb > 0; sb--, idx++) { real v = xr[0][idx]; xr[0][idx] = v * t1; xr[1][idx] = v * t2; } } else idx += sb; } } } else { /* ((gr_infos->block_type != 2)) */ int sfb = gr_infos->maxbandl; int is_p, idx = bi->longIdx[sfb]; for (; sfb < 21; sfb++) { int sb = bi->longDiff[sfb]; is_p = scalefac[sfb]; /* scale: 0-15 */ is_p = scalefac_to_is_pos(is_p); if (is_p != 7) { real t1, t2; t1 = tabl1[is_p]; t2 = tabl2[is_p]; for (; sb > 0; sb--, idx++) { real v = xr[0][idx]; xr[0][idx] = v * t1; xr[1][idx] = v * t2; } } else idx += sb; } is_p = scalefac[20]; /* copy l-band 20 to l-band 21 */ is_p = scalefac_to_is_pos(is_p); idx = bi->longIdx[21]; if (is_p != 7) { int sb; real t1 = tabl1[is_p], t2 = tabl2[is_p]; for (sb = bi->longDiff[21]; sb > 0; sb--, idx++) { real v = xr[0][idx]; xr[0][idx] = v * t1; xr[1][idx] = v * t2; } } } /* ... */ } static void III_antialias(real xr[SBLIMIT][SSLIMIT], struct gr_info_s *gr_infos) { int sblim; if (gr_infos->block_type == 2) { if (!gr_infos->mixed_block_flag) return; sblim = 1; } else { sblim = gr_infos->maxb - 1; } /* 31 alias-reduction operations between each pair of sub-bands */ /* with 8 butterflies between each pair */ { int sb; real *xr1 = (real *) xr[1]; for (sb = sblim; sb; sb--, xr1 += 10) { int ss; real *cs = aa_cs, *ca = aa_ca; real *xr2 = xr1; for (ss = 7; ss >= 0; ss--) { /* upper and lower butterfly inputs */ real bu = *--xr2, bd = *xr1; *xr2 = (bu * (*cs)) - (bd * (*ca)); *xr1++ = (bd * (*cs++)) + (bu * (*ca++)); } } } } /* *INDENT-OFF* */ /* DCT insipired by Jeff Tsay's DCT from the maplay package this is an optimized version with manual unroll. References: [1] S. Winograd: "On Computing the Discrete Fourier Transform", Mathematics of Computation, Volume 32, Number 141, January 1978, Pages 175-199 */ static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf) { { real *in = inbuf; in[17]+=in[16]; in[16]+=in[15]; in[15]+=in[14]; in[14]+=in[13]; in[13]+=in[12]; in[12]+=in[11]; in[11]+=in[10]; in[10]+=in[9]; in[9] +=in[8]; in[8] +=in[7]; in[7] +=in[6]; in[6] +=in[5]; in[5] +=in[4]; in[4] +=in[3]; in[3] +=in[2]; in[2] +=in[1]; in[1] +=in[0]; in[17]+=in[15]; in[15]+=in[13]; in[13]+=in[11]; in[11]+=in[9]; in[9] +=in[7]; in[7] +=in[5]; in[5] +=in[3]; in[3] +=in[1]; { #define MACRO0(v) { \ real tmp; \ out2[9+(v)] = (tmp = sum0 + sum1) * w[27+(v)]; \ out2[8-(v)] = tmp * w[26-(v)]; } \ sum0 -= sum1; \ ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \ ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)]; #define MACRO1(v) { \ real sum0,sum1; \ sum0 = tmp1a + tmp2a; \ sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \ MACRO0(v); } #define MACRO2(v) { \ real sum0,sum1; \ sum0 = tmp2a - tmp1a; \ sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; \ MACRO0(v); } const real *c = COS9; real *out2 = o2; real *w = wintab; real *out1 = o1; real *ts = tsbuf; real ta33,ta66,tb33,tb66; ta33 = in[2*3+0] * c[3]; ta66 = in[2*6+0] * c[6]; tb33 = in[2*3+1] * c[3]; tb66 = in[2*6+1] * c[6]; { real tmp1a,tmp2a,tmp1b,tmp2b; tmp1a = in[2*1+0] * c[1] + ta33 + in[2*5+0] * c[5] + in[2*7+0] * c[7]; tmp1b = in[2*1+1] * c[1] + tb33 + in[2*5+1] * c[5] + in[2*7+1] * c[7]; tmp2a = in[2*0+0] + in[2*2+0] * c[2] + in[2*4+0] * c[4] + ta66 + in[2*8+0] * c[8]; tmp2b = in[2*0+1] + in[2*2+1] * c[2] + in[2*4+1] * c[4] + tb66 + in[2*8+1] * c[8]; MACRO1(0); MACRO2(8); } { real tmp1a,tmp2a,tmp1b,tmp2b; tmp1a = ( in[2*1+0] - in[2*5+0] - in[2*7+0] ) * c[3]; tmp1b = ( in[2*1+1] - in[2*5+1] - in[2*7+1] ) * c[3]; tmp2a = ( in[2*2+0] - in[2*4+0] - in[2*8+0] ) * c[6] - in[2*6+0] + in[2*0+0]; tmp2b = ( in[2*2+1] - in[2*4+1] - in[2*8+1] ) * c[6] - in[2*6+1] + in[2*0+1]; MACRO1(1); MACRO2(7); } { real tmp1a,tmp2a,tmp1b,tmp2b; tmp1a = in[2*1+0] * c[5] - ta33 - in[2*5+0] * c[7] + in[2*7+0] * c[1]; tmp1b = in[2*1+1] * c[5] - tb33 - in[2*5+1] * c[7] + in[2*7+1] * c[1]; tmp2a = in[2*0+0] - in[2*2+0] * c[8] - in[2*4+0] * c[2] + ta66 + in[2*8+0] * c[4]; tmp2b = in[2*0+1] - in[2*2+1] * c[8] - in[2*4+1] * c[2] + tb66 + in[2*8+1] * c[4]; MACRO1(2); MACRO2(6); } { real tmp1a,tmp2a,tmp1b,tmp2b; tmp1a = in[2*1+0] * c[7] - ta33 + in[2*5+0] * c[1] - in[2*7+0] * c[5]; tmp1b = in[2*1+1] * c[7] - tb33 + in[2*5+1] * c[1] - in[2*7+1] * c[5]; tmp2a = in[2*0+0] - in[2*2+0] * c[4] + in[2*4+0] * c[8] + ta66 - in[2*8+0] * c[2]; tmp2b = in[2*0+1] - in[2*2+1] * c[4] + in[2*4+1] * c[8] + tb66 - in[2*8+1] * c[2]; MACRO1(3); MACRO2(5); } { real sum0,sum1; sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0]; sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4]; MACRO0(4); } } } } /* * new DCT12 */ static void dct12(real *in,real *rawout1,real *rawout2,real *wi,real *ts) { #define DCT12_PART1 \ in5 = in[5*3]; \ in5 += (in4 = in[4*3]); \ in4 += (in3 = in[3*3]); \ in3 += (in2 = in[2*3]); \ in2 += (in1 = in[1*3]); \ in1 += (in0 = in[0*3]); \ \ in5 += in3; in3 += in1; \ \ in2 *= COS6_1; \ in3 *= COS6_1; \ #define DCT12_PART2 \ in0 += in4 * COS6_2; \ \ in4 = in0 + in2; \ in0 -= in2; \ \ in1 += in5 * COS6_2; \ \ in5 = (in1 + in3) * tfcos12[0]; \ in1 = (in1 - in3) * tfcos12[2]; \ \ in3 = in4 + in5; \ in4 -= in5; \ \ in2 = in0 + in1; \ in0 -= in1; { real in0,in1,in2,in3,in4,in5; real *out1 = rawout1; ts[SBLIMIT*0] = out1[0]; ts[SBLIMIT*1] = out1[1]; ts[SBLIMIT*2] = out1[2]; ts[SBLIMIT*3] = out1[3]; ts[SBLIMIT*4] = out1[4]; ts[SBLIMIT*5] = out1[5]; DCT12_PART1 { real tmp0,tmp1 = (in0 - in4); { real tmp2 = (in1 - in5) * tfcos12[1]; tmp0 = tmp1 + tmp2; tmp1 -= tmp2; } ts[(17-1)*SBLIMIT] = out1[17-1] + tmp0 * wi[11-1]; ts[(12+1)*SBLIMIT] = out1[12+1] + tmp0 * wi[6+1]; ts[(6 +1)*SBLIMIT] = out1[6 +1] + tmp1 * wi[1]; ts[(11-1)*SBLIMIT] = out1[11-1] + tmp1 * wi[5-1]; } DCT12_PART2 ts[(17-0)*SBLIMIT] = out1[17-0] + in2 * wi[11-0]; ts[(12+0)*SBLIMIT] = out1[12+0] + in2 * wi[6+0]; ts[(12+2)*SBLIMIT] = out1[12+2] + in3 * wi[6+2]; ts[(17-2)*SBLIMIT] = out1[17-2] + in3 * wi[11-2]; ts[(6+0)*SBLIMIT] = out1[6+0] + in0 * wi[0]; ts[(11-0)*SBLIMIT] = out1[11-0] + in0 * wi[5-0]; ts[(6+2)*SBLIMIT] = out1[6+2] + in4 * wi[2]; ts[(11-2)*SBLIMIT] = out1[11-2] + in4 * wi[5-2]; } in++; { real in0,in1,in2,in3,in4,in5; real *out2 = rawout2; DCT12_PART1 { real tmp0,tmp1 = (in0 - in4); { real tmp2 = (in1 - in5) * tfcos12[1]; tmp0 = tmp1 + tmp2; tmp1 -= tmp2; } out2[5-1] = tmp0 * wi[11-1]; out2[0+1] = tmp0 * wi[6+1]; ts[(12+1)*SBLIMIT] += tmp1 * wi[1]; ts[(17-1)*SBLIMIT] += tmp1 * wi[5-1]; } DCT12_PART2 out2[5-0] = in2 * wi[11-0]; out2[0+0] = in2 * wi[6+0]; out2[0+2] = in3 * wi[6+2]; out2[5-2] = in3 * wi[11-2]; ts[(12+0)*SBLIMIT] += in0 * wi[0]; ts[(17-0)*SBLIMIT] += in0 * wi[5-0]; ts[(12+2)*SBLIMIT] += in4 * wi[2]; ts[(17-2)*SBLIMIT] += in4 * wi[5-2]; } in++; { real in0,in1,in2,in3,in4,in5; real *out2 = rawout2; out2[12]=out2[13]=out2[14]=out2[15]=out2[16]=out2[17]=0.0; DCT12_PART1 { real tmp0,tmp1 = (in0 - in4); { real tmp2 = (in1 - in5) * tfcos12[1]; tmp0 = tmp1 + tmp2; tmp1 -= tmp2; } out2[11-1] = tmp0 * wi[11-1]; out2[6 +1] = tmp0 * wi[6+1]; out2[0+1] += tmp1 * wi[1]; out2[5-1] += tmp1 * wi[5-1]; } DCT12_PART2 out2[11-0] = in2 * wi[11-0]; out2[6 +0] = in2 * wi[6+0]; out2[6 +2] = in3 * wi[6+2]; out2[11-2] = in3 * wi[11-2]; out2[0+0] += in0 * wi[0]; out2[5-0] += in0 * wi[5-0]; out2[0+2] += in4 * wi[2]; out2[5-2] += in4 * wi[5-2]; } } /* *INDENT-ON* */ /* * III_hybrid */ static void III_hybrid(PMPSTR mp, real fsIn[SBLIMIT][SSLIMIT], real tsOut[SSLIMIT][SBLIMIT], int ch, struct gr_info_s *gr_infos) { real *tspnt = (real *) tsOut; real(*block)[2][SBLIMIT * SSLIMIT] = mp->hybrid_block; int *blc = mp->hybrid_blc; real *rawout1, *rawout2; int bt; int sb = 0; { int b = blc[ch]; rawout1 = block[b][ch]; b = -b + 1; rawout2 = block[b][ch]; blc[ch] = b; } if (gr_infos->mixed_block_flag) { sb = 2; dct36(fsIn[0], rawout1, rawout2, win[0], tspnt); dct36(fsIn[1], rawout1 + 18, rawout2 + 18, win1[0], tspnt + 1); rawout1 += 36; rawout2 += 36; tspnt += 2; } bt = gr_infos->block_type; if (bt == 2) { for (; sb < (int) gr_infos->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) { dct12(fsIn[sb], rawout1, rawout2, win[2], tspnt); dct12(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[2], tspnt + 1); } } else { for (; sb < (int) gr_infos->maxb; sb += 2, tspnt += 2, rawout1 += 36, rawout2 += 36) { dct36(fsIn[sb], rawout1, rawout2, win[bt], tspnt); dct36(fsIn[sb + 1], rawout1 + 18, rawout2 + 18, win1[bt], tspnt + 1); } } for (; sb < SBLIMIT; sb++, tspnt++) { int i; for (i = 0; i < SSLIMIT; i++) { tspnt[i * SBLIMIT] = *rawout1++; *rawout2++ = 0.0; } } } /* * main layer3 handler */ int layer3_audiodata_precedesframes(PMPSTR mp) { int audioDataInFrame; int framesToBacktrack; /* specific to Layer 3, since Layer 1 & 2 the audio data starts at the frame that describes it. */ /* determine how many bytes and therefore bitstream frames the audio data precedes it's matching frame */ /* lame_report_fnc(mp->report_err, "hip: main_data_begin = %d, mp->bsize %d, mp->fsizeold %d, mp->ssize %d\n", sideinfo.main_data_begin, mp->bsize, mp->fsizeold, mp->ssize); */ /* compute the number of frames to backtrack, 4 for the header, ssize already holds the CRC */ /* TODO Erroneously assumes current frame is same as previous frame. */ audioDataInFrame = mp->bsize - 4 - mp->ssize; framesToBacktrack = (mp->sideinfo.main_data_begin + audioDataInFrame - 1) / audioDataInFrame; /* lame_report_fnc(mp->report_err, "hip: audioDataInFrame %d framesToBacktrack %d\n", audioDataInFrame, framesToBacktrack); */ return framesToBacktrack; } int decode_layer3_sideinfo(PMPSTR mp) { struct frame *fr = &mp->fr; int stereo = fr->stereo; int single = fr->single; int ms_stereo; int sfreq = fr->sampling_frequency; int granules; int ch, gr, databits; if (stereo == 1) { /* stream is mono */ single = 0; } if (fr->mode == MPG_MD_JOINT_STEREO) { ms_stereo = fr->mode_ext & 0x2; } else ms_stereo = 0; if (fr->lsf) { granules = 1; III_get_side_info_2(mp, stereo, ms_stereo, sfreq, single); } else { granules = 2; III_get_side_info_1(mp, stereo, ms_stereo, sfreq, single); } databits = 0; for (gr = 0; gr < granules; ++gr) { for (ch = 0; ch < stereo; ++ch) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]); databits += gr_infos->part2_3_length; } } return databits - 8 * mp->sideinfo.main_data_begin; } int decode_layer3_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point, int (*synth_1to1_mono_ptr) (PMPSTR, real *, unsigned char *, int *), int (*synth_1to1_ptr) (PMPSTR, real *, int, unsigned char *, int *)) { int gr, ch, ss, clip = 0; int scalefacs[2][39]; /* max 39 for short[13][3] mode, mixed: 38, long: 22 */ /* struct III_sideinfo sideinfo; */ struct frame *fr = &(mp->fr); int stereo = fr->stereo; int single = fr->single; int ms_stereo, i_stereo; int sfreq = fr->sampling_frequency; int stereo1, granules; real hybridIn[2][SBLIMIT][SSLIMIT]; real hybridOut[2][SSLIMIT][SBLIMIT]; if (set_pointer(mp, (int) mp->sideinfo.main_data_begin) == MP3_ERR) return 0; if (stereo == 1) { /* stream is mono */ stereo1 = 1; single = 0; } else if (single >= 0) /* stream is stereo, but force to mono */ stereo1 = 1; else stereo1 = 2; if (fr->mode == MPG_MD_JOINT_STEREO) { ms_stereo = fr->mode_ext & 0x2; i_stereo = fr->mode_ext & 0x1; } else ms_stereo = i_stereo = 0; if (fr->lsf) { granules = 1; } else { granules = 2; } for (gr = 0; gr < granules; gr++) { { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[0].gr[gr]); long part2bits; if (fr->lsf) part2bits = III_get_scale_factors_2(mp, scalefacs[0], gr_infos, 0); else { part2bits = III_get_scale_factors_1(mp, scalefacs[0], gr_infos); } if (mp->pinfo != NULL) { int i; mp->pinfo->sfbits[gr][0] = part2bits; for (i = 0; i < 39; i++) mp->pinfo->sfb_s[gr][0][i] = scalefacs[0][i]; } /* lame_report_fnc(mp->report_err, "calling III dequantize sample 1 gr_infos->part2_3_length %d\n", gr_infos->part2_3_length); */ if (III_dequantize_sample(mp, hybridIn[0], scalefacs[0], gr_infos, sfreq, part2bits)) return clip; } if (stereo == 2) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[1].gr[gr]); long part2bits; if (fr->lsf) part2bits = III_get_scale_factors_2(mp, scalefacs[1], gr_infos, i_stereo); else { part2bits = III_get_scale_factors_1(mp, scalefacs[1], gr_infos); } if (mp->pinfo != NULL) { int i; mp->pinfo->sfbits[gr][1] = part2bits; for (i = 0; i < 39; i++) mp->pinfo->sfb_s[gr][1][i] = scalefacs[1][i]; } /* lame_report_fnc(mp->report_err, "calling III dequantize sample 2 gr_infos->part2_3_length %d\n", gr_infos->part2_3_length); */ if (III_dequantize_sample(mp, hybridIn[1], scalefacs[1], gr_infos, sfreq, part2bits)) return clip; if (ms_stereo) { int i; for (i = 0; i < SBLIMIT * SSLIMIT; i++) { real tmp0, tmp1; tmp0 = ((real *) hybridIn[0])[i]; tmp1 = ((real *) hybridIn[1])[i]; ((real *) hybridIn[1])[i] = tmp0 - tmp1; ((real *) hybridIn[0])[i] = tmp0 + tmp1; } } if (i_stereo) III_i_stereo(hybridIn, scalefacs[1], gr_infos, sfreq, ms_stereo, fr->lsf); if (ms_stereo || i_stereo || (single == 3)) { if (gr_infos->maxb > mp->sideinfo.ch[0].gr[gr].maxb) mp->sideinfo.ch[0].gr[gr].maxb = gr_infos->maxb; else gr_infos->maxb = mp->sideinfo.ch[0].gr[gr].maxb; } switch (single) { case 3: { int i; real *in0 = (real *) hybridIn[0], *in1 = (real *) hybridIn[1]; for (i = 0; i < (int) (SSLIMIT * gr_infos->maxb); i++, in0++) *in0 = (*in0 + *in1++); /* *0.5 done by pow-scale */ } break; case 1: { int i; real *in0 = (real *) hybridIn[0], *in1 = (real *) hybridIn[1]; for (i = 0; i < (int) (SSLIMIT * gr_infos->maxb); i++) *in0++ = *in1++; } break; } } if (mp->pinfo != NULL) { int i, sb; float ifqstep; mp->pinfo->bitrate = tabsel_123[fr->lsf][fr->lay - 1][fr->bitrate_index]; mp->pinfo->sampfreq = freqs[sfreq]; mp->pinfo->emph = fr->emphasis; mp->pinfo->crc = fr->error_protection; mp->pinfo->padding = fr->padding; mp->pinfo->stereo = fr->stereo; mp->pinfo->js = (fr->mode == MPG_MD_JOINT_STEREO); mp->pinfo->ms_stereo = ms_stereo; mp->pinfo->i_stereo = i_stereo; mp->pinfo->maindata = mp->sideinfo.main_data_begin; for (ch = 0; ch < stereo1; ch++) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]); mp->pinfo->big_values[gr][ch] = gr_infos->big_values; mp->pinfo->scalefac_scale[gr][ch] = gr_infos->scalefac_scale; mp->pinfo->mixed[gr][ch] = gr_infos->mixed_block_flag; mp->pinfo->mpg123blocktype[gr][ch] = gr_infos->block_type; mp->pinfo->mainbits[gr][ch] = gr_infos->part2_3_length; mp->pinfo->preflag[gr][ch] = gr_infos->preflag; if (gr == 1) mp->pinfo->scfsi[ch] = gr_infos->scfsi; } for (ch = 0; ch < stereo1; ch++) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]); ifqstep = (mp->pinfo->scalefac_scale[gr][ch] == 0) ? .5 : 1.0; if (2 == gr_infos->block_type) { for (i = 0; i < 3; i++) { for (sb = 0; sb < 12; sb++) { int j = 3 * sb + i; /* is_p = scalefac[sfb*3+lwin-gr_infos->mixed_block_flag]; */ /* scalefac was copied into pinfo->sfb_s[] above */ mp->pinfo->sfb_s[gr][ch][j] = -ifqstep * mp->pinfo->sfb_s[gr][ch][j - gr_infos->mixed_block_flag]; mp->pinfo->sfb_s[gr][ch][j] -= 2 * (mp->pinfo->sub_gain[gr][ch][i]); } mp->pinfo->sfb_s[gr][ch][3 * sb + i] = -2 * (mp->pinfo->sub_gain[gr][ch][i]); } } else { for (sb = 0; sb < 21; sb++) { /* scalefac was copied into pinfo->sfb[] above */ mp->pinfo->sfb[gr][ch][sb] = mp->pinfo->sfb_s[gr][ch][sb]; if (gr_infos->preflag) mp->pinfo->sfb[gr][ch][sb] += pretab1[sb]; mp->pinfo->sfb[gr][ch][sb] *= -ifqstep; } mp->pinfo->sfb[gr][ch][21] = 0; } } for (ch = 0; ch < stereo1; ch++) { int j = 0; for (sb = 0; sb < SBLIMIT; sb++) for (ss = 0; ss < SSLIMIT; ss++, j++) mp->pinfo->mpg123xr[gr][ch][j] = hybridIn[ch][sb][ss]; } } for (ch = 0; ch < stereo1; ch++) { struct gr_info_s *gr_infos = &(mp->sideinfo.ch[ch].gr[gr]); III_antialias(hybridIn[ch], gr_infos); III_hybrid(mp, hybridIn[ch], hybridOut[ch], ch, gr_infos); } for (ss = 0; ss < SSLIMIT; ss++) { if (single >= 0) { clip += (*synth_1to1_mono_ptr) (mp, hybridOut[0][ss], pcm_sample, pcm_point); } else { int p1 = *pcm_point; clip += (*synth_1to1_ptr) (mp, hybridOut[0][ss], 0, pcm_sample, &p1); clip += (*synth_1to1_ptr) (mp, hybridOut[1][ss], 1, pcm_sample, pcm_point); } } } return clip; } lame-3.100/mpglib/layer2.c000644 001751 001751 00000032137 13154046620 016706 0ustar00netchildnetchild000000 000000 /* * layer2.c: Mpeg Layer-2 audio decoder * * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: layer2.c,v 1.34 2017/08/22 23:31:07 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include "common.h" #include "layer2.h" #include "l2tables.h" #include "decode_i386.h" #ifdef WITH_DMALLOC #include #endif #include static int gd_are_hip_tables_layer2_initialized = 0; static unsigned char grp_3tab[32 * 3] = { 0, }; /* used: 27 */ static unsigned char grp_5tab[128 * 3] = { 0, }; /* used: 125 */ static unsigned char grp_9tab[1024 * 3] = { 0, }; /* used: 729 */ void hip_init_tables_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 unsigned char 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 unsigned char *itable, *tables[3] = { grp_3tab, grp_5tab, grp_9tab }; if (gd_are_hip_tables_layer2_initialized) { return; } gd_are_hip_tables_layer2_initialized = 1; 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++ = (real) (m * pow(2.0, (double) j / 3.0)); *table++ = 0.0; } } static unsigned char* grp_table_select(short d1, unsigned int idx) { /* RH: it seems to be common, that idx is larger than the table's sizes. is it OK to return a zero vector in this case? FIXME /*/ static unsigned char dummy_table[] = { 0,0,0 }; unsigned int x; switch (d1) { case 3: x = 3*3*3; idx = idx < x ? idx : x; return &grp_3tab[3 * idx]; case 5: x = 5*5*5; idx = idx < x ? idx : x; return &grp_5tab[3 * idx]; case 9: x = 9*9*9; idx = idx < x ? idx : x; return &grp_9tab[3 * idx]; default: /* fatal error */ assert(0); } return &dummy_table[0]; } typedef struct sideinfo_layer_II_struct { unsigned char allocation[SBLIMIT][2]; unsigned char scalefactor[SBLIMIT][2][3]; /* subband / channel / block */ } sideinfo_layer_II; static void II_step_one(PMPSTR mp, sideinfo_layer_II *si, struct frame *fr) { int nch = fr->stereo; int sblimit = fr->II_sblimit; int jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext << 2) + 4 : fr->II_sblimit; struct al_table2 const *alloc1 = fr->alloc; unsigned char scfsi[SBLIMIT][2]; int i, ch; memset(si, 0, sizeof(*si)); if (jsbound > sblimit) jsbound = sblimit; if (nch == 2) { for (i = 0; i < jsbound; ++i) { short step = alloc1->bits; unsigned char b0 = get_leq_8_bits(mp, step); unsigned char b1 = get_leq_8_bits(mp, step); alloc1 += ((size_t)1 << step); si->allocation[i][0] = b0; si->allocation[i][1] = b1; } for (i = jsbound; i < sblimit; ++i) { short step = alloc1->bits; unsigned char b0 = get_leq_8_bits(mp, step); alloc1 += ((size_t)1 << step); si->allocation[i][0] = b0; si->allocation[i][1] = b0; } for (i = 0; i < sblimit; ++i) { unsigned char n0 = si->allocation[i][0]; unsigned char n1 = si->allocation[i][1]; unsigned char b0 = n0 ? get_leq_8_bits(mp, 2) : 0; unsigned char b1 = n1 ? get_leq_8_bits(mp, 2) : 0; scfsi[i][0] = b0; scfsi[i][1] = b1; } } else { /* mono */ for (i = 0; i < sblimit; ++i) { short step = alloc1->bits; unsigned char b0 = get_leq_8_bits(mp, step); alloc1 += ((size_t)1 << step); si->allocation[i][0] = b0; } for (i = 0; i < sblimit; ++i) { unsigned char n0 = si->allocation[i][0]; unsigned char b0 = n0 ? get_leq_8_bits(mp, 2) : 0; scfsi[i][0] = b0; } } for (i = 0; i < sblimit; ++i) { for (ch = 0; ch < nch; ++ch) { unsigned char s0 = 0, s1 = 0, s2 = 0; if (si->allocation[i][ch]) { switch (scfsi[i][ch]) { case 0: s0 = get_leq_8_bits(mp, 6); s1 = get_leq_8_bits(mp, 6); s2 = get_leq_8_bits(mp, 6); break; case 1: s0 = get_leq_8_bits(mp, 6); s1 = s0; s2 = get_leq_8_bits(mp, 6); break; case 2: s0 = get_leq_8_bits(mp, 6); s1 = s0; s2 = s0; break; case 3: s0 = get_leq_8_bits(mp, 6); s1 = get_leq_8_bits(mp, 6); s2 = s1; break; default: assert(0); } } si->scalefactor[i][ch][0] = s0; si->scalefactor[i][ch][1] = s1; si->scalefactor[i][ch][2] = s2; } } } static void II_step_two(PMPSTR mp, sideinfo_layer_II* si, struct frame *fr, int gr, real fraction[2][4][SBLIMIT]) { struct al_table2 const *alloc1 = fr->alloc; int sblimit = fr->II_sblimit; int jsbound = (fr->mode == MPG_MD_JOINT_STEREO) ? (fr->mode_ext << 2) + 4 : fr->II_sblimit; int i, ch, nch = fr->stereo; double cm, r0, r1, r2; if (jsbound > sblimit) jsbound = sblimit; for (i = 0; i < jsbound; ++i) { short step = alloc1->bits; for (ch = 0; ch < nch; ++ch) { unsigned char ba = si->allocation[i][ch]; if (ba) { unsigned char x1 = si->scalefactor[i][ch][gr]; struct al_table2 const *alloc2 = alloc1 + ba; short k = alloc2->bits; short d1 = alloc2->d; assert( k <= 16 ); k = (k <= 16) ? k : 16; assert( x1 < 64 ); x1 = (x1 < 64) ? x1 : 63; if (d1 < 0) { int v0 = getbits(mp, k); int v1 = getbits(mp, k); int v2 = getbits(mp, k); cm = muls[k][x1]; r0 = (v0 + d1) * cm; r1 = (v1 + d1) * cm; r2 = (v2 + d1) * cm; } else { unsigned int idx = getbits(mp, k); unsigned char *tab = grp_table_select(d1, idx); unsigned char k0 = tab[0]; unsigned char k1 = tab[1]; unsigned char k2 = tab[2]; r0 = muls[k0][x1]; r1 = muls[k1][x1]; r2 = muls[k2][x1]; } fraction[ch][0][i] = (real) r0; fraction[ch][1][i] = (real) r1; fraction[ch][2][i] = (real) r2; } else { fraction[ch][0][i] = fraction[ch][1][i] = fraction[ch][2][i] = 0.0; } } alloc1 += ((size_t)1 << step); } for (i = jsbound; i < sblimit; i++) { short step = alloc1->bits; unsigned char ba = si->allocation[i][0]; if (ba) { struct al_table2 const *alloc2 = alloc1 + ba; short k = alloc2->bits; short d1 = alloc2->d; assert( k <= 16 ); k = (k <= 16) ? k : 16; if (d1 < 0) { int v0 = getbits(mp, k); int v1 = getbits(mp, k); int v2 = getbits(mp, k); for (ch = 0; ch < nch; ++ch) { unsigned char x1 = si->scalefactor[i][ch][gr]; assert( x1 < 64 ); x1 = (x1 < 64) ? x1 : 63; cm = muls[k][x1]; r0 = (v0 + d1) * cm; r1 = (v1 + d1) * cm; r2 = (v2 + d1) * cm; fraction[ch][0][i] = (real) r0; fraction[ch][1][i] = (real) r1; fraction[ch][2][i] = (real) r2; } } else { unsigned int idx = getbits(mp, k); unsigned char *tab = grp_table_select(d1, idx); unsigned char k0 = tab[0]; unsigned char k1 = tab[1]; unsigned char k2 = tab[2]; for (ch = 0; ch < nch; ++ch) { unsigned char x1 = si->scalefactor[i][ch][gr]; assert( x1 < 64 ); x1 = (x1 < 64) ? x1 : 63; r0 = muls[k0][x1]; r1 = muls[k1][x1]; r2 = muls[k2][x1]; fraction[ch][0][i] = (real) r0; fraction[ch][1][i] = (real) r1; fraction[ch][2][i] = (real) r2; } } } else { fraction[0][0][i] = fraction[0][1][i] = fraction[0][2][i] = 0.0; fraction[1][0][i] = fraction[1][1][i] = fraction[1][2][i] = 0.0; } alloc1 += ((size_t)1 << step); } if (sblimit > fr->down_sample_sblimit) { sblimit = fr->down_sample_sblimit; } for (ch = 0; ch < nch; ++ch) { for (i = sblimit; i < SBLIMIT; ++i) { fraction[ch][0][i] = fraction[ch][1][i] = fraction[ch][2][i] = 0.0; } } } static void II_select_table(struct frame *fr) { /* *INDENT-OFF* */ 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 } } }; /* *INDENT-ON* */ int table, sblim; static const struct al_table2 *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 = (struct al_table2 const *) tables[table]; fr->II_sblimit = sblim; } int decode_layer2_sideinfo(PMPSTR mp) { (void) mp; /* FIXME: extract side information and check values */ return 0; } int decode_layer2_frame(PMPSTR mp, unsigned char *pcm_sample, int *pcm_point) { real fraction[2][4][SBLIMIT]; /* pick_table clears unused subbands */ sideinfo_layer_II si; struct frame *fr = &(mp->fr); int single = fr->single; int i, j, clip = 0; II_select_table(fr); II_step_one(mp, &si, fr); if (fr->stereo == 1 || single == 3) single = 0; if (single >= 0) { for (i = 0; i < SCALE_BLOCK; i++) { II_step_two(mp, &si, fr, i >> 2, fraction); for (j = 0; j < 3; j++) { clip += synth_1to1_mono(mp, fraction[single][j], pcm_sample, pcm_point); } } } else { for (i = 0; i < SCALE_BLOCK; i++) { II_step_two(mp, &si, fr, i >> 2, fraction); for (j = 0; j < 3; j++) { int p1 = *pcm_point; clip += synth_1to1(mp, fraction[0][j], 0, pcm_sample, &p1); clip += synth_1to1(mp, fraction[1][j], 1, pcm_sample, pcm_point); } } } return clip; } lame-3.100/mpglib/interface.h000644 001751 001751 00000003765 11351677373 017476 0ustar00netchildnetchild000000 000000 /* * Copyright (C) 1999-2010 The L.A.M.E. project * * Initially written by Michael Hipp, see also AUTHORS and README. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef INTERFACE_H_INCLUDED #define INTERFACE_H_INCLUDED #ifdef __cplusplus extern "C" { #endif #include "common.h" int InitMP3(PMPSTR mp); int decodeMP3(PMPSTR mp, unsigned char *inmemory, int inmemsize, char *outmemory, int outmemsize, int *done); void ExitMP3(PMPSTR mp); /* added decodeMP3_unclipped to support returning raw floating-point values of samples. The representation of the floating-point numbers is defined in mpg123.h as #define real. It is 64-bit double by default. No more than 1152 samples per channel are allowed. */ int decodeMP3_unclipped(PMPSTR mp, unsigned char *inmemory, int inmemsize, char *outmemory, int outmemsize, int *done); /* added remove_buf to support mpglib seeking */ void remove_buf(PMPSTR mp); /* added audiodata_precedesframes to return the number of bitstream frames the audio data will precede the current frame by for Layer 3 data. Aids seeking. */ int audiodata_precedesframes(PMPSTR mp); /* Resets decoding. Aids seeking. */ void decode_reset(PMPSTR mp); #ifdef __cplusplus } #endif #endif lame-3.100/misc/mlame_corr.c000644 001751 001751 00000012052 07215014537 017306 0ustar00netchildnetchild000000 000000 /* Bug: - runs only on little endian machines for WAV files - Not all WAV files are recognized */ #include #include #include #include #include #include #include typedef signed short stereo [2]; typedef signed short mono; typedef struct { unsigned long long n; long double x; long double x2; long double y; long double y2; long double xy; } korr_t; void analyze_stereo ( const stereo* p, size_t len, korr_t* k ) { long double _x = 0, _x2 = 0, _y = 0, _y2 = 0, _xy = 0; double t1; double t2; k -> n += len; for ( ; len--; p++ ) { _x += (t1 = (*p)[0]); _x2 += t1 * t1; _y += (t2 = (*p)[1]); _y2 += t2 * t2; _xy += t1 * t2; } k -> x += _x ; k -> x2 += _x2; k -> y += _y ; k -> y2 += _y2; k -> xy += _xy; } void analyze_dstereo ( const stereo* p, size_t len, korr_t* k ) { static double l0 = 0; static double l1 = 0; long double _x = 0, _x2 = 0, _y = 0, _y2 = 0, _xy = 0; double t1; double t2; k -> n += len; for ( ; len--; p++ ) { _x += (t1 = (*p)[0] - l0); _x2 += t1 * t1; _y += (t2 = (*p)[1] - l1); _y2 += t2 * t2; _xy += t1 * t2; l0 = (*p)[0]; l1 = (*p)[1]; } k -> x += _x ; k -> x2 += _x2; k -> y += _y ; k -> y2 += _y2; k -> xy += _xy; } void analyze_mono ( const mono* p, size_t len, korr_t* k ) { long double _x = 0, _x2 = 0; double t1; k -> n += len; for ( ; len--; p++ ) { _x += (t1 = (*p)); _x2 += t1 * t1; } k -> x += _x ; k -> x2 += _x2; k -> y += _x ; k -> y2 += _x2; k -> xy += _x2; } void analyze_dmono ( const mono* p, size_t len, korr_t* k ) { static double l0 = 0; long double _x = 0, _x2 = 0; double t1; k -> n += len; for ( ; len--; p++ ) { _x += (t1 = (*p) - l0); _x2 += t1 * t1; l0 = *p; } k -> x += _x ; k -> x2 += _x2; k -> y += _x ; k -> y2 += _x2; k -> xy += _x2; } int sgn ( long double x ) { if ( x > 0 ) return +1; if ( x < 0 ) return -1; return 0; } int report ( const korr_t* k ) { long double scale = sqrt ( 1.e5 / (1<<29) ); // Sine Full Scale is +10 dB, 7327 = 100% long double r; long double rd; long double sx; long double sy; long double x; long double y; long double b; r = (k->x2*k->n - k->x*k->x) * (k->y2*k->n - k->y*k->y); r = r > 0.l ? (k->xy*k->n - k->x*k->y) / sqrt (r) : 1.l; sx = k->n > 1 ? sqrt ( (k->x2 - k->x*k->x/k->n) / (k->n - 1) ) : 0.l; sy = k->n > 1 ? sqrt ( (k->y2 - k->y*k->y/k->n) / (k->n - 1) ) : 0.l; x = k->n > 0 ? k->x/k->n : 0.l; y = k->n > 0 ? k->y/k->n : 0.l; b = atan2 ( sy, sx * sgn (r) ) * ( 8 / M_PI); // 6 5 4 3 2 // _______________________________ // |\ | /| // 7 | \ | / | 1 // | \ | / | // | \ | / | // | \ | / | // 8 |--------------+--------------| 0 // | / | \ | // | / | \ | // -7 | / | \ | -1 // | / | \ | // |/_____________|_____________\| // // -6 -5 -4 -3 -2 if ( r > 0.98 ) { printf ("-mm"); // disguised mono file return; } if ( fabs (b-2) > 0.666 ) { printf ("-ms"); // low profit for joint stereo return; } if ( r < 0.333 ) { printf ("-ms"); // low profit for joint stereo return; } } void readfile ( const char* name, int fd ) { unsigned short header [22]; stereo s [4096]; mono m [8192]; size_t samples; korr_t k0; korr_t k1; memset ( &k0, 0, sizeof(k0) ); memset ( &k1, 0, sizeof(k1) ); read ( fd, header, sizeof(header) ); switch ( header[11] ) { case 1: printf ("-mm\n"); break; case 2: while ( ( samples = read (fd, s, sizeof(s)) ) > 0 ) { analyze_stereo ( s, samples / sizeof (*s), &k0 ); analyze_dstereo ( s, samples / sizeof (*s), &k1 ); } report (&k0); report (&k1); break; default: fprintf ( stderr, "%u Channels not supported: %s\n", header[11], name ); break; } } int main ( int argc, char** argv ) { char* name; int fd; if (argc < 2) readfile ( "", 0 ); else while ( (name = *++argv) != NULL ) { if ( (fd = open ( name, O_RDONLY )) >= 0 ) { readfile ( name, fd ); close ( fd ); } else { fprintf ( stderr, "Can't open: %s\n", name ); } } return 0; } lame-3.100/misc/depcomp000755 001751 001751 00000056017 13126231407 016403 0ustar00netchildnetchild000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: lame-3.100/misc/mlame000755 001751 001751 00000012314 07576702132 016051 0ustar00netchildnetchild000000 000000 #!/bin/sh ############################################################################ # # Run the LAME encoder on multiple files, with option to delete .wav files # after encoding. "mlame -?" will give instructions. # # Robert Hegemann # modified on request: Frank Klemm # ############################################################################ # encoder path to use mp3coder="lame" mp3analyzer="mlame_corr" # default options to use options_low="-h -d -mj -b 128" options_high="-h -d -mj -V 1 -b 112 -B 320" options=$options_high # remove source? removesource=false # force overwrite of destination testoverwrite=true # waiting after error report n seconds errordelay=1 helptext="\n\ This script runs the LAME mp3 encoder on multiple files: \n\n\ $0 [options] ... \n\ \n\ options:\n\ -? this help text\n\ -r remove files after encoding\n\ -f force overwrite of destination if exists\n\ -l low quality settings\n\ -h high quality settings\n\ -o \"\" overrides script default options \n\ example:\n\ $0 -r -f -o \"-v -V 0 -b 112\" a*.wav z*.aif g*.mp?\n\ \n\ " # process command-line options # this could be extended to fake the # commandline interface of the mp3encoder while getopts ":o:r:h:l:f" optn; do case $optn in o ) options=$OPTARG # replace default options echo New lame options are \'$options\' ;; r ) removesource=true echo Removing source files after successfully converting ;; f ) testoverwrite=false echo Force overwriting existing destination files ;; h ) options=$options_high ;; l ) options=$options_low ;; \? ) printf "$helptext" sleep $errordelay exit 1 ;; esac done shift $(($OPTIND - 1)) # no files remaining? if [ "$1" = "" ]; then printf "$helptext" sleep $errordelay exit 1 fi # process input-files for src in "$@"; do case $src in *[.][wW][aA][vV] ) dst=${src%[.][wW][aA][vV]}.mp3 if [ -f "$src" ]; then if [ $testoverwrite = true -a -f "$dst" ]; then echo \'$dst\' already exists, skipping sleep $errordelay elif $mp3coder $options `$mp3analyzer "$src"` "$src" "$dst"; then if [ $removesource = true ]; then rm -f "$src" fi else echo converting of \'$src\' to \'$dst\' failed sleep $errordelay fi else echo No source file \'$src\' found. sleep $errordelay fi ;; *[.][aA][iI][fF] ) dst=${src%[.][aA][iI][fF]}.mp3 if [ -f "$src" ]; then if [ $testoverwrite = true -a -f "$dst" ]; then echo \'$dst\' already exists, skipping sleep $errordelay elif $mp3coder $options "$src" "$dst"; then if [ $removesource = true ]; then rm -f "$src" fi else echo converting of \'$src\' to \'$dst\' failed sleep $errordelay fi else echo No source file \'$src\' found. sleep $errordelay fi ;; *[.][aA][iI][fF][fF] ) dst=${src%[.][aA][iI][fF][fF]}.mp3 if [ -f "$src" ]; then if [ $testoverwrite = true -a -f "$dst" ]; then echo \'$dst\' already exists, skipping sleep $errordelay elif $mp3coder $options "$src" "$dst"; then if [ $removesource = true ]; then rm -f "$src" fi else echo converting of \'$src\' to \'$dst\' failed sleep $errordelay fi else echo No source file \'$src\' found. sleep $errordelay fi ;; *[.][mM][pP][gG12] ) dst=${src%[.][mM][pP][gG12]}.mp3 if [ -f "$src" ]; then if [ $testoverwrite = true -a -f "$dst" ]; then echo \'$dst\' already exists, skipping sleep $errordelay elif $mp3coder $options "$src" "$dst"; then if [ $removesource = true ]; then rm -f "$src" fi else echo converting of \'$src\' to \'$dst\' failed sleep $errordelay fi else echo No source file \'$src\' found. sleep $errordelay fi ;; *[.][mM][pP]3 ) dst=${src%[.][mM][pP]3}-new-converted-file.${src##*.} if [ -f "$src" ]; then if [ $testoverwrite = true -a -f "$dst" ]; then echo \'$dst\' already exists, skipping sleep $errordelay elif $mp3coder $options "$src" "$dst"; then if [ $removesource = true ]; then mv -f "$dst" "$src" fi else echo converting of \'$src\' to \'$dst\' failed sleep $errordelay fi else echo No source file \'$src\' found. sleep $errordelay fi ;; * ) # the rest echo warning: File extention \'.${src##*.}\' not supported sleep $errordelay ;; esac done lame-3.100/misc/mk_mp3.sh000644 001751 001751 00000012107 11646277263 016557 0ustar00netchildnetchild000000 000000 ### (c)2000-2011 Robert Hegemann ### ### ///-/ ### ### SRC_ROOT : where the CD are located ### DST_ROOT : where newly encoded tracks should go ### DONE_ROOT : where verified encoded tracks are located ### LAME_EXE : points to program ### LAME_OPT : what options to use ################################################################ _V=2 SRC_ROOT=/windows/W/CD DST_ROOT=/windows/Z/mp3v${_V}wg DONE_ROOT=/windows/Z/mp3v${_V}wg LAME_EXE=lame-399 LAME_OPT="-V${_V} --quiet --noreplaygain --id3v2-only" SKIP_DONE_FOLDER_EXISTS=1 SKIP_DEST_FOLDER_EXISTS=1 SCAN_ALBUM_GAIN_ONLY=0 case "$0" in mk_album_gain.sh) SCAN_ALBUM_GAIN_ONLY=1;; esac case "$1" in --scan-gain-only) SCAN_ALBUM_GAIN_ONLY=1;; esac if [ $SCAN_ALBUM_GAIN_ONLY = 1 ] then SKIP_DONE_FOLDER_EXISTS=0 SKIP_DEST_FOLDER_EXISTS=0 fi if (test -e "${SRC_ROOT}") then if test -e "${DST_ROOT}" then : else mkdir "${DST_ROOT}" fi for _artist in "${SRC_ROOT}"/* do _ARTIST=$(basename "${_artist}") DST_ARTIST=${DST_ROOT}/${_ARTIST} DS2_ARTIST=${DONE_ROOT}/${_ARTIST} echo "${_ARTIST}" VARIOUS_ARTISTS_MODE=0 case "${_ARTIST}" in "Various" | "Various Artists" ) VARIOUS_ARTISTS_MODE=1 ID3_ALBUM_ARTIST="Various Artists" ;; "Musik Express" ) VARIOUS_ARTISTS_MODE=2 ID3_ALBUM_ARTIST="Various (ME)" ;; *) VARIOUS_ARTISTS_MODE=0 ID3_ALBUM_ARTIST=${_ARTIST} ;; esac for _cd in "${_artist}"/* do _CD=$(basename "${_cd}") DST_CD=${DST_ARTIST}/${_CD} DS2_CD=${DS2_ARTIST}/${_CD} ID3_YR=`echo "${_CD}"|cut -b 1-4` ID3_CD=`echo "${_CD}"|cut -b 6-` if [ $SKIP_DONE_FOLDER_EXISTS = 1 ] then if test -e "${DS2_CD}" then continue fi fi if [ $SKIP_DEST_FOLDER_EXISTS = 1 ] then if test -e "${DST_CD}" then continue fi fi echo "${_ARTIST} / ${_CD}" ALBUM_GAIN="1.0" if test -e "${_cd}/album_gain_scale.txt" then ALBUM_GAIN=`cat "${_cd}/album_gain_scale.txt"` elif test -e "${DS2_CD}/album_gain_scale.txt" then ALBUM_GAIN=`cat "${DS2_CD}/album_gain_scale.txt"` elif test -e "${DST_CD}/album_gain_scale.txt" then ALBUM_GAIN=`cat "${DST_CD}/album_gain_scale.txt"` else unset ALBUM_GAIN fi if [ "${ALBUM_GAIN}" = "" ] then if test -e "${DST_ARTIST}" then : else mkdir "${DST_ARTIST}" fi if test -e "${DST_CD}" then : else mkdir "${DST_CD}" fi ALBUM_GAIN=`wavegain -x -a "${_cd}"/ 2>/dev/null` echo ${ALBUM_GAIN} > "${DST_CD}/album_gain_scale.txt" fi if [ $SCAN_ALBUM_GAIN_ONLY = 1 ] then continue fi for _song in "${_cd}"/*.wav do _SONG=$(basename "${_song}" .wav) DST_SONG=${DST_CD}/$(basename "${_song}" .wav).mp3 if test -e "${DST_SONG}" then : else if test -e "${DST_ARTIST}" then : else mkdir "${DST_ARTIST}" fi if test -e "${DST_CD}" then : else mkdir "${DST_CD}" fi ID3_TRACK=`echo "${_SONG}"|cut -b 1-2` if [ $VARIOUS_ARTISTS_MODE = 0 ] then ID3_TITLE=`echo "${_SONG}"|cut -b 4-` ID3_TRACK_ARTIST=${_ARTIST} else ID3_TITLE=`echo "${_SONG% - *}"|cut -b 4-` ID3_TRACK_ARTIST=`echo "${_SONG#* - }"` fi ${LAME_EXE} ${LAME_OPT} \ --scale ${ALBUM_GAIN} \ --ta "${ID3_TRACK_ARTIST}" \ --tl "${ID3_CD}" \ --ty "${ID3_YR}" \ --tt "${ID3_TITLE}" \ --tn "${ID3_TRACK}" \ --tv "TXXX=ALBUM ARTIST=${ID3_ALBUM_ARTIST}" \ --tv "TXXX=LAME SCALE=${ALBUM_GAIN}" \ "${_song}" "${DST_SONG}" & fi done wait done done else echo Quellverzeichnis ${SRC_ROOT} existiert nicht. fi ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/abx.c�������������������������������������������������������������������������������000644 �001751 �001751 �00000114540 11043377543 015750� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Usage: abx original_file test_file * * Ask you as long as the probability is below the given percentage that * you recognize differences * * Example: abx music.wav music.mp3 * abx music.wav music.mp3 --help * * Note: several 'decoding' utilites must be on the 'right' place * * Bugs: * fix path of decoding utilities * only 16 bit support * only support of the same sample frequency * no exact WAV file header analysis * no mouse or joystick support * don't uses functionality of ath.c * only 2 files are comparable * worse user interface * quick & dirty hack * wastes memory * compile time warnings * buffer overruns possible * no dithering if recalcs are necessary * correlation only done with one channel (2 channels, sum, what is better?) * lowpass+highpass filtering (300 Hz+2*5 kHz) before delay+amplitude corr * cross fade at start/stop * non portable keyboard * fade out on quit, fade in on start * level/delay ajustment should be switchable * pause key missing * problems with digital silence files (division by 0) * Gr��e cross corr fenster 2^16...18 * Stellensuche, ab 0*len oder 0.1*len oder 0.25*len, nach Effektiv oder Spitzenwert * Absturz bei LPAC feeding, warum? * Als 'B' beim Ratespiel sollte auch '0'...'9' verwendbar sein * Oder mit einem Filter 300 Hz...3 kHz vorher filtern? * Multiple encoded differenziertes Signal * Amplitudenanpassung schaltbar machen? * Direkt auf der Kommandozeile kodieren: * abx "test.wav" "!lame -b128 test.wav -" */ // If the program should increase it priority while playing define USE_NICE. // Program must be installed SUID root. Decompressing phase is using NORMAL priority #define USE_NICE // Not only increase priority but change to relatime scheduling. Program must be installed SUID root #define USE_REALTIME // Path of the programs: mpg123, mppdec, faad, ac3dec, ogg123, lpac, shorten, MAC, flac //#define PATH_OF_EXTERNAL_TOOLS_FOR_UNCOMPRESSING "/usr/local/bin/" #define PATH_OF_EXTERNAL_TOOLS_FOR_UNCOMPRESSING "" #if defined HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include <ctype.h> #include <fcntl.h> #include <limits.h> #include <math.h> #include <memory.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <termios.h> #include <time.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/mman.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #define MAX (1<<17) #if defined HAVE_SYS_SOUNDCARD_H # include <sys/soundcard.h> #elif defined HAVE_LINUX_SOUNDCARD_H # include <linux/soundcard.h> #else # include <linux/soundcard.h> /* stand alone compilable for my tests */ #endif #if defined USE_NICE # include <sys/resource.h> #endif #if defined USE_REALTIME # include <sched.h> #endif #define BF ((freq)/25) #define MAX_LEN (210 * 44100) #define DMA_SAMPLES 512 /* My Linux driver uses a DMA buffer of 65536*16 bit, which is 32768 samples in 16 bit stereo mode */ void Set_Realtime ( void ) { #if defined USE_REALTIME struct sched_param sp; int ret; memset ( &sp, 0, sizeof(sp) ); seteuid ( 0 ); sp.sched_priority = sched_get_priority_min ( SCHED_FIFO ); ret = sched_setscheduler ( 0, SCHED_RR, &sp ); seteuid ( getuid() ); #endif #if defined USE_NICE seteuid ( 0 ); setpriority ( PRIO_PROCESS, getpid(), -20 ); seteuid ( getuid() ); #endif } int verbose = 0; static struct termios stored_settings; void reset ( void ) { tcsetattr ( 0, TCSANOW, &stored_settings ); } void set ( void ) { struct termios new_settings; tcgetattr ( 0, &stored_settings ); new_settings = stored_settings; new_settings.c_lflag &= ~ECHO; /* Disable canonical mode, and set buffer size to 1 byte */ new_settings.c_lflag &= ~ICANON; new_settings.c_cc[VTIME] = 0; new_settings.c_cc[VMIN] = 1; tcsetattr(0,TCSANOW,&new_settings); return; } int sel ( void ) { struct timeval t; fd_set fd [1]; int ret; unsigned char c; FD_SET (0, fd); t.tv_sec = 0; t.tv_usec = 0; ret = select ( 1, fd, NULL, NULL, &t ); switch ( ret ) { case 0: return -1; case 1: ret = read (0, &c, 1); return ret == 1 ? c : -1; default: return -2; } } #define FFT_ERR_OK 0 // no error #define FFT_ERR_LD 1 // len is not a power of 2 #define FFT_ERR_MAX 2 // len too large typedef float f_t; typedef f_t compl [2]; compl root [MAX >> 1]; // Sinus-/Kosinustabelle size_t shuffle [MAX >> 1] [2]; // Shuffle-Tabelle size_t shuffle_len; // Bitinversion size_t swap ( size_t number, int bits ) { size_t ret; for ( ret = 0; bits--; number >>= 1 ) { ret = ret + ret + (number & 1); } return ret; } // Bestimmen des Logarithmus dualis int ld ( size_t number ) { size_t i; for ( i = 0; i < sizeof(size_t)*CHAR_BIT; i++ ) if ( ((size_t)1 << i) == number ) return i; return -1; } // Die eigentliche FFT int fft ( compl* fn, const size_t newlen ) { static size_t len = 0; static int bits = 0; size_t i; size_t j; size_t k; size_t p; /* Tabellen initialisieren */ if ( newlen != len ) { len = newlen; if ( (bits=ld(len)) == -1 ) return FFT_ERR_LD; for ( i = 0; i < len; i++ ) { j = swap ( i, bits ); if ( i < j ) { shuffle [shuffle_len] [0] = i; shuffle [shuffle_len] [1] = j; shuffle_len++; } } for ( i = 0; i < (len>>1); i++ ) { double x = (double) swap ( i+i, bits ) * 2*M_PI/len; root [i] [0] = cos (x); root [i] [1] = sin (x); } } /* Eigentliche Transformation */ p = len >> 1; do { f_t* bp = (f_t*) root; f_t* si = (f_t*) fn; f_t* di = (f_t*) fn+p+p; do { k = p; do { f_t mulr = bp[0]*di[0] - bp[1]*di[1]; f_t muli = bp[1]*di[0] + bp[0]*di[1]; di[0] = si[0] - mulr; di[1] = si[1] - muli; si[0] += mulr; si[1] += muli; si += 2, di += 2; } while ( --k ); si += p+p, di += p+p, bp += 2; } while ( si < &fn[len][0] ); } while (p >>= 1); /* Bitinversion */ for ( k = 0; k < shuffle_len; k++ ) { f_t tmp; i = shuffle [k] [0]; j = shuffle [k] [1]; tmp = fn [i][0]; fn [i][0] = fn [j][0]; fn [j][0] = tmp; tmp = fn [i][1]; fn [i][1] = fn [j][1]; fn [j][1] = tmp; } return FFT_ERR_OK; } void printnumber ( long double x ) { unsigned exp = 0; if ( x < 9.999995 ) fprintf ( stderr, "%7.5f", (double)x ); else if ( x < 99.99995 ) fprintf ( stderr, "%7.4f", (double)x ); else if ( x < 999.9995 ) fprintf ( stderr, "%7.3f", (double)x ); else if ( x < 9999.995 ) fprintf ( stderr, "%7.2f", (double)x ); else if ( x < 99999.95 ) fprintf ( stderr, "%7.1f", (double)x ); else if ( x < 999999.5 ) fprintf ( stderr, "%6.0f.", (double)x ); else if ( x < 9999999.5 ) fprintf ( stderr, "%7.0f", (double)x ); else if ( x < 9.9995e9 ) { while ( x >= 9.9995 ) exp++ , x /= 10; fprintf ( stderr, "%5.3fe%01u", (double)x, exp ); } else if ( x < 9.995e99 ) { while ( x >= 9.5e6 ) exp+=6 , x /= 1.e6; while ( x >= 9.995 ) exp++ , x /= 10; fprintf ( stderr, "%4.2fe%02u", (double)x, exp ); } else if ( x < 9.95e999L ) { while ( x >= 9.5e18 ) exp+=18, x /= 1.e18; while ( x >= 9.95 ) exp++ , x /= 10; fprintf ( stderr, "%3.1fe%03u", (double)x, exp ); } else { while ( x >= 9.5e48 ) exp+=48, x /= 1.e48; while ( x >= 9.5 ) exp++ , x /= 10; fprintf ( stderr, "%1.0f.e%04u", (double)x, exp ); } } double logdual ( long double x ) { unsigned exp = 0; while ( x >= 18446744073709551616. ) x /= 18446744073709551616., exp += 64; while ( x >= 256. ) x /= 256., exp += 8; while ( x >= 2. ) x /= 2., exp += 1; return exp + log (x)/log(2); } int random_number ( void ) { struct timeval t; unsigned long val; gettimeofday ( &t, NULL ); val = t.tv_sec ^ t.tv_usec ^ rand(); val ^= val >> 16; val ^= val >> 8; val ^= val >> 4; val ^= val >> 2; val ^= val >> 1; return val & 1; } long double prob ( int last, int total ) { long double sum = 0.; long double tmp = 1.; int i; int j = total; if ( 2*last == total ) return 1.; if ( 2*last > total ) last = total - last; for ( i = 0; i <= last; i++ ) { sum += tmp; tmp = tmp * (total-i) / (1+i); while ( j > 0 && tmp > 1 ) j--, sum *= 0.5, tmp *= 0.5; } while ( j > 0 ) j--, sum *= 0.5; return 2.*sum; } void eval ( int right ) { static int count = 0; static int okay = 0; long double val; count ++; okay += right; val = 1.L / prob ( okay, count ); fprintf (stderr, " %s %5u/%-5u ", right ? "OK" : "- " , okay, count ); printnumber (val); if ( count > 1 ) fprintf (stderr, " %4.2f bit", 0.01 * (int)(logdual(val) / (count-1) * 100.) ); fprintf ( stderr, "\n" ); } typedef signed short sample_t; typedef sample_t mono_t [1]; typedef sample_t stereo_t [2]; typedef struct { unsigned long n; long double x; long double x2; long double y; long double y2; long double xy; } korr_t; void analyze_stereo ( const stereo_t* p1, const stereo_t* p2, size_t len, korr_t* const k ) { long double _x = 0, _x2 = 0, _y = 0, _y2 = 0, _xy = 0; double t1; double t2; k -> n += 2*len; for ( ; len--; p1++, p2++ ) { _x += (t1 = (*p1)[0]); _x2 += t1 * t1; _y += (t2 = (*p2)[0]); _y2 += t2 * t2; _xy += t1 * t2; _x += (t1 = (*p1)[1]); _x2 += t1 * t1; _y += (t2 = (*p2)[1]); _y2 += t2 * t2; _xy += t1 * t2; } k -> x += _x ; k -> x2 += _x2; k -> y += _y ; k -> y2 += _y2; k -> xy += _xy; } int sgn ( double x ) { if ( x == 0 ) return 0; if ( x < 0 ) return -1; return +1; } long double report ( const korr_t* const k ) { long double r; long double sx; long double sy; long double x; long double y; long double b; r = (k->x2*k->n - k->x*k->x) * (k->y2*k->n - k->y*k->y); r = r > 0.l ? (k->xy*k->n - k->x*k->y) / sqrt (r) : 1.l; sx = k->n > 1 ? sqrt ( (k->x2 - k->x*k->x/k->n) / (k->n - 1) ) : 0.l; sy = k->n > 1 ? sqrt ( (k->y2 - k->y*k->y/k->n) / (k->n - 1) ) : 0.l; x = k->n > 0 ? k->x/k->n : 0.l; y = k->n > 0 ? k->y/k->n : 0.l; b = sx != 0 ? sy/sx * sgn(r) : 0.l; if (verbose) fprintf ( stderr, "r=%Lf sx=%Lf sy=%Lf x=%Lf y=%Lf b=%Lf\n", r, sx, sy, x, y, b ); return b; } /* Input: an unsigned short n. * Output: the swapped bytes of n if the arch is big-endian or n itself * if the arch is little-endian. * Comment: should be replaced latter with a better solution than this * home-brewed hack (rbrito). The name should be better also. */ inline unsigned short be16_le(unsigned short n) { #ifdef _WORDS_BIGENDIAN return (n << 8) | (n >> 8); #else return n; #endif } int feed ( int fd, const stereo_t* p, int len ) { int i; stereo_t tmp[30000]; /* An arbitrary size--to be changed latter */ if (len > sizeof(tmp)/sizeof(*tmp)) len = sizeof(tmp)/sizeof(*tmp); for (i = 0; i < len; i++) { tmp[i][0] = be16_le(p[i][0]); tmp[i][1] = be16_le(p[i][1]); } write ( fd, tmp, sizeof(stereo_t) * len ); return len; } short round ( double f ) { long x = (long) floor ( f + 0.5 ); return x == (short)x ? (short)x : (short) ((x >> 31) ^ 0x7FFF); } int feed2 ( int fd, const stereo_t* p1, const stereo_t* p2, int len ) { stereo_t tmp [30000]; /* An arbitrary size, hope that no overruns occure */ int i; if (len > sizeof(tmp)/sizeof(*tmp)) len = sizeof(tmp)/sizeof(*tmp); for ( i = 0; i < len; i++ ) { double f = cos ( M_PI/2*i/len ); f *= f; tmp [i] [0] = be16_le(round ( p1 [i] [0] * f + p2 [i] [0] * (1. - f) )); tmp [i] [1] = be16_le(round ( p1 [i] [1] * f + p2 [i] [1] * (1. - f) )); } write ( fd, tmp, sizeof(stereo_t) * len ); return len; } int feedfac ( int fd, const stereo_t* p1, const stereo_t* p2, int len, double fac1, double fac2 ) { stereo_t tmp [30000]; /* An arbitrary size, hope that no overruns occure */ int i; if (len > sizeof(tmp)/sizeof(*tmp)) len = sizeof(tmp)/sizeof(*tmp); for ( i = 0; i < len; i++ ) { tmp [i] [0] = be16_le(round ( p1 [i] [0] * fac1 + p2 [i] [0] * fac2 )); tmp [i] [1] = be16_le(round ( p1 [i] [1] * fac1 + p2 [i] [1] * fac2 )); } write ( fd, tmp, sizeof(stereo_t) * len ); return len; } void setup ( int fdd, int samples, long freq ) { int status, org, arg; // Nach vorn verschoben if ( -1 == (status = ioctl (fdd, SOUND_PCM_SYNC, 0)) ) perror ("SOUND_PCM_SYNC ioctl failed"); org = arg = 2; if ( -1 == (status = ioctl (fdd, SOUND_PCM_WRITE_CHANNELS, &arg)) ) perror ("SOUND_PCM_WRITE_CHANNELS ioctl failed"); if (arg != org) perror ("unable to set number of channels"); fprintf (stderr, "%1u*", arg); org = arg = AFMT_S16_LE; if ( -1 == ioctl (fdd, SNDCTL_DSP_SETFMT, &arg) ) perror ("SNDCTL_DSP_SETFMT ioctl failed"); if ((arg & org) == 0) perror ("unable to set data format"); org = arg = freq; if ( -1 == (status = ioctl (fdd, SNDCTL_DSP_SPEED, &arg)) ) perror ("SNDCTL_DSP_SPEED ioctl failed"); fprintf (stderr, "%5u Hz*%.3f sec\n", arg, (double)samples/arg ); } void Message ( const char* s, size_t index, long freq, size_t start, size_t stop ) { unsigned long norm_index = 100lu * index / freq; unsigned long norm_start = 100lu * start / freq; unsigned long norm_stop = 100lu * stop / freq; fprintf ( stderr, "\rListening %s %2lu:%02lu.%02lu (%1lu:%02lu.%02lu...%1lu:%02lu.%02lu)%*.*s\rListening %s", s, norm_index / 6000, norm_index / 100 % 60, norm_index % 100, norm_start / 6000, norm_start / 100 % 60, norm_start % 100, norm_stop / 6000, norm_stop / 100 % 60, norm_stop % 100, 36 - (int)strlen(s), 36 - (int)strlen(s), "", s ); fflush ( stderr ); } size_t calc_true_index ( size_t index, size_t start, size_t stop ) { if ( start >= stop ) return start; while ( index - start < DMA_SAMPLES ) index += stop - start; return index - DMA_SAMPLES; } void testing ( const stereo_t* A, const stereo_t* B, size_t len, long freq ) { int c; int fd = open ( "/dev/dsp", O_WRONLY ); int rnd = random_number (); /* Auswahl von X */ int state = 0; /* derzeitiger F�ttungsmodus */ float fac1 = 0.5; float fac2 = 0.5; size_t start = 0; size_t stop = len; size_t index = start; /* derzeitiger Offset auf den Audiostr�men */ char message [80] = "A "; setup ( fd, len, freq ); while ( 1 ) { c = sel (); if ( c == 27 ) c = sel () + 0x100; switch ( c ) { case 'A' : case 'a' : strcpy ( message, "A " ); if ( state != 0 ) state = 2; break; case 0x100+'0' : case '0' : case 'B' : case 'b' : strcpy ( message, " B" ); if ( state != 1 ) state = 3; break; case 'X' : case 'x' : strcpy ( message, " X " ); if ( state != rnd ) state = rnd + 2; break; case 'm' : state = 8; break; case 'M' : state = (state & 1) + 4; break; case 'x'&0x1F: state = (state & 1) + 6; break; case ' ': start = 0; stop = len; break; case 'o' : start = calc_true_index ( index, start, stop); break; case 'p' : stop = calc_true_index ( index, start, stop); break; case 'h' : if ( start > freq/100 ) start -= freq/100; else start = 0; index = start; continue; case 'j' : if ( start < stop-freq/100 ) start += freq/100; else start = stop; index = start; continue; case 'k' : if ( stop > start+freq/100 ) stop -= freq/100; else stop = start; continue; case 'l' : if ( stop < len-freq/100 ) stop += freq/100; else stop = len; continue; case '\n': index = start; continue; case 'D'+0x100: strcpy ( message, "Difference (+40 dB)" ); state = 9; fac1 = -100.; fac2 = +100.; break; case 'd'+0x100: strcpy ( message, "Difference (+30 dB)" ); state = 9; fac1 = -32.; fac2 = +32.; break; case 'D' & 0x1F : strcpy ( message, "Difference (+20 dB)" ); state = 9; fac1 = -10.; fac2 = +10.; break; case 'D' : strcpy ( message, "Difference (+10 dB)" ); state = 9; fac1 = -3.; fac2 = +3.; break; case 'd' : strcpy ( message, "Difference ( 0 dB)" ); state = 9; fac1 = -1.; fac2 = +1.; break; case 0x100+'1' : case 0x100+'2' : case 0x100+'3' : case 0x100+'4' : case 0x100+'5' : case 0x100+'6' : case 0x100+'7' : case 0x100+'8' : case 0x100+'9' : sprintf ( message, " B (Errors -%c dB)", (char)c ); state = 9; fac2 = pow (10., -0.05*(c-0x100-'0') ); fac1 = 1. - fac2; break; case '1' : case '2' : case '3' : case '4' : case '5' : case '6' : case '7' : case '8' : case '9' : sprintf ( message, " B (Errors +%c dB)", c ); state = 9; fac2 = pow (10., 0.05*(c-'0') ); fac1 = 1. - fac2; break; case 'A' & 0x1F: fprintf (stderr, " Vote for X:=A" ); eval ( rnd == 0 ); rnd = random_number (); if ( state == 6 && state == 7 ) state = 6 + rnd; else if ( state != rnd ) state = rnd + 2; strcpy ( message," X " ); break; case 'B' & 0x1F: fprintf (stderr, " Vote for X:=B" ); eval ( rnd == 1 ); rnd = random_number (); if ( state == 6 && state == 7 ) state = 6 + rnd; else if ( state != rnd ) state = rnd + 2; strcpy ( message," X " ); break; case -1: break; default: fprintf (stderr, "\a" ); break; case 'Q': case 'q': fprintf ( stderr, "\n%-79.79s\r", "Quit program" ); close (fd); fprintf ( stderr, "\n\n"); return; } switch (state) { case 0: /* A */ if ( index + BF >= stop ) index += feed (fd, A+index, stop-index ); else index += feed (fd, A+index, BF ); break; case 1: /* B */ if ( index + BF >= stop ) index += feed (fd, B+index, stop-index ); else index += feed (fd, B+index, BF ); break; case 2: /* B => A */ if ( index + BF >= stop ) index += feed2 (fd, B+index, A+index, stop-index ); else index += feed2 (fd, B+index, A+index, BF ); state = 0; break; case 3: /* A => B */ if ( index + BF >= stop ) index += feed2 (fd, A+index, B+index, stop-index ); else index += feed2 (fd, A+index, B+index, BF ); state = 1; break; case 4: /* A */ strcpy ( message, "A " ); if ( index + BF >= stop ) index += feed (fd, A+index, stop-index ), state++; else index += feed (fd, A+index, BF ); break; case 5: /* B */ strcpy ( message, " B" ); if ( index + BF >= stop ) index += feed (fd, B+index, stop-index ), state--; else index += feed (fd, B+index, BF ); break; case 6: /* X */ strcpy ( message, " X " ); if ( index + BF >= stop ) index += feed (fd, (rnd ? B : A)+index, stop-index ), state++; else index += feed (fd, (rnd ? B : A)+index, BF ); break; case 7: /* !X */ strcpy ( message, "!X " ); if ( index + BF >= stop ) index += feed (fd, (rnd ? A : B)+index, stop-index ), state--; else index += feed (fd, (rnd ? A : B)+index, BF ); break; case 8: if ( index + BF/2 >= stop ) index += feed2 (fd, A+index, B+index, stop-index ); else index += feed2 (fd, A+index, B+index, BF/2 ); Message ( " B", index, freq, start, stop ); if ( index + BF >= stop ) index += feed (fd, B+index, stop-index ); else index += feed (fd, B+index, BF ); if ( index + BF/2 >= stop ) index += feed2 (fd, B+index, A+index, stop-index ); else index += feed2 (fd, B+index, A+index, BF/2 ); Message ( "A ", index, freq, start, stop ); if ( index + BF >= stop ) index += feed (fd, A+index, stop-index ); else index += feed (fd, A+index, BF ); break; case 9: /* Liko */ if ( index + BF >= stop ) index += feedfac (fd, A+index, B+index, stop-index, fac1, fac2 ); else index += feedfac (fd, A+index, B+index, BF , fac1, fac2 ); break; default: assert (0); } if (index >= stop) index = start; Message ( message, calc_true_index ( index, start, stop), freq, start, stop ); } } int has_ext ( const char* name, const char* ext ) { if ( strlen (name) < strlen (ext) ) return 0; name += strlen (name) - strlen (ext); return strcasecmp (name, ext) ? 0 : 1; } typedef struct { const char* const extention; const char* const command; } decoder_t; #define REDIR " 2> /dev/null" #define STDOUT "/dev/fd/1" #define PATH PATH_OF_EXTERNAL_TOOLS_FOR_UNCOMPRESSING const decoder_t decoder [] = { { ".mp1" , PATH"mpg123 -w - %s" REDIR }, // MPEG Layer I : www.iis.fhg.de, www.mpeg.org { ".mp2" , PATH"mpg123 -w - %s" REDIR }, // MPEG Layer II : www.iis.fhg.de, www.uq.net.au/~zzmcheng, www.mpeg.org { ".mp3" , PATH"mpg123 -w - %s" REDIR }, // MPEG Layer III : www.iis.fhg.de, www.mp3dev.org, www.mpeg.org { ".mp3pro" , PATH"mpg123 -w - %s" REDIR }, // MPEG Layer III : www.iis.fhg.de, www.mp3dev.org, www.mpeg.org { ".mpt" , PATH"mpg123 -w - %s" REDIR }, // MPEG Layer III : www.iis.fhg.de, www.mp3dev.org, www.mpeg.org { ".mpp" , PATH"mppdec %s -" REDIR }, // MPEGplus : www.stud.uni-hannover.de/user/73884 { ".mpc" , PATH"mppdec %s -" REDIR }, // MPEGplus : www.stud.uni-hannover.de/user/73884 { ".mp+" , PATH"mppdec %s -" REDIR }, // MPEGplus : www.stud.uni-hannover.de/user/73884 { ".aac" , PATH"faad -t.wav -w %s" REDIR }, // Advanced Audio Coding: psytel.hypermart.net, www.aac-tech.com, sourceforge.net/projects/faac, www.aac-audio.com, www.mpeg.org { "aac.lqt" , PATH"faad -t.wav -w %s" REDIR }, // Advanced Audio Coding: psytel.hypermart.net, www.aac-tech.com, sourceforge.net/projects/faac, www.aac-audio.com, www.mpeg.org { ".ac3" , PATH"ac3dec %s" REDIR }, // Dolby AC3 : www.att.com { "ac3.lqt" , PATH"ac3dec %s" REDIR }, // Dolby AC3 : www.att.com { ".ogg" , PATH"ogg123 -d wav -o file:"STDOUT" %s" REDIR }, // Ogg Vorbis : www.xiph.org/ogg/vorbis/index.html { ".pac" , PATH"lpac -x %s "STDOUT REDIR }, // Lossless predictive Audio Compression: www-ft.ee.tu-berlin.de/~liebchen/lpac.html (liebchen@ft.ee.tu-berlin.de) { ".shn" , PATH"shorten -x < %s" REDIR }, // Shorten : shnutils.freeshell.org, www.softsound.com/Shorten.html (shnutils@freeshell.org, shorten@softsound.com) { ".wav.gz" , PATH"gzip -d < %s | sox -twav - -twav -sw -"REDIR }, // gziped WAV { ".wav.sz" , PATH"szip -d < %s | sox -twav - -twav -sw -"REDIR }, // sziped WAV { ".wav.sz2", PATH"szip2 -d < %s | sox -twav - -twav -sw -"REDIR }, // sziped WAV { ".raw" , PATH"sox -r44100 -sw -c2 -traw %s -twav -sw -"REDIR }, // raw files are treated as CD like audio { ".cdr" , PATH"sox -r44100 -sw -c2 -traw %s -twav -sw -"REDIR }, // CD-DA files are treated as CD like audio, no preemphasis info available { ".rm" , "echo %s '???'" REDIR }, // Real Audio : www.real.com { ".epc" , "echo %s '???'" REDIR }, // ePAC : www.audioveda.com, www.lucent.com/ldr { ".mov" , "echo %s '???'" REDIR }, // QDesign Music 2 : www.qdesign.com { ".vqf" , "echo %s '???'" REDIR }, // TwinVQ : www.yamaha-xg.com/english/xg/SoundVQ, www.vqf.com, sound.splab.ecl.ntt.co.jp/twinvq-e { ".wma" , "echo %s '???'" REDIR }, // Microsoft Media Audio: www.windowsmedia.com, www.microsoft.com/windows/windowsmedia { ".flac" , PATH"flac -c -d %s" REDIR }, // Free Lossless Audio Coder: flac.sourceforge.net/ { ".fla" , PATH"flac -c -d %s" REDIR }, // Free Lossless Audio Coder: flac.sourceforge.net/ { ".ape" , "( "PATH"MAC %s _._.wav -d > /dev/null; cat _._.wav; rm _._.wav )" REDIR }, // Monkey's Audio Codec : www.monkeysaudio.com (email@monkeysaudio.com) { ".rka" , "( "PATH"rkau %s _._.wav > /dev/null; cat _._.wav; rm _._.wav )" REDIR }, // RK Audio: { ".rkau" , "( "PATH"rkau %s _._.wav > /dev/null; cat _._.wav; rm _._.wav )" REDIR }, // RK Audio: { ".mod" , PATH"xmp -b16 -c -f44100 --stereo -o- %s | sox -r44100 -sw -c2 -traw - -twav -sw -" REDIR }, // Amiga's Music on Disk: { "" , PATH"sox %s -twav -sw -" REDIR }, // Rest, may be sox can handle it }; #undef REDIR #undef STDOUT #undef PATH int readwave ( stereo_t* buff, size_t maxlen, const char* name, size_t* len ) { char* command = malloc (2*strlen(name) + 512); char* name_q = malloc (2*strlen(name) + 128); unsigned short header [22]; FILE* fp; size_t i; size_t j; // The *nice* shell quoting i = j = 0; if ( name[i] == '-' ) name_q[j++] = '.', name_q[j++] = '/'; while (name[i]) { if ( !isalnum (name[i]) && name[i]!='-' && name[i]!='_' && name[i]!='.' ) name_q[j++] = '\\'; name_q[j++] = name[i++]; } name_q[j] = '\0'; fprintf (stderr, "Reading %s", name ); for ( i = 0; i < sizeof(decoder)/sizeof(*decoder); i++ ) if ( has_ext (name, decoder[i].extention) ) { sprintf ( command, decoder[i].command, name_q ); break; } free (name_q); if ( (fp = popen (command, "r")) == NULL ) { fprintf (stderr, "Can't exec:\n%s\n", command ); exit (1); } free (command); fprintf (stderr, " ..." ); fread ( header, sizeof(*header), sizeof(header)/sizeof(*header), fp ); switch (be16_le(header[11])) { case 2: *len = fread ( buff, sizeof(stereo_t), maxlen, fp ); for (i = 0; i < *len; i ++) { buff[i][0] = be16_le(buff[i][0]); buff[i][1] = be16_le(buff[i][1]); } break; case 1: *len = fread ( buff, sizeof(sample_t), maxlen, fp ); for ( i = *len; i-- > 0; ) buff[i][0] = buff[i][1] = ((sample_t*)buff) [i]; break; case 0: fprintf (stderr, "\b\b\b\b, Standard Open Source Bug detected, try murksaround ..." ); *len = fread ( buff, sizeof(stereo_t), maxlen, fp ); header[11] = 2; header[12] = 65534; /* use that of the other channel */ break; default: fprintf (stderr, "Only 1 or 2 channels are supported, not %u\n", header[11] ); pclose (fp); return -1; } pclose ( fp ); fprintf (stderr, "\n" ); return be16_le(header[12]) ? be16_le(header[12]) : 65534; } double cross_analyze ( const stereo_t* p1, const stereo_t *p2, size_t len ) { float P1 [MAX] [2]; float P2 [MAX] [2]; int i; int maxindex; double sum1; double sum2; double max; double y1; double y2; double y3; double yo; double xo; double tmp; double tmp1; double tmp2; int ret = 0; int cnt = 5; // Calculating effective voltage sum1 = sum2 = 0.; for ( i = 0; i < len; i++ ) { sum1 += (double)p1[i][0] * p1[i][0]; sum2 += (double)p2[i][0] * p2[i][0]; } sum1 = sqrt ( sum1/len ); sum2 = sqrt ( sum2/len ); // Searching beginning of signal (not stable for pathological signals) for ( i = 0; i < len; i++ ) if ( abs (p1[i][0]) >= sum1 && abs (p2[i][0]) >= sum2 ) break; p1 += i; p2 += i; len -= i; if ( len <= MAX ) return 0; // Filling arrays for FFT do { sum1 = sum2 = 0.; for ( i = 0; i < MAX; i++ ) { #ifdef USEDIFF tmp1 = p1 [i][0] - p1 [i+1][0]; tmp2 = p2 [i+ret][0] - p2 [i+ret+1][0]; #else tmp1 = p1 [i][0]; tmp2 = p2 [i+ret][0]; #endif sum1 += tmp1*tmp1; sum2 += tmp2*tmp2; P1 [i][0] = tmp1; P2 [i][0] = tmp2; P1 [i][1] = 0.; P2 [i][1] = 0.; } fft (P1, MAX); fft (P2, MAX); for ( i = 0; i < MAX; i++ ) { double a0 = P1 [i][0]; double a1 = P1 [i][1]; double b0 = P2 [(MAX-i)&(MAX-1)][0]; double b1 = P2 [(MAX-i)&(MAX-1)][1]; P1 [i][0] = a0*b0 - a1*b1; P1 [i][1] = a0*b1 + a1*b0; } fft (P1, MAX); max = P1 [maxindex = 0][0]; for ( i = 1; i < MAX; i++ ) if ( P1[i][0] > max ) max = P1 [maxindex = i][0]; y2 = P1 [ maxindex ][0]; y1 = P1 [(maxindex-1)&(MAX-1)][0] - y2; y3 = P1 [(maxindex+1)&(MAX-1)][0] - y2; xo = 0.5 * (y1-y3) / (y1+y3); yo = 0.5 * ( (y1+y3)*xo + (y3-y1) ) * xo; if (maxindex > MAX/2 ) maxindex -= MAX; ret += maxindex; tmp = 100./MAX/sqrt(sum1*sum2); if (verbose) printf ( "[%5d]%8.4f [%5d]%8.4f [%5d]%8.4f [%10.4f]%8.4f\n", ret- 1, (y1+y2)*tmp, ret , y2 *tmp, ret+ 1, (y3+y2)*tmp, ret+xo, (yo+y2)*tmp ); } while ( maxindex && cnt-- ); return ret + xo; } short to_short ( int x ) { return x == (short)x ? (short)x : (short) ((x >> 31) ^ 0x7FFF); } void DC_cancel ( stereo_t* p, size_t len ) { double sum1 = 0; double sum2 = 0; size_t i; int diff1; int diff2; for (i = 0; i < len; i++ ) { sum1 += p[i][0]; sum2 += p[i][1]; } if ( fabs(sum1) < len && fabs(sum2) < len ) return; diff1 = round ( sum1 / len ); diff2 = round ( sum2 / len ); if (verbose) fprintf (stderr, "Removing DC (left=%d, right=%d)\n", diff1, diff2 ); for (i = 0; i < len; i++ ) { p[i][0] = to_short ( p[i][0] - diff1); p[i][1] = to_short ( p[i][1] - diff2); } } void multiply ( char c, stereo_t* p, size_t len, double fact ) { size_t i; if ( fact == 1. ) return; if (verbose) fprintf (stderr, "Multiplying %c by %7.5f\n", c, fact ); for (i = 0; i < len; i++ ) { p[i][0] = to_short ( p[i][0] * fact ); p[i][1] = to_short ( p[i][1] * fact ); } } int maximum ( stereo_t* p, size_t len ) { int max = 0; size_t i; for (i = 0; i < len; i++ ) { if (abs(p[i][0]) > max) max = abs(p[i][0]); if (abs(p[i][1]) > max) max = abs(p[i][1]); } return max; } void usage ( void ) { fprintf ( stderr, "usage: abx [-v] File_A File_B\n" "\n" "File_A and File_B loaded and played. File_A should be the better/reference\n" "file, File_B the other. You can press the following keys:\n" "\n" " a/A: Listen to File A\n" " b/B: Listen to File B\n" " x/X: Listen to the randomly selected File X, which is A or B\n" " Ctrl-A: You vote for X=A\n" " Ctrl-B: You vote for X=B\n" " m: Alternating playing A and B. Fast switching\n" " M: Alternating playing A and B. Slow switching\n" " d/D/Ctrl-D/Alt-d/Alt-D:\n" " Listen to the difference A-B (+0 dB...+40 dB)\n" " o/p: Chunk select\n" " hjkl: Chunk fine adjust (hj: start, kl: stop)\n" " Space: Chunk deselect\n" " 0...9: Listen to B, but difference A-B is amplified by 0-9 dB\n" " Q: Quit the program\n" "\n" ); } int main ( int argc, char** argv ) { stereo_t* _A = calloc ( MAX_LEN, sizeof(stereo_t) ); stereo_t* _B = calloc ( MAX_LEN, sizeof(stereo_t) ); stereo_t* A = _A; stereo_t* B = _B; size_t len_A; size_t len_B; size_t len; int max_A; int max_B; int max; long freq1; long freq2; int shift; double fshift; double ampl; int ampl_X; korr_t k; if (argc > 1 && 0 == strcmp (argv[1], "-v") ) { verbose = 1; argc--; argv++; } switch ( argc ) { case 0: case 1: case 2: default: usage (); return 1; case 3: usage(); break; } freq1 = readwave ( A, MAX_LEN, argv[1], &len_A ); DC_cancel ( A, len_A ); freq2 = readwave ( B, MAX_LEN, argv[2], &len_B ); DC_cancel ( B, len_B ); if ( freq1 == 65534 && freq2 != 65534 ) freq1 = freq2; else if ( freq2 == 65534 && freq1 != 65534 ) freq2 = freq1; else if ( freq1 == 65534 && freq2 == 65534 ) freq1 = freq2 = 44100; if ( freq1 != freq2 ) { fprintf ( stderr, "Different sample frequencies currently not supported\n"); fprintf ( stderr, "A: %ld, B: %ld\n", freq1, freq2 ); return 2; } len = len_A < len_B ? len_A : len_B; fshift = cross_analyze ( A, B, len ); shift = floor ( fshift + 0.5 ); if ( verbose ) { fprintf ( stderr, "Delay Ch1 is %.4f samples\n", fshift ); fprintf ( stderr, "Delay Ch2 is %.4f samples\n", cross_analyze ( (stereo_t*)(((sample_t*)A)+1), (stereo_t*)(((sample_t*)B)+1), len ) ); } if (shift > 0) { if (verbose) fprintf ( stderr, "Delaying A by %d samples\n", +shift); B += shift; len_B -= shift; } if (shift < 0) { if (verbose) fprintf ( stderr, "Delaying B by %d samples\n", -shift); A -= shift; len_A += shift; } len = len_A < len_B ? len_A : len_B; memset ( &k, 0, sizeof(k) ); analyze_stereo ( A, B, len, &k ); ampl = report (&k); max_A = maximum ( A, len ); max_B = maximum ( B, len ); if ( ampl <= 0.98855 ) { /* < -0.05 dB */ max = max_A*ampl < max_B ? max_B : max_A*ampl; ampl_X = (int)(29203 / max); if ( ampl_X < 2 ) ampl_X = 1; multiply ( 'A', A, len, ampl*ampl_X ); multiply ( 'B', B, len, ampl_X ); } else if ( ampl >= 1.01158 ) { /* > +0.05 dB */ max = max_A < max_B/ampl ? max_B/ampl : max_A; ampl_X = (int)(29203 / max); if ( ampl_X < 2 ) ampl_X = 1; multiply ( 'A', A, len, ampl_X ); multiply ( 'B', B, len, 1./ampl*ampl_X ); } else { max = max_A < max_B ? max_B : max_A; ampl_X = (int)(29203 / max); if ( ampl_X < 2 ) ampl_X = 1; multiply ( 'A', A, len, ampl_X ); multiply ( 'B', B, len, ampl_X ); } set (); Set_Realtime (); testing ( A, B, len, freq1 ); reset (); free (_A); free (_B); return 0; } /* end of abx.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/auenc�������������������������������������������������������������������������������000755 �001751 �001751 �00000001405 07224135227 016043� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # auenc -- version 0.1 # # A wrapper for lame to encode multiple files. By default, a .wav # extension is removed and replaced by .mp3 . # # (C) 1999 Gerhard Wesp <gwesp@cosy.sbg.ac.at> under the GPL. # set the variables below according to your taste LAME=lame LAME_OPTS="-S -h -v -V 0 -b 256" # high quality, silent operation if [ $# -lt 1 ] ; then exec 1>&2 cat << _EOF_ usage: $0 [options] file... options: -d --delete: delete original file after successful encoding _EOF_ exit 1 fi unset DELETE case "$1" in -d | --delete ) DELETE=1 ; shift ;; esac for f do $LAME $LAME_OPTS "$f" `basename "$f" .wav`.mp3 || { exec 1>&2 echo "encoding of $f failed, aborting..." exit 1 } if [ -n "$DELETE" ] ; then rm -f "$f" fi done �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/Makefile.in�������������������������������������������������������������������������000644 �001751 �001751 �00000045132 13170220147 017065� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ EXTRA_PROGRAMS = abx$(EXEEXT) ath$(EXEEXT) scalartest$(EXEEXT) subdir = misc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_abx_OBJECTS = abx.$(OBJEXT) abx_OBJECTS = $(am_abx_OBJECTS) abx_LDADD = $(LDADD) abx_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_ath_OBJECTS = ath.$(OBJEXT) ath_OBJECTS = $(am_ath_OBJECTS) ath_LDADD = $(LDADD) ath_DEPENDENCIES = am_scalartest_OBJECTS = scalartest.$(OBJEXT) scalartest_OBJECTS = $(am_scalartest_OBJECTS) scalartest_LDADD = $(LDADD) scalartest_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(abx_SOURCES) $(ath_SOURCES) $(scalartest_SOURCES) DIST_SOURCES = $(abx_SOURCES) $(ath_SOURCES) $(scalartest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global $(top_srcdir)/depcomp depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign CLEANFILES = $(EXTRA_PROGRAMS) EXTRA_SCRIPTS = \ auenc \ lameid3.pl \ mugeco.sh \ mlame \ mk_mp3.sh EXTRA_DIST = \ $(EXTRA_SCRIPTS) \ Lame.vbs \ lameGUI.html \ lame4dos.bat \ mlame_corr.c abx_SOURCES = abx.c ath_SOURCES = ath.c scalartest_SOURCES = scalartest.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign misc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign misc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): abx$(EXEEXT): $(abx_OBJECTS) $(abx_DEPENDENCIES) $(EXTRA_abx_DEPENDENCIES) @rm -f abx$(EXEEXT) $(AM_V_CCLD)$(LINK) $(abx_OBJECTS) $(abx_LDADD) $(LIBS) ath$(EXEEXT): $(ath_OBJECTS) $(ath_DEPENDENCIES) $(EXTRA_ath_DEPENDENCIES) @rm -f ath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ath_OBJECTS) $(ath_LDADD) $(LIBS) scalartest$(EXEEXT): $(scalartest_OBJECTS) $(scalartest_DEPENDENCIES) $(EXTRA_scalartest_DEPENDENCIES) @rm -f scalartest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scalartest_OBJECTS) $(scalartest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abx.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalartest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/lame4dos.bat������������������������������������������������������������������������000644 �001751 �001751 �00000002615 07576702132 017233� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem --------------------------------------------- rem PURPOSE: rem - put this Batch-Command on your Desktop, rem so you can drag and drop wave files on it rem and LAME will encode them to mp3 format. rem - put this Batch-Command in a place mentioned rem in your PATH environment, start the DOS-BOX rem and change to a directory where your wave rem files are located. the following line will rem encode all your wave files to mp3 rem "lame.bat *.wav" rem --------------------------------------------- rem C2000 Robert Hegemann rem --------------------------------------------- rem Changes to support long filenames using 4DOS rem by Alexander Stumpf <dropdachalupa@gmx.net> rem --------------------------------------------- rem please set LAME and LAMEOPTS rem LAME - where the executeable is rem OPTS - options you like LAME to use set LAME=c:\progra~1\sound&~1\lame\lame.exe set OPTS=-h --lowpass-width 2 --lowpass 20.5 -b 112 --abr 180 rem --------------------------------------------- set thecmd=%LAME% %OPTS% for %%f in (%&) do (%thecmd% %@sfn[%%f]^(ren %@sfn[%%f].mp3 "%@lfn[%%f].mp_">NUL)) ren *.mp3.mp_ *.new.mp3 >& NUL ren *.wav.mp_ *.mp3 >& NUL goto endmark :errormark echo. echo. echo ERROR processing %1 echo. :endmark rem rem finished rem �������������������������������������������������������������������������������������������������������������������lame-3.100/misc/ath.c�������������������������������������������������������������������������������000644 �001751 �001751 �00000065114 07213205666 015754� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* $Id: ath.c,v 1.12 2000/12/05 15:37:26 aleidinger Exp $ */ /* * Known bugs (sorted by importance): * - human delay (ca. 200 ms or more???) and buffering delay (341 ms @48 kHz/64 KByte) * should be subtracted * - error handling * - cos slope on direction changes * - calibration file of soundcard/amplifier/head phone * - worse handling * - +/- handling via mouse (do you have code?) in a dark room * - ENTER as direction change * - finer precalculated ATH for pre-emphasis */ /* * Suggested level ranges: * 180 Hz...13.5 kHz: 50...70 dB * 100 Hz...15.0 kHz: 40...70 dB * 70 Hz...16.0 kHz: 30...70 dB * 45 Hz...16.5 kHz: 20...70 dB * 30 Hz...17.5 kHz: 10...70 dB * 25 Hz...18.0 kHz: 5...75 dB * 20 Hz...19.0 kHz: 0...80 dB * 16 Hz...20.0 kHz: -10...80 dB */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <limits.h> #include <termios.h> #include <math.h> #include <time.h> #include <signal.h> #include <sys/ioctl.h> #include <sys/time.h> #include <sys/types.h> #include <sys/stat.h> #ifdef HAVE_SYS_SOUNDCARD_H # include <sys/soundcard.h> #elif defined(HAVE_LINUX_SOUNDCARD_H) # include <linux/soundcard.h> #else # error no soundcard include #endif #define AUDIO_DEVICE "/dev/dsp" //#define COOLEDIT_FILE "/mnt/dosd/cooledit.wav" #define DELAY_UNTIL_XCHG 2.5 #define TURN_STEPS 2400 /****************************************************************************************************** * soundcard stuff ******************************************************************************************************/ const double dither_coeff [] [16] = { { /* 48 kHz */ 3.35185352775391591311, 4.24914379295482032978, 1.78042251729150153086, -0.92601381419186201184, -1.37308596104182343645, -1.85951915999247704829, -3.28074437872632330526, -3.05496670185702990882, -1.22855462839450528837, -0.30291531959171267015, -0.18598486195652600770, 0.42010512205702003790, 0.92278786111368653452, 0.62102380451771775193, 0.14312897206650044828, -0.00454721508203927746 }, { /* 56 kHz */ 3.86404134982280628749, 6.67195592701613291071, 5.90576195467245802046, 1.57589705921487261981, -2.10618201389737372178, -2.74191788822507184395, -2.62175070636849999396, -3.78505226463032808863, -4.45698848578010438284, -2.76825966243460536110, -0.26509931375584007312, 0.67853812028968716799, 0.17633528441477021892, -0.28511417191837823770, -0.21866605100975608470, -0.04751674094456833719 }, { /* 64 kHz */ 4.09276938880098092172, 8.27424044674659812937, 10.11503162292146762880, 7.19159801569544317353, 1.39770070291739556523, -2.86595901981244688601, -3.76567274050094691362, -3.58051445684472378298, -4.78262917738758022539, -6.53075750894777650899, -6.31330514306857055627, -3.69971382767763534195, -0.78125094191744878298, 0.59027508113837267217, 0.53500264009607367648, 0.14860043567206217506 }, { /* 72 kHz */ 4.13833553801985235465, 9.02461778089340082437, 12.93090366932740510782, 12.66372285767699051948, 7.76122176702274149630, 1.30617257555732278296, -2.92859120887121285358, -4.02438598495837830627, -4.16673068132491936262, -5.55618065300129916574, -7.82657788611231653103, -8.83055904466106668035, -7.34884789347713815672, -4.33977664906048314891, -1.67711310288611975398, -0.33086687044710235420 }, { /* 80 kHz */ 4.22135293342667005517, 9.76639846582539722375, 15.46562682418357478290, 17.54378549927855248346, 13.29112084313158963396, 3.51512441998252657470, -7.51025671462502577300,-14.84164320864536219368,-16.10306907358826504148,-12.54775907691866414402, -7.40560667268782655149, -3.34708029482052565732, -1.19572214872925790860, -0.39582185216275086786, -0.14803160816846603424, -0.04292818488627011881 }, { /* 88 kHz */ 4.18521467865996935325, 9.96765821475909556942, 16.91905760389390617551, 21.74016824668913557689, 20.96457146354060682367, 13.28640453421253890542, 0.85116933842171101587,-11.66054516261007127469,-19.62750656985581800169,-20.98831962473015904508,-16.95374072505042825458,-10.68848180295390154146, -5.17169792984369678908, -1.79975409439650319129, -0.38057073791415898674, -0.02672653932844656975 }, { /* 96 kHz */ 4.09418877324899473189, 9.77977364010870211207, 17.10120082680385341159, 23.37356217615995036818, 25.27121942060722374276, 20.64059991613550174190, 9.99721445051475610371, -3.39833000550997938512,-15.03410054392933377278,-21.36704201000683067679,-21.40772859969388741685,-16.79355426136657673808,-10.48570200688141622163, -5.07642951516127438486, -1.75555240936989159436, -0.33817997298586054131 }, }; typedef struct { const char* device; int fd; long double sample_freq; const double* dither; int channels; int bits; } soundcard_t; typedef signed short sample_t; typedef sample_t stereo_t [2]; int open_soundcard ( soundcard_t* const k, const char* device, const int channels, const int bits, const long double freq ) { int arg; int org; int index; int status; k->device = device; if ( -1 == (k->fd = open ( k->device, O_WRONLY )) ) { perror("opening of audio device failed"); return -1; } if ( -1 == (status = ioctl (k->fd, SOUND_PCM_SYNC, 0))) { fprintf ( stderr, "%s: SOUND_PCM_SYNC ioctl failed: %s\n", k->device, strerror (errno)); return -1; } org = arg = channels; if ( -1 == (status = ioctl (k->fd, SOUND_PCM_WRITE_CHANNELS, &arg)) ) { fprintf ( stderr, "%s: SOUND_PCM_WRITE_CHANNELS (%d) ioctl failed: %s\n" , k->device, channels, strerror (errno) ); return -1; } if (arg != org) { fprintf ( stderr, "%s: unable to set number of channels: %d instead of %d\n", k->device, arg, org ); return -1; } k->channels = arg; org = arg = bits; if ( -1 == (status = ioctl (k->fd, SOUND_PCM_WRITE_BITS, &arg)) ) { fprintf ( stderr, "%s: SOUND_PCM_WRITE_BITS ioctl failed\n", k->device ); return -1; } if (arg != org) { fprintf ( stderr, "%s: unable to set sample size: %d instead of %d\n", k->device, arg, org ); return -1; } k->bits = arg; org = arg = k->bits <= 8 ? AFMT_U8 : AFMT_S16_LE; if ( -1 == ioctl (k->fd, SNDCTL_DSP_SETFMT, &arg) ) { fprintf ( stderr, "%s: SNDCTL_DSP_SETFMT ioctl failed\n", k->device ); return -1; } if ((arg & org) == 0) { fprintf ( stderr, "%s: unable to set data format\n", k->device ); return -1; } org = arg = (int) floor ( freq + 0.5 ); if ( -1 == (status = ioctl (k->fd, SOUND_PCM_WRITE_RATE, &arg)) ) { fprintf ( stderr, "%s: SOUND_PCM_WRITE_WRITE ioctl failed\n", k->device ); return -1; } k->sample_freq = (long double)arg; index = (arg - 44000) / 8000; if ( index < 0 ) index = 0; if ( index >= sizeof(dither_coeff)/sizeof(*dither_coeff) ) index = sizeof(dither_coeff)/sizeof(*dither_coeff) - 1; k->dither = dither_coeff [ index ]; return 0; } int play_soundcard ( soundcard_t* const k, stereo_t* samples, size_t length ) { size_t bytes = length * sizeof (*samples); #ifdef COOLEDIT_FILE static int fd = -1; if ( fd < 0 ) fd = open ( COOLEDIT_FILE, O_WRONLY | O_CREAT ); write ( fd, samples, bytes ); #endif return write ( k->fd, samples, bytes ) == bytes ? 0 : -1; } int close_soundcard ( soundcard_t* const k ) { return close (k->fd); } /****************************************************************************************************** * frequency stuff ******************************************************************************************************/ typedef enum { linear = 0, logarithm = 1, square = 2, cubic = 3, erb = 4, recip = 5 } genmode_t; static long double linear_f ( long double x ) { return x > 0.L ? x : 0.0L; } static long double logarithm_f ( long double x ) { return x > 0.L ? log10 (x) : -3.5L; } static long double square_f ( long double x ) { return x > 0.L ? sqrt (x) : 0.0L; } static long double cubic_f ( long double x ) { return x > 0.L ? pow (x,1/3.) : 0.0L; } static long double erb_f ( long double x ) { return log (1. + 0.00437*x); } static long double recip_f ( long double x ) { return x > 1.L ? 1.L/x : 1.0L; } static long double inv_linear_f ( long double x ) { return x; } static long double inv_logarithm_f ( long double x ) { return pow (10., x); } static long double inv_square_f ( long double x ) { return x*x; } static long double inv_cubic_f ( long double x ) { return x*x*x; } static long double inv_erb_f ( long double x ) { return (exp(x) - 1.) * (1./0.00437); } static long double inv_recip_f ( long double x ) { return x > 1.L ? 1.L/x : 1.0L; } typedef long double (*converter_fn_t) ( long double ); const converter_fn_t func [] = { linear_f, logarithm_f, square_f, cubic_f , erb_f , recip_f }; const converter_fn_t inv_func [] = { inv_linear_f, inv_logarithm_f, inv_square_f, inv_cubic_f, inv_erb_f, inv_recip_f }; typedef struct { genmode_t genmode; long double start_freq; long double stop_freq; long double sample_freq; unsigned long duration; long double phase; long double param1; long double param2; unsigned long counter; } generator_t; int open_generator ( generator_t* const g, const soundcard_t* const s, const genmode_t genmode, const long double duration, const long double start_freq, const long double stop_freq ) { g->sample_freq = s->sample_freq; g->genmode = genmode; g->start_freq = start_freq; g->stop_freq = stop_freq; g->duration = (unsigned long) floor ( duration * g->sample_freq + 0.5 ); if ( g->duration < 2 ) return -1; if ( g->genmode >= sizeof (func)/sizeof(*func) ) return -1; g->param1 = func [g->genmode] ( g->start_freq / g->sample_freq ); g->param2 = ( func [ g->genmode ] ( g->stop_freq / g->sample_freq ) - g->param1 ) / ( g->duration - 1 ); g->phase = 0.L; g->counter= 0; return 0; } long double iterate_generator ( generator_t* const g ) { long double freq; freq = inv_func [ g->genmode ] ( g->param1 + g->counter++ * g->param2 ); g->phase += freq; if (g->phase > 15.) g->phase -= 16.; return sin ( 2.*M_PI * g->phase ); } long double get_sine ( generator_t* const g ) { return sin ( 2.*M_PI * g->phase ); } long double get_cosine ( generator_t* const g ) { return cos ( 2.*M_PI * g->phase ); } long double frequency ( const generator_t* const g ) { return inv_func [ g->genmode ] ( g->param1 + g->counter * g->param2 ) * g->sample_freq; } int close_generator ( generator_t* const g ) { return 0; } /****************************************************************************************************** * amplitude stuff ******************************************************************************************************/ typedef enum { up = 0, down = 1, turn_up = 2, turn_down = 3, still_up = 4, still_down = 5, change = 6 } direction_t; typedef struct { long double sample_freq; direction_t direction; // down, up, still_up, still_down, turn_down, turn_up int multiplier; // -TURN_STEPS: down, +TURN_STEPS up long double amplitude; long double delta_amplitude; long direction_change; } amplitude_t; int open_amplifier ( amplitude_t* const a, const soundcard_t* const s, const long double start_ampl, const double dB_per_sec ) { a->sample_freq = s->sample_freq; a->direction = up; a->multiplier = +TURN_STEPS; a->amplitude = start_ampl * 32767.; a->delta_amplitude = dB_per_sec * 0.1151292546497022842 / s->sample_freq / TURN_STEPS; a->direction_change = 0; srand ( time (NULL) ); return 0; } long double iterate_amplifier ( amplitude_t* const a ) { switch ( a->direction ) { case still_up: assert (a->multiplier == +TURN_STEPS); if (a->direction_change > 0 ) a->direction_change--; else a->direction = turn_down; break; case still_down: assert (a->multiplier == -TURN_STEPS); if (a->direction_change > 0 ) a->direction_change--; else a->direction = turn_up; break; case turn_up: assert (a->direction_change == 0); if ( a->multiplier < +TURN_STEPS ) a->multiplier++; else a->direction = up; break; case turn_down: assert (a->direction_change == 0); if ( a->multiplier > -TURN_STEPS ) a->multiplier--; else a->direction = down; break; case up: assert (a->multiplier == +TURN_STEPS); assert (a->direction_change == 0); break; case down: assert (a->multiplier == -TURN_STEPS); assert (a->direction_change == 0); break; default: fprintf ( stderr, "\n\r*** Bug! ***\n"); break; } a->amplitude *= 1.L + a->delta_amplitude * a->multiplier; return a->amplitude; } long double amplitude ( const amplitude_t* const a ) { return a->amplitude / 32767.; } int change_direction ( amplitude_t* const a, direction_t new_direction ) { switch ( new_direction ) { case up: if (a->direction == down) { a->direction = still_down; } else { fprintf ( stderr, "Direction not down, so ignored\n" ); return -1; } break; case down: if (a->direction == up) { a->direction = still_up; } else { fprintf ( stderr, "Direction not up, so ignored\n" ); return -1; } break; case change: switch ( a->direction ) { case up: a->direction = still_up; break; case down: a->direction = still_down; break; default: fprintf ( stderr, "Direction still changing, so ignored\n" ); return -1; } break; default: fprintf ( stderr, "Direction unknown, so ignored\n" ); return -1; } a->direction_change = 1 + rand () * (a->sample_freq * DELAY_UNTIL_XCHG / RAND_MAX); return 0; } int close_amplifier ( amplitude_t* const a ) { return 0; } double ATH ( double freq ) { static float tab [] = { /* 10.0 */ 96.69, 96.69, 96.26, 95.12, /* 12.6 */ 93.53, 91.13, 88.82, 86.76, /* 15.8 */ 84.69, 82.43, 79.97, 77.48, /* 20.0 */ 74.92, 72.39, 70.00, 67.62, /* 25.1 */ 65.29, 63.02, 60.84, 59.00, /* 31.6 */ 57.17, 55.34, 53.51, 51.67, /* 39.8 */ 50.04, 48.12, 46.38, 44.66, /* 50.1 */ 43.10, 41.73, 40.50, 39.22, /* 63.1 */ 37.23, 35.77, 34.51, 32.81, /* 79.4 */ 31.32, 30.36, 29.02, 27.60, /* 100.0 */ 26.58, 25.91, 24.41, 23.01, /* 125.9 */ 22.12, 21.25, 20.18, 19.00, /* 158.5 */ 17.70, 16.82, 15.94, 15.12, /* 199.5 */ 14.30, 13.41, 12.60, 11.98, /* 251.2 */ 11.36, 10.57, 9.98, 9.43, /* 316.2 */ 8.87, 8.46, 7.44, 7.12, /* 398.1 */ 6.93, 6.68, 6.37, 6.06, /* 501.2 */ 5.80, 5.55, 5.29, 5.02, /* 631.0 */ 4.75, 4.48, 4.22, 3.98, /* 794.3 */ 3.75, 3.51, 3.27, 3.22, /* 1000.0 */ 3.12, 3.01, 2.91, 2.68, /* 1258.9 */ 2.46, 2.15, 1.82, 1.46, /* 1584.9 */ 1.07, 0.61, 0.13, -0.35, /* 1995.3 */ -0.96, -1.56, -1.79, -2.35, /* 2511.9 */ -2.95, -3.50, -4.01, -4.21, /* 3162.3 */ -4.46, -4.99, -5.32, -5.35, /* 3981.1 */ -5.13, -4.76, -4.31, -3.13, /* 5011.9 */ -1.79, 0.08, 2.03, 4.03, /* 6309.6 */ 5.80, 7.36, 8.81, 10.22, /* 7943.3 */ 11.54, 12.51, 13.48, 14.21, /* 10000.0 */ 14.79, 13.99, 12.85, 11.93, /* 12589.3 */ 12.87, 15.19, 19.14, 23.69, /* 15848.9 */ 33.52, 48.65, 59.42, 61.77, /* 19952.6 */ 63.85, 66.04, 68.33, 70.09, /* 25118.9 */ 70.66, 71.27, 71.91, 72.60, }; double freq_log; double dB; unsigned index; if ( freq < 10. ) freq = 10.; if ( freq > 25000. ) freq = 25000.; freq_log = 40. * log10 (0.1 * freq); /* 4 steps per third, starting at 10 Hz */ index = (unsigned) freq_log; assert ( index < sizeof(tab)/sizeof(*tab) ); dB = tab [index] * (1 + index - freq_log) + tab [index+1] * (freq_log - index); return pow ( 10., 0.05*dB ); } /****************************************************************************************************** * keyboard stuff ******************************************************************************************************/ typedef struct { int init; struct termios stored_setting; struct termios current_setting; } keyboard_t; static keyboard_t* __k; /* Restore term-settings to those saved when term_init was called */ static void term_restore (void) { tcsetattr ( 0, TCSANOW, &(__k->stored_setting) ); } /* term_restore */ /* Clean up terminal; called on exit */ static void term_exit ( int sig ) { term_restore (); } /* term_exit */ /* Will be called when ctrl-Z is pressed, this correctly handles the terminal */ static void term_ctrl_z ( int sig ) { signal ( SIGTSTP, term_ctrl_z ); term_restore (); kill ( getpid(), SIGSTOP ); } /* term_ctrl_z */ /* Will be called when application is continued after having been stopped */ static void term_cont ( int sig ) { signal ( SIGCONT, term_cont ); tcsetattr ( 0, TCSANOW, &(__k->current_setting) ); } /* term_cont() */ int open_keyboard ( keyboard_t* const k ) { __k = k; tcgetattr ( 0, &(k->stored_setting) ); tcgetattr ( 0, &(k->current_setting) ); signal ( SIGINT, term_exit ); /* We _must_ clean up when we exit */ signal ( SIGQUIT, term_exit ); signal ( SIGTSTP, term_ctrl_z ); /* Ctrl-Z must also be handled */ signal ( SIGCONT, term_cont ); // atexit ( term_exit ); /* One or more characters are sufficient to cause a read to return */ cfmakeraw ( &(k->current_setting) ); k->current_setting.c_oflag |= ONLCR | OPOST; /* enables NL => CRLF on output */ tcsetattr ( 0, TCSANOW, &(k->current_setting) ); return 0; } int getchar_keyboard ( keyboard_t* const k ) { struct timeval t; fd_set fd [1]; int ret; unsigned char c; FD_SET (0, fd); t.tv_sec = 0; t.tv_usec = 0; ret = select ( 1, fd, NULL, NULL, &t ); switch ( ret ) { case 0: return -1; case 1: ret = read (0, &c, 1); return ret == 1 ? c : -1; default: return -2; } } int close_keyboard ( keyboard_t* const k ) { term_restore (); return 0; } /****************************************************************************************************** * reporting stuff ******************************************************************************************************/ int report_open ( void ) { static char buff [32767]; fflush ( stdout ); setvbuf ( stdout, buff, _IOFBF, sizeof(buff) ); return 0; } int report ( const generator_t* const g, const amplitude_t* const a ) { static double last_freq = -1.; static double last_level = -1.; double freq; double level; freq = frequency (g); level = 20. * log10 (amplitude (a) * ATH (freq) ) + 80.; if ( last_freq >= 0 ) printf ( "%11.3f %8.2f\n", sqrt (freq*last_freq), 0.5 * (level+last_level) ); printf ( "# %9.3f %8.2f\n", freq, level ); fflush ( stdout ); last_freq = freq; last_level = level; return 0; } int report_close ( void ) { printf ( "%%%%\n\n" ); fflush ( stdout ); close ( dup ( fileno(stdout) ) ); setvbuf ( stdout, NULL, _IONBF, 0 ); return 0; } /****************************************************************************************************** * main stuff ******************************************************************************************************/ typedef enum { left = 0, right = 1, phase0 = 2, both = 2, phase90 = 3, phase180 = 4, phasemod = 5 } earmode_t; static long double scalar ( const double* a, const double* b ) { return a[ 0]*b[ 0] + a[ 1]*b[ 1] + a[ 2]*b[ 2] + a[ 3]*b[ 3] +a[ 4]*b[ 4] + a[ 5]*b[ 5] + a[ 6]*b[ 6] + a[ 7]*b[ 7] +a[ 8]*b[ 8] + a[ 9]*b[ 9] + a[10]*b[10] + a[11]*b[11] +a[12]*b[12] + a[13]*b[13] + a[14]*b[14] + a[15]*b[15]; } int experiment ( generator_t* const g, amplitude_t* const a, keyboard_t* const k, soundcard_t* const s, earmode_t earmode ) { long i; int j; stereo_t samples [512]; static double quant_errors [2] [16]; long double val; double ampl; long ival; fprintf ( stderr, "\r+++ up +++" ); for ( i = 0; i < g->duration; i += sizeof(samples)/sizeof(*samples) ) { fprintf ( stderr, "%3lu%%\b\b\b\b", i*100lu/g->duration ); for (j = 0; j < sizeof(samples)/sizeof(*samples); j++ ) { ampl = iterate_amplifier (a) * ATH (frequency (g)); val = ampl * iterate_generator (g); ival = (long) floor ( val + 0.5 + scalar (quant_errors[0], s->dither) ); if ( ival != (sample_t) ival ) { report (g, a); fprintf ( stderr, "\rOverrun \n\n" ); return -1; } memmove ( & quant_errors [0] [1], & quant_errors [0] [0], sizeof(quant_errors[0]) - sizeof(quant_errors[0][0]) ); quant_errors [0] [0] = val - ival; switch ( earmode ) { case both: samples [j] [0] = samples [j] [1] = ival; break; case left: samples [j] [0] = ival; samples [j] [1] = 0; break; case right: samples [j] [0] = 0; samples [j] [1] = ival; break; case phase180: samples [j] [0] = ival == -32768 ? 32767 : -ival; samples [j] [1] = +ival; break; case phase90: samples [j] [0] = ival; val = ampl * get_cosine (g); ival = (long) floor ( val + 0.5 + scalar (quant_errors[1], s->dither) ); if ( ival != (sample_t) ival ) { report (g, a); fprintf ( stderr, "\rOverrun \n\n" ); return -1; } memmove ( & quant_errors [1] [1], & quant_errors [1] [0], sizeof(quant_errors[1]) - sizeof(quant_errors[1][0]) ); quant_errors [1] [0] = val - ival; samples [j] [1] = ival; break; default: assert (0); return -1; } } play_soundcard ( s, samples, sizeof(samples)/sizeof(*samples) ); if ( amplitude (a) * ATH (frequency (g)) <= 3.16227766e-6 ) { report (g, a); fprintf ( stderr, "\rUnderrun \n\n" ); return -1; } switch ( getchar_keyboard (k) ) { case '+': fprintf ( stderr, "\r+++ up +++" ); report (g, a); change_direction ( a, up ); break; case '-': fprintf ( stderr, "\r--- down ---" ); report (g, a); change_direction ( a, down ); break; case '\r': case '\n': fprintf ( stderr, "\r** change **" ); report (g, a); change_direction ( a, change ); break; case 'C'&0x1F: case 'q': case 'Q': case 'x': case 'X': fprintf ( stderr, "\rBreak \n\n" ); fflush ( stderr ); return -1; default: fprintf ( stderr, "\a" ); break; case -1: break; } } fprintf ( stderr, "\rReady \n\n" ); return 0; } static void usage ( void ) { static const char help[] = "'Absolute Threshold of Hearing' -- Version 0.07 (C) Frank Klemm 2000\n" "\n" "usage:\n" " ath type minfreq maxfreq duration ampl_speed [start_level [earmode] > reportfile\n" "\n" " type: linear, logarithm, square, cubic, erb, recip\n" " minfreq: initial frequency [Hz]\n" " maxfreq: end frequency [Hz]\n" " duration: duration of the experiment [s]\n" " ampl_speed: amplitude slope speed [phon/s]\n" " start_level: absolute level at startup [0...1]\n" " earmode: left, right, both, phase90, phase180\n" "\n" "example:\n" " ath erb 700 22000 600 3 0.0001 > result1\n" " ath erb 1400 16 360 3 0.0001 > result2\n" "\n" "handling:\n" " press '-' once when you start hearing a tone\n" " press '+' once when you stop hearing a tone\n" " press 'q' to early leave the program\n" " on errors the pressed key is ignored\n"; fprintf ( stderr, "%s\n", help ); } int main ( int argc, char** argv ) { generator_t g; amplitude_t a; soundcard_t s; keyboard_t k; genmode_t genmode; earmode_t earmode; if ( argc == 1 ) { usage (); system ( "./ath erb 700 22000 600 3 0.0001 > result1" ); system ( "./ath erb 1400 16 360 3 0.0001 > result2" ); system ( "xmgr result1 result2 &> /dev/null &" ); return 0; } if ( argc < 6 ) { usage (); return 1; } if ( 0 == strncmp ( argv[1], "li" , 2) ) genmode = linear; else if ( 0 == strncmp ( argv[1], "lo" , 2) ) genmode = logarithm; else if ( 0 == strncmp ( argv[1], "sq" , 2) ) genmode = square; else if ( 0 == strncmp ( argv[1], "cu" , 2) ) genmode = cubic; else if ( 0 == strncmp ( argv[1], "er" , 2) ) genmode = erb; else if ( 0 == strncmp ( argv[1], "re" , 2) ) genmode = recip; else { usage (); return 1; } if ( argc < 8 ) earmode = both; else if ( 0 == strncmp ( argv[7], "le" , 2) ) earmode = left; else if ( 0 == strncmp ( argv[7], "ri" , 2) ) earmode = right; else if ( 0 == strncmp ( argv[7], "bo" , 2) ) earmode = both; else if ( 0 == strncmp ( argv[7], "phase9" , 6) ) earmode = phase90; else if ( 0 == strncmp ( argv[7], "phase1" , 6) ) earmode = phase180; else { usage (); return 1; } open_soundcard ( &s, AUDIO_DEVICE, sizeof(stereo_t)/sizeof(sample_t), CHAR_BIT*sizeof(sample_t), 96000.0 ); open_generator ( &g, &s, genmode, atof (argv[4]), atof (argv[2]), atof (argv[3]) ); open_amplifier ( &a, &s, argc > 6 ? atof (argv[6]) : 0.0001, atof (argv[5]) ); open_keyboard ( &k ); report_open ( ); experiment ( &g, &a, &k, &s, earmode ); report_close ( ); close_keyboard ( &k ); close_amplifier( &a ); close_generator( &g ); close_soundcard( &s ); return 0; } /* end of ath.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/mugeco.sh���������������������������������������������������������������������������000755 �001751 �001751 �00000007371 07214163214 016644� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh progname=mugeco version=0.1 programr='Alexander Leidinger' progdate='7 Dec 2000' progdesc='MUltiGEnerationCOding' # NEEDS: getopt, lame # Please have a look at the DEFAULTS section. # $Id: mugeco.sh,v 1.6 2000/12/08 13:47:56 aleidinger Exp $ usage() { cat << EOF ** $progname v$version, $progdate ** by $programr $progdesc usage: $progname [ <flags> ] -g <num> <file> -v use builtin VBR options -g <num> number of generations -h help used - env vars: * LAME : alternative encoder binary * LAMEOPT: alternative encoder options - VBR opts: $enc_vbr_opts - CBR opts: $enc_cbr_opts EOF } # DEFAULTS # if you can, use getopt(1) (c)1997 by Frodo Looijaard <frodol@dds.nl> # it's in most modern unixen, or look at http://huizen.dds.nl/~frodol/ : ${GETOPT=getopt} # helper program # mktemp (optional) is also in most modern unixen (originally from OpenBSD) : ${MKTEMP=mktemp} # helper program : ${TMPDIR:=/tmp} # set default temp directory : ${LAME:=lame} # path to LAME enc_cbr_opts="-b192 -h --lowpass 18 --lowpass-width 0" enc_vbr_opts="--vbr-mtrh --nspsytune -v -h -d -Y -X3" enc_opts=${LAMEOPT:-$enc_cbr_opts} num= # default number of generations # DEFINE FUNCTIONS e() { echo "$progname: $*"; } die() { # usage: die [ <exitcode> [ <errormessage> ] ] trap '' 1 2 3 13 15 exitcode=0 [ $# -gt 0 ] && { exitcode=$1; shift; } [ $# -gt 0 ] && e "Error: $*" >&2 exit $exitcode } # tfile() # this function creates temporary files. 'tfile temp' will make a tempfile # and put the path to it in the variable $temp (defaults to variable $tf) trap 'for f in $ztfiles; do rm -f "$f"; done' 0 trap 'trap "" 1 2 3 13 15; exit 10' 1 2 3 13 15 unset ztfiles tfile() { # usage: tfile <variable_name> ztf=`$MKTEMP -q $TMPDIR/$progname.XXXXXX 2>/dev/null` # try mktemp if [ $? -gt 0 -o -z "$ztf" ]; then # if mktemp fails, do it unsafely ztf=$TMPDIR/$LOGNAME.$progname.$$ [ -e "$ztf" ] && ztf= || { touch $ztf && chmod 600 $ztf; } fi [ "$ztf" -a -f "$ztf" ] || { echo Could not make tempfile; exit 8; } ztfiles="$ztfiles $ztf" eval ${1:-tf}='$ztf' } # PARSE COMMAND LINE options="g:vh" # option string for getopt(1) help=; [ "$1" = -h -o "$1" = -help -o "$1" = --help ] && help=yes [ "$help" ] && { usage; die; } $GETOPT -T >/dev/null 2>&1 [ $? -eq 4 ] && GETOPT="$GETOPT -n $progname -s sh" #frodol's getopt? eval set -- `$GETOPT "$options" "$@"` [ $# -lt 1 ] && { die 9 getopt failed; } while [ $# -gt 0 ]; do case "$1" in -g) num=$2; shift ;; -v) enc_opts=$enc_cbr_opts ;; -h) help=y ;; --) shift; break ;; *) usage; die 9 "invalid command line syntax!" ;; esac shift done [ "$help" ] && { usage; die; } [ $# -eq 0 ] && { usage; die 9 no arguments; } #change or remove if desired # sanity checking [ "$num" ] && echo "$num"|grep -q '^[0-9]*$' && [ $num -ge 1 ] \ || die 1 please use the -g flag with a valid number # MAIN PROGRAM # what version of lame are we using? lame_vers=`$LAME 2>&1 | awk 'NR==1{print $3}'` # check filename [ -f "$1" ] || die 2 "'$1' isn't a file" echo "$1"|grep -qi '\.wav$' || die 2 "'$1' isn't a .wav" # make tempfiles base=`echo "$1"|sed 's/\.[^.]*$//'` dest=${base}_generation_$num.wav [ -e "$dest" ] && die 2 "'$dest' already exists" touch "$dest" || die 2 "couldn't create '$dest'" TMPDIR=. tfile tmpwav TMPDIR=. tfile tmpmp3 cp -f "$1" "$tmpwav" # do the loop start=`date` i=1 while [ $i -le $num ]; do e "Working on file '$1', generation number $i..." $LAME $enc_opts --tc "lame $lame_vers; Generation: $i" \ "$tmpwav" "$tmpmp3" || die 3 encoding failed $LAME --decode --mp3input "$tmpmp3" "$tmpwav" || die 3 decoding failed i=`expr $i + 1` done end=`date` # save the result ln -f "$tmpwav" "$dest" echo e "Start: $start" e "Stop : $end" die �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/scalartest.c������������������������������������������������������������������������000644 �001751 �001751 �00000007372 07203101133 017326� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <stdio.h> #include <math.h> #include <asm/msr.h> #include "resample.h" #define CLK 300.e6 #define LOOPS 20000 typedef double ( *ddf ) ( double ); float a1 [256]; float a2 [256]; void init ( void ) { int i; for ( i = 0; i < sizeof(a1)/sizeof(*a1); i++ ) { a1 [i] = sin(i)+0.2*sin(1.8*i)+log(2+i); a2 [i] = cos(0.1*i); } } void test ( int no, scalar_t f ) { unsigned long long t1; unsigned long long t2; unsigned long long t3; unsigned long long t4; int l; double last = 0; double curr = 0; printf ( "[%3u] %22.14f\t\t", no, (double)f (a1,a2) ); fflush ( stdout ); do { rdtscll (t1); l = LOOPS; do ; while (--l); rdtscll (t2); rdtscll (t3); l = LOOPS; do f(a1,a2), f(a1,a2), f(a1,a2), f(a1,a2); while (--l); rdtscll (t4); last = curr; curr = (t4-t3-t2+t1) / CLK / LOOPS / 4 * 1.e9; } while ( fabs(curr-last) > 1.e-4 * (curr+last) ); printf ("%8.2f ns\n", (curr+last) / 2 ); } void testn ( scalarn_t f ) { unsigned long long t1; unsigned long long t2; unsigned long long t3; unsigned long long t4; int l; int i; double last = 0; double curr = 0; for ( i = 1; i <= 64; i += i<6 ? 1 : i<8 ? 2 : i ) { printf ( "[%3u] %22.14f\t\t", 4*i, (double)f (a1,a2,i) ); fflush ( stdout ); do { rdtscll (t1); l = LOOPS; do ; while (--l); rdtscll (t2); rdtscll (t3); l = LOOPS; do f(a1,a2,i), f(a1,a2,i), f(a1,a2,i), f(a1,a2,i); while (--l); rdtscll (t4); last = curr; curr = (t4-t3-t2+t1) / CLK / LOOPS / 4 * 1.e9; } while ( fabs(curr-last) > 1.e-4 * (curr+last) ); printf ("%8.2f ns\n", (curr+last) / 2 ); } } void test2 ( const char* name, ddf f ) { int i; double x; printf ( "\n%%%% %s\n\n", name ); for ( i = -1000; i <= 1000; i++ ) { x = 1.e-3 * i; printf ( "%5d\t%12.8f\t%12.8f\t%12.8f\n", i, f(x), (f(x+5.e-5) - f(x-5.e-5))*1.e+4, (f(x+1.e-4) + f(x-1.e-4) - 2*f(x))*5.e+7 ); } printf ( "%%%%\n" ); fflush ( stdout ); } int main ( int argc, char** argv ) { #if 0 test2 ( "Hann", hanning ); test2 ( "Hamm", hamming ); test2 ( "BM", blackman ); test2 ( "BM1",blackman1 ); test2 ( "BM2",blackman2 ); test2 ( "BMH N",blackmanharris_nuttall ); test2 ( "MNH Min",blackmanharris_min4 ); #else init (); test ( 4, scalar04_float32 ); test ( 4, scalar04_float32_i387 ); test ( 4, scalar04_float32_3DNow ); test ( 4, scalar04_float32_SIMD ); test ( 8, scalar08_float32 ); test ( 8, scalar08_float32_i387 ); test ( 8, scalar08_float32_3DNow ); test ( 8, scalar08_float32_SIMD ); test ( 12, scalar12_float32 ); test ( 12, scalar12_float32_i387 ); test ( 12, scalar12_float32_3DNow ); test ( 12, scalar12_float32_SIMD ); test ( 16, scalar16_float32 ); test ( 16, scalar16_float32_i387 ); test ( 16, scalar16_float32_3DNow ); test ( 16, scalar16_float32_SIMD ); test ( 20, scalar20_float32 ); test ( 20, scalar20_float32_i387 ); test ( 20, scalar20_float32_3DNow ); test ( 20, scalar20_float32_SIMD ); test ( 24, scalar24_float32 ); test ( 24, scalar24_float32_i387 ); test ( 24, scalar24_float32_3DNow ); test ( 24, scalar24_float32_SIMD ); testn( scalar4n_float32 ); testn( scalar4n_float32_i387 ); testn( scalar4n_float32_3DNow ); testn( scalar4n_float32_SIMD ); #endif return 0; } /* end of scalartest.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/Makefile.am�������������������������������������������������������������������������000644 �001751 �001751 �00000000642 11655262415 017063� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.11 2011/11/05 16:32:13 robert Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_PROGRAMS = abx ath scalartest CLEANFILES = $(EXTRA_PROGRAMS) EXTRA_SCRIPTS = \ auenc \ lameid3.pl \ mugeco.sh \ mlame \ mk_mp3.sh EXTRA_DIST = \ $(EXTRA_SCRIPTS) \ Lame.vbs \ lameGUI.html \ lame4dos.bat \ mlame_corr.c abx_SOURCES = abx.c ath_SOURCES = ath.c scalartest_SOURCES = scalartest.c ����������������������������������������������������������������������������������������������lame-3.100/misc/lameid3.pl��������������������������������������������������������������������������000644 �001751 �001751 �00000002452 07423074362 016703� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # From: Per Bolmstedt <tomten@kol14.com> # # AC> If someone has scripts that read input ID3 tags and convert # AC> them to args for lame (which then encodes the tags into the # AC> output files), let me know, too! # # This is easy peasy using Perl. Especially using Chris Nandor's excellent # MP3::Info package (available on CPAN). Here's a program I just wrote that # I think does what you want. Invoke it with "<program> <file> [options]" # (where the options can include an output filename), like for example: # # lameid3.pl HQ.mp3 LQ.mp3 -fv # # (Note how the syntax differs from that of Lame's.) The program will # extract ID3 tags from the input file and invoke Lame with arguments for # including them. (This program has not undergone any real testing..) use MP3::Info; use strict; my %flds = ( TITLE => 'tt', ARTIST => 'ta', ALBUM => 'tl', YEAR => 'ty', COMMENT => 'tc', GENRE => 'tg', TRACKNUM => 'tn' ); my $f = shift @ARGV; my $s = "lame ${f} " . &makeid3args( $f ) . join ' ', @ARGV; print STDERR "[${s}]\n"; system( $s ); sub makeid3args( $ ) { my $s; if ( my $tag = get_mp3tag( @_->[ 0 ] ) ) { for ( keys %flds ) { if ( $tag->{ $_ } ) { $s .= sprintf( "--%s \"%s\" ", %flds->{ $_ }, $tag->{ $_ } ); } } } return $s || ""; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/Lame.vbs����������������������������������������������������������������������������000644 �001751 �001751 �00000011476 07342474034 016430� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������' lame.vbs WindowsScript wrapper v0.5, 06/15/2001 ' $id$ ' ' *Purpose* ' Use this WindowsScript to encode WAVs using drag&drop: ' 0. make sure you have windows script host v5.1 on your system ' (enter 'cscript' in a DOS-Box and compare version number) ' 1. adjust the path settings below to fit your needs ' 2a. put this file somewhere on the desktop ' 3a. drag one or more wav-files on the icon and watch them being lamed. ' ' 2b. start->execute, enter "sendto", drag the script or a link to it in ' sendto window (adjust names and icon as you like) ' 3b. select wave-file(s) and send it via the send-to menu to LAME! ' ' You may wish to create copies of this file with different options set. ' ' If you would like a GUI: try to enable the HTML UI (see below) ' ' Ralf Kempkens, ralf.kempkens@epost.de ' ' ' *History* ' V0.5 * lame.vbs will automatically decode if the file has a .mp3 extension ' * now explicitly refuses to accept folders ' V0.4 * creates single .mp3 extensions, now ID3 options in HTML interface ' V0.3 * fixed bug that prevented lame.exe to be located in a path that ' contained a space ' * experimental HTML UI support (disabled by default) ' V0.2 added multiple file support ' V0.1 initial release ' *** change path to your needs *** path = "D:\Audio\Lame\Lame386\" '!!! must end with a backslash !!! lame = "lame.exe" ' *** change default options to your needs *** opts = "--preset hifi" ' *** HTML GUI (experimental) *** useGUI = False ' it set to True, opens file lameGUI.html residing in the same path as lame.exe ' to choose options. Please look at the example HTML-file for further information. ' no changes needed below this line ' ########################################################################## Dim wsh, args, infile, fs title="LAME Script" ' get input files Set wsh = WScript.CreateObject("WScript.Shell") Set args = WScript.Arguments If args.Count = 0 Then MsgBox "LAME mp3 encoder/decoder frontend script." & vbCR & _ "Please use drag & drop to specify input files.", vbInformation, title WScript.Quit End If ' check path Set fso = CreateObject("Scripting.FileSystemObject") If Not fso.FileExists(path & lame) Then MsgBox "Could not find LAME!" & vbCR & "(looked for '" & path & lame & "')", vbCritical, title WScript.Quit End If ' start GUI if useGUI Then set ie=WScript.CreateObject("InternetExplorer.Application", "ie_") ie.navigate(path & "lameGUI.html") do WScript.Sleep 100 loop until ie.ReadyState=4 'wait for GUI ie.Width=640 ie.Height=600 ie.Toolbar=false ie.Statusbar=false ie.visible=true 'link to GUI set document=ie.document document.forms.lameform.okbutton.onClick=GetRef("okbutton") 'wait for user pressing ok... do WScript.Sleep 300 loop until process end if 'process files For i = 0 To args.Count-1 infile = args(i) ' check input file If fso.FolderExists(infile) Then MsgBox "'" & infile & "' is a folder!" & vbCR & _ title & " only handles proper files.", vbInformation, title Else If Not fso.FileExists(infile) Then MsgBox "Error opening input-file" & vbCR & "'" & infile & "'", vbCritical , title Else ' run lame If(LCase(getExtension(infile))="mp3") Then 'decode ret = wsh.Run(Chr(34) & path & lame & CHR(34) & " --decode " & _ Chr(34) & infile & Chr(34) & Chr(32) & Chr(34) & _ getBasename(infile) & ".wav" & Chr(34), 1, True) Else ' encode ret = wsh.Run(Chr(34) & path & lame & CHR(34) & Chr(32) & opts & Chr(32) & _ Chr(34) & infile & Chr(34) & Chr(32) & Chr(34) & _ getBasename(infile) & ".mp3" & Chr(34), 1, True) End If ' diagnostics Select Case ret Case (0) 'okeydokey Case (-1) MsgBox "LAME aborted by user!", vbExclamation, title Case (1) MsgBox "Error returned by LAME!" & vbCR & "(Check LAME options and input file formats.)" & vbCR & "Used Options: " & opts, vbCritical, title Case Else MsgBox "Received unknown LAME return-code: " & ret, vbCritical, title End Select End If End If Next WScript.Quit ' ******************************************************************* ' utility functions Function getBasename(filespec) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) getBasename = f.ParentFolder & "\" & fso.GetBaseName(filespec) End Function Function getExtension(filespec) Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(filespec) getExtension = fso.GetExtensionName(filespec) End Function ' ******************************************************************* ' manage link to IE HTML-interface sub okbutton 'process inputs opts=document.all.lameoptions.Value ie.Quit MsgBox "LAME options:" & vbCR & opts, vbInformation, title end sub sub ie_onQuit process=True end sub 'eof ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/misc/lameGUI.html������������������������������������������������������������������������000644 �001751 �001751 �00000042664 10775731507 017217� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> <title>Lame

LAME Frontend

Fixed Bitrate  
bitrate (-b) high quality (-h)
  fast (no noise shaping)
   
Variable Bitrate  
variable bitrate (-v) VBR quality (-V)
maximum bitrate (-B) enforce min. bitrate (-F)
   
General  
mode (-m) disable all filters (-k)
copyrighted (-c) non-original (-o)
   
ID3-Tag  
title (--tt) artist (--ta)
album (--tl) year (--ty) track (--tn)
comment (--tc) genre (--tg)
     
[LAME HELP] [LAME Readme] [LAME History] [LAME Homepage]  
lame-3.100/macosx/Makefile.in000644 001751 001751 00000045630 13170220146 017426 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = macosx ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign SUBDIRS = English.lproj LAME.xcodeproj EXTRA_DIST = \ Info.plist \ LAME_Prefix.pch all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign macosx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign macosx/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/macosx/Info.plist000644 001751 001751 00000001150 11014710544 017317 0ustar00netchildnetchild000000 000000 CFBundleDevelopmentRegion English CFBundleExecutable LAME CFBundleIdentifier net.sourceforge.LAMEframework CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType FMWK CFBundleSignature LAMh CFBundleVersion 1.0 lame-3.100/macosx/Makefile.am000644 001751 001751 00000000301 11015750712 017402 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.2 2008/05/24 08:28:58 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global SUBDIRS = English.lproj LAME.xcodeproj EXTRA_DIST = \ Info.plist \ LAME_Prefix.pch lame-3.100/macosx/LAME.xcodeproj/000755 001751 001751 00000000000 13170221266 020067 5ustar00netchildnetchild000000 000000 lame-3.100/macosx/LAME_Prefix.pch000644 001751 001751 00000000213 11014710544 020075 0ustar00netchildnetchild000000 000000 // // Prefix header for all source files of the 'LAME' target in the 'LAME' project. // #include #define HAVE_CONFIG_H lame-3.100/macosx/English.lproj/000755 001751 001751 00000000000 13170221265 020072 5ustar00netchildnetchild000000 000000 lame-3.100/macosx/English.lproj/InfoPlist.strings000644 001751 001751 00000000652 11015327031 023411 0ustar00netchildnetchild000000 000000 þÿ/* Localized versions of Info.plist keys */ CFBundleName = "LAME"; CFBundleShortVersionString = "3.97b2"; CFBundleGetInfoString = "LAME version 3.97b2 LGPL licensed"; NSHumanReadableCopyright = "LGPL licensed"; lame-3.100/macosx/English.lproj/Makefile.am000644 001751 001751 00000000215 11015750712 022124 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.1 2008/05/24 08:28:58 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ InfoPlist.strings lame-3.100/macosx/English.lproj/Makefile.in000644 001751 001751 00000031242 13170220146 022136 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = macosx/English.lproj ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ InfoPlist.strings all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign macosx/English.lproj/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign macosx/English.lproj/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/macosx/LAME.xcodeproj/project.pbxproj000644 001751 001751 00000102741 11015327031 023141 0ustar00netchildnetchild000000 000000 // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 8D07F2BE0486CC7A007CD1D0 /* LAME_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* LAME_Prefix.pch */; }; 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; }; EA0A6AD40BB84E38003C87B1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA0A6AC20BB84D93003C87B1 /* Cocoa.framework */; }; EA498C8D0DE5E37B00250F0E /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = EA498C8C0DE5E37B00250F0E /* config.h */; }; EA8CC08809A39A49001379B8 /* lame.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC08709A39A49001379B8 /* lame.h */; settings = {ATTRIBUTES = (Public, ); }; }; EA8CC0A509A39A55001379B8 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC08A09A39A55001379B8 /* common.c */; }; EA8CC0A609A39A55001379B8 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC08B09A39A55001379B8 /* common.h */; }; EA8CC0A709A39A55001379B8 /* dct64_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC08C09A39A55001379B8 /* dct64_i386.c */; }; EA8CC0A809A39A55001379B8 /* dct64_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC08D09A39A55001379B8 /* dct64_i386.h */; }; EA8CC0A909A39A55001379B8 /* decode_i386.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC08E09A39A55001379B8 /* decode_i386.c */; }; EA8CC0AA09A39A55001379B8 /* decode_i386.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC08F09A39A55001379B8 /* decode_i386.h */; }; EA8CC0AC09A39A55001379B8 /* huffman.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09109A39A55001379B8 /* huffman.h */; }; EA8CC0AD09A39A55001379B8 /* interface.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC09209A39A55001379B8 /* interface.c */; }; EA8CC0AE09A39A55001379B8 /* interface.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09309A39A55001379B8 /* interface.h */; }; EA8CC0AF09A39A55001379B8 /* l2tables.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09409A39A55001379B8 /* l2tables.h */; }; EA8CC0B009A39A55001379B8 /* layer1.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC09509A39A55001379B8 /* layer1.c */; }; EA8CC0B109A39A55001379B8 /* layer1.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09609A39A55001379B8 /* layer1.h */; }; EA8CC0B209A39A55001379B8 /* layer2.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC09709A39A55001379B8 /* layer2.c */; }; EA8CC0B309A39A55001379B8 /* layer2.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09809A39A55001379B8 /* layer2.h */; }; EA8CC0B409A39A55001379B8 /* layer3.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC09909A39A55001379B8 /* layer3.c */; }; EA8CC0B509A39A55001379B8 /* layer3.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09A09A39A55001379B8 /* layer3.h */; }; EA8CC0B809A39A55001379B8 /* mpg123.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09D09A39A55001379B8 /* mpg123.h */; }; EA8CC0B909A39A55001379B8 /* mpglib.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC09E09A39A55001379B8 /* mpglib.h */; }; EA8CC0BD09A39A55001379B8 /* tabinit.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0A209A39A55001379B8 /* tabinit.c */; }; EA8CC0BE09A39A55001379B8 /* tabinit.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0A309A39A55001379B8 /* tabinit.h */; }; EA8CC0F909A39A5E001379B8 /* bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0C109A39A5E001379B8 /* bitstream.c */; }; EA8CC0FA09A39A5E001379B8 /* bitstream.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0C209A39A5E001379B8 /* bitstream.h */; }; EA8CC0FC09A39A5E001379B8 /* encoder.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0C409A39A5E001379B8 /* encoder.c */; }; EA8CC0FD09A39A5E001379B8 /* encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0C509A39A5E001379B8 /* encoder.h */; }; EA8CC0FE09A39A5E001379B8 /* fft.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0C609A39A5E001379B8 /* fft.c */; }; EA8CC0FF09A39A5E001379B8 /* fft.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0C709A39A5E001379B8 /* fft.h */; }; EA8CC10009A39A5E001379B8 /* gain_analysis.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0C809A39A5E001379B8 /* gain_analysis.c */; }; EA8CC10109A39A5E001379B8 /* gain_analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0C909A39A5E001379B8 /* gain_analysis.h */; }; EA8CC10C09A39A5E001379B8 /* id3tag.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0D509A39A5E001379B8 /* id3tag.c */; }; EA8CC10D09A39A5E001379B8 /* id3tag.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0D609A39A5E001379B8 /* id3tag.h */; }; EA8CC10E09A39A5E001379B8 /* l3side.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0D709A39A5E001379B8 /* l3side.h */; }; EA8CC10F09A39A5E001379B8 /* lame-analysis.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0D809A39A5E001379B8 /* lame-analysis.h */; }; EA8CC11009A39A5E001379B8 /* lame.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0D909A39A5E001379B8 /* lame.c */; }; EA8CC11109A39A5E001379B8 /* lame_global_flags.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0DA09A39A5E001379B8 /* lame_global_flags.h */; }; EA8CC11409A39A5E001379B8 /* machine.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0DD09A39A5E001379B8 /* machine.h */; }; EA8CC11709A39A5E001379B8 /* mpglib_interface.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E009A39A5E001379B8 /* mpglib_interface.c */; }; EA8CC11809A39A5E001379B8 /* newmdct.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E109A39A5E001379B8 /* newmdct.c */; }; EA8CC11909A39A5E001379B8 /* newmdct.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0E209A39A5E001379B8 /* newmdct.h */; }; EA8CC11A09A39A5E001379B8 /* presets.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E309A39A5E001379B8 /* presets.c */; }; EA8CC11B09A39A5E001379B8 /* psymodel.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E409A39A5E001379B8 /* psymodel.c */; }; EA8CC11C09A39A5E001379B8 /* psymodel.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0E509A39A5E001379B8 /* psymodel.h */; }; EA8CC11D09A39A5E001379B8 /* quantize.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E609A39A5E001379B8 /* quantize.c */; }; EA8CC11E09A39A5E001379B8 /* quantize.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0E709A39A5E001379B8 /* quantize.h */; }; EA8CC11F09A39A5E001379B8 /* quantize_pvt.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0E809A39A5E001379B8 /* quantize_pvt.c */; }; EA8CC12009A39A5E001379B8 /* quantize_pvt.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0E909A39A5E001379B8 /* quantize_pvt.h */; }; EA8CC12109A39A5E001379B8 /* reservoir.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0EA09A39A5E001379B8 /* reservoir.c */; }; EA8CC12209A39A5E001379B8 /* reservoir.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0EB09A39A5E001379B8 /* reservoir.h */; }; EA8CC12309A39A5E001379B8 /* set_get.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0EC09A39A5E001379B8 /* set_get.c */; }; EA8CC12409A39A5E001379B8 /* set_get.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0ED09A39A5E001379B8 /* set_get.h */; }; EA8CC12509A39A5E001379B8 /* tables.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0EE09A39A5E001379B8 /* tables.c */; }; EA8CC12609A39A5E001379B8 /* tables.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0EF09A39A5E001379B8 /* tables.h */; }; EA8CC12709A39A5E001379B8 /* takehiro.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0F009A39A5E001379B8 /* takehiro.c */; }; EA8CC12809A39A5E001379B8 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0F109A39A5E001379B8 /* util.c */; }; EA8CC12909A39A5E001379B8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0F209A39A5E001379B8 /* util.h */; }; EA8CC12A09A39A5E001379B8 /* vbrquantize.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0F309A39A5E001379B8 /* vbrquantize.c */; }; EA8CC12B09A39A5E001379B8 /* vbrquantize.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0F409A39A5E001379B8 /* vbrquantize.h */; }; EA8CC12C09A39A5E001379B8 /* VbrTag.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0F509A39A5E001379B8 /* VbrTag.c */; }; EA8CC12D09A39A5E001379B8 /* VbrTag.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0F609A39A5E001379B8 /* VbrTag.h */; }; EA8CC12E09A39A5E001379B8 /* version.c in Sources */ = {isa = PBXBuildFile; fileRef = EA8CC0F709A39A5E001379B8 /* version.c */; }; EA8CC12F09A39A5E001379B8 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8CC0F809A39A5E001379B8 /* version.h */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 32BAE0B70371A74B00C91783 /* LAME_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LAME_Prefix.pch; sourceTree = ""; }; 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 8D07F2C80486CC7A007CD1D0 /* LAME.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LAME.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EA0A6AC20BB84D93003C87B1 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; EA498C8C0DE5E37B00250F0E /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; EA8CC08709A39A49001379B8 /* lame.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = lame.h; path = ../include/lame.h; sourceTree = ""; }; EA8CC08A09A39A55001379B8 /* common.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = common.c; sourceTree = ""; }; EA8CC08B09A39A55001379B8 /* common.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; EA8CC08C09A39A55001379B8 /* dct64_i386.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = dct64_i386.c; sourceTree = ""; }; EA8CC08D09A39A55001379B8 /* dct64_i386.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = dct64_i386.h; sourceTree = ""; }; EA8CC08E09A39A55001379B8 /* decode_i386.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = decode_i386.c; sourceTree = ""; }; EA8CC08F09A39A55001379B8 /* decode_i386.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = decode_i386.h; sourceTree = ""; }; EA8CC09109A39A55001379B8 /* huffman.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = ""; }; EA8CC09209A39A55001379B8 /* interface.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = interface.c; sourceTree = ""; }; EA8CC09309A39A55001379B8 /* interface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = interface.h; sourceTree = ""; }; EA8CC09409A39A55001379B8 /* l2tables.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = l2tables.h; sourceTree = ""; }; EA8CC09509A39A55001379B8 /* layer1.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = layer1.c; sourceTree = ""; }; EA8CC09609A39A55001379B8 /* layer1.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = layer1.h; sourceTree = ""; }; EA8CC09709A39A55001379B8 /* layer2.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = layer2.c; sourceTree = ""; }; EA8CC09809A39A55001379B8 /* layer2.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = layer2.h; sourceTree = ""; }; EA8CC09909A39A55001379B8 /* layer3.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = layer3.c; sourceTree = ""; }; EA8CC09A09A39A55001379B8 /* layer3.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = layer3.h; sourceTree = ""; }; EA8CC09D09A39A55001379B8 /* mpg123.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mpg123.h; sourceTree = ""; }; EA8CC09E09A39A55001379B8 /* mpglib.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mpglib.h; sourceTree = ""; }; EA8CC0A209A39A55001379B8 /* tabinit.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tabinit.c; sourceTree = ""; }; EA8CC0A309A39A55001379B8 /* tabinit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tabinit.h; sourceTree = ""; }; EA8CC0C109A39A5E001379B8 /* bitstream.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = bitstream.c; sourceTree = ""; }; EA8CC0C209A39A5E001379B8 /* bitstream.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = bitstream.h; sourceTree = ""; }; EA8CC0C409A39A5E001379B8 /* encoder.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = encoder.c; sourceTree = ""; }; EA8CC0C509A39A5E001379B8 /* encoder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = encoder.h; sourceTree = ""; }; EA8CC0C609A39A5E001379B8 /* fft.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = fft.c; sourceTree = ""; }; EA8CC0C709A39A5E001379B8 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fft.h; sourceTree = ""; }; EA8CC0C809A39A5E001379B8 /* gain_analysis.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = gain_analysis.c; sourceTree = ""; }; EA8CC0C909A39A5E001379B8 /* gain_analysis.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = gain_analysis.h; sourceTree = ""; }; EA8CC0D509A39A5E001379B8 /* id3tag.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = id3tag.c; sourceTree = ""; }; EA8CC0D609A39A5E001379B8 /* id3tag.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = id3tag.h; sourceTree = ""; }; EA8CC0D709A39A5E001379B8 /* l3side.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = l3side.h; sourceTree = ""; }; EA8CC0D809A39A5E001379B8 /* lame-analysis.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "lame-analysis.h"; sourceTree = ""; }; EA8CC0D909A39A5E001379B8 /* lame.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = lame.c; sourceTree = ""; }; EA8CC0DA09A39A5E001379B8 /* lame_global_flags.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lame_global_flags.h; sourceTree = ""; }; EA8CC0DD09A39A5E001379B8 /* machine.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = machine.h; sourceTree = ""; }; EA8CC0E009A39A5E001379B8 /* mpglib_interface.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = mpglib_interface.c; sourceTree = ""; }; EA8CC0E109A39A5E001379B8 /* newmdct.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = newmdct.c; sourceTree = ""; }; EA8CC0E209A39A5E001379B8 /* newmdct.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = newmdct.h; sourceTree = ""; }; EA8CC0E309A39A5E001379B8 /* presets.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = presets.c; sourceTree = ""; }; EA8CC0E409A39A5E001379B8 /* psymodel.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = psymodel.c; sourceTree = ""; }; EA8CC0E509A39A5E001379B8 /* psymodel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = psymodel.h; sourceTree = ""; }; EA8CC0E609A39A5E001379B8 /* quantize.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = quantize.c; sourceTree = ""; }; EA8CC0E709A39A5E001379B8 /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = quantize.h; sourceTree = ""; }; EA8CC0E809A39A5E001379B8 /* quantize_pvt.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = quantize_pvt.c; sourceTree = ""; }; EA8CC0E909A39A5E001379B8 /* quantize_pvt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = quantize_pvt.h; sourceTree = ""; }; EA8CC0EA09A39A5E001379B8 /* reservoir.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = reservoir.c; sourceTree = ""; }; EA8CC0EB09A39A5E001379B8 /* reservoir.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = reservoir.h; sourceTree = ""; }; EA8CC0EC09A39A5E001379B8 /* set_get.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = set_get.c; sourceTree = ""; }; EA8CC0ED09A39A5E001379B8 /* set_get.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = set_get.h; sourceTree = ""; }; EA8CC0EE09A39A5E001379B8 /* tables.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = tables.c; sourceTree = ""; }; EA8CC0EF09A39A5E001379B8 /* tables.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tables.h; sourceTree = ""; }; EA8CC0F009A39A5E001379B8 /* takehiro.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = takehiro.c; sourceTree = ""; }; EA8CC0F109A39A5E001379B8 /* util.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = util.c; sourceTree = ""; }; EA8CC0F209A39A5E001379B8 /* util.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; EA8CC0F309A39A5E001379B8 /* vbrquantize.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = vbrquantize.c; sourceTree = ""; }; EA8CC0F409A39A5E001379B8 /* vbrquantize.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = vbrquantize.h; sourceTree = ""; }; EA8CC0F509A39A5E001379B8 /* VbrTag.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = VbrTag.c; sourceTree = ""; }; EA8CC0F609A39A5E001379B8 /* VbrTag.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = VbrTag.h; sourceTree = ""; }; EA8CC0F709A39A5E001379B8 /* version.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = version.c; sourceTree = ""; }; EA8CC0F809A39A5E001379B8 /* version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ EA0A6AD20BB84E32003C87B1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EA0A6AD40BB84E38003C87B1 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DDFF38A45A11DB9C8B /* Products */ = { isa = PBXGroup; children = ( 8D07F2C80486CC7A007CD1D0 /* LAME.framework */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* LAME */ = { isa = PBXGroup; children = ( 08FB77ACFE841707C02AAC07 /* Source */, 089C1665FE841158C02AAC07 /* Resources */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, 034768DDFF38A45A11DB9C8B /* Products */, ); name = LAME; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( EA0A6AC20BB84D93003C87B1 /* Cocoa.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 089C1665FE841158C02AAC07 /* Resources */ = { isa = PBXGroup; children = ( 8D07F2C70486CC7A007CD1D0 /* Info.plist */, 089C1666FE841158C02AAC07 /* InfoPlist.strings */, ); name = Resources; sourceTree = ""; }; 08FB77ACFE841707C02AAC07 /* Source */ = { isa = PBXGroup; children = ( 32BAE0B70371A74B00C91783 /* LAME_Prefix.pch */, EA8CC08709A39A49001379B8 /* lame.h */, EA498C8C0DE5E37B00250F0E /* config.h */, EA8CC0C009A39A5E001379B8 /* libmp3lame */, EA8CC08909A39A55001379B8 /* mpglib */, ); name = Source; sourceTree = ""; }; EA8CC08909A39A55001379B8 /* mpglib */ = { isa = PBXGroup; children = ( EA8CC08A09A39A55001379B8 /* common.c */, EA8CC08B09A39A55001379B8 /* common.h */, EA8CC08C09A39A55001379B8 /* dct64_i386.c */, EA8CC08D09A39A55001379B8 /* dct64_i386.h */, EA8CC08E09A39A55001379B8 /* decode_i386.c */, EA8CC08F09A39A55001379B8 /* decode_i386.h */, EA8CC09109A39A55001379B8 /* huffman.h */, EA8CC09209A39A55001379B8 /* interface.c */, EA8CC09309A39A55001379B8 /* interface.h */, EA8CC09409A39A55001379B8 /* l2tables.h */, EA8CC09509A39A55001379B8 /* layer1.c */, EA8CC09609A39A55001379B8 /* layer1.h */, EA8CC09709A39A55001379B8 /* layer2.c */, EA8CC09809A39A55001379B8 /* layer2.h */, EA8CC09909A39A55001379B8 /* layer3.c */, EA8CC09A09A39A55001379B8 /* layer3.h */, EA8CC09D09A39A55001379B8 /* mpg123.h */, EA8CC09E09A39A55001379B8 /* mpglib.h */, EA8CC0A209A39A55001379B8 /* tabinit.c */, EA8CC0A309A39A55001379B8 /* tabinit.h */, ); name = mpglib; path = ../mpglib; sourceTree = ""; }; EA8CC0C009A39A5E001379B8 /* libmp3lame */ = { isa = PBXGroup; children = ( EA8CC0C109A39A5E001379B8 /* bitstream.c */, EA8CC0C209A39A5E001379B8 /* bitstream.h */, EA8CC0C409A39A5E001379B8 /* encoder.c */, EA8CC0C509A39A5E001379B8 /* encoder.h */, EA8CC0C609A39A5E001379B8 /* fft.c */, EA8CC0C709A39A5E001379B8 /* fft.h */, EA8CC0C809A39A5E001379B8 /* gain_analysis.c */, EA8CC0C909A39A5E001379B8 /* gain_analysis.h */, EA8CC0D509A39A5E001379B8 /* id3tag.c */, EA8CC0D609A39A5E001379B8 /* id3tag.h */, EA8CC0D709A39A5E001379B8 /* l3side.h */, EA8CC0D809A39A5E001379B8 /* lame-analysis.h */, EA8CC0D909A39A5E001379B8 /* lame.c */, EA8CC0DA09A39A5E001379B8 /* lame_global_flags.h */, EA8CC0DD09A39A5E001379B8 /* machine.h */, EA8CC0E009A39A5E001379B8 /* mpglib_interface.c */, EA8CC0E109A39A5E001379B8 /* newmdct.c */, EA8CC0E209A39A5E001379B8 /* newmdct.h */, EA8CC0E309A39A5E001379B8 /* presets.c */, EA8CC0E409A39A5E001379B8 /* psymodel.c */, EA8CC0E509A39A5E001379B8 /* psymodel.h */, EA8CC0E609A39A5E001379B8 /* quantize.c */, EA8CC0E709A39A5E001379B8 /* quantize.h */, EA8CC0E809A39A5E001379B8 /* quantize_pvt.c */, EA8CC0E909A39A5E001379B8 /* quantize_pvt.h */, EA8CC0EA09A39A5E001379B8 /* reservoir.c */, EA8CC0EB09A39A5E001379B8 /* reservoir.h */, EA8CC0EC09A39A5E001379B8 /* set_get.c */, EA8CC0ED09A39A5E001379B8 /* set_get.h */, EA8CC0EE09A39A5E001379B8 /* tables.c */, EA8CC0EF09A39A5E001379B8 /* tables.h */, EA8CC0F009A39A5E001379B8 /* takehiro.c */, EA8CC0F109A39A5E001379B8 /* util.c */, EA8CC0F209A39A5E001379B8 /* util.h */, EA8CC0F309A39A5E001379B8 /* vbrquantize.c */, EA8CC0F409A39A5E001379B8 /* vbrquantize.h */, EA8CC0F509A39A5E001379B8 /* VbrTag.c */, EA8CC0F609A39A5E001379B8 /* VbrTag.h */, EA8CC0F709A39A5E001379B8 /* version.c */, EA8CC0F809A39A5E001379B8 /* version.h */, ); name = libmp3lame; path = ../libmp3lame; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 8D07F2BD0486CC7A007CD1D0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 8D07F2BE0486CC7A007CD1D0 /* LAME_Prefix.pch in Headers */, EA8CC08809A39A49001379B8 /* lame.h in Headers */, EA8CC0A609A39A55001379B8 /* common.h in Headers */, EA8CC0A809A39A55001379B8 /* dct64_i386.h in Headers */, EA8CC0AA09A39A55001379B8 /* decode_i386.h in Headers */, EA8CC0AC09A39A55001379B8 /* huffman.h in Headers */, EA8CC0AE09A39A55001379B8 /* interface.h in Headers */, EA8CC0AF09A39A55001379B8 /* l2tables.h in Headers */, EA8CC0B109A39A55001379B8 /* layer1.h in Headers */, EA8CC0B309A39A55001379B8 /* layer2.h in Headers */, EA8CC0B509A39A55001379B8 /* layer3.h in Headers */, EA8CC0B809A39A55001379B8 /* mpg123.h in Headers */, EA8CC0B909A39A55001379B8 /* mpglib.h in Headers */, EA8CC0BE09A39A55001379B8 /* tabinit.h in Headers */, EA8CC0FA09A39A5E001379B8 /* bitstream.h in Headers */, EA8CC0FD09A39A5E001379B8 /* encoder.h in Headers */, EA8CC0FF09A39A5E001379B8 /* fft.h in Headers */, EA8CC10109A39A5E001379B8 /* gain_analysis.h in Headers */, EA8CC10D09A39A5E001379B8 /* id3tag.h in Headers */, EA8CC10E09A39A5E001379B8 /* l3side.h in Headers */, EA8CC10F09A39A5E001379B8 /* lame-analysis.h in Headers */, EA8CC11109A39A5E001379B8 /* lame_global_flags.h in Headers */, EA8CC11409A39A5E001379B8 /* machine.h in Headers */, EA8CC11909A39A5E001379B8 /* newmdct.h in Headers */, EA8CC11C09A39A5E001379B8 /* psymodel.h in Headers */, EA8CC11E09A39A5E001379B8 /* quantize.h in Headers */, EA8CC12009A39A5E001379B8 /* quantize_pvt.h in Headers */, EA8CC12209A39A5E001379B8 /* reservoir.h in Headers */, EA8CC12409A39A5E001379B8 /* set_get.h in Headers */, EA8CC12609A39A5E001379B8 /* tables.h in Headers */, EA8CC12909A39A5E001379B8 /* util.h in Headers */, EA8CC12B09A39A5E001379B8 /* vbrquantize.h in Headers */, EA8CC12D09A39A5E001379B8 /* VbrTag.h in Headers */, EA8CC12F09A39A5E001379B8 /* version.h in Headers */, EA498C8D0DE5E37B00250F0E /* config.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 8D07F2BC0486CC7A007CD1D0 /* LAME */ = { isa = PBXNativeTarget; buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "LAME" */; buildPhases = ( 8D07F2BD0486CC7A007CD1D0 /* Headers */, 8D07F2BF0486CC7A007CD1D0 /* Resources */, 8D07F2C10486CC7A007CD1D0 /* Sources */, EA0A6AD20BB84E32003C87B1 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = LAME; productInstallPath = "$(HOME)/Library/Frameworks"; productName = LAME; productReference = 8D07F2C80486CC7A007CD1D0 /* LAME.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "LAME" */; compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* LAME */; productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 8D07F2BC0486CC7A007CD1D0 /* LAME */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 8D07F2BF0486CC7A007CD1D0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8D07F2C10486CC7A007CD1D0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EA8CC0A509A39A55001379B8 /* common.c in Sources */, EA8CC0A709A39A55001379B8 /* dct64_i386.c in Sources */, EA8CC0A909A39A55001379B8 /* decode_i386.c in Sources */, EA8CC0AD09A39A55001379B8 /* interface.c in Sources */, EA8CC0B009A39A55001379B8 /* layer1.c in Sources */, EA8CC0B209A39A55001379B8 /* layer2.c in Sources */, EA8CC0B409A39A55001379B8 /* layer3.c in Sources */, EA8CC0BD09A39A55001379B8 /* tabinit.c in Sources */, EA8CC0F909A39A5E001379B8 /* bitstream.c in Sources */, EA8CC0FC09A39A5E001379B8 /* encoder.c in Sources */, EA8CC0FE09A39A5E001379B8 /* fft.c in Sources */, EA8CC10009A39A5E001379B8 /* gain_analysis.c in Sources */, EA8CC10C09A39A5E001379B8 /* id3tag.c in Sources */, EA8CC11009A39A5E001379B8 /* lame.c in Sources */, EA8CC11709A39A5E001379B8 /* mpglib_interface.c in Sources */, EA8CC11809A39A5E001379B8 /* newmdct.c in Sources */, EA8CC11A09A39A5E001379B8 /* presets.c in Sources */, EA8CC11B09A39A5E001379B8 /* psymodel.c in Sources */, EA8CC11D09A39A5E001379B8 /* quantize.c in Sources */, EA8CC11F09A39A5E001379B8 /* quantize_pvt.c in Sources */, EA8CC12109A39A5E001379B8 /* reservoir.c in Sources */, EA8CC12309A39A5E001379B8 /* set_get.c in Sources */, EA8CC12509A39A5E001379B8 /* tables.c in Sources */, EA8CC12709A39A5E001379B8 /* takehiro.c in Sources */, EA8CC12809A39A5E001379B8 /* util.c in Sources */, EA8CC12A09A39A5E001379B8 /* vbrquantize.c in Sources */, EA8CC12C09A39A5E001379B8 /* VbrTag.c in Sources */, EA8CC12E09A39A5E001379B8 /* version.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( 089C1667FE841158C02AAC07 /* English */, ); name = InfoPlist.strings; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 4FADC24308B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = LAME_Prefix.pch; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@executable_path/../Frameworks/"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; PRODUCT_NAME = LAME; WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Debug; }; 4FADC24408B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ( ppc, i386, ); DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = LAME_Prefix.pch; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "@executable_path/../Frameworks/"; LIBRARY_STYLE = DYNAMIC; MACH_O_TYPE = mh_dylib; PRODUCT_NAME = LAME; WRAPPER_EXTENSION = framework; ZERO_LINK = NO; }; name = Release; }; 4FADC24708B4156D00ABE55E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Debug; }; 4FADC24808B4156D00ABE55E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; PREBINDING = NO; SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "LAME" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24308B4156D00ABE55E /* Debug */, 4FADC24408B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "LAME" */ = { isa = XCConfigurationList; buildConfigurations = ( 4FADC24708B4156D00ABE55E /* Debug */, 4FADC24808B4156D00ABE55E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } lame-3.100/macosx/LAME.xcodeproj/Makefile.in000644 001751 001751 00000031243 13170220146 022133 0ustar00netchildnetchild000000 000000 # Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = macosx/LAME.xcodeproj ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ project.pbxproj all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign macosx/LAME.xcodeproj/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign macosx/LAME.xcodeproj/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lame-3.100/macosx/LAME.xcodeproj/Makefile.am000644 001751 001751 00000000213 11015750712 022116 0ustar00netchildnetchild000000 000000 ## $Id: Makefile.am,v 1.1 2008/05/24 08:28:58 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ project.pbxproj lame-3.100/frontend/timestatus.h000644 001751 001751 00000003100 11561266675 020266 0ustar00netchildnetchild000000 000000 /* * time status related function include file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_TIMESTATUS_H #define LAME_TIMESTATUS_H #if defined(__cplusplus) extern "C" { #endif void encoder_progress_begin( lame_global_flags const* gfp , char const* inpath , char const* outpath ); void encoder_progress( lame_global_flags const* gfp ); void encoder_progress_end(lame_global_flags const* gfp); struct DecoderProgress; typedef struct DecoderProgress* DecoderProgress; DecoderProgress decoder_progress_init(unsigned long n, int framesize); void decoder_progress(DecoderProgress dp, const mp3data_struct *, int iread); void decoder_progress_finish(DecoderProgress dp); #if defined(__cplusplus) } #endif #endif /* LAME_TIMESTATUS_H */ lame-3.100/frontend/brhist.c000644 001751 001751 00000026366 12155561273 017365 0ustar00netchildnetchild000000 000000 /* * Bitrate histogram source file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: brhist.c,v 1.58 2013/06/11 08:41:31 rbrito Exp $ */ #ifdef HAVE_CONFIG_H #include #endif /* basic #define's */ #ifndef BRHIST_WIDTH # define BRHIST_WIDTH 14 #endif #ifndef BRHIST_RES # define BRHIST_RES 14 #endif /* #includes */ #ifdef STDC_HEADERS # include # include # include #endif #include "brhist.h" #include "console.h" #ifdef WITH_DMALLOC #include #endif /* Structure holding all data related to the Console I/O * may be this should be a more global frontend structure. So it * makes sense to print all files instead with * printf ( "blah\n") with printf ( "blah%s\n", Console_IO.str_clreoln ); */ extern Console_IO_t Console_IO; static struct brhist_struct { int vbr_bitrate_min_index; int vbr_bitrate_max_index; int kbps[BRHIST_WIDTH]; int hist_printed_lines; char bar_asterisk[512 + 1]; /* buffer filled up with a lot of '*' to print a bar */ char bar_percent[512 + 1]; /* buffer filled up with a lot of '%' to print a bar */ char bar_coded[512 + 1]; /* buffer filled up with a lot of ' ' to print a bar */ char bar_space[512 + 1]; /* buffer filled up with a lot of ' ' to print a bar */ } brhist; static int calculate_index(const int *const array, const int len, const int value) { int i; for (i = 0; i < len; i++) if (array[i] == value) return i; return -1; } int brhist_init(const lame_global_flags * gf, const int bitrate_kbps_min, const int bitrate_kbps_max) { brhist.hist_printed_lines = 0; /* initialize histogramming data structure */ lame_bitrate_kbps(gf, brhist.kbps); brhist.vbr_bitrate_min_index = calculate_index(brhist.kbps, BRHIST_WIDTH, bitrate_kbps_min); brhist.vbr_bitrate_max_index = calculate_index(brhist.kbps, BRHIST_WIDTH, bitrate_kbps_max); if (brhist.vbr_bitrate_min_index >= BRHIST_WIDTH || brhist.vbr_bitrate_max_index >= BRHIST_WIDTH) { error_printf("lame internal error: VBR min %d kbps or VBR max %d kbps not allowed.\n", bitrate_kbps_min, bitrate_kbps_max); return -1; } memset(brhist.bar_asterisk, '*', sizeof(brhist.bar_asterisk) - 1); memset(brhist.bar_percent, '%', sizeof(brhist.bar_percent) - 1); memset(brhist.bar_space, '-', sizeof(brhist.bar_space) - 1); memset(brhist.bar_coded, '-', sizeof(brhist.bar_space) - 1); return 0; } static int digits(unsigned number) { int ret = 1; if (number >= 100000000) { ret += 8; number /= 100000000; } if (number >= 10000) { ret += 4; number /= 10000; } if (number >= 100) { ret += 2; number /= 100; } if (number >= 10) { ret += 1; } return ret; } static void brhist_disp_line(int i, int br_hist_TOT, int br_hist_LR, int full, int frames) { char brppt[14]; /* [%] and max. 10 characters for kbps */ int barlen_TOT; int barlen_LR; int res = digits(frames) + 3 + 4 + 1; if (full != 0) { /* some problems when br_hist_TOT \approx br_hist_LR: You can't see that there are still MS frames */ barlen_TOT = (br_hist_TOT * (Console_IO.disp_width - res) + full - 1) / full; /* round up */ barlen_LR = (br_hist_LR * (Console_IO.disp_width - res) + full - 1) / full; /* round up */ } else { barlen_TOT = barlen_LR = 0; } sprintf(brppt, " [%*i]", digits(frames), br_hist_TOT); if (Console_IO.str_clreoln[0]) /* ClearEndOfLine available */ console_printf("\n%3d%s %.*s%.*s%s", brhist.kbps[i], brppt, barlen_LR, brhist.bar_percent, barlen_TOT - barlen_LR, brhist.bar_asterisk, Console_IO.str_clreoln); else console_printf("\n%3d%s %.*s%.*s%*s", brhist.kbps[i], brppt, barlen_LR, brhist.bar_percent, barlen_TOT - barlen_LR, brhist.bar_asterisk, Console_IO.disp_width - res - barlen_TOT, ""); brhist.hist_printed_lines++; } static void progress_line(const lame_global_flags * gf, int full, int frames) { char rst[20] = "\0"; int barlen_TOT = 0, barlen_COD = 0, barlen_RST = 0; int res = 1; float time_in_sec = 0; unsigned int hour, min, sec; int fsize = lame_get_framesize(gf); int srate = lame_get_out_samplerate(gf); if (full < frames) { full = frames; } if (srate > 0) { time_in_sec = (float)(full - frames); time_in_sec *= fsize; time_in_sec /= srate; } hour = (unsigned int)(time_in_sec / 3600); time_in_sec -= hour * 3600; min = (unsigned int)(time_in_sec / 60); time_in_sec -= min * 60; sec = (unsigned int)time_in_sec; if (full != 0) { if (hour > 0) { sprintf(rst, "%*u:%02u:%02u", digits(hour), hour, min, sec); res += digits(hour) + 1 + 5; } else { sprintf(rst, "%02u:%02u", min, sec); res += 5; } /* some problems when br_hist_TOT \approx br_hist_LR: You can't see that there are still MS frames */ barlen_TOT = (full * (Console_IO.disp_width - res) + full - 1) / full; /* round up */ barlen_COD = (frames * (Console_IO.disp_width - res) + full - 1) / full; /* round up */ barlen_RST = barlen_TOT - barlen_COD; if (barlen_RST == 0) { sprintf(rst, "%.*s", res - 1, brhist.bar_coded); } } else { barlen_TOT = barlen_COD = barlen_RST = 0; } if (Console_IO.str_clreoln[0]) { /* ClearEndOfLine available */ console_printf("\n%.*s%s%.*s%s", barlen_COD, brhist.bar_coded, rst, barlen_RST, brhist.bar_space, Console_IO.str_clreoln); } else { console_printf("\n%.*s%s%.*s%*s", barlen_COD, brhist.bar_coded, rst, barlen_RST, brhist.bar_space, Console_IO.disp_width - res - barlen_TOT, ""); } brhist.hist_printed_lines++; } static int stats_value(double x) { if (x > 0.0) { console_printf(" %5.1f", x); return 6; } return 0; } static int stats_head(double x, const char *txt) { if (x > 0.0) { console_printf(txt); return 6; } return 0; } static void stats_line(double *stat) { int n = 1; console_printf("\n kbps "); n += 12; n += stats_head(stat[1], " mono"); n += stats_head(stat[2], " IS "); n += stats_head(stat[3], " LR "); n += stats_head(stat[4], " MS "); console_printf(" %% "); n += 6; n += stats_head(stat[5], " long "); n += stats_head(stat[6], "switch"); n += stats_head(stat[7], " short"); n += stats_head(stat[8], " mixed"); n += console_printf(" %%"); if (Console_IO.str_clreoln[0]) { /* ClearEndOfLine available */ console_printf("%s", Console_IO.str_clreoln); } else { console_printf("%*s", Console_IO.disp_width - n, ""); } brhist.hist_printed_lines++; n = 1; console_printf("\n %5.1f ", stat[0]); n += 12; n += stats_value(stat[1]); n += stats_value(stat[2]); n += stats_value(stat[3]); n += stats_value(stat[4]); console_printf(" "); n += 6; n += stats_value(stat[5]); n += stats_value(stat[6]); n += stats_value(stat[7]); n += stats_value(stat[8]); if (Console_IO.str_clreoln[0]) { /* ClearEndOfLine available */ console_printf("%s", Console_IO.str_clreoln); } else { console_printf("%*s", Console_IO.disp_width - n, ""); } brhist.hist_printed_lines++; } /* Yes, not very good */ #define LR 0 #define MS 2 void brhist_disp(const lame_global_flags * gf) { int i, lines_used = 0; int br_hist[BRHIST_WIDTH]; /* how often a frame size was used */ int br_sm_hist[BRHIST_WIDTH][4]; /* how often a special frame size/stereo mode commbination was used */ int st_mode[4]; int bl_type[6]; int frames; /* total number of encoded frames */ int most_often; /* usage count of the most often used frame size, but not smaller than Console_IO.disp_width-BRHIST_RES (makes this sense?) and 1 */ double sum = 0.; double stat[9] = { 0 }; int st_frames = 0; brhist.hist_printed_lines = 0; /* printed number of lines for the brhist functionality, used to skip back the right number of lines */ lame_bitrate_stereo_mode_hist(gf, br_sm_hist); lame_bitrate_hist(gf, br_hist); lame_stereo_mode_hist(gf, st_mode); lame_block_type_hist(gf, bl_type); frames = most_often = 0; for (i = 0; i < BRHIST_WIDTH; i++) { frames += br_hist[i]; sum += br_hist[i] * brhist.kbps[i]; if (most_often < br_hist[i]) most_often = br_hist[i]; if (br_hist[i]) ++lines_used; } for (i = 0; i < BRHIST_WIDTH; i++) { int show = br_hist[i]; show = show && (lines_used > 1); if (show || (i >= brhist.vbr_bitrate_min_index && i <= brhist.vbr_bitrate_max_index)) brhist_disp_line(i, br_hist[i], br_sm_hist[i][LR], most_often, frames); } for (i = 0; i < 4; i++) { st_frames += st_mode[i]; } if (frames > 0) { stat[0] = sum / frames; stat[1] = 100. * (frames - st_frames) / frames; } if (st_frames > 0) { stat[2] = 0.0; stat[3] = 100. * st_mode[LR] / st_frames; stat[4] = 100. * st_mode[MS] / st_frames; } if (bl_type[5] > 0) { stat[5] = 100. * bl_type[0] / bl_type[5]; stat[6] = 100. * (bl_type[1] + bl_type[3]) / bl_type[5]; stat[7] = 100. * bl_type[2] / bl_type[5]; stat[8] = 100. * bl_type[4] / bl_type[5]; } progress_line(gf, lame_get_totalframes(gf), frames); stats_line(stat); } void brhist_jump_back(void) { console_up(brhist.hist_printed_lines); brhist.hist_printed_lines = 0; } /* * 1) * * Taken from Termcap_Manual.html: * * With the Unix version of termcap, you must allocate space for the description yourself and pass * the address of the space as the argument buffer. There is no way you can tell how much space is * needed, so the convention is to allocate a buffer 2048 characters long and assume that is * enough. (Formerly the convention was to allocate 1024 characters and assume that was enough. * But one day, for one kind of terminal, that was not enough.) */ lame-3.100/frontend/mp3x.c000644 001751 001751 00000002742 11357334406 016750 0ustar00netchildnetchild000000 000000 /* $Id: mp3x.c,v 1.28 2010/04/08 11:07:50 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include "lame.h" #include "machine.h" #include "encoder.h" #include "lame-analysis.h" #include #include "parse.h" #include "get_audio.h" #include "gtkanal.h" #include "lametime.h" #include "main.h" #include "console.h" /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ int lame_main(lame_t gf, int argc, char **argv) { unsigned char mp3buffer[LAME_MAXMP3BUFFER]; char outPath[PATH_MAX + 1]; char inPath[PATH_MAX + 1]; int ret; lame_set_errorf(gf, &frontend_errorf); lame_set_debugf(gf, &frontend_debugf); lame_set_msgf(gf, &frontend_msgf); if (argc <= 1) { usage(stderr, argv[0]); /* no command-line args */ return -1; } ret = parse_args(gf, argc, argv, inPath, outPath, NULL, NULL); if (ret < 0) { return ret == -2 ? 0 : 1; } (void) lame_set_analysis(gf, 1); if (init_infile(gf, inPath) < 0) { error_printf("Can't init infile '%s'\n", inPath); return 1; } lame_init_params(gf); lame_print_config(gf); gtk_init(&argc, &argv); gtkcontrol(gf, inPath); lame_encode_flush(gf, mp3buffer, sizeof(mp3buffer)); close_infile(); return 0; } lame-3.100/frontend/lametime.h000644 001751 001751 00000002175 11561266675 017674 0ustar00netchildnetchild000000 000000 /* * Lame time routines include file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_LAMETIME_H #define LAME_LAMETIME_H #include #include "lame.h" #if defined(__cplusplus) extern "C" { #endif extern double GetCPUTime(void); extern double GetRealTime(void); extern int lame_set_stream_binary_mode(FILE * const fp); #if defined(__cplusplus) } #endif #endif /* LAME_LAMETIME_H */ lame-3.100/frontend/main.h000644 001751 001751 00000006061 12254032210 016771 0ustar00netchildnetchild000000 000000 /* * Command line frontend program * * Copyright (c) 1999 Mark Taylor * 2000 Takehiro TOMIANGA * 2010-2011 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MAIN_H_INCLUDED #define MAIN_H_INCLUDED #ifdef HAVE_LIMITS_H # include #endif #include "get_audio.h" #if defined(__cplusplus) extern "C" { #endif #ifndef PATH_MAX #define PATH_MAX 1024 #endif /* GLOBAL VARIABLES used by parse.c and main.c. instantiated in parce.c. ugly, ugly */ typedef struct ReaderConfig { sound_file_format input_format; int swapbytes; /* force byte swapping default=0 */ int swap_channel; /* 0: no-op, 1: swaps input channels */ int input_samplerate; int ignorewavlength; } ReaderConfig; typedef struct WriterConfig { int flush_write; } WriterConfig; typedef struct UiConfig { int silent; /* Verbosity */ int brhist; int print_clipping_info; /* print info whether waveform clips */ float update_interval; /* to use Frank's time status display */ } UiConfig; typedef struct DecoderConfig { int mp3_delay; /* to adjust the number of samples truncated during decode */ int mp3_delay_set; /* user specified the value of the mp3 encoder delay to assume for decoding */ int disable_wav_header; mp3data_struct mp3input_data; } DecoderConfig; typedef enum ByteOrder { ByteOrderLittleEndian, ByteOrderBigEndian } ByteOrder; typedef struct RawPCMConfig { int in_bitwidth; int in_signed; ByteOrder in_endian; } RawPCMConfig; extern ReaderConfig global_reader; extern WriterConfig global_writer; extern UiConfig global_ui_config; extern DecoderConfig global_decoder; extern RawPCMConfig global_raw_pcm; extern FILE* lame_fopen(char const* file, char const* mode); extern char* utf8ToConsole8Bit(const char* str); extern char* utf8ToLocal8Bit(const char* str); extern unsigned short* utf8ToUtf16(char const* str); extern char* utf8ToLatin1(char const* str); #ifdef _WIN32 extern wchar_t* utf8ToUnicode(char const* str); #endif extern void dosToLongFileName(char* filename); extern void setProcessPriority(int priority); extern int lame_main(lame_t gf, int argc, char** argv); extern char* lame_getenv(char const* var); #if defined(__cplusplus) } #endif #endif lame-3.100/frontend/get_audio.c000644 001751 001751 00000207736 13154046617 020034 0ustar00netchildnetchild000000 000000 /* * Get Audio routines source file * * Copyright (c) 1999 Albert L Faber * 2008-2017 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: get_audio.c,v 1.167 2017/09/06 15:07:29 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_LIMITS_H # include #endif #include #ifdef STDC_HEADERS # include # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_INTTYPES_H # include #else # ifdef HAVE_STDINT_H # include # endif #endif #define MAX_U_32_NUM 0xFFFFFFFF #include #if defined(__riscos__) # include # include #elif defined(_WIN32) # include # include #else # include #endif #ifdef __sun__ /* woraround for SunOS 4.x, it has SEEK_* defined here */ #include #endif #include "lame.h" #include "main.h" #include "get_audio.h" #include "lametime.h" #include "console.h" #ifdef WITH_DMALLOC #include #endif #ifndef STR # define __STR(x) #x # define STR(x) __STR(x) #define __LOC__ __FILE__ "("STR(__LINE__)") : " #endif #define FLOAT_TO_UNSIGNED(f) ((unsigned long)(((long)((f) - 2147483648.0)) + 2147483647L + 1)) #define UNSIGNED_TO_FLOAT(u) (((double)((long)((u) - 2147483647L - 1))) + 2147483648.0) static unsigned int uint32_high_low(unsigned char *bytes) { uint32_t const hh = bytes[0]; uint32_t const hl = bytes[1]; uint32_t const lh = bytes[2]; uint32_t const ll = bytes[3]; return (hh << 24) | (hl << 16) | (lh << 8) | ll; } static double read_ieee_extended_high_low(FILE * fp) { unsigned char bytes[10]; memset(bytes, 0, 10); fread(bytes, 1, 10, fp); { int32_t const s = (bytes[0] & 0x80); int32_t const e_h = (bytes[0] & 0x7F); int32_t const e_l = bytes[1]; int32_t e = (e_h << 8) | e_l; uint32_t const hm = uint32_high_low(bytes + 2); uint32_t const lm = uint32_high_low(bytes + 6); double result = 0; if (e != 0 || hm != 0 || lm != 0) { if (e == 0x7fff) { result = HUGE_VAL; } else { double mantissa_h = UNSIGNED_TO_FLOAT(hm); double mantissa_l = UNSIGNED_TO_FLOAT(lm); e -= 0x3fff; e -= 31; result = ldexp(mantissa_h, e); e -= 32; result += ldexp(mantissa_l, e); } } return s ? -result : result; } } static int read_16_bits_low_high(FILE * fp) { unsigned char bytes[2] = { 0, 0 }; fread(bytes, 1, 2, fp); { int32_t const low = bytes[0]; int32_t const high = (signed char) (bytes[1]); return (high << 8) | low; } } static int read_32_bits_low_high(FILE * fp) { unsigned char bytes[4] = { 0, 0, 0, 0 }; fread(bytes, 1, 4, fp); { int32_t const low = bytes[0]; int32_t const medl = bytes[1]; int32_t const medh = bytes[2]; int32_t const high = (signed char) (bytes[3]); return (high << 24) | (medh << 16) | (medl << 8) | low; } } static int read_16_bits_high_low(FILE * fp) { unsigned char bytes[2] = { 0, 0 }; fread(bytes, 1, 2, fp); { int32_t const low = bytes[1]; int32_t const high = (signed char) (bytes[0]); return (high << 8) | low; } } static int read_32_bits_high_low(FILE * fp) { unsigned char bytes[4] = { 0, 0, 0, 0 }; fread(bytes, 1, 4, fp); { int32_t const low = bytes[3]; int32_t const medl = bytes[2]; int32_t const medh = bytes[1]; int32_t const high = (signed char) (bytes[0]); return (high << 24) | (medh << 16) | (medl << 8) | low; } } static void write_16_bits_low_high(FILE * fp, int val) { unsigned char bytes[2]; bytes[0] = (val & 0xff); bytes[1] = ((val >> 8) & 0xff); fwrite(bytes, 1, 2, fp); } static void write_32_bits_low_high(FILE * fp, int val) { unsigned char bytes[4]; bytes[0] = (val & 0xff); bytes[1] = ((val >> 8) & 0xff); bytes[2] = ((val >> 16) & 0xff); bytes[3] = ((val >> 24) & 0xff); fwrite(bytes, 1, 4, fp); } #ifdef LIBSNDFILE #include #else typedef void SNDFILE; #endif /* ifdef LIBSNDFILE */ typedef struct blockAlign_struct { unsigned long offset; unsigned long blockSize; } blockAlign; typedef struct IFF_AIFF_struct { short numChannels; unsigned long numSampleFrames; short sampleSize; double sampleRate; unsigned long sampleType; blockAlign blkAlgn; } IFF_AIFF; struct PcmBuffer { void *ch[2]; /* buffer for each channel */ int w; /* sample width */ int n; /* number samples allocated */ int u; /* number samples used */ int skip_start; /* number samples to ignore at the beginning */ int skip_end; /* number samples to ignore at the end */ }; typedef struct PcmBuffer PcmBuffer; static void initPcmBuffer(PcmBuffer * b, int w) { b->ch[0] = 0; b->ch[1] = 0; b->w = w; b->n = 0; b->u = 0; b->skip_start = 0; b->skip_end = 0; } static void freePcmBuffer(PcmBuffer * b) { if (b != 0) { free(b->ch[0]); free(b->ch[1]); b->ch[0] = 0; b->ch[1] = 0; b->n = 0; b->u = 0; } } static int addPcmBuffer(PcmBuffer * b, void *a0, void *a1, int read) { int a_n; if (b == 0) { return 0; } if (read < 0) { return b->u - b->skip_end; } if (b->skip_start >= read) { b->skip_start -= read; return b->u - b->skip_end; } a_n = read - b->skip_start; if (b != 0 && a_n > 0) { int const a_skip = b->w * b->skip_start; int const a_want = b->w * a_n; int const b_used = b->w * b->u; int const b_have = b->w * b->n; int const b_need = b->w * (b->u + a_n); if (b_have < b_need) { b->n = b->u + a_n; b->ch[0] = realloc(b->ch[0], b_need); b->ch[1] = realloc(b->ch[1], b_need); } b->u += a_n; if (b->ch[0] != 0 && a0 != 0) { char *src = a0; char *dst = b->ch[0]; memcpy(dst + b_used, src + a_skip, a_want); } if (b->ch[1] != 0 && a1 != 0) { char *src = a1; char *dst = b->ch[1]; memcpy(dst + b_used, src + a_skip, a_want); } } b->skip_start = 0; return b->u - b->skip_end; } static int takePcmBuffer(PcmBuffer * b, void *a0, void *a1, int a_n, int mm) { if (a_n > mm) { a_n = mm; } if (b != 0 && a_n > 0) { int const a_take = b->w * a_n; if (a0 != 0 && b->ch[0] != 0) { memcpy(a0, b->ch[0], a_take); } if (a1 != 0 && b->ch[1] != 0) { memcpy(a1, b->ch[1], a_take); } b->u -= a_n; if (b->u < 0) { b->u = 0; return a_n; } if (b->ch[0] != 0) { memmove(b->ch[0], (char *) b->ch[0] + a_take, b->w * b->u); } if (b->ch[1] != 0) { memmove(b->ch[1], (char *) b->ch[1] + a_take, b->w * b->u); } } return a_n; } /* global data for get_audio.c. */ typedef struct get_audio_global_data_struct { int count_samples_carefully; int pcmbitwidth; int pcmswapbytes; int pcm_is_unsigned_8bit; int pcm_is_ieee_float; unsigned int num_samples_read; FILE *music_in; SNDFILE *snd_file; hip_t hip; PcmBuffer pcm32; PcmBuffer pcm16; size_t in_id3v2_size; unsigned char* in_id3v2_tag; } get_audio_global_data; static get_audio_global_data global; #ifdef AMIGA_MPEGA int lame_decode_initfile(const char *fullname, mp3data_struct * const mp3data); #else int lame_decode_initfile(FILE * fd, mp3data_struct * mp3data, int *enc_delay, int *enc_padding); #endif /* read mp3 file until mpglib returns one frame of PCM data */ static int lame_decode_fromfile(FILE * fd, short int pcm_l[], short int pcm_r[], mp3data_struct * mp3data); static int read_samples_pcm(FILE * musicin, int sample_buffer[2304], int samples_to_read); static int read_samples_mp3(lame_t gfp, FILE * musicin, short int mpg123pcm[2][1152]); #ifdef LIBSNDFILE static SNDFILE *open_snd_file(lame_t gfp, char const *inPath); #endif static FILE *open_mpeg_file(lame_t gfp, char const *inPath, int *enc_delay, int *enc_padding); static FILE *open_wave_file(lame_t gfp, char const *inPath, int *enc_delay, int *enc_padding); static int close_input_file(FILE * musicin); static size_t min_size_t(size_t a, size_t b) { if (a < b) { return a; } return b; } enum ByteOrder machine_byte_order(void); enum ByteOrder machine_byte_order(void) { long one = 1; return !(*((char *) (&one))) ? ByteOrderBigEndian : ByteOrderLittleEndian; } /* Replacement for forward fseek(,,SEEK_CUR), because fseek() fails on pipes */ static int fskip(FILE * fp, long offset, int whence) { #ifndef PIPE_BUF char buffer[4096]; #else char buffer[PIPE_BUF]; #endif /* S_ISFIFO macro is defined on newer Linuxes */ #ifndef S_ISFIFO # ifdef _S_IFIFO /* _S_IFIFO is defined on Win32 and Cygwin */ # define S_ISFIFO(m) (((m)&_S_IFIFO) == _S_IFIFO) # endif #endif #ifdef S_ISFIFO /* fseek is known to fail on pipes with several C-Library implementations workaround: 1) test for pipe 2) for pipes, only relatvie seeking is possible 3) and only in forward direction! else fallback to old code */ { int const fd = fileno(fp); struct stat file_stat; if (fstat(fd, &file_stat) == 0) { if (S_ISFIFO(file_stat.st_mode)) { if (whence != SEEK_CUR || offset < 0) { return -1; } while (offset > 0) { size_t const bytes_to_skip = min_size_t(sizeof(buffer), offset); size_t const read = fread(buffer, 1, bytes_to_skip, fp); if (read < 1) { return -1; } assert( read <= LONG_MAX ); offset -= (long) read; } return 0; } } } #endif if (0 == fseek(fp, offset, whence)) { return 0; } if (whence != SEEK_CUR || offset < 0) { if (global_ui_config.silent < 10) { error_printf ("fskip problem: Mostly the return status of functions is not evaluate so it is more secure to polute .\n"); } return -1; } while (offset > 0) { size_t const bytes_to_skip = min_size_t(sizeof(buffer), offset); size_t const read = fread(buffer, 1, bytes_to_skip, fp); if (read < 1) { return -1; } assert( read <= LONG_MAX ); offset -= (long) read; } return 0; } static off_t lame_get_file_size(FILE * fp) { struct stat sb; int fd = fileno(fp); if (0 == fstat(fd, &sb)) return sb.st_size; return (off_t) - 1; } FILE * init_outfile(char const *outPath, int decode) { FILE *outf; /* open the output file */ if (0 == strcmp(outPath, "-")) { outf = stdout; lame_set_stream_binary_mode(outf); } else { outf = lame_fopen(outPath, "w+b"); #ifdef __riscos__ /* Assign correct file type */ if (outf != NULL) { char *p, *out_path = strdup(outPath); for (p = out_path; *p; p++) { /* ugly, ugly to modify a string */ switch (*p) { case '.': *p = '/'; break; case '/': *p = '.'; break; } } SetFiletype(out_path, decode ? 0xFB1 /*WAV*/ : 0x1AD /*AMPEG*/); free(out_path); } #else (void) decode; #endif } return outf; } static void setSkipStartAndEnd(lame_t gfp, int enc_delay, int enc_padding) { int skip_start = 0, skip_end = 0; if (global_decoder.mp3_delay_set) skip_start = global_decoder.mp3_delay; switch (global_reader.input_format) { case sf_mp123: break; case sf_mp3: if (skip_start == 0) { if (enc_delay > -1 || enc_padding > -1) { if (enc_delay > -1) skip_start = enc_delay + 528 + 1; if (enc_padding > -1) skip_end = enc_padding - (528 + 1); } else skip_start = lame_get_encoder_delay(gfp) + 528 + 1; } else { /* user specified a value of skip. just add for decoder */ skip_start += 528 + 1; /* mp3 decoder has a 528 sample delay, plus user supplied "skip" */ } break; case sf_mp2: skip_start += 240 + 1; break; case sf_mp1: skip_start += 240 + 1; break; case sf_raw: skip_start += 0; /* other formats have no delay *//* is += 0 not better ??? */ break; case sf_wave: skip_start += 0; /* other formats have no delay *//* is += 0 not better ??? */ break; case sf_aiff: skip_start += 0; /* other formats have no delay *//* is += 0 not better ??? */ break; default: skip_start += 0; /* other formats have no delay *//* is += 0 not better ??? */ break; } skip_start = skip_start < 0 ? 0 : skip_start; skip_end = skip_end < 0 ? 0 : skip_end; global. pcm16.skip_start = global.pcm32.skip_start = skip_start; global. pcm16.skip_end = global.pcm32.skip_end = skip_end; } int init_infile(lame_t gfp, char const *inPath) { int enc_delay = 0, enc_padding = 0; /* open the input file */ global. count_samples_carefully = 0; global. num_samples_read = 0; global. pcmbitwidth = global_raw_pcm.in_bitwidth; global. pcmswapbytes = global_reader.swapbytes; global. pcm_is_unsigned_8bit = global_raw_pcm.in_signed == 1 ? 0 : 1; global. pcm_is_ieee_float = 0; global. hip = 0; global. music_in = 0; global. snd_file = 0; global. in_id3v2_size = 0; global. in_id3v2_tag = 0; if (is_mpeg_file_format(global_reader.input_format)) { global. music_in = open_mpeg_file(gfp, inPath, &enc_delay, &enc_padding); } else { #ifdef LIBSNDFILE if (strcmp(inPath, "-") != 0) { /* not for stdin */ global. snd_file = open_snd_file(gfp, inPath); } #endif if (global.snd_file == 0) { global. music_in = open_wave_file(gfp, inPath, &enc_delay, &enc_padding); } } initPcmBuffer(&global.pcm32, sizeof(int)); initPcmBuffer(&global.pcm16, sizeof(short)); setSkipStartAndEnd(gfp, enc_delay, enc_padding); { unsigned long n = lame_get_num_samples(gfp); if (n != MAX_U_32_NUM) { unsigned long const discard = global.pcm32.skip_start + global.pcm32.skip_end; lame_set_num_samples(gfp, n > discard ? n - discard : 0); } } return (global.snd_file != NULL || global.music_in != NULL) ? 1 : -1; } int samples_to_skip_at_start(void) { return global.pcm32.skip_start; } int samples_to_skip_at_end(void) { return global.pcm32.skip_end; } void close_infile(void) { #if defined(HAVE_MPGLIB) if (global.hip != 0) { hip_decode_exit(global.hip); /* release mp3decoder memory */ global. hip = 0; } #endif close_input_file(global.music_in); #ifdef LIBSNDFILE if (global.snd_file) { if (sf_close(global.snd_file) != 0) { if (global_ui_config.silent < 10) { error_printf("Could not close sound file \n"); } } global. snd_file = 0; } #endif freePcmBuffer(&global.pcm32); freePcmBuffer(&global.pcm16); global. music_in = 0; free(global.in_id3v2_tag); global.in_id3v2_tag = 0; global.in_id3v2_size = 0; } static int get_audio_common(lame_t gfp, int buffer[2][1152], short buffer16[2][1152]); /************************************************************************ * * get_audio() * * PURPOSE: reads a frame of audio data from a file to the buffer, * aligns the data for future processing, and separates the * left and right channels * ************************************************************************/ int get_audio(lame_t gfp, int buffer[2][1152]) { int used = 0, read = 0; do { read = get_audio_common(gfp, buffer, NULL); used = addPcmBuffer(&global.pcm32, buffer[0], buffer[1], read); } while (used <= 0 && read > 0); if (read < 0) { return read; } if (global_reader.swap_channel == 0) return takePcmBuffer(&global.pcm32, buffer[0], buffer[1], used, 1152); else return takePcmBuffer(&global.pcm32, buffer[1], buffer[0], used, 1152); } /* get_audio16 - behave as the original get_audio function, with a limited 16 bit per sample output */ int get_audio16(lame_t gfp, short buffer[2][1152]) { int used = 0, read = 0; do { read = get_audio_common(gfp, NULL, buffer); used = addPcmBuffer(&global.pcm16, buffer[0], buffer[1], read); } while (used <= 0 && read > 0); if (read < 0) { return read; } if (global_reader.swap_channel == 0) return takePcmBuffer(&global.pcm16, buffer[0], buffer[1], used, 1152); else return takePcmBuffer(&global.pcm16, buffer[1], buffer[0], used, 1152); } /************************************************************************ get_audio_common - central functionality of get_audio* in: gfp buffer output to the int buffer or 16-bit buffer out: buffer int output (if buffer != NULL) buffer16 16-bit output (if buffer == NULL) returns: samples read note: either buffer or buffer16 must be allocated upon call */ static int get_audio_common(lame_t gfp, int buffer[2][1152], short buffer16[2][1152]) { const int num_channels = lame_get_num_channels(gfp); const int framesize = lame_get_framesize(gfp); int insamp[2 * 1152]; short buf_tmp16[2][1152]; int samples_read; int samples_to_read; unsigned int remaining; int i; int *p; /* sanity checks, that's what we expect to be true */ if ((num_channels < 1 || 2 < num_channels) ||(framesize < 1 || 1152 < framesize)) { if (global_ui_config.silent < 10) { error_printf("Error: internal problem!\n"); } return -1; } /* * NOTE: LAME can now handle arbritray size input data packets, * so there is no reason to read the input data in chuncks of * size "framesize". EXCEPT: the LAME graphical frame analyzer * will get out of sync if we read more than framesize worth of data. */ samples_to_read = framesize; /* if this flag has been set, then we are carefull to read * exactly num_samples and no more. This is useful for .wav and .aiff * files which have id3 or other tags at the end. Note that if you * are using LIBSNDFILE, this is not necessary */ if (global.count_samples_carefully) { unsigned int tmp_num_samples; /* get num_samples */ if (is_mpeg_file_format(global_reader.input_format)) { tmp_num_samples = global_decoder.mp3input_data.nsamp; } else { tmp_num_samples = lame_get_num_samples(gfp); } if (global.num_samples_read < tmp_num_samples) { remaining = tmp_num_samples - global.num_samples_read; } else { remaining = 0; } if (remaining < (unsigned int) framesize && 0 != tmp_num_samples) /* in case the input is a FIFO (at least it's reproducible with a FIFO) tmp_num_samples may be 0 and therefore remaining would be 0, but we need to read some samples, so don't change samples_to_read to the wrong value in this case */ samples_to_read = remaining; } if (is_mpeg_file_format(global_reader.input_format)) { if (buffer != NULL) samples_read = read_samples_mp3(gfp, global.music_in, buf_tmp16); else samples_read = read_samples_mp3(gfp, global.music_in, buffer16); if (samples_read < 0) { return samples_read; } } else { if (global.snd_file) { #ifdef LIBSNDFILE samples_read = sf_read_int(global.snd_file, insamp, num_channels * samples_to_read); #else samples_read = 0; #endif } else { samples_read = read_samples_pcm(global.music_in, insamp, num_channels * samples_to_read); } if (samples_read < 0) { return samples_read; } p = insamp + samples_read; samples_read /= num_channels; if (buffer != NULL) { /* output to int buffer */ if (num_channels == 2) { for (i = samples_read; --i >= 0;) { buffer[1][i] = *--p; buffer[0][i] = *--p; } } else if (num_channels == 1) { memset(buffer[1], 0, samples_read * sizeof(int)); for (i = samples_read; --i >= 0;) { buffer[0][i] = *--p; } } else assert(0); } else { /* convert from int; output to 16-bit buffer */ if (num_channels == 2) { for (i = samples_read; --i >= 0;) { buffer16[1][i] = *--p >> (8 * sizeof(int) - 16); buffer16[0][i] = *--p >> (8 * sizeof(int) - 16); } } else if (num_channels == 1) { memset(buffer16[1], 0, samples_read * sizeof(short)); for (i = samples_read; --i >= 0;) { buffer16[0][i] = *--p >> (8 * sizeof(int) - 16); } } else assert(0); } } /* LAME mp3 output 16bit - convert to int, if necessary */ if (is_mpeg_file_format(global_reader.input_format)) { if (buffer != NULL) { for (i = samples_read; --i >= 0;) buffer[0][i] = buf_tmp16[0][i] << (8 * sizeof(int) - 16); if (num_channels == 2) { for (i = samples_read; --i >= 0;) buffer[1][i] = buf_tmp16[1][i] << (8 * sizeof(int) - 16); } else if (num_channels == 1) { memset(buffer[1], 0, samples_read * sizeof(int)); } else assert(0); } } /* if ... then it is considered infinitely long. Don't count the samples */ if (global.count_samples_carefully) global. num_samples_read += samples_read; return samples_read; } static int read_samples_mp3(lame_t gfp, FILE * musicin, short int mpg123pcm[2][1152]) { int out; #if defined(AMIGA_MPEGA) || defined(HAVE_MPGLIB) int samplerate; static const char type_name[] = "MP3 file"; out = lame_decode_fromfile(musicin, mpg123pcm[0], mpg123pcm[1], &global_decoder.mp3input_data); /* * out < 0: error, probably EOF * out = 0: not possible with lame_decode_fromfile() ??? * out > 0: number of output samples */ if (out < 0) { memset(mpg123pcm, 0, sizeof(**mpg123pcm) * 2 * 1152); return 0; } if (lame_get_num_channels(gfp) != global_decoder.mp3input_data.stereo) { if (global_ui_config.silent < 10) { error_printf("Error: number of channels has changed in %s - not supported\n", type_name); } out = -1; } samplerate = global_reader.input_samplerate; if (samplerate == 0) { samplerate = global_decoder.mp3input_data.samplerate; } if (lame_get_in_samplerate(gfp) != samplerate) { if (global_ui_config.silent < 10) { error_printf("Error: sample frequency has changed in %s - not supported\n", type_name); } out = -1; } #else out = -1; #endif return out; } static int set_input_num_channels(lame_t gfp, int num_channels) { if (gfp) { if (-1 == lame_set_num_channels(gfp, num_channels)) { if (global_ui_config.silent < 10) { error_printf("Unsupported number of channels: %d\n", num_channels); } return 0; } } return 1; } static int set_input_samplerate(lame_t gfp, int input_samplerate) { if (gfp) { int sr = global_reader.input_samplerate; if (sr == 0) sr = input_samplerate; if (-1 == lame_set_in_samplerate(gfp, sr)) { if (global_ui_config.silent < 10) { error_printf("Unsupported sample rate: %d\n", sr); } return 0; } } return 1; } int WriteWaveHeader(FILE * const fp, int pcmbytes, int freq, int channels, int bits) { int bytes = (bits + 7) / 8; /* quick and dirty, but documented */ fwrite("RIFF", 1, 4, fp); /* label */ write_32_bits_low_high(fp, pcmbytes + 44 - 8); /* length in bytes without header */ fwrite("WAVEfmt ", 2, 4, fp); /* 2 labels */ write_32_bits_low_high(fp, 2 + 2 + 4 + 4 + 2 + 2); /* length of PCM format declaration area */ write_16_bits_low_high(fp, 1); /* is PCM? */ write_16_bits_low_high(fp, channels); /* number of channels */ write_32_bits_low_high(fp, freq); /* sample frequency in [Hz] */ write_32_bits_low_high(fp, freq * channels * bytes); /* bytes per second */ write_16_bits_low_high(fp, channels * bytes); /* bytes per sample time */ write_16_bits_low_high(fp, bits); /* bits per sample */ fwrite("data", 1, 4, fp); /* label */ write_32_bits_low_high(fp, pcmbytes); /* length in bytes of raw PCM data */ return ferror(fp) ? -1 : 0; } #if defined(LIBSNDFILE) extern SNDFILE *sf_wchar_open(wchar_t const *wpath, int mode, SF_INFO * sfinfo); static SNDFILE * open_snd_file(lame_t gfp, char const *inPath) { char const *lpszFileName = inPath; SNDFILE *gs_pSndFileIn = NULL; SF_INFO gs_wfInfo; { #if defined( _WIN32 ) && !defined(__MINGW32__) wchar_t *file_name = utf8ToUnicode(lpszFileName); #endif /* Try to open the sound file */ memset(&gs_wfInfo, 0, sizeof(gs_wfInfo)); #if defined( _WIN32 ) && !defined(__MINGW32__) gs_pSndFileIn = sf_wchar_open(file_name, SFM_READ, &gs_wfInfo); #else gs_pSndFileIn = sf_open(lpszFileName, SFM_READ, &gs_wfInfo); #endif if (gs_pSndFileIn == NULL) { if (global_raw_pcm.in_signed == 0 && global_raw_pcm.in_bitwidth != 8) { error_printf("Unsigned input only supported with bitwidth 8\n"); #if defined( _WIN32 ) && !defined(__MINGW32__) free(file_name); #endif return 0; } /* set some defaults incase input is raw PCM */ gs_wfInfo.seekable = (global_reader.input_format != sf_raw); /* if user specified -r, set to not seekable */ gs_wfInfo.samplerate = lame_get_in_samplerate(gfp); gs_wfInfo.channels = lame_get_num_channels(gfp); gs_wfInfo.format = SF_FORMAT_RAW; if ((global_raw_pcm.in_endian == ByteOrderLittleEndian) ^ (global_reader.swapbytes != 0)) { gs_wfInfo.format |= SF_ENDIAN_LITTLE; } else { gs_wfInfo.format |= SF_ENDIAN_BIG; } switch (global_raw_pcm.in_bitwidth) { case 8: gs_wfInfo.format |= global_raw_pcm.in_signed == 0 ? SF_FORMAT_PCM_U8 : SF_FORMAT_PCM_S8; break; case 16: gs_wfInfo.format |= SF_FORMAT_PCM_16; break; case 24: gs_wfInfo.format |= SF_FORMAT_PCM_24; break; case 32: gs_wfInfo.format |= SF_FORMAT_PCM_32; break; default: break; } #if defined( _WIN32 ) && !defined(__MINGW32__) gs_pSndFileIn = sf_wchar_open(file_name, SFM_READ, &gs_wfInfo); #else gs_pSndFileIn = sf_open(lpszFileName, SFM_READ, &gs_wfInfo); #endif } #if defined( _WIN32 ) && !defined(__MINGW32__) free(file_name); #endif /* Check result */ if (gs_pSndFileIn == NULL) { sf_perror(gs_pSndFileIn); if (global_ui_config.silent < 10) { error_printf("Could not open sound file \"%s\".\n", lpszFileName); } return 0; } sf_command(gs_pSndFileIn, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE); if ((gs_wfInfo.format & SF_FORMAT_RAW) == SF_FORMAT_RAW) { global_reader.input_format = sf_raw; } #ifdef _DEBUG_SND_FILE printf("\n\nSF_INFO structure\n"); printf("samplerate :%d\n", gs_wfInfo.samplerate); printf("samples :%d\n", gs_wfInfo.frames); printf("channels :%d\n", gs_wfInfo.channels); printf("format :"); /* new formats from sbellon@sbellon.de 1/2000 */ switch (gs_wfInfo.format & SF_FORMAT_TYPEMASK) { case SF_FORMAT_WAV: printf("Microsoft WAV format (big endian). "); break; case SF_FORMAT_AIFF: printf("Apple/SGI AIFF format (little endian). "); break; case SF_FORMAT_AU: printf("Sun/NeXT AU format (big endian). "); break; /* case SF_FORMAT_AULE: DEBUGF("DEC AU format (little endian). "); break; */ case SF_FORMAT_RAW: printf("RAW PCM data. "); break; case SF_FORMAT_PAF: printf("Ensoniq PARIS file format. "); break; case SF_FORMAT_SVX: printf("Amiga IFF / SVX8 / SV16 format. "); break; case SF_FORMAT_NIST: printf("Sphere NIST format. "); break; default: assert(0); break; } switch (gs_wfInfo.format & SF_FORMAT_SUBMASK) { /* case SF_FORMAT_PCM: DEBUGF("PCM data in 8, 16, 24 or 32 bits."); break; */ case SF_FORMAT_FLOAT: printf("32 bit Intel x86 floats."); break; case SF_FORMAT_ULAW: printf("U-Law encoded."); break; case SF_FORMAT_ALAW: printf("A-Law encoded."); break; case SF_FORMAT_IMA_ADPCM: printf("IMA ADPCM."); break; case SF_FORMAT_MS_ADPCM: printf("Microsoft ADPCM."); break; /* case SF_FORMAT_PCM_BE: DEBUGF("Big endian PCM data."); break; case SF_FORMAT_PCM_LE: DEBUGF("Little endian PCM data."); break; */ case SF_FORMAT_PCM_S8: printf("Signed 8 bit PCM."); break; case SF_FORMAT_PCM_U8: printf("Unsigned 8 bit PCM."); break; case SF_FORMAT_PCM_16: printf("Signed 16 bit PCM."); break; case SF_FORMAT_PCM_24: printf("Signed 24 bit PCM."); break; case SF_FORMAT_PCM_32: printf("Signed 32 bit PCM."); break; /* case SF_FORMAT_SVX_FIB: DEBUGF("SVX Fibonacci Delta encoding."); break; case SF_FORMAT_SVX_EXP: DEBUGF("SVX Exponential Delta encoding."); break; */ default: assert(0); break; } printf("\n"); printf("sections :%d\n", gs_wfInfo.sections); printf("seekable :%d\n", gs_wfInfo.seekable); #endif /* Check result */ if (gs_pSndFileIn == NULL) { sf_perror(gs_pSndFileIn); if (global_ui_config.silent < 10) { error_printf("Could not open sound file \"%s\".\n", lpszFileName); } return 0; } if(gs_wfInfo.frames >= 0 && gs_wfInfo.frames < (sf_count_t)(unsigned)MAX_U_32_NUM) (void) lame_set_num_samples(gfp, gs_wfInfo.frames); else (void) lame_set_num_samples(gfp, MAX_U_32_NUM); if (!set_input_num_channels(gfp, gs_wfInfo.channels)) { sf_close(gs_pSndFileIn); return 0; } if (!set_input_samplerate(gfp, gs_wfInfo.samplerate)) { sf_close(gs_pSndFileIn); return 0; } global. pcmbitwidth = 32; } #if 0 if (lame_get_num_samples(gfp) == MAX_U_32_NUM) { /* try to figure out num_samples */ double const flen = lame_get_file_size(lpszFileName); if (flen >= 0) { /* try file size, assume 2 bytes per sample */ lame_set_num_samples(gfp, flen / (2 * lame_get_num_channels(gfp))); } } #endif return gs_pSndFileIn; } #endif /* defined(LIBSNDFILE) */ /************************************************************************ unpack_read_samples - read and unpack signed low-to-high byte or unsigned single byte input. (used for read_samples function) Output integers are stored in the native byte order (little or big endian). -jd in: samples_to_read bytes_per_sample swap_order - set for high-to-low byte order input stream i/o: pcm_in out: sample_buffer (must be allocated up to samples_to_read upon call) returns: number of samples read */ static int unpack_read_samples(const int samples_to_read, const int bytes_per_sample, const int swap_order, int *sample_buffer, FILE * pcm_in) { int samples_read; int i; int *op; /* output pointer */ unsigned char *ip = (unsigned char *) sample_buffer; /* input pointer */ const int b = sizeof(int) * 8; { size_t samples_read_ = fread(sample_buffer, bytes_per_sample, samples_to_read, pcm_in); assert( samples_read_ <= INT_MAX ); samples_read = (int) samples_read_; } op = sample_buffer + samples_read; #define GA_URS_IFLOOP( ga_urs_bps ) \ if( bytes_per_sample == ga_urs_bps ) \ for( i = samples_read * bytes_per_sample; (i -= bytes_per_sample) >=0;) if (swap_order == 0) { GA_URS_IFLOOP(1) * --op = ip[i] << (b - 8); GA_URS_IFLOOP(2) * --op = ip[i] << (b - 16) | ip[i + 1] << (b - 8); GA_URS_IFLOOP(3) * --op = ip[i] << (b - 24) | ip[i + 1] << (b - 16) | ip[i + 2] << (b - 8); GA_URS_IFLOOP(4) * --op = ip[i] << (b - 32) | ip[i + 1] << (b - 24) | ip[i + 2] << (b - 16) | ip[i + 3] << (b - 8); } else { GA_URS_IFLOOP(1) * --op = (ip[i] ^ 0x80) << (b - 8) | 0x7f << (b - 16); /* convert from unsigned */ GA_URS_IFLOOP(2) * --op = ip[i] << (b - 8) | ip[i + 1] << (b - 16); GA_URS_IFLOOP(3) * --op = ip[i] << (b - 8) | ip[i + 1] << (b - 16) | ip[i + 2] << (b - 24); GA_URS_IFLOOP(4) * --op = ip[i] << (b - 8) | ip[i + 1] << (b - 16) | ip[i + 2] << (b - 24) | ip[i + 3] << (b - 32); } #undef GA_URS_IFLOOP if (global.pcm_is_ieee_float) { ieee754_float32_t const m_max = INT_MAX; ieee754_float32_t const m_min = -(ieee754_float32_t) INT_MIN; ieee754_float32_t *x = (ieee754_float32_t *) sample_buffer; assert(sizeof(ieee754_float32_t) == sizeof(int)); for (i = 0; i < samples_to_read; ++i) { ieee754_float32_t const u = x[i]; int v; if (u >= 1) { v = INT_MAX; } else if (u <= -1) { v = INT_MIN; } else if (u >= 0) { v = (int) (u * m_max + 0.5f); } else { v = (int) (u * m_min - 0.5f); } sample_buffer[i] = v; } } return (samples_read); } /************************************************************************ * * read_samples() * * PURPOSE: reads the PCM samples from a file to the buffer * * SEMANTICS: * Reads #samples_read# number of shorts from #musicin# filepointer * into #sample_buffer[]#. Returns the number of samples read. * ************************************************************************/ static int read_samples_pcm(FILE * musicin, int sample_buffer[2304], int samples_to_read) { int samples_read; int bytes_per_sample = global.pcmbitwidth / 8; int swap_byte_order; /* byte order of input stream */ switch (global.pcmbitwidth) { case 32: case 24: case 16: if (global_raw_pcm.in_signed == 0) { if (global_ui_config.silent < 10) { error_printf("Unsigned input only supported with bitwidth 8\n"); } return -1; } swap_byte_order = (global_raw_pcm.in_endian != ByteOrderLittleEndian) ? 1 : 0; if (global.pcmswapbytes) { swap_byte_order = !swap_byte_order; } break; case 8: swap_byte_order = global.pcm_is_unsigned_8bit; break; default: if (global_ui_config.silent < 10) { error_printf("Only 8, 16, 24 and 32 bit input files supported \n"); } return -1; } if (samples_to_read < 0 || samples_to_read > 2304) { if (global_ui_config.silent < 10) { error_printf("Error: unexpected number of samples to read: %d\n", samples_to_read); } return -1; } samples_read = unpack_read_samples(samples_to_read, bytes_per_sample, swap_byte_order, sample_buffer, musicin); if (ferror(musicin)) { if (global_ui_config.silent < 10) { error_printf("Error reading input file\n"); } return -1; } return samples_read; } /* AIFF Definitions */ static int const IFF_ID_FORM = 0x464f524d; /* "FORM" */ static int const IFF_ID_AIFF = 0x41494646; /* "AIFF" */ static int const IFF_ID_AIFC = 0x41494643; /* "AIFC" */ static int const IFF_ID_COMM = 0x434f4d4d; /* "COMM" */ static int const IFF_ID_SSND = 0x53534e44; /* "SSND" */ static int const IFF_ID_MPEG = 0x4d504547; /* "MPEG" */ static int const IFF_ID_NONE = 0x4e4f4e45; /* "NONE" *//* AIFF-C data format */ static int const IFF_ID_2CBE = 0x74776f73; /* "twos" *//* AIFF-C data format */ static int const IFF_ID_2CLE = 0x736f7774; /* "sowt" *//* AIFF-C data format */ static int const WAV_ID_RIFF = 0x52494646; /* "RIFF" */ static int const WAV_ID_WAVE = 0x57415645; /* "WAVE" */ static int const WAV_ID_FMT = 0x666d7420; /* "fmt " */ static int const WAV_ID_DATA = 0x64617461; /* "data" */ #ifndef WAVE_FORMAT_PCM static short const WAVE_FORMAT_PCM = 0x0001; #endif #ifndef WAVE_FORMAT_IEEE_FLOAT static short const WAVE_FORMAT_IEEE_FLOAT = 0x0003; #endif #ifndef WAVE_FORMAT_EXTENSIBLE static short const WAVE_FORMAT_EXTENSIBLE = 0xFFFE; #endif static long make_even_number_of_bytes_in_length(long x) { if ((x & 0x01) != 0) { return x + 1; } return x; } /***************************************************************************** * * Read Microsoft Wave headers * * By the time we get here the first 32-bits of the file have already been * read, and we're pretty sure that we're looking at a WAV file. * *****************************************************************************/ static int parse_wave_header(lame_global_flags * gfp, FILE * sf) { int format_tag = 0; int channels = 0; int bits_per_sample = 0; int samples_per_sec = 0; int is_wav = 0; unsigned long data_length = 0, subSize = 0; int loop_sanity = 0; (void) read_32_bits_high_low(sf); /* file_length */ if (read_32_bits_high_low(sf) != WAV_ID_WAVE) return -1; for (loop_sanity = 0; loop_sanity < 20; ++loop_sanity) { int type = read_32_bits_high_low(sf); if (type == WAV_ID_FMT) { subSize = read_32_bits_low_high(sf); subSize = make_even_number_of_bytes_in_length(subSize); if (subSize < 16) { /*DEBUGF( "'fmt' chunk too short (only %ld bytes)!", subSize); */ return -1; } format_tag = read_16_bits_low_high(sf); subSize -= 2; channels = read_16_bits_low_high(sf); subSize -= 2; samples_per_sec = read_32_bits_low_high(sf); subSize -= 4; (void) read_32_bits_low_high(sf); /* avg_bytes_per_sec */ subSize -= 4; (void) read_16_bits_low_high(sf); /* block_align */ subSize -= 2; bits_per_sample = read_16_bits_low_high(sf); subSize -= 2; /* WAVE_FORMAT_EXTENSIBLE support */ if ((subSize > 9) && (format_tag == WAVE_FORMAT_EXTENSIBLE)) { read_16_bits_low_high(sf); /* cbSize */ read_16_bits_low_high(sf); /* ValidBitsPerSample */ read_32_bits_low_high(sf); /* ChannelMask */ /* SubType coincident with format_tag for PCM int or float */ format_tag = read_16_bits_low_high(sf); subSize -= 10; } /* DEBUGF(" skipping %d bytes\n", subSize); */ if (subSize > 0) { if (fskip(sf, (long) subSize, SEEK_CUR) != 0) return -1; }; } else if (type == WAV_ID_DATA) { subSize = read_32_bits_low_high(sf); data_length = subSize; is_wav = 1; /* We've found the audio data. Read no further! */ break; } else { subSize = read_32_bits_low_high(sf); subSize = make_even_number_of_bytes_in_length(subSize); if (fskip(sf, (long) subSize, SEEK_CUR) != 0) { return -1; } } } if (is_wav) { if (format_tag == 0x0050 || format_tag == 0x0055) { return sf_mp123; } if (format_tag != WAVE_FORMAT_PCM && format_tag != WAVE_FORMAT_IEEE_FLOAT) { if (global_ui_config.silent < 10) { error_printf("Unsupported data format: 0x%04X\n", format_tag); } return 0; /* oh no! non-supported format */ } /* make sure the header is sane */ if (!set_input_num_channels(gfp, channels)) return 0; if (!set_input_samplerate(gfp, samples_per_sec)) return 0; /* avoid division by zero */ if (bits_per_sample < 1) { if (global_ui_config.silent < 10) error_printf("Unsupported bits per sample: %d\n", bits_per_sample); return -1; } global. pcmbitwidth = bits_per_sample; global. pcm_is_unsigned_8bit = 1; global. pcm_is_ieee_float = (format_tag == WAVE_FORMAT_IEEE_FLOAT ? 1 : 0); if (data_length == MAX_U_32_NUM) (void) lame_set_num_samples(gfp, MAX_U_32_NUM); else (void) lame_set_num_samples(gfp, data_length / (channels * ((bits_per_sample + 7) / 8))); return 1; } return -1; } /************************************************************************ * aiff_check2 * * PURPOSE: Checks AIFF header information to make sure it is valid. * returns 0 on success, 1 on errors ************************************************************************/ static int aiff_check2(IFF_AIFF * const pcm_aiff_data) { if (pcm_aiff_data->sampleType != (unsigned long) IFF_ID_SSND) { if (global_ui_config.silent < 10) { error_printf("ERROR: input sound data is not PCM\n"); } return 1; } switch (pcm_aiff_data->sampleSize) { case 32: case 24: case 16: case 8: break; default: if (global_ui_config.silent < 10) { error_printf("ERROR: input sound data is not 8, 16, 24 or 32 bits\n"); } return 1; } if (pcm_aiff_data->numChannels != 1 && pcm_aiff_data->numChannels != 2) { if (global_ui_config.silent < 10) { error_printf("ERROR: input sound data is not mono or stereo\n"); } return 1; } if (pcm_aiff_data->blkAlgn.blockSize != 0) { if (global_ui_config.silent < 10) { error_printf("ERROR: block size of input sound data is not 0 bytes\n"); } return 1; } /* A bug, since we correctly skip the offset earlier in the code. if (pcm_aiff_data->blkAlgn.offset != 0) { error_printf("Block offset is not 0 bytes in '%s'\n", file_name); return 1; } */ return 0; } /***************************************************************************** * * Read Audio Interchange File Format (AIFF) headers. * * By the time we get here the first 32 bits of the file have already been * read, and we're pretty sure that we're looking at an AIFF file. * *****************************************************************************/ static int parse_aiff_header(lame_global_flags * gfp, FILE * sf) { long chunkSize = 0, subSize = 0, typeID = 0, dataType = IFF_ID_NONE; IFF_AIFF aiff_info; int seen_comm_chunk = 0, seen_ssnd_chunk = 0; long pcm_data_pos = -1; memset(&aiff_info, 0, sizeof(aiff_info)); chunkSize = read_32_bits_high_low(sf); typeID = read_32_bits_high_low(sf); if ((typeID != IFF_ID_AIFF) && (typeID != IFF_ID_AIFC)) return -1; while (chunkSize > 0) { long ckSize; int type = read_32_bits_high_low(sf); chunkSize -= 4; /* DEBUGF( "found chunk type %08x '%4.4s'\n", type, (char*)&type); */ /* don't use a switch here to make it easier to use 'break' for SSND */ if (type == IFF_ID_COMM) { seen_comm_chunk = seen_ssnd_chunk + 1; subSize = read_32_bits_high_low(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= ckSize; aiff_info.numChannels = (short) read_16_bits_high_low(sf); ckSize -= 2; aiff_info.numSampleFrames = read_32_bits_high_low(sf); ckSize -= 4; aiff_info.sampleSize = (short) read_16_bits_high_low(sf); ckSize -= 2; aiff_info.sampleRate = read_ieee_extended_high_low(sf); ckSize -= 10; if (typeID == IFF_ID_AIFC) { dataType = read_32_bits_high_low(sf); ckSize -= 4; } if (fskip(sf, ckSize, SEEK_CUR) != 0) return -1; } else if (type == IFF_ID_SSND) { seen_ssnd_chunk = 1; subSize = read_32_bits_high_low(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= ckSize; aiff_info.blkAlgn.offset = read_32_bits_high_low(sf); ckSize -= 4; aiff_info.blkAlgn.blockSize = read_32_bits_high_low(sf); ckSize -= 4; aiff_info.sampleType = IFF_ID_SSND; if (seen_comm_chunk > 0) { if (fskip(sf, (long) aiff_info.blkAlgn.offset, SEEK_CUR) != 0) return -1; /* We've found the audio data. Read no further! */ break; } pcm_data_pos = ftell(sf); if (pcm_data_pos >= 0) { pcm_data_pos += aiff_info.blkAlgn.offset; } if (fskip(sf, ckSize, SEEK_CUR) != 0) return -1; } else { subSize = read_32_bits_high_low(sf); ckSize = make_even_number_of_bytes_in_length(subSize); chunkSize -= ckSize; if (fskip(sf, ckSize, SEEK_CUR) != 0) return -1; } } if (dataType == IFF_ID_2CLE) { global. pcmswapbytes = global_reader.swapbytes; } else if (dataType == IFF_ID_2CBE) { global. pcmswapbytes = !global_reader.swapbytes; } else if (dataType == IFF_ID_NONE) { global. pcmswapbytes = !global_reader.swapbytes; } else { return -1; } /* DEBUGF("Parsed AIFF %d\n", is_aiff); */ if (seen_comm_chunk && (seen_ssnd_chunk > 0 || aiff_info.numSampleFrames == 0)) { /* make sure the header is sane */ if (0 != aiff_check2(&aiff_info)) return 0; if (!set_input_num_channels(gfp, aiff_info.numChannels)) return 0; if (!set_input_samplerate(gfp, (int) aiff_info.sampleRate)) return 0; (void) lame_set_num_samples(gfp, aiff_info.numSampleFrames); global. pcmbitwidth = aiff_info.sampleSize; global. pcm_is_unsigned_8bit = 0; global. pcm_is_ieee_float = 0; /* FIXME: possible ??? */ if (pcm_data_pos >= 0) { if (fseek(sf, pcm_data_pos, SEEK_SET) != 0) { if (global_ui_config.silent < 10) { error_printf("Can't rewind stream to audio data position\n"); } return 0; } } return 1; } return -1; } /************************************************************************ * * parse_file_header * * PURPOSE: Read the header from a bytestream. Try to determine whether * it's a WAV file or AIFF without rewinding, since rewind * doesn't work on pipes and there's a good chance we're reading * from stdin (otherwise we'd probably be using libsndfile). * * When this function returns, the file offset will be positioned at the * beginning of the sound data. * ************************************************************************/ static int parse_file_header(lame_global_flags * gfp, FILE * sf) { int type = read_32_bits_high_low(sf); /* DEBUGF( "First word of input stream: %08x '%4.4s'\n", type, (char*) &type); */ global. count_samples_carefully = 0; global. pcm_is_unsigned_8bit = global_raw_pcm.in_signed == 1 ? 0 : 1; /*global_reader.input_format = sf_raw; commented out, because it is better to fail here as to encode some hundreds of input files not supported by LAME If you know you have RAW PCM data, use the -r switch */ if (type == WAV_ID_RIFF) { /* It's probably a WAV file */ int const ret = parse_wave_header(gfp, sf); if (ret == sf_mp123) { global. count_samples_carefully = 1; return sf_mp123; } if (ret > 0) { if (lame_get_num_samples(gfp) == MAX_U_32_NUM || global_reader.ignorewavlength == 1) { global. count_samples_carefully = 0; lame_set_num_samples(gfp, MAX_U_32_NUM); } else global. count_samples_carefully = 1; return sf_wave; } if (ret < 0) { if (global_ui_config.silent < 10) { error_printf("Warning: corrupt or unsupported WAVE format\n"); } } } else if (type == IFF_ID_FORM) { /* It's probably an AIFF file */ int const ret = parse_aiff_header(gfp, sf); if (ret > 0) { global. count_samples_carefully = 1; return sf_aiff; } if (ret < 0) { if (global_ui_config.silent < 10) { error_printf("Warning: corrupt or unsupported AIFF format\n"); } } } else { if (global_ui_config.silent < 10) { error_printf("Warning: unsupported audio format\n"); } } return sf_unknown; } static int open_mpeg_file_part2(lame_t gfp, FILE* musicin, char const *inPath, int *enc_delay, int *enc_padding) { #ifdef HAVE_MPGLIB if (-1 == lame_decode_initfile(musicin, &global_decoder.mp3input_data, enc_delay, enc_padding)) { if (global_ui_config.silent < 10) { error_printf("Error reading headers in mp3 input file %s.\n", inPath); } return 0; } #endif if (!set_input_num_channels(gfp, global_decoder.mp3input_data.stereo)) { return 0; } if (!set_input_samplerate(gfp, global_decoder.mp3input_data.samplerate)) { return 0; } (void) lame_set_num_samples(gfp, global_decoder.mp3input_data.nsamp); return 1; } static FILE * open_wave_file(lame_t gfp, char const *inPath, int *enc_delay, int *enc_padding) { FILE *musicin; /* set the defaults from info incase we cannot determine them from file */ lame_set_num_samples(gfp, MAX_U_32_NUM); if (!strcmp(inPath, "-")) { lame_set_stream_binary_mode(musicin = stdin); /* Read from standard input. */ } else { if ((musicin = lame_fopen(inPath, "rb")) == NULL) { if (global_ui_config.silent < 10) { error_printf("Could not find \"%s\".\n", inPath); } return 0; } } if (global_reader.input_format == sf_ogg) { if (global_ui_config.silent < 10) { error_printf("sorry, vorbis support in LAME is deprecated.\n"); } close_input_file(musicin); return 0; } else if (global_reader.input_format == sf_raw) { /* assume raw PCM */ if (global_ui_config.silent < 9) { console_printf("Assuming raw pcm input file"); if (global_reader.swapbytes) console_printf(" : Forcing byte-swapping\n"); else console_printf("\n"); } global. pcmswapbytes = global_reader.swapbytes; } else { global_reader.input_format = parse_file_header(gfp, musicin); } if (global_reader.input_format == sf_mp123) { if (open_mpeg_file_part2(gfp, musicin, inPath, enc_delay, enc_padding)) return musicin; close_input_file(musicin); return 0; } if (global_reader.input_format == sf_unknown) { close_input_file(musicin); return 0; } if (lame_get_num_samples(gfp) == MAX_U_32_NUM && musicin != stdin) { int const tmp_num_channels = lame_get_num_channels(gfp); double const flen = lame_get_file_size(musicin); /* try to figure out num_samples */ if (flen >= 0 && tmp_num_channels > 0 ) { /* try file size, assume 2 bytes per sample */ unsigned long fsize = (unsigned long) (flen / (2 * tmp_num_channels)); (void) lame_set_num_samples(gfp, fsize); global. count_samples_carefully = 0; } } return musicin; } static FILE * open_mpeg_file(lame_t gfp, char const *inPath, int *enc_delay, int *enc_padding) { FILE *musicin; /* set the defaults from info incase we cannot determine them from file */ lame_set_num_samples(gfp, MAX_U_32_NUM); if (strcmp(inPath, "-") == 0) { musicin = stdin; lame_set_stream_binary_mode(musicin); /* Read from standard input. */ } else { musicin = lame_fopen(inPath, "rb"); if (musicin == NULL) { if (global_ui_config.silent < 10) { error_printf("Could not find \"%s\".\n", inPath); } return 0; } } #ifdef AMIGA_MPEGA if (-1 == lame_decode_initfile(inPath, &global_decoder.mp3input_data)) { if (global_ui_config.silent < 10) { error_printf("Error reading headers in mp3 input file %s.\n", inPath); } close_input_file(musicin); return 0; } #endif if ( 0 == open_mpeg_file_part2(gfp, musicin, inPath, enc_delay, enc_padding) ) { close_input_file(musicin); return 0; } if (lame_get_num_samples(gfp) == MAX_U_32_NUM && musicin != stdin) { double flen = lame_get_file_size(musicin); /* try to figure out num_samples */ if (flen >= 0) { /* try file size, assume 2 bytes per sample */ if (global_decoder.mp3input_data.bitrate > 0) { double totalseconds = (flen * 8.0 / (1000.0 * global_decoder.mp3input_data.bitrate)); unsigned long tmp_num_samples = (unsigned long) (totalseconds * lame_get_in_samplerate(gfp)); (void) lame_set_num_samples(gfp, tmp_num_samples); global_decoder.mp3input_data.nsamp = tmp_num_samples; global. count_samples_carefully = 0; } } } return musicin; } static int close_input_file(FILE * musicin) { int ret = 0; if (musicin != stdin && musicin != 0) { ret = fclose(musicin); } if (ret != 0) { if (global_ui_config.silent < 10) { error_printf("Could not close audio input file\n"); } } return ret; } #if defined(HAVE_MPGLIB) static int check_aid(const unsigned char *header) { return 0 == memcmp(header, "AiD\1", 4); } /* * Please check this and don't kill me if there's a bug * This is a (nearly?) complete header analysis for a MPEG-1/2/2.5 Layer I, II or III * data stream */ static int is_syncword_mp123(const void *const headerptr) { const unsigned char *const p = headerptr; static const char abl2[16] = { 0, 7, 7, 7, 0, 7, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8 }; if ((p[0] & 0xFF) != 0xFF) return 0; /* first 8 bits must be '1' */ if ((p[1] & 0xE0) != 0xE0) return 0; /* next 3 bits are also */ if ((p[1] & 0x18) == 0x08) return 0; /* no MPEG-1, -2 or -2.5 */ switch (p[1] & 0x06) { default: case 0x00: /* illegal Layer */ return 0; case 0x02: /* Layer3 */ if (global_reader.input_format != sf_mp3 && global_reader.input_format != sf_mp123) { return 0; } global_reader.input_format = sf_mp3; break; case 0x04: /* Layer2 */ if (global_reader.input_format != sf_mp2 && global_reader.input_format != sf_mp123) { return 0; } global_reader.input_format = sf_mp2; break; case 0x06: /* Layer1 */ if (global_reader.input_format != sf_mp1 && global_reader.input_format != sf_mp123) { return 0; } global_reader.input_format = sf_mp1; break; } if ((p[1] & 0x06) == 0x00) return 0; /* no Layer I, II and III */ if ((p[2] & 0xF0) == 0xF0) return 0; /* bad bitrate */ if ((p[2] & 0x0C) == 0x0C) return 0; /* no sample frequency with (32,44.1,48)/(1,2,4) */ if ((p[1] & 0x18) == 0x18 && (p[1] & 0x06) == 0x04 && abl2[p[2] >> 4] & (1 << (p[3] >> 6))) return 0; if ((p[3] & 3) == 2) return 0; /* reserved enphasis mode */ return 1; } static size_t lenOfId3v2Tag(unsigned char const* buf) { unsigned int b0 = buf[0] & 127; unsigned int b1 = buf[1] & 127; unsigned int b2 = buf[2] & 127; unsigned int b3 = buf[3] & 127; return (((((b0 << 7) + b1) << 7) + b2) << 7) + b3; } int lame_decode_initfile(FILE * fd, mp3data_struct * mp3data, int *enc_delay, int *enc_padding) { /* VBRTAGDATA pTagData; */ /* int xing_header,len2,num_frames; */ unsigned char buf[100]; int ret; size_t len; int aid_header; short int pcm_l[1152], pcm_r[1152]; int freeformat = 0; memset(mp3data, 0, sizeof(mp3data_struct)); if (global.hip) { hip_decode_exit(global.hip); } global. hip = hip_decode_init(); hip_set_msgf(global.hip, global_ui_config.silent < 10 ? &frontend_msgf : 0); hip_set_errorf(global.hip, global_ui_config.silent < 10 ? &frontend_errorf : 0); hip_set_debugf(global.hip, &frontend_debugf); len = 4; if (fread(buf, 1, len, fd) != len) return -1; /* failed */ while (buf[0] == 'I' && buf[1] == 'D' && buf[2] == '3') { len = 6; if (fread(&buf[4], 1, len, fd) != len) return -1; /* failed */ len = lenOfId3v2Tag(&buf[6]); if (global.in_id3v2_size < 1) { global.in_id3v2_size = 10 + len; global.in_id3v2_tag = malloc(global.in_id3v2_size); if (global.in_id3v2_tag) { memcpy(global.in_id3v2_tag, buf, 10); if (fread(&global.in_id3v2_tag[10], 1, len, fd) != len) return -1; /* failed */ len = 0; /* copied, nothing to skip */ } else { global.in_id3v2_size = 0; } } assert( len <= LONG_MAX ); fskip(fd, (long) len, SEEK_CUR); len = 4; if (fread(&buf, 1, len, fd) != len) return -1; /* failed */ } aid_header = check_aid(buf); if (aid_header) { if (fread(&buf, 1, 2, fd) != 2) return -1; /* failed */ aid_header = (unsigned char) buf[0] + 256 * (unsigned char) buf[1]; if (global_ui_config.silent < 9) { console_printf("Album ID found. length=%i \n", aid_header); } /* skip rest of AID, except for 6 bytes we have already read */ fskip(fd, aid_header - 6, SEEK_CUR); /* read 4 more bytes to set up buffer for MP3 header check */ if (fread(&buf, 1, len, fd) != len) return -1; /* failed */ } len = 4; while (!is_syncword_mp123(buf)) { unsigned int i; for (i = 0; i < len - 1; i++) buf[i] = buf[i + 1]; if (fread(buf + len - 1, 1, 1, fd) != 1) return -1; /* failed */ } if ((buf[2] & 0xf0) == 0) { if (global_ui_config.silent < 9) { console_printf("Input file is freeformat.\n"); } freeformat = 1; } /* now parse the current buffer looking for MP3 headers. */ /* (as of 11/00: mpglib modified so that for the first frame where */ /* headers are parsed, no data will be decoded. */ /* However, for freeformat, we need to decode an entire frame, */ /* so mp3data->bitrate will be 0 until we have decoded the first */ /* frame. Cannot decode first frame here because we are not */ /* yet prepared to handle the output. */ ret = hip_decode1_headersB(global.hip, buf, len, pcm_l, pcm_r, mp3data, enc_delay, enc_padding); if (-1 == ret) return -1; /* repeat until we decode a valid mp3 header. */ while (!mp3data->header_parsed) { len = fread(buf, 1, sizeof(buf), fd); if (len != sizeof(buf)) return -1; ret = hip_decode1_headersB(global.hip, buf, len, pcm_l, pcm_r, mp3data, enc_delay, enc_padding); if (-1 == ret) return -1; } if (mp3data->bitrate == 0 && !freeformat) { if (global_ui_config.silent < 10) { error_printf("fail to sync...\n"); } return lame_decode_initfile(fd, mp3data, enc_delay, enc_padding); } if (mp3data->totalframes > 0) { /* mpglib found a Xing VBR header and computed nsamp & totalframes */ } else { /* set as unknown. Later, we will take a guess based on file size * ant bitrate */ mp3data->nsamp = MAX_U_32_NUM; } /* report_printf("ret = %i NEED_MORE=%i \n",ret,MP3_NEED_MORE); report_printf("stereo = %i \n",mp.fr.stereo); report_printf("samp = %i \n",freqs[mp.fr.sampling_frequency]); report_printf("framesize = %i \n",framesize); report_printf("bitrate = %i \n",mp3data->bitrate); report_printf("num frames = %ui \n",num_frames); report_printf("num samp = %ui \n",mp3data->nsamp); report_printf("mode = %i \n",mp.fr.mode); */ return 0; } /* For lame_decode_fromfile: return code -1 error n number of samples output. either 576 or 1152 depending on MP3 file. For lame_decode1_headers(): return code -1 error 0 ok, but need more data before outputing any samples n number of samples output. either 576 or 1152 depending on MP3 file. */ static int lame_decode_fromfile(FILE * fd, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int ret = 0; size_t len = 0; unsigned char buf[1024]; /* first see if we still have data buffered in the decoder: */ ret = hip_decode1_headers(global.hip, buf, len, pcm_l, pcm_r, mp3data); if (ret != 0) return ret; /* read until we get a valid output frame */ for (;;) { len = fread(buf, 1, 1024, fd); if (len == 0) { /* we are done reading the file, but check for buffered data */ ret = hip_decode1_headers(global.hip, buf, len, pcm_l, pcm_r, mp3data); if (ret <= 0) { return -1; /* done with file */ } break; } ret = hip_decode1_headers(global.hip, buf, len, pcm_l, pcm_r, mp3data); if (ret == -1) { return -1; } if (ret > 0) break; } return ret; } #endif /* defined(HAVE_MPGLIB) */ int is_mpeg_file_format(int input_file_format) { switch (input_file_format) { case sf_mp1: return 1; case sf_mp2: return 2; case sf_mp3: return 3; case sf_mp123: return -1; default: break; } return 0; } #define LOW__BYTE(x) (x & 0x00ff) #define HIGH_BYTE(x) ((x >> 8) & 0x00ff) void put_audio16(FILE * outf, short Buffer[2][1152], int iread, int nch) { char data[2 * 1152 * 2]; int i, m = 0; if (global_decoder.disable_wav_header && global_reader.swapbytes) { if (nch == 1) { for (i = 0; i < iread; i++) { short x = Buffer[0][i]; /* write 16 Bits High Low */ data[m++] = HIGH_BYTE(x); data[m++] = LOW__BYTE(x); } } else { for (i = 0; i < iread; i++) { short x = Buffer[0][i], y = Buffer[1][i]; /* write 16 Bits High Low */ data[m++] = HIGH_BYTE(x); data[m++] = LOW__BYTE(x); /* write 16 Bits High Low */ data[m++] = HIGH_BYTE(y); data[m++] = LOW__BYTE(y); } } } else { if (nch == 1) { for (i = 0; i < iread; i++) { short x = Buffer[0][i]; /* write 16 Bits Low High */ data[m++] = LOW__BYTE(x); data[m++] = HIGH_BYTE(x); } } else { for (i = 0; i < iread; i++) { short x = Buffer[0][i], y = Buffer[1][i]; /* write 16 Bits Low High */ data[m++] = LOW__BYTE(x); data[m++] = HIGH_BYTE(x); /* write 16 Bits Low High */ data[m++] = LOW__BYTE(y); data[m++] = HIGH_BYTE(y); } } } if (m > 0) { fwrite(data, 1, m, outf); } if (global_writer.flush_write == 1) { fflush(outf); } } hip_t get_hip(void) { return global.hip; } size_t sizeOfOldTag(lame_t gf) { (void) gf; return global.in_id3v2_size; } unsigned char* getOldTag(lame_t gf) { (void) gf; return global.in_id3v2_tag; } /* end of get_audio.c */ lame-3.100/frontend/gtkanal.h000644 001751 001751 00000001552 11561266675 017516 0ustar00netchildnetchild000000 000000 /* * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_GTKCONTROL_H #define LAME_GTKCONTROL_H int gtkcontrol(lame_global_flags * gfp2, char *inPath); #endif lame-3.100/frontend/rtp.h000644 001751 001751 00000002617 11561266675 016705 0ustar00netchildnetchild000000 000000 /* * rtp socket communication include file * * initially contributed by Felix von Leitner * * Copyright (c) 2000 Mark Taylor * 2010 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_RTP_H #define LAME_RTP_H #if defined(__cplusplus) extern "C" { #endif struct RtpStruct; typedef struct RtpStruct *RtpHandle; void rtp_initialization(void); void rtp_deinitialization(void); int rtp_socket( /*RtpHandle rtp, */ char const *Address, unsigned int port, unsigned int TTL); void rtp_output( /*RtpHandle rtp, */ unsigned char const *mp3buffer, int mp3size); #if defined(__cplusplus) } #endif #endif lame-3.100/frontend/console.h000644 001751 001751 00000003157 11343064065 017525 0ustar00netchildnetchild000000 000000 /* * frontend/console.h * * This * * */ #ifndef LAME_CONSOLE_H #define LAME_CONSOLE_H #if defined(_WIN32) && !defined(__CYGWIN__) # include #endif #if defined(__cplusplus) extern "C" { #endif typedef struct console_io_struct { unsigned long ClassID; unsigned long ClassProt; FILE *Console_fp; /* filepointer to stream reporting information */ FILE *Error_fp; /* filepointer to stream fatal error reporting information */ FILE *Report_fp; /* filepointer to stream reports (normally a text file or /dev/null) */ #if defined(_WIN32) && !defined(__CYGWIN__) HANDLE Console_Handle; #endif int disp_width; int disp_height; char str_up[10]; char str_clreoln[10]; char str_emph[10]; char str_norm[10]; char Console_buff[2048]; int Console_file_type; } Console_IO_t; extern Console_IO_t Console_IO; extern int frontend_open_console(void); extern void frontend_close_console(void); extern void frontend_msgf(const char *format, va_list ap); extern void frontend_debugf(const char *format, va_list ap); extern void frontend_errorf(const char *format, va_list ap); extern void frontend_print_null(const char *format, va_list ap); int console_printf(const char *format, ...); int error_printf(const char *format, ...); int report_printf(const char *format, ...); void console_flush(void); void error_flush(void); void report_flush(void); void console_up(int n_lines); void set_debug_file(const char *fn); #if defined(__cplusplus) } #endif #endif /* LAME_CONSOLE_H */ /* end of console.h */ lame-3.100/frontend/gpkplotting.c000644 001751 001751 00000023675 11561266675 020444 0ustar00netchildnetchild000000 000000 /* * GTK plotting routines source file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: gpkplotting.c,v 1.12 2011/05/07 16:05:17 rbrito Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include "gpkplotting.h" #ifdef STDC_HEADERS # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef WITH_DMALLOC #include #endif static gint num_plotwindows = 0; static gint max_plotwindows = 10; static GdkPixmap *pixmaps[10]; static GtkWidget *pixmapboxes[10]; /* compute a gdkcolor */ void setcolor(GtkWidget * widget, GdkColor * color, gint red, gint green, gint blue) { /* colors in GdkColor are taken from 0 to 65535, not 0 to 255. */ color->red = red * (65535 / 255); color->green = green * (65535 / 255); color->blue = blue * (65535 / 255); color->pixel = (gulong) (color->red * 65536 + color->green * 256 + color->blue); /* find closest in colormap, if needed */ gdk_color_alloc(gtk_widget_get_colormap(widget), color); } void gpk_redraw(GdkPixmap * pixmap, GtkWidget * pixmapbox) { /* redraw the entire pixmap */ gdk_draw_pixmap(pixmapbox->window, pixmapbox->style->fg_gc[GTK_WIDGET_STATE(pixmapbox)], pixmap, 0, 0, 0, 0, pixmapbox->allocation.width, pixmapbox->allocation.height); } static GdkPixmap ** findpixmap(GtkWidget * widget) { int i; for (i = 0; i < num_plotwindows && widget != pixmapboxes[i]; i++); if (i >= num_plotwindows) { g_print("findpixmap(): bad argument widget \n"); return NULL; } return &pixmaps[i]; } void gpk_graph_draw(GtkWidget * widget, /* plot on this widged */ int n, /* number of data points */ gdouble * xcord, gdouble * ycord, /* data */ gdouble xmn, gdouble ymn, /* coordinates of corners */ gdouble xmx, gdouble ymx, int clear, /* clear old plot first */ char *title, /* add a title (only if clear=1) */ GdkColor * color) { GdkPixmap **ppixmap; GdkPoint *points; int i; gint16 width, height; GdkFont *fixed_font; GdkGC *gc; gc = gdk_gc_new(widget->window); gdk_gc_set_foreground(gc, color); if ((ppixmap = findpixmap(widget))) { width = widget->allocation.width; height = widget->allocation.height; if (clear) { /* white background */ gdk_draw_rectangle(*ppixmap, widget->style->white_gc, TRUE, 0, 0, width, height); /* title */ #ifdef _WIN32 fixed_font = gdk_font_load("-misc-fixed-large-r-*-*-*-100-*-*-*-*-*-*"); #else fixed_font = gdk_font_load("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-iso8859-1"); #endif gdk_draw_text(*ppixmap, fixed_font, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], 0, 10, title, strlen(title)); } points = g_malloc(n * sizeof(GdkPoint)); for (i = 0; i < n; i++) { points[i].x = .5 + ((xcord[i] - xmn) * (width - 1) / (xmx - xmn)); points[i].y = .5 + ((ycord[i] - ymx) * (height - 1) / (ymn - ymx)); } gdk_draw_lines(*ppixmap, gc, points, n); g_free(points); gpk_redraw(*ppixmap, widget); } gdk_gc_destroy(gc); } void gpk_rectangle_draw(GtkWidget * widget, /* plot on this widged */ gdouble * xcord, gdouble * ycord, /* corners */ gdouble xmn, gdouble ymn, /* coordinates of corners */ gdouble xmx, gdouble ymx, GdkColor * color) { GdkPixmap **ppixmap; GdkPoint points[2]; int i; gint16 width, height; GdkGC *gc; gc = gdk_gc_new(widget->window); gdk_gc_set_foreground(gc, color); if ((ppixmap = findpixmap(widget))) { width = widget->allocation.width; height = widget->allocation.height; for (i = 0; i < 2; i++) { points[i].x = .5 + ((xcord[i] - xmn) * (width - 1) / (xmx - xmn)); points[i].y = .5 + ((ycord[i] - ymx) * (height - 1) / (ymn - ymx)); } width = points[1].x - points[0].x + 1; height = points[1].y - points[0].y + 1; gdk_draw_rectangle(*ppixmap, gc, TRUE, points[0].x, points[0].y, width, height); gpk_redraw(*ppixmap, widget); } gdk_gc_destroy(gc); } void gpk_bargraph_draw(GtkWidget * widget, /* plot on this widged */ int n, /* number of data points */ gdouble * xcord, gdouble * ycord, /* data */ gdouble xmn, gdouble ymn, /* coordinates of corners */ gdouble xmx, gdouble ymx, int clear, /* clear old plot first */ char *title, /* add a title (only if clear=1) */ int barwidth, /* bar width. 0=compute based on window size */ GdkColor * color) { GdkPixmap **ppixmap; GdkPoint points[2]; int i; gint16 width, height, x, y, barheight; GdkFont *fixed_font; GdkGC *gc; int titleSplit; gc = gdk_gc_new(widget->window); gdk_gc_set_foreground(gc, color); if ((ppixmap = findpixmap(widget))) { width = widget->allocation.width; height = widget->allocation.height; if (clear) { /* white background */ gdk_draw_rectangle(*ppixmap, widget->style->white_gc, TRUE, 0, 0, width, height); /* title */ #ifdef _WIN32 fixed_font = gdk_font_load("-misc-fixed-large-r-*-*-*-100-*-*-*-*-*-*"); #else fixed_font = gdk_font_load("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-iso8859-1"); #endif titleSplit = strcspn(title, "\n"); if (titleSplit && (titleSplit != strlen(title))) { gdk_draw_text(*ppixmap, fixed_font, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], 0, 10, title, titleSplit); gdk_draw_text(*ppixmap, fixed_font, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], 0, 22, title + titleSplit + 1, (strlen(title) - titleSplit) - 1); } else { gdk_draw_text(*ppixmap, fixed_font, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], 0, 10, title, strlen(title)); } } for (i = 0; i < n; i++) { points[1].x = .5 + ((xcord[i] - xmn) * (width - 1) / (xmx - xmn)); points[1].y = .5 + ((ycord[i] - ymx) * (height - 1) / (ymn - ymx)); points[0].x = points[1].x; points[0].y = height - 1; x = .5 + ((xcord[i] - xmn) * (width - 1) / (xmx - xmn)); y = .5 + ((ycord[i] - ymx) * (height - 1) / (ymn - ymx)); if (!barwidth) barwidth = (width / (n + 1)) - 1; barwidth = barwidth > 5 ? 5 : barwidth; barwidth = barwidth < 1 ? 1 : barwidth; barheight = height - 1 - y; /* gdk_draw_lines(*ppixmap,gc,points,2); */ gdk_draw_rectangle(*ppixmap, gc, TRUE, x, y, barwidth, barheight); } gpk_redraw(*ppixmap, widget); } gdk_gc_destroy(gc); } /* Create a new backing pixmap of the appropriate size */ static gint configure_event(GtkWidget * widget, GdkEventConfigure * event, gpointer data) { GdkPixmap **ppixmap; if ((ppixmap = findpixmap(widget))) { if (*ppixmap) gdk_pixmap_unref(*ppixmap); *ppixmap = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1); gdk_draw_rectangle(*ppixmap, widget->style->white_gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); } return TRUE; } /* Redraw the screen from the backing pixmap */ static gint expose_event(GtkWidget * widget, GdkEventExpose * event, gpointer data) { GdkPixmap **ppixmap; if ((ppixmap = findpixmap(widget))) { gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE(widget)], *ppixmap, event->area.x, event->area.y, event->area.x, event->area.y, event->area.width, event->area.height); } return FALSE; } GtkWidget * gpk_plot_new(int width, int height) { GtkWidget *pixmapbox; pixmapbox = gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(pixmapbox), width, height); gtk_signal_connect(GTK_OBJECT(pixmapbox), "expose_event", (GtkSignalFunc) expose_event, NULL); gtk_signal_connect(GTK_OBJECT(pixmapbox), "configure_event", (GtkSignalFunc) configure_event, NULL); gtk_widget_set_events(pixmapbox, GDK_EXPOSURE_MASK); if (num_plotwindows < max_plotwindows) { pixmapboxes[num_plotwindows] = pixmapbox; pixmaps[num_plotwindows] = NULL; num_plotwindows++; } else { g_print("gtk_plotarea_new(): exceeded maximum of 10 plotarea windows\n"); } return pixmapbox; } lame-3.100/frontend/parse.c000644 001751 001751 00000271402 13167215267 017200 0ustar00netchildnetchild000000 000000 /* * Command line parsing related functions * * Copyright (c) 1999 Mark Taylor * 2000-2017 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: parse.c,v 1.307 2017/09/26 12:25:07 robert Exp $ */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef STDC_HEADERS # include # include # include #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_LIMITS_H # include #endif #include "lame.h" #include "parse.h" #include "main.h" #include "get_audio.h" #include "version.h" #include "console.h" #undef dimension_of #define dimension_of(array) (sizeof(array)/sizeof(array[0])) #ifdef WITH_DMALLOC #include #endif #ifdef HAVE_ICONV #include #include #include #include #endif #if defined _ALLOW_INTERNAL_OPTIONS #define INTERNAL_OPTS 1 #else #define INTERNAL_OPTS 0 #endif #if (INTERNAL_OPTS!=0) #include "set_get.h" #define DEV_HELP(a) a #else #define DEV_HELP(a) #define lame_set_tune(a,b) (void)0 #define lame_set_short_threshold(a,b,c) (void)0 #define lame_set_maskingadjust(a,b) (void)0 #define lame_set_maskingadjust_short(a,b) (void)0 #define lame_set_ATHcurve(a,b) (void)0 #define lame_set_preset_notune(a,b) (void)0 #define lame_set_substep(a,b) (void)0 #define lame_set_subblock_gain(a,b) (void)0 #define lame_set_sfscale(a,b) (void)0 #endif static int const lame_alpha_version_enabled = LAME_ALPHA_VERSION; static int const internal_opts_enabled = INTERNAL_OPTS; /* GLOBAL VARIABLES. set by parse_args() */ /* we need to clean this up */ ReaderConfig global_reader = { sf_unknown, 0, 0, 0, 0 }; WriterConfig global_writer = { 0 }; UiConfig global_ui_config = {0,0,0,0}; DecoderConfig global_decoder; RawPCMConfig global_raw_pcm = { /* in_bitwidth */ 16 , /* in_signed */ -1 , /* in_endian */ ByteOrderLittleEndian }; /* possible text encodings */ typedef enum TextEncoding { TENC_RAW /* bytes will be stored as-is into ID3 tags, which are Latin1 per definition */ , TENC_LATIN1 /* text will be converted from local encoding to Latin1, as ID3 needs it */ , TENC_UTF16 /* text will be converted from local encoding to Unicode, as ID3v2 wants it */ } TextEncoding; #ifdef HAVE_ICONV #define ID3TAGS_EXTENDED /* search for Zero termination in multi-byte strings */ static size_t strlenMultiByte(char const* str, size_t w) { size_t n = 0; if (str != 0) { size_t i, x = 0; for (n = 0; ; ++n) { x = 0; for (i = 0; i < w; ++i) { x += *str++ == 0 ? 1 : 0; } if (x == w) { break; } } } return n; } static size_t currCharCodeSize(void) { size_t n = 1; char dst[32]; char* src = "A"; char* cur_code = nl_langinfo(CODESET); iconv_t xiconv = iconv_open(cur_code, "ISO_8859-1"); if (xiconv != (iconv_t)-1) { for (n = 0; n < 32; ++n) { char* i_ptr = src; char* o_ptr = dst; size_t srcln = 1; size_t avail = n; size_t rc = iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); if (rc != (size_t)-1) { break; } } iconv_close(xiconv); } return n; } #if 0 static char* fromLatin1( char* src ) { char* dst = 0; if (src != 0) { size_t const l = strlen(src); size_t const n = l*4; dst = calloc(n+4, 4); if (dst != 0) { char* cur_code = nl_langinfo(CODESET); iconv_t xiconv = iconv_open(cur_code, "ISO_8859-1"); if (xiconv != (iconv_t)-1) { char* i_ptr = src; char* o_ptr = dst; size_t srcln = l; size_t avail = n; iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); iconv_close(xiconv); } } } return dst; } static char* fromUtf16( char* src ) { char* dst = 0; if (src != 0) { size_t const l = strlenMultiByte(src, 2); size_t const n = l*4; dst = calloc(n+4, 4); if (dst != 0) { char* cur_code = nl_langinfo(CODESET); iconv_t xiconv = iconv_open(cur_code, "UTF-16LE"); if (xiconv != (iconv_t)-1) { char* i_ptr = (char*)src; char* o_ptr = dst; size_t srcln = l*2; size_t avail = n; iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); iconv_close(xiconv); } } } return dst; } #endif static char* toLatin1( char* src ) { size_t w = currCharCodeSize(); char* dst = 0; if (src != 0) { size_t const l = strlenMultiByte(src, w); size_t const n = l*4; dst = calloc(n+4, 4); if (dst != 0) { char* cur_code = nl_langinfo(CODESET); iconv_t xiconv = iconv_open("ISO_8859-1//TRANSLIT", cur_code); if (xiconv != (iconv_t)-1) { char* i_ptr = (char*)src; char* o_ptr = dst; size_t srcln = l*w; size_t avail = n; iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); iconv_close(xiconv); } } } return dst; } static char* toUtf16( char* src ) { size_t w = currCharCodeSize(); char* dst = 0; if (src != 0) { size_t const l = strlenMultiByte(src, w); size_t const n = (l+1)*4; dst = calloc(n+4, 4); if (dst != 0) { char* cur_code = nl_langinfo(CODESET); iconv_t xiconv = iconv_open("UTF-16LE//TRANSLIT", cur_code); dst[0] = 0xff; dst[1] = 0xfe; if (xiconv != (iconv_t)-1) { char* i_ptr = (char*)src; char* o_ptr = &dst[2]; size_t srcln = l*w; size_t avail = n; iconv(xiconv, &i_ptr, &srcln, &o_ptr, &avail); iconv_close(xiconv); } } } return dst; } #endif #if defined( _WIN32 ) && !defined(__MINGW32__) #define ID3TAGS_EXTENDED char* toLatin1(char const* s) { return utf8ToLatin1(s); } unsigned short* toUtf16(char const* s) { return utf8ToUtf16(s); } #endif static int evaluateArgument(char const* token, char const* arg, char* _EndPtr) { if (arg != 0 && arg != _EndPtr) return 1; error_printf("WARNING: argument missing for '%s'\n", token); return 0; } static int getDoubleValue(char const* token, char const* arg, double* ptr) { char *_EndPtr=0; double d = strtod(arg, &_EndPtr); if (ptr != 0) { *ptr = d; } return evaluateArgument(token, arg, _EndPtr); } static int getIntValue(char const* token, char const* arg, int* ptr) { char *_EndPtr=0; long d = strtol(arg, &_EndPtr, 10); if (ptr != 0) { *ptr = d; } return evaluateArgument(token, arg, _EndPtr); } #ifdef ID3TAGS_EXTENDED static int set_id3v2tag(lame_global_flags* gfp, int type, unsigned short const* str) { switch (type) { case 'a': return id3tag_set_textinfo_utf16(gfp, "TPE1", str); case 't': return id3tag_set_textinfo_utf16(gfp, "TIT2", str); case 'l': return id3tag_set_textinfo_utf16(gfp, "TALB", str); case 'g': return id3tag_set_textinfo_utf16(gfp, "TCON", str); case 'c': return id3tag_set_comment_utf16(gfp, 0, 0, str); case 'n': return id3tag_set_textinfo_utf16(gfp, "TRCK", str); case 'y': return id3tag_set_textinfo_utf16(gfp, "TYER", str); case 'v': return id3tag_set_fieldvalue_utf16(gfp, str); } return 0; } #endif static int set_id3tag(lame_global_flags* gfp, int type, char const* str) { switch (type) { case 'a': return id3tag_set_artist(gfp, str), 0; case 't': return id3tag_set_title(gfp, str), 0; case 'l': return id3tag_set_album(gfp, str), 0; case 'g': return id3tag_set_genre(gfp, str); case 'c': return id3tag_set_comment(gfp, str), 0; case 'n': return id3tag_set_track(gfp, str); case 'y': return id3tag_set_year(gfp, str), 0; case 'v': return id3tag_set_fieldvalue(gfp, str); } return 0; } static int id3_tag(lame_global_flags* gfp, int type, TextEncoding enc, char* str) { void* x = 0; int result; if (enc == TENC_UTF16 && type != 'v' ) { id3_tag(gfp, type, TENC_LATIN1, str); /* for id3v1 */ } switch (enc) { default: #ifdef ID3TAGS_EXTENDED case TENC_LATIN1: x = toLatin1(str); break; case TENC_UTF16: x = toUtf16(str); break; #else case TENC_RAW: x = strdup(str); break; #endif } switch (enc) { default: #ifdef ID3TAGS_EXTENDED case TENC_LATIN1: result = set_id3tag(gfp, type, x); break; case TENC_UTF16: result = set_id3v2tag(gfp, type, x); break; #else case TENC_RAW: result = set_id3tag(gfp, type, x); break; #endif } free(x); return result; } /************************************************************************ * * license * * PURPOSE: Writes version and license to the file specified by fp * ************************************************************************/ static int lame_version_print(FILE * const fp) { const char *b = get_lame_os_bitness(); const char *v = get_lame_version(); const char *u = get_lame_url(); const size_t lenb = strlen(b); const size_t lenv = strlen(v); const size_t lenu = strlen(u); const size_t lw = 80; /* line width of terminal in characters */ const size_t sw = 16; /* static width of text */ if (lw >= lenb + lenv + lenu + sw || lw < lenu + 2) /* text fits in 80 chars per line, or line even too small for url */ if (lenb > 0) fprintf(fp, "LAME %s version %s (%s)\n\n", b, v, u); else fprintf(fp, "LAME version %s (%s)\n\n", v, u); else { int const n_white_spaces = (int)((lenu+2) > lw ? 0 : lw-2-lenu); /* text too long, wrap url into next line, right aligned */ if (lenb > 0) fprintf(fp, "LAME %s version %s\n%*s(%s)\n\n", b, v, n_white_spaces, "", u); else fprintf(fp, "LAME version %s\n%*s(%s)\n\n", v, n_white_spaces, "", u); } if (lame_alpha_version_enabled) fprintf(fp, "warning: alpha versions should be used for testing only\n\n"); return 0; } static int print_license(FILE * const fp) { /* print version & license */ lame_version_print(fp); fprintf(fp, "Copyright (c) 1999-2011 by The LAME Project\n" "Copyright (c) 1999,2000,2001 by Mark Taylor\n" "Copyright (c) 1998 by Michael Cheng\n" "Copyright (c) 1995,1996,1997 by Michael Hipp: mpglib\n" "\n"); fprintf(fp, "This library is free software; you can redistribute it and/or\n" "modify it under the terms of the GNU Library General Public\n" "License as published by the Free Software Foundation; either\n" "version 2 of the License, or (at your option) any later version.\n" "\n"); fprintf(fp, "This library is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" "Library General Public License for more details.\n" "\n"); fprintf(fp, "You should have received a copy of the GNU Library General Public\n" "License along with this program. If not, see\n" ".\n"); return 0; } /************************************************************************ * * usage * * PURPOSE: Writes command line syntax to the file specified by fp * ************************************************************************/ int usage(FILE * const fp, const char *ProgramName) { /* print general syntax */ lame_version_print(fp); fprintf(fp, "usage: %s [options] [outfile]\n" "\n" " and/or can be \"-\", which means stdin/stdout.\n" "\n" "Try:\n" " \"%s --help\" for general usage information\n" " or:\n" " \"%s --preset help\" for information on suggested predefined settings\n" " or:\n" " \"%s --longhelp\"\n" " or \"%s -?\" for a complete options list\n\n", ProgramName, ProgramName, ProgramName, ProgramName, ProgramName); return 0; } /************************************************************************ * * usage * * PURPOSE: Writes command line syntax to the file specified by fp * but only the most important ones, to fit on a vt100 terminal * ************************************************************************/ int short_help(const lame_global_flags * gfp, FILE * const fp, const char *ProgramName) { /* print short syntax help */ lame_version_print(fp); fprintf(fp, "usage: %s [options] [outfile]\n" "\n" " and/or can be \"-\", which means stdin/stdout.\n" "\n" "RECOMMENDED:\n" " lame -V2 input.wav output.mp3\n" "\n", ProgramName); fprintf(fp, "OPTIONS:\n" " -b bitrate set the bitrate, default 128 kbps\n" " -h higher quality, but a little slower.\n" " -f fast mode (lower quality)\n" " -V n quality setting for VBR. default n=%i\n" " 0=high quality,bigger files. 9.999=smaller files\n", lame_get_VBR_q(gfp)); fprintf(fp, " --preset type type must be \"medium\", \"standard\", \"extreme\", \"insane\",\n" " or a value for an average desired bitrate and depending\n" " on the value specified, appropriate quality settings will\n" " be used.\n" " \"--preset help\" gives more info on these\n" "\n"); fprintf(fp, #if defined(WIN32) " --priority type sets the process priority\n" " 0,1 = Low priority\n" " 2 = normal priority\n" " 3,4 = High priority\n" "\n" #endif #if defined(__OS2__) " --priority type sets the process priority\n" " 0 = Low priority\n" " 1 = Medium priority\n" " 2 = Regular priority\n" " 3 = High priority\n" " 4 = Maximum priority\n" "\n" #endif " --help id3 ID3 tagging related options\n" "\n" DEV_HELP( " --help dev developer options\n" "\n" ) " --longhelp full list of options\n" "\n" " --license print License information\n\n" ); return 0; } /************************************************************************ * * usage * * PURPOSE: Writes command line syntax to the file specified by fp * ************************************************************************/ static void wait_for(FILE * const fp, int lessmode) { if (lessmode) { fflush(fp); getchar(); } else { fprintf(fp, "\n"); } fprintf(fp, "\n"); } static void help_id3tag(FILE * const fp) { fprintf(fp, " ID3 tag options:\n" " --tt audio/song title (max 30 chars for version 1 tag)\n" " --ta <artist> audio/song artist (max 30 chars for version 1 tag)\n" " --tl <album> audio/song album (max 30 chars for version 1 tag)\n" " --ty <year> audio/song year of issue (1 to 9999)\n" " --tc <comment> user-defined text (max 30 chars for v1 tag, 28 for v1.1)\n"); fprintf(fp, " --tn <track[/total]> audio/song track number and (optionally) the total\n" " number of tracks on the original recording. (track\n" " and total each 1 to 255. just the track number\n" " creates v1.1 tag, providing a total forces v2.0).\n"); fprintf(fp, " --tg <genre> audio/song genre (name or number in list)\n" " --ti <file> audio/song albumArt (jpeg/png/gif file, v2.3 tag)\n" " --tv <id=value> user-defined frame specified by id and value (v2.3 tag)\n" " syntax: --tv \"TXXX=description=content\"\n" ); fprintf(fp, " --add-id3v2 force addition of version 2 tag\n" " --id3v1-only add only a version 1 tag\n" " --id3v2-only add only a version 2 tag\n" #ifdef ID3TAGS_EXTENDED " --id3v2-utf16 add following options in unicode text encoding\n" " --id3v2-latin1 add following options in latin-1 text encoding\n" #endif " --space-id3v1 pad version 1 tag with spaces instead of nulls\n" " --pad-id3v2 same as '--pad-id3v2-size 128'\n" " --pad-id3v2-size <value> adds version 2 tag, pad with extra <value> bytes\n" " --genre-list print alphabetically sorted ID3 genre list and exit\n" " --ignore-tag-errors ignore errors in values passed for tags\n" "\n" ); fprintf(fp, " Note: A version 2 tag will NOT be added unless one of the input fields\n" " won't fit in a version 1 tag (e.g. the title string is longer than 30\n" " characters), or the '--add-id3v2' or '--id3v2-only' options are used,\n" " or output is redirected to stdout.\n" ); } static void help_developer_switches(FILE * const fp) { if ( !internal_opts_enabled ) { fprintf(fp, " Note: Almost all of the following switches aren't available in this build!\n\n" ); } fprintf(fp, " ATH related:\n" " --noath turns ATH down to a flat noise floor\n" " --athshort ignore GPSYCHO for short blocks, use ATH only\n" " --athonly ignore GPSYCHO completely, use ATH only\n" " --athtype n selects between different ATH types [0-4]\n" " --athlower x lowers ATH by x dB\n" ); fprintf(fp, " --athaa-type n ATH auto adjust: 0 'no' else 'loudness based'\n" /** OBSOLETE " --athaa-loudapprox n n=1 total energy or n=2 equal loudness curve\n"*/ " --athaa-sensitivity x activation offset in -/+ dB for ATH auto-adjustment\n" "\n"); fprintf(fp, " PSY related:\n" " --short use short blocks when appropriate\n" " --noshort do not use short blocks\n" " --allshort use only short blocks\n" ); fprintf(fp, "(1) --temporal-masking x x=0 disables, x=1 enables temporal masking effect\n" " --nssafejoint M/S switching criterion\n" " --nsmsfix <arg> M/S switching tuning [effective 0-3.5]\n" "(2) --interch x adjust inter-channel masking ratio\n" " --ns-bass x adjust masking for sfbs 0 - 6 (long) 0 - 5 (short)\n" " --ns-alto x adjust masking for sfbs 7 - 13 (long) 6 - 10 (short)\n" " --ns-treble x adjust masking for sfbs 14 - 21 (long) 11 - 12 (short)\n" ); fprintf(fp, " --ns-sfb21 x change ns-treble by x dB for sfb21\n" " --shortthreshold x,y short block switching threshold,\n" " x for L/R/M channel, y for S channel\n" " -Z [n] always do calculate short block maskings\n"); fprintf(fp, " Noise Shaping related:\n" "(1) --substep n use pseudo substep noise shaping method types 0-2\n" "(1) -X n[,m] selects between different noise measurements\n" " n for long block, m for short. if m is omitted, m = n\n" " 1: CBR, ABR and VBR-old encoding modes only\n" " 2: ignored\n" ); } int long_help(const lame_global_flags * gfp, FILE * const fp, const char *ProgramName, int lessmode) { /* print long syntax help */ lame_version_print(fp); fprintf(fp, "usage: %s [options] <infile> [outfile]\n" "\n" " <infile> and/or <outfile> can be \"-\", which means stdin/stdout.\n" "\n" "RECOMMENDED:\n" " lame -V2 input.wav output.mp3\n" "\n", ProgramName); fprintf(fp, "OPTIONS:\n" " Input options:\n" " --scale <arg> scale input (multiply PCM data) by <arg>\n" " --scale-l <arg> scale channel 0 (left) input (multiply PCM data) by <arg>\n" " --scale-r <arg> scale channel 1 (right) input (multiply PCM data) by <arg>\n" " --swap-channel swap L/R channels\n" " --ignorelength ignore file length in WAV header\n" " --gain <arg> apply Gain adjustment in decibels, range -20.0 to +12.0\n" ); #if (defined HAVE_MPGLIB || defined AMIGA_MPEGA) fprintf(fp, " --mp1input input file is a MPEG Layer I file\n" " --mp2input input file is a MPEG Layer II file\n" " --mp3input input file is a MPEG Layer III file\n" ); #endif fprintf(fp, " --nogap <file1> <file2> <...>\n" " gapless encoding for a set of contiguous files\n" " --nogapout <dir>\n" " output dir for gapless encoding (must precede --nogap)\n" " --nogaptags allow the use of VBR tags in gapless encoding\n" " --out-dir <dir> output dir, must exist\n" ); fprintf(fp, "\n" " Input options for RAW PCM:\n" " -r input is raw pcm\n" " -s sfreq sampling frequency of input file (kHz) - default 44.1 kHz\n" " --signed input is signed (default)\n" " --unsigned input is unsigned\n" " --bitwidth w input bit width is w (default 16)\n" " -x force byte-swapping of input\n" " --little-endian input is little-endian (default)\n" " --big-endian input is big-endian\n" " -a downmix from stereo to mono file for mono encoding\n" ); wait_for(fp, lessmode); fprintf(fp, " Operational options:\n" " -m <mode> (j)oint, (s)imple, (f)orce, (d)ual-mono, (m)ono (l)eft (r)ight\n" " default is (j)\n" " joint = Uses the best possible of MS and LR stereo\n" " simple = force LR stereo on all frames\n" " force = force MS stereo on all frames.\n" ); fprintf(fp, " --preset type type must be \"medium\", \"standard\", \"extreme\", \"insane\",\n" " or a value for an average desired bitrate and depending\n" " on the value specified, appropriate quality settings will\n" " be used.\n" " \"--preset help\" gives more info on these\n" " --comp <arg> choose bitrate to achieve a compression ratio of <arg>\n"); fprintf(fp, " --replaygain-fast compute RG fast but slightly inaccurately (default)\n" #ifdef DECODE_ON_THE_FLY " --replaygain-accurate compute RG more accurately and find the peak sample\n" #endif " --noreplaygain disable ReplayGain analysis\n" #ifdef DECODE_ON_THE_FLY " --clipdetect enable --replaygain-accurate and print a message whether\n" " clipping occurs and how far the waveform is from full scale\n" #endif ); fprintf(fp, " --flush flush output stream as soon as possible\n" " --freeformat produce a free format bitstream\n" " --decode input=mp3 file, output=wav\n" " -t disable writing wav header when using --decode\n"); wait_for(fp, lessmode); fprintf(fp, " Verbosity:\n" " --disptime <arg>print progress report every arg seconds\n" " -S don't print progress report, VBR histograms\n" " --nohist disable VBR histogram display\n" " --quiet don't print anything on screen\n" " --silent don't print anything on screen, but fatal errors\n" " --brief print more useful information\n" " --verbose print a lot of useful information\n" "\n"); fprintf(fp, " Noise shaping & psycho acoustic algorithms:\n" " -q <arg> <arg> = 0...9. Default -q 3 \n" " -q 0: Highest quality, very slow \n" " -q 9: Poor quality, but fast \n" " -h Same as -q 2. \n" " -f Same as -q 7. Fast, ok quality\n"); wait_for(fp, lessmode); fprintf(fp, " CBR (constant bitrate, the default) options:\n" " -b <bitrate> set the bitrate in kbps, default 128 kbps\n" " --cbr enforce use of constant bitrate\n" "\n" " ABR options:\n" " --abr <bitrate> specify average bitrate desired (instead of quality)\n" "\n"); fprintf(fp, " VBR options:\n" " -V n quality setting for VBR. default n=%i\n" " 0=high quality,bigger files. 9=smaller files\n" " -v the same as -V 4\n" " --vbr-old use old variable bitrate (VBR) routine\n" " --vbr-new use new variable bitrate (VBR) routine (default)\n" " -Y lets LAME ignore noise in sfb21, like in CBR\n" " (Default for V3 to V9.999)\n" , lame_get_VBR_q(gfp)); fprintf(fp, " -b <bitrate> specify minimum allowed bitrate, default 32 kbps\n" " -B <bitrate> specify maximum allowed bitrate, default 320 kbps\n" " -F strictly enforce the -b option, for use with players that\n" " do not support low bitrate mp3\n" " -t disable writing LAME Tag\n" " -T enable and force writing LAME Tag\n"); wait_for(fp, lessmode); DEV_HELP( help_developer_switches(fp); wait_for(fp, lessmode); ) fprintf(fp, " MP3 header/stream options:\n" " -e <emp> de-emphasis n/5/c (obsolete)\n" " -c mark as copyright\n" " -o mark as non-original\n" " -p error protection. adds 16 bit checksum to every frame\n" " (the checksum is computed correctly)\n" " --nores disable the bit reservoir\n" " --strictly-enforce-ISO comply as much as possible to ISO MPEG spec\n"); fprintf(fp, " --buffer-constraint <constraint> available values for constraint:\n" " default, strict, maximum\n" "\n" ); fprintf(fp, " Filter options:\n" " --lowpass <freq> frequency(kHz), lowpass filter cutoff above freq\n" " --lowpass-width <freq> frequency(kHz) - default 15%% of lowpass freq\n" " --highpass <freq> frequency(kHz), highpass filter cutoff below freq\n" " --highpass-width <freq> frequency(kHz) - default 15%% of highpass freq\n"); fprintf(fp, " --resample <sfreq> sampling frequency of output file(kHz)- default=automatic\n"); wait_for(fp, lessmode); help_id3tag(fp); fprintf(fp, #if defined(WIN32) "\n\nMS-Windows-specific options:\n" " --priority <type> sets the process priority:\n" " 0,1 = Low priority (IDLE_PRIORITY_CLASS)\n" " 2 = normal priority (NORMAL_PRIORITY_CLASS, default)\n" " 3,4 = High priority (HIGH_PRIORITY_CLASS))\n" " Note: Calling '--priority' without a parameter will select priority 0.\n" #endif #if defined(__OS2__) "\n\nOS/2-specific options:\n" " --priority <type> sets the process priority:\n" " 0 = Low priority (IDLE, delta = 0)\n" " 1 = Medium priority (IDLE, delta = +31)\n" " 2 = Regular priority (REGULAR, delta = -31)\n" " 3 = High priority (REGULAR, delta = 0)\n" " 4 = Maximum priority (REGULAR, delta = +31)\n" " Note: Calling '--priority' without a parameter will select priority 0.\n" #endif "\nMisc:\n --license print License information\n\n" ); #if defined(HAVE_NASM) wait_for(fp, lessmode); fprintf(fp, " Platform specific:\n" " --noasm <instructions> disable assembly optimizations for mmx/3dnow/sse\n"); wait_for(fp, lessmode); #endif display_bitrates(fp); return 0; } static void display_bitrate(FILE * const fp, const char *const version, const int d, const int indx) { int i; int nBitrates = 14; if (d == 4) nBitrates = 8; fprintf(fp, "\nMPEG-%-3s layer III sample frequencies (kHz): %2d %2d %g\n" "bitrates (kbps):", version, 32 / d, 48 / d, 44.1 / d); for (i = 1; i <= nBitrates; i++) fprintf(fp, " %2i", lame_get_bitrate(indx, i)); fprintf(fp, "\n"); } int display_bitrates(FILE * const fp) { display_bitrate(fp, "1", 1, 1); display_bitrate(fp, "2", 2, 0); display_bitrate(fp, "2.5", 4, 0); fprintf(fp, "\n"); fflush(fp); return 0; } /* note: for presets it would be better to externalize them in a file. suggestion: lame --preset <file-name> ... or: lame --preset my-setting ... and my-setting is defined in lame.ini */ /* Note from GB on 08/25/2002: I am merging --presets and --alt-presets. Old presets are now aliases for corresponding abr values from old alt-presets. This way we now have a unified preset system, and I hope than more people will use the new tuned presets instead of the old unmaintained ones. */ /************************************************************************ * * usage * * PURPOSE: Writes presetting info to #stdout# * ************************************************************************/ static void presets_longinfo_dm(FILE * msgfp) { fprintf(msgfp, "\n" "The --preset switches are aliases over LAME settings.\n" "\n" "\n"); fprintf(msgfp, "To activate these presets:\n" "\n" " For VBR modes (generally highest quality):\n" "\n"); fprintf(msgfp, " --preset medium This preset should provide near transparency to most\n" " people on most music.\n" "\n" " --preset standard This preset should generally be transparent to most\n" " people on most music and is already quite high\n" " in quality.\n" "\n"); fprintf(msgfp, " --preset extreme If you have extremely good hearing and similar\n" " equipment, this preset will generally provide\n" " slightly higher quality than the \"standard\" mode.\n" "\n"); fprintf(msgfp, " For CBR 320kbps (highest quality possible from the --preset switches):\n" "\n" " --preset insane This preset will usually be overkill for most people\n" " and most situations, but if you must have the\n" " absolute highest quality with no regard to filesize,\n" " this is the way to go.\n" "\n"); fprintf(msgfp, " For ABR modes (high quality per given bitrate but not as high as VBR):\n" "\n" " --preset <kbps> Using this preset will usually give you good quality\n" " at a specified bitrate. Depending on the bitrate\n" " entered, this preset will determine the optimal\n" " settings for that particular situation. For example:\n" " \"--preset 185\" activates this preset and uses 185\n" " as an average kbps.\n" "\n"); fprintf(msgfp, " \"cbr\" - If you use the ABR mode (read above) with a significant\n" " bitrate such as 80, 96, 112, 128, 160, 192, 224, 256, 320,\n" " you can use the \"cbr\" option to force CBR mode encoding\n" " instead of the standard abr mode. ABR does provide higher\n" " quality but CBR may be useful in situations such as when\n" " streaming an mp3 over the internet may be important.\n" "\n"); fprintf(msgfp, " For example:\n" "\n" " --preset standard <input file> <output file>\n" " or --preset cbr 192 <input file> <output file>\n" " or --preset 172 <input file> <output file>\n" " or --preset extreme <input file> <output file>\n" "\n" "\n"); fprintf(msgfp, "A few aliases are also available for ABR mode:\n" "phone => 16kbps/mono phon+/lw/mw-eu/sw => 24kbps/mono\n" "mw-us => 40kbps/mono voice => 56kbps/mono\n" "fm/radio/tape => 112kbps hifi => 160kbps\n" "cd => 192kbps studio => 256kbps\n"); } static int presets_set(lame_t gfp, int fast, int cbr, const char *preset_name, const char *ProgramName) { int mono = 0; if ((strcmp(preset_name, "help") == 0) && (fast < 1) && (cbr < 1)) { lame_version_print(stdout); presets_longinfo_dm(stdout); return -1; } /*aliases for compatibility with old presets */ if (strcmp(preset_name, "phone") == 0) { preset_name = "16"; mono = 1; } if ((strcmp(preset_name, "phon+") == 0) || (strcmp(preset_name, "lw") == 0) || (strcmp(preset_name, "mw-eu") == 0) || (strcmp(preset_name, "sw") == 0)) { preset_name = "24"; mono = 1; } if (strcmp(preset_name, "mw-us") == 0) { preset_name = "40"; mono = 1; } if (strcmp(preset_name, "voice") == 0) { preset_name = "56"; mono = 1; } if (strcmp(preset_name, "fm") == 0) { preset_name = "112"; } if ((strcmp(preset_name, "radio") == 0) || (strcmp(preset_name, "tape") == 0)) { preset_name = "112"; } if (strcmp(preset_name, "hifi") == 0) { preset_name = "160"; } if (strcmp(preset_name, "cd") == 0) { preset_name = "192"; } if (strcmp(preset_name, "studio") == 0) { preset_name = "256"; } if (strcmp(preset_name, "medium") == 0) { lame_set_VBR_q(gfp, 4); lame_set_VBR(gfp, vbr_default); return 0; } if (strcmp(preset_name, "standard") == 0) { lame_set_VBR_q(gfp, 2); lame_set_VBR(gfp, vbr_default); return 0; } else if (strcmp(preset_name, "extreme") == 0) { lame_set_VBR_q(gfp, 0); lame_set_VBR(gfp, vbr_default); return 0; } else if ((strcmp(preset_name, "insane") == 0) && (fast < 1)) { lame_set_preset(gfp, INSANE); return 0; } /* Generic ABR Preset */ if (((atoi(preset_name)) > 0) && (fast < 1)) { if ((atoi(preset_name)) >= 8 && (atoi(preset_name)) <= 320) { lame_set_preset(gfp, atoi(preset_name)); if (cbr == 1) lame_set_VBR(gfp, vbr_off); if (mono == 1) { lame_set_mode(gfp, MONO); } return 0; } else { lame_version_print(Console_IO.Error_fp); error_printf("Error: The bitrate specified is out of the valid range for this preset\n" "\n" "When using this mode you must enter a value between \"32\" and \"320\"\n" "\n" "For further information try: \"%s --preset help\"\n", ProgramName); return -1; } } lame_version_print(Console_IO.Error_fp); error_printf("Error: You did not enter a valid profile and/or options with --preset\n" "\n" "Available profiles are:\n" "\n" " medium\n" " standard\n" " extreme\n" " insane\n" " <cbr> (ABR Mode) - The ABR Mode is implied. To use it,\n" " simply specify a bitrate. For example:\n" " \"--preset 185\" activates this\n" " preset and uses 185 as an average kbps.\n" "\n"); error_printf(" Some examples:\n" "\n" " or \"%s --preset standard <input file> <output file>\"\n" " or \"%s --preset cbr 192 <input file> <output file>\"\n" " or \"%s --preset 172 <input file> <output file>\"\n" " or \"%s --preset extreme <input file> <output file>\"\n" "\n" "For further information try: \"%s --preset help\"\n", ProgramName, ProgramName, ProgramName, ProgramName, ProgramName); return -1; } static void genre_list_handler(int num, const char *name, void *cookie) { (void) cookie; console_printf("%3d %s\n", num, name); } /************************************************************************ * * parse_args * * PURPOSE: Sets encoding parameters to the specifications of the * command line. Default settings are used for parameters * not specified in the command line. * * If the input file is in WAVE or AIFF format, the sampling frequency is read * from the AIFF header. * * The input and output filenames are read into #inpath# and #outpath#. * ************************************************************************/ /* would use real "strcasecmp" but it isn't portable */ static int local_strcasecmp(const char *s1, const char *s2) { unsigned char c1; unsigned char c2; do { c1 = (unsigned char) tolower(*s1); c2 = (unsigned char) tolower(*s2); if (!c1) { break; } ++s1; ++s2; } while (c1 == c2); return c1 - c2; } static int local_strncasecmp(const char *s1, const char *s2, int n) { unsigned char c1 = 0; unsigned char c2 = 0; int cnt = 0; do { if (cnt == n) { break; } c1 = (unsigned char) tolower(*s1); c2 = (unsigned char) tolower(*s2); if (!c1) { break; } ++s1; ++s2; ++cnt; } while (c1 == c2); return c1 - c2; } /* LAME is a simple frontend which just uses the file extension */ /* to determine the file type. Trying to analyze the file */ /* contents is well beyond the scope of LAME and should not be added. */ static int filename_to_type(const char *FileName) { size_t len = strlen(FileName); if (len < 4) return sf_unknown; FileName += len - 4; if (0 == local_strcasecmp(FileName, ".mpg")) return sf_mp123; if (0 == local_strcasecmp(FileName, ".mp1")) return sf_mp123; if (0 == local_strcasecmp(FileName, ".mp2")) return sf_mp123; if (0 == local_strcasecmp(FileName, ".mp3")) return sf_mp123; if (0 == local_strcasecmp(FileName, ".wav")) return sf_wave; if (0 == local_strcasecmp(FileName, ".aif")) return sf_aiff; if (0 == local_strcasecmp(FileName, ".raw")) return sf_raw; if (0 == local_strcasecmp(FileName, ".ogg")) return sf_ogg; return sf_unknown; } static int resample_rate(double freq) { if (freq >= 1.e3) freq *= 1.e-3; switch ((int) freq) { case 8: return 8000; case 11: return 11025; case 12: return 12000; case 16: return 16000; case 22: return 22050; case 24: return 24000; case 32: return 32000; case 44: return 44100; case 48: return 48000; default: error_printf("Illegal resample frequency: %.3f kHz\n", freq); return 0; } } #ifdef _WIN32 #define SLASH '\\' #define COLON ':' #elif __OS2__ #define SLASH '\\' #else #define SLASH '/' #endif static size_t scanPath(char const* s, char const** a, char const** b) { char const* s1 = s; char const* s2 = s; if (s != 0) { for (; *s; ++s) { switch (*s) { case SLASH: #ifdef _WIN32 case COLON: #endif s2 = s; break; } } #ifdef _WIN32 if (*s2 == COLON) { ++s2; } #endif } if (a) { *a = s1; } if (b) { *b = s2; } return s2-s1; } static size_t scanBasename(char const* s, char const** a, char const** b) { char const* s1 = s; char const* s2 = s; if (s != 0) { for (; *s; ++s) { switch (*s) { case SLASH: #ifdef _WIN32 case COLON: #endif s1 = s2 = s; break; case '.': s2 = s; break; } } if (s2 == s1) { s2 = s; } if (*s1 == SLASH #ifdef _WIN32 || *s1 == COLON #endif ) { ++s1; } } if (a != 0) { *a = s1; } if (b != 0) { *b = s2; } return s2-s1; } static int isCommonSuffix(char const* s_ext) { char const* suffixes[] = { ".WAV", ".RAW", ".MP1", ".MP2" , ".MP3", ".MPG", ".MPA", ".CDA" , ".OGG", ".AIF", ".AIFF", ".AU" , ".SND", ".FLAC", ".WV", ".OFR" , ".TAK", ".MP4", ".M4A", ".PCM" , ".W64" }; size_t i; for (i = 0; i < dimension_of(suffixes); ++i) { if (local_strcasecmp(s_ext, suffixes[i]) == 0) { return 1; } } return 0; } int generateOutPath(char const* inPath, char const* outDir, char const* s_ext, char* outPath) { size_t const max_path = PATH_MAX; #if 1 size_t i = 0; int out_dir_used = 0; if (outDir != 0 && outDir[0] != 0) { out_dir_used = 1; while (*outDir) { outPath[i++] = *outDir++; if (i >= max_path) { goto err_generateOutPath; } } if (i > 0 && outPath[i-1] != SLASH) { outPath[i++] = SLASH; if (i >= max_path) { goto err_generateOutPath; } } outPath[i] = 0; } else { char const* pa; char const* pb; size_t j, n = scanPath(inPath, &pa, &pb); if (i+n >= max_path) { goto err_generateOutPath; } for (j = 0; j < n; ++j) { outPath[i++] = pa[j]; } if (n > 0) { outPath[i++] = SLASH; if (i >= max_path) { goto err_generateOutPath; } } outPath[i] = 0; } { int replace_suffix = 0; char const* na; char const* nb; size_t j, n = scanBasename(inPath, &na, &nb); if (i+n >= max_path) { goto err_generateOutPath; } for (j = 0; j < n; ++j) { outPath[i++] = na[j]; } outPath[i] = 0; if (isCommonSuffix(nb) == 1) { replace_suffix = 1; if (out_dir_used == 0) { if (local_strcasecmp(nb, s_ext) == 0) { replace_suffix = 0; } } } if (replace_suffix == 0) { while (*nb) { outPath[i++] = *nb++; if (i >= max_path) { goto err_generateOutPath; } } outPath[i] = 0; } } if (i+5 >= max_path) { goto err_generateOutPath; } while (*s_ext) { outPath[i++] = *s_ext++; } outPath[i] = 0; return 0; err_generateOutPath: error_printf( "error: output file name too long\n" ); return 1; #else strncpy(outPath, inPath, PATH_MAX + 1 - 4); strncat(outPath, s_ext, 4); return 0; #endif } static int set_id3_albumart(lame_t gfp, char const* file_name) { int ret = -1; FILE *fpi = 0; char *albumart = 0; if (file_name == 0) { return 0; } fpi = lame_fopen(file_name, "rb"); if (!fpi) { ret = 1; } else { size_t size; fseek(fpi, 0, SEEK_END); size = ftell(fpi); fseek(fpi, 0, SEEK_SET); albumart = (char *)malloc(size); if (!albumart) { ret = 2; } else { if (fread(albumart, 1, size, fpi) != size) { ret = 3; } else { ret = id3tag_set_albumart(gfp, albumart, size) ? 4 : 0; } free(albumart); } fclose(fpi); } switch (ret) { case 1: error_printf("Could not find: '%s'.\n", file_name); break; case 2: error_printf("Insufficient memory for reading the albumart.\n"); break; case 3: error_printf("Read error: '%s'.\n", file_name); break; case 4: error_printf("Unsupported image: '%s'.\nSpecify JPEG/PNG/GIF image\n", file_name); break; default: break; } return ret; } enum ID3TAG_MODE { ID3TAG_MODE_DEFAULT , ID3TAG_MODE_V1_ONLY , ID3TAG_MODE_V2_ONLY }; static int dev_only_with_arg(char const* str, char const* token, char const* nextArg, int* argIgnored, int* argUsed) { if (0 != local_strcasecmp(token,str)) return 0; *argUsed = 1; if (internal_opts_enabled) return 1; *argIgnored = 1; error_printf("WARNING: ignoring developer-only switch --%s %s\n", token, nextArg); return 0; } static int dev_only_without_arg(char const* str, char const* token, int* argIgnored) { if (0 != local_strcasecmp(token,str)) return 0; if (internal_opts_enabled) return 1; *argIgnored = 1; error_printf("WARNING: ignoring developer-only switch --%s\n", token); return 0; } /* Ugly, NOT final version */ #define T_IF(str) if ( 0 == local_strcasecmp (token,str) ) { #define T_ELIF(str) } else if ( 0 == local_strcasecmp (token,str) ) { #define T_ELIF2(str1,str2) } else if ( 0 == local_strcasecmp (token,str1) || 0 == local_strcasecmp (token,str2) ) { #define T_ELSE } else { #define T_END } #define T_ELIF_INTERNAL(str) \ } else if (dev_only_without_arg(str,token,&argIgnored)) { #define T_ELIF_INTERNAL_WITH_ARG(str) \ } else if (dev_only_with_arg(str,token,nextArg,&argIgnored,&argUsed)) { static int parse_args_(lame_global_flags * gfp, int argc, char **argv, char *const inPath, char *const outPath, char **nogap_inPath, int *num_nogap) { char outDir[PATH_MAX+1] = ""; int input_file = 0; /* set to 1 if we parse an input file name */ int i; int autoconvert = 0; int nogap = 0; int nogap_tags = 0; /* set to 1 to use VBR tags in NOGAP mode */ const char *ProgramName = argv[0]; int count_nogap = 0; int noreplaygain = 0; /* is RG explicitly disabled by the user */ int id3tag_mode = ID3TAG_MODE_DEFAULT; int ignore_tag_errors = 0; /* Ignore errors in values passed for tags */ #ifdef ID3TAGS_EXTENDED enum TextEncoding id3_tenc = TENC_UTF16; #else enum TextEncoding id3_tenc = TENC_LATIN1; #endif #ifdef HAVE_ICONV setlocale(LC_CTYPE, ""); #endif inPath[0] = '\0'; outPath[0] = '\0'; /* turn on display options. user settings may turn them off below */ global_ui_config.silent = 0; /* default */ global_ui_config.brhist = 1; global_decoder.mp3_delay = 0; global_decoder.mp3_delay_set = 0; global_decoder.disable_wav_header = 0; global_ui_config.print_clipping_info = 0; id3tag_init(gfp); /* process args */ for (i = 0; ++i < argc;) { char c; char *token; char *arg; char *nextArg; int argUsed; int argIgnored=0; token = argv[i]; if (*token++ == '-') { argUsed = 0; nextArg = i + 1 < argc ? argv[i + 1] : ""; if (!*token) { /* The user wants to use stdin and/or stdout. */ input_file = 1; if (inPath[0] == '\0') strncpy(inPath, argv[i], PATH_MAX + 1); else if (outPath[0] == '\0') strncpy(outPath, argv[i], PATH_MAX + 1); } if (*token == '-') { /* GNU style */ double double_value = 0; int int_value = 0; token++; T_IF("resample") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_out_samplerate(gfp, resample_rate(double_value)); T_ELIF("vbr-old") lame_set_VBR(gfp, vbr_rh); T_ELIF("vbr-new") lame_set_VBR(gfp, vbr_mt); T_ELIF("vbr-mtrh") lame_set_VBR(gfp, vbr_mtrh); T_ELIF("cbr") lame_set_VBR(gfp, vbr_off); T_ELIF("abr") /* values larger than 8000 are bps (like Fraunhofer), so it's strange to get 320000 bps MP3 when specifying 8000 bps MP3 */ argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) { if (int_value >= 8000) { int_value = (int_value + 500) / 1000; } if (int_value > 320) { int_value = 320; } if (int_value < 8) { int_value = 8; } lame_set_VBR(gfp, vbr_abr); lame_set_VBR_mean_bitrate_kbps(gfp, int_value); } T_ELIF("r3mix") lame_set_preset(gfp, R3MIX); T_ELIF("bitwidth") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) global_raw_pcm.in_bitwidth = int_value; T_ELIF("signed") global_raw_pcm.in_signed = 1; T_ELIF("unsigned") global_raw_pcm.in_signed = 0; T_ELIF("little-endian") global_raw_pcm.in_endian = ByteOrderLittleEndian; T_ELIF("big-endian") global_raw_pcm.in_endian = ByteOrderBigEndian; T_ELIF("mp1input") global_reader.input_format = sf_mp1; T_ELIF("mp2input") global_reader.input_format = sf_mp2; T_ELIF("mp3input") global_reader.input_format = sf_mp3; T_ELIF("ogginput") error_printf("sorry, vorbis support in LAME is deprecated.\n"); return -1; T_ELIF("decode") (void) lame_set_decode_only(gfp, 1); T_ELIF("flush") global_writer.flush_write = 1; T_ELIF("decode-mp3delay") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) { global_decoder.mp3_delay = int_value; global_decoder.mp3_delay_set = 1; } T_ELIF("nores") lame_set_disable_reservoir(gfp, 1); T_ELIF("strictly-enforce-ISO") lame_set_strict_ISO(gfp, MDB_STRICT_ISO); T_ELIF("buffer-constraint") argUsed = 1; if (strcmp(nextArg, "default") == 0) (void) lame_set_strict_ISO(gfp, MDB_DEFAULT); else if (strcmp(nextArg, "strict") == 0) (void) lame_set_strict_ISO(gfp, MDB_STRICT_ISO); else if (strcmp(nextArg, "maximum") == 0) (void) lame_set_strict_ISO(gfp, MDB_MAXIMUM); else { error_printf("unknown buffer constraint '%s'\n", nextArg); return -1; } T_ELIF("scale") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_scale(gfp, (float) double_value); T_ELIF("scale-l") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_scale_left(gfp, (float) double_value); T_ELIF("scale-r") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_scale_right(gfp, (float) double_value); T_ELIF("gain") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { double gain = double_value; gain = gain > -20.f ? gain : -20.f; gain = gain < 12.f ? gain : 12.f; gain = pow(10.f, gain*0.05); (void) lame_set_scale(gfp, (float) gain); } T_ELIF("noasm") argUsed = 1; if (!strcmp(nextArg, "mmx")) (void) lame_set_asm_optimizations(gfp, MMX, 0); if (!strcmp(nextArg, "3dnow")) (void) lame_set_asm_optimizations(gfp, AMD_3DNOW, 0); if (!strcmp(nextArg, "sse")) (void) lame_set_asm_optimizations(gfp, SSE, 0); T_ELIF("freeformat") lame_set_free_format(gfp, 1); T_ELIF("replaygain-fast") lame_set_findReplayGain(gfp, 1); #ifdef DECODE_ON_THE_FLY T_ELIF("replaygain-accurate") lame_set_decode_on_the_fly(gfp, 1); lame_set_findReplayGain(gfp, 1); #endif T_ELIF("noreplaygain") noreplaygain = 1; lame_set_findReplayGain(gfp, 0); #ifdef DECODE_ON_THE_FLY T_ELIF("clipdetect") global_ui_config.print_clipping_info = 1; lame_set_decode_on_the_fly(gfp, 1); #endif T_ELIF("nohist") global_ui_config.brhist = 0; #if defined(__OS2__) || defined(WIN32) T_ELIF("priority") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) setProcessPriority(int_value); #endif /* options for ID3 tag */ #ifdef ID3TAGS_EXTENDED T_ELIF2("id3v2-utf16","id3v2-ucs2") /* id3v2-ucs2 for compatibility only */ id3_tenc = TENC_UTF16; id3tag_add_v2(gfp); T_ELIF("id3v2-latin1") id3_tenc = TENC_LATIN1; id3tag_add_v2(gfp); #endif T_ELIF("tt") argUsed = 1; id3_tag(gfp, 't', id3_tenc, nextArg); T_ELIF("ta") argUsed = 1; id3_tag(gfp, 'a', id3_tenc, nextArg); T_ELIF("tl") argUsed = 1; id3_tag(gfp, 'l', id3_tenc, nextArg); T_ELIF("ty") argUsed = 1; id3_tag(gfp, 'y', id3_tenc, nextArg); T_ELIF("tc") argUsed = 1; id3_tag(gfp, 'c', id3_tenc, nextArg); T_ELIF("tn") int ret = id3_tag(gfp, 'n', id3_tenc, nextArg); argUsed = 1; if (ret != 0) { if (0 == ignore_tag_errors) { if (id3tag_mode == ID3TAG_MODE_V1_ONLY) { if (global_ui_config.silent < 9) { error_printf("The track number has to be between 1 and 255 for ID3v1.\n"); } return -1; } else if (id3tag_mode == ID3TAG_MODE_V2_ONLY) { /* track will be stored as-is in ID3v2 case, so no problem here */ } else { if (global_ui_config.silent < 9) { error_printf("The track number has to be between 1 and 255 for ID3v1, ignored for ID3v1.\n"); } } } } T_ELIF("tg") int ret = 0; argUsed = 1; if (nextArg != 0 && strlen(nextArg) > 0) { ret = id3_tag(gfp, 'g', id3_tenc, nextArg); } if (ret != 0) { if (0 == ignore_tag_errors) { if (ret == -1) { error_printf("Unknown ID3v1 genre number: '%s'.\n", nextArg); return -1; } else if (ret == -2) { if (id3tag_mode == ID3TAG_MODE_V1_ONLY) { error_printf("Unknown ID3v1 genre: '%s'.\n", nextArg); return -1; } else if (id3tag_mode == ID3TAG_MODE_V2_ONLY) { /* genre will be stored as-is in ID3v2 case, so no problem here */ } else { if (global_ui_config.silent < 9) { error_printf("Unknown ID3v1 genre: '%s'. Setting ID3v1 genre to 'Other'\n", nextArg); } } } else { if (global_ui_config.silent < 10) error_printf("Internal error.\n"); return -1; } } } T_ELIF("tv") argUsed = 1; if (id3_tag(gfp, 'v', id3_tenc, nextArg)) { if (global_ui_config.silent < 9) { error_printf("Invalid field value: '%s'. Ignored\n", nextArg); } } T_ELIF("ti") argUsed = 1; if (set_id3_albumart(gfp, nextArg) != 0) { if (! ignore_tag_errors) { return -1; } } T_ELIF("ignore-tag-errors") ignore_tag_errors = 1; T_ELIF("add-id3v2") id3tag_add_v2(gfp); T_ELIF("id3v1-only") id3tag_v1_only(gfp); id3tag_mode = ID3TAG_MODE_V1_ONLY; T_ELIF("id3v2-only") id3tag_v2_only(gfp); id3tag_mode = ID3TAG_MODE_V2_ONLY; T_ELIF("space-id3v1") id3tag_space_v1(gfp); T_ELIF("pad-id3v2") id3tag_pad_v2(gfp); T_ELIF("pad-id3v2-size") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) { int_value = int_value <= 128000 ? int_value : 128000; int_value = int_value >= 0 ? int_value : 0; id3tag_set_pad(gfp, int_value); } T_ELIF("genre-list") id3tag_genre_list(genre_list_handler, NULL); return -2; T_ELIF("lowpass") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { if (double_value < 0) { lame_set_lowpassfreq(gfp, -1); } else { /* useful are 0.001 kHz...50 kHz, 50 Hz...50000 Hz */ if (double_value < 0.001 || double_value > 50000.) { error_printf("Must specify lowpass with --lowpass freq, freq >= 0.001 kHz\n"); return -1; } lame_set_lowpassfreq(gfp, (int) (double_value * (double_value < 50. ? 1.e3 : 1.e0) + 0.5)); } } T_ELIF("lowpass-width") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ if (double_value < 0.001 || double_value > 50000.) { error_printf ("Must specify lowpass width with --lowpass-width freq, freq >= 0.001 kHz\n"); return -1; } lame_set_lowpasswidth(gfp, (int) (double_value * (double_value < 16. ? 1.e3 : 1.e0) + 0.5)); } T_ELIF("highpass") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { if (double_value < 0.0) { lame_set_highpassfreq(gfp, -1); } else { /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ if (double_value < 0.001 || double_value > 50000.) { error_printf("Must specify highpass with --highpass freq, freq >= 0.001 kHz\n"); return -1; } lame_set_highpassfreq(gfp, (int) (double_value * (double_value < 16. ? 1.e3 : 1.e0) + 0.5)); } } T_ELIF("highpass-width") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { /* useful are 0.001 kHz...16 kHz, 16 Hz...50000 Hz */ if (double_value < 0.001 || double_value > 50000.) { error_printf ("Must specify highpass width with --highpass-width freq, freq >= 0.001 kHz\n"); return -1; } lame_set_highpasswidth(gfp, (int) double_value); } T_ELIF("comp") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { if (double_value < 1.0) { error_printf("Must specify compression ratio >= 1.0\n"); return -1; } else { lame_set_compression_ratio(gfp, (float) double_value); } } /* some more GNU-ish options could be added * brief => few messages on screen (name, status report) * o/output file => specifies output filename * O => stdout * i/input file => specifies input filename * I => stdin */ T_ELIF("quiet") global_ui_config.silent = 10; /* on a scale from 1 to 10 be very silent */ T_ELIF("silent") global_ui_config.silent = 9; T_ELIF("brief") global_ui_config.silent = -5; /* print few info on screen */ T_ELIF("verbose") global_ui_config.silent = -10; /* print a lot on screen */ T_ELIF2("version", "license") print_license(stdout); return -2; T_ELIF2("help", "usage") if (0 == local_strncasecmp(nextArg, "id3", 3)) { help_id3tag(stdout); } else if (0 == local_strncasecmp(nextArg, "dev", 3)) { help_developer_switches(stdout); } else { short_help(gfp, stdout, ProgramName); } return -2; T_ELIF("longhelp") long_help(gfp, stdout, ProgramName, 0 /* lessmode=NO */ ); return -2; T_ELIF("?") #ifdef __unix__ FILE *fp = popen("less -Mqc", "w"); long_help(gfp, fp, ProgramName, 0 /* lessmode=NO */ ); pclose(fp); #else long_help(gfp, stdout, ProgramName, 1 /* lessmode=YES */ ); #endif return -2; T_ELIF2("preset", "alt-preset") argUsed = 1; { int fast = 0, cbr = 0; while ((strcmp(nextArg, "fast") == 0) || (strcmp(nextArg, "cbr") == 0)) { if ((strcmp(nextArg, "fast") == 0) && (fast < 1)) fast = 1; if ((strcmp(nextArg, "cbr") == 0) && (cbr < 1)) cbr = 1; argUsed++; nextArg = i + argUsed < argc ? argv[i + argUsed] : ""; } if (presets_set(gfp, fast, cbr, nextArg, ProgramName) < 0) return -1; } T_ELIF("disptime") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) global_ui_config.update_interval = (float) double_value; T_ELIF("nogaptags") nogap_tags = 1; T_ELIF("nogapout") int const arg_n = strnlen(nextArg, PATH_MAX); if (arg_n >= PATH_MAX) { error_printf("%s: %s argument length (%d) exceeds limit (%d)\n", ProgramName, token, arg_n, PATH_MAX); return -1; } strncpy(outPath, nextArg, PATH_MAX); outPath[PATH_MAX] = '\0'; argUsed = 1; T_ELIF("out-dir") int const arg_n = strnlen(nextArg, PATH_MAX); if (arg_n >= PATH_MAX) { error_printf("%s: %s argument length (%d) exceeds limit (%d)\n", ProgramName, token, arg_n, PATH_MAX); return -1; } strncpy(outDir, nextArg, PATH_MAX); outDir[PATH_MAX] = '\0'; argUsed = 1; T_ELIF("nogap") nogap = 1; T_ELIF("swap-channel") global_reader.swap_channel = 1; T_ELIF("ignorelength") global_reader.ignorewavlength = 1; T_ELIF ("athaa-sensitivity") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) lame_set_athaa_sensitivity(gfp, (float) double_value); /* ---------------- lots of dead switches ---------------- */ T_ELIF_INTERNAL("noshort") (void) lame_set_no_short_blocks(gfp, 1); T_ELIF_INTERNAL("short") (void) lame_set_no_short_blocks(gfp, 0); T_ELIF_INTERNAL("allshort") (void) lame_set_force_short_blocks(gfp, 1); T_ELIF_INTERNAL("notemp") (void) lame_set_useTemporal(gfp, 0); T_ELIF_INTERNAL_WITH_ARG("interch") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_interChRatio(gfp, (float) double_value); T_ELIF_INTERNAL_WITH_ARG("temporal-masking") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) (void) lame_set_useTemporal(gfp, int_value ? 1 : 0); T_ELIF_INTERNAL("nspsytune") ; T_ELIF_INTERNAL("nssafejoint") lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 2); T_ELIF_INTERNAL_WITH_ARG("nsmsfix") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_msfix(gfp, double_value); T_ELIF_INTERNAL_WITH_ARG("ns-bass") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { int k = (int) (double_value * 4); if (k < -32) k = -32; if (k > 31) k = 31; if (k < 0) k += 64; lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 2)); } T_ELIF_INTERNAL_WITH_ARG("ns-alto") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { int k = (int) (double_value * 4); if (k < -32) k = -32; if (k > 31) k = 31; if (k < 0) k += 64; lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 8)); } T_ELIF_INTERNAL_WITH_ARG("ns-treble") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { int k = (int) (double_value * 4); if (k < -32) k = -32; if (k > 31) k = 31; if (k < 0) k += 64; lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 14)); } T_ELIF_INTERNAL_WITH_ARG("ns-sfb21") /* to be compatible with Naoki's original code, * ns-sfb21 specifies how to change ns-treble for sfb21 */ argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) { int k = (int) (double_value * 4); if (k < -32) k = -32; if (k > 31) k = 31; if (k < 0) k += 64; lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | (k << 20)); } T_ELIF_INTERNAL_WITH_ARG("tune") /*without helptext */ argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) lame_set_tune(gfp, (float) double_value); T_ELIF_INTERNAL_WITH_ARG("shortthreshold") { float x, y; int n = sscanf(nextArg, "%f,%f", &x, &y); if (n == 1) { y = x; } (void) lame_set_short_threshold(gfp, x, y); } T_ELIF_INTERNAL_WITH_ARG("maskingadjust") /*without helptext */ argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_maskingadjust(gfp, (float) double_value); T_ELIF_INTERNAL_WITH_ARG("maskingadjustshort") /*without helptext */ argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_maskingadjust_short(gfp, (float) double_value); T_ELIF_INTERNAL_WITH_ARG("athcurve") /*without helptext */ argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_ATHcurve(gfp, (float) double_value); T_ELIF_INTERNAL("no-preset-tune") /*without helptext */ (void) lame_set_preset_notune(gfp, 0); T_ELIF_INTERNAL_WITH_ARG("substep") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) (void) lame_set_substep(gfp, int_value); T_ELIF_INTERNAL_WITH_ARG("sbgain") /*without helptext */ argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) (void) lame_set_subblock_gain(gfp, int_value); T_ELIF_INTERNAL("sfscale") /*without helptext */ (void) lame_set_sfscale(gfp, 1); T_ELIF_INTERNAL("noath") (void) lame_set_noATH(gfp, 1); T_ELIF_INTERNAL("athonly") (void) lame_set_ATHonly(gfp, 1); T_ELIF_INTERNAL("athshort") (void) lame_set_ATHshort(gfp, 1); T_ELIF_INTERNAL_WITH_ARG("athlower") argUsed = getDoubleValue(token, nextArg, &double_value); if (argUsed) (void) lame_set_ATHlower(gfp, (float) double_value); T_ELIF_INTERNAL_WITH_ARG("athtype") argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) (void) lame_set_ATHtype(gfp, int_value); T_ELIF_INTERNAL_WITH_ARG("athaa-type") /* switch for developing, no DOCU */ /* once was 1:Gaby, 2:Robert, 3:Jon, else:off */ argUsed = getIntValue(token, nextArg, &int_value); if (argUsed) (void) lame_set_athaa_type(gfp, int_value); /* now: 0:off else:Jon */ T_ELIF_INTERNAL_WITH_ARG("debug-file") /* switch for developing, no DOCU */ /* file name to print debug info into */ set_debug_file(nextArg); T_ELSE { if (!argIgnored) { error_printf("%s: unrecognized option --%s\n", ProgramName, token); return -1; } argIgnored = 0; } T_END i += argUsed; } else { while ((c = *token++) != '\0') { double double_value = 0; int int_value = 0; arg = *token ? token : nextArg; switch (c) { case 'm': argUsed = 1; switch (*arg) { case 's': (void) lame_set_mode(gfp, STEREO); break; case 'd': (void) lame_set_mode(gfp, DUAL_CHANNEL); break; case 'f': lame_set_force_ms(gfp, 1); (void) lame_set_mode(gfp, JOINT_STEREO); break; case 'j': lame_set_force_ms(gfp, 0); (void) lame_set_mode(gfp, JOINT_STEREO); break; case 'm': (void) lame_set_mode(gfp, MONO); break; case 'l': (void) lame_set_mode(gfp, MONO); (void) lame_set_scale_left(gfp, 2); (void) lame_set_scale_right(gfp, 0); break; case 'r': (void) lame_set_mode(gfp, MONO); (void) lame_set_scale_left(gfp, 0); (void) lame_set_scale_right(gfp, 2); break; case 'a': /* same as 'j' ??? */ lame_set_force_ms(gfp, 0); (void) lame_set_mode(gfp, JOINT_STEREO); break; default: error_printf("%s: -m mode must be s/d/f/j/m/l/r not %s\n", ProgramName, arg); return -1; } break; case 'V': argUsed = getDoubleValue("V", arg, &double_value); if (argUsed) { /* to change VBR default look in lame.h */ if (lame_get_VBR(gfp) == vbr_off) lame_set_VBR(gfp, vbr_default); lame_set_VBR_quality(gfp, (float) double_value); } break; case 'v': /* to change VBR default look in lame.h */ if (lame_get_VBR(gfp) == vbr_off) lame_set_VBR(gfp, vbr_default); break; case 'q': argUsed = getIntValue("q", arg, &int_value); if (argUsed) (void) lame_set_quality(gfp, int_value); break; case 'f': (void) lame_set_quality(gfp, 7); break; case 'h': (void) lame_set_quality(gfp, 2); break; case 's': argUsed = getDoubleValue("s", arg, &double_value); if (argUsed) { double_value = (int) (double_value * (double_value <= 192 ? 1.e3 : 1.e0) + 0.5); global_reader.input_samplerate = (int)double_value; (void) lame_set_in_samplerate(gfp, (int)double_value); } break; case 'b': argUsed = getIntValue("b", arg, &int_value); if (argUsed) { lame_set_brate(gfp, int_value); lame_set_VBR_min_bitrate_kbps(gfp, lame_get_brate(gfp)); } break; case 'B': argUsed = getIntValue("B", arg, &int_value); if (argUsed) { lame_set_VBR_max_bitrate_kbps(gfp, int_value); } break; case 'F': lame_set_VBR_hard_min(gfp, 1); break; case 't': /* dont write VBR tag */ (void) lame_set_bWriteVbrTag(gfp, 0); global_decoder.disable_wav_header = 1; break; case 'T': /* do write VBR tag */ (void) lame_set_bWriteVbrTag(gfp, 1); nogap_tags = 1; global_decoder.disable_wav_header = 0; break; case 'r': /* force raw pcm input file */ #if defined(LIBSNDFILE) error_printf ("WARNING: libsndfile may ignore -r and perform fseek's on the input.\n" "Compile without libsndfile if this is a problem.\n"); #endif global_reader.input_format = sf_raw; break; case 'x': /* force byte swapping */ global_reader.swapbytes = 1; break; case 'p': /* (jo) error_protection: add crc16 information to stream */ lame_set_error_protection(gfp, 1); break; case 'a': /* autoconvert input file from stereo to mono - for mono mp3 encoding */ autoconvert = 1; (void) lame_set_mode(gfp, MONO); break; case 'd': /*(void) lame_set_allow_diff_short( gfp, 1 ); */ case 'k': /*lame_set_lowpassfreq(gfp, -1); lame_set_highpassfreq(gfp, -1); */ error_printf("WARNING: -%c is obsolete.\n", c); break; case 'S': global_ui_config.silent = 5; break; case 'X': /* experimental switch -X: the differnt types of quant compare are tough to communicate to endusers, so they shouldn't bother to toy around with them */ { int x, y; int n = sscanf(arg, "%d,%d", &x, &y); if (n == 1) { y = x; } argUsed = 1; if (internal_opts_enabled) { lame_set_quant_comp(gfp, x); lame_set_quant_comp_short(gfp, y); } } break; case 'Y': lame_set_experimentalY(gfp, 1); break; case 'Z': /* experimental switch -Z: */ { int n = 1; argUsed = sscanf(arg, "%d", &n); /*if (internal_opts_enabled)*/ { lame_set_experimentalZ(gfp, n); } } break; case 'e': argUsed = 1; switch (*arg) { case 'n': lame_set_emphasis(gfp, 0); break; case '5': lame_set_emphasis(gfp, 1); break; case 'c': lame_set_emphasis(gfp, 3); break; default: error_printf("%s: -e emp must be n/5/c not %s\n", ProgramName, arg); return -1; } break; case 'c': lame_set_copyright(gfp, 1); break; case 'o': lame_set_original(gfp, 0); break; case '?': long_help(gfp, stdout, ProgramName, 0 /* LESSMODE=NO */ ); return -1; default: error_printf("%s: unrecognized option -%c\n", ProgramName, c); return -1; } if (argUsed) { if (arg == token) token = ""; /* no more from token */ else ++i; /* skip arg we used */ arg = ""; argUsed = 0; } } } } else { if (nogap) { if ((num_nogap != NULL) && (count_nogap < *num_nogap)) { strncpy(nogap_inPath[count_nogap++], argv[i], PATH_MAX + 1); input_file = 1; } else { /* sorry, calling program did not allocate enough space */ error_printf ("Error: 'nogap option'. Calling program does not allow nogap option, or\n" "you have exceeded maximum number of input files for the nogap option\n"); *num_nogap = -1; return -1; } } else { /* normal options: inputfile [outputfile], and either one can be a '-' for stdin/stdout */ if (inPath[0] == '\0') { strncpy(inPath, argv[i], PATH_MAX + 1); input_file = 1; } else { if (outPath[0] == '\0') strncpy(outPath, argv[i], PATH_MAX + 1); else { error_printf("%s: excess arg %s\n", ProgramName, argv[i]); return -1; } } } } } /* loop over args */ if (!input_file) { usage(Console_IO.Console_fp, ProgramName); return -1; } if (lame_get_decode_only(gfp) && count_nogap > 0) { error_printf("combination of nogap and decode not supported!\n"); return -1; } if (inPath[0] == '-') { if (global_ui_config.silent == 0) { /* user didn't overrule default behaviour */ global_ui_config.silent = 1; } } #ifdef WIN32 else dosToLongFileName(inPath); #endif if (outPath[0] == '\0') { /* no explicit output dir or file */ if (count_nogap > 0) { /* in case of nogap encode */ strncpy(outPath, outDir, PATH_MAX); outPath[PATH_MAX] = '\0'; /* whatever someone set via --out-dir <path> argument */ } else if (inPath[0] == '-') { /* if input is stdin, default output is stdout */ strcpy(outPath, "-"); } else { char const* s_ext = lame_get_decode_only(gfp) ? ".wav" : ".mp3"; if (generateOutPath(inPath, outDir, s_ext, outPath) != 0) { return -1; } } } /* RG is enabled by default */ if (!noreplaygain) lame_set_findReplayGain(gfp, 1); /* disable VBR tags with nogap unless the VBR tags are forced */ if (nogap && lame_get_bWriteVbrTag(gfp) && nogap_tags == 0) { console_printf("Note: Disabling VBR Xing/Info tag since it interferes with --nogap\n"); lame_set_bWriteVbrTag(gfp, 0); } /* some file options not allowed with stdout */ if (outPath[0] == '-') { (void) lame_set_bWriteVbrTag(gfp, 0); /* turn off VBR tag */ } /* if user did not explicitly specify input is mp3, check file name */ if (global_reader.input_format == sf_unknown) global_reader.input_format = filename_to_type(inPath); #if !(defined HAVE_MPGLIB || defined AMIGA_MPEGA) if (is_mpeg_file_format(global_reader.input_format)) { error_printf("Error: libmp3lame not compiled with mpg123 *decoding* support \n"); return -1; } #endif /* default guess for number of channels */ if (autoconvert) (void) lame_set_num_channels(gfp, 2); else if (MONO == lame_get_mode(gfp)) (void) lame_set_num_channels(gfp, 1); else (void) lame_set_num_channels(gfp, 2); if (lame_get_free_format(gfp)) { if (lame_get_brate(gfp) < 8 || lame_get_brate(gfp) > 640) { error_printf("For free format, specify a bitrate between 8 and 640 kbps\n"); error_printf("with the -b <bitrate> option\n"); return -1; } } if (num_nogap != NULL) *num_nogap = count_nogap; return 0; } static int string_to_argv(char* str, char** argv, int N) { int argc = 0; if (str == 0) return argc; argv[argc++] = "lhama"; for (;;) { int quoted = 0; while (isspace(*str)) { /* skip blanks */ ++str; } if (*str == '\"') { /* is quoted argument ? */ quoted = 1; ++str; } if (*str == '\0') { /* end of string reached */ break; } /* found beginning of some argument */ if (argc < N) { argv[argc++] = str; } /* look out for end of argument, either end of string, blank or quote */ for(; *str != '\0'; ++str) { if (quoted) { if (*str == '\"') { /* end of quotation reached */ *str++ = '\0'; break; } } else { if (isspace(*str)) { /* parameter separator reached */ *str++ = '\0'; break; } } } } return argc; } static int merge_argv(int argc, char** argv, int str_argc, char** str_argv, int N) { int i; if (argc > 0) { str_argv[0] = argv[0]; if (str_argc < 1) str_argc = 1; } for (i = 1; i < argc; ++i) { int j = str_argc + i - 1; if (j < N) { str_argv[j] = argv[i]; } } return argc + str_argc - 1; } #ifdef DEBUG static void dump_argv(int argc, char** argv) { int i; for (i = 0; i < argc; ++i) { printf("%d: \"%s\"\n",i,argv[i]); } } #endif int parse_args(lame_t gfp, int argc, char **argv, char *const inPath, char *const outPath, char **nogap_inPath, int *num_nogap) { char *str_argv[512], *str; int str_argc, ret; str = lame_getenv("LAMEOPT"); str_argc = string_to_argv(str, str_argv, dimension_of(str_argv)); str_argc = merge_argv(argc, argv, str_argc, str_argv, dimension_of(str_argv)); #ifdef DEBUG dump_argv(str_argc, str_argv); #endif ret = parse_args_(gfp, str_argc, str_argv, inPath, outPath, nogap_inPath, num_nogap); free(str); return ret; } /* end of parse.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/rtp.c���������������������������������������������������������������������������000644 �001751 �001751 �00000021613 11561266675 016675� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * rtp socket communication functions * * initially contributed by Felix von Leitner * * Copyright (c) 2000 Mark Taylor * 2010 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: rtp.c,v 1.24 2011/05/07 16:05:17 rbrito Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif struct rtpbits { int sequence:16; /* sequence number: random */ int pt:7; /* payload type: 14 for MPEG audio */ int m:1; /* marker: 0 */ int cc:4; /* number of CSRC identifiers: 0 */ int x:1; /* number of extension headers: 0 */ int p:1; /* is there padding appended: 0 */ int v:2; /* version: 2 */ }; struct rtpheader { /* in network byte order */ struct rtpbits b; int timestamp; /* start: random */ int ssrc; /* random */ int iAudioHeader; /* =0?! */ }; #if !defined( _WIN32 ) && !defined(__MINGW32__) #ifdef STDC_HEADERS # include <stdio.h> # include <stdarg.h> # include <stdlib.h> # include <string.h> #else # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #include <sys/types.h> #include <sys/socket.h> #ifdef __int8_t_defined #undef uint8_t #undef uint16_t #undef uint32_t #undef uint64_t #endif #include <netinet/in.h> #include <arpa/inet.h> #ifdef WITH_DMALLOC #include <dmalloc.h> #endif #include "rtp.h" #include "console.h" typedef int SOCKET; struct rtpheader RTPheader; SOCKET rtpsocket; /* create a sender socket. */ int rtp_socket(char const *address, unsigned int port, unsigned int TTL) { int iRet, iLoop = 1; struct sockaddr_in sin; unsigned char cTtl = TTL; char cLoop = 0; unsigned int tempaddr; int iSocket = socket(AF_INET, SOCK_DGRAM, 0); if (iSocket < 0) { error_printf("socket() failed.\n"); return 1; } memset(&sin, 0, sizeof(sin)); tempaddr = inet_addr(address); sin.sin_family = AF_INET; sin.sin_port = htons(port); sin.sin_addr.s_addr = tempaddr; iRet = setsockopt(iSocket, SOL_SOCKET, SO_REUSEADDR, &iLoop, sizeof(int)); if (iRet < 0) { error_printf("setsockopt SO_REUSEADDR failed\n"); return 1; } if ((ntohl(tempaddr) >> 28) == 0xe) { /* only set multicast parameters for multicast destination IPs */ iRet = setsockopt(iSocket, IPPROTO_IP, IP_MULTICAST_TTL, &cTtl, sizeof(char)); if (iRet < 0) { error_printf("setsockopt IP_MULTICAST_TTL failed. multicast in kernel?\n"); return 1; } cLoop = 1; /* !? */ iRet = setsockopt(iSocket, IPPROTO_IP, IP_MULTICAST_LOOP, &cLoop, sizeof(char)); if (iRet < 0) { error_printf("setsockopt IP_MULTICAST_LOOP failed. multicast in kernel?\n"); return 1; } } iRet = connect(iSocket, (struct sockaddr *) &sin, sizeof(struct sockaddr_in)); if (iRet < 0) { error_printf("connect IP_MULTICAST_LOOP failed. multicast in kernel?\n"); return 1; } rtpsocket = iSocket; return 0; } static void rtp_initialization_extra(void) { } static void rtp_close_extra(void) { } #else #include <Winsock2.h> #ifndef IP_MULTICAST_TTL #define IP_MULTICAST_TTL 3 #endif #include <stdio.h> #include <stdarg.h> #include "rtp.h" #include "console.h" struct rtpheader RTPheader; SOCKET rtpsocket; static char * last_error_message(int err_code) { char *msg; void *p_msg_buf; FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER, (void *) 0, (DWORD) err_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) & p_msg_buf, 0, NULL); msg = strdup(p_msg_buf); LocalFree(p_msg_buf); return msg; } static int print_socket_error(int error) { char *err_txt = last_error_message(error); error_printf("error %d\n%s\n", error, err_txt); free(err_txt); return error; } static int on_socket_error(SOCKET s) { int error = WSAGetLastError(); print_socket_error(error); if (s != INVALID_SOCKET) { closesocket(s); } return error; } /* create a sender socket. */ int rtp_socket(char const *address, unsigned int port, unsigned int TTL) { char const True = 1; char const *c = ""; int error; UINT ip; PHOSTENT host; SOCKET s; SOCKADDR_IN source, dest; source.sin_family = AF_INET; source.sin_addr.s_addr = htonl(INADDR_ANY); source.sin_port = htons(0); dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(address); if (!strcmp(address, "255.255.255.255")) { } else if (dest.sin_addr.s_addr == INADDR_NONE) { host = gethostbyname(address); if (host) { dest.sin_addr = *(PIN_ADDR) host->h_addr; } else { error_printf("Unknown host %s\r\n", address); return 1; } } dest.sin_port = htons((u_short) port); ip = ntohl(dest.sin_addr.s_addr); if (IN_CLASSA(ip)) c = "class A"; if (IN_CLASSB(ip)) c = "class B"; if (IN_CLASSC(ip)) c = "class C"; if (IN_CLASSD(ip)) c = "class D"; if (ip == INADDR_LOOPBACK) c = "loopback"; if (ip == INADDR_BROADCAST) c = "broadcast"; s = socket(AF_INET, SOCK_DGRAM, PF_UNSPEC); if (s == INVALID_SOCKET) { error_printf("socket () "); return on_socket_error(s); } error = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &True, sizeof(True)); error = bind(s, (struct sockaddr *) &source, sizeof(source)); if (error == SOCKET_ERROR) { error_printf("bind () "); return on_socket_error(s); } if (ip == INADDR_BROADCAST) { error_printf("broadcast %s:%u %s\r\n", inet_ntoa(dest.sin_addr), ntohs(dest.sin_port), c); error = setsockopt(s, SOL_SOCKET, SO_BROADCAST, &True, sizeof(True)); if (error == SOCKET_ERROR) { error_printf("setsockopt (%u, SOL_SOCKET, SO_BROADCAST, ...) ", s); return on_socket_error(s); } } if (IN_CLASSD(ip)) { error_printf("multicast %s:%u %s\r\n", inet_ntoa(dest.sin_addr), ntohs(dest.sin_port), c); error = setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (const char *) &TTL, sizeof(TTL)); if (error == SOCKET_ERROR) { error_printf("setsockopt (%u, IPPROTO_IP, IP_MULTICAST_TTL, ...) ", s); return on_socket_error(s); } } error = connect(s, (PSOCKADDR) & dest, sizeof(SOCKADDR_IN)); if (error == SOCKET_ERROR) { error_printf("connect: "); return on_socket_error(s); } rtpsocket = s; return 0; } static void rtp_initialization_extra(void) { WSADATA wsaData; int rc = WSAStartup(MAKEWORD(2, 2), &wsaData); if (rc != 0) { print_socket_error(rc); } } static void rtp_close_extra(void) { WSACleanup(); } #endif static int rtp_send(unsigned char const *data, int len) { SOCKET s = rtpsocket; struct rtpheader *foo = &RTPheader; char *buffer = malloc(len + sizeof(struct rtpheader)); int *cast = (int *) foo; int *outcast = (int *) buffer; int count, size; outcast[0] = htonl(cast[0]); outcast[1] = htonl(cast[1]); outcast[2] = htonl(cast[2]); outcast[3] = htonl(cast[3]); memmove(buffer + sizeof(struct rtpheader), data, len); size = len + sizeof(*foo); count = send(s, buffer, size, 0); free(buffer); return count != size; } void rtp_output(unsigned char const *mp3buffer, int mp3size) { rtp_send(mp3buffer, mp3size); RTPheader.timestamp += 5; RTPheader.b.sequence++; } void rtp_initialization(void) { struct rtpheader *foo = &RTPheader; foo->b.v = 2; foo->b.p = 0; foo->b.x = 0; foo->b.cc = 0; foo->b.m = 0; foo->b.pt = 14; /* MPEG Audio */ foo->b.sequence = rand() & 65535; foo->timestamp = rand(); foo->ssrc = rand(); foo->iAudioHeader = 0; rtp_initialization_extra(); } void rtp_deinitialization(void) { rtp_close_extra(); } ���������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/lame_main.c���������������������������������������������������������������������000644 �001751 �001751 �00000051573 13154046617 020012� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Command line frontend program * * Copyright (c) 1999 Mark Taylor * 2000 Takehiro TOMINAGA * 2010-2017 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: lame_main.c,v 1.18 2017/08/31 14:14:46 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include <stdio.h> #ifdef STDC_HEADERS # include <stdlib.h> # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #ifdef __sun__ /* woraround for SunOS 4.x, it has SEEK_* defined here */ #include <unistd.h> #endif #if defined(_WIN32) # include <windows.h> #endif /* main.c is example code for how to use libmp3lame.a. To use this library, you only need the library and lame.h. All other .h files are private to the library. */ #include "lame.h" #include "console.h" #include "parse.h" #include "main.h" #include "get_audio.h" #include "timestatus.h" /* PLL 14/04/2000 */ #if macintosh #include <console.h> #endif #ifdef WITH_DMALLOC #include <dmalloc.h> #endif /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ static FILE * init_files(lame_global_flags * gf, char const *inPath, char const *outPath) { FILE *outf; /* Mostly it is not useful to use the same input and output name. This test is very easy and buggy and don't recognize different names assigning the same file */ if (0 != strcmp("-", outPath) && 0 == strcmp(inPath, outPath)) { error_printf("Input file and Output file are the same. Abort.\n"); return NULL; } /* open the wav/aiff/raw pcm or mp3 input file. This call will * open the file, try to parse the headers and * set gf.samplerate, gf.num_channels, gf.num_samples. * if you want to do your own file input, skip this call and set * samplerate, num_channels and num_samples yourself. */ if (init_infile(gf, inPath) < 0) { error_printf("Can't init infile '%s'\n", inPath); return NULL; } if ((outf = init_outfile(outPath, lame_get_decode_only(gf))) == NULL) { error_printf("Can't init outfile '%s'\n", outPath); return NULL; } return outf; } static void printInputFormat(lame_t gfp) { int const v_main = 2 - lame_get_version(gfp); char const *v_ex = lame_get_out_samplerate(gfp) < 16000 ? ".5" : ""; switch (global_reader.input_format) { case sf_mp123: /* FIXME: !!! */ break; case sf_mp3: console_printf("MPEG-%u%s Layer %s", v_main, v_ex, "III"); break; case sf_mp2: console_printf("MPEG-%u%s Layer %s", v_main, v_ex, "II"); break; case sf_mp1: console_printf("MPEG-%u%s Layer %s", v_main, v_ex, "I"); break; case sf_raw: console_printf("raw PCM data"); break; case sf_wave: console_printf("Microsoft WAVE"); break; case sf_aiff: console_printf("SGI/Apple AIFF"); break; default: console_printf("unknown"); break; } } /* the simple lame decoder */ /* After calling lame_init(), lame_init_params() and * init_infile(), call this routine to read the input MP3 file * and output .wav data to the specified file pointer*/ /* lame_decoder will ignore the first 528 samples, since these samples * represent the mpglib delay (and are all 0). skip = number of additional * samples to skip, to (for example) compensate for the encoder delay */ static int lame_decoder_loop(lame_t gfp, FILE * outf, char *inPath, char *outPath) { short int Buffer[2][1152]; int i, iread; double wavsize; int tmp_num_channels = lame_get_num_channels(gfp); int skip_start = samples_to_skip_at_start(); int skip_end = samples_to_skip_at_end(); DecoderProgress dp = 0; if (!(tmp_num_channels >= 1 && tmp_num_channels <= 2)) { error_printf("Internal error. Aborting."); return -1; } if (global_ui_config.silent < 9) { console_printf("\rinput: %s%s(%g kHz, %i channel%s, ", strcmp(inPath, "-") ? inPath : "<stdin>", strlen(inPath) > 26 ? "\n\t" : " ", lame_get_in_samplerate(gfp) / 1.e3, tmp_num_channels, tmp_num_channels != 1 ? "s" : ""); printInputFormat(gfp); console_printf(")\noutput: %s%s(16 bit, Microsoft WAVE)\n", strcmp(outPath, "-") ? outPath : "<stdout>", strlen(outPath) > 45 ? "\n\t" : " "); if (skip_start > 0) console_printf("skipping initial %i samples (encoder+decoder delay)\n", skip_start); if (skip_end > 0) console_printf("skipping final %i samples (encoder padding-decoder delay)\n", skip_end); switch (global_reader.input_format) { case sf_mp3: case sf_mp2: case sf_mp1: dp = decoder_progress_init(lame_get_num_samples(gfp), global_decoder.mp3input_data.framesize); break; case sf_raw: case sf_wave: case sf_aiff: default: dp = decoder_progress_init(lame_get_num_samples(gfp), lame_get_in_samplerate(gfp) < 32000 ? 576 : 1152); break; } } if (0 == global_decoder.disable_wav_header) WriteWaveHeader(outf, 0x7FFFFFFF, lame_get_in_samplerate(gfp), tmp_num_channels, 16); /* unknown size, so write maximum 32 bit signed value */ wavsize = 0; do { iread = get_audio16(gfp, Buffer); /* read in 'iread' samples */ if (iread >= 0) { wavsize += iread; if (dp != 0) { decoder_progress(dp, &global_decoder.mp3input_data, iread); } put_audio16(outf, Buffer, iread, tmp_num_channels); } } while (iread > 0); i = (16 / 8) * tmp_num_channels; assert(i > 0); if (wavsize <= 0) { if (global_ui_config.silent < 10) error_printf("WAVE file contains 0 PCM samples\n"); wavsize = 0; } else if (wavsize > 0xFFFFFFD0 / i) { if (global_ui_config.silent < 10) error_printf("Very huge WAVE file, can't set filesize accordingly\n"); wavsize = 0xFFFFFFD0; } else { wavsize *= i; } /* if outf is seekable, rewind and adjust length */ if (!global_decoder.disable_wav_header && strcmp("-", outPath) && !fseek(outf, 0l, SEEK_SET)) WriteWaveHeader(outf, (int) wavsize, lame_get_in_samplerate(gfp), tmp_num_channels, 16); if (dp != 0) decoder_progress_finish(dp); return 0; } static int lame_decoder(lame_t gfp, FILE * outf, char *inPath, char *outPath) { int ret; ret = lame_decoder_loop(gfp, outf, inPath, outPath); fclose(outf); /* close the output file */ close_infile(); /* close the input file */ return ret; } static void print_trailing_info(lame_global_flags * gf) { if (lame_get_findReplayGain(gf)) { int RadioGain = lame_get_RadioGain(gf); console_printf("ReplayGain: %s%.1fdB\n", RadioGain > 0 ? "+" : "", ((float) RadioGain) / 10.0); if (RadioGain > 0x1FE || RadioGain < -0x1FE) error_printf ("WARNING: ReplayGain exceeds the -51dB to +51dB range. Such a result is too\n" " high to be stored in the header.\n"); } /* if (the user requested printing info about clipping) and (decoding on the fly has actually been performed) */ if (global_ui_config.print_clipping_info && lame_get_decode_on_the_fly(gf)) { float noclipGainChange = (float) lame_get_noclipGainChange(gf) / 10.0f; float noclipScale = lame_get_noclipScale(gf); if (noclipGainChange > 0.0) { /* clipping occurs */ console_printf ("WARNING: clipping occurs at the current gain. Set your decoder to decrease\n" " the gain by at least %.1fdB or encode again ", noclipGainChange); /* advice the user on the scale factor */ if (noclipScale > 0) { console_printf("using --scale %.2f\n", noclipScale * lame_get_scale(gf)); console_printf(" or less (the value under --scale is approximate).\n"); } else { /* the user specified his own scale factor. We could suggest * the scale factor of (32767.0/gfp->PeakSample)*(gfp->scale) * but it's usually very inaccurate. So we'd rather advice him to * disable scaling first and see our suggestion on the scale factor then. */ console_printf("using --scale <arg>\n" " (For a suggestion on the optimal value of <arg> encode\n" " with --scale 1 first)\n"); } } else { /* no clipping */ if (noclipGainChange > -0.1) console_printf ("\nThe waveform does not clip and is less than 0.1dB away from full scale.\n"); else console_printf ("\nThe waveform does not clip and is at least %.1fdB away from full scale.\n", -noclipGainChange); } } } static int write_xing_frame(lame_global_flags * gf, FILE * outf, size_t offset) { unsigned char mp3buffer[LAME_MAXMP3BUFFER]; size_t imp3, owrite; imp3 = lame_get_lametag_frame(gf, mp3buffer, sizeof(mp3buffer)); if (imp3 <= 0) { return 0; /* nothing to do */ } if (global_ui_config.silent <= 0) { console_printf("Writing LAME Tag..."); } if (imp3 > sizeof(mp3buffer)) { error_printf ("Error writing LAME-tag frame: buffer too small: buffer size=%d frame size=%d\n", sizeof(mp3buffer), imp3); return -1; } assert( offset <= LONG_MAX ); if (fseek(outf, (long) offset, SEEK_SET) != 0) { error_printf("fatal error: can't update LAME-tag frame!\n"); return -1; } owrite = fwrite(mp3buffer, 1, imp3, outf); if (owrite != imp3) { error_printf("Error writing LAME-tag \n"); return -1; } if (global_ui_config.silent <= 0) { console_printf("done\n"); } assert( imp3 <= INT_MAX ); return (int) imp3; } static int write_id3v1_tag(lame_t gf, FILE * outf) { unsigned char mp3buffer[128]; size_t imp3, owrite; imp3 = lame_get_id3v1_tag(gf, mp3buffer, sizeof(mp3buffer)); if (imp3 <= 0) { return 0; } if (imp3 > sizeof(mp3buffer)) { error_printf("Error writing ID3v1 tag: buffer too small: buffer size=%d ID3v1 size=%d\n", sizeof(mp3buffer), imp3); return 0; /* not critical */ } owrite = fwrite(mp3buffer, 1, imp3, outf); if (owrite != imp3) { error_printf("Error writing ID3v1 tag \n"); return 1; } return 0; } static int lame_encoder_loop(lame_global_flags * gf, FILE * outf, int nogap, char *inPath, char *outPath) { unsigned char mp3buffer[LAME_MAXMP3BUFFER]; int Buffer[2][1152]; int iread, imp3, owrite, in_limit=0; size_t id3v2_size; encoder_progress_begin(gf, inPath, outPath); id3v2_size = lame_get_id3v2_tag(gf, 0, 0); if (id3v2_size > 0) { unsigned char *id3v2tag = malloc(id3v2_size); if (id3v2tag != 0) { size_t n_bytes = lame_get_id3v2_tag(gf, id3v2tag, id3v2_size); size_t written = fwrite(id3v2tag, 1, n_bytes, outf); free(id3v2tag); if (written != n_bytes) { encoder_progress_end(gf); error_printf("Error writing ID3v2 tag \n"); return 1; } } } else { unsigned char* id3v2tag = getOldTag(gf); id3v2_size = sizeOfOldTag(gf); if ( id3v2_size > 0 ) { size_t owrite = fwrite(id3v2tag, 1, id3v2_size, outf); if (owrite != id3v2_size) { encoder_progress_end(gf); error_printf("Error writing ID3v2 tag \n"); return 1; } } } if (global_writer.flush_write == 1) { fflush(outf); } /* do not feed more than in_limit PCM samples in one encode call otherwise the mp3buffer is likely too small */ in_limit = lame_get_maximum_number_of_samples(gf, sizeof(mp3buffer)); if (in_limit < 1) in_limit = 1; /* encode until we hit eof */ do { /* read in 'iread' samples */ iread = get_audio(gf, Buffer); if (iread >= 0) { const int* buffer_l = Buffer[0]; const int* buffer_r = Buffer[1]; int rest = iread; do { int const chunk = rest < in_limit ? rest : in_limit; encoder_progress(gf); /* encode */ imp3 = lame_encode_buffer_int(gf, buffer_l, buffer_r, chunk, mp3buffer, sizeof(mp3buffer)); buffer_l += chunk; buffer_r += chunk; rest -= chunk; /* was our output buffer big enough? */ if (imp3 < 0) { if (imp3 == -1) error_printf("mp3 buffer is not big enough... \n"); else error_printf("mp3 internal error: error code=%i\n", imp3); return 1; } owrite = (int) fwrite(mp3buffer, 1, imp3, outf); if (owrite != imp3) { error_printf("Error writing mp3 output \n"); return 1; } } while (rest > 0); } if (global_writer.flush_write == 1) { fflush(outf); } } while (iread > 0); if (nogap) imp3 = lame_encode_flush_nogap(gf, mp3buffer, sizeof(mp3buffer)); /* may return one more mp3 frame */ else imp3 = lame_encode_flush(gf, mp3buffer, sizeof(mp3buffer)); /* may return one more mp3 frame */ if (imp3 < 0) { if (imp3 == -1) error_printf("mp3 buffer is not big enough... \n"); else error_printf("mp3 internal error: error code=%i\n", imp3); return 1; } encoder_progress_end(gf); owrite = (int) fwrite(mp3buffer, 1, imp3, outf); if (owrite != imp3) { error_printf("Error writing mp3 output \n"); return 1; } if (global_writer.flush_write == 1) { fflush(outf); } imp3 = write_id3v1_tag(gf, outf); if (global_writer.flush_write == 1) { fflush(outf); } if (imp3) { return 1; } write_xing_frame(gf, outf, id3v2_size); if (global_writer.flush_write == 1) { fflush(outf); } if (global_ui_config.silent <= 0) { print_trailing_info(gf); } return 0; } static int lame_encoder(lame_global_flags * gf, FILE * outf, int nogap, char *inPath, char *outPath) { int ret; ret = lame_encoder_loop(gf, outf, nogap, inPath, outPath); fclose(outf); /* close the output file */ close_infile(); /* close the input file */ return ret; } int lame_main(lame_t gf, int argc, char **argv) { char inPath[PATH_MAX + 1]; char outPath[PATH_MAX + 1]; char nogapdir[PATH_MAX + 1]; /* support for "nogap" encoding of up to 200 .wav files */ #define MAX_NOGAP 200 int nogapout = 0; int max_nogap = MAX_NOGAP; char nogap_inPath_[MAX_NOGAP][PATH_MAX + 1]; char *nogap_inPath[MAX_NOGAP]; char nogap_outPath_[MAX_NOGAP][PATH_MAX + 1]; char *nogap_outPath[MAX_NOGAP]; int ret; int i; FILE *outf = NULL; lame_set_msgf(gf, &frontend_msgf); lame_set_errorf(gf, &frontend_errorf); lame_set_debugf(gf, &frontend_debugf); if (argc <= 1) { usage(stderr, argv[0]); /* no command-line args, print usage, exit */ return 1; } memset(inPath, 0, sizeof(inPath)); memset(nogap_inPath_, 0, sizeof(nogap_inPath_)); for (i = 0; i < MAX_NOGAP; ++i) { nogap_inPath[i] = &nogap_inPath_[i][0]; } memset(nogap_outPath_, 0, sizeof(nogap_outPath_)); for (i = 0; i < MAX_NOGAP; ++i) { nogap_outPath[i] = &nogap_outPath_[i][0]; } /* parse the command line arguments, setting various flags in the * struct 'gf'. If you want to parse your own arguments, * or call libmp3lame from a program which uses a GUI to set arguments, * skip this call and set the values of interest in the gf struct. * (see the file API and lame.h for documentation about these parameters) */ ret = parse_args(gf, argc, argv, inPath, outPath, nogap_inPath, &max_nogap); if (ret < 0) { return ret == -2 ? 0 : 1; } if (global_ui_config.update_interval < 0.) global_ui_config.update_interval = 2.; if (outPath[0] != '\0' && max_nogap > 0) { strncpy(nogapdir, outPath, PATH_MAX + 1); nogapdir[PATH_MAX] = '\0'; nogapout = 1; } /* initialize input file. This also sets samplerate and as much other data on the input file as available in the headers */ if (max_nogap > 0) { /* for nogap encoding of multiple input files, it is not possible to * specify the output file name, only an optional output directory. */ for (i = 0; i < max_nogap; ++i) { char const* outdir = nogapout ? nogapdir : ""; if (generateOutPath(nogap_inPath[i], outdir, ".mp3", nogap_outPath[i]) != 0) { error_printf("processing nogap file %d: %s\n", i+1, nogap_inPath[i]); return -1; } } outf = init_files(gf, nogap_inPath[0], nogap_outPath[0]); } else { outf = init_files(gf, inPath, outPath); } if (outf == NULL) { close_infile(); return -1; } /* turn off automatic writing of ID3 tag data into mp3 stream * we have to call it before 'lame_init_params', because that * function would spit out ID3v2 tag data. */ lame_set_write_id3tag_automatic(gf, 0); /* Now that all the options are set, lame needs to analyze them and * set some more internal options and check for problems */ ret = lame_init_params(gf); if (ret < 0) { if (ret == -1) { display_bitrates(stderr); } error_printf("fatal error during initialization\n"); fclose(outf); close_infile(); return ret; } if (global_ui_config.silent > 0) { global_ui_config.brhist = 0; /* turn off VBR histogram */ } if (lame_get_decode_only(gf)) { /* decode an mp3 file to a .wav */ ret = lame_decoder(gf, outf, inPath, outPath); } else if (max_nogap == 0) { /* encode a single input file */ ret = lame_encoder(gf, outf, 0, inPath, outPath); } else { /* encode multiple input files using nogap option */ for (i = 0; i < max_nogap; ++i) { int use_flush_nogap = (i != (max_nogap - 1)); if (i > 0) { /* note: if init_files changes anything, like samplerate, num_channels, etc, we are screwed */ outf = init_files(gf, nogap_inPath[i], nogap_outPath[i]); if (outf == NULL) { close_infile(); return -1; } /* reinitialize bitstream for next encoding. this is normally done * by lame_init_params(), but we cannot call that routine twice */ lame_init_bitstream(gf); } lame_set_nogap_total(gf, max_nogap); lame_set_nogap_currentindex(gf, i); ret = lame_encoder(gf, outf, use_flush_nogap, nogap_inPath[i], nogap_outPath[i]); } } return ret; } �������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/main.c��������������������������������������������������������������������������000644 �001751 �001751 �00000027615 13144574735 017022� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Command line frontend program * * Copyright (c) 1999 Mark Taylor * 2000 Takehiro TOMINAGA * 2010-2012 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: main.c,v 1.131 2017/08/12 18:56:15 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include <stdio.h> #ifdef STDC_HEADERS # include <stdlib.h> # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #ifdef __sun__ /* woraround for SunOS 4.x, it has SEEK_* defined here */ #include <unistd.h> #endif #ifdef __OS2__ #include <os2.h> #define PRTYC_IDLE 1 #define PRTYC_REGULAR 2 #define PRTYD_MINIMUM -31 #define PRTYD_MAXIMUM 31 #endif #if defined(_WIN32) # include <windows.h> #endif /* main.c is example code for how to use libmp3lame.a. To use this library, you only need the library and lame.h. All other .h files are private to the library. */ #include "lame.h" #include "console.h" #include "main.h" /* PLL 14/04/2000 */ #if macintosh #include <console.h> #endif #ifdef WITH_DMALLOC #include <dmalloc.h> #endif static int c_main(int argc, char *argv[]); extern int lame_main(lame_t gf, int argc, char *argv[]); /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ #if defined( _WIN32 ) && !defined(__MINGW32__) static void set_process_affinity() { #if 0 /* rh 061207 the following fix seems to be a workaround for a problem in the parent process calling LAME. It would be better to fix the broken application => code disabled. */ #if defined(_WIN32) /* set affinity back to all CPUs. Fix for EAC/lame on SMP systems from "Todd Richmond" <todd.richmond@openwave.com> */ typedef BOOL(WINAPI * SPAMFunc) (HANDLE, DWORD_PTR); SPAMFunc func; SYSTEM_INFO si; if ((func = (SPAMFunc) GetProcAddress(GetModuleHandleW(L"KERNEL32.DLL"), "SetProcessAffinityMask")) != NULL) { GetSystemInfo(&si); func(GetCurrentProcess(), si.dwActiveProcessorMask); } #endif #endif } #endif #if defined(WIN32) /** * Long Filename support for the WIN32 platform * */ void dosToLongFileName(char *fn) { const size_t MSIZE = PATH_MAX + 1 - 4; /* we wanna add ".mp3" later */ WIN32_FIND_DATAA lpFindFileData; HANDLE h = FindFirstFileA(fn, &lpFindFileData); if (h != INVALID_HANDLE_VALUE) { size_t a; char *q, *p; FindClose(h); for (a = 0; a < MSIZE; a++) { if ('\0' == lpFindFileData.cFileName[a]) break; } if (a >= MSIZE || a == 0) return; q = strrchr(fn, '\\'); p = strrchr(fn, '/'); if (p - q > 0) q = p; if (q == NULL) q = strrchr(fn, ':'); if (q == NULL) strncpy(fn, lpFindFileData.cFileName, a); else { a += q - fn + 1; if (a >= MSIZE) return; strncpy(++q, lpFindFileData.cFileName, MSIZE - a); } } } BOOL SetPriorityClassMacro(DWORD p) { HANDLE op = GetCurrentProcess(); return SetPriorityClass(op, p); } void setProcessPriority(int Priority) { switch (Priority) { case 0: case 1: SetPriorityClassMacro(IDLE_PRIORITY_CLASS); console_printf("==> Priority set to Low.\n"); break; default: case 2: SetPriorityClassMacro(NORMAL_PRIORITY_CLASS); console_printf("==> Priority set to Normal.\n"); break; case 3: case 4: SetPriorityClassMacro(HIGH_PRIORITY_CLASS); console_printf("==> Priority set to High.\n"); break; } } #endif #if defined(__OS2__) /* OS/2 priority functions */ static void setProcessPriority(int Priority) { int rc; switch (Priority) { case 0: rc = DosSetPriority(0, /* Scope: only one process */ PRTYC_IDLE, /* select priority class (idle, regular, etc) */ 0, /* set delta */ 0); /* Assume current process */ console_printf("==> Priority set to 0 (Low priority).\n"); break; case 1: rc = DosSetPriority(0, /* Scope: only one process */ PRTYC_IDLE, /* select priority class (idle, regular, etc) */ PRTYD_MAXIMUM, /* set delta */ 0); /* Assume current process */ console_printf("==> Priority set to 1 (Medium priority).\n"); break; case 2: rc = DosSetPriority(0, /* Scope: only one process */ PRTYC_REGULAR, /* select priority class (idle, regular, etc) */ PRTYD_MINIMUM, /* set delta */ 0); /* Assume current process */ console_printf("==> Priority set to 2 (Regular priority).\n"); break; case 3: rc = DosSetPriority(0, /* Scope: only one process */ PRTYC_REGULAR, /* select priority class (idle, regular, etc) */ 0, /* set delta */ 0); /* Assume current process */ console_printf("==> Priority set to 3 (High priority).\n"); break; case 4: rc = DosSetPriority(0, /* Scope: only one process */ PRTYC_REGULAR, /* select priority class (idle, regular, etc) */ PRTYD_MAXIMUM, /* set delta */ 0); /* Assume current process */ console_printf("==> Priority set to 4 (Maximum priority). I hope you enjoy it :)\n"); break; default: console_printf("==> Invalid priority specified! Assuming idle priority.\n"); } } #endif /*********************************************************************** * * Message Output * ***********************************************************************/ #if defined( _WIN32 ) && !defined(__MINGW32__) /* Idea for unicode support in LAME, work in progress * - map UTF-16 to UTF-8 * - advantage, the rest can be kept unchanged (mostly) * - make sure, fprintf on console is in correct code page * + normal text in source code is in ASCII anyway * + ID3 tags and filenames coming from command line need attention * - call wfopen with UTF-16 names where needed * * why not wchar_t all the way? * well, that seems to be a big mess and not portable at all */ #ifndef NDEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #endif #include <wchar.h> #include <mbstring.h> static wchar_t *mbsToUnicode(const char *mbstr, int code_page) { int n = MultiByteToWideChar(code_page, 0, mbstr, -1, NULL, 0); wchar_t* wstr = malloc( n*sizeof(wstr[0]) ); if ( wstr !=0 ) { n = MultiByteToWideChar(code_page, 0, mbstr, -1, wstr, n); if ( n==0 ) { free( wstr ); wstr = 0; } } return wstr; } static char *unicodeToMbs(const wchar_t *wstr, int code_page) { int n = 1+WideCharToMultiByte(code_page, 0, wstr, -1, 0, 0, 0, 0); char* mbstr = malloc( n*sizeof(mbstr[0]) ); if ( mbstr !=0 ) { n = WideCharToMultiByte(code_page, 0, wstr, -1, mbstr, n, 0, 0); if( n == 0 ){ free( mbstr ); mbstr = 0; } } return mbstr; } char* mbsToMbs(const char* str, int cp_from, int cp_to) { wchar_t* wstr = mbsToUnicode(str, cp_from); if ( wstr != 0 ) { char* local8bit = unicodeToMbs(wstr, cp_to); free( wstr ); return local8bit; } return 0; } enum { cp_utf8, cp_console, cp_actual }; wchar_t *utf8ToUnicode(const char *mbstr) { return mbsToUnicode(mbstr, CP_UTF8); } char *unicodeToUtf8(const wchar_t *wstr) { return unicodeToMbs(wstr, CP_UTF8); } char* utf8ToLocal8Bit(const char* str) { return mbsToMbs(str, CP_UTF8, CP_ACP); } char* utf8ToConsole8Bit(const char* str) { return mbsToMbs(str, CP_UTF8, GetConsoleOutputCP()); } char* local8BitToUtf8(const char* str) { return mbsToMbs(str, CP_ACP, CP_UTF8); } char* console8BitToUtf8(const char* str) { return mbsToMbs(str, GetConsoleOutputCP(), CP_UTF8); } char* utf8ToLatin1(char const* str) { return mbsToMbs(str, CP_UTF8, 28591); /* Latin-1 is code page 28591 */ } unsigned short* utf8ToUtf16(char const* mbstr) /* additional Byte-Order-Marker */ { int n = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, NULL, 0); wchar_t* wstr = malloc( (n+1)*sizeof(wstr[0]) ); if ( wstr !=0 ) { wstr[0] = 0xfeff; /* BOM */ n = MultiByteToWideChar(CP_UTF8, 0, mbstr, -1, wstr+1, n); if ( n==0 ) { free( wstr ); wstr = 0; } } return wstr; } static void setDebugMode() { #ifndef NDEBUG if ( IsDebuggerPresent() ) { // Get current flag int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); //tmpFlag |= _CRTDBG_DELAY_FREE_MEM_DF; tmpFlag |= _CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF; // Set flag to the new value. _CrtSetDbgFlag( tmpFlag ); _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); } #endif } int wmain(int argc, wchar_t* argv[]) { char **utf8_argv; int i, ret; setDebugMode(); utf8_argv = calloc(argc, sizeof(char*)); for (i = 0; i < argc; ++i) { utf8_argv[i] = unicodeToUtf8(argv[i]); } ret = c_main(argc, utf8_argv); for (i = 0; i < argc; ++i) { free( utf8_argv[i] ); } free( utf8_argv ); return ret; } FILE* lame_fopen(char const* file, char const* mode) { FILE* fh = 0; wchar_t* wfile = utf8ToUnicode(file); wchar_t* wmode = utf8ToUnicode(mode); if (wfile != 0 && wmode != 0) { fh = _wfopen(wfile, wmode); } else { fh = fopen(file, mode); } free(wfile); free(wmode); return fh; } char* lame_getenv(char const* var) { char* str = 0; wchar_t* wvar = utf8ToUnicode(var); if (wvar != 0) { wchar_t* wstr = _wgetenv(wvar); if (wstr != 0) { str = unicodeToUtf8(wstr); } } free(wvar); return str; } #else FILE* lame_fopen(char const* file, char const* mode) { return fopen(file, mode); } char* lame_getenv(char const* var) { char* str = getenv(var); if (str) { return strdup(str); } return 0; } int main(int argc, char *argv[]) { return c_main(argc, argv); } #endif static int c_main(int argc, char *argv[]) { lame_t gf; int ret; #if macintosh argc = ccommand(&argv); #endif #ifdef __EMX__ /* This gives wildcard expansion on Non-POSIX shells with OS/2 */ _wildcard(&argc, &argv); #endif #if defined( _WIN32 ) && !defined(__MINGW32__) set_process_affinity(); #endif frontend_open_console(); gf = lame_init(); /* initialize libmp3lame */ if (NULL == gf) { error_printf("fatal error during initialization\n"); ret = 1; } else { ret = lame_main(gf, argc, argv); lame_close(gf); } frontend_close_console(); return ret; } �������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/get_audio.h���������������������������������������������������������������������000644 �001751 �001751 �00000005711 11656747557 020046� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Get Audio routines include file * * Copyright (c) 1999 Albert L Faber * 2010 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_GET_AUDIO_H #define LAME_GET_AUDIO_H #include "lame.h" #include <stdio.h> #ifdef __cplusplus extern "C" { #endif typedef enum sound_file_format_e { sf_unknown, sf_raw, sf_wave, sf_aiff, sf_mp1, /* MPEG Layer 1, aka mpg */ sf_mp2, /* MPEG Layer 2 */ sf_mp3, /* MPEG Layer 3 */ sf_mp123, /* MPEG Layer 1,2 or 3; whatever .mp3, .mp2, .mp1 or .mpg contains */ sf_ogg } sound_file_format; int is_mpeg_file_format( int input_format ); int init_infile(lame_t gfp, char const * inPath); int samples_to_skip_at_start(void); int samples_to_skip_at_end(void); void close_infile(void); int get_audio(lame_t gfp, int buffer[2][1152]); int get_audio16(lame_t gfp, short buffer[2][1152]); int get_audio_float(lame_t gfp, float buffer[2][1152]); int get_audio_double(lame_t gfp, double buffer[2][1152]); hip_t get_hip(void); FILE *init_outfile(char const *outPath, int decode); int WriteWaveHeader(FILE * const fp, int pcmbytes, int freq, int channels, int bits); void put_audio16(FILE* outf, short Buffer[2][1152], int iread, int nch); /* struct AudioReader; typedef struct AudioReader* AudioReader; AudioReader ar_open(lame_t gfp, char const* inPath); int ar_samplesToSkipAtStart(AudioReader ar); int ar_samplesToSkipAtEnd(AudioReader ar); void ar_close(AudioReader ar); int ar_readInt(AudioReader ar, lame_t gfp, int buffer[2][1152]); int ar_readShort(AudioReader ar, lame_t gfp, short buffer[2][1152]); int ar_readFloat(AudioReader ar, lame_t gfp, float buffer[2][1152]); struct AudioWriter; typedef struct AudioWriter* AudioWriter; AudioWriter aw_open(lame_t gfp, char const* outPath, int pcmbystes, int freq, int channels, int bits); int aw_writeWaveHeader(AudioWriter aw); int aw_write(AudioWriter aw, short buffer[2][1152], int n); int aw_write(AudioWriter aw, float buffer[2][1152], int n); */ extern size_t sizeOfOldTag(lame_t gf); extern unsigned char* getOldTag(lame_t gf); #ifdef _cplusplus } #endif #endif /* ifndef LAME_GET_AUDIO_H */ �������������������������������������������������������lame-3.100/frontend/gtkanal.c�����������������������������������������������������������������������000644 �001751 �001751 �00000162703 13154046617 017507� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GTK plotting routines source file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: gtkanal.c,v 1.50 2017/08/28 12:48:39 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <gtk/gtk.h> #include "main.h" #include "lame.h" #include "machine.h" #include "encoder.h" #include "lame-analysis.h" #include "get_audio.h" #include "gtkanal.h" #include "gpkplotting.h" #include "lame_global_flags.h" /* this file should be removed. The few data items accessed in 'gfc' should be made accessable by writing a lame_set_variable() function */ #include "util.h" #include "console.h" #ifdef _WIN32 # include <windows.h> # define msleep(t) Sleep(t) #else # include <unistd.h> # define msleep(t) usleep((t) * 1000) #endif /*! Stringify \a x. */ #define STR(x) #x /*! Stringify \a x, perform macro expansion. */ #define XSTR(x) STR(x) #define MP3X_MAJOR_VERSION 0 /* Major version number */ #define MP3X_MINOR_VERSION 82 /* Minor version number */ #define MP3X_ALPHA_VERSION 0 /* Set number if this is an alpha version, otherwise zero */ #define MP3X_BETA_VERSION 0 /* Set number if this is a beta version, otherwise zero */ plotting_data *pinfo; plotting_data *pplot; plotting_data Pinfo[NUMPINFO]; /* global variables for the state of the system */ static gint idle_keepgoing; /* processing of frames is ON */ static gint idle_count_max; /* number of frames to process before plotting */ static gint idle_count; /* pause & plot when idle_count=idel_count_max */ static gint idle_end = 0; /* process all frames, stop at last frame */ static gint idle_back = 0; /* set when we are displaying the old data */ static int mp3done = 0; /* last frame has been read */ static GtkWidget *frameprogress; /* progress bar */ static GtkWidget *framecounter; /* progress counter */ static int subblock_draw[3] = { 1, 1, 1 }; /* main window */ GtkWidget *window; /* Backing pixmap for drawing areas */ GtkWidget *pcmbox; /* PCM data plotted here */ GtkWidget *winbox; /* mpg123 synthesis data plotted here */ GtkWidget *enerbox[2]; /* spectrum, gr=0,1 plotted here */ GtkWidget *mdctbox[2]; /* mdct coefficients gr=0,1 plotted here */ GtkWidget *sfbbox[2]; /* scalefactors gr=0,1 plotted here */ GtkWidget *headerbox; /* mpg123 header info shown here */ struct gtkinfostruct { int filetype; /* input file type 0=WAV, 1=MP3 */ int msflag; /* toggle between L&R vs M&S PCM data display */ int chflag; /* toggle between L & R channels */ int kbflag; /* toggle between wave # and barks */ int flag123; /* show mpg123 frame info, OR ISO encoder frame info */ double avebits; /* running average bits per frame */ int approxbits; /* (approx) bits per frame */ int maxbits; /* max bits per frame used so far */ int totemph; /* total of frames with de-emphasis */ int totms; /* total frames with ms_stereo */ int totis; /* total frames with i_stereo */ int totshort; /* total granules with short blocks */ int totmix; /* total granules with mixed blocks */ int totpreflag; /* total granules with preflag */ int pupdate; /* plot while processing, or only when needed */ int sfblines; /* plot scalefactor bands in MDCT plot */ int difference; /* plot original - decoded instead of orig vs. decoded */ int totalframes; } gtkinfo; static lame_global_flags *gfp; lame_internal_flags *gfc; hip_t hip; /* decoder handle of just encoded data */ /********************************************************************** * read one frame and encode it **********************************************************************/ int gtkmakeframe(void) { int iread = 0; static int init = 0; static int mpglag; static short int Buffer[2][1152]; short int mpg123pcm[2][1152]; int ch, j; int mp3count = 0; int mp3out = 0; int channels_out; unsigned char mp3buffer[LAME_MAXMP3BUFFER]; static int frameNum = 0; int framesize = lame_get_framesize(gfp); channels_out = (lame_get_mode(gfp) == MONO) ? 1 : 2; pinfo->frameNum = frameNum; pinfo->sampfreq = lame_get_out_samplerate(gfp); pinfo->framesize = framesize; pinfo->stereo = channels_out; /* If the analsys code is enabled, lame will writes data into gfc->pinfo, * and mpg123 will write data into pinfo. Set these so * the libraries put this data in the right place: */ gfc->pinfo = pinfo; hip_set_pinfo(hip, pinfo); if (is_mpeg_file_format(global_reader.input_format)) { hip_set_pinfo(get_hip(), pplot); iread = get_audio16(gfp, Buffer); /* add a delay of framesize-DECDELAY, which will make the total delay * exactly one frame, so we can sync MP3 output with WAV input */ for (ch = 0; ch < channels_out; ch++) { for (j = 0; j < framesize - DECDELAY; j++) pinfo->pcmdata2[ch][j] = pinfo->pcmdata2[ch][j + framesize]; for (j = 0; j < framesize; j++) /*rescale from int to short int */ pinfo->pcmdata2[ch][j + framesize - DECDELAY] = Buffer[ch][j]; } pinfo->frameNum123 = frameNum - 1; ++frameNum; } else { /* feed data to encoder until encoder produces some output */ while (lame_get_frameNum(gfp) == pinfo->frameNum) { if (!init) { init = 1; mpglag = 1; if (hip) { hip_decode_exit(hip); } hip = hip_decode_init(); hip_set_pinfo(hip, pinfo); } iread = get_audio16(gfp, Buffer); if (iread > framesize) { /* NOTE: frame analyzer requires that we encode one frame * for each pass through this loop. If lame_encode_buffer() * is feed data too quickly, it will sometimes encode multiple frames * breaking this loop. */ error_printf("Warning: get_audio is returning too much data.\n"); } if (iread <= 0) break; /* eof */ mp3count = lame_encode_buffer(gfp, Buffer[0], Buffer[1], iread, mp3buffer, sizeof(mp3buffer)); assert(!(mp3count > 0 && lame_get_frameNum(gfp) == pinfo->frameNum)); /* not possible to produce mp3 data without encoding at least * one frame of data which would increment frameNum */ } frameNum = lame_get_frameNum(gfp); /* use the internal MP3 frame counter */ /* decode one frame of output */ mp3out = hip_decode1(hip, mp3buffer, mp3count, mpg123pcm[0], mpg123pcm[1]); /* re-synthesis to pcm */ /* mp3out = 0: need more data to decode */ /* mp3out = -1: error. Lets assume 0 pcm output */ /* mp3out = number of samples output */ if (mp3out > 0) assert(mp3out == pinfo->framesize); if (mp3out != 0) { /* decoded output is for frame pinfo->frameNum123 * add a delay of framesize-DECDELAY, which will make the total delay * exactly one frame */ pinfo->frameNum123 = pinfo->frameNum - mpglag; for (ch = 0; ch < pinfo->stereo; ch++) { for (j = 0; j < pinfo->framesize - DECDELAY; j++) pinfo->pcmdata2[ch][j] = pinfo->pcmdata2[ch][j + pinfo->framesize]; for (j = 0; j < pinfo->framesize; j++) { pinfo->pcmdata2[ch][j + pinfo->framesize - DECDELAY] = (mp3out == -1) ? 0 : mpg123pcm[ch][j]; } } } else { if (mpglag == MAXMPGLAG) { error_printf("READ_AHEAD set too low - not enough frame buffering.\n" "MP3x display of input and output PCM data out of sync.\n"); error_flush(); } else mpglag++; pinfo->frameNum123 = -1; /* no frame output */ } } return iread; } void plot_frame(void) { int i, j, n, ch, gr; gdouble *xcord, *ycord; gdouble xmx, xmn, ymx, ymn; double *data, *data2, *data3; char title2[80]; char label[80], label2[80]; char *title; plotting_data *pplot1; plotting_data *pplot2 = NULL; double en, samp; /*int sampindex, version = 0;*/ int barthick; static int firstcall = 1; static GdkColor *barcolor, *color, *grcolor[2]; static GdkColor yellow, gray, cyan, magenta, orange, pink, red, green, blue, black, oncolor, offcolor; int blocktype[2][2]; int headbits; int mode_gr = 2; /* find the frame where mpg123 produced output coming from input frame * pinfo. i.e.: out_frame + out_frame_lag = input_frame */ for (i = 1; i <= MAXMPGLAG; i++) { if ((pplot - i)->frameNum123 == pplot->frameNum) { pplot2 = pplot - i; break; } } if (i > MAXMPGLAG) { error_printf("input/output pcm syncing problem. should not happen!\n"); pplot2 = pplot - 1; } /* however, the PCM data is delayed by 528 samples in the encoder filterbanks. * We added another 1152-528 delay to this so the PCM data is *exactly* one * frame behind the header & MDCT information */ pplot1 = pplot2 + 1; /* back one frame for header info, MDCT */ /* allocate these GC's only once */ if (firstcall) { firstcall = 0; /* grcolor[0] = &magenta; */ grcolor[0] = &blue; grcolor[1] = &green; barcolor = &gray; setcolor(headerbox, &oncolor, 255, 0, 0); setcolor(headerbox, &offcolor, 175, 175, 175); setcolor(pcmbox, &red, 255, 0, 0); setcolor(pcmbox, &pink, 255, 0, 255); setcolor(pcmbox, &magenta, 255, 0, 100); setcolor(pcmbox, &orange, 255, 127, 0); setcolor(pcmbox, &cyan, 0, 255, 255); setcolor(pcmbox, &green, 0, 255, 0); setcolor(pcmbox, &blue, 0, 0, 255); setcolor(pcmbox, &black, 0, 0, 0); setcolor(pcmbox, &gray, 100, 100, 100); setcolor(pcmbox, &yellow, 255, 255, 0); } /******************************************************************* * frame header info *******************************************************************/ if (pplot1->sampfreq) samp = pplot1->sampfreq; else samp = 1; /*sampindex = SmpFrqIndex((long) samp, &version);*/ ch = gtkinfo.chflag; headbits = 32 + ((pplot1->stereo == 2) ? 256 : 136); gtkinfo.approxbits = (pplot1->bitrate * 1000 * 1152.0 / samp) - headbits; sprintf(title2, "%3.1fkHz %ikbs ", samp / 1000, pplot1->bitrate); gtk_text_freeze(GTK_TEXT(headerbox)); gtk_text_backward_delete(GTK_TEXT(headerbox), gtk_text_get_length(GTK_TEXT(headerbox))); gtk_text_set_point(GTK_TEXT(headerbox), 0); gtk_text_insert(GTK_TEXT(headerbox), NULL, &oncolor, NULL, title2, -1); title = " mono "; if (2 == pplot1->stereo) title = pplot1->js ? " js " : " s "; gtk_text_insert(GTK_TEXT(headerbox), NULL, &oncolor, NULL, title, -1); color = pplot1->ms_stereo ? &oncolor : &offcolor; gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, "ms ", -1); color = pplot1->i_stereo ? &oncolor : &offcolor; gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, "is ", -1); color = pplot1->crc ? &oncolor : &offcolor; gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, "crc ", -1); color = pplot1->padding ? &oncolor : &offcolor; gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, "pad ", -1); color = pplot1->emph ? &oncolor : &offcolor; gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, "em ", -1); sprintf(title2, "bv=%i,%i ", pplot1->big_values[0][ch], pplot1->big_values[1][ch]); gtk_text_insert(GTK_TEXT(headerbox), NULL, &black, NULL, title2, -1); color = pplot1->scfsi[ch] ? &oncolor : &offcolor; sprintf(title2, "scfsi=%i ", pplot1->scfsi[ch]); gtk_text_insert(GTK_TEXT(headerbox), NULL, color, NULL, title2, -1); if (gtkinfo.filetype) sprintf(title2, " mdb=%i %i/NA", pplot1->maindata, pplot1->totbits); else sprintf(title2, " mdb=%i %i/%i", pplot1->maindata, pplot1->totbits, pplot1->totbits + pplot->resvsize); gtk_text_insert(GTK_TEXT(headerbox), NULL, &oncolor, NULL, title2, -1); gtk_text_thaw(GTK_TEXT(headerbox)); /******************************************************************* * block type *******************************************************************/ for (gr = 0; gr < mode_gr; gr++) if (gtkinfo.flag123) blocktype[gr][ch] = pplot1->mpg123blocktype[gr][ch]; else blocktype[gr][ch] = pplot->blocktype[gr][ch]; /******************************************************************* * draw the PCM data * *******************************************************************/ n = 1600; /* PCM frame + FFT window: 224 + 1152 + 224 */ xcord = g_malloc(n * sizeof(gdouble)); ycord = g_malloc(n * sizeof(gdouble)); if (gtkinfo.msflag) title = ch ? "Side Channel" : "Mid Channel"; else title = ch ? "Right Channel" : "Left Channel"; sprintf(title2, "%s mask_ratio=%3.2f %3.2f ener_ratio=%3.2f %3.2f", title, pplot->ms_ratio[0], pplot->ms_ratio[1], pplot->ms_ener_ratio[0], pplot->ms_ener_ratio[1]); ymn = -32767; ymx = 32767; xmn = 0; xmx = 1600 - 1; /* 0 ... 224 draw in black, connecting to 224 pixel * 1375 .. 1599 draw in black connecting to 1375 pixel * 224 ... 1375 MP3 frame. draw in blue */ /* draw the title */ gpk_graph_draw(pcmbox, 0, xcord, ycord, xmn, ymn, xmx, ymx, 1, title2, &black); /* draw some hash marks dividing the frames */ ycord[0] = ymx * .8; ycord[1] = ymn * .8; for (gr = 0; gr <= 2; gr++) { xcord[0] = 223.5 + gr * 576; xcord[1] = 223.5 + gr * 576; gpk_rectangle_draw(pcmbox, xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } for (gr = 0; gr < mode_gr; gr++) { if (blocktype[gr][ch] == 2) for (i = 1; i <= 2; i++) { xcord[0] = 223.5 + gr * 576 + i * 192; xcord[1] = 223.5 + gr * 576 + i * 192; gpk_rectangle_draw(pcmbox, xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } } /* bars representing FFT windows */ xcord[0] = 0; ycord[0] = ymn + 3000; xcord[1] = 1024 - 1; ycord[1] = ymn + 1000; gpk_rectangle_draw(pcmbox, xcord, ycord, xmn, ymn, xmx, ymx, grcolor[0]); xcord[0] = 576; ycord[0] = ymn + 2000; xcord[1] = 576 + 1024 - 1; ycord[1] = ymn; gpk_rectangle_draw(pcmbox, xcord, ycord, xmn, ymn, xmx, ymx, grcolor[1]); /* plot PCM data */ for (i = 0; i < n; i++) { xcord[i] = i; if (gtkinfo.msflag) ycord[i] = ch ? .5 * (pplot->pcmdata[0][i] - pplot->pcmdata[1][i]) : .5 * (pplot->pcmdata[0][i] + pplot->pcmdata[1][i]); else ycord[i] = pplot->pcmdata[ch][i]; } /* skip plot if we are doing an mp3 file */ if (!gtkinfo.filetype) { gpk_graph_draw(pcmbox, n, xcord, ycord, xmn, ymn, xmx, ymx, 0, title2, &black); } /*******************************************************************/ /* draw the PCM re-synthesis data */ /*******************************************************************/ n = 1152; /* sprintf(title2,"Re-synthesis mask_ratio=%3.2f %3.2f ener_ratio=%3.2f %3.2f", pplot->ms_ratio[0],pplot->ms_ratio[1], pplot->ms_ener_ratio[0],pplot->ms_ener_ratio[1]); */ title = "Re-synthesis"; if (gtkinfo.difference) title = "Re-synthesis difference (amplified 20db)"; ymn = -32767; ymx = 32767; xmn = 0; xmx = 1600 - 1; gpk_graph_draw(winbox, 0, xcord, ycord, xmn, ymn, xmx, ymx, 1, title, &black); /* draw some hash marks dividing the frames */ ycord[0] = ymx * .8; ycord[1] = ymn * .8; for (gr = 0; gr <= 2; gr++) { xcord[0] = 223.5 + gr * 576; xcord[1] = 223.5 + gr * 576; gpk_rectangle_draw(winbox, xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } for (gr = 0; gr < 2; gr++) { if (blocktype[gr][ch] == 2) for (i = 1; i <= 2; i++) { xcord[0] = 223.5 + gr * 576 + i * 192; xcord[1] = 223.5 + gr * 576 + i * 192; gpk_rectangle_draw(winbox, xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } } /* this piece of PCM data from previous frame */ n = 224; for (j = 1152 - n, i = 0; i < n; i++, j++) { xcord[i] = i; if (gtkinfo.msflag) ycord[i] = ch ? .5 * (pplot1->pcmdata2[0][j] - pplot1->pcmdata2[1][j]) : .5 * (pplot1->pcmdata2[0][j] + pplot1->pcmdata2[1][j]); else ycord[i] = pplot1->pcmdata2[ch][j]; } /* this piece of PCM data from current frame */ n = 1152; for (i = 0; i < n; i++) { xcord[i + 224] = i + 224; if (gtkinfo.msflag) ycord[i + 224] = ch ? .5 * (pplot2->pcmdata2[0][i] - pplot2->pcmdata2[1][i]) : .5 * (pplot2->pcmdata2[0][i] + pplot2->pcmdata2[1][i]); else ycord[i + 224] = pplot2->pcmdata2[ch][i]; } n = 1152 + 224; if (gtkinfo.difference) { for (i = 0; i < n; i++) { if (gtkinfo.msflag) ycord[i] -= ch ? .5 * (pplot->pcmdata[0][i] - pplot->pcmdata[1][i]) : .5 * (pplot->pcmdata[0][i] + pplot->pcmdata[1][i]); else ycord[i] -= pplot->pcmdata[ch][i]; } ycord[i] *= 100; } gpk_graph_draw(winbox, n, xcord, ycord, xmn, ymn, xmx, ymx, 0, title, &black); /*******************************************************************/ /* draw the MDCT energy spectrum */ /*******************************************************************/ for (gr = 0; gr < mode_gr; gr++) { int bits, bits2; char *blockname = ""; switch (blocktype[gr][ch]) { case 0: blockname = "normal"; break; case 1: blockname = "start"; break; case 2: blockname = "short"; break; case 3: blockname = "end"; break; } strcpy(label, blockname); if (pplot1->mixed[gr][ch]) strcat(label, "(mixed)"); n = 576; if (gtkinfo.flag123) { data = pplot1->mpg123xr[gr][0]; data2 = pplot1->mpg123xr[gr][1]; } else { data = pplot->xr[gr][0]; data2 = pplot->xr[gr][1]; } xmn = 0; xmx = n - 1; ymn = 0; ymx = 11; /* draw title, erase old plot */ if (gtkinfo.flag123) { bits = pplot1->mainbits[gr][ch]; bits2 = pplot1->sfbits[gr][ch]; } else { bits = pplot->LAMEmainbits[gr][ch]; bits2 = pplot->LAMEsfbits[gr][ch]; } sprintf(title2, "MDCT%1i(%s) bits=%i/%i ", gr, label, bits, bits2); gpk_bargraph_draw(mdctbox[gr], 0, xcord, ycord, xmn, ymn, xmx, ymx, 1, title2, 0, barcolor); /* draw some hash marks showing scalefactor bands */ if (gtkinfo.sfblines) { int fac, nsfb, *scalefac; if (blocktype[gr][ch] == SHORT_TYPE) { nsfb = SBMAX_s; i = nsfb - 7; fac = 3; scalefac = gfc->scalefac_band.s; } else { nsfb = SBMAX_l; i = nsfb - 10; fac = 1; scalefac = gfc->scalefac_band.l; } for (; i < nsfb; i++) { ycord[0] = .8 * ymx; ycord[1] = ymn; xcord[0] = fac * scalefac[i]; xcord[1] = xcord[0]; gpk_rectangle_draw(mdctbox[gr], xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } } ymn = 9e20; ymx = -9e20; for (i = 0; i < n; i++) { double coeff; xcord[i] = i; if (gtkinfo.msflag) { coeff = ch ? .5 * (data[i] - data2[i]) : .5 * (data[i] + data2[i]); } else { coeff = ch ? data2[i] : data[i]; } if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) coeff = 0; ycord[i] = coeff * coeff * 1e10; ycord[i] = log10(MAX(ycord[i], (double) 1)); #if 0 if (ch == 0) if (i == 26) if (data[i] != 0) console_printf("%i %i i=%i mdct: (db) %f %f \n", pplot->frameNum, gr, i, 10 * log10(data[i] * data[i]), 10 * log10(.33 * (data[i - 1] * data[i - 1] + data[i] * data[i] + data[i + 1] * data[i + 1])) ); #endif ymx = (ycord[i] > ymx) ? ycord[i] : ymx; ymn = (ycord[i] < ymn) ? ycord[i] : ymn; } /* print the min/max sprintf(title2,"MDCT%1i %5.2f %5.2f bits=%i",gr,ymn,ymx, pplot1->mainbits[gr][ch]); */ if (gtkinfo.flag123) bits = pplot1->mainbits[gr][ch]; else bits = pplot->LAMEmainbits[gr][ch]; sprintf(title2, "MDCT%1i(%s) bits=%i ", gr, label, bits); xmn = 0; xmx = n - 1; ymn = 0; ymx = 11; gpk_bargraph_draw(mdctbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 0, title2, 0, barcolor); } /******************************************************************* * draw the psy model energy spectrum (k space) * l3psy.c computes pe, en, thm for THIS granule. *******************************************************************/ if (gtkinfo.kbflag) { for (gr = 0; gr < mode_gr; gr++) { n = HBLKSIZE; /* only show half the spectrum */ data = &pplot->energy[gr][ch][0]; ymn = 9e20; ymx = -9e20; for (i = 0; i < n; i++) { xcord[i] = i + 1; if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) ycord[i] = 0; else ycord[i] = log10(MAX(data[i], (double) 1)); ymx = (ycord[i] > ymx) ? ycord[i] : ymx; ymn = (ycord[i] < ymn) ? ycord[i] : ymn; } for (en = 0, j = 0; j < BLKSIZE; j++) en += pplot->energy[gr][ch][j]; sprintf(title2, "FFT%1i pe=%5.2fK en=%5.2e ", gr, pplot->pe[gr][ch] / 1000, en); ymn = 3; ymx = 15; xmn = 1; xmx = n; gpk_bargraph_draw(enerbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 1, title2, 0, barcolor); } } else { /******************************************************************* * draw the psy model energy spectrum (scalefactor bands) *******************************************************************/ for (gr = 0; gr < mode_gr; gr++) { if (blocktype[gr][ch] == 2) { n = 3 * SBMAX_s; data = &pplot->en_s[gr][ch][0]; data2 = &pplot->thr_s[gr][ch][0]; data3 = &pplot->xfsf_s[gr][ch][0]; } else { n = SBMAX_l; data = &pplot->en[gr][ch][0]; data2 = &pplot->thr[gr][ch][0]; data3 = &pplot->xfsf[gr][ch][0]; } ymn = 9e20; ymx = -9e20; for (i = 0; i < n; i++) { xcord[i] = i + 1; if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) ycord[i] = 0; else ycord[i] = log10(MAX(data[i], (double) 1)); /* ymx=(ycord[i] > ymx) ? ycord[i] : ymx; ymn=(ycord[i] < ymn) ? ycord[i] : ymn; */ } /* en = max energy difference amoung the 3 short FFTs for this granule */ en = pplot->ers[gr][ch]; if (en > 999) en = 999; sprintf(title2, "FFT%1i pe=%5.2fK/%3.1f \nnoise ovr_b:%i/max:%3.1f/ovr:%3.1f/tot:%3.1f/ssd:%i", gr, pplot->pe[gr][ch] / 1000, en, pplot->over[gr][ch], pplot->max_noise[gr][ch], pplot->over_noise[gr][ch], pplot->tot_noise[gr][ch], pplot->over_SSD[gr][ch]); barthick = 3; if (blocktype[gr][ch] == SHORT_TYPE) barthick = 2; if (!(subblock_draw[0] && subblock_draw[1] && subblock_draw[2])) barthick = 3; ymn = 3; ymx = 15; xmn = 1; xmx = n + 1; /* a little extra because of the bar thickness */ gpk_bargraph_draw(enerbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 1, title2, barthick, barcolor); for (i = 0; i < n; i++) { xcord[i] = i + 1 + .20; if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) ycord[i] = 0; else ycord[i] = log10(MAX(data2[i], (double) 1)); } gpk_bargraph_draw(enerbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 0, title2, barthick, grcolor[gr]); for (i = 0; i < n; i++) { xcord[i] = i + 1 + .40; if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) ycord[i] = 0; else ycord[i] = log10(MAX(data3[i], (double) 1)); } gpk_bargraph_draw(enerbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 0, title2, barthick, &red); } } /******************************************************************* * draw scalefactors *******************************************************************/ for (gr = 0; gr < mode_gr; gr++) { int ggain; if (blocktype[gr][ch] == 2) { n = 3 * SBMAX_s; if (gtkinfo.flag123) data = pplot1->sfb_s[gr][ch]; else data = pplot->LAMEsfb_s[gr][ch]; } else { n = SBMAX_l; if (gtkinfo.flag123) data = pplot1->sfb[gr][ch]; else data = pplot->LAMEsfb[gr][ch]; } ymn = -1; ymx = 10; for (i = 0; i < n; i++) { xcord[i] = i + 1; if (blocktype[gr][ch] == SHORT_TYPE && !subblock_draw[i % 3]) ycord[i] = 0; else ycord[i] = -data[i]; ymx = (ycord[i] > ymx - 2) ? ycord[i] + 2 : ymx; ymn = (ycord[i] < ymn) ? ycord[i] - 1 : ymn; } if (blocktype[gr][ch] == 2) { sprintf(label2, "SFB scale=%i preflag=%i %i%i%i", pplot1->scalefac_scale[gr][ch], pplot1->preflag[gr][ch], pplot1->sub_gain[gr][ch][0], pplot1->sub_gain[gr][ch][1], pplot1->sub_gain[gr][ch][2]); } else { sprintf(label2, "SFB scale=%i preflag=%i", pplot1->scalefac_scale[gr][ch], pplot1->preflag[gr][ch]); } if (gtkinfo.flag123) ggain = (pplot1->qss[gr][ch]); else ggain = (pplot->LAMEqss[gr][ch]); sprintf(title2, " ggain=%i", ggain); strcat(label2, title2); xmn = 1; xmx = n + 1; gpk_bargraph_draw(sfbbox[gr], n, xcord, ycord, xmn, ymn, xmx, ymx, 1, label2, 0, grcolor[gr]); ycord[0] = ycord[1] = 0; xcord[0] = 1; xcord[1] = n + 1; gpk_rectangle_draw(sfbbox[gr], xcord, ycord, xmn, ymn, xmx, ymx, &yellow); } } static void update_progress(void) { char label[80]; int tf = lame_get_totalframes(gfp); if (gtkinfo.totalframes > 0) tf = gtkinfo.totalframes; sprintf(label, "Frame:%4i/%4i %6.2fs", pplot->frameNum, (int) tf - 1, pplot->frametime); gtk_progress_set_value(GTK_PROGRESS(frameprogress), (gdouble) pplot->frameNum); gtk_label_set_text(GTK_LABEL(framecounter), label); } static void analyze(void) { if (idle_keepgoing) { idle_count = 0; idle_count_max = 0; idle_keepgoing = 0; idle_end = 0; } plot_frame(); update_progress(); } static void plotclick(GtkWidget * widget, gpointer data) { analyze(); } static int frameadv1(GtkWidget * widget, gpointer data) { int i; if (idle_keepgoing) { if (idle_back) { /* frame displayed is the old frame. to advance, just swap in new frame */ idle_back--; pplot = &Pinfo[READ_AHEAD + idle_back]; } else { /* advance the frame by reading in a new frame */ pplot = &Pinfo[READ_AHEAD]; if (mp3done) { /* dont try to read any more frames, and quit if "finish MP3" was selected */ /* if (idle_finish) gtk_main_quit(); */ idle_count_max = 0; idle_end = 0; } else { /* read in the next frame */ for (i = NUMPINFO - 1; i > 0; i--) memcpy(&Pinfo[i], &Pinfo[i - 1], sizeof(plotting_data)); pinfo = &Pinfo[0]; pinfo->num_samples = gtkmakeframe(); if (pinfo->num_samples == 0 && gtkinfo.totalframes == 0) /* allow an extra frame to flush decoder buffers */ gtkinfo.totalframes = pinfo->frameNum + 2; if (pinfo->sampfreq) pinfo->frametime = (pinfo->frameNum) * 1152.0 / pinfo->sampfreq; else pinfo->frametime = 0; /* eof? if (!pinfo->num_samples) if (idle_finish) gtk_main_quit(); */ pinfo->totbits = 0; { int gr, ch; for (gr = 0; gr < 2; gr++) for (ch = 0; ch < 2; ch++) { gtkinfo.totshort += (pinfo->mpg123blocktype[gr][ch] == 2); gtkinfo.totmix += !(pinfo->mixed[gr][ch] == 0); gtkinfo.totpreflag += (pinfo->preflag[gr][ch] == 1); pinfo->totbits += pinfo->mainbits[gr][ch]; } } if (pinfo->frameNum > 0) /* start averaging at second frame */ gtkinfo.avebits = (gtkinfo.avebits * ((pinfo->frameNum) - 1) + pinfo->totbits) / (pinfo->frameNum); gtkinfo.maxbits = MAX(gtkinfo.maxbits, pinfo->totbits); gtkinfo.totemph += !(pinfo->emph == 0); gtkinfo.totms += !(pinfo->ms_stereo == 0); gtkinfo.totis += !(pinfo->i_stereo == 0); if (gtkinfo.totalframes > 0) if (pplot->frameNum >= gtkinfo.totalframes - 1) mp3done = 1; } } idle_count++; if (gtkinfo.pupdate) plot_frame(); update_progress(); if ((idle_count >= idle_count_max) && (!idle_end)) analyze(); } else { /*no processing to do, sleep in order to not monopolize CPU */ msleep(10); } return 1; } static void frameadv(GtkWidget * widget, gpointer data) { int adv; if (!strcmp((char *) data, "-1")) { /* ignore if we've already gone back as far as possible */ if (pplot->frameNum == 0 || (idle_back == NUMBACK)) return; idle_back++; pplot = &Pinfo[READ_AHEAD + idle_back]; analyze(); return; } adv = 1; if (!strcmp((char *) data, "1")) adv = 1; if (!strcmp((char *) data, "10")) adv = 10; if (!strcmp((char *) data, "100")) adv = 100; if (!strcmp((char *) data, "finish")) idle_end = 1; if (idle_keepgoing) { /* already running - que up additional frame advance requests */ idle_count_max += adv; } else { /* turn on idleing */ idle_count_max = adv; idle_count = 0; idle_keepgoing = 1; } } /* another callback */ static void delete_event(GtkWidget * widget, GdkEvent * event, gpointer data) { /* set MP3 done flag in case the File/Quit menu item has been selected */ mp3done = 1; if (hip) { hip_decode_exit(hip); hip = 0; } gtk_main_quit(); } static void channel_option(GtkWidget * widget, gpointer data) { long option; option = (long) data; switch (option) { case 1: gtkinfo.msflag = 0; gtkinfo.chflag = 0; break; case 2: gtkinfo.msflag = 0; gtkinfo.chflag = 1; break; case 3: gtkinfo.msflag = 1; gtkinfo.chflag = 0; break; case 4: gtkinfo.msflag = 1; gtkinfo.chflag = 1; } analyze(); } static void spec_option(GtkWidget * widget, gpointer data) { long option; option = (long) data; switch (option) { case 1: gtkinfo.kbflag = 0; break; case 2: gtkinfo.kbflag = 1; break; case 3: gtkinfo.flag123 = 0; break; case 4: gtkinfo.flag123 = 1; break; case 5: gtkinfo.pupdate = 1; break; case 6: gtkinfo.pupdate = 0; break; case 7: gtkinfo.sfblines = !gtkinfo.sfblines; break; case 8: gtkinfo.difference = !gtkinfo.difference; break; } analyze(); } static gint key_press_event(GtkWidget * widget, GdkEventKey * event) { /* is a switch() statement in lame forbidden? */ if (event->keyval == '1') { subblock_draw[0] = 1; subblock_draw[1] = 0; subblock_draw[2] = 0; analyze(); } else if (event->keyval == '2') { subblock_draw[0] = 0; subblock_draw[1] = 1; subblock_draw[2] = 0; analyze(); } else if (event->keyval == '3') { subblock_draw[0] = 0; subblock_draw[1] = 0; subblock_draw[2] = 1; analyze(); } else if (event->keyval == '0') { subblock_draw[0] = 1; subblock_draw[1] = 1; subblock_draw[2] = 1; analyze(); } /* analyze(); */ /* dont redraw entire window for every key! */ return 0; } /*! Get the mp3x version string. */ /*! \param void \return a pointer to a string which describes the version of mp3x. */ const char * get_mp3x_version(void) { #if MP3X_ALPHA_VERSION > 0 static /*@observer@ */ const char *const str = XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION) " (alpha " XSTR(MP3X_ALPHA_VERSION) ", " __DATE__ " " __TIME__ ")"; #elif MP3X_BETA_VERSION > 0 static /*@observer@ */ const char *const str = XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION) " (beta " XSTR(MP3X_BETA_VERSION) ", " __DATE__ ")"; #else static /*@observer@ */ const char *const str = XSTR(MP3X_MAJOR_VERSION) "." XSTR(MP3X_MINOR_VERSION); #endif return str; } static void text_window(GtkWidget * widget, gpointer data) { long option; GtkWidget *hbox, *vbox, *button, *box; GtkWidget *textwindow, *vscrollbar; char text[256]; option = (long) data; textwindow = gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect_object(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(textwindow)); gtk_container_set_border_width(GTK_CONTAINER(textwindow), 0); vbox = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); button = gtk_button_new_with_label("close"); gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(textwindow)); box = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(box), FALSE); vscrollbar = gtk_vscrollbar_new(GTK_TEXT(box)->vadj); switch (option) { case 0: gtk_window_set_title(GTK_WINDOW(textwindow), "Documentation"); gtk_widget_set_usize(box, 450, 500); gtk_text_set_word_wrap(GTK_TEXT(box), TRUE); /* text should be moved outside this function, may be in a separate file */ gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "Frame header information: " "First the bitrate, sampling frequency and mono, stereo or jstereo " "indicators are displayed . If the bitstream is jstereo, then mid/side " "stereo or intensity stereo may be on (indicated in red). If " "de-emphasis is used, this is also indicated in red. The mdb value is " "main_data_begin. The encoded data starts this many bytes *before* the " "frame header. A large value of mdb means the bitstream has saved some " "bits into the reservoir, which it may allocate for some future frame. " "The two numbers after mdb are the size (in bits) used to encode the " "MDCT coefficients for this frame, followed byt the size of the bit " "resevoir before encoding this frame. The maximum frame size and a " "running average are given in the Stats pull down menu. A large " "maximum frame size indicates the bitstream has made use of the bit " "reservoir. \n\n", -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "PCM data (top graph): " "The PCM data is plotted in black. The layer3 frame is divided into 2 " "granules of 576 samples (marked with yellow vertical lines). In the " "case of normal, start and stop blocks, the MDCT coefficients for each " "granule are computed using a 1152 sample window centered over the " "granule. In the case of short blocks, the granule is further divided " "into 3 blocks of 192 samples (also marked with yellow vertical lines)." "The MDCT coefficients for these blocks are computed using 384 sample " "windows centered over the 192 sample window. (This info not available " "when analyzing .mp3 files.) For the psycho-acoustic model, a windowed " "FFT is computed for each granule. The range of these windows " "is denoted by the blue and green bars.\n\n", -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "PCM re-synthesis data (second graph): " "Same as the PCM window described above. The data displayed is the " "result of encoding and then decoding the original sample. \n\n", -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "MDCT windows: " "Shows the energy in the MDCT spectrum for granule 0 (left window) " "and granule 1 (right window). The text also shows the blocktype " "used, the number of bits used to encode the coefficients and the " "number of extra bits allocated from the reservoir. The MDCT pull down " "window will toggle between the original unquantized MDCT coefficients " "and the compressed (quantized) coefficients.\n\n", -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "FFT window: " "The gray bars show the energy in the FFT spectrum used by the " "psycho-acoustic model. Granule 0 is in the left window, granule 1 in " "the right window. The green and blue bars show how much distortion is " "allowable, as computed by the psycho-acoustic model. The red bars show " "the actual distortion after encoding. There is one FFT for each " "granule, computed with a 1024 Hann window centered over the " "appropriate granule. (the range of this 1024 sample window is shown " "by the blue and green bars in the PCM data window). The Spectrum pull " "down window will toggle between showing the energy in equally spaced " "frequency domain and the scale factor bands used by layer3. Finally, " "the perceptual entropy, total energy and number of scalefactor bands " "with audible distortion is shown. (This info not available when " "analyzing .mp3 files.)", -1); break; case 1: /* Set the about box information */ gtk_window_set_title(GTK_WINDOW(textwindow), "About"); gtk_widget_set_usize(box, 350, 260); sprintf(text, "LAME version %s \n%s\n\n", get_lame_version(), get_lame_url()); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "psycho-acoustic model: GPSYCHO version %s\n", get_psy_version()); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "frame analyzer: MP3x version %s\n\n", get_mp3x_version()); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "decoder: mpg123/mpglib .59q \nMichael Hipp (www.mpg123.de)\n\n", -1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, "Encoder, decoder & psy-models based on ISO\ndemonstration source. ", -1); break; case 2: gtk_window_set_title(GTK_WINDOW(textwindow), "Statistics"); gtk_widget_set_usize(box, 350, 260); sprintf(text, "frames processed so far: %i \n", Pinfo[0].frameNum + 1); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "granules processed so far: %i \n\n", 4 * (Pinfo[0].frameNum + 1)); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "mean bits/frame (approximate): %i\n", gtkinfo.approxbits); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "mean bits/frame (from LAME): %i\n", 4 * Pinfo[0].mean_bits); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "bitsize of largest frame: %i \n", gtkinfo.maxbits); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "average bits/frame: %3.1f \n\n", gtkinfo.avebits); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "ms_stereo frames: %i \n", gtkinfo.totms); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "i_stereo frames: %i \n", gtkinfo.totis); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "de-emphasis frames: %i \n", gtkinfo.totemph); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "short block granules: %i \n", gtkinfo.totshort); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "mixed block granules: %i \n", gtkinfo.totmix); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); sprintf(text, "preflag granules: %i \n", gtkinfo.totpreflag); gtk_text_insert(GTK_TEXT(box), NULL, NULL, NULL, text, -1); break; } gtk_widget_show(vscrollbar); gtk_widget_show(box); gtk_widget_show(vbox); gtk_widget_show(hbox); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(hbox), box, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(vbox), button, FALSE, TRUE, 0); gtk_container_add(GTK_CONTAINER(textwindow), vbox); gtk_widget_show(textwindow); } /* #include <strings.h>*/ /* This is the GtkItemFactoryEntry structure used to generate new menus. Item 1: The menu path. The letter after the underscore indicates an accelerator key once the menu is open. Item 2: The accelerator key for the entry Item 3: The callback function. Item 4: The callback action. This changes the parameters with which the function is called. The default is 0. Item 5: The item type, used to define what kind of an item it is. Here are the possible values: NULL -> "<Item>" "" -> "<Item>" "<Title>" -> create a title item "<Item>" -> create a simple item "<CheckItem>" -> create a check item "<ToggleItem>" -> create a toggle item "<RadioItem>" -> create a radio item <path> -> path of a radio item to link against "<Separator>" -> create a separator "<Branch>" -> create an item to hold sub items "<LastBranch>" -> create a right justified branch */ #define C(chr) "<control>" #chr #define func(name) (GtkItemFactoryCallback) (name) static const GtkItemFactoryEntry menu_items[] = { {"/_File", NULL, NULL, 0, "<Branch>"}, #if 0 {"/File/_New", C(N), func(print_hello), 0, NULL}, {"/File/_Open", C(O), func(print_hello), 0, NULL}, {"/File/_Save", C(S), func(print_hello), 0, NULL}, {"/File/Save _As", NULL, NULL, 0, NULL}, {"/File/sep1", NULL, NULL, 0, "<Separator>"}, {"/File/Quit", C(Q), func(gtk_main_quit), 0, NULL}, #endif {"/File/_Quit", C(Q), func(delete_event), 0, NULL}, {"/_Plotting", NULL, NULL, 0, "<Branch>"}, {"/Plotting/_While advancing", NULL, func(spec_option), 5, NULL}, {"/Plotting/_After advancing", NULL, func(spec_option), 6, NULL}, {"/Plotting/Toggle SFB lines", NULL, func(spec_option), 7, NULL}, {"/Plotting/Toggle orig-diff", NULL, func(spec_option), 8, NULL}, {"/_Channel", NULL, NULL, 0, "<Branch>"}, {"/Channel/show _Left", NULL, func(channel_option), 1, NULL}, {"/Channel/show _Right", NULL, func(channel_option), 2, NULL}, {"/Channel/show _Mid", NULL, func(channel_option), 3, NULL}, {"/Channel/show _Side", NULL, func(channel_option), 4, NULL}, {"/_Spectrum", NULL, NULL, 0, "<Branch>"}, {"/Spectrum/_Scalefactor bands", NULL, func(spec_option), 1, NULL}, {"/Spectrum/_Wave number", NULL, func(spec_option), 2, NULL}, {"/_MDCT", NULL, NULL, 0, "<Branch>"}, {"/MDCT/_Original", NULL, func(spec_option), 3, NULL}, {"/MDCT/_Compressed", NULL, func(spec_option), 4, NULL}, {"/MDCT/_Toggle SFB lines", NULL, func(spec_option), 7, NULL}, {"/_Stats", NULL, NULL, 0, "<Branch>"}, {"/Stats/_Show", NULL, func(text_window), 2, NULL}, {"/_Help", NULL, NULL, 0, "<LastBranch>"}, {"/_Help/_Documentation", NULL, func(text_window), 0, NULL}, {"/_Help/_About", NULL, func(text_window), 1, NULL}, }; #undef C #undef func static void get_main_menu(GtkWidget * windows, GtkWidget ** menubar) { unsigned int nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]); GtkItemFactory *item_factory; GtkAccelGroup *accel_group; accel_group = gtk_accel_group_new(); /* This function initializes the item factory. Param 1: The type of menu - can be GTK_TYPE_MENU_BAR, GTK_TYPE_MENU, or GTK_TYPE_OPTION_MENU. Param 2: The path of the menu. Param 3: A pointer to a gtk_accel_group. The item factory sets up the accelerator table while generating menus. */ item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group); /* This function generates the menu items. Pass the item factory, the number of items in the array, the array itself, and any callback data for the the menu items. */ gtk_item_factory_create_items(item_factory, nmenu_items, (GtkItemFactoryEntry *) menu_items, NULL); /* Attach the new accelerator group to the window. */ gtk_accel_group_attach(accel_group, GTK_OBJECT(windows)); if (menubar) /* Finally, return the actual menu bar created by the item factory. */ *menubar = gtk_item_factory_get_widget(item_factory, "<main>"); } int gtkcontrol(lame_global_flags * gfp2, char *inPath) { /* GtkWidget is the storage type for widgets */ GtkWidget *button; GtkAdjustment *adj; GtkWidget *mbox; /* main box */ GtkWidget *box1; /* frame control buttons go */ GtkWidget *box2; /* frame counters */ GtkWidget *box3; /* frame header info */ GtkWidget *table; /* table for all the plotting areas */ GtkWidget *menubar; gint tableops, graphx, graphy; char frameinfo[80]; graphx = 600; /* minimum allowed size of pixmap */ graphy = 95; gfp = gfp2; gfc = gfp->internal_flags; /* set some global defaults/variables */ gtkinfo.filetype = is_mpeg_file_format(global_reader.input_format) ? 1 : 0; gtkinfo.msflag = 0; gtkinfo.chflag = 0; gtkinfo.kbflag = 0; gtkinfo.flag123 = is_mpeg_file_format(global_reader.input_format) ? 1 : 0; /* MP3 file=use mpg123 output */ gtkinfo.pupdate = 0; gtkinfo.avebits = 0; gtkinfo.maxbits = 0; gtkinfo.approxbits = 0; gtkinfo.totemph = 0; gtkinfo.totms = 0; gtkinfo.totis = 0; gtkinfo.totshort = 0; gtkinfo.totmix = 0; gtkinfo.sfblines = 1; gtkinfo.difference = 0; gtkinfo.totalframes = 0; memset((char *) Pinfo, 0, sizeof(Pinfo)); pplot = &Pinfo[READ_AHEAD]; strcpy(frameinfo, "MP3x: "); strncat(frameinfo, inPath, 70); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), frameinfo); gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL); gtk_signal_connect_object(GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(key_press_event), GTK_OBJECT(window)); gtk_container_set_border_width(GTK_CONTAINER(window), 0); mbox = gtk_vbox_new(FALSE, 0); /* layout of mbox */ box1 = gtk_hbox_new(FALSE, 0); box2 = gtk_hbox_new(FALSE, 0); box3 = gtk_hbox_new(FALSE, 0); table = gtk_table_new(5, 2, FALSE); tableops = GTK_FILL | GTK_EXPAND | GTK_SHRINK; get_main_menu(window, &menubar); gtk_box_pack_start(GTK_BOX(mbox), menubar, FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(mbox), box1, FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(mbox), box2, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mbox), box3, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(mbox), table, TRUE, TRUE, 0); gtk_container_add(GTK_CONTAINER(window), mbox); /*********************************************************************/ /* stuff in box3 frame header info */ /*********************************************************************/ /* headerbox = gtk_label_new(" "); gtk_label_set_justify(GTK_LABEL(headerbox),GTK_JUSTIFY_LEFT); */ headerbox = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(headerbox), FALSE); gtk_widget_set_usize(headerbox, 200, 20); gtk_widget_show(headerbox); gtk_box_pack_start(GTK_BOX(box3), headerbox, TRUE, TRUE, 0); /*********************************************************************/ /* stuff in box2 frame counters */ /*********************************************************************/ framecounter = gtk_label_new(""); gtk_widget_show(framecounter); gtk_box_pack_start(GTK_BOX(box2), framecounter, FALSE, TRUE, 0); adj = (GtkAdjustment *) gtk_adjustment_new(0, 0, (gint) lame_get_totalframes(gfp) - 1, 0, 0, 0); frameprogress = gtk_progress_bar_new_with_adjustment(adj); /* Set the format of the string that can be displayed in the * trough of the progress bar: * %p - percentage * %v - value * %l - lower range value * %u - upper range value */ gtk_progress_set_format_string(GTK_PROGRESS(frameprogress), "%p%%"); gtk_progress_set_value(GTK_PROGRESS(frameprogress), (gdouble) 0); gtk_progress_set_show_text(GTK_PROGRESS(frameprogress), TRUE); gtk_widget_show(frameprogress); gtk_box_pack_end(GTK_BOX(box2), frameprogress, FALSE, TRUE, 0); /*********************************************************************/ /* stuff in box1 buttons along bottom */ /*********************************************************************/ button = gtk_button_new_with_label("-1"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(frameadv), (gpointer) "-1"); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("+1"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(frameadv), (gpointer) "1"); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("+10"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(frameadv), (gpointer) "10"); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("+100"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(frameadv), (gpointer) "100"); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("last frame"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(frameadv), (gpointer) "finish"); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_button_new_with_label("stop/plot"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(plotclick), NULL); gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0); gtk_widget_show(button); /*********************************************************************/ /* stuff in table. all the plotting windows */ /*********************************************************************/ pcmbox = gpk_plot_new(graphx, graphy); gtk_table_attach(GTK_TABLE(table), pcmbox, 0, 2, 0, 1, tableops, tableops, 2, 2); gtk_widget_show(pcmbox); winbox = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), winbox, 0, 2, 1, 2, tableops, tableops, 2, 2); gtk_widget_show(winbox); mdctbox[0] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), mdctbox[0], 0, 1, 2, 3, tableops, tableops, 2, 2); gtk_widget_show(mdctbox[0]); mdctbox[1] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), mdctbox[1], 1, 2, 2, 3, tableops, tableops, 2, 2); gtk_widget_show(mdctbox[1]); enerbox[0] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), enerbox[0], 0, 1, 3, 4, tableops, tableops, 2, 2); gtk_widget_show(enerbox[0]); enerbox[1] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), enerbox[1], 1, 2, 3, 4, tableops, tableops, 2, 2); gtk_widget_show(enerbox[1]); sfbbox[0] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), sfbbox[0], 0, 1, 4, 5, tableops, tableops, 2, 2); gtk_widget_show(sfbbox[0]); sfbbox[1] = gpk_plot_new(graphy, graphy); gtk_table_attach(GTK_TABLE(table), sfbbox[1], 1, 2, 4, 5, tableops, tableops, 2, 2); gtk_widget_show(sfbbox[1]); gtk_idle_add((GtkFunction) frameadv1, NULL); gtk_widget_show(menubar); gtk_widget_show(box2); gtk_widget_show(box3); gtk_widget_show(table); gtk_widget_show(box1); gtk_widget_show(mbox); gtk_widget_show(window); /* show smallest allowed window */ /* make window bigger. */ /* now the user will be able to shrink it, if desired */ /* gtk_widget_set_usize(mbox,500,500); */ /* gtk_widget_show (window); */ /* show smallest allowed window */ idle_keepgoing = 1; /* processing of frames is ON */ idle_count_max = READ_AHEAD + 1; /* number of frames to process before plotting */ idle_count = 0; /* pause & plot when idle_count=idle_count_max */ gtk_main(); assert(mp3done); return (0); } �������������������������������������������������������������lame-3.100/frontend/Makefile.am���������������������������������������������������������������������000644 �001751 �001751 �00000002526 11646553555 017762� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.35 2011/10/16 13:09:01 robert Exp $ include $(top_srcdir)/Makefile.am.global bin_PROGRAMS = @WITH_FRONTEND@ @WITH_MP3RTP@ @WITH_MP3X@ EXTRA_PROGRAMS = lame$(EXEEXT) mp3rtp$(EXEEXT) mp3x$(EXEEXT) EXTRA_DIST = \ amiga_mpega.c DEFS = @DEFS@ @CONFIG_DEFS@ common_sources = \ main.c \ brhist.c \ console.c \ get_audio.c \ lametime.c \ parse.c \ timestatus.c noinst_HEADERS = \ brhist.h \ console.h \ get_audio.h \ gtkanal.h \ gpkplotting.h \ lametime.h \ main.h \ parse.h \ rtp.h \ timestatus.h lame_SOURCES = lame_main.c $(common_sources) mp3rtp_SOURCES = mp3rtp.c rtp.c $(common_sources) mp3x_SOURCES = mp3x.c gtkanal.c gpkplotting.c $(common_sources) CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@ LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ @SNDFILE_LIBS@ INCLUDES = -I$(top_srcdir)/libmp3lame -I$(top_srcdir)/include -I$(top_builddir) LDADD = @LDADD@ \ $(top_builddir)/libmp3lame/libmp3lame.la \ @FRONTEND_LDADD@ mp3x_LDADD = $(LDADD) @GTK_LIBS@ CLEANFILES = lclint.txt $(EXTRA_PROGRAMS) LCLINTFLAGS= \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint lclint.txt: ${lame_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${lame_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/lametime.c����������������������������������������������������������������������000644 �001751 �001751 �00000006362 11561266675 017671� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Lame time routines source file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: lametime.c,v 1.21 2011/05/07 16:05:17 rbrito Exp $ */ /* * name: GetCPUTime ( void ) * * description: returns CPU time used by the process * input: none * output: time in seconds * known bugs: may not work in SMP and RPC * conforming: ANSI C * * There is some old difficult to read code at the end of this file. * Can someone integrate this into this function (if useful)? */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <assert.h> #include <stdio.h> #include <time.h> #ifdef WITH_DMALLOC #include <dmalloc.h> #endif #include "lametime.h" #if !defined(CLOCKS_PER_SEC) # warning Your system does not define CLOCKS_PER_SEC, guessing one... # define CLOCKS_PER_SEC 1000000 #endif double GetCPUTime(void) { clock_t t; #if defined(_MSC_VER) || defined(__BORLANDC__) t = clock(); #else t = clock(); #endif return t / (double) CLOCKS_PER_SEC; } /* * name: GetRealTime ( void ) * * description: returns real (human) time elapsed relative to a fixed time (mostly 1970-01-01 00:00:00) * input: none * output: time in seconds * known bugs: bad precision with time() */ #if defined(__unix__) || defined(SVR4) || defined(BSD) # include <sys/time.h> # include <unistd.h> double GetRealTime(void) { /* conforming: SVr4, BSD 4.3 */ struct timeval t; if (0 != gettimeofday(&t, NULL)) assert(0); return t.tv_sec + 1.e-6 * t.tv_usec; } #elif defined(WIN16) || defined(WIN32) # include <stdio.h> # include <sys/types.h> # include <sys/timeb.h> double GetRealTime(void) { /* conforming: Win 95, Win NT */ struct timeb t; ftime(&t); return t.time + 1.e-3 * t.millitm; } #else double GetRealTime(void) { /* conforming: SVr4, SVID, POSIX, X/OPEN, BSD 4.3 */ /* BUT NOT GUARANTEED BY ANSI */ time_t t; t = time(NULL); return (double) t; } #endif #if defined(_WIN32) || defined(__CYGWIN__) # include <io.h> # include <fcntl.h> #else # include <unistd.h> #endif int lame_set_stream_binary_mode(FILE * const fp) { #if defined __EMX__ _fsetmode(fp, "b"); #elif defined __BORLANDC__ setmode(_fileno(fp), O_BINARY); #elif defined __CYGWIN__ setmode(fileno(fp), _O_BINARY); #elif defined _WIN32 _setmode(_fileno(fp), _O_BINARY); #else (void) fp; /* doing nothing here, silencing the compiler only. */ #endif return 0; } /* End of lametime.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/timestatus.c��������������������������������������������������������������������000644 �001751 �001751 �00000034160 12122417123 020247� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * time status related function source file * * Copyright (c) 1999 Mark Taylor * 2010 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: timestatus.c,v 1.61 2013/03/20 20:38:43 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #if 1 # define SPEED_CHAR "x" /* character x */ # define SPEED_MULT 1. #else # define SPEED_CHAR "%%" # define SPEED_MULT 100. #endif #include <assert.h> #include <time.h> #include <string.h> #include <stdlib.h> #include "lame.h" #include "main.h" #include "lametime.h" #include "timestatus.h" #include "brhist.h" #include "console.h" #ifdef WITH_DMALLOC #include <dmalloc.h> #endif typedef struct time_status_struct { double last_time; /* result of last call to clock */ double elapsed_time; /* total time */ double estimated_time; /* estimated total duration time [s] */ double speed_index; /* speed relative to realtime coding [100%] */ } timestatus_t; static struct EncoderProgress { timestatus_t real_time; timestatus_t proc_time; double last_time; int last_frame_num; int time_status_init; } global_encoder_progress; /* * Calculates from the input (see below) the following values: * - total estimated time * - a speed index */ static void ts_calc_times(timestatus_t * const tstime, /* tstime->elapsed_time: elapsed time */ const int sample_freq, /* sample frequency [Hz/kHz] */ const int frameNum, /* Number of the current Frame */ const int totalframes, /* total umber of Frames */ const int framesize) { /* Size of a frame [bps/kbps] */ assert(sample_freq >= 8000 && sample_freq <= 48000); if (frameNum > 0 && tstime->elapsed_time > 0) { tstime->estimated_time = tstime->elapsed_time * totalframes / frameNum; tstime->speed_index = framesize * frameNum / (sample_freq * tstime->elapsed_time); } else { tstime->estimated_time = 0.; tstime->speed_index = 0.; } } /* Decomposes a given number of seconds into a easy to read hh:mm:ss format * padded with an additional character */ static void ts_time_decompose(const double x, const char padded_char) { const unsigned long time_in_sec = (unsigned long)x; const unsigned long hour = time_in_sec / 3600; const unsigned int min = time_in_sec / 60 % 60; const unsigned int sec = time_in_sec % 60; if (hour == 0) console_printf(" %2u:%02u%c", min, sec, padded_char); else if (hour < 100) console_printf("%2lu:%02u:%02u%c", hour, min, sec, padded_char); else console_printf("%6lu h%c", hour, padded_char); } static void timestatus(const lame_global_flags * const gfp) { timestatus_t* real_time = &global_encoder_progress.real_time; timestatus_t* proc_time = &global_encoder_progress.proc_time; int percent; double tmx, delta; int samp_rate = lame_get_out_samplerate(gfp) , frameNum = lame_get_frameNum(gfp) , totalframes = lame_get_totalframes(gfp) , framesize = lame_get_framesize(gfp) ; if (totalframes < frameNum) { totalframes = frameNum; } if (global_encoder_progress.time_status_init == 0) { real_time->last_time = GetRealTime(); proc_time->last_time = GetCPUTime(); real_time->elapsed_time = 0; proc_time->elapsed_time = 0; } /* we need rollover protection for GetCPUTime, and maybe GetRealTime(): */ tmx = GetRealTime(); delta = tmx - real_time->last_time; if (delta < 0) delta = 0; /* ignore, clock has rolled over */ real_time->elapsed_time += delta; real_time->last_time = tmx; tmx = GetCPUTime(); delta = tmx - proc_time->last_time; if (delta < 0) delta = 0; /* ignore, clock has rolled over */ proc_time->elapsed_time += delta; proc_time->last_time = tmx; if (global_encoder_progress.time_status_init == 0) { console_printf("\r" " Frame | CPU time/estim | REAL time/estim | play/CPU | ETA \n" " 0/ ( 0%%)| 0:00/ : | 0:00/ : | " SPEED_CHAR "| : \r" /* , Console_IO.str_clreoln, Console_IO.str_clreoln */ ); global_encoder_progress.time_status_init = 1; return; } ts_calc_times(real_time, samp_rate, frameNum, totalframes, framesize); ts_calc_times(proc_time, samp_rate, frameNum, totalframes, framesize); if (frameNum < totalframes) { percent = (int) (100. * frameNum / totalframes + 0.5); } else { percent = 100; } console_printf("\r%6i/%-6i", frameNum, totalframes); console_printf(percent < 100 ? " (%2d%%)|" : "(%3.3d%%)|", percent); ts_time_decompose(proc_time->elapsed_time, '/'); ts_time_decompose(proc_time->estimated_time, '|'); ts_time_decompose(real_time->elapsed_time, '/'); ts_time_decompose(real_time->estimated_time, '|'); console_printf(proc_time->speed_index <= 1. ? "%9.4f" SPEED_CHAR "|" : "%#9.5g" SPEED_CHAR "|", SPEED_MULT * proc_time->speed_index); ts_time_decompose((real_time->estimated_time - real_time->elapsed_time), ' '); } static void timestatus_finish(void) { console_printf("\n"); } static void brhist_init_package(lame_global_flags const* gf) { if (global_ui_config.brhist) { if (brhist_init(gf, lame_get_VBR_min_bitrate_kbps(gf), lame_get_VBR_max_bitrate_kbps(gf))) { /* fail to initialize */ global_ui_config.brhist = 0; } } else { brhist_init(gf, 128, 128); /* Dirty hack */ } } void encoder_progress_begin( lame_global_flags const* gf , char const* inPath , char const* outPath ) { brhist_init_package(gf); global_encoder_progress.time_status_init = 0; global_encoder_progress.last_time = 0; global_encoder_progress.last_frame_num = 0; if (global_ui_config.silent < 9) { char* i_file = 0; char* o_file = 0; #if defined( _WIN32 ) && !defined(__MINGW32__) inPath = i_file = utf8ToConsole8Bit(inPath); outPath = o_file = utf8ToConsole8Bit(outPath); #endif lame_print_config(gf); /* print useful information about options being used */ console_printf("Encoding %s%s to %s\n", strcmp(inPath, "-") ? inPath : "<stdin>", strlen(inPath) + strlen(outPath) < 66 ? "" : "\n ", strcmp(outPath, "-") ? outPath : "<stdout>"); free(i_file); free(o_file); console_printf("Encoding as %g kHz ", 1.e-3 * lame_get_out_samplerate(gf)); { static const char *mode_names[2][4] = { {"stereo", "j-stereo", "dual-ch", "single-ch"}, {"stereo", "force-ms", "dual-ch", "single-ch"} }; switch (lame_get_VBR(gf)) { case vbr_rh: console_printf("%s MPEG-%u%s Layer III VBR(q=%g) qval=%i\n", mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)], 2 - lame_get_version(gf), lame_get_out_samplerate(gf) < 16000 ? ".5" : "", lame_get_VBR_quality(gf), lame_get_quality(gf)); break; case vbr_mt: case vbr_mtrh: console_printf("%s MPEG-%u%s Layer III VBR(q=%g)\n", mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)], 2 - lame_get_version(gf), lame_get_out_samplerate(gf) < 16000 ? ".5" : "", lame_get_VBR_quality(gf)); break; case vbr_abr: console_printf("%s MPEG-%u%s Layer III (%gx) average %d kbps qval=%i\n", mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)], 2 - lame_get_version(gf), lame_get_out_samplerate(gf) < 16000 ? ".5" : "", 0.1 * (int) (10. * lame_get_compression_ratio(gf) + 0.5), lame_get_VBR_mean_bitrate_kbps(gf), lame_get_quality(gf)); break; default: console_printf("%s MPEG-%u%s Layer III (%gx) %3d kbps qval=%i\n", mode_names[lame_get_force_ms(gf)][lame_get_mode(gf)], 2 - lame_get_version(gf), lame_get_out_samplerate(gf) < 16000 ? ".5" : "", 0.1 * (int) (10. * lame_get_compression_ratio(gf) + 0.5), lame_get_brate(gf), lame_get_quality(gf)); break; } } if (global_ui_config.silent <= -10) { lame_print_internals(gf); } } } void encoder_progress( lame_global_flags const* gf ) { if (global_ui_config.silent <= 0) { int const frames = lame_get_frameNum(gf); int const frames_diff = frames - global_encoder_progress.last_frame_num; if (global_ui_config.update_interval <= 0) { /* most likely --disptime x not used */ if (frames_diff < 100 && frames_diff != 0) { /* true, most of the time */ return; } global_encoder_progress.last_frame_num = (frames/100)*100; } else { if (frames != 0 && frames != 9) { double const act = GetRealTime(); double const dif = act - global_encoder_progress.last_time; if (dif >= 0 && dif < global_ui_config.update_interval) { return; } } global_encoder_progress.last_time = GetRealTime(); /* from now! disp_time seconds */ } if (global_ui_config.brhist) { brhist_jump_back(); } timestatus(gf); if (global_ui_config.brhist) { brhist_disp(gf); } console_flush(); } } void encoder_progress_end( lame_global_flags const* gf ) { if (global_ui_config.silent <= 0) { if (global_ui_config.brhist) { brhist_jump_back(); } timestatus(gf); if (global_ui_config.brhist) { brhist_disp(gf); } timestatus_finish(); } } /* these functions are used in get_audio.c */ static struct DecoderProgress { int last_mode_ext; int frames_total; int frame_ctr; int framesize; unsigned long samples; } global_decoder_progress; static unsigned long calcEndPadding(unsigned long samples, int pcm_samples_per_frame) { unsigned long end_padding; samples += 576; end_padding = pcm_samples_per_frame - (samples % pcm_samples_per_frame); if (end_padding < 576) end_padding += pcm_samples_per_frame; return end_padding; } static unsigned long calcNumBlocks(unsigned long samples, int pcm_samples_per_frame) { unsigned long end_padding; samples += 576; end_padding = pcm_samples_per_frame - (samples % pcm_samples_per_frame); if (end_padding < 576) end_padding += pcm_samples_per_frame; return (samples + end_padding) / pcm_samples_per_frame; } DecoderProgress decoder_progress_init(unsigned long n, int framesize) { DecoderProgress dp = &global_decoder_progress; dp->last_mode_ext =0; dp->frames_total = 0; dp->frame_ctr = 0; dp->framesize = framesize; dp->samples = 0; if (n != (0ul-1ul)) { if (framesize == 576 || framesize == 1152) { dp->frames_total = calcNumBlocks(n, framesize); dp->samples = 576 + calcEndPadding(n, framesize); } else if (framesize > 0) { dp->frames_total = n / framesize; } else { dp->frames_total = n; } } return dp; } static void addSamples(DecoderProgress dp, int iread) { dp->samples += iread; dp->frame_ctr += dp->samples / dp->framesize; dp->samples %= dp->framesize; if (dp->frames_total < dp->frame_ctr) { dp->frames_total = dp->frame_ctr; } } void decoder_progress(DecoderProgress dp, const mp3data_struct * mp3data, int iread) { addSamples(dp, iread); console_printf("\rFrame#%6i/%-6i %3i kbps", dp->frame_ctr, dp->frames_total, mp3data->bitrate); /* Programmed with a single frame hold delay */ /* Attention: static data */ /* MP2 Playback is still buggy. */ /* "'00' subbands 4-31 in intensity_stereo, bound==4" */ /* is this really intensity_stereo or is it MS stereo? */ if (mp3data->mode == JOINT_STEREO) { int curr = mp3data->mode_ext; int last = dp->last_mode_ext; console_printf(" %s %c", curr & 2 ? last & 2 ? " MS " : "LMSR" : last & 2 ? "LMSR" : "L R", curr & 1 ? last & 1 ? 'I' : 'i' : last & 1 ? 'i' : ' '); dp->last_mode_ext = curr; } else { console_printf(" "); dp->last_mode_ext = 0; } /* console_printf ("%s", Console_IO.str_clreoln ); */ console_printf(" \b\b\b\b\b\b\b\b"); console_flush(); } void decoder_progress_finish(DecoderProgress dp) { (void) dp; console_printf("\n"); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/brhist.h������������������������������������������������������������������������000644 �001751 �001751 �00000002273 11561266675 017371� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Bitrate histogram include file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_BRHIST_H #define LAME_BRHIST_H #include "lame.h" #if defined(__cplusplus) extern "C" { #endif int brhist_init(const lame_global_flags * gf, const int bitrate_kbps_min, const int bitrate_kbps_max); void brhist_disp(const lame_global_flags * gf); void brhist_jump_back(void); #if defined(__cplusplus) } #endif #endif /* LAME_BRHIST_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/amiga_mpega.c�������������������������������������������������������������������000644 �001751 �001751 �00000006533 10331663504 020305� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MPGLIB replacement using mpega.library (AmigaOS) * Written by Thomas Wenzel and Sigbjrn (CISC) Skj�et. * * Big thanks to St�hane Tavernard for mpega.library. * */ /* $Id: amiga_mpega.c,v 1.3 2005/11/01 13:01:56 robert Exp $ */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #ifdef AMIGA_MPEGA #define __USE_SYSBASE #include "lame.h" #include <stdio.h> #include <stdlib.h> /* We need a small workaround here so GCC doesn't fail upon redefinition. :P */ #define FLOAT _FLOAT #include <proto/exec.h> #include <proto/mpega.h> #undef _FLOAT #ifndef __GNUC__ #include <dos.h> #endif struct Library *MPEGABase = NULL; MPEGA_STREAM *mstream = NULL; MPEGA_CTRL mctrl; static const int smpls[2][4] = { /* Layer x I II III */ {0, 384, 1152, 1152}, /* MPEG-1 */ {0, 384, 1152, 576} /* MPEG-2(.5) */ }; #ifndef __GNUC__ static int break_cleanup(void) { /* Dummy break function to make atexit() work. :P */ return 1; } #endif static void exit_cleanup(void) { if (mstream) { MPEGA_close(mstream); mstream = NULL; } if (MPEGABase) { CloseLibrary(MPEGABase); MPEGABase = NULL; } } int lame_decode_initfile(const char *fullname, mp3data_struct * mp3data) { mctrl.bs_access = NULL; mctrl.layer_1_2.mono.quality = 2; mctrl.layer_1_2.stereo.quality = 2; mctrl.layer_1_2.mono.freq_div = 1; mctrl.layer_1_2.stereo.freq_div = 1; mctrl.layer_1_2.mono.freq_max = 48000; mctrl.layer_1_2.stereo.freq_max = 48000; mctrl.layer_3.mono.quality = 2; mctrl.layer_3.stereo.quality = 2; mctrl.layer_3.mono.freq_div = 1; mctrl.layer_3.stereo.freq_div = 1; mctrl.layer_3.mono.freq_max = 48000; mctrl.layer_3.stereo.freq_max = 48000; mctrl.layer_1_2.force_mono = 0; mctrl.layer_3.force_mono = 0; MPEGABase = OpenLibrary("mpega.library", 2); if (!MPEGABase) { error_printf("Unable to open mpega.library v2\n"); exit(1); } #ifndef __GNUC__ onbreak(break_cleanup); #endif atexit(exit_cleanup); mp3data->header_parsed = 0; mstream = MPEGA_open((char *) fullname, &mctrl); if (!mstream) return (-1); mp3data->header_parsed = 1; mp3data->stereo = mstream->dec_channels; mp3data->samplerate = mstream->dec_frequency; mp3data->bitrate = mstream->bitrate; mp3data->nsamp = (float) mstream->ms_duration / 1000 * mstream->dec_frequency; mp3data->mode = mstream->mode; mp3data->mode_ext = 0; /* mpega.library doesn't supply this info! :( */ mp3data->framesize = smpls[mstream->norm - 1][mstream->layer]; return 0; } int lame_decode_fromfile(FILE * fd, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int outsize = 0; WORD *b[MPEGA_MAX_CHANNELS]; b[0] = pcm_l; b[1] = pcm_r; mp3data->header_parsed = 0; while ((outsize == 0) || (outsize == MPEGA_ERR_BADFRAME)) /* Skip bad frames */ outsize = MPEGA_decode_frame(mstream, b); if (outsize < 0) return (-1); mp3data->header_parsed = 1; mp3data->stereo = mstream->dec_channels; mp3data->samplerate = mstream->dec_frequency; mp3data->bitrate = mstream->bitrate; mp3data->mode = mstream->mode; mp3data->mode_ext = 0; /* mpega.library doesn't supply this info! :( */ mp3data->framesize = smpls[mstream->norm - 1][mstream->layer]; return outsize; } #endif /* AMIGA_MPEGA */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/parse.h�������������������������������������������������������������������������000644 �001751 �001751 �00000001401 13154046617 017170� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef PARSE_H_INCLUDED #define PARSE_H_INCLUDED #if defined(__cplusplus) extern "C" { #endif int usage(FILE * const fp, const char *ProgramName); int short_help(const lame_global_flags * gfp, FILE * const fp, const char *ProgramName); int long_help(const lame_global_flags * gfp, FILE * const fp, const char *ProgramName, int lessmode); int display_bitrates(FILE * const fp); int parse_args(lame_global_flags * gfp, int argc, char **argv, char *const inPath, char *const outPath, char **nogap_inPath, int *max_nogap); void parse_close(); int generateOutPath(char const* inPath, char const* outDir, char const* suffix, char* outPath); #if defined(__cplusplus) } #endif #endif /* end of parse.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/gpkplotting.h�������������������������������������������������������������������000644 �001751 �001751 �00000004053 11561266675 020436� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GTK plotting routines include file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_GPKPLOTTING_H #define LAME_GPKPLOTTING_H #include <gtk/gtk.h> /* allocate a graphing widget */ GtkWidget *gpk_plot_new(int width, int height); /* graph a function in the graphing widged */ void gpk_graph_draw(GtkWidget * widget, int n, gdouble * xcord, gdouble * ycord, gdouble xmn, gdouble ymn, gdouble xmx, gdouble ymx, int clear, char *title, GdkColor * color); /* draw a rectangle in the graphing widget */ void gpk_rectangle_draw(GtkWidget * widget, /* plot on this widged */ gdouble xcord[2], gdouble ycord[2], /* corners */ gdouble xmn, gdouble ymn, /* coordinates of corners */ gdouble xmx, gdouble ymx, GdkColor * color); /* color to use */ /* make a bar graph in the graphing widged */ void gpk_bargraph_draw(GtkWidget * widget, int n, gdouble * xcord, gdouble * ycord, gdouble xmn, gdouble ymn, gdouble xmx, gdouble ymx, int clear, char *title, int bwidth, GdkColor * color); /* set forground color */ void setcolor(GtkWidget * widget, GdkColor * color, int red, int green, int blue); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/depcomp�������������������������������������������������������������������������000755 �001751 �001751 �00000056017 13126231407 017267� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/mp3rtp.c������������������������������������������������������������������������000644 �001751 �001751 �00000017762 13154046617 017317� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * mp3rtp command line frontend program * * initially contributed by Felix von Leitner * * Copyright (c) 2000 Mark Taylor * 2010 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: mp3rtp.c,v 1.37 2017/08/24 20:43:10 robert Exp $ */ /* Still under work ..., need a client for test, where can I get one? */ /* An audio player named Zinf (aka freeamp) can play rtp streams */ /* * experimental translation: * * gcc -I..\include -I..\libmp3lame -o mp3rtp mp3rtp.c ../libmp3lame/libmp3lame.a lametime.c get_audio.c ieeefloat.c timestatus.c parse.c rtp.c -lm * * wavrec -t 14400 -s 44100 -S /proc/self/fd/1 | ./mp3rtp 10.1.1.42 -V2 -b128 -B256 - my_mp3file.mp3 */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <string.h> #endif #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #include "lame.h" #include "main.h" #include "parse.h" #include "lametime.h" #include "timestatus.h" #include "get_audio.h" #include "rtp.h" #include "console.h" #ifdef WITH_DMALLOC #include <dmalloc.h> #endif /* * Encode (via LAME) to mp3 with RTP streaming of the output. * * Author: Felix von Leitner <leitner@vim.org> * * mp3rtp ip[:port[:ttl]] [lame encoding options] infile outfile * * examples: * arecord -b 16 -s 22050 -w | ./mp3rtp 224.17.23.42:5004:2 -b 56 - /dev/null * arecord -b 16 -s 44100 -w | ./mp3rtp 10.1.1.42 -V2 -b128 -B256 - my_mp3file.mp3 * */ static unsigned int maxvalue(int Buffer[2][1152]) { int max = 0; int i; for (i = 0; i < 1152; i++) { if (abs(Buffer[0][i]) > max) max = abs(Buffer[0][i]); if (abs(Buffer[1][i]) > max) max = abs(Buffer[1][i]); } return max >> 16; } static void levelmessage(unsigned int maxv, int* maxx, int* tmpx) { char buff[] = "| . | . | . | . | . | . | . | . | . | . | \r"; int tmp = *tmpx, max = *maxx; buff[tmp] = '+'; tmp = (maxv * 61 + 16384) / (32767 + 16384 / 61); if (tmp > sizeof(buff) - 2) tmp = sizeof(buff) - 2; if (max < tmp) max = tmp; buff[max] = 'x'; buff[tmp] = '#'; console_printf(buff); console_flush(); *maxx = max; *tmpx = tmp; } /************************************************************************ * * main * * PURPOSE: MPEG-1,2 Layer III encoder with GPSYCHO * psychoacoustic model. * ************************************************************************/ int lame_main(lame_t gf, int argc, char **argv) { unsigned char mp3buffer[LAME_MAXMP3BUFFER]; char inPath[PATH_MAX + 1]; char outPath[PATH_MAX + 1]; int Buffer[2][1152]; int maxx = 0, tmpx = 0; int ret; int wavsamples; int mp3bytes; FILE *outf; char ip[16]; unsigned int port = 5004; unsigned int ttl = 2; char dummy; if (argc <= 2) { console_printf("Encode (via LAME) to mp3 with RTP streaming of the output\n" "\n" " mp3rtp ip[:port[:ttl]] [lame encoding options] infile outfile\n" "\n" " examples:\n" " arecord -b 16 -s 22050 -w | ./mp3rtp 224.17.23.42:5004:2 -b 56 - /dev/null\n" " arecord -b 16 -s 44100 -w | ./mp3rtp 10.1.1.42 -V2 -b128 -B256 - my_mp3file.mp3\n" "\n"); return 1; } switch (sscanf(argv[1], "%11[.0-9]:%u:%u%c", ip, &port, &ttl, &dummy)) { case 1: case 2: case 3: break; default: error_printf("Illegal destination selector '%s', must be ip[:port[:ttl]]\n", argv[1]); return -1; } rtp_initialization(); if (rtp_socket(ip, port, ttl)) { rtp_deinitialization(); error_printf("fatal error during initialization\n"); return 1; } lame_set_errorf(gf, &frontend_errorf); lame_set_debugf(gf, &frontend_debugf); lame_set_msgf(gf, &frontend_msgf); /* Remove the argumets that are rtp related, and then * parse the command line arguments, setting various flags in the * struct pointed to by 'gf'. If you want to parse your own arguments, * or call libmp3lame from a program which uses a GUI to set arguments, * skip this call and set the values of interest in the gf struct. * (see lame.h for documentation about these parameters) */ { int i; int argc_mod = argc-1; /* leaving out exactly one argument */ char** argv_mod = calloc(argc_mod, sizeof(char*)); argv_mod[0] = argv[0]; for (i = 2; i < argc; ++i) { /* leaving out argument number 1, parsed above */ argv_mod[i-1] = argv[i]; } parse_args(gf, argc_mod, argv_mod, inPath, outPath, NULL, NULL); free(argv_mod); } /* open the output file. Filename parsed into gf.inPath */ if (0 == strcmp(outPath, "-")) { lame_set_stream_binary_mode(outf = stdout); } else { if ((outf = lame_fopen(outPath, "wb+")) == NULL) { rtp_deinitialization(); error_printf("Could not create \"%s\".\n", outPath); return 1; } } /* open the wav/aiff/raw pcm or mp3 input file. This call will * open the file with name gf.inFile, try to parse the headers and * set gf.samplerate, gf.num_channels, gf.num_samples. * if you want to do your own file input, skip this call and set * these values yourself. */ if (init_infile(gf, inPath) < 0) { rtp_deinitialization(); fclose(outf); error_printf("Can't init infile '%s'\n", inPath); return 1; } /* Now that all the options are set, lame needs to analyze them and * set some more options */ ret = lame_init_params(gf); if (ret < 0) { if (ret == -1) display_bitrates(stderr); rtp_deinitialization(); fclose(outf); close_infile(); error_printf("fatal error during initialization\n"); return -1; } lame_print_config(gf); /* print useful information about options being used */ if (global_ui_config.update_interval < 0.) global_ui_config.update_interval = 2.; /* encode until we hit EOF */ while ((wavsamples = get_audio(gf, Buffer)) > 0) { /* read in 'wavsamples' samples */ levelmessage(maxvalue(Buffer), &maxx, &tmpx); mp3bytes = lame_encode_buffer_int(gf, /* encode the frame */ Buffer[0], Buffer[1], wavsamples, mp3buffer, sizeof(mp3buffer)); rtp_output(mp3buffer, mp3bytes); /* write MP3 output to RTP port */ fwrite(mp3buffer, 1, mp3bytes, outf); /* write the MP3 output to file */ } mp3bytes = lame_encode_flush(gf, /* may return one or more mp3 frame */ mp3buffer, sizeof(mp3buffer)); rtp_output(mp3buffer, mp3bytes); /* write MP3 output to RTP port */ fwrite(mp3buffer, 1, mp3bytes, outf); /* write the MP3 output to file */ lame_mp3_tags_fid(gf, outf); /* add VBR tags to mp3 file */ rtp_deinitialization(); fclose(outf); close_infile(); /* close the sound input file */ return 0; } /* end of mp3rtp.c */ ��������������lame-3.100/frontend/console.c�����������������������������������������������������������������������000644 �001751 �001751 �00000015142 11346040127 017511� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #if defined(HAVE_NCURSES_TERMCAP_H) # include <ncurses/termcap.h> #elif defined(HAVE_TERMCAP_H) # include <termcap.h> #elif defined(HAVE_TERMCAP) # include <curses.h> # if !defined(__bsdi__) # include <term.h> # endif #endif #include <stdio.h> #include <stdarg.h> #include "console.h" #include "main.h" #ifdef WITH_DMALLOC #include <dmalloc.h> #endif #define CLASS_ID 0x434F4E53 #define REPORT_BUFF_SIZE 1024 #if defined(_WIN32) && !defined(__CYGWIN__) # include <windows.h> #endif static int my_console_printing(FILE * fp, const char *format, va_list ap) { if (fp != NULL) return vfprintf(fp, format, ap); return 0; } static int my_error_printing(FILE * fp, const char *format, va_list ap) { if (fp != NULL) return vfprintf(fp, format, ap); return 0; } static int my_report_printing(FILE * fp, const char *format, va_list ap) { if (fp != NULL) return vfprintf(fp, format, ap); return 0; } /* * Taken from Termcap_Manual.html: * * With the Unix version of termcap, you must allocate space for the description yourself and pass * the address of the space as the argument buffer. There is no way you can tell how much space is * needed, so the convention is to allocate a buffer 2048 characters long and assume that is * enough. (Formerly the convention was to allocate 1024 characters and assume that was enough. * But one day, for one kind of terminal, that was not enough.) */ #ifdef HAVE_TERMCAP static void get_termcap_string(char const* id, char* dest, size_t n) { char tc[16]; char *tp = tc; tp[0] = '\0'; tp = tgetstr(id, &tp); if (tp != NULL && dest != NULL && n > 0) { strncpy(dest, tp, n); dest[n-1] = '\0'; } } static void get_termcap_number(char const* id, int* dest, int low, int high) { int const val = tgetnum(id); if (low <= val && val <= high) { *dest = val; } } static void apply_termcap_settings(Console_IO_t * const mfp) { /* try to catch additional information about special console sequences */ char const* term_name = getenv("TERM"); if (NULL != term_name) { char term_buff[4096]; int const ret = tgetent(term_buff, term_name); if (1 == ret) { get_termcap_number("co", &mfp->disp_width, 40, 512); get_termcap_number("li", &mfp->disp_height, 16, 256); get_termcap_string("up", mfp->str_up, sizeof(mfp->str_up)); get_termcap_string("md", mfp->str_emph, sizeof(mfp->str_emph)); get_termcap_string("me", mfp->str_norm, sizeof(mfp->str_norm)); get_termcap_string("ce", mfp->str_clreoln, sizeof(mfp->str_clreoln)); } } } #endif /* TERMCAP_AVAILABLE */ static int init_console(Console_IO_t * const mfp) { /* setup basics of brhist I/O channels */ mfp->disp_width = 80; mfp->disp_height = 25; mfp->Console_fp = stderr; mfp->Error_fp = stderr; mfp->Report_fp = NULL; /*mfp -> Console_buff = calloc ( 1, REPORT_BUFF_SIZE ); */ setvbuf(mfp->Console_fp, mfp->Console_buff, _IOFBF, sizeof(mfp->Console_buff)); /* setvbuf ( mfp -> Error_fp , NULL , _IONBF, 0 ); */ #if defined(_WIN32) && !defined(__CYGWIN__) mfp->Console_Handle = GetStdHandle(STD_ERROR_HANDLE); #endif strcpy(mfp->str_up, "\033[A"); #ifdef HAVE_TERMCAP apply_termcap_settings(mfp); #endif /* TERMCAP_AVAILABLE */ mfp->ClassID = CLASS_ID; #if defined(_WIN32) && !defined(__CYGWIN__) mfp->Console_file_type = GetFileType(Console_IO.Console_Handle); #else mfp->Console_file_type = 0; #endif return 0; } static void deinit_console(Console_IO_t * const mfp) { if (mfp->Report_fp != NULL) { fclose(mfp->Report_fp); mfp->Report_fp = NULL; } fflush(mfp->Console_fp); setvbuf(mfp->Console_fp, NULL, _IONBF, (size_t) 0); memset(mfp->Console_buff, 0x55, REPORT_BUFF_SIZE); } /* LAME console */ Console_IO_t Console_IO; int frontend_open_console(void) { return init_console(&Console_IO); } void frontend_close_console(void) { deinit_console(&Console_IO); } void frontend_debugf(const char *format, va_list ap) { (void) my_report_printing(Console_IO.Report_fp, format, ap); } void frontend_msgf(const char *format, va_list ap) { (void) my_console_printing(Console_IO.Console_fp, format, ap); } void frontend_errorf(const char *format, va_list ap) { (void) my_error_printing(Console_IO.Error_fp, format, ap); } void frontend_print_null(const char *format, va_list ap) { (void) format; (void) ap; } int console_printf(const char *format, ...) { va_list args; int ret; va_start(args, format); ret = my_console_printing(Console_IO.Console_fp, format, args); va_end(args); return ret; } int error_printf(const char *format, ...) { va_list args; int ret; va_start(args, format); ret = my_console_printing(Console_IO.Error_fp, format, args); va_end(args); return ret; } int report_printf(const char *format, ...) { va_list args; int ret; va_start(args, format); ret = my_console_printing(Console_IO.Report_fp, format, args); va_end(args); return ret; } void console_flush() { fflush(Console_IO.Console_fp); } void error_flush() { fflush(Console_IO.Error_fp); } void report_flush() { fflush(Console_IO.Report_fp); } void console_up(int n_lines) { #if defined(_WIN32) && !defined(__CYGWIN__) if (Console_IO.Console_file_type != FILE_TYPE_PIPE) { COORD Pos; CONSOLE_SCREEN_BUFFER_INFO CSBI; console_flush(); GetConsoleScreenBufferInfo(Console_IO.Console_Handle, &CSBI); Pos.Y = (SHORT)(CSBI.dwCursorPosition.Y - n_lines); Pos.X = 0; SetConsoleCursorPosition(Console_IO.Console_Handle, Pos); } #else while (n_lines-- > 0) fputs(Console_IO.str_up, Console_IO.Console_fp); console_flush(); #endif } void set_debug_file(const char *fn) { if (Console_IO.Report_fp == NULL) { Console_IO.Report_fp = lame_fopen(fn, "a"); if (Console_IO.Report_fp != NULL) { error_printf("writing debug info into: %s\n", fn); } else { error_printf("Error: can't open for debug info: %s\n", fn); } } } /* end of console.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/frontend/Makefile.in���������������������������������������������������������������������000644 �001751 �001751 �00000055347 13170220146 017761� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = frontend ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = main.$(OBJEXT) brhist.$(OBJEXT) console.$(OBJEXT) \ get_audio.$(OBJEXT) lametime.$(OBJEXT) parse.$(OBJEXT) \ timestatus.$(OBJEXT) am_lame_OBJECTS = lame_main.$(OBJEXT) $(am__objects_1) lame_OBJECTS = $(am_lame_OBJECTS) lame_LDADD = $(LDADD) lame_DEPENDENCIES = $(top_builddir)/libmp3lame/libmp3lame.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_mp3rtp_OBJECTS = mp3rtp.$(OBJEXT) rtp.$(OBJEXT) $(am__objects_1) mp3rtp_OBJECTS = $(am_mp3rtp_OBJECTS) mp3rtp_LDADD = $(LDADD) mp3rtp_DEPENDENCIES = $(top_builddir)/libmp3lame/libmp3lame.la am_mp3x_OBJECTS = mp3x.$(OBJEXT) gtkanal.$(OBJEXT) \ gpkplotting.$(OBJEXT) $(am__objects_1) mp3x_OBJECTS = $(am_mp3x_OBJECTS) am__DEPENDENCIES_1 = $(top_builddir)/libmp3lame/libmp3lame.la mp3x_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(lame_SOURCES) $(mp3rtp_SOURCES) $(mp3x_SOURCES) DIST_SOURCES = $(lame_SOURCES) $(mp3rtp_SOURCES) $(mp3x_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global $(top_srcdir)/depcomp depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @GTK_CFLAGS@ @FRONTEND_CFLAGS@ @SNDFILE_CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ @CONFIG_DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = -I$(top_srcdir)/libmp3lame -I$(top_srcdir)/include -I$(top_builddir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ \ $(top_builddir)/libmp3lame/libmp3lame.la \ @FRONTEND_LDADD@ LDFLAGS = @LDFLAGS@ @FRONTEND_LDFLAGS@ @SNDFILE_LIBS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign bin_PROGRAMS = @WITH_FRONTEND@ @WITH_MP3RTP@ @WITH_MP3X@ EXTRA_PROGRAMS = lame$(EXEEXT) mp3rtp$(EXEEXT) mp3x$(EXEEXT) EXTRA_DIST = \ amiga_mpega.c common_sources = \ main.c \ brhist.c \ console.c \ get_audio.c \ lametime.c \ parse.c \ timestatus.c noinst_HEADERS = \ brhist.h \ console.h \ get_audio.h \ gtkanal.h \ gpkplotting.h \ lametime.h \ main.h \ parse.h \ rtp.h \ timestatus.h lame_SOURCES = lame_main.c $(common_sources) mp3rtp_SOURCES = mp3rtp.c rtp.c $(common_sources) mp3x_SOURCES = mp3x.c gtkanal.c gpkplotting.c $(common_sources) mp3x_LDADD = $(LDADD) @GTK_LIBS@ CLEANFILES = lclint.txt $(EXTRA_PROGRAMS) LCLINTFLAGS = \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign frontend/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign frontend/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list lame$(EXEEXT): $(lame_OBJECTS) $(lame_DEPENDENCIES) $(EXTRA_lame_DEPENDENCIES) @rm -f lame$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lame_OBJECTS) $(lame_LDADD) $(LIBS) mp3rtp$(EXEEXT): $(mp3rtp_OBJECTS) $(mp3rtp_DEPENDENCIES) $(EXTRA_mp3rtp_DEPENDENCIES) @rm -f mp3rtp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mp3rtp_OBJECTS) $(mp3rtp_LDADD) $(LIBS) mp3x$(EXEEXT): $(mp3x_OBJECTS) $(mp3x_DEPENDENCIES) $(EXTRA_mp3x_DEPENDENCIES) @rm -f mp3x$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mp3x_OBJECTS) $(mp3x_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/brhist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/console.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpkplotting.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkanal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lame_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lametime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mp3rtp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mp3x.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timestatus.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # end global section lclint.txt: ${lame_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${lame_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/Makefile.in�������������������������������������������������������������������000644 �001751 �001751 �00000070540 13170220146 020157� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = libmp3lame ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) @LIB_WITH_DECODER_TRUE@am__DEPENDENCIES_1 = $(top_builddir)/mpglib/libmpgdecoder.la am__DEPENDENCIES_2 = libmp3lame_la_DEPENDENCIES = $(cpu_ldadd) $(vector_ldadd) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) am_libmp3lame_la_OBJECTS = VbrTag.lo bitstream.lo encoder.lo fft.lo \ gain_analysis.lo id3tag.lo lame.lo newmdct.lo presets.lo \ psymodel.lo quantize.lo quantize_pvt.lo reservoir.lo \ set_get.lo tables.lo takehiro.lo util.lo vbrquantize.lo \ version.lo mpglib_interface.lo libmp3lame_la_OBJECTS = $(am_libmp3lame_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libmp3lame_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmp3lame_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmp3lame_la_SOURCES) DIST_SOURCES = $(libmp3lame_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global $(top_srcdir)/depcomp depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ @CONFIG_DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ -I$(top_srcdir)/mpglib -I$(top_builddir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign SUBDIRS = i386 vector lib_LTLIBRARIES = libmp3lame.la @HAVE_NASM_TRUE@cpu_ldadd = $(top_builddir)/libmp3lame/@CPUTYPE@/liblameasmroutines.la @WITH_VECTOR_TRUE@vector_ldadd = $(top_builddir)/libmp3lame/vector/liblamevectorroutines.la @LIB_WITH_DECODER_FALSE@decoder_ldadd = @LIB_WITH_DECODER_TRUE@decoder_ldadd = $(top_builddir)/mpglib/libmpgdecoder.la libmp3lame_la_LIBADD = $(cpu_ldadd) $(vector_ldadd) $(decoder_ldadd) \ $(CONFIG_MATH_LIB) libmp3lame_la_LDFLAGS = -version-info @LIB_MAJOR_VERSION@:@LIB_MINOR_VERSION@ \ -export-symbols $(top_srcdir)/include/libmp3lame.sym \ -no-undefined EXTRA_DIST = \ lame.rc \ vbrquantize.h \ logoe.ico libmp3lame_la_SOURCES = \ VbrTag.c \ bitstream.c \ encoder.c \ fft.c \ gain_analysis.c \ id3tag.c \ lame.c \ newmdct.c \ presets.c \ psymodel.c \ quantize.c \ quantize_pvt.c \ reservoir.c \ set_get.c \ tables.c \ takehiro.c \ util.c \ vbrquantize.c \ version.c \ mpglib_interface.c noinst_HEADERS = \ VbrTag.h \ bitstream.h \ encoder.h \ fft.h \ gain_analysis.h \ id3tag.h \ l3side.h \ lame-analysis.h \ lame_global_flags.h \ lameerror.h \ machine.h \ newmdct.h \ psymodel.h \ quantize.h \ quantize_pvt.h \ reservoir.h \ set_get.h \ tables.h \ util.h \ vbrquantize.h \ version.h CLEANFILES = lclint.txt LCLINTFLAGS = \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libmp3lame/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libmp3lame/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmp3lame.la: $(libmp3lame_la_OBJECTS) $(libmp3lame_la_DEPENDENCIES) $(EXTRA_libmp3lame_la_DEPENDENCIES) $(AM_V_CCLD)$(libmp3lame_la_LINK) -rpath $(libdir) $(libmp3lame_la_OBJECTS) $(libmp3lame_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VbrTag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitstream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gain_analysis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id3tag.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lame.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpglib_interface.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newmdct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/presets.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psymodel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quantize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quantize_pvt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reservoir.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_get.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tables.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/takehiro.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vbrquantize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile # end global section lclint.txt: ${libmp3lame_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${libmp3lame_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/psymodel.h��������������������������������������������������������������������000644 �001751 �001751 �00000003750 11561266675 020141� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * psymodel.h * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_PSYMODEL_H #define LAME_PSYMODEL_H int L3psycho_anal_ns(lame_internal_flags * gfc, const sample_t *const buffer[2], int gr, III_psy_ratio ratio[2][2], III_psy_ratio MS_ratio[2][2], FLOAT pe[2], FLOAT pe_MS[2], FLOAT ener[2], int blocktype_d[2]); int L3psycho_anal_vbr(lame_internal_flags * gfc, const sample_t *const buffer[2], int gr, III_psy_ratio ratio[2][2], III_psy_ratio MS_ratio[2][2], FLOAT pe[2], FLOAT pe_MS[2], FLOAT ener[2], int blocktype_d[2]); int psymodel_init(lame_global_flags const* gfp); #define rpelev 2 #define rpelev2 16 #define rpelev_s 2 #define rpelev2_s 16 /* size of each partition band, in barks: */ #define DELBARK .34 /* tuned for output level (sensitive to energy scale) */ #define VO_SCALE (1./( 14752*14752 )/(BLKSIZE/2)) #define temporalmask_sustain_sec 0.01 #define NS_PREECHO_ATT0 0.8 #define NS_PREECHO_ATT1 0.6 #define NS_PREECHO_ATT2 0.3 #define NS_MSFIX 3.5 #define NSATTACKTHRE 4.4 #define NSATTACKTHRE_S 25 #endif /* LAME_PSYMODEL_H */ ������������������������lame-3.100/libmp3lame/gain_analysis.c���������������������������������������������������������������000644 �001751 �001751 �00000047472 13167215267 021125� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ReplayGainAnalysis - analyzes input samples and give the recommended dB change * Copyright (C) 2001 David Robinson and Glen Sawyer * Improvements and optimizations added by Frank Klemm, and by Marcel Muller * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * concept and filter values by David Robinson (David@Robinson.org) * -- blame him if you think the idea is flawed * original coding by Glen Sawyer (mp3gain@hotmail.com) * -- blame him if you think this runs too slowly, or the coding is otherwise flawed * * lots of code improvements by Frank Klemm ( http://www.uni-jena.de/~pfk/mpp/ ) * -- credit him for all the _good_ programming ;) * * * For an explanation of the concepts and the basic algorithms involved, go to: * http://www.replaygain.org/ */ /* * Here's the deal. Call * * InitGainAnalysis ( long samplefreq ); * * to initialize everything. Call * * AnalyzeSamples ( const Float_t* left_samples, * const Float_t* right_samples, * size_t num_samples, * int num_channels ); * * as many times as you want, with as many or as few samples as you want. * If mono, pass the sample buffer in through left_samples, leave * right_samples NULL, and make sure num_channels = 1. * * GetTitleGain() * * will return the recommended dB level change for all samples analyzed * SINCE THE LAST TIME you called GetTitleGain() OR InitGainAnalysis(). * * GetAlbumGain() * * will return the recommended dB level change for all samples analyzed * since InitGainAnalysis() was called and finalized with GetTitleGain(). * * Pseudo-code to process an album: * * Float_t l_samples [4096]; * Float_t r_samples [4096]; * size_t num_samples; * unsigned int num_songs; * unsigned int i; * * InitGainAnalysis ( 44100 ); * for ( i = 1; i <= num_songs; i++ ) { * while ( ( num_samples = getSongSamples ( song[i], left_samples, right_samples ) ) > 0 ) * AnalyzeSamples ( left_samples, right_samples, num_samples, 2 ); * fprintf ("Recommended dB change for song %2d: %+6.2f dB\n", i, GetTitleGain() ); * } * fprintf ("Recommended dB change for whole album: %+6.2f dB\n", GetAlbumGain() ); */ /* * So here's the main source of potential code confusion: * * The filters applied to the incoming samples are IIR filters, * meaning they rely on up to <filter order> number of previous samples * AND up to <filter order> number of previous filtered samples. * * I set up the AnalyzeSamples routine to minimize memory usage and interface * complexity. The speed isn't compromised too much (I don't think), but the * internal complexity is higher than it should be for such a relatively * simple routine. * * Optimization/clarity suggestions are welcome. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include "lame.h" #include "machine.h" #include "gain_analysis.h" /* for each filter: */ /* [0] 48 kHz, [1] 44.1 kHz, [2] 32 kHz, [3] 24 kHz, [4] 22050 Hz, [5] 16 kHz, [6] 12 kHz, [7] is 11025 Hz, [8] 8 kHz */ #ifdef WIN32 #pragma warning ( disable : 4305 ) #endif /*lint -save -e736 loss of precision */ static const Float_t ABYule[9][multiple_of(4, 2 * YULE_ORDER + 1)] = { /* 20 18 16 14 12 10 8 6 4 2 0 19 17 15 13 11 9 7 5 3 1 */ { 0.00288463683916, 0.00012025322027, 0.00306428023191, 0.00594298065125, -0.02074045215285, 0.02161526843274, -0.01655260341619, -0.00009291677959, -0.00123395316851, -0.02160367184185, 0.03857599435200, 0.13919314567432, -0.86984376593551, 2.75465861874613, -5.87257861775999, 9.48293806319790,-12.28759895145294, 13.05504219327545,-11.34170355132042, 7.81501653005538, -3.84664617118067}, {-0.00187763777362, 0.00674613682247, -0.00240879051584, 0.01624864962975, -0.02596338512915, 0.02245293253339, -0.00834990904936, -0.00851165645469, -0.00848709379851, -0.02911007808948, 0.05418656406430, 0.13149317958808, -0.75104302451432, 2.19611684890774, -4.39470996079559, 6.85401540936998, -8.81498681370155, 9.47693607801280, -8.54751527471874, 6.36317777566148, -3.47845948550071}, {-0.00881362733839, 0.00651420667831, -0.01390589421898, 0.03174092540049, 0.00222312597743, 0.04781476674921, -0.05588393329856, 0.02163541888798, -0.06247880153653, -0.09331049056315, 0.15457299681924, 0.02347897407020, -0.05032077717131, 0.16378164858596, -0.45953458054983, 1.00595954808547, -1.67148153367602, 2.23697657451713, -2.64577170229825, 2.84868151156327, -2.37898834973084}, {-0.02950134983287, 0.00205861885564, -0.00000828086748, 0.06276101321749, -0.00584456039913, -0.02364141202522, -0.00915702933434, 0.03282930172664, -0.08587323730772, -0.22613988682123, 0.30296907319327, 0.00302439095741, 0.02005851806501, 0.04500235387352, -0.22138138954925, 0.39120800788284, -0.22638893773906, -0.16276719120440, -0.25656257754070, 1.07977492259970, -1.61273165137247}, {-0.01760176568150, -0.01635381384540, 0.00832043980773, 0.05724228140351, -0.00589500224440, -0.00469977914380, -0.07834489609479, 0.11921148675203, -0.11828570177555, -0.25572241425570, 0.33642304856132, 0.02977207319925, -0.04237348025746, 0.08333755284107, -0.04067510197014, -0.12453458140019, 0.47854794562326, -0.80774944671438, 0.12205022308084, 0.87350271418188, -1.49858979367799}, { 0.00541907748707, -0.03193428438915, -0.01863887810927, 0.10478503600251, 0.04097565135648, -0.12398163381748, 0.04078262797139, -0.01419140100551, -0.22784394429749, -0.14351757464547, 0.44915256608450, 0.03222754072173, 0.05784820375801, 0.06747620744683, 0.00613424350682, 0.22199650564824, -0.42029820170918, 0.00213767857124, -0.37256372942400, 0.29661783706366, -0.62820619233671}, {-0.00588215443421, -0.03788984554840, 0.08647503780351, 0.00647310677246, -0.27562961986224, 0.30931782841830, -0.18901604199609, 0.16744243493672, 0.16242137742230, -0.75464456939302, 0.56619470757641, 0.01807364323573, 0.01639907836189, -0.04784254229033, 0.06739368333110, -0.33032403314006, 0.45054734505008, 0.00819999645858, -0.26806001042947, 0.29156311971249, -1.04800335126349}, {-0.00749618797172, -0.03721611395801, 0.06920467763959, 0.01628462406333, -0.25344790059353, 0.15558449135573, 0.02377945217615, 0.17520704835522, -0.14289799034253, -0.53174909058578, 0.58100494960553, 0.01818801111503, 0.02442357316099, -0.02505961724053, -0.05246019024463, -0.23313271880868, 0.38952639978999, 0.14728154134330, -0.20256413484477, -0.31863563325245, -0.51035327095184}, {-0.02217936801134, 0.04788665548180, -0.04060034127000, -0.11202315195388, -0.02459864859345, 0.14590772289388, -0.10214864179676, 0.04267842219415, -0.00275953611929, -0.42163034350696, 0.53648789255105, 0.04704409688120, 0.05477720428674, -0.18823009262115, -0.17556493366449, 0.15113130533216, 0.26408300200955, -0.04678328784242, -0.03424681017675, -0.43193942311114, -0.25049871956020} }; static const Float_t ABButter[9][multiple_of(4, 2 * BUTTER_ORDER + 1)] = { /* 5 4 3 2 1 */ {0.98621192462708, 0.97261396931306, -1.97242384925416, -1.97223372919527, 0.98621192462708}, {0.98500175787242, 0.97022847566350, -1.97000351574484, -1.96977855582618, 0.98500175787242}, {0.97938932735214, 0.95920349965459, -1.95877865470428, -1.95835380975398, 0.97938932735214}, {0.97531843204928, 0.95124613669835, -1.95063686409857, -1.95002759149878, 0.97531843204928}, {0.97316523498161, 0.94705070426118, -1.94633046996323, -1.94561023566527, 0.97316523498161}, {0.96454515552826, 0.93034775234268, -1.92909031105652, -1.92783286977036, 0.96454515552826}, {0.96009142950541, 0.92177618768381, -1.92018285901082, -1.91858953033784, 0.96009142950541}, {0.95856916599601, 0.91885558323625, -1.91713833199203, -1.91542108074780, 0.95856916599601}, {0.94597685600279, 0.89487434461664, -1.89195371200558, -1.88903307939452, 0.94597685600279} }; /*lint -restore */ #ifdef WIN32 #pragma warning ( default : 4305 ) #endif /* When calling this procedure, make sure that ip[-order] and op[-order] point to real data! */ static void filterYule(const Float_t * input, Float_t * output, size_t nSamples, const Float_t * const kernel) { while (nSamples--) { Float_t y0 = input[-10] * kernel[ 0]; Float_t y2 = input[ -9] * kernel[ 1]; Float_t y4 = input[ -8] * kernel[ 2]; Float_t y6 = input[ -7] * kernel[ 3]; Float_t s00 = y0 + y2 + y4 + y6; Float_t y8 = input[ -6] * kernel[ 4]; Float_t yA = input[ -5] * kernel[ 5]; Float_t yC = input[ -4] * kernel[ 6]; Float_t yE = input[ -3] * kernel[ 7]; Float_t s01 = y8 + yA + yC + yE; Float_t yG = input[ -2] * kernel[ 8] + input[ -1] * kernel[ 9]; Float_t yK = input[ 0] * kernel[10]; Float_t s1 = s00 + s01 + yG + yK; Float_t x1 = output[-10] * kernel[11] + output[ -9] * kernel[12]; Float_t x5 = output[ -8] * kernel[13] + output[ -7] * kernel[14]; Float_t x9 = output[ -6] * kernel[15] + output[ -5] * kernel[16]; Float_t xD = output[ -4] * kernel[17] + output[ -3] * kernel[18]; Float_t xH = output[ -2] * kernel[19] + output[ -1] * kernel[20]; Float_t s2 = x1 + x5 + x9 + xD + xH; output[0] = (Float_t)(s1 - s2); ++output; ++input; } } static void filterButter(const Float_t * input, Float_t * output, size_t nSamples, const Float_t * const kernel) { while (nSamples--) { Float_t s1 = input[-2] * kernel[0] + input[-1] * kernel[2] + input[ 0] * kernel[4]; Float_t s2 = output[-2] * kernel[1] + output[-1] * kernel[3]; output[0] = (Float_t)(s1 - s2); ++output; ++input; } } static int ResetSampleFrequency(replaygain_t * rgData, long samplefreq); /* returns a INIT_GAIN_ANALYSIS_OK if successful, INIT_GAIN_ANALYSIS_ERROR if not */ int ResetSampleFrequency(replaygain_t * rgData, long samplefreq) { /* zero out initial values, only first MAX_ORDER values */ memset(rgData->linprebuf, 0, MAX_ORDER * sizeof(*rgData->linprebuf)); memset(rgData->rinprebuf, 0, MAX_ORDER * sizeof(*rgData->rinprebuf)); memset(rgData->lstepbuf, 0, MAX_ORDER * sizeof(*rgData->lstepbuf)); memset(rgData->rstepbuf, 0, MAX_ORDER * sizeof(*rgData->rstepbuf)); memset(rgData->loutbuf, 0, MAX_ORDER * sizeof(*rgData->loutbuf)); memset(rgData->routbuf, 0, MAX_ORDER * sizeof(*rgData->routbuf)); switch ((int) (samplefreq)) { case 48000: rgData->freqindex = 0; break; case 44100: rgData->freqindex = 1; break; case 32000: rgData->freqindex = 2; break; case 24000: rgData->freqindex = 3; break; case 22050: rgData->freqindex = 4; break; case 16000: rgData->freqindex = 5; break; case 12000: rgData->freqindex = 6; break; case 11025: rgData->freqindex = 7; break; case 8000: rgData->freqindex = 8; break; default: return INIT_GAIN_ANALYSIS_ERROR; } rgData->sampleWindow = (samplefreq * RMS_WINDOW_TIME_NUMERATOR + RMS_WINDOW_TIME_DENOMINATOR - 1) / RMS_WINDOW_TIME_DENOMINATOR; rgData->lsum = 0.; rgData->rsum = 0.; rgData->totsamp = 0; memset(rgData->A, 0, sizeof(rgData->A)); return INIT_GAIN_ANALYSIS_OK; } int InitGainAnalysis(replaygain_t * rgData, long samplefreq) { if (ResetSampleFrequency(rgData, samplefreq) != INIT_GAIN_ANALYSIS_OK) { return INIT_GAIN_ANALYSIS_ERROR; } rgData->linpre = rgData->linprebuf + MAX_ORDER; rgData->rinpre = rgData->rinprebuf + MAX_ORDER; rgData->lstep = rgData->lstepbuf + MAX_ORDER; rgData->rstep = rgData->rstepbuf + MAX_ORDER; rgData->lout = rgData->loutbuf + MAX_ORDER; rgData->rout = rgData->routbuf + MAX_ORDER; memset(rgData->B, 0, sizeof(rgData->B)); return INIT_GAIN_ANALYSIS_OK; } /* returns GAIN_ANALYSIS_OK if successful, GAIN_ANALYSIS_ERROR if not */ int AnalyzeSamples(replaygain_t * rgData, const Float_t * left_samples, const Float_t * right_samples, size_t num_samples, int num_channels) { const Float_t *curleft; const Float_t *curright; long batchsamples; long cursamples; long cursamplepos; int i; Float_t sum_l, sum_r; if (num_samples == 0) return GAIN_ANALYSIS_OK; cursamplepos = 0; batchsamples = (long) num_samples; switch (num_channels) { case 1: right_samples = left_samples; break; case 2: break; default: return GAIN_ANALYSIS_ERROR; } if (num_samples < MAX_ORDER) { memcpy(rgData->linprebuf + MAX_ORDER, left_samples, num_samples * sizeof(Float_t)); memcpy(rgData->rinprebuf + MAX_ORDER, right_samples, num_samples * sizeof(Float_t)); } else { memcpy(rgData->linprebuf + MAX_ORDER, left_samples, MAX_ORDER * sizeof(Float_t)); memcpy(rgData->rinprebuf + MAX_ORDER, right_samples, MAX_ORDER * sizeof(Float_t)); } while (batchsamples > 0) { cursamples = batchsamples > rgData->sampleWindow - rgData->totsamp ? rgData->sampleWindow - rgData->totsamp : batchsamples; if (cursamplepos < MAX_ORDER) { curleft = rgData->linpre + cursamplepos; curright = rgData->rinpre + cursamplepos; if (cursamples > MAX_ORDER - cursamplepos) cursamples = MAX_ORDER - cursamplepos; } else { curleft = left_samples + cursamplepos; curright = right_samples + cursamplepos; } YULE_FILTER(curleft, rgData->lstep + rgData->totsamp, cursamples, ABYule[rgData->freqindex]); YULE_FILTER(curright, rgData->rstep + rgData->totsamp, cursamples, ABYule[rgData->freqindex]); BUTTER_FILTER(rgData->lstep + rgData->totsamp, rgData->lout + rgData->totsamp, cursamples, ABButter[rgData->freqindex]); BUTTER_FILTER(rgData->rstep + rgData->totsamp, rgData->rout + rgData->totsamp, cursamples, ABButter[rgData->freqindex]); curleft = rgData->lout + rgData->totsamp; /* Get the squared values */ curright = rgData->rout + rgData->totsamp; sum_l = 0; sum_r = 0; i = cursamples & 0x03; while (i--) { Float_t const l = *curleft++; Float_t const r = *curright++; sum_l += l * l; sum_r += r * r; } i = cursamples / 4; while (i--) { Float_t l0 = curleft[0] * curleft[0]; Float_t l1 = curleft[1] * curleft[1]; Float_t l2 = curleft[2] * curleft[2]; Float_t l3 = curleft[3] * curleft[3]; Float_t sl = l0 + l1 + l2 + l3; Float_t r0 = curright[0] * curright[0]; Float_t r1 = curright[1] * curright[1]; Float_t r2 = curright[2] * curright[2]; Float_t r3 = curright[3] * curright[3]; Float_t sr = r0 + r1 + r2 + r3; sum_l += sl; curleft += 4; sum_r += sr; curright += 4; } rgData->lsum += sum_l; rgData->rsum += sum_r; batchsamples -= cursamples; cursamplepos += cursamples; rgData->totsamp += cursamples; if (rgData->totsamp == rgData->sampleWindow) { /* Get the Root Mean Square (RMS) for this set of samples */ double const val = STEPS_per_dB * 10. * log10((rgData->lsum + rgData->rsum) / rgData->totsamp * 0.5 + 1.e-37); size_t ival = (val <= 0) ? 0 : (size_t) val; if (ival >= sizeof(rgData->A) / sizeof(*(rgData->A))) ival = sizeof(rgData->A) / sizeof(*(rgData->A)) - 1; rgData->A[ival]++; rgData->lsum = rgData->rsum = 0.; memmove(rgData->loutbuf, rgData->loutbuf + rgData->totsamp, MAX_ORDER * sizeof(Float_t)); memmove(rgData->routbuf, rgData->routbuf + rgData->totsamp, MAX_ORDER * sizeof(Float_t)); memmove(rgData->lstepbuf, rgData->lstepbuf + rgData->totsamp, MAX_ORDER * sizeof(Float_t)); memmove(rgData->rstepbuf, rgData->rstepbuf + rgData->totsamp, MAX_ORDER * sizeof(Float_t)); rgData->totsamp = 0; } if (rgData->totsamp > rgData->sampleWindow) /* somehow I really screwed up: Error in programming! Contact author about totsamp > sampleWindow */ return GAIN_ANALYSIS_ERROR; } if (num_samples < MAX_ORDER) { memmove(rgData->linprebuf, rgData->linprebuf + num_samples, (MAX_ORDER - num_samples) * sizeof(Float_t)); memmove(rgData->rinprebuf, rgData->rinprebuf + num_samples, (MAX_ORDER - num_samples) * sizeof(Float_t)); memcpy(rgData->linprebuf + MAX_ORDER - num_samples, left_samples, num_samples * sizeof(Float_t)); memcpy(rgData->rinprebuf + MAX_ORDER - num_samples, right_samples, num_samples * sizeof(Float_t)); } else { memcpy(rgData->linprebuf, left_samples + num_samples - MAX_ORDER, MAX_ORDER * sizeof(Float_t)); memcpy(rgData->rinprebuf, right_samples + num_samples - MAX_ORDER, MAX_ORDER * sizeof(Float_t)); } return GAIN_ANALYSIS_OK; } static Float_t analyzeResult(uint32_t const *Array, size_t len) { uint32_t elems; uint32_t upper; uint32_t sum; size_t i; elems = 0; for (i = 0; i < len; i++) elems += Array[i]; if (elems == 0) return GAIN_NOT_ENOUGH_SAMPLES; upper = (uint32_t) ceil(elems * (1. - RMS_PERCENTILE)); sum = 0; for (i = len; i-- > 0;) { sum += Array[i]; if (sum >= upper) { break; } } return (Float_t) ((Float_t) PINK_REF - (Float_t) i / (Float_t) STEPS_per_dB); } Float_t GetTitleGain(replaygain_t * rgData) { Float_t retval; unsigned int i; retval = analyzeResult(rgData->A, sizeof(rgData->A) / sizeof(*(rgData->A))); for (i = 0; i < sizeof(rgData->A) / sizeof(*(rgData->A)); i++) { rgData->B[i] += rgData->A[i]; rgData->A[i] = 0; } for (i = 0; i < MAX_ORDER; i++) rgData->linprebuf[i] = rgData->lstepbuf[i] = rgData->loutbuf[i] = rgData->rinprebuf[i] = rgData->rstepbuf[i] = rgData->routbuf[i] = 0.f; rgData->totsamp = 0; rgData->lsum = rgData->rsum = 0.; return retval; } #if 0 static Float_t GetAlbumGain(replaygain_t const* rgData); Float_t GetAlbumGain(replaygain_t const* rgData) { return analyzeResult(rgData->B, sizeof(rgData->B) / sizeof(*(rgData->B))); } #endif /* end of gain_analysis.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/set_get.c���������������������������������������������������������������������000644 �001751 �001751 �00000151663 13154046620 017723� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C; mode: fold -*- */ /* * set/get functions for lame_global_flags * * Copyright (c) 2001-2005 Alexander Leidinger * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: set_get.c,v 1.104 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "bitstream.h" /* because of compute_flushbits */ #include "set_get.h" #include "lame_global_flags.h" /* * input stream description */ /* number of samples */ /* it's unlikely for this function to return an error */ int lame_set_num_samples(lame_global_flags * gfp, unsigned long num_samples) { if (is_lame_global_flags_valid(gfp)) { /* default = 2^32-1 */ gfp->num_samples = num_samples; return 0; } return -1; } unsigned long lame_get_num_samples(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->num_samples; } return 0; } /* input samplerate */ int lame_set_in_samplerate(lame_global_flags * gfp, int in_samplerate) { if (is_lame_global_flags_valid(gfp)) { if (in_samplerate < 1) return -1; /* input sample rate in Hz, default = 44100 Hz */ gfp->samplerate_in = in_samplerate; return 0; } return -1; } int lame_get_in_samplerate(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->samplerate_in; } return 0; } /* number of channels in input stream */ int lame_set_num_channels(lame_global_flags * gfp, int num_channels) { if (is_lame_global_flags_valid(gfp)) { /* default = 2 */ if (2 < num_channels || 0 >= num_channels) { return -1; /* we don't support more than 2 channels */ } gfp->num_channels = num_channels; return 0; } return -1; } int lame_get_num_channels(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->num_channels; } return 0; } /* scale the input by this amount before encoding (not used for decoding) */ int lame_set_scale(lame_global_flags * gfp, float scale) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 */ gfp->scale = scale; return 0; } return -1; } float lame_get_scale(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->scale; } return 0; } /* scale the channel 0 (left) input by this amount before encoding (not used for decoding) */ int lame_set_scale_left(lame_global_flags * gfp, float scale) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 */ gfp->scale_left = scale; return 0; } return -1; } float lame_get_scale_left(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->scale_left; } return 0; } /* scale the channel 1 (right) input by this amount before encoding (not used for decoding) */ int lame_set_scale_right(lame_global_flags * gfp, float scale) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 */ gfp->scale_right = scale; return 0; } return -1; } float lame_get_scale_right(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->scale_right; } return 0; } /* output sample rate in Hz */ int lame_set_out_samplerate(lame_global_flags * gfp, int out_samplerate) { if (is_lame_global_flags_valid(gfp)) { /* * default = 0: LAME picks best value based on the amount * of compression * MPEG only allows: * MPEG1 32, 44.1, 48khz * MPEG2 16, 22.05, 24 * MPEG2.5 8, 11.025, 12 * * (not used by decoding routines) */ if (out_samplerate != 0) { int v=0; if (SmpFrqIndex(out_samplerate, &v) < 0) return -1; } gfp->samplerate_out = out_samplerate; return 0; } return -1; } int lame_get_out_samplerate(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->samplerate_out; } return 0; } /* * general control parameters */ /* collect data for an MP3 frame analzyer */ int lame_set_analysis(lame_global_flags * gfp, int analysis) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > analysis || 1 < analysis) return -1; gfp->analysis = analysis; return 0; } return -1; } int lame_get_analysis(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->analysis && 1 >= gfp->analysis); return gfp->analysis; } return 0; } /* write a Xing VBR header frame */ int lame_set_bWriteVbrTag(lame_global_flags * gfp, int bWriteVbrTag) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 (on) for VBR/ABR modes, 0 (off) for CBR mode */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > bWriteVbrTag || 1 < bWriteVbrTag) return -1; gfp->write_lame_tag = bWriteVbrTag; return 0; } return -1; } int lame_get_bWriteVbrTag(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->write_lame_tag && 1 >= gfp->write_lame_tag); return gfp->write_lame_tag; } return 0; } /* decode only, use lame/mpglib to convert mp3 to wav */ int lame_set_decode_only(lame_global_flags * gfp, int decode_only) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > decode_only || 1 < decode_only) return -1; gfp->decode_only = decode_only; return 0; } return -1; } int lame_get_decode_only(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->decode_only && 1 >= gfp->decode_only); return gfp->decode_only; } return 0; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED /* 1=encode a Vorbis .ogg file. default=0 */ /* DEPRECATED */ int CDECL lame_set_ogg(lame_global_flags *, int); int CDECL lame_get_ogg(const lame_global_flags *); #else #endif /* encode a Vorbis .ogg file */ /* DEPRECATED */ int lame_set_ogg(lame_global_flags * gfp, int ogg) { (void) gfp; (void) ogg; return -1; } int lame_get_ogg(const lame_global_flags * gfp) { (void) gfp; return 0; } /* * Internal algorithm selection. * True quality is determined by the bitrate but this variable will effect * quality by selecting expensive or cheap algorithms. * quality=0..9. 0=best (very slow). 9=worst. * recommended: 3 near-best quality, not too slow * 5 good quality, fast * 7 ok quality, really fast */ int lame_set_quality(lame_global_flags * gfp, int quality) { if (is_lame_global_flags_valid(gfp)) { if (quality < 0) { gfp->quality = 0; } else if (quality > 9) { gfp->quality = 9; } else { gfp->quality = quality; } return 0; } return -1; } int lame_get_quality(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->quality; } return 0; } /* mode = STEREO, JOINT_STEREO, DUAL_CHANNEL (not supported), MONO */ int lame_set_mode(lame_global_flags * gfp, MPEG_mode mode) { if (is_lame_global_flags_valid(gfp)) { int mpg_mode = mode; /* default: lame chooses based on compression ratio and input channels */ if (mpg_mode < 0 || MAX_INDICATOR <= mpg_mode) return -1; /* Unknown MPEG mode! */ gfp->mode = mode; return 0; } return -1; } MPEG_mode lame_get_mode(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(gfp->mode < MAX_INDICATOR); return gfp->mode; } return NOT_SET; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED /* mode_automs. Use a M/S mode with a switching threshold based on compression ratio DEPRECATED */ int CDECL lame_set_mode_automs(lame_global_flags *, int); int CDECL lame_get_mode_automs(const lame_global_flags *); #else #endif /* Us a M/S mode with a switching threshold based on compression ratio */ /* DEPRECATED */ int lame_set_mode_automs(lame_global_flags * gfp, int mode_automs) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > mode_automs || 1 < mode_automs) return -1; lame_set_mode(gfp, JOINT_STEREO); return 0; } return -1; } int lame_get_mode_automs(const lame_global_flags * gfp) { (void) gfp; return 1; } /* * Force M/S for all frames. For testing only. * Requires mode = 1. */ int lame_set_force_ms(lame_global_flags * gfp, int force_ms) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > force_ms || 1 < force_ms) return -1; gfp->force_ms = force_ms; return 0; } return -1; } int lame_get_force_ms(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->force_ms && 1 >= gfp->force_ms); return gfp->force_ms; } return 0; } /* Use free_format. */ int lame_set_free_format(lame_global_flags * gfp, int free_format) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > free_format || 1 < free_format) return -1; gfp->free_format = free_format; return 0; } return -1; } int lame_get_free_format(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->free_format && 1 >= gfp->free_format); return gfp->free_format; } return 0; } /* Perform ReplayGain analysis */ int lame_set_findReplayGain(lame_global_flags * gfp, int findReplayGain) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > findReplayGain || 1 < findReplayGain) return -1; gfp->findReplayGain = findReplayGain; return 0; } return -1; } int lame_get_findReplayGain(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->findReplayGain && 1 >= gfp->findReplayGain); return gfp->findReplayGain; } return 0; } /* Decode on the fly. Find the peak sample. If ReplayGain analysis is enabled then perform it on the decoded data. */ int lame_set_decode_on_the_fly(lame_global_flags * gfp, int decode_on_the_fly) { if (is_lame_global_flags_valid(gfp)) { #ifndef DECODE_ON_THE_FLY return -1; #else /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > decode_on_the_fly || 1 < decode_on_the_fly) return -1; gfp->decode_on_the_fly = decode_on_the_fly; return 0; #endif } return -1; } int lame_get_decode_on_the_fly(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->decode_on_the_fly && 1 >= gfp->decode_on_the_fly); return gfp->decode_on_the_fly; } return 0; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED /* DEPRECATED: now does the same as lame_set_findReplayGain() default = 0 (disabled) */ int CDECL lame_set_ReplayGain_input(lame_global_flags *, int); int CDECL lame_get_ReplayGain_input(const lame_global_flags *); /* DEPRECATED: now does the same as lame_set_decode_on_the_fly() && lame_set_findReplayGain() default = 0 (disabled) */ int CDECL lame_set_ReplayGain_decode(lame_global_flags *, int); int CDECL lame_get_ReplayGain_decode(const lame_global_flags *); /* DEPRECATED: now does the same as lame_set_decode_on_the_fly() default = 0 (disabled) */ int CDECL lame_set_findPeakSample(lame_global_flags *, int); int CDECL lame_get_findPeakSample(const lame_global_flags *); #else #endif /* DEPRECATED. same as lame_set_decode_on_the_fly() */ int lame_set_findPeakSample(lame_global_flags * gfp, int arg) { return lame_set_decode_on_the_fly(gfp, arg); } int lame_get_findPeakSample(const lame_global_flags * gfp) { return lame_get_decode_on_the_fly(gfp); } /* DEPRECATED. same as lame_set_findReplayGain() */ int lame_set_ReplayGain_input(lame_global_flags * gfp, int arg) { return lame_set_findReplayGain(gfp, arg); } int lame_get_ReplayGain_input(const lame_global_flags * gfp) { return lame_get_findReplayGain(gfp); } /* DEPRECATED. same as lame_set_decode_on_the_fly() && lame_set_findReplayGain() */ int lame_set_ReplayGain_decode(lame_global_flags * gfp, int arg) { if (lame_set_decode_on_the_fly(gfp, arg) < 0 || lame_set_findReplayGain(gfp, arg) < 0) return -1; else return 0; } int lame_get_ReplayGain_decode(const lame_global_flags * gfp) { if (lame_get_decode_on_the_fly(gfp) > 0 && lame_get_findReplayGain(gfp) > 0) return 1; else return 0; } /* set and get some gapless encoding flags */ int lame_set_nogap_total(lame_global_flags * gfp, int the_nogap_total) { if (is_lame_global_flags_valid(gfp)) { gfp->nogap_total = the_nogap_total; return 0; } return -1; } int lame_get_nogap_total(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->nogap_total; } return 0; } int lame_set_nogap_currentindex(lame_global_flags * gfp, int the_nogap_index) { if (is_lame_global_flags_valid(gfp)) { gfp->nogap_current = the_nogap_index; return 0; } return -1; } int lame_get_nogap_currentindex(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->nogap_current; } return 0; } /* message handlers */ int lame_set_errorf(lame_global_flags * gfp, void (*func) (const char *, va_list)) { if (is_lame_global_flags_valid(gfp)) { gfp->report.errorf = func; return 0; } return -1; } int lame_set_debugf(lame_global_flags * gfp, void (*func) (const char *, va_list)) { if (is_lame_global_flags_valid(gfp)) { gfp->report.debugf = func; return 0; } return -1; } int lame_set_msgf(lame_global_flags * gfp, void (*func) (const char *, va_list)) { if (is_lame_global_flags_valid(gfp)) { gfp->report.msgf = func; return 0; } return -1; } /* * Set one of * - brate * - compression ratio. * * Default is compression ratio of 11. */ int lame_set_brate(lame_global_flags * gfp, int brate) { if (is_lame_global_flags_valid(gfp)) { gfp->brate = brate; if (brate > 320) { gfp->disable_reservoir = 1; } return 0; } return -1; } int lame_get_brate(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->brate; } return 0; } int lame_set_compression_ratio(lame_global_flags * gfp, float compression_ratio) { if (is_lame_global_flags_valid(gfp)) { gfp->compression_ratio = compression_ratio; return 0; } return -1; } float lame_get_compression_ratio(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->compression_ratio; } return 0; } /* * frame parameters */ /* Mark as copyright protected. */ int lame_set_copyright(lame_global_flags * gfp, int copyright) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > copyright || 1 < copyright) return -1; gfp->copyright = copyright; return 0; } return -1; } int lame_get_copyright(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->copyright && 1 >= gfp->copyright); return gfp->copyright; } return 0; } /* Mark as original. */ int lame_set_original(lame_global_flags * gfp, int original) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 (enabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > original || 1 < original) return -1; gfp->original = original; return 0; } return -1; } int lame_get_original(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->original && 1 >= gfp->original); return gfp->original; } return 0; } /* * error_protection. * Use 2 bytes from each frame for CRC checksum. */ int lame_set_error_protection(lame_global_flags * gfp, int error_protection) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > error_protection || 1 < error_protection) return -1; gfp->error_protection = error_protection; return 0; } return -1; } int lame_get_error_protection(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->error_protection && 1 >= gfp->error_protection); return gfp->error_protection; } return 0; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED /* padding_type. 0=pad no frames 1=pad all frames 2=adjust padding(default) */ int CDECL lame_set_padding_type(lame_global_flags *, Padding_type); Padding_type CDECL lame_get_padding_type(const lame_global_flags *); #else #endif /* * padding_type. * PAD_NO = pad no frames * PAD_ALL = pad all frames * PAD_ADJUST = adjust padding */ int lame_set_padding_type(lame_global_flags * gfp, Padding_type padding_type) { (void) gfp; (void) padding_type; return 0; } Padding_type lame_get_padding_type(const lame_global_flags * gfp) { (void) gfp; return PAD_ADJUST; } /* MP3 'private extension' bit. Meaningless. */ int lame_set_extension(lame_global_flags * gfp, int extension) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > extension || 1 < extension) return -1; gfp->extension = extension; return 0; } return -1; } int lame_get_extension(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->extension && 1 >= gfp->extension); return gfp->extension; } return 0; } /* Enforce strict ISO compliance. */ int lame_set_strict_ISO(lame_global_flags * gfp, int val) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (val < MDB_DEFAULT || MDB_MAXIMUM < val) return -1; gfp->strict_ISO = val; return 0; } return -1; } int lame_get_strict_ISO(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->strict_ISO; } return 0; } /******************************************************************** * quantization/noise shaping ***********************************************************************/ /* Disable the bit reservoir. For testing only. */ int lame_set_disable_reservoir(lame_global_flags * gfp, int disable_reservoir) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > disable_reservoir || 1 < disable_reservoir) return -1; gfp->disable_reservoir = disable_reservoir; return 0; } return -1; } int lame_get_disable_reservoir(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->disable_reservoir && 1 >= gfp->disable_reservoir); return gfp->disable_reservoir; } return 0; } int lame_set_experimentalX(lame_global_flags * gfp, int experimentalX) { if (is_lame_global_flags_valid(gfp)) { lame_set_quant_comp(gfp, experimentalX); lame_set_quant_comp_short(gfp, experimentalX); return 0; } return -1; } int lame_get_experimentalX(const lame_global_flags * gfp) { return lame_get_quant_comp(gfp); } /* Select a different "best quantization" function. default = 0 */ int lame_set_quant_comp(lame_global_flags * gfp, int quant_type) { if (is_lame_global_flags_valid(gfp)) { gfp->quant_comp = quant_type; return 0; } return -1; } int lame_get_quant_comp(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->quant_comp; } return 0; } /* Select a different "best quantization" function. default = 0 */ int lame_set_quant_comp_short(lame_global_flags * gfp, int quant_type) { if (is_lame_global_flags_valid(gfp)) { gfp->quant_comp_short = quant_type; return 0; } return -1; } int lame_get_quant_comp_short(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->quant_comp_short; } return 0; } /* Another experimental option. For testing only. */ int lame_set_experimentalY(lame_global_flags * gfp, int experimentalY) { if (is_lame_global_flags_valid(gfp)) { gfp->experimentalY = experimentalY; return 0; } return -1; } int lame_get_experimentalY(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->experimentalY; } return 0; } int lame_set_experimentalZ(lame_global_flags * gfp, int experimentalZ) { if (is_lame_global_flags_valid(gfp)) { gfp->experimentalZ = experimentalZ; return 0; } return -1; } int lame_get_experimentalZ(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->experimentalZ; } return 0; } /* Naoki's psycho acoustic model. */ int lame_set_exp_nspsytune(lame_global_flags * gfp, int exp_nspsytune) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ gfp->exp_nspsytune = exp_nspsytune; return 0; } return -1; } int lame_get_exp_nspsytune(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->exp_nspsytune; } return 0; } /******************************************************************** * VBR control ***********************************************************************/ /* Types of VBR. default = vbr_off = CBR */ int lame_set_VBR(lame_global_flags * gfp, vbr_mode VBR) { if (is_lame_global_flags_valid(gfp)) { int vbr_q = VBR; if (0 > vbr_q || vbr_max_indicator <= vbr_q) return -1; /* Unknown VBR mode! */ gfp->VBR = VBR; return 0; } return -1; } vbr_mode lame_get_VBR(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(gfp->VBR < vbr_max_indicator); return gfp->VBR; } return vbr_off; } /* * VBR quality level. * 0 = highest * 9 = lowest */ int lame_set_VBR_q(lame_global_flags * gfp, int VBR_q) { if (is_lame_global_flags_valid(gfp)) { int ret = 0; if (0 > VBR_q) { ret = -1; /* Unknown VBR quality level! */ VBR_q = 0; } if (9 < VBR_q) { ret = -1; VBR_q = 9; } gfp->VBR_q = VBR_q; gfp->VBR_q_frac = 0; return ret; } return -1; } int lame_get_VBR_q(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->VBR_q && 10 > gfp->VBR_q); return gfp->VBR_q; } return 0; } int lame_set_VBR_quality(lame_global_flags * gfp, float VBR_q) { if (is_lame_global_flags_valid(gfp)) { int ret = 0; if (0 > VBR_q) { ret = -1; /* Unknown VBR quality level! */ VBR_q = 0; } if (9.999 < VBR_q) { ret = -1; VBR_q = 9.999; } gfp->VBR_q = (int) VBR_q; gfp->VBR_q_frac = VBR_q - gfp->VBR_q; return ret; } return -1; } float lame_get_VBR_quality(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->VBR_q + gfp->VBR_q_frac; } return 0; } /* Ignored except for VBR = vbr_abr (ABR mode) */ int lame_set_VBR_mean_bitrate_kbps(lame_global_flags * gfp, int VBR_mean_bitrate_kbps) { if (is_lame_global_flags_valid(gfp)) { gfp->VBR_mean_bitrate_kbps = VBR_mean_bitrate_kbps; return 0; } return -1; } int lame_get_VBR_mean_bitrate_kbps(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->VBR_mean_bitrate_kbps; } return 0; } int lame_set_VBR_min_bitrate_kbps(lame_global_flags * gfp, int VBR_min_bitrate_kbps) { if (is_lame_global_flags_valid(gfp)) { gfp->VBR_min_bitrate_kbps = VBR_min_bitrate_kbps; return 0; } return -1; } int lame_get_VBR_min_bitrate_kbps(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->VBR_min_bitrate_kbps; } return 0; } int lame_set_VBR_max_bitrate_kbps(lame_global_flags * gfp, int VBR_max_bitrate_kbps) { if (is_lame_global_flags_valid(gfp)) { gfp->VBR_max_bitrate_kbps = VBR_max_bitrate_kbps; return 0; } return -1; } int lame_get_VBR_max_bitrate_kbps(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->VBR_max_bitrate_kbps; } return 0; } /* * Strictly enforce VBR_min_bitrate. * Normally it will be violated for analog silence. */ int lame_set_VBR_hard_min(lame_global_flags * gfp, int VBR_hard_min) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 (disabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > VBR_hard_min || 1 < VBR_hard_min) return -1; gfp->VBR_hard_min = VBR_hard_min; return 0; } return -1; } int lame_get_VBR_hard_min(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->VBR_hard_min && 1 >= gfp->VBR_hard_min); return gfp->VBR_hard_min; } return 0; } /******************************************************************** * Filtering control ***********************************************************************/ /* * Freqency in Hz to apply lowpass. * 0 = default = lame chooses * -1 = disabled */ int lame_set_lowpassfreq(lame_global_flags * gfp, int lowpassfreq) { if (is_lame_global_flags_valid(gfp)) { gfp->lowpassfreq = lowpassfreq; return 0; } return -1; } int lame_get_lowpassfreq(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->lowpassfreq; } return 0; } /* * Width of transition band (in Hz). * default = one polyphase filter band */ int lame_set_lowpasswidth(lame_global_flags * gfp, int lowpasswidth) { if (is_lame_global_flags_valid(gfp)) { gfp->lowpasswidth = lowpasswidth; return 0; } return -1; } int lame_get_lowpasswidth(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->lowpasswidth; } return 0; } /* * Frequency in Hz to apply highpass. * 0 = default = lame chooses * -1 = disabled */ int lame_set_highpassfreq(lame_global_flags * gfp, int highpassfreq) { if (is_lame_global_flags_valid(gfp)) { gfp->highpassfreq = highpassfreq; return 0; } return -1; } int lame_get_highpassfreq(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->highpassfreq; } return 0; } /* * Width of transition band (in Hz). * default = one polyphase filter band */ int lame_set_highpasswidth(lame_global_flags * gfp, int highpasswidth) { if (is_lame_global_flags_valid(gfp)) { gfp->highpasswidth = highpasswidth; return 0; } return -1; } int lame_get_highpasswidth(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->highpasswidth; } return 0; } /* * psycho acoustics and other arguments which you should not change * unless you know what you are doing */ /* Adjust masking values. */ int lame_set_maskingadjust(lame_global_flags * gfp, float adjust) { if (is_lame_global_flags_valid(gfp)) { gfp->maskingadjust = adjust; return 0; } return -1; } float lame_get_maskingadjust(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->maskingadjust; } return 0; } int lame_set_maskingadjust_short(lame_global_flags * gfp, float adjust) { if (is_lame_global_flags_valid(gfp)) { gfp->maskingadjust_short = adjust; return 0; } return -1; } float lame_get_maskingadjust_short(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->maskingadjust_short; } return 0; } /* Only use ATH for masking. */ int lame_set_ATHonly(lame_global_flags * gfp, int ATHonly) { if (is_lame_global_flags_valid(gfp)) { gfp->ATHonly = ATHonly; return 0; } return -1; } int lame_get_ATHonly(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->ATHonly; } return 0; } /* Only use ATH for short blocks. */ int lame_set_ATHshort(lame_global_flags * gfp, int ATHshort) { if (is_lame_global_flags_valid(gfp)) { gfp->ATHshort = ATHshort; return 0; } return -1; } int lame_get_ATHshort(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->ATHshort; } return 0; } /* Disable ATH. */ int lame_set_noATH(lame_global_flags * gfp, int noATH) { if (is_lame_global_flags_valid(gfp)) { gfp->noATH = noATH; return 0; } return -1; } int lame_get_noATH(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->noATH; } return 0; } /* Select ATH formula. */ int lame_set_ATHtype(lame_global_flags * gfp, int ATHtype) { if (is_lame_global_flags_valid(gfp)) { /* XXX: ATHtype should be converted to an enum. */ gfp->ATHtype = ATHtype; return 0; } return -1; } int lame_get_ATHtype(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->ATHtype; } return 0; } /* Select ATH formula 4 shape. */ int lame_set_ATHcurve(lame_global_flags * gfp, float ATHcurve) { if (is_lame_global_flags_valid(gfp)) { gfp->ATHcurve = ATHcurve; return 0; } return -1; } float lame_get_ATHcurve(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->ATHcurve; } return 0; } /* Lower ATH by this many db. */ int lame_set_ATHlower(lame_global_flags * gfp, float ATHlower) { if (is_lame_global_flags_valid(gfp)) { gfp->ATH_lower_db = ATHlower; return 0; } return -1; } float lame_get_ATHlower(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->ATH_lower_db; } return 0; } /* Select ATH adaptive adjustment scheme. */ int lame_set_athaa_type(lame_global_flags * gfp, int athaa_type) { if (is_lame_global_flags_valid(gfp)) { gfp->athaa_type = athaa_type; return 0; } return -1; } int lame_get_athaa_type(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->athaa_type; } return 0; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED int CDECL lame_set_athaa_loudapprox(lame_global_flags * gfp, int athaa_loudapprox); int CDECL lame_get_athaa_loudapprox(const lame_global_flags * gfp); #else #endif /* Select the loudness approximation used by the ATH adaptive auto-leveling. */ int lame_set_athaa_loudapprox(lame_global_flags * gfp, int athaa_loudapprox) { (void) gfp; (void) athaa_loudapprox; return 0; } int lame_get_athaa_loudapprox(const lame_global_flags * gfp) { (void) gfp; /* obsolete, the type known under number 2 is the only survival */ return 2; } /* Adjust (in dB) the point below which adaptive ATH level adjustment occurs. */ int lame_set_athaa_sensitivity(lame_global_flags * gfp, float athaa_sensitivity) { if (is_lame_global_flags_valid(gfp)) { gfp->athaa_sensitivity = athaa_sensitivity; return 0; } return -1; } float lame_get_athaa_sensitivity(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->athaa_sensitivity; } return 0; } /* Predictability limit (ISO tonality formula) */ int lame_set_cwlimit(lame_global_flags * gfp, int cwlimit); int lame_get_cwlimit(const lame_global_flags * gfp); int lame_set_cwlimit(lame_global_flags * gfp, int cwlimit) { (void) gfp; (void) cwlimit; return 0; } int lame_get_cwlimit(const lame_global_flags * gfp) { (void) gfp; return 0; } /* * Allow blocktypes to differ between channels. * default: * 0 for jstereo => block types coupled * 1 for stereo => block types may differ */ int lame_set_allow_diff_short(lame_global_flags * gfp, int allow_diff_short) { if (is_lame_global_flags_valid(gfp)) { gfp->short_blocks = allow_diff_short ? short_block_allowed : short_block_coupled; return 0; } return -1; } int lame_get_allow_diff_short(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { if (gfp->short_blocks == short_block_allowed) return 1; /* short blocks allowed to differ */ else return 0; /* not set, dispensed, forced or coupled */ } return 0; } /* Use temporal masking effect */ int lame_set_useTemporal(lame_global_flags * gfp, int useTemporal) { if (is_lame_global_flags_valid(gfp)) { /* default = 1 (enabled) */ /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 <= useTemporal && useTemporal <= 1) { gfp->useTemporal = useTemporal; return 0; } } return -1; } int lame_get_useTemporal(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->useTemporal && 1 >= gfp->useTemporal); return gfp->useTemporal; } return 0; } /* Use inter-channel masking effect */ int lame_set_interChRatio(lame_global_flags * gfp, float ratio) { if (is_lame_global_flags_valid(gfp)) { /* default = 0.0 (no inter-channel maskin) */ if (0 <= ratio && ratio <= 1.0) { gfp->interChRatio = ratio; return 0; } } return -1; } float lame_get_interChRatio(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert((0 <= gfp->interChRatio && gfp->interChRatio <= 1.0) || EQ(gfp->interChRatio, -1)); return gfp->interChRatio; } return 0; } /* Use pseudo substep shaping method */ int lame_set_substep(lame_global_flags * gfp, int method) { if (is_lame_global_flags_valid(gfp)) { /* default = 0.0 (no substep noise shaping) */ if (0 <= method && method <= 7) { gfp->substep_shaping = method; return 0; } } return -1; } int lame_get_substep(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->substep_shaping && gfp->substep_shaping <= 7); return gfp->substep_shaping; } return 0; } /* scalefactors scale */ int lame_set_sfscale(lame_global_flags * gfp, int val) { if (is_lame_global_flags_valid(gfp)) { gfp->noise_shaping = (val != 0) ? 2 : 1; return 0; } return -1; } int lame_get_sfscale(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return (gfp->noise_shaping == 2) ? 1 : 0; } return 0; } /* subblock gain */ int lame_set_subblock_gain(lame_global_flags * gfp, int sbgain) { if (is_lame_global_flags_valid(gfp)) { gfp->subblock_gain = sbgain; return 0; } return -1; } int lame_get_subblock_gain(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->subblock_gain; } return 0; } /* Disable short blocks. */ int lame_set_no_short_blocks(lame_global_flags * gfp, int no_short_blocks) { if (is_lame_global_flags_valid(gfp)) { /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 <= no_short_blocks && no_short_blocks <= 1) { gfp->short_blocks = no_short_blocks ? short_block_dispensed : short_block_allowed; return 0; } } return -1; } int lame_get_no_short_blocks(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { switch (gfp->short_blocks) { default: case short_block_not_set: return -1; case short_block_dispensed: return 1; case short_block_allowed: case short_block_coupled: case short_block_forced: return 0; } } return -1; } /* Force short blocks. */ int lame_set_force_short_blocks(lame_global_flags * gfp, int short_blocks) { if (is_lame_global_flags_valid(gfp)) { /* enforce disable/enable meaning, if we need more than two values we need to switch to an enum to have an apropriate representation of the possible meanings of the value */ if (0 > short_blocks || 1 < short_blocks) return -1; if (short_blocks == 1) gfp->short_blocks = short_block_forced; else if (gfp->short_blocks == short_block_forced) gfp->short_blocks = short_block_allowed; return 0; } return -1; } int lame_get_force_short_blocks(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { switch (gfp->short_blocks) { default: case short_block_not_set: return -1; case short_block_dispensed: case short_block_allowed: case short_block_coupled: return 0; case short_block_forced: return 1; } } return -1; } int lame_set_short_threshold_lrm(lame_global_flags * gfp, float lrm) { if (is_lame_global_flags_valid(gfp)) { gfp->attackthre = lrm; return 0; } return -1; } float lame_get_short_threshold_lrm(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->attackthre; } return 0; } int lame_set_short_threshold_s(lame_global_flags * gfp, float s) { if (is_lame_global_flags_valid(gfp)) { gfp->attackthre_s = s; return 0; } return -1; } float lame_get_short_threshold_s(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->attackthre_s; } return 0; } int lame_set_short_threshold(lame_global_flags * gfp, float lrm, float s) { if (is_lame_global_flags_valid(gfp)) { lame_set_short_threshold_lrm(gfp, lrm); lame_set_short_threshold_s(gfp, s); return 0; } return -1; } /* * Input PCM is emphased PCM * (for instance from one of the rarely emphased CDs). * * It is STRONGLY not recommended to use this, because psycho does not * take it into account, and last but not least many decoders * ignore these bits */ int lame_set_emphasis(lame_global_flags * gfp, int emphasis) { if (is_lame_global_flags_valid(gfp)) { /* XXX: emphasis should be converted to an enum */ if (0 <= emphasis && emphasis < 4) { gfp->emphasis = emphasis; return 0; } } return -1; } int lame_get_emphasis(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { assert(0 <= gfp->emphasis && gfp->emphasis < 4); return gfp->emphasis; } return 0; } /***************************************************************/ /* internal variables, cannot be set... */ /* provided because they may be of use to calling application */ /***************************************************************/ /* MPEG version. * 0 = MPEG-2 * 1 = MPEG-1 * (2 = MPEG-2.5) */ int lame_get_version(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->cfg.version; } } return 0; } /* Encoder delay. */ int lame_get_encoder_delay(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_enc.encoder_delay; } } return 0; } /* padding added to the end of the input */ int lame_get_encoder_padding(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_enc.encoder_padding; } } return 0; } /* Size of MPEG frame. */ int lame_get_framesize(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; return 576 * cfg->mode_gr; } } return 0; } /* Number of frames encoded so far. */ int lame_get_frameNum(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_enc.frame_number; } } return 0; } int lame_get_mf_samples_to_encode(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->sv_enc.mf_samples_to_encode; } } return 0; } int CDECL lame_get_size_mp3buffer(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { int size; compute_flushbits(gfc, &size); return size; } } return 0; } int lame_get_RadioGain(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_rpg.RadioGain; } } return 0; } int lame_get_AudiophileGain(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return 0; } } return 0; } float lame_get_PeakSample(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return (float) gfc->ov_rpg.PeakSample; } } return 0; } int lame_get_noclipGainChange(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_rpg.noclipGainChange; } } return 0; } float lame_get_noclipScale(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return gfc->ov_rpg.noclipScale; } } return 0; } /* * LAME's estimate of the total number of frames to be encoded. * Only valid if calling program set num_samples. */ int lame_get_totalframes(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; unsigned long const pcm_samples_per_frame = 576 * cfg->mode_gr; unsigned long pcm_samples_to_encode = gfp->num_samples; unsigned long end_padding = 0; int frames = 0; if (pcm_samples_to_encode == (0ul-1ul)) return 0; /* unknown */ /* estimate based on user set num_samples: */ if (cfg->samplerate_in != cfg->samplerate_out) { /* resampling, estimate new samples_to_encode */ double resampled_samples_to_encode = 0.0, frames_f = 0.0; if (cfg->samplerate_in > 0) { resampled_samples_to_encode = pcm_samples_to_encode; resampled_samples_to_encode *= cfg->samplerate_out; resampled_samples_to_encode /= cfg->samplerate_in; } if (resampled_samples_to_encode <= 0.0) return 0; /* unlikely to happen, so what, no estimate! */ frames_f = floor(resampled_samples_to_encode / pcm_samples_per_frame); if (frames_f >= (INT_MAX-2)) return 0; /* overflow, happens eventually, no estimate! */ frames = frames_f; resampled_samples_to_encode -= frames * pcm_samples_per_frame; pcm_samples_to_encode = ceil(resampled_samples_to_encode); } else { frames = pcm_samples_to_encode / pcm_samples_per_frame; pcm_samples_to_encode -= frames * pcm_samples_per_frame; } pcm_samples_to_encode += 576ul; end_padding = pcm_samples_per_frame - (pcm_samples_to_encode % pcm_samples_per_frame); if (end_padding < 576ul) { end_padding += pcm_samples_per_frame; } pcm_samples_to_encode += end_padding; frames += (pcm_samples_to_encode / pcm_samples_per_frame); /* check to see if we underestimated totalframes */ /* if (totalframes < gfp->frameNum) */ /* totalframes = gfp->frameNum; */ return frames; } } return 0; } int lame_set_preset(lame_global_flags * gfp, int preset) { if (is_lame_global_flags_valid(gfp)) { gfp->preset = preset; return apply_preset(gfp, preset, 1); } return -1; } int lame_set_asm_optimizations(lame_global_flags * gfp, int optim, int mode) { if (is_lame_global_flags_valid(gfp)) { mode = (mode == 1 ? 1 : 0); switch (optim) { case MMX:{ gfp->asm_optimizations.mmx = mode; return optim; } case AMD_3DNOW:{ gfp->asm_optimizations.amd3dnow = mode; return optim; } case SSE:{ gfp->asm_optimizations.sse = mode; return optim; } default: return optim; } } return -1; } void lame_set_write_id3tag_automatic(lame_global_flags * gfp, int v) { if (is_lame_global_flags_valid(gfp)) { gfp->write_id3tag_automatic = v; } } int lame_get_write_id3tag_automatic(lame_global_flags const *gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->write_id3tag_automatic; } return 1; } /* UNDOCUMENTED, experimental settings. These routines are not prototyped in lame.h. You should not use them, they are experimental and may change. */ /* * just another daily changing developer switch */ void CDECL lame_set_tune(lame_global_flags *, float); void lame_set_tune(lame_global_flags * gfp, float val) { if (is_lame_global_flags_valid(gfp)) { gfp->tune_value_a = val; gfp->tune = 1; } } /* Custom msfix hack */ void lame_set_msfix(lame_global_flags * gfp, double msfix) { if (is_lame_global_flags_valid(gfp)) { /* default = 0 */ gfp->msfix = msfix; } } float lame_get_msfix(const lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { return gfp->msfix; } return 0; } #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED int CDECL lame_set_preset_expopts(lame_global_flags *, int); #else #endif int lame_set_preset_expopts(lame_global_flags * gfp, int preset_expopts) { (void) gfp; (void) preset_expopts; return 0; } int lame_set_preset_notune(lame_global_flags * gfp, int preset_notune) { (void) gfp; (void) preset_notune; return 0; } static int calc_maximum_input_samples_for_buffer_size(lame_internal_flags const* gfc, size_t buffer_size) { SessionConfig_t const *const cfg = &gfc->cfg; int const pcm_samples_per_frame = 576 * cfg->mode_gr; int frames_per_buffer = 0, input_samples_per_buffer = 0; int kbps = 320; if (cfg->samplerate_out < 16000) kbps = 64; else if (cfg->samplerate_out < 32000) kbps = 160; else kbps = 320; if (cfg->free_format) kbps = cfg->avg_bitrate; else if (cfg->vbr == vbr_off) { kbps = cfg->avg_bitrate; } { int const pad = 1; int const bpf = ((cfg->version + 1) * 72000 * kbps / cfg->samplerate_out + pad); frames_per_buffer = buffer_size / bpf; } { double ratio = (double) cfg->samplerate_in / cfg->samplerate_out; input_samples_per_buffer = pcm_samples_per_frame * frames_per_buffer * ratio; } return input_samples_per_buffer; } int lame_get_maximum_number_of_samples(lame_t gfp, size_t buffer_size) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { return calc_maximum_input_samples_for_buffer_size(gfc, buffer_size); } } return LAME_GENERICERROR; } �����������������������������������������������������������������������������lame-3.100/libmp3lame/fft.c�������������������������������������������������������������������������000644 �001751 �001751 �00000023325 13154046620 017041� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ** FFT and FHT routines ** Copyright 1988, 1993; Ron Mayer ** Copyright (c) 1999-2000 Takehiro Tominaga ** ** fht(fz,n); ** Does a hartley transform of "n" points in the array "fz". ** ** NOTE: This routine uses at least 2 patented algorithms, and may be ** under the restrictions of a bunch of different organizations. ** Although I wrote it completely myself; it is kind of a derivative ** of a routine I once authored and released under the GPL, so it ** may fall under the free software foundation's restrictions; ** it was worked on as a Stanford Univ project, so they claim ** some rights to it; it was further optimized at work here, so ** I think this company claims parts of it. The patents are ** held by R. Bracewell (the FHT algorithm) and O. Buneman (the ** trig generator), both at Stanford Univ. ** If it were up to me, I'd say go do whatever you want with it; ** but it would be polite to give credit to the following people ** if you use this anywhere: ** Euler - probable inventor of the fourier transform. ** Gauss - probable inventor of the FFT. ** Hartley - probable inventor of the hartley transform. ** Buneman - for a really cool trig generator ** Mayer(me) - for authoring this particular version and ** including all the optimizations in one package. ** Thanks, ** Ron Mayer; mayer@acuson.com ** and added some optimization by ** Mather - idea of using lookup table ** Takehiro - some dirty hack for speed up */ /* $Id: fft.c,v 1.39 2017/09/06 15:07:29 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "fft.h" #include "vector/lame_intrin.h" #define TRI_SIZE (5-1) /* 1024 = 4**5 */ /* fft.c */ static const FLOAT costab[TRI_SIZE * 2] = { 9.238795325112867e-01, 3.826834323650898e-01, 9.951847266721969e-01, 9.801714032956060e-02, 9.996988186962042e-01, 2.454122852291229e-02, 9.999811752826011e-01, 6.135884649154475e-03 }; static void fht(FLOAT * fz, int n) { const FLOAT *tri = costab; int k4; FLOAT *fi, *gi; FLOAT const *fn; n <<= 1; /* to get BLKSIZE, because of 3DNow! ASM routine */ fn = fz + n; k4 = 4; do { FLOAT s1, c1; int i, k1, k2, k3, kx; kx = k4 >> 1; k1 = k4; k2 = k4 << 1; k3 = k2 + k1; k4 = k2 << 1; fi = fz; gi = fi + kx; do { FLOAT f0, f1, f2, f3; f1 = fi[0] - fi[k1]; f0 = fi[0] + fi[k1]; f3 = fi[k2] - fi[k3]; f2 = fi[k2] + fi[k3]; fi[k2] = f0 - f2; fi[0] = f0 + f2; fi[k3] = f1 - f3; fi[k1] = f1 + f3; f1 = gi[0] - gi[k1]; f0 = gi[0] + gi[k1]; f3 = SQRT2 * gi[k3]; f2 = SQRT2 * gi[k2]; gi[k2] = f0 - f2; gi[0] = f0 + f2; gi[k3] = f1 - f3; gi[k1] = f1 + f3; gi += k4; fi += k4; } while (fi < fn); c1 = tri[0]; s1 = tri[1]; for (i = 1; i < kx; i++) { FLOAT c2, s2; c2 = 1 - (2 * s1) * s1; s2 = (2 * s1) * c1; fi = fz + i; gi = fz + k1 - i; do { FLOAT a, b, g0, f0, f1, g1, f2, g2, f3, g3; b = s2 * fi[k1] - c2 * gi[k1]; a = c2 * fi[k1] + s2 * gi[k1]; f1 = fi[0] - a; f0 = fi[0] + a; g1 = gi[0] - b; g0 = gi[0] + b; b = s2 * fi[k3] - c2 * gi[k3]; a = c2 * fi[k3] + s2 * gi[k3]; f3 = fi[k2] - a; f2 = fi[k2] + a; g3 = gi[k2] - b; g2 = gi[k2] + b; b = s1 * f2 - c1 * g3; a = c1 * f2 + s1 * g3; fi[k2] = f0 - a; fi[0] = f0 + a; gi[k3] = g1 - b; gi[k1] = g1 + b; b = c1 * g2 - s1 * f3; a = s1 * g2 + c1 * f3; gi[k2] = g0 - a; gi[0] = g0 + a; fi[k3] = f1 - b; fi[k1] = f1 + b; gi += k4; fi += k4; } while (fi < fn); c2 = c1; c1 = c2 * tri[0] - s1 * tri[1]; s1 = c2 * tri[1] + s1 * tri[0]; } tri += 2; } while (k4 < n); } static const unsigned char rv_tbl[] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe }; #define ch01(index) (buffer[chn][index]) #define ml00(f) (window[i ] * f(i)) #define ml10(f) (window[i + 0x200] * f(i + 0x200)) #define ml20(f) (window[i + 0x100] * f(i + 0x100)) #define ml30(f) (window[i + 0x300] * f(i + 0x300)) #define ml01(f) (window[i + 0x001] * f(i + 0x001)) #define ml11(f) (window[i + 0x201] * f(i + 0x201)) #define ml21(f) (window[i + 0x101] * f(i + 0x101)) #define ml31(f) (window[i + 0x301] * f(i + 0x301)) #define ms00(f) (window_s[i ] * f(i + k)) #define ms10(f) (window_s[0x7f - i] * f(i + k + 0x80)) #define ms20(f) (window_s[i + 0x40] * f(i + k + 0x40)) #define ms30(f) (window_s[0x3f - i] * f(i + k + 0xc0)) #define ms01(f) (window_s[i + 0x01] * f(i + k + 0x01)) #define ms11(f) (window_s[0x7e - i] * f(i + k + 0x81)) #define ms21(f) (window_s[i + 0x41] * f(i + k + 0x41)) #define ms31(f) (window_s[0x3e - i] * f(i + k + 0xc1)) void fft_short(lame_internal_flags const *const gfc, FLOAT x_real[3][BLKSIZE_s], int chn, const sample_t *const buffer[2]) { int i; int j; int b; #define window_s gfc->cd_psy->window_s #define window gfc->cd_psy->window for (b = 0; b < 3; b++) { FLOAT *x = &x_real[b][BLKSIZE_s / 2]; short const k = (576 / 3) * (b + 1); j = BLKSIZE_s / 8 - 1; do { FLOAT f0, f1, f2, f3, w; i = rv_tbl[j << 2]; f0 = ms00(ch01); w = ms10(ch01); f1 = f0 - w; f0 = f0 + w; f2 = ms20(ch01); w = ms30(ch01); f3 = f2 - w; f2 = f2 + w; x -= 4; x[0] = f0 + f2; x[2] = f0 - f2; x[1] = f1 + f3; x[3] = f1 - f3; f0 = ms01(ch01); w = ms11(ch01); f1 = f0 - w; f0 = f0 + w; f2 = ms21(ch01); w = ms31(ch01); f3 = f2 - w; f2 = f2 + w; x[BLKSIZE_s / 2 + 0] = f0 + f2; x[BLKSIZE_s / 2 + 2] = f0 - f2; x[BLKSIZE_s / 2 + 1] = f1 + f3; x[BLKSIZE_s / 2 + 3] = f1 - f3; } while (--j >= 0); #undef window #undef window_s gfc->fft_fht(x, BLKSIZE_s / 2); /* BLKSIZE_s/2 because of 3DNow! ASM routine */ } } void fft_long(lame_internal_flags const *const gfc, FLOAT x[BLKSIZE], int chn, const sample_t *const buffer[2]) { int i; int jj = BLKSIZE / 8 - 1; x += BLKSIZE / 2; #define window_s gfc->cd_psy->window_s #define window gfc->cd_psy->window do { FLOAT f0, f1, f2, f3, w; i = rv_tbl[jj]; f0 = ml00(ch01); w = ml10(ch01); f1 = f0 - w; f0 = f0 + w; f2 = ml20(ch01); w = ml30(ch01); f3 = f2 - w; f2 = f2 + w; x -= 4; x[0] = f0 + f2; x[2] = f0 - f2; x[1] = f1 + f3; x[3] = f1 - f3; f0 = ml01(ch01); w = ml11(ch01); f1 = f0 - w; f0 = f0 + w; f2 = ml21(ch01); w = ml31(ch01); f3 = f2 - w; f2 = f2 + w; x[BLKSIZE / 2 + 0] = f0 + f2; x[BLKSIZE / 2 + 2] = f0 - f2; x[BLKSIZE / 2 + 1] = f1 + f3; x[BLKSIZE / 2 + 3] = f1 - f3; } while (--jj >= 0); #undef window #undef window_s gfc->fft_fht(x, BLKSIZE / 2); /* BLKSIZE/2 because of 3DNow! ASM routine */ } #ifdef HAVE_NASM extern void fht_3DN(FLOAT * fz, int n); extern void fht_SSE(FLOAT * fz, int n); #endif void init_fft(lame_internal_flags * const gfc) { int i; /* The type of window used here will make no real difference, but */ /* in the interest of merging nspsytune stuff - switch to blackman window */ for (i = 0; i < BLKSIZE; i++) /* blackman window */ gfc->cd_psy->window[i] = 0.42 - 0.5 * cos(2 * PI * (i + .5) / BLKSIZE) + 0.08 * cos(4 * PI * (i + .5) / BLKSIZE); for (i = 0; i < BLKSIZE_s / 2; i++) gfc->cd_psy->window_s[i] = 0.5 * (1.0 - cos(2.0 * PI * (i + 0.5) / BLKSIZE_s)); gfc->fft_fht = fht; #ifdef HAVE_NASM if (gfc->CPU_features.AMD_3DNow) { gfc->fft_fht = fht_3DN; } else if (gfc->CPU_features.SSE) { gfc->fft_fht = fht_SSE; } else { gfc->fft_fht = fht; } #else #ifdef HAVE_XMMINTRIN_H #ifdef MIN_ARCH_SSE gfc->fft_fht = fht_SSE2; #endif #endif #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/lame_global_flags.h�����������������������������������������������������������000644 �001751 �001751 �00000017745 11402572022 021704� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef LAME_GLOBAL_FLAGS_H #define LAME_GLOBAL_FLAGS_H #ifndef lame_internal_flags_defined #define lame_internal_flags_defined struct lame_internal_flags; typedef struct lame_internal_flags lame_internal_flags; #endif typedef enum short_block_e { short_block_not_set = -1, /* allow LAME to decide */ short_block_allowed = 0, /* LAME may use them, even different block types for L/R */ short_block_coupled, /* LAME may use them, but always same block types in L/R */ short_block_dispensed, /* LAME will not use short blocks, long blocks only */ short_block_forced /* LAME will not use long blocks, short blocks only */ } short_block_t; /*********************************************************************** * * Control Parameters set by User. These parameters are here for * backwards compatibility with the old, non-shared lib API. * Please use the lame_set_variablename() functions below * * ***********************************************************************/ struct lame_global_struct { unsigned int class_id; /* input description */ unsigned long num_samples; /* number of samples. default=2^32-1 */ int num_channels; /* input number of channels. default=2 */ int samplerate_in; /* input_samp_rate in Hz. default=44.1 kHz */ int samplerate_out; /* output_samp_rate. default: LAME picks best value at least not used for MP3 decoding: Remember 44.1 kHz MP3s and AC97 */ float scale; /* scale input by this amount before encoding at least not used for MP3 decoding */ float scale_left; /* scale input of channel 0 (left) by this amount before encoding */ float scale_right; /* scale input of channel 1 (right) by this amount before encoding */ /* general control params */ int analysis; /* collect data for a MP3 frame analyzer? */ int write_lame_tag; /* add Xing VBR tag? */ int decode_only; /* use lame/mpglib to convert mp3 to wav */ int quality; /* quality setting 0=best, 9=worst default=5 */ MPEG_mode mode; /* see enum in lame.h default = LAME picks best value */ int force_ms; /* force M/S mode. requires mode=1 */ int free_format; /* use free format? default=0 */ int findReplayGain; /* find the RG value? default=0 */ int decode_on_the_fly; /* decode on the fly? default=0 */ int write_id3tag_automatic; /* 1 (default) writes ID3 tags, 0 not */ int nogap_total; int nogap_current; int substep_shaping; int noise_shaping; int subblock_gain; /* 0 = no, 1 = yes */ int use_best_huffman; /* 0 = no. 1=outside loop 2=inside loop(slow) */ /* * set either brate>0 or compression_ratio>0, LAME will compute * the value of the variable not set. * Default is compression_ratio = 11.025 */ int brate; /* bitrate */ float compression_ratio; /* sizeof(wav file)/sizeof(mp3 file) */ /* frame params */ int copyright; /* mark as copyright. default=0 */ int original; /* mark as original. default=1 */ int extension; /* the MP3 'private extension' bit. Meaningless */ int emphasis; /* Input PCM is emphased PCM (for instance from one of the rarely emphased CDs), it is STRONGLY not recommended to use this, because psycho does not take it into account, and last but not least many decoders don't care about these bits */ int error_protection; /* use 2 bytes per frame for a CRC checksum. default=0 */ int strict_ISO; /* enforce ISO spec as much as possible */ int disable_reservoir; /* use bit reservoir? */ /* quantization/noise shaping */ int quant_comp; int quant_comp_short; int experimentalY; int experimentalZ; int exp_nspsytune; int preset; /* VBR control */ vbr_mode VBR; float VBR_q_frac; /* Range [0,...,1[ */ int VBR_q; /* Range [0,...,9] */ int VBR_mean_bitrate_kbps; int VBR_min_bitrate_kbps; int VBR_max_bitrate_kbps; int VBR_hard_min; /* strictly enforce VBR_min_bitrate normaly, it will be violated for analog silence */ /* resampling and filtering */ int lowpassfreq; /* freq in Hz. 0=lame choses. -1=no filter */ int highpassfreq; /* freq in Hz. 0=lame choses. -1=no filter */ int lowpasswidth; /* freq width of filter, in Hz (default=15%) */ int highpasswidth; /* freq width of filter, in Hz (default=15%) */ /* * psycho acoustics and other arguments which you should not change * unless you know what you are doing */ float maskingadjust; float maskingadjust_short; int ATHonly; /* only use ATH */ int ATHshort; /* only use ATH for short blocks */ int noATH; /* disable ATH */ int ATHtype; /* select ATH formula */ float ATHcurve; /* change ATH formula 4 shape */ float ATH_lower_db; /* lower ATH by this many db */ int athaa_type; /* select ATH auto-adjust scheme */ float athaa_sensitivity; /* dB, tune active region of auto-level */ short_block_t short_blocks; int useTemporal; /* use temporal masking effect */ float interChRatio; float msfix; /* Naoki's adjustment of Mid/Side maskings */ int tune; /* 0 off, 1 on */ float tune_value_a; /* used to pass values for debugging and stuff */ float attackthre; /* attack threshold for L/R/M channel */ float attackthre_s; /* attack threshold for S channel */ struct { void (*msgf) (const char *format, va_list ap); void (*debugf) (const char *format, va_list ap); void (*errorf) (const char *format, va_list ap); } report; /************************************************************************/ /* internal variables, do not set... */ /* provided because they may be of use to calling application */ /************************************************************************/ int lame_allocated_gfp; /* is this struct owned by calling program or lame? */ /**************************************************************************/ /* more internal variables are stored in this structure: */ /**************************************************************************/ lame_internal_flags *internal_flags; struct { int mmx; int amd3dnow; int sse; } asm_optimizations; }; int is_lame_global_flags_valid(const lame_global_flags * gfp); #endif /* LAME_GLOBAL_FLAGS_H */ ���������������������������lame-3.100/libmp3lame/logoe.ico���������������������������������������������������������������������000644 �001751 �001751 �00000144076 11074452055 017730� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������€€����(È�����(���€����������������H���H�����������������������������������������������������������������������������������������������������������������������������������������������������������������ìîíè÷ó¼ËÈ»ßѤØÄƒÊ³~ϱYªW¨ŒX©lЯmÓ³pÖ²oÕ²mÓ³nÔ²nÔ²mÓ³pÖ²oÕ²mÓ³oÕ²nÔ²mÓ³pÖ²oÕ³mÓ³oÕ²nÔ³mÓ³pÖ²nÔ³mÓ³oÕ²nÔ³nÔ³pÖ²nÔ³mÓ³oÕ²mÓ³nÔ³pÖ²nÔ³nÔ³oÕ²mÓ³nÔ³pÖ²nÔ³nÔ³oÕ²mÓ³nÔ³pÖ²mÓ³nÔ³oÕ²mÓ³oÕ³pÖ²mÓ³nÔ²oÕ²mÓ³oÕ²pÖ²mÓ³nÔ²nÔ²mÓ³oÕ²pÖ²mÓ³nÔ²˜¹°������������������������������������������������������������������������������������������������������������������������������������������������äêë§Ê¾|Á«?›‚LÇ›QÓ¨QÏ¥ZÔ°`Ô®dÔ³pÞºuáºsàÂtÞºqÚºmÓ·rزpÖ·mÓ±oÕ·oÕ³mÓ´rضpÖ²mÓ¶oÕ²oÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³lÒ´tÚ¶nÔ±mÓ·qײmÓ¶nÔ¶tÚ²nÔ·mÓ±q×¶mÓ´nÔ´tÚ¶nÔ±mÓ·qײmÓ¶nÔ¶tÚ²lÒ·oÕ±q×¶mÓ´nÔ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ¶oÕ²oÕ¶mÓ´pÖ³rØ·mÓ±oÕ·oÕ²mÓ¶pÖ¶rزmÓ¶cݳ…››������������������������������������������������������������������������������������������������������������������������������������ÜÞÜ®ÏÅo±–TØNÍ£[ÓªgÚ±iÖ±rÛ´tÚ³lÒ°qײqײmÓ°rزrزmÓ±qײoÕ²mÓ°tÚ²rزmÓ°qײoÕ²mÓ°tÚ²rزmÓ±qײoÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°nÔ°tÚ²pÖ°oÕ±qײoÕ°nÔ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°pÖ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²qײmÓ°rزtÚ²mÓ°oÕ²qײmÓ°rزtÚ²mÓ±cݳ…›•������������������������������������������������������������������������������������������������������������������������ÿíöÞéåy¸¦J¿œPУWаdÕ´lرjÑ·mÓ°mÓ¶jжnÔ²pÖ¶jвmÓ¶mÓ²jжpÖ¶nÔ°jжmÓ°mÓ¶jжoÕ°nÔ¶jвmÓ´mÓ²jжpÖ´nÔ°jжoÕ°mÓ¶jжpÖ°nÔ¶jвnÔµlÒ²jдpÖ´lÒ²jзnÔ°lÒ¶lÒ¶pÖ±lÒ·jвnÔ´jдlÒ´pÖ´lÒ²lÒ·nÔ±jжlÒ¶oÕ±lÒ·lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжnÔ¶pÖ°jжmÓ°oÕ´jжnÔ²pÖ´jвmÓ¶mÓ°jжnÔ¶pÖ°jжaÛ±…››������������������������������������������������������������������������������������������������������������������÷îðs° IÅ™[ت`Ó«nÙ´qزnÔ²sÙ´uÛ²mÓ³rزrØ´nÔ²sÙ²sÙ´nÔ°rØ´rزnÔ²sÙ´sÙ²nÔ³rزrØ´mÓ²uÛ²sÙ´nÔ°rØ´rزmÓ²uÛ´qײnÔ³rزpÖ´mÓ²uÛ²q×´nÔ°tÚ´pÖ²oÕ²uÛ´q×°pÖ³tÚ²pÖ´oÕ²uÛ²oÕ³pÖ°tÚ´pÖ²oÕ²uÛ´oÕ°pÖ³tÚ²pÖ²qײuÛ²oÕ³pÖ°tÚ´nÔ²qײuÛ´mÓ°pÖ´tÚ²nÔ²q×´uÛ²mÓ³pÖ²rØ´nÔ²qײuÛ´mÓ°rØ´rزnÔ²sÙ´sÙ²nÔ³fà³…—������������������������������������������������������������������������������������������������������������ÔÜØi·™PÏ¢bÖ­pÛ²uÛµoÕ°rØ´tÚ²oÕ²sÙ´uÛ²oÕ³rزtÚ´pÖ²sÙ²uÛ´oÕ°rØ´rزoÕ²uÛ´sÙ²pÖ³tÚ²rØ´oÕ²uÛ²sÙ´pÖ°tÚ´rزoÕ²uÛ´sÙ²pÖ³tÚ²rØ´oÕ²wݲsÙ´oÕ°tÚ´rزoÕ²wÝ´q×°pÖ´tÚ²pÖ´oÕ´wݲq×´pÖ°tÚ´pÖ²qײwÝ´q×°pÖ´tÚ²pÖ´q×´wݲoÕ´q×°tÚ´pÖ²qײwÝ´oÕ°rØ´tÚ²oÕ²sÙ´wݲoÕ³rزtÚ´pÖ²sÙ²uÛ´oÕ°rØ´tÚ²pÖ²sÙ´uÛ²oÕ³fà³…™������������������������������������������������������������������������������������������������������ÈáÚV¶‘PάbÓ¯lÖµjѶnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°lÒ¶jжmÓ²oÕ¶jвlÒ¶lÒ²jжoÕ¶nÔ°jжlÒ°lÒ¶jжoÕ°mÓ¶jвlÒ´lÒ²jжoÕ´mÓ°jжnÔ°lÒ¶jжoÕ°mÓ¶jвnÔµlÒ²jдoÕ´lÒ²jжnÔ°lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´oÕ´lÒ²lÒ¶nÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°nÔ´jжmÓ²oÕ´jвlÒ¶lÒ°jжmÓ¶oÕ°jж`Û±…››������������������������������������������������������������������������������������������������ËâÙ^ЬWÑ¥jÙ¯kÔ±oÕ°qײmÓ°pÖ²tÚ²lÒ°oÕ²qײlÒ°rزtÚ²lÒ±oÕ²qײmÓ°rزtÚ²lÒ°qײqײmÓ°rزrزmÓ±qײoÕ²mÓ°tÚ²rزmÓ°qײoÕ²lÒ°tÚ²rزmÓ±qײoÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°nÔ°tÚ²pÖ°oÕ±qײoÕ°nÔ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°pÖ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²qײmÓ°rزtÚ²lÒ°oÕ²qײmÓ°rزtÚ²mÓ±cݳ…›•������������������������������������������������������������������������������������������ßîèT´–XÒ§cѱnÖµtÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·q׳lÒ´rضtÚ²lÒ¶oÕ²oÕ¶mÓ´rسrØ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶oÕ²oÕ¶mÓ´rسrØ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ²mÓ¶qײoÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ±mÓ·qײoÕ¶nÔ¶tÚ²nÔ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײmÓ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ¶oÕ²q×¶mÓ´pÖ³tÚ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶cݳ…››������������������������������������������������������������������������������������íìëvÙ´NÊ¥bÑ®mÕ±jвlÒ²oÕ°jгlÒ²nÔ°jвmÓ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°jвlÒ°lÒ°jвmÓ°oÕ±jвlÒ±lÒ°jвoÕ°mÓ°jвlÒ°lÒ°jвoÕ°nÔ±jвlÒ±lÒ°jвoÕ°mÓ°jвnÔ°lÒ°jвoÕ°mÓ²jвnÔ±lÒ²jвpÖ°lÒ²jгnÔ°lÒ²lÒ²oÕ°lÒ³jвnÔ°jвlÒ²oÕ°lÒ²lÒ³nÔ°jвlÒ²oÕ°lÒ³lÒ²nÔ°jвlÒ²oÕ±jвlÒ²nÔ°jвmÓ²oÕ°jвlÒ°nÔ°jвnÔ°oÕ±jвmÓ±mÓ°jвmÓ°oÕ°jв`Û±…›—���������������������������������������������������������������������������������½ÝÕTТhÙ¯lÔ¯rضtÚ²pÖ´sÙ¶wݲoÕ´rذtÚ¶pÖ´sÙ²wݶoÕ°rضtÚ²pÖ´sÙ¶uÛ²oÕ´tÚ²tÚ¶pÖ´uÛ²uÛ¶oÕ°tÚ¶tÚ²oÕ´uÛ¶uÛ²pÖ´tÚ²tÚ¶oÕ´uÛ²sÙ¶pÖ°tÚ¶rزoÕ´wݶsÙ²pÖ´tÚ²rضoÕ´wݲsÙ¶pÖ°tÚ¶rزoÕ´wݶq×°pÖ´tÚ²rضq×´wݲq×´pÖ°tÚ¶rزqײwݶq×°rØ´tÚ²pÖ´q×¶wݲoÕ´rذtÚ¶pÖ´sÙ²wݶoÕ°rضtÚ²pÖ´sÙ¶wݲoÕ´rزtÚ¶pÖ´sÙ²uÛ¶pÖ°rضtÚ²pÖ´uÛ¶uÛ²oÕ´hⳆ™���������������������������������������������������������������������������òñðqÇ«VЧhÔ¯uÛ¶mÓ°pÖ¶rزnÔ¶oÕ¶uÛ²mÓ¶pÖ°rضnÔ´qײsÙ¶nÔ°pÖ¶rزnÔ¶q×¶sÙ²nÔ¶pÖ²rضnÔ´qײsÙ¶nÔ°pÖ¶pÖ²nÔ´sÙ¶qײnÔ¶rزpÖ¶nÔ¶sÙ²q×¶nÔ°rضpÖ²nÔ´sÙ¶qײnÔ¶rزpÖ¶mÓ¶uÛ²q×¶nÔ°rضpÖ²mÓ´uÛ¶oÕ°nÔ¶rزpÖ¶mÓ¶uÛ²oÕ¶nÔ°rضnÔ´oÕ´uÛ¶oÕ°nÔ¶rزnÔ¶oÕ¶uÛ²mÓ¶pÖ°rضnÔ´oÕ²uÛ¶mÓ°pÖ¶rزnÔ¶q×¶sÙ²nÔ¶pÖ²rضnÔ´qײsÙ¶nÔ°pÖ¶rزnÔ¶q×¶sÙ²nÔ¶dÞ³…›������������������������������������������������������������������������¾ÃÄZÒ­`ÒªhѲlÒ²pÖ±jвmÓ²nÔ°kѲlÒ²pÖ°jгmÓ²nÔ°jвnÔ°oÕ±jвmÓ±nÔ°jвnÔ°pÖ°jвmÓ°mÓ°jвnÔ°pÖ±jвmÓ±mÓ°jвoÕ°nÔ°jвmÓ°mÓ°jвpÖ°nÔ±jвmÓ±mÓ°jвpÖ°nÔ°jвnÔ°mÓ°jвoÕ°mÓ²jвnÔ±mÓ²jвpÖ°lÒ²kѳnÔ°lÒ²lÒ²pÖ°lÒ²kѲoÕ°kѲlÒ²oÕ°lÒ²lÒ²oÕ°kѲlÒ²pÖ°lÒ³lÒ²nÔ°kѲlÒ²pÖ±jвmÓ²nÔ°jвnÔ²oÕ°jвmÓ°nÔ°jвnÔ°pÖ±jвmÓ±mÓ°jвnÔ°pÖ°jв`Û±…›—���������������������������������������������������������������������·ÖÇRЩfÕ­p×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ´pÖ¶vܲnÔµoÕ±q×¶nÔµrسuÛ·nÔ±oÕ·q׳nÔµrضtÚ³nÔµq׳q×¶oÕµrسtÚ·nÔ±q×·q׳nÔµtÚ¶tÚ³nÔµq׳q×¶nÔµtÚ³rØ·oÕ±q×·oÕ³nÔµtÚ¶rسnÔµq׳oÕ¶nÔµvܲrضoÕ±q×¶oÕ²nÔ´vܶpÖ±oÕµqײoÕ¶nÔ¶vܲpÖ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ¶pÖ¶vܲnÔµoÕ±q×¶oÕ´pÖ²vܶnÔ±oÕ¶qײnÔ´rضuÛ²nÔµoÕ³q×¶nÔµrسtÚ·nÔ±q×·q׳oÕµrضtÚ³nÔµdß³…››������������������������������������������������������������������¡ØÇUÍ fÒ°mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²pÖ°rرlÒ²oÕ±oÕ°mÓ²pÖ°rذlÒ³oÕ°oÕ°mÓ²pÖ°rرlÒ²oÕ±oÕ°lÒ²pÖ°pÖ°lÒ³oÕ°oÕ°lÒ²rذpÖ±mÓ²oÕ±oÕ°lÒ²rذpÖ°mÓ³oÕ°oÕ°lÒ²rذnÔ²mÓ²oÕ±mÓ²lÒ²rذnÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²nÔ²rذnÔ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²nÔ²rرlÒ²mÓ²oÕ°mÓ²pÖ²rذlÒ³oÕ°oÕ°mÓ²pÖ°rرlÒ²oÕ±oÕ°mÓ²pÖ°rذlÒ³cݱ…›—���������������������������������������������������������������cª–VÏ­jÕ®lÒ·lÒ²nÔ´lÒ´lÒ´oÕ´lÒ²lÒ¶nÔ°jжnÔ¶pÖ°jжlÒ²nÔ´jдnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°nÔ´jжnÔ²oÕ´jвnÔµnÔ²jжoÕ´oÕ°jжnÔ°lÒ´jжoÕ°mÓ¶jвnÔ´lÒ²jжoÕ´nÔ°jжnÔ°lÒ¶jжpÖ°nÔ¶jвnÔ´lÒ²lÒ´pÖ´lÒ²lÒ¶nÔ°lÒ¶lÒ¶pÖ°lÒ¶lÒ²nÔ´lÒ´lÒ´oÕ´lÒ²lÒ¶nÔ°lÒ¶lÒ¶pÖ°lÒ¶lÒ²nÔ´jдnÔ²pÖ´jвlÒ¶nÔ°jжnÔ¶oÕ°jжlÒ°nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжnÔ´oÕ°jж`Û±…››������������������������������������������������������������Þ¸^Ô«oÙ´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´wݲpÖµtÚ²tÚ¶pÖ²uÛ²uÛ¶pÖ°tÚ´tÚ²pÖ²uÛ´uÛ²pÖµtÚ²tÚ´pÖ´wݲuÛ´pÖ°tÚ¶tÚ²pÖ²wݶsÙ²pÖµvܲrØ´pÖ´wݲsÙ´pÖ°vܶrزpÖ²wݶsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rØ´vܲpÖ´sÙ´wݲpÖµrزtÚ¶pÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´uÛ²pÖµh㳇™������������������������������������������������������üêðƒÞ¼[ЦiѱnÔ²q×°mÓ³nÔ²pÖ²lÒ²nÔ²qײlÒ²nÔ³pÖ°lÒ²nÔ²q×°lÒ³nÔ²pÖ²lÒ²oÕ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³nÔ°nÔ²lÒ²oÕ²qײlÒ²nÔ²nÔ°lÒ²qײoÕ°lÒ³nÔ°nÔ²lÒ²q×°oÕ³lÒ²pÖ²nÔ²lÒ²qײoÕ°lÒ³pÖ°nÔ²lÒ²q×°oÕ³lÒ²pÖ²nÔ²lÒ²qײnÔ²lÒ³pÖ°nÔ²mÓ²q×°nÔ³lÒ²pÖ²lÒ²nÔ²qײnÔ²lÒ³pÖ°lÒ²nÔ²q×°lÒ³nÔ²pÖ²lÒ²nÔ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³nÔ°pÖ²lÒ²oÕ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³bݱ…›—���������������������������������������������������óáæQ¶”\аkÔ¯mÓ¶lÒ¶rرlÒ·mÓ²oÕ´mÓ´lÒ´rØ´lÒ²mÓ·oÕ±kѶnÔ¶rرjзmÓ²oÕ´kÑ´nÔ²pÖ¶jвmÓ¶oÕ±kѶnÔ¶pÖ±jзmÓ±oÕ¶kѶpÖ²pÖ¶jвmÓ¶mÓ²jжpÖ¶pÖ±jзoÕ±mÓ¶jжpÖ±nÔ¶kѲoÕ¶mÓ²kѶpÖ¶nÔ±kÑ·oÕ±mÓ¶jжrرnÔ·kѲoÕµmÓ³lÒ´rØ´nÔ²kÑ·oÕ±mÓ¶lÒ¶rرlÒ·mÓ²oÕ´mÓ´lÒ´rØ´lÒ²mÓ·oÕ±mÓ¶lÒ¶rرlÒ·mÓ²oÕ´kÑ´nÔ³rصjвmÓ·oÕ±kѶnÔ¶rرjзmÓ±oÕ¶kѶnÔ²pÖ¶jвmÓ¶oÕ±kѶnÔ¶pÖ±jзaÛ²…››���������������������������������������������������sÒ«bÖ«nÖ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°rزvܲnÔ°oÕ²qײoÕ°rزtÚ²nÔ±qײqײnÔ°rزtÚ²nÔ°qײqײnÔ°tÚ²tÚ²nÔ±qײqײnÔ°tÚ²rزoÕ°qײoÕ²oÕ°tÚ²rزoÕ±qײoÕ²nÔ°uÛ²rرoÕ°qײoÕ°nÔ°uÛ²pÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°rزvܲnÔ±oÕ²qײoÕ°rزtÚ²nÔ°qײqײoÕ°rزtÚ²nÔ±eß³…›•������������������������������������������������Yš‰`Ö¯jÒ²mÓ·oÕ±mÓ¶lÒ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ´rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶kÑ´nÔ²rضjвmÓ¶oÕ±jжpÖ¶rرjзoÕ±oÕ¶kѶpÖ²pÖ¶jвoÕ¶oÕ²jжpÖ¶pÖ±jзoÕ±oÕ¶jжpÖ²pÖ¶jвoÕ¶mÓ²jдrضnÔ±kÑ·oÕ±mÓ¶lÒ¶q×±nÔ·lÒ²oÕ¶mÓ²lÒ´rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´lÒ´rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ²rضlÒ²mÓ·oÕ±lÒ¶nÔ¶rرjзmÓ±oÕ¶jдpÖ²rضjвmÓ¶oÕ²jжpÖ¶pÖ±jзbݲ…››���������������������������������������������›ØÅXѪpÚ³nÔ²lÒ³pÖ°lÒ²nÔ²q×°mÓ³nÔ²pÖ²lÒ²mÓ²qײlÒ²nÔ³pÖ°lÒ²mÓ²q×°lÒ³nÔ²pÖ²lÒ²oÕ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³nÔ°nÔ²lÒ²oÕ²qײlÒ²nÔ²nÔ°lÒ²qײoÕ°lÒ³nÔ°nÔ²lÒ²q×°oÕ²lÒ²pÖ²nÔ²lÒ²qײoÕ°lÒ³pÖ°nÔ²lÒ²q×°oÕ³lÒ²pÖ²nÔ²lÒ²qײmÓ²lÒ³pÖ°nÔ²mÓ²q×°mÓ³lÒ²pÖ²lÒ²nÔ²qײnÔ²lÒ³pÖ°lÒ²mÓ²q×°lÒ³nÔ²pÖ²lÒ²mÓ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³nÔ°pÖ²lÒ²oÕ²qײlÒ²nÔ²pÖ°lÒ²oÕ²q×°lÒ³bݱ…›—������������������������������������������ÇÖÏXÓ§lÖ°wݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´wݲpÖµtÚ²tÚ¶pÖ²uÛ²uÛ¶pÖ°tÚ´tÚ²pÖ²uÛ´uÛ²pÖµtÚ²tÚ´pÖ´wݲuÛ´pÖ°tÚ¶tÚ²oÕ²wݶsÙ²pÖµvܲrØ´pÖ´wݲsÙ´pÖ°vܶrزpÖ²wݶsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rØ´vܲpÖ´sÙ´wݲpÖµrزtÚ¶pÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´uÛ²pÖµhⳆ™���������������������������������������ùîñPßdÒ±lÒ´q×´lÒ²lÒ¶nÔ°lÒ¶lÒ¶q×°lÒ¶lÒ²nÔ´lÒ´mÓ´q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°lÒ¶lÒ²nÔ´jдmÓ²q×¶jвlÒ¶nÔ°jжoÕ¶oÕ°jжnÔ°nÔ¶jжoÕ²oÕ¶jвnÔ¶nÔ²jжoÕ¶oÕ°jжnÔ°nÔ¶jжoÕ°oÕ¶jвnÔ¶nÔ²jжq×¶mÓ°jжnÔ°lÒ¶lÒ¶q×°mÓ¶lÒ²nÔ´lÒ²lÒ´q×´mÓ²lÒ¶nÔ°lÒ¶lÒ¶q×°lÒ¶lÒ²nÔ´lÒ´lÒ´q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°lÒ¶lÒ²nÔ´lÒ´mÓ²q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°jжlÒ°nÔ¶jжnÔ²oÕ¶jвnÔ¶nÔ°jжoÕ¶oÕ°jжbݱ…››���������������������������������������_¸šaÔ¬mÔ²lÒ²rذnÔ²mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²pÖ°rرlÒ²oÕ±oÕ°lÒ²pÖ°rذlÒ³oÕ°oÕ°lÒ²pÖ°rرlÒ²oÕ±oÕ°lÒ²pÖ°pÖ°lÒ³oÕ°oÕ°lÒ²rذpÖ±lÒ²oÕ±oÕ°lÒ²rذpÖ°mÓ³oÕ°oÕ°lÒ²rذnÔ²mÓ²oÕ±mÓ²lÒ²rذnÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²nÔ²rذnÔ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²nÔ²rرlÒ²mÓ²oÕ°lÒ²pÖ²rذlÒ³oÕ°oÕ°mÓ²pÖ°rرlÒ²oÕ±oÕ°lÒ²pÖ°rذlÒ³bݱ…›—������������������������������������º®[Ó©oØ·oÕ³nÔ³vܶpÖ±oÕ¶qײoÕ¶pÖ¶vܲnÔ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ´pÖ¶vܲnÔµoÕ±q×¶nÔµrسuÛ·nÔ±oÕ·q׳nÔµrضtÚ³nÔµq׳q×¶oÕµrسtÚ·nÔ±q×·q׳nÔµtÚ¶tÚ³nÔµq׳q×¶nÔµtÚ³rØ·oÕ±q×·oÕ³nÔµtÚ¶rسnÔµq׳oÕ¶nÔµvܲrضoÕ±q×¶oÕ²nÔ´vܶpÖ±oÕµqײoÕ¶nÔ¶vܲpÖ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ¶pÖ¶vܲnÔµoÕ±q×¶oÕ´pÖ²vܶnÔ±oÕ¶qײnÔ´rضuÛ²nÔµoÕ³q×¶nÔµrسtÚ·nÔ±q×·q׳oÕµrضtÚ³nÔµdß³…››���������������������������������ÞãÞSѨfѱoÕ°lÒ²lÒ²oÕ°lÒ²kѲoÕ°kѲlÒ²oÕ°lÒ²lÒ²oÕ°kѲlÒ²pÖ±jвmÓ²nÔ°kѲlÒ²pÖ°jгmÓ²nÔ°jвnÔ°oÕ±jвmÓ±nÔ°jвnÔ°pÖ°jвmÓ°mÓ°jвnÔ°pÖ±jвmÓ±mÓ°jвoÕ°nÔ°jвmÓ°mÓ°jвpÖ°nÔ±jвmÓ±mÓ°jвpÖ°nÔ°jвnÔ°mÓ°jвoÕ°mÓ²jвnÔ±mÓ²jвpÖ°lÒ²kѳnÔ°lÒ²lÒ²pÖ°lÒ²kѲoÕ°kѲlÒ²oÕ°lÒ²lÒ²oÕ°kѲlÒ²pÖ°lÒ³lÒ²nÔ°kѲlÒ²pÖ±jвmÓ²nÔ°jвnÔ²oÕ°jвmÓ°nÔ°jвnÔ°pÖ±jвmÓ±mÓ°jвnÔ°pÖ°jв`Û±…›—���������������������������������L­‹eÖ³nÔ°rضnÔ´oÕ´uÛ¶oÕ°nÔ¶rزnÔ¶oÕ¶uÛ²oÕ¶nÔ°rضnÔ´oÕ²uÛ¶mÓ°pÖ¶rزnÔ¶oÕ¶uÛ²mÓ¶pÖ°rضnÔ´qײsÙ¶mÓ°pÖ¶rزnÔ¶q×¶sÙ²mÓ¶pÖ²rضnÔ´qײsÙ¶nÔ°pÖ¶pÖ²nÔ´sÙ¶qײnÔ¶rزpÖ¶mÓ¶sÙ²q×¶nÔ°rضpÖ²mÓ´sÙ¶qײnÔ¶rزpÖ¶mÓ¶uÛ²q×¶nÔ°rضpÖ²mÓ´uÛ¶oÕ°nÔ¶rزpÖ¶mÓ¶uÛ²oÕ¶nÔ°rضnÔ´oÕ´uÛ¶oÕ°nÔ¶rزnÔ¶oÕ¶uÛ²mÓ¶pÖ°rضnÔ´oÕ²uÛ¶mÓ°pÖ¶rزnÔ¶q×¶sÙ²nÔ¶pÖ²rضnÔ´qײsÙ¶mÓ°pÖ¶rزnÔ¶q×¶sÙ²nÔ¶dÞ³…š������������������������������ Å¿cÜ«sÛ·pÖ°vܶqײqײwݶq×°rضvܲrضq×¶wݲq×¶q×°vܶpÖ²sÙ²wݶq×°rضuÛ²pÖ´sÙ¶wݲoÕ´rذuÛ¶oÕ´sÙ²wݶoÕ°tÚ¶tÚ²oÕ´uÛ¶wݲoÕ´tÚ²tÚ¶pÖ´uÛ²uÛ¶oÕ°tÚ¶tÚ²oÕ´uÛ¶uÛ²pÖ´tÚ²tÚ¶oÕ´wݲuÛ¶pÖ°tÚ¶tÚ²oÕ´wݶsÙ²oÕ´uÛ²rضoÕ´wݲsÙ¶oÕ°uÛ¶rزoÕ´wݶsÙ°pÖ´uÛ²q×¶q×¶wݲq×¶rذvܶrزqײwݶq×°q×¶uÛ²rضq×¶wݲq×´q×°uÛ¶pÖ´sÙ²wݶoÕ°rضuÛ²oÕ´sÙ¶wݲoÕ´rزtÚ¶pÖ´sÙ²wݶoÕ°tÚ¶tÚ²pÖ´uÛ¶uÛ²oÕ´hⳆš������������������������������G¶“iׯlÒ²jвnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ±jвlÒ²nÔ°jвlÒ²oÕ°jгlÒ²nÔ°jвmÓ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°jвlÒ°lÒ°jвmÓ°oÕ±jвlÒ±lÒ°jвoÕ°mÓ°jвlÒ°lÒ°jвoÕ°mÓ±jвlÒ±lÒ°jвoÕ°mÓ°jвnÔ°lÒ°jвoÕ°mÓ²jвnÔ±lÒ²jвoÕ°lÒ²jгnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ³lÒ²nÔ°jвlÒ²oÕ±jвlÒ²nÔ°jвmÓ²oÕ°jвlÒ°nÔ°jвmÓ°oÕ±jвlÒ±lÒ°jвmÓ°oÕ°jв`Û±…›—���������������������������¶¦]Ó°tÛ³pÖ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײoÕ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·q׳lÒ´rضtÚ²lÒ¶oÕ²oÕ¶mÓ´rسrØ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶oÕ²oÕ¶mÓ´rسrØ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ²mÓ¶qײoÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ±mÓ·qײoÕ¶nÔ¶tÚ²nÔ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײmÓ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ¶oÕ²q×¶mÓ´pÖ³tÚ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶cݳ…››������������������������ÿùþGÙjÖ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°nÔ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°qײmÓ°pÖ²tÚ²lÒ°oÕ²qײlÒ°rزtÚ²lÒ±oÕ²qײmÓ°rزtÚ²lÒ°qײqײmÓ°rزrزmÓ±qײoÕ²mÓ°tÚ²rزmÓ°qײoÕ²lÒ°tÚ²rزmÓ±qײoÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°nÔ°tÚ²pÖ°oÕ±qײoÕ°nÔ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°pÖ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²qײmÓ°rزtÚ²lÒ°oÕ²qײmÓ°rزtÚ²mÓ±cݳ…›•������������������������—¼¯[Ò°jÑ·pÖ°lÒ¶jвnÔ´lÒ´lÒ´pÖ´lÒ²jзnÔ±jжlÒ¶pÖ±lÒ·lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжlÒ¶pÖ°jзlÒ²nÔ´jжnÔ²pÖ´jвlÒ¶nÔ°jжnÔ¶oÕ°jжmÓ°mÓ¶jжnÔ²pÖ¶jвmÓ¶mÓ²jжpÖ¶nÔ°jжmÓ°mÓ¶jжoÕ°nÔ¶jвmÓ´mÓ²jжoÕ´nÔ°jжnÔ°lÒ¶jжpÖ°nÔ¶jвnÔµlÒ²jдpÖ´lÒ²jзnÔ°lÒ¶lÒ¶oÕ±lÒ·jвnÔ´jдlÒ´pÖ´lÒ²lÒ·nÔ±jжlÒ¶oÕ±lÒ·lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжnÔ¶pÖ°jжlÒ°nÔ´jжnÔ²oÕ´jвmÓ¶mÓ°jжnÔ¶oÕ°jжaÛ±…››������������������������KÁ•j׳oÕ²uÛ²q×´pÖ°tÚ´pÖ²oÕ²uÛ´oÕ°pÖ³tÚ²pÖ²qײuÛ²oÕ³pÖ°tÚ´pÖ²qײuÛ´oÕ°pÖ´tÚ²pÖ²q×´uÛ²oÕ³rذtÚ´nÔ²qײuÛ´nÔ°rØ´tÚ²nÔ²sÙ´uÛ²nÔ³rزrØ´nÔ²sÙ²sÙ´nÔ°rØ´rزnÔ²sÙ´sÙ²nÔ³rزrØ´nÔ²uÛ²sÙ´nÔ°tÚ´rزnÔ²uÛ´sÙ²nÔ³tÚ²rØ´nÔ²uÛ²q×´pÖ°tÚ´pÖ²oÕ²uÛ´q×°pÖ³tÚ²pÖ´oÕ²uÛ²q׳pÖ°tÚ´pÖ²oÕ²uÛ´oÕ°pÖ³tÚ²pÖ²qײuÛ²oÕ³pÖ°tÚ´pÖ²qײuÛ´oÕ°rØ´tÚ²nÔ²q×´uÛ²nÔ³rزtÚ´nÔ²sÙ²uÛ´nÔ°rØ´tÚ²nÔ²sÙ´uÛ²nÔ³fà³…—���������������������²Ä¿^تp×µoÕ²uÛ²q×´pÖ°tÚ´pÖ²oÕ²uÛ´oÕ°pÖ³tÚ²pÖ²oÕ²uÛ²oÕ³pÖ°tÚ´pÖ²qײuÛ´oÕ°pÖ´tÚ²nÔ²q×´uÛ²nÔ³pÖ°rØ´nÔ²qײuÛ´nÔ°rØ´rزnÔ²sÙ´uÛ²nÔ³rزrØ´nÔ²sÙ²sÙ´nÔ°rØ´rزnÔ²sÙ´sÙ²nÔ³rزrØ´nÔ²uÛ²sÙ´nÔ°rØ´rزnÔ²uÛ´qײnÔ³rزpÖ´nÔ²uÛ²q×´nÔ°tÚ´pÖ²oÕ²uÛ´q×°pÖ³tÚ²pÖ´oÕ²uÛ²oÕ³pÖ°tÚ´pÖ²oÕ²uÛ´oÕ°pÖ³tÚ²pÖ²qײuÛ²oÕ³pÖ°tÚ´nÔ²qײuÛ´nÔ°pÖ´tÚ²nÔ²q×´uÛ²nÔ³pÖ²rØ´nÔ²qײuÛ´nÔ°rØ´rزnÔ²sÙ´sÙ²nÔ³fà³…—���������������������Y»žfÕ®lÒ¶jжpÖ°lÒ¶jвnÔ´lÒ´lÒ´pÖ´lÒ²jзnÔ±jжlÒ¶pÖ±lÒ·lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжlÒ¶pÖ°jзmÓ²oÕ´jжnÔ²pÖ´jвmÓ¶nÔ°jжnÔ¶oÕ°jжmÓ°mÓ¶jжnÔ²pÖ¶jвmÓ¶mÓ²jжpÖ¶nÔ°jжmÓ°mÓ¶jжoÕ°nÔ¶jвmÓ´mÓ²jжpÖ´nÔ°jжoÕ°mÓ¶jжpÖ°nÔ¶jвnÔµlÒ²jдpÖ´lÒ²jзnÔ°lÒ¶lÒ¶pÖ±lÒ·jвnÔ´jдlÒ´pÖ´lÒ²lÒ·nÔ±jжlÒ¶oÕ±lÒ·lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжnÔ¶pÖ°jжmÓ°oÕ´jжnÔ²pÖ´jвmÓ¶mÓ°jжnÔ¶pÖ°jжaÛ±…››������������������ÔÚÓRϦoײoÕ°nÔ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°nÔ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°qײmÓ°pÖ²tÚ²mÓ°oÕ²qײmÓ°rزtÚ²mÓ±oÕ²qײmÓ°rزtÚ²lÒ°qײqײmÓ°rزrزmÓ±qײoÕ²mÓ°tÚ²rزmÓ°qײoÕ²mÓ°tÚ²rزmÓ±qײoÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°nÔ°tÚ²pÖ°oÕ±qײoÕ°nÔ°tÚ²pÖ±oÕ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°pÖ°tÚ²nÔ±oÕ°qײoÕ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²qײmÓ°rزtÚ²mÓ°oÕ²qײmÓ°rزtÚ²mÓ±cݳ…›•������������������kºaÓ³qײoÕ¶lÒ¶tÚ²nÔ·mÓ±q×¶mÓ´nÔ´tÚ¶nÔ±mÓ·qײmÓ¶nÔ¶tÚ²nÔ·mÓ±q×¶mÓ´nÔ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±oÕ¶mÓ´pÖ³rØ·mÓ±oÕ·oÕ²mÓ¶pÖ¶rزmÓ¶oÕ²oÕ¶mÓ´rسrØ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶oÕ²oÕ¶mÓ¶rزpÖ·mÓ±oÕ·oÕ³mÓ´rضpÖ²mÓ¶oÕ²oÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³lÒ´tÚ¶nÔ±mÓ·qײmÓ¶nÔ¶tÚ²nÔ·mÓ±q×¶mÓ´nÔ´tÚ¶nÔ±mÓ·qײmÓ¶nÔ¶tÚ²lÒ·oÕ±q×¶mÓ´nÔ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ¶oÕ²oÕ¶mÓ´pÖ³rØ·mÓ±oÕ·oÕ²mÓ¶pÖ¶rزmÓ¶cݳ…››���������������ÿýÿKÈ gѲnÔ°lÒ²jвoÕ°lÒ²jвnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ±jвlÒ²nÔ°jвlÒ²oÕ°jгlÒ²nÔ°jвnÔ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°jвlÒ°lÒ°jвmÓ°oÕ±jвlÒ±lÒ°jвoÕ°mÓ°jвlÒ°lÒ°jвoÕ°mÓ±jвlÒ±lÒ°jвoÕ°nÔ°jвnÔ°lÒ°jвoÕ°mÓ²jвnÔ±lÒ²jвpÖ°lÒ²jгnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ³lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвmÓ²oÕ°jвlÒ°nÔ°jвnÔ°oÕ±jвlÒ±lÒ°jвnÔ°oÕ°jв`Û±…›—���������������¶ÑÇ]צpÖµvܲrضq×´wݲsÙ¶pÖ°vܶrزqײwݶq×°rضvܲrضq×¶wݲq×¶rذvܶpÖ²sÙ²wݶq×°rضvܲpÖ´sÙ¶wݲpÖ´rذvܶpÖ´sÙ²wݶpÖ°tÚ¶tÚ²pÖ´uÛ¶wݲpÖµtÚ²tÚ¶pÖ´uÛ²uÛ¶pÖ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÚ²tÚ¶pÖ´wݲuÛ¶pÖ°tÚ¶tÚ²oÕ´wݶsÙ²pÖµvܲrضpÖ´wݲsÙ¶pÖ°vܶrزpÖ´wݶsÙ°pÖ´vܲrضq×¶wݲq×¶rذvܶrزqײwݶq×°rضvܲrضq×¶wݲq×´rذvܶpÖ´sÙ²wݶpÖ°rضvܲpÖ´sÙ¶wݲpÖµrزtÚ¶pÖ´sÙ²wݶoÕ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµhⳆ›���������������tÆ®fÖ¯nÔ¶pÖ°nÔ¶nÔ¶sÙ°oÕ¶nÔ²pÖ¶nÔ´mÓ´sÙ¶nÔ²nÔ¶pÖ°nÔ¶nÔ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ´sÙ¶nÔ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ²pÖ¶lÒ´oÕ²sÙ¶lÒ²nÔ¶pÖ²lÒ¶q×¶q×°lÒ¶pÖ°pÖ¶lÒ´qײq×¶lÒ²pÖ¶pÖ²lÒ¶q×¶q×°lÒ¶pÖ°pÖ¶lÒ¶qײq×¶lÒ²pÖ¶pÖ²lÒ´sÙ¶oÕ°lÒ¶pÖ°nÔ¶lÒ¶sÙ°oÕ¶lÒ²pÖ¶nÔ²nÔ´sÙ¶oÕ²nÔ¶pÖ°nÔ¶mÓ¶sÙ°nÔ¶nÔ²pÖ¶nÔ´nÔ´sÙ¶mÓ²nÔ¶pÖ°nÔ¶oÕ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ²sÙ¶nÔ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ°pÖ¶lÒ´oÕ²sÙ¶lÒ²pÖ¶pÖ²lÒ¶q×¶q×°lÒ¶dß±…››������������ÿäîGÇ™iÓ²kѳoÕ°mÓ²jвpÖ°lÒ²kѲoÕ°mÓ²lÒ²pÖ°lÒ²kѲoÕ°kѲlÒ²pÖ°lÒ²mÓ²oÕ°kѲlÒ²pÖ°jвmÓ²oÕ°kѲlÒ²pÖ°jгmÓ²oÕ°kѲnÔ°pÖ±jвmÓ±oÕ°jвnÔ°pÖ°jгmÓ°mÓ°kѲnÔ°pÖ±jвmÓ±mÓ°jвpÖ°nÔ°jгmÓ°mÓ°jвpÖ°nÔ±kѲmÓ±mÓ°jвpÖ°nÔ°kѳoÕ°mÓ°jвpÖ°nÔ²kѲoÕ°mÓ²jвpÖ°lÒ²kѳoÕ°mÓ²lÒ²pÖ°lÒ²kѲoÕ°kѲlÒ²pÖ°lÒ²mÓ²oÕ°kѲlÒ²pÖ°lÒ³mÓ²oÕ°kѲlÒ²pÖ°jвmÓ²oÕ°kѲnÔ²pÖ°jгmÓ°oÕ°kѲnÔ°pÖ±jвmÓ±mÓ°kѲnÔ°pÖ°jгaÛ±…›—������������ºÍÊ^Ú­p×±oÕµqײoÕ¶nÔ´vܲpÖ¶oÕ±q×¶oÕ³nÔ³vܶpÖ±oÕ¶qײoÕ¶pÖ¶vܲnÔ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ´pÖ¶vܲnÔµoÕ±q×¶oÕµrسvÜ·nÔ±oÕ·q׳oÕµrضtÚ³nÔµq׳q×¶oÕµrسtÚ·nÔ±q×·q׳nÔµtÚ¶tÚ³oÕµq׳q×¶nÔµtÚ³rØ·oÕ±q×·oÕ³oÕµtÚ¶rسoÕµq׳oÕ¶nÔµvܲrضoÕ±q×¶oÕ²nÔ´vܶpÖ±oÕµqײoÕ¶nÔ¶vܲpÖ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ¶pÖ¶vܲnÔµoÕ±q×¶oÕ´pÖ²vܶnÔ±oÕ¶qײoÕ´rضvܲnÔµoÕ³q×¶oÕµrسtÚ·nÔ±q×·q׳oÕµrضtÚ³nÔµeß³…››������������€Ä±eØ­nÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°kѲnÔ°rرkѲmÓ±oÕ°kѲpÖ°rذjгoÕ°oÕ°kѲpÖ°pÖ±kѲoÕ±oÕ°kѲpÖ°pÖ°kѳoÕ°oÕ°kѲpÖ°pÖ±kѲoÕ±mÓ°kѲrذnÔ°kѳoÕ°mÓ°lÒ²rذnÔ²mÓ²oÕ±mÓ²lÒ²rذnÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²nÔ²rرlÒ²mÓ²oÕ°mÓ²nÔ²rذkѳmÓ°oÕ°kѲpÖ°rرkѲmÓ±oÕ°kѲpÖ°pÖ°kѳcݱ…›—������������Q´•mÚ´mÓ²lÒ¶nÔ°lÒ¶lÒ¶q×°mÓ¶lÒ²nÔ´lÒ´lÒ´q×´lÒ²lÒ¶nÔ°lÒ¶lÒ¶q×°lÒ¶lÒ²nÔ´lÒ´mÓ´q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°lÒ¶lÒ²nÔ´jдnÔ²q×¶jвmÓ¶nÔ°jжoÕ¶oÕ°jжnÔ°nÔ¶jжpÖ²pÖ¶jвnÔ¶nÔ²jжpÖ¶pÖ°jжnÔ°nÔ¶jжoÕ°oÕ¶jвnÔ¶nÔ²jжq×¶nÔ°jжnÔ°lÒ¶lÒ¶q×°mÓ¶lÒ²nÔ´lÒ²lÒ´q×´mÓ²lÒ¶nÔ°lÒ¶lÒ¶q×°lÒ¶lÒ²nÔ´lÒ´lÒ´q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°lÒ¶lÒ²nÔ´lÒ´mÓ²q×´lÒ²lÒ¶nÔ°lÒ¶mÓ¶q×°jжmÓ°oÕ¶jжnÔ²pÖ¶jвnÔ¶nÔ°jжpÖ¶pÖ°jжbݱ…››������������A»v߸sÙ°pÖ´vܲrØ´q×´wݲsÙ´pÖ°vܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ¶wݲpÖµtÚ²tÚ¶pÖ´uÛ²uÛ¶pÖ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÛ³sÜ·lÚµlß°bÛ¯VѤVÔ¨SÓ¢LΡOÓ¢JÍœFÊžLÏœHÌžFÉžMÑœJÍžFÉšLÏ HÌœFÉœMÑ JÍšFÉžLÏœHËžHËžMÑœHËžHËšLÏ HËœHËœMÑ HËšHËžLÏœHËžHËžMÑœHËžHËšLÏ FÉœJÍœMÑ FÉšHÌžLÏœFÉžJÍžMÑœFÉžHÌœJΠFÊœJÍœNÑ FÉšJÍ JÍœFÉžLÏ LÏœFÉžBÓo’Š���������ÚÚØPϦrسmÓ²lÒ³pÖ°nÔ²lÒ²q×°mÓ³lÒ²pÖ²nÔ²mÓ²qײnÔ²lÒ³pÖ°lÒ²nÔ²q×°mÓ³nÔ²pÖ²lÒ²mÓ²qײlÒ²nÔ³pÖ°lÒ²mÓ²q×°lÒ³nÔ²pÖ²lÒ²oÕ²qײlÒ²nÔ³pÖ°lÒ²oÕ²q×°lÒ³nÔ°nÔ²lÒ²oÕ²qײlÒ²nÔ²nÔ°lÒ²rÙ³mزcÖ²YÕªLÁ™J®x«™³ØÎÌÕÕñúøâãåÿçï���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������¨ÊÁYÒ­rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´lÒ´rضlÒ²mÓ·oÕ±mÓ¶lÒ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ´rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶kÑ´nÔ²rضjвmÓ¶oÕ±jжpÖ¶rرjзoÕ±oÕ¶kѶpÖ²pÖ¶jвoÕ¶o×´eÔ¶_زD¹h­˜­¶´ÿòü������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������|½§dÖ®vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°rزvܲnÔ°oÕ²qײoÕ°rزtÚ²nÔ±qײqײnÔ°rزtÚ²nÕ°nÚ³bÙ¯<§€®À·ÿòú���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������L°ŒeÒ´rØ´nÔ²kÑ·oÕ±mÓ¶lÒ¶q×±lÒ·lÒ²oÕ´mÓ´lÒ´rØ´lÒ²mÓ·oÕ±mÓ¶lÒ¶rرlÒ·mÓ²oÕ´lÒ´lÒ´q×´lÒ²mÓ·oÕ±kѶnÔ¶rرjзmÓ²oÕ´kÑ´nÔ²pÖ¶jвmÓ¶oÕ±jжnÔ¶pÖ±jзmÓ±oÕ¶jжpÖ²p×·cÓ²U̦p ‘ÿøÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ýýýXÒ©kÔ´sÙ²oÕ²nÔ³pÖ°nÔ²mÓ²sÙ°oÕ³nÔ²pÖ²nÔ²mÓ²sÙ²mÓ²nÔ³pÖ°nÔ²mÓ²sÙ°mÓ³nÔ²pÖ²nÔ²oÕ²sÙ²mÓ²nÔ³pÖ°lÒ²oÕ²sÙ°lÒ³nÔ²pÖ²lÒ²oÕ²sÙ²lÒ²nÔ³pÖ°lÒ²qײq×°lÒ³pÖ°pÖ²lÒ²qÚ´eÚ¯J±’·¼µ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÚÚÚ@·‹p׳wݶsÙ°pÖ´vܲrØ´q×´wݲsÙ´pÖ°vܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´wݲpÖµtÚ²tÚ¶oسhÞ¯S¤‰ÿòú���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������׿àQÑ©kѶoÕ´lÒ²jжnÔ°lÒ¶jжoÕ°lÒ¶jвnÔ´lÒ´lÒ´oÕ´lÒ²jжnÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжlÒ¶oÕ°jжlÒ²nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°mÓ·`Ò´Z®”ÿòø���������������������������������������������������������������������������������îâæêÔÜòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàòÖàäÑØþþþ¸ÛÑWѦlÒ°tÚ²pÖ°mÓ±qײoÕ°lÒ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²lÒ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°oÕ²mÓ°pÖ²rزlÒ°oÕ²oÕ²mÓ°pÖ²rزlÒ±oÕ²iÖ±H¾”ßÝÛ������������������������������������������������������������������������������������±©1¼ˆB¾’Aº’C¼‘A»‘Aº‘FÀ‘B¼’Aº‘C¼’Aº’Bº’FÀ’Bº‘A»’C¼‘Aº‘B¼‘FÀ‘Aº’A»’C¼’Aº‘B¼‘FÀ’Aº‘A»’C¼‘Aº‘D¼‘FÀ‘A¸’C»‘C½‘A¸‘D¾‘FÀ’A¸‘C»’C¼‘A¸‘D¾‘F¾‘A¸’C¼‘C¼‘+´‡ÒÕÔ«âÎ_Ô­nÔ´vܶpÖ±oÕµq׳oÕ¶nÔ´vܳpÖ·oÕ±q×·oÕ³nÔ³uÛ·pÖ±oÕ·qײoÕ¶pÖ¶uÛ²nÔ·oÕ±q×·oÕ³pÖ³vÜ·nÔ±oÕ·q׳oÕ´pÖ¶vܳnÔµoÕ±q×¶nÔ´rسuÛ·nÔ±oÕ·q׳nÔ´rضtÚ³nÔµpس\Ö°¯Ç»������������������������������������������������������������������������������������������N·˜kܲqÙ¸sÛ¶qÙºpغxà¶rÚºqÙ´sÛºqÙ¶rÚ¶xàºpØ´qÙºsÛ¶qÙºrÚºxà¶pظqÙ´sÛºqÙ¸rÚ¶xàºpÙ´qÙºsÛ¶qÙ¸tܺxà¶pÙ¸qÙ¶sÛºqÙ¸tܶvÞºpÙ´sÛºsÛ¶qÙ¸tܺvÞ¶pÙ¸sÛ¶sÛºYÚ±¾ÐȎȳbÔ°jвpÖ°lÒ²jгnÔ°mÓ²jвpÖ°lÒ²kѲnÔ±lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°kѲlÒ²pÖ±jвmÓ²nÔ°jвlÒ²pÖ°jгmÓ²nÔ°jвmÓ°oÕ±jвmÓ±nÔ°jвnÔ°pÖ°jвeÔ¯W¶”���������������������������������������������������������������������������������������������ºÐÈWѪjѳnÔ°lÒ²lÒ²oÕ°lÒ²kѲoÕ°jвlÒ²oÕ°lÒ²lÒ²nÔ°kѲlÒ²oÕ°lÒ³lÒ²nÔ°jвlÒ²pÖ±jвmÓ²nÔ°jвmÓ²oÕ°jвmÓ°nÔ°jвnÔ°pÖ±jвmÓ±mÓ°jвnÔ°pÖ°jвlÒ°lÒ°]سªÇ»„ʰhرmÓ´uÛ¶q×°nÔ¶rزpÖ¶mÓ¶uÛ²oÕ¶nÔ°rضpÖ²oÕ´uÛ¶oÕ°pÖ¶rزpÖ¶oÕ¶uÛ²oÕ¶pÖ°rضnÔ´oÕ²uÛ¶mÓ°pÖ¶rزnÔ¶q×¶uÛ²mÓ¶pÖ°rضnÔ´qײuÛ¶nÔ°pÖ¶rزnÔ´q×¶sÙ²nÕ·\׬±À¾������������������������������������������������������������������������������������������������MÅ›jÕµrزpÖ¶oÕ¶uÛ²oÕ¶nÔ°rضpÖ´oÕ´uÛ¶oÕ°pÖ¶rزnÔ¶oÕ¶uÛ²oÕ¶pÖ°rضnÔ´qײuÛ¶mÓ°pÖ¶rزnÔ¶q×¶uÛ²mÓ¶pÖ²rضnÔ´qײsÙ¶nÔ°pÖ¶rزnÔ´q×¶sÙ²nÔ¶rزrضhߺpŸŽßÅjدoÕ´wݶq×°pÖ¶tÚ²rضoÕ¶wݲq×¶pÖ°tÚ¶pÖ²oÕ´wݶq×°pÖ¶tÚ²pÖ¶q×¶wݲoÕ¶pÖ°tÚ¶pÖ´qײwݶoÕ°rضtÚ²pÖ¶q×¶wݲoÕ¶rذtÚ¶pÖ´sÙ²uÛ¶oÕ°rضtÚ²pÖ´sÙ¶uÛ²nÚ¶GµŽÿüÿ������������������������������������������������������������������������������������������������ŠÊ¯dÕ²tÚ²pÖ¶oÕ¶wݲq×¶pÖ°tÚ¶pÖ´q×´wݶq×°pÖ¶tÚ²pÖ¶q×¶wݲoÕ¶rذtÚ¶pÖ´qײwݶoÕ°rضtÚ²pÖ¶sÙ¶wݲoÕ´rزtÚ¶pÖ´sÙ²uÛ¶pÖ°rضtÚ²pÖ´sÙ¶uÛ²oÕ´rزtÚ¶rä¿q¯–ÝÃcЭjвpÖ°lÒ²jвnÔ°lÒ²jвoÕ°lÒ²jвnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ±jвlÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвnÔ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°cÕ³dŸ‹���������������������������������������������������������������������������������������������������ÀáÒS̨nÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвmÓ²oÕ°jвlÒ°nÔ°jвnÔ°oÕ±jвmÓ±mÓ°jвnÔ°oÕ°jвmÓ°mÓ°oݽX©‹ŽÞÅk׳lÒ´tÚ¶pÖ±mÓ·qײoÕ¶nÔ¶tÚ²pÖ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײoÕ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·q׳lÒ´rضtÚ²]×´›¸°���������������������������������������������������������������������������������������������������ùðòL˧pײoÕ¶nÔ¶tÚ²nÔ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײmÓ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ¶oÕ²q×¶mÓ´pÖ³tÚ·lÒ±oÕ·oÕ³mÓ´rضrزmÓ¶oÕ²oÕ¶rܽYª]®’oÚ´lÒ°tÚ²pÖ°mÓ±qײoÕ°nÔ°tÚ²pÖ±mÓ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײoÕ°nÔ°tÚ²nÔ±oÕ°qײmÓ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°qײmÓ°pÖ²tÚ²lÒ°oÕ²qײlÒ°rزtÚ²Uժ̶¿������������������������������������������������������������������������������������������������������PÄnÖ±oÕ°nÔ°tÚ²nÔ±mÓ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײmÓ°nÔ°tÚ²nÔ±oÕ°qײmÓ°pÖ°tÚ²lÒ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²qײmÓ°pÖ²tÚ²lÒ°oÕ²oÕ²mÓ°rزrزmÓ±oÕ²oÕ²pØ´mѯdÂ¥oØ·jдpÖ´lÒ²jзnÔ°lÒ¶jжoÕ°lÒ¶jвnÔ´lÒ´lÒ´oÕ´lÒ²jжnÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжlÒ¶pÖ°jзlÒ²nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶qÙ³MÒ®ÕÁÈ������������������������������������������������������������������������������������������������������_ѯiÔ®lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´oÕ´lÒ²lÒ¶nÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°nÔ´jжnÔ²oÕ´jвmÓ¶mÓ°jжnÔ¶oÕ°jжmÓ°mÓ¶kѶnÔ³rØ´sÚ´oÕ²wÝ´q×°pÖ³tÚ²rØ´oÕ´wݲq×´pÖ°tÚ´pÖ²oÕ²wÝ´q×°pÖ´tÚ²pÖ´q×´wݲoÕ´pÖ°tÚ´pÖ²qײwÝ´oÕ°rØ´tÚ²pÖ²q×´wݲoÕ³rذtÚ´pÖ²sÙ²uÛ´pÖ°rØ´tÚ²pÖ²sÙ´xâ¸/˜u���������������������������������������������������������������������������������������������������������vË®j×­pÖ´oÕ´wݲq×´pÖ°tÚ´pÖ²qײwÝ´q×°pÖ´tÚ²pÖ´q×´wݲoÕ´rذtÚ´pÖ²qײwÝ´oÕ°rØ´tÚ²pÖ²sÙ´wݲoÕ³rزtÚ´pÖ²sÙ²uÛ´pÖ°rØ´tÚ²pÖ²sÙ´uÛ²pÖ³rزtÚ´pÖ²q׳q׳pÖ²mÓ²uÛ²oÕ°nÔ³rزpÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²qײsÙ³nÔ°pÖ³rزnÔ²qײwâ¹,”p���������������������������������������������������������������������������������������������������������“ßÇeÕ¬pÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²rزnÔ²qײsÙ³nÔ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²pÖ²nÔ²pÖ³oÕ´mÓ³jдpÖµlÒ³kÑ·nÔ±mÓ¶jжpÖ±lÒ·kѳoÕµlÒ´lÒ´oÕµlÒ³kÑ·oÕ±kѶlÒ¶oÕ±lÒ·lÒ³oÕµkÑ´lÒ´pÖµjгmÓ·nÔ±kѶlÒ¶pÖ±jзmÓ³nÔ´jжnÔ²oÕµjвmÓ¶nÔ°jжnÔ¶rÛµ8®ÿôý������������������������������������������������������������������������������������������������������ÜÉ`ЩlÒ¶lÒ¶pÖ±lÒ·kѳoÕµkÑ´lÒ´oÕµlÒ³lÒ·oÕ±kѶlÒ¶pÖ±lÒ·lÒ³nÔµkÑ´lÒ´pÖµjгmÓ·nÔ±jжnÔ¶oÕ°jжmÓ±nÔ´jжnÔ²pÖµjвmÓ¶mÓ°jжnÔ¶pÖ°jжmÓ°mÓ¶kѶnÔ³pÖ³qسnÔ°vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײnÔ°rزuÛ²nÔ°oÕ²qײnÔ°rزuÜ´TÖ©Å®´������������������������������������������������������������������������������������������������������•âÆeÔ­oÕ°nÔ°vܲpÖ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײnÔ°rزuÛ²nÔ±oÕ²qײnÔ°rزtÚ²nÔ°qײqײoÕ°rزtÚ²nÔ±qײqײoÕ°pÖ³]´™n×¶lÒ´rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´lÒ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´pÖ³rضlÒ²oÕ¶oÕ²mÓ¶pÖ¶rرXÖ²¸»º������������������������������������������������������������������������������������������������������\£hÔ®mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´nÔ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±mÓ¶pÖ¶rرlÒ·oÕ±oÕ¶mÓ´pÖ³rضlÒ²oÕ¶oÕ²mÓ¶pÖ¶rرlÒ·oÕ±oÕ¶nÕ¶oÕ³zʰjÖ´jвpÖ°lÒ²jгnÔ°lÒ²jвpÖ°lÒ³jвnÔ°lÒ²lÒ²pÖ°lÒ²jгnÔ°jвlÒ²pÖ°lÒ³lÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвlÒ²pÖ°jгlÒ²nÔ°jвnÔ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°]Ô±”®¦������������������������������������������������������������������������������������������������������JÁ›lÕ°lÒ²lÒ²pÖ°lÒ³jвnÔ°jвlÒ²oÕ°lÒ²lÒ³nÔ°jвlÒ²pÖ°lÒ³lÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвnÔ²oÕ°jгlÒ°nÔ°jвnÔ°oÕ±jвlÒ±lÒ°jвnÔ°oÕ°jгlÒ°lÒ°n×·eÁ¢àÅkدpÖ²wݶsÙ°pÖ´vܲrضq×´wݲsÙ´pÖ°vܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rضvܲpÖ´sÙ¶wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ¶tÚ²pÖ´uÛ¶wݲkÚ¶Sµ���������������������������������������������������������������������������������������������������ðïîPϦuܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rضvܲpÖ´sÙ¶wݲpÖµrزtÚ¶pÖ´sÙ²wݶoÕ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÚ²tÚ¶uá½\¬ŽŽÞÅfÔ¯lÒ´sÙ¶oÕ²nÔ¶pÖ°nÔ¶mÓ¶sÙ°oÕ¶nÔ²pÖ¶nÔ´mÓ´sÙ¶mÓ²nÔ¶pÖ°nÔ¶mÓ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ´sÙ¶mÓ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ²pÖ¶lÒ´oÕ²sÙ¶lÒ²nÔ¶pÖ²lÒ¶q×¶q×°lÕ¸H¼“ÿåì������������������������������������������������������������������������������������������������ÂÜÎZÑ®pÖ°nÔ¶mÓ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´mÓ´sÙ¶mÓ²nÔ¶pÖ°nÔ¶oÕ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ²sÙ¶nÔ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ°pÖ¶lÒ´oÕ²sÙ¶lÒ²pÖ¶pÖ²lÒ¶q×¶q×°lÒ¶pÖ°pÖ¶sßÁZªƒÊ²eÕ±jвrذnÔ²kѳoÕ°mÓ²lÒ²q×°lÒ²lÒ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°lÒ²lÒ²q×°lÒ²mÓ²oÕ°kѲnÔ²rذjгmÓ²oÕ°kѲnÔ°pÖ±jвmÓ±oÕ°jвnÔ°pÖ°kÒ´`Ö¯bž‰������������������������������������������������������������������������������������������������_»žaаoÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°lÒ²lÒ²q×°lÒ³mÓ²oÕ°kѲnÔ²q×°jвmÓ²oÕ°kѲnÔ²q×°jгmÓ°oÕ°kѲnÔ°pÖ±jвmÓ±oÕ°jвnÔ°pÖ°jгmÓ°oÕ°lظZªŽÈ²e×±nÔ´vܶpÖ±oÕµqײoÕ¶nÔ´vܲpÖ¶oÕ±q×¶oÕ³nÔ³vܶpÖ±oÕ¶qײoÕ¶pÖ¶vܲnÔ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ´pÖ¶vܲnÔµoÕ±q×¶oÕµrسvÜ·nÔ±oÕ·q׳oÕµrضtÚ³nÔµoÚ´MÅüìò������������������������������������������������������������������������������������������ÝàÞRÏ¡mÖµqײoÕ¶nÔ¶vܲpÖ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ¶pÖ¶vܲnÔµoÕ±q×¶oÕ´pÖ²vܶnÔ±oÕ¶qײoÕ´rضvܲnÔµoÕ³q×¶oÕµrسtÚ·nÔ±q×·q׳oÕµrضtÚ³nÔµq׳q×¶kÛ¸áÄ¥ØÆ\Ó­lÒ²rذnÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°kѲnÔ°rرjвmÓ±oÕ°jвpÖ°rذjгoÖ±aÖ­q¦˜������������������������������������������������������������������������������������������z½¥bÔ®mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°lÒ²nÔ²rذjгmÓ°oÕ°jвpÖ°rرjвmÓ±oÕ°jвpÖ°pÖ°jгoÕ°oÕ°^Ó¯‡·¦¿ÞÓVÒ¨lÒ´q×¶mÓ²lÒ¶pÖ°nÔ¶lÒ¶q×°mÓ¶lÒ²pÖ¶nÔ´mÓ´q×¶nÔ²lÒ¶pÖ°lÒ¶nÔ¶q×°mÓ¶nÔ²pÖ¶lÒ´mÓ´q×¶lÒ²nÔ¶pÖ°lÒ¶mÓ¶q×°lÒ¶nÔ²pÖ¶lÒ´oÕ²q×¶lÒ²nÔ¶pÖ°lÒ¶oÕ¶q×°lÒ¶nÔ°l×·SÌ¨Š§š������������������������������������������������������������������������������������¾ÝØXÓ«jÔ±lÒ¶pÖ°nÔ¶mÓ¶q×°mÓ¶lÒ²pÖ¶lÒ´nÔ´q×¶nÔ²lÒ¶pÖ°lÒ¶mÓ¶q×°lÒ¶nÔ²pÖ¶lÒ´mÓ²q×¶lÒ²nÔ¶pÖ°lÒ¶oÕ¶q×°lÒ¶nÔ°pÖ¶lÒ´oÕ²q×¶lÒ²nÔ¶pÖ²lÒ¶oÕ¶q×°lÒ¶nÔ°nÔ¶ZÖ²·ÓÈÞêæPÏ¢p׳wݶsÙ°pÖ´vܲrØ´q×´wݲsÙ´pÖ°vܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ¶wݲpÖµtÚ²tÚ¶lÙµRÊçÕÚ������������������������������������������������������������������������������ûúøOÆœoܳsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rØ´vܲpÖ´sÙ´wݲpÖµrزtÚ¶pÖ²sÙ²wݶpÖ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÚ²tÚ¶TÔ©ÈÐÍçççC¼•lÔ´q×°mÓ²lÒ³nÔ°lÒ²lÒ²q×°mÓ³lÒ²nÔ°lÒ²lÒ²q×°lÒ²lÒ³nÔ°lÒ²lÒ²q×°lÒ³lÒ²nÔ°lÒ²mÓ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°lÒ³lÒ²nÔ°jвmÓ²q×°jвlÒ²nÔ°jвoÕ²oÕ°jгnÔ°nÔ°jѳgدK±¾²¶������������������������������������������������������������������������ÿøþWÊ£_ϬqرmÓ²lÒ³nÔ°lÒ²lÒ²q×°lÒ³lÒ²nÔ°lÒ²lÒ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°lÒ³lÒ²nÔ°lÒ²mÓ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°jгlÒ°nÔ°jвnÔ²oÕ°jвnÔ²nÔ°jвoÕ²oÕ°jгnÔ°oÖ´IÍ¥ìðï���Iº•iÕµrضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´lÒ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ´rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´pÖ²rضlÒ²oÕ¶oÕ²lÒ¶pÖ¶rرlÒ·oÕ±oÕ¶lÒ´pØ´jݸI®êÚÞ���������������������������������������������������������������������xÛ½\ϪkÒ´rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´nÔ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±lÒ¶pÖ¶rرlÒ·oÕ±oÕ¶mÓ´pÖ²rضlÒ²oÕ¶oÕ²lÒ¶pÖ¶rرlÒ·oÕ±oÙº1¡{÷øø���pÀ¡fÖ®vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײnÔ°rزuÛ²nÔ°oÕ²qײnÔ°rزtÚ²nÔ±qײqײoÕ°rزtÜ´eׯI»•‹©™������������������������������������������������������������ùþúeÓ«_Ñ©lÔ¯nÔ°vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײnÔ°rزuÛ²nÔ±oÕ²qײnÔ°rزtÚ²nÔ°qײqײoÕ°rزtÚ²nÔ±qײlܵU¦ˆ������˜É»XÏ­pÖµlÒ³kÑ·nÔ±mÓ¶jжpÖ±lÒ·kѳoÕµlÒ´lÒ´oÕµlÒ³kÑ·oÕ±kѶlÒ¶oÕ±lÒ·lÒ³oÕµkÑ´lÒ´pÖµjгmÓ·nÔ±kѶlÒ¶pÖ±jзmÓ³nÔ´jжnÔ²oÕµjвmÓ¶nÔ°jжnÔ¶pÖ°jжmÓ°mÓ¶jжnÔ²pÖ¶kÒ³iÖ¸VШm°Ÿùæí���������������������������������������������������’ÕÀJÆ¢^ͬmÔ´mÓ³jдpÖµlÒ³kÑ·nÔ±lÒ¶lÒ¶pÖ±lÒ·kѳoÕµkÑ´lÒ´oÕµlÒ³lÒ·oÕ±kѶlÒ¶pÖ±lÒ·lÒ³nÔµkÑ´lÒ´pÖµjгmÓ·nÔ±jжnÔ¶oÕ°jжmÓ±nÔ´jжnÔ²pÖµjвmÓ¶mÓ°jжnÔ¶pÖ°jжmÓ°`Öµˆ¸§������éèæPÏ¥uܳoÕ°nÔ³rزpÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²qײsÙ³mÓ°pÖ³rزnÔ²qײsÙ²mÓ³pÖ²rزnÔ²qײsÙ²nÔ°pÖ³mز`Ô®QÈl¯šÆÉÊ������������������������������������ÿõù¸éÜP¼›aשlÖ°nÔ°rزpÖ²mÓ²uÛ²oÕ°nÔ³rزpÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²rزnÔ²qײsÙ³mÓ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²ZÖ¬µÄ¿���������Mµsß¶sÙ°pÖ´uÛ²rØ´q×´wݲsÙ´pÖ°vܶqײqײwݶq×°rØ´vܲrØ´q×´wݲq×´q×°vܶpÖ²sÙ²wݶq×°rØ´uÛ²pÖ´sÙ´wݲoÕ´rذuÛ´oÕ²sÙ²wÝ´oÕ°tÚ´tÚ²oÕ²uÛ´wݲoÕ³tÚ²tÚ´pÖ²uÛ²uÛ´oÕ°tÚ´tÚ²pÖ³sݵjݰWÖªO±Œy¤“«µ­ÓÃÅΰ»ùÜãæÉÑϱ»ÙÃʹ¼µ¯çÎB”wYÖ§^ÔªhÔ°vݲsÙ´oÕ°uÛ¶rزoÕ²wݶsÙ°pÖ´uÛ²q×´q×´wݲq×´rذvܶrزqײwݶq×°q×´uÛ²rØ´q×´wݲq×´q×°uÛ¶pÖ²sÙ²wݶoÕ°rØ´uÛ²oÕ´sÙ´wݲoÕ³rزtÚ´pÖ²sÙ²wÝ´oÕ°tÚ´tÚ²pÖ²uÛ´uÛ²oÕ³tÜ´RÒ¤ãÖÛ���������x¼«eײlÒ²jжnÔ°lÒ¶jжoÕ°lÒ¶jвnÔ´lÒ´lÒ´oÕ´lÒ²jжnÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжlÒ¶oÕ°jжlÒ²nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°lÒ¶jжmÓ²oÕ¶jвlÒ¶lÒ²jжoÕ¶mÓ°jÒ¸iײcØ·XÕ³XÙ«RÕ­MÑ©OÓ«QÕªQÓ°YÖ­`Ö®dÒµnײlÒ¶jжoÕ°mÓ¶jвnÔ´lÒ²jдpÖ´lÒ²jжnÔ°lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´oÕ´lÒ²lÒ¶nÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°nÔ´jжnÔ²oÕ´jвlÒ¶lÒ°jжnÔ¶oÕ°jжhÖ²E£†������������¦ÍÁ_تpÖ°mÓ±qײoÕ°lÒ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²lÒ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°oÕ²mÓ°pÖ²rزmÓ°oÕ²oÕ²mÓ°pÖ²rزmÓ±oÕ²oÕ²mÓ°rزrزlÒ°oÕ²oÕ²mÓ°rزrزmÓ±oÕ²oÕ²mÓ°rزpÖ²mÓ°oÕ²oÕ²mÓ°rزpÖ²mÓ±oÕ²oÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°lÒ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²lÒ±oÕ°qײmÓ°nÔ°tÚ²lÒ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²oÕ²mÓ°pÖ²rزmÓ°oÕ²oÕ²mÓ°pÖ²rزmÓ±`×®ˆ¯¡������������îåéSÕ¨oرmÓ·qײoÕ¶nÔ¶tÚ²pÖ·oÕ±q×·oÕ³nÔ´tÚ¶nÔ±oÕ·qײoÕ¶nÔ¶tÚ²nÔ·oÕ±q×¶oÕ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·mÓ±oÕ·q׳mÓ´rضtÚ³mÓµoÕ³q×¶mÓ´rسtÚ·lÒ±q×·q׳mÓ´rضrسmÓµq׳oÕ¶mÓ´tÚ³rØ·mÓ±q×·oÕ³mÓ´tÚ¶rسmÓµq׳oÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³nÔ´tÚ¶pÖ±oÕ·qײoÕ¶nÔ¶tÚ²pÖ·oÕ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײoÕ¶pÖ¶tÚ²nÔ·oÕ±q×¶oÕ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒµoÕ³q×¶mÓ´rسtÚ·mÓ±oÕ·q׳mÓ´rضtÚ³mÕ¶SÓ¦ïðò���������������M°eÓ°jвnÔ°lÒ²jвpÖ°lÒ²jвnÔ°lÒ²lÒ²pÖ°lÒ²jвnÔ°jвlÒ²pÖ°lÒ²lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвlÒ²pÖ°jвmÓ²oÕ°jвnÔ°pÖ±jвmÓ±nÔ°jвnÔ°oÕ°jвmÓ°mÓ°jвnÔ°pÖ±jвmÓ±mÓ°jвpÖ°nÔ°jвmÓ°mÓ°jвoÕ°nÔ±jвmÓ±mÓ°jвpÖ°nÔ°jвoÕ°mÓ°jвpÖ°nÔ²jвnÔ±lÒ²jвpÖ°lÒ²jвnÔ°lÒ²lÒ²pÖ°lÒ²jвnÔ°jвlÒ²pÖ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвnÔ²pÖ°jвmÓ°oÕ°jвnÔ°pÖ±jвmÓ±mÓ°jвnÔ°pÖ°gÔ³;¡€ÿýÿ���������������¯ÛÍaתnÔ¶tÚ²pÖ¶oÕ¶uÛ²q×¶pÖ°tÚ¶pÖ´oÕ´uÛ¶oÕ°pÖ¶tÚ²pÖ¶oÕ¶uÛ²oÕ¶pÖ°tÚ¶pÖ´qײuÛ¶oÕ°pÖ¶tÚ²nÔ¶q×¶uÛ²nÔ¶pÖ°rضnÔ´qײuÛ¶nÔ°rضrزnÔ´sÙ¶uÛ²nÔ¶rزrضnÔ´sÙ²sÙ¶nÔ°rضrزnÔ´sÙ¶sÙ²nÔ¶rزrضnÔ´uÛ²sÙ¶nÔ°rضrزnÔ´uÛ¶qײnÔ¶rزpÖ¶nÔ¶uÛ²q×¶nÔ°tÚ¶pÖ²oÕ´uÛ¶q×°pÖ¶tÚ²pÖ¶oÕ¶uÛ²oÕ¶pÖ°tÚ¶pÖ´oÕ´uÛ¶oÕ°pÖ¶tÚ²pÖ¶q×¶uÛ²oÕ¶pÖ°tÚ¶nÔ´qײuÛ¶nÔ°pÖ¶tÚ²nÔ¶q×¶uÛ²nÔ¶pÖ²rضnÔ´qײuÛ¶nÔ°rضrزnÔ´sÙ¶sÙ²bص‰¼ª������������������ëäãMÍžlÕ¶tÚ²pÖ¶oÕ¶uÛ²q×¶pÖ°tÚ¶pÖ´oÕ´uÛ¶oÕ°pÖ¶tÚ²pÖ¶oÕ¶uÛ²oÕ¶pÖ°tÚ¶pÖ´qײuÛ¶oÕ°pÖ¶tÚ²nÔ¶q×¶uÛ²nÔ¶pÖ°rضnÔ´qײuÛ¶nÔ°rضrزnÔ´sÙ¶uÛ²nÔ¶rزrضnÔ´sÙ²sÙ¶nÔ°rضrزnÔ´sÙ¶sÙ²nÔ¶rزrضnÔ´uÛ²sÙ¶nÔ°rضrزnÔ´uÛ¶qײnÔ¶rزpÖ¶nÔ¶uÛ²q×¶nÔ°tÚ¶pÖ²oÕ´uÛ¶q×°pÖ¶tÚ²pÖ¶oÕ¶uÛ²oÕ¶pÖ°tÚ¶pÖ´oÕ´uÛ¶oÕ°pÖ¶tÚ²pÖ¶q×¶uÛ²oÕ¶pÖ°tÚ¶nÔ´qײuÛ¶nÔ°pÖ¶tÚ²nÔ¶q×¶uÛ²nÔ¶pÖ²rضnÔ´qײuÛ¶nÔ°rضrزnÔ´sÙ¶sÛ³TԭþÀ���������������������f¶_ѯnÔ°lÒ²jвpÖ°lÒ²jвnÔ°lÒ²lÒ²pÖ°lÒ²jвnÔ°jвlÒ²pÖ°lÒ²lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвlÒ²pÖ°jвmÓ²oÕ°jвnÔ°pÖ±jвmÓ±nÔ°jвnÔ°oÕ°jвmÓ°mÓ°jвnÔ°pÖ±jвmÓ±mÓ°jвpÖ°nÔ°jвmÓ°mÓ°jвoÕ°nÔ±jвmÓ±mÓ°jвpÖ°nÔ°jвoÕ°mÓ°jвpÖ°nÔ²jвnÔ±lÒ²jвpÖ°lÒ²jвnÔ°lÒ²lÒ²pÖ°lÒ²jвnÔ°jвlÒ²pÖ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²pÖ±jвlÒ²nÔ°jвnÔ²pÖ°jвmÓ°oÕ°jвnÔ°pÖ±jвmÓ±mÓ°jвnÔ°lÙ±A§ˆ������������������������ÖÜÖRЬoسoÕ¶nÔ¶tÚ²pÖ·oÕ±q×·oÕ³nÔ´tÚ¶nÔ±oÕ·qײoÕ¶nÔ¶tÚ²nÔ·oÕ±q×¶oÕ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·mÓ±oÕ·q׳mÓ´rضtÚ³mÓµoÕ³q×¶mÓ´rسtÚ·lÒ±q×·q׳mÓ´rضrسmÓµq׳oÕ¶mÓ´tÚ³rØ·mÓ±q×·oÕ³mÓ´tÚ¶rسmÓµq׳oÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³nÔ´tÚ¶pÖ±oÕ·qײoÕ¶nÔ¶tÚ²pÖ·oÕ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײoÕ¶pÖ¶tÚ²nÔ·oÕ±q×¶oÕ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒµoÕ³q×¶mÓ´rسtÚ·mÓ±oÕ·q׳mÓ´rØ·fܰvª���������������������������Y·”h×°oÕ°lÒ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²lÒ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°oÕ²mÓ°pÖ²rزmÓ°oÕ²oÕ²mÓ°pÖ²rزmÓ±oÕ²oÕ²mÓ°rزrزlÒ°oÕ²oÕ²mÓ°rزrزmÓ±oÕ²oÕ²mÓ°rزpÖ²mÓ°oÕ²oÕ²mÓ°rزpÖ²mÓ±oÕ²oÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°lÒ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²lÒ±oÕ°qײmÓ°nÔ°tÚ²lÒ°oÕ±qײmÓ°pÖ²tÚ²lÒ±oÕ²oÕ²mÓ°pÖ²rزmÓ°oÕ²oÕ²mÓ°nسQСìàæ���������������������������¸ÒÌXÓ©lÓ·jжoÕ°lÒ¶jвnÔ´lÒ´lÒ´oÕ´lÒ²jжnÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжlÒ¶oÕ°jжlÒ²nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°lÒ¶jжmÓ²oÕ¶jвlÒ¶lÒ²jжoÕ¶mÓ°jжlÒ°lÒ¶jжoÕ°mÓ¶jвlÒ´lÒ²jжoÕ´nÔ°jжnÔ°lÒ¶jжoÕ°mÓ¶jвnÔ´lÒ²jдpÖ´lÒ²jжnÔ°lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´oÕ´lÒ²lÒ¶nÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´pÖ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°nÔ´jжnÔ²oÕ´jвlÒ¶lÒ°jѶcÖ´f«•������������������������������ÿøÿP½‘kÙ³q×´wݲsÙ´pÖ°vܶqײqײwݶq×°rØ´vܲrØ´q×´wݲq×´q×°vܶpÖ²sÙ²wݶq×°rØ´uÛ²pÖ´sÙ´wݲoÕ´rذuÛ´oÕ²sÙ²wÝ´oÕ°tÚ´tÚ²oÕ²uÛ´wݲoÕ³tÚ²tÚ´pÖ²uÛ²uÛ´oÕ°tÚ´tÚ²oÕ²uÛ´uÛ²pÖ³tÚ²tÚ´oÕ²wݲuÛ´pÖ°tÚ´tÚ²oÕ²wÝ´sÙ²oÕ³uÛ²rØ´oÕ´wݲsÙ´oÕ°uÛ¶rزoÕ²wݶsÙ°pÖ´uÛ²q×´q×´wݲq×´rذvܶrزqײwݶq×°q×´uÛ²rØ´q×´wݲq×´q×°uÛ¶pÖ²sÙ²wݶoÕ°rØ´uÛ²oÕ´sÙ´wݲoÕ³rزtÚ´pÖ²sÙ²wÝ´oÕ°tÚ´tÚ²n׳WÓ¤ÑÓÒ���������������������������������§Æ¼\Õ«mÔ³uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²qײsÙ³mÓ°pÖ³rزnÔ²qײsÙ²mÓ³pÖ²rزnÔ²qײsÙ²nÔ°pÖ²pÖ²nÔ²sÙ²qײnÔ³rزpÖ²mÓ²sÙ²q׳nÔ°rسpÖ²mÓ²sÙ²qײnÔ³rزpÖ²mÓ²uÛ²q׳nÔ°rزpÖ²mÓ²uÛ²oÕ°nÔ³rزpÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²rزnÔ²qײsÙ³mÓ°pÖ³rزcÔ¯dµ›������������������������������������ÿþÿO½™cдpÖ±lÒ·kѳoÕµlÒ´lÒ´oÕµlÒ³kÑ·oÕ±kѶlÒ¶oÕ±lÒ·lÒ³oÕµkÑ´lÒ´pÖµjгmÓ·nÔ±kѶlÒ¶pÖ±jзmÓ³nÔ´jжnÔ²oÕµjвmÓ¶nÔ°jжnÔ¶pÖ°jжmÓ°mÓ¶jжnÔ²pÖ¶jвmÓ¶mÓ²jжoÕ¶nÔ°jжmÓ°mÓ¶jжpÖ°nÔ¶jвmÓµmÓ²jжpÖ´nÔ±jжnÔ°mÓ¶jжoÕ±mÓ·jгnÔµmÓ³jдpÖµlÒ³kÑ·nÔ±lÒ¶lÒ¶pÖ±lÒ·kѳoÕµkÑ´lÒ´oÕµlÒ³lÒ·oÕ±kѶlÒ¶pÖ±lÒ·lÒ³nÔµkÑ´lÒ´pÖµjгmÓ·nÔ±jжnÔ¶oÕ°jжmÓ±nÔ´jжnÔ²pÖµjвmÓ¶kÔ±Pά×ÛÙ���������������������������������������®ÒÅXÒ¨tݲpÖ±oÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײnÔ°rزuÛ²nÔ°oÕ²qײnÔ°rزtÚ²nÔ±qײqײoÕ°rزtÚ²nÔ°qײqײnÔ°tÚ²tÚ²nÔ±qײqײnÔ°tÚ²rزoÕ°qײoÕ²nÔ°tÚ²rزnÔ±qײoÕ²nÔ°vܲrرoÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײnÔ°rزuÛ²nÔ±oÕ²qײnÔ°rزtÚ²nÔ°q׳fدa°“���������������������������������������������_»¢gØ­nÕ·mÓ²oÕ¶mÓ´lÒ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ´rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´pÖ²rضlÒ²oÕ¶oÕ²lÒ¶pÖ¶rرlÒ·oÕ±oÕ¶lÒ´pÖ²rضlÒ²oÕ¶oÕ²lÒ¶pÖ¶pÖ±lÒ·oÕ±oÕ¶lÒ¶rزpÖ¶lÒ²oÕ¶oÕ³lÒ´rضpÖ±mÓ·oÕ±oÕ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ³lÒ´rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´nÔ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±lÒ¶pÖ¶rرlÒ·oÕ±oÕ¶mÓ´pÖ²rضlÒ²jÕµMÈŸÑÓØ���������������������������������������������ÜØÜLØiÕ±lÒ²nÔ°lÒ²lÒ²q×°lÒ²lÒ³nÔ°lÒ²lÒ²q×°lÒ³lÒ²nÔ°lÒ²mÓ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°lÒ³lÒ²nÔ°jвmÓ²q×°jвlÒ²nÔ°jвoÕ²oÕ°jгnÔ°nÔ°jвoÕ°oÕ²jвnÔ²nÔ°jвoÕ²oÕ°jгnÔ°nÔ²jвoÕ°oÕ²jвnÔ±nÔ°jвq×°mÓ°jгnÔ°lÒ²lÒ²q×°mÓ³lÒ²nÔ°lÒ²lÒ²q×°mÓ²lÒ³nÔ°lÒ²lÒ²q×°lÒ³lÒ²nÔ°lÒ²lÒ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°lÒ³lÒ²nÔ°lÒ²mÓ²q×°lÒ²lÒ³nÔ°lÒ²mÓ²q×°jгlÒ°nÔ°jвnÔ²oÕ°jѳ^Ô­‹É²���������������������������������������������������™Í¹bÙ®p×±vܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rØ´vܲpÖ´sÙ´wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ¶wݲpÖµtÚ²tÚ¶pÖ´uÛ²uÛ¶pÖ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÚ²tÚ¶pÖ´wݲuÛ¶pÖ°tÚ¶tÚ²oÕ²wݶsÙ²pÖµvܲrØ´pÖ´wݲsÙ´pÖ°vܶrزpÖ²wݶsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rØ´vܲpÖ´sÙ´wݲpÖµrزtÚ¶pÖ²sÙ²wݶhÖ®S¿˜ÿïô���������������������������������������������������ÿøþI»šeÓ°pÖ¶nÔ´mÓ´q×¶nÔ²lÒ¶pÖ°lÒ¶nÔ¶q×°mÓ¶nÔ²pÖ¶lÒ´mÓ´q×¶lÒ²nÔ¶pÖ°lÒ¶mÓ¶q×°lÒ¶nÔ²pÖ¶lÒ´oÕ²q×¶lÒ²nÔ¶pÖ°lÒ¶oÕ¶q×°lÒ¶nÔ°nÔ¶lÒ¶oÕ²q×¶lÒ²nÔ¶nÔ²lÒ¶q×¶oÕ°lÒ¶nÔ°nÔ¶lÒ¶qײoÕ¶lÒ²pÖ¶nÔ²lÒ´q×¶oÕ°lÒ¶pÖ°nÔ¶lÒ¶q×°oÕ¶lÒ²pÖ¶nÔ²lÒ´q×¶mÓ²lÒ¶pÖ°nÔ¶mÓ¶q×°mÓ¶lÒ²pÖ¶lÒ´nÔ´q×¶nÔ²lÒ¶pÖ°lÒ¶mÓ¶q×°lÒ¶nÔ²pÖ¶lÒ´mÓ²q×¶lÒ²nÔ¶pÖ°lÒ¶oÕ¶q×°lÒ¶nÔ°pÖ¶lÒ´oÕ²oÙ·TЩ»ÐÊ���������������������������������������������������������ªÍÀTϧlÖ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°kѲnÔ°rرjвmÓ±oÕ°jвpÖ°rذjгoÕ°oÕ°kѲpÖ°pÖ±jвoÕ±oÕ°jвpÖ°pÖ°jгoÕ°oÕ°jвpÖ°pÖ±jвoÕ±mÓ°jвrذnÔ°kѳoÕ°mÓ°lÒ²q×°nÔ²lÒ²oÕ°mÓ²lÒ²rذnÔ²mÓ³oÕ°mÓ²lÒ²rذnÔ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²nÔ²rذlÒ³mÓ²oÕ°mÓ²nÔ²rذlÒ²mÓ²oÕ°lÒ²nÔ²rذjгmÓ°oÕ°jвp×±eج\¨‘���������������������������������������������������������������m´š`Ö°nÖ³nÔ³vܶpÖ±oÕ¶qײoÕ¶pÖ¶vܲnÔ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ´pÖ¶vܲnÔµoÕ±q×¶oÕµrسvÜ·nÔ±oÕ·q׳oÕµrضtÚ³nÔµq׳q×¶nÔµrسtÚ·nÔ±q×·q׳nÔµtÚ¶tÚ³nÔµq׳q×¶nÔµtÚ³rØ·oÕ±q×·oÕ³oÕµtÚ¶rسoÕµq׳oÕ¶nÔµuÛ²rضoÕ±q×¶oÕ²nÔ´uÛ¶pÖ±oÕµqײoÕ¶nÔ¶vܲpÖ¶oÕ±q×¶oÕ³pÖ³vܶnÔ±oÕ¶qײoÕ¶pÖ¶vܲnÔµoÕ±q×¶oÕ´pÖ²vܶnÔ±oÕ¶qײoÕ´rضvܲnÔµoÕ³q×¶oÕµlÙ±HÙþóü������������������������������������������������������������������O´bÒ®lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°lÒ²lÒ²q×°lÒ²mÓ²oÕ°kѲnÔ²rذjгmÓ²oÕ°kѲnÔ°pÖ±jвmÓ±oÕ°jвnÔ°pÖ°jгmÓ°oÕ°jвpÖ°pÖ±jвmÓ±mÓ°jвpÖ°pÖ°jгoÕ°mÓ°jвpÖ°nÔ±jвoÕ±mÓ°jвpÖ°nÔ°kѳoÕ°mÓ°jвq×°nÔ²kѲoÕ°mÓ²lÒ²q×°nÔ²kѳoÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°mÓ²lÒ²rذlÒ²mÓ²oÕ°lÒ²lÒ²q×°lÒ³mÓ²oÕ°kѲnÔ²q×°jвmÓ²oÕ°kѲnÔ²q×°jгmÓ°oÕ°gÒ²UϦ¬Ç½���������������������������������������������������������������������æíéVÒªfÔ²sÚ¶mÓ²nÔ¶pÖ°nÔ¶mÓ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ´sÙ¶mÓ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ²pÖ¶lÒ´oÕ²sÙ¶lÒ²nÔ¶pÖ²lÒ¶q×¶q×°lÒ¶pÖ°pÖ¶lÒ´qײq×¶lÒ²pÖ¶pÖ²lÒ¶q×¶q×°lÒ¶pÖ°pÖ¶lÒ¶qײq×¶lÒ²pÖ¶pÖ²lÒ´sÙ¶oÕ°lÒ¶pÖ°nÔ¶lÒ¶sÙ°oÕ¶lÒ²pÖ¶nÔ²mÓ´sÙ¶oÕ²nÔ¶pÖ°nÔ¶mÓ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´mÓ´sÙ¶mÓ²nÔ¶pÖ°nÔ¶oÕ¶sÙ°mÓ¶nÔ²pÖ¶nÔ´oÕ²sÙ¶nÔ²nÔ¶pÖ°lÒ¶oÕ¶sÙ°lÒ¶nÔ°p×·[Ñ®{¾¡���������������������������������������������������������������������������´ÉÅQË sÞ¶q×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶq×°rضvܲpÖ´sÙ¶wݲpÖ´rذvܶpÖ²sÙ²wݶpÖ°tÚ¶tÚ²pÖ´uÛ¶wݲpÖµtÚ²tÚ¶pÖ´uÛ²uÛ¶pÖ°tÚ¶tÚ²pÖ´uÛ¶uÛ²pÖµtÚ²tÚ¶pÖ´wݲuÛ¶pÖ°tÚ¶tÚ²oÕ´wݶsÙ²pÖµvܲrضpÖ´wݲsÙ¶pÖ°vܶrزpÖ²wݶsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrزqײwݶq×°rØ´vܲrØ´q×´wݲq×´rذvܶpÖ²sÙ²wݶpÖ°rضvܲpÖ´sÙ¶wݲpÖµrزiÚ²Q¶”���������������������������������������������������������������������������������‹µª[Ô©jÓ²jгnÔ°jвlÒ²pÖ°lÒ³lÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвlÒ²pÖ°jгlÒ²nÔ°jвnÔ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°jгlÒ°lÒ°jвnÔ°oÕ±jвlÒ±lÒ°jвpÖ°nÔ°jгlÒ°lÒ°jвoÕ°mÓ±jвlÒ±lÒ°jвoÕ°nÔ°jгnÔ°lÒ°jвpÖ°nÔ²jвnÔ°lÒ²jвpÖ°lÒ²jгnÔ°lÒ²lÒ²pÖ°lÒ³jвnÔ°jвlÒ²oÕ°lÒ²lÒ³nÔ°jвlÒ²pÖ°lÒ³lÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвnÔ²oÕ°jѳdÒ­TѨàÙÛ������������������������������������������������������������������������������������f»¡]ѪjÒµoÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´pÖ³rضlÒ²oÕ¶oÕ²mÓ¶pÖ¶rرlÒ·oÕ±oÕ¶mÓ´pÖ³rضlÒ²oÕ¶oÕ³lÒ´pÖ¶pÖ±mÓ·oÕ±oÕ¶lÒ´rسpÖ¶mÓ²oÕ¶oÕ³lÒ´rضpÖ±mÓ·oÕ±oÕ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ³lÒ´rضnÔ²mÓ·oÕ±mÓ¶lÒ¶rرnÔ·mÓ²oÕ¶mÓ´nÔ´rضnÔ²mÓ·oÕ±mÓ¶nÔ¶rرlÒ·mÓ²oÕ¶mÓ´nÔ³rضlÒ²mÓ·oÕ±mÓ¶pÖ¶rرfÒ´K›ÍÜØ������������������������������������������������������������������������������������������n×®]ϨnÖ±oÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײnÔ°rزuÛ²nÔ°oÕ²qײnÔ°rزtÚ²nÔ±qײqײoÕ°rزtÚ²nÔ°qײqײnÔ°tÚ²tÚ²nÔ±qײqײnÔ°tÚ²rزoÕ°qײoÕ²nÔ°tÚ²rزnÔ±qײoÕ²nÔ°vܲrرoÕ°qײoÕ°nÔ°vܲpÖ°oÕ±qײoÕ°nÔ°vܲpÖ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײoÕ°pÖ°vܲnÔ±oÕ°qײoÕ°pÖ°vܲnÔ°oÕ±qײnÔ°rزsÞ³UѨµØÉ������������������������������������������������������������������������������������������������rÙ¹`Ó«kÒ¸lÒ¶oÕ±lÒ·lÒ³oÕµkÑ´lÒ´pÖµjгmÓ·nÔ±kѶlÒ¶pÖ±jзmÓ³nÔ´jжnÔ²oÕµjвmÓ¶nÔ°jжnÔ¶pÖ°jжmÓ°mÓ¶jжnÔ²pÖ¶jвmÓ¶mÓ²jжoÕ¶nÔ°jжmÓ°mÓ¶jжpÖ°nÔ¶jвmÓµmÓ²jжpÖ´nÔ±jжnÔ°mÓ¶jжoÕ±mÓ·jгnÔµmÓ³jдpÖµlÒ³kÑ·nÔ±lÒ¶lÒ¶pÖ±lÒ·kѳoÕµkÑ´lÒ´oÕµlÒ³lÒ·oÕ±kѶlÒ¶pÖ±lÒ·lÒ³nÔµkÑ´lÒ´pÖµjгmÓ·nÔ±jжk×·\׫j”‹���������������������������������������������������������������������������������������������������ûîòH¬ƒbÓ­nÕ±uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²qײsÙ³nÔ°pÖ³rزnÔ²qײsÙ²nÔ³pÖ²rزnÔ²qײsÙ²nÔ°pÖ²pÖ²nÔ²sÙ²qײnÔ³rزpÖ²nÔ²sÙ²q׳nÔ°rسpÖ²nÔ²sÙ²qײnÔ³rزpÖ²mÓ²uÛ²q׳nÔ°rسpÖ²mÓ²uÛ²oÕ°nÔ³rزpÖ²mÓ²uÛ²oÕ³nÔ°rزnÔ²oÕ²uÛ²oÕ°nÔ³rزnÔ²oÕ²uÛ²mÓ³pÖ°rزnÔ²oÕ²uÛ²mÓ°pÖ³rزk׳\Ö«t¡‹���������������������������������������������������������������������������������������������������������õö÷^Ó­dÔ­vݲoÕ´pÖ°tÚ´pÖ²qײwÝ´oÕ°rØ´tÚ²pÖ²q×´wݲoÕ³rذtÚ´pÖ²sÙ²uÛ´pÖ°rØ´tÚ²pÖ²sÙ´uÛ²pÖ³rزtÚ´pÖ²sÙ²uÛ´pÖ°rØ´rزpÖ²uÛ´sÙ²pÖ³tÚ²rØ´pÖ²uÛ²sÙ´pÖ°tÚ´rزpÖ²uÛ´sÙ²pÖ³tÚ²rØ´oÕ²wݲsÙ´pÖ°tÚ´rزoÕ²wÝ´q×°pÖ´tÚ²pÖ´oÕ´wݲq×´pÖ°tÚ´pÖ²qײwÝ´q×°pÖ´tÚ²pÖ´q×´wݲoÕ´rذtÚ´pÖ²qײwÝ´oÕ°rØ´qܳZÖ­v¡���������������������������������������������������������������������������������������������������������������÷üÿQÁ¢aÕ«jÓ¶lÒ²nÔ´jдlÒ´oÕ´jвlÒ¶nÔ°jжlÒ¶pÖ°jзlÒ²nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжmÓ°mÓ¶jжnÔ²oÕ¶jвmÓ¶mÓ²jжoÕ¶nÔ°jжmÓ°mÓ¶jжoÕ°nÔ¶jвlÒ´lÒ²jжoÕ´nÔ°jжnÔ°lÒ¶jжoÕ°mÓ¶jвnÔµlÒ²jдpÖ´lÒ²jжnÔ°lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´oÕ´lÒ²lÒ¶nÔ°jжlÒ¶oÕ°lÒ¶lÒ²nÔ´jдlÒ´pÖ´jвhÔ¶YÔªn˜���������������������������������������������������������������������������������������������������������������������ûíïhºYЦjÓ®qײmÓ°pÖ°tÚ²nÔ°oÕ±qײmÓ°pÖ°tÚ²lÒ±oÕ°qײmÓ°pÖ²tÚ²lÒ°oÕ²qײlÒ°rزtÚ²lÒ±oÕ²oÕ²mÓ°rزrزmÓ°oÕ²oÕ²mÓ°rزrزmÓ±oÕ²oÕ²mÓ°rزrزmÓ°qײoÕ²lÒ°tÚ²pÖ²mÓ±qײoÕ²lÒ°tÚ²pÖ±mÓ°q׳oÕ°lÒ°tÚ²pÖ°mÓ±qײoÕ°nÔ°tÚ²nÔ±mÓ°qײoÕ°nÔ°tÚ²nÔ°oÕ±qײmÓ°nÔ°tÚ²nÔ±oÕ°qײmÓ°pÖ°tÛ³fÔ¯XÓ©¸¤������������������������������������������������������������������������������������������������������������������������������˜æÏWÏ¥m×µmÓ´pÖ³tÚ·nÔ±oÕ·qײmÓ¶pÖ¶tÚ²lÒ·oÕ±q×¶mÓ´pÖ³tÚ·lÒ±oÕ·q׳lÒ´rضtÚ²lÒ¶oÕ²oÕ¶mÓ´rسrØ·mÓ±oÕ·oÕ³mÓ´rضrزmÓ¶oÕ²oÕ¶mÓ´rسrØ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ²mÓ¶qײoÕ¶lÒ¶tÚ²pÖ·mÓ±q×·oÕ³lÒ´tÚ¶pÖ±mÓ·qײoÕ¶nÔ¶tÚ²nÔ·mÓ±q×¶oÕ´nÔ´tÚ¶nÔ±oÕ·qײmÓ¶nÔ¶tÚ²nÔ·oÕ±q×¶mÓ´p׳nܶLÄž¬½·������������������������������������������������������������������������������������������������������������������������������������~¿¨UÑ¥cѯlÒ²oÕ±jвlÒ²nÔ°jвlÒ²pÖ°jвlÒ²nÔ°jвnÔ°oÕ±jвlÒ±nÔ°jвmÓ°oÕ°jвmÓ°mÓ°jвnÔ°oÕ±jвmÓ±mÓ°jвoÕ°nÔ°jвmÓ°mÓ°jвoÕ°nÔ±jвlÒ±lÒ°jвoÕ°nÔ°jвnÔ°lÒ°jвoÕ°mÓ²jвnÔ±lÒ²jвpÖ°lÒ²jвnÔ°lÒ²lÒ²oÕ°lÒ²jвnÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jвlÒ²oÕ°lÒ²lÒ²nÔ°jÒ³dÔ±LÇ›¤²²������������������������������������������������������������������������������������������������������������������������������������������ºÒÎQÈ f×®vÞ·oÕ°rضtÚ²pÖ¶q×¶wݲoÕ¶rذtÚ¶pÖ´sÙ²uÛ¶oÕ°rضtÚ²pÖ´sÙ¶uÛ²pÖ´rزtÚ¶pÖ´sÙ²uÛ¶oÕ°rضrزoÕ´uÛ¶sÙ²pÖ´tÚ²rضoÕ´uÛ²sÙ¶pÖ°tÚ¶rزpÖ´uÛ¶sÙ²pÖ´tÚ²rضoÕ¶wݲsÙ¶pÖ°tÚ¶rزoÕ´wݶq×°pÖ¶tÚ²pÖ¶oÕ¶wݲq×¶pÖ°tÚ¶pÖ´q×´wݶq×°pÖ¶tÚ²pÖ¶q×¶wݲoÕ¶rذrÜ·bذN¸’ÐÑË������������������������������������������������������������������������������������������������������������������������������������������������êçåT´”dÚ°jÕ°pÖ¶rزnÔ¶q×¶uÛ²mÓ¶pÖ°rضnÔ´qײuÛ¶nÔ°pÖ¶rزnÔ´q×¶sÙ²nÔ¶pÖ²rضnÔ´sÙ²sÙ¶nÔ°rضrزnÔ´sÙ¶sÙ²nÔ¶rزrضnÔ´sÙ²q×¶nÔ°rضpÖ²nÔ´sÙ¶qײnÔ¶rزpÖ¶mÓ¶uÛ²q×¶nÔ°rضpÖ²mÓ´uÛ¶oÕ°nÔ¶rزpÖ¶oÕ¶uÛ²oÕ¶nÔ°rضpÖ´oÕ´uÛ¶oÕ°pÖ¶rزnÔ¶oÕ¶uÛ²pÖ·jׯ]دaª“þêñ���������������������������������������������������������������������������������������������������������������������������������������������������������u²œQΧeÓ°nÖ±jвlÒ²pÖ°jгmÓ²nÔ°jвmÓ°oÕ±jвmÓ±nÔ°jвnÔ°pÖ°jвmÓ°mÓ°jвnÔ°oÕ±jвlÒ±lÒ°jвoÕ°mÓ°jвlÒ°lÒ°jвpÖ°nÔ±jвmÓ±mÓ°jвpÖ°nÔ°jвnÔ°mÓ°jвoÕ°mÓ²jвnÔ±mÓ²jвpÖ°lÒ²kѳnÔ°lÒ²lÒ²oÕ°lÒ²kѲoÕ°jвlÒ²oÕ°lÒ²lÒ²nÔ°kѲlÒ²nر_Ó¯B¹’¡¿·������������������������������������������������������������������������������������������������������������������������������������������������������������������¹ÑËL¸—aÖ­kÕ´pÖ·vܳnÔµoÕ±q×¶nÔ´rسuÛ·nÔ±oÕ·q׳nÔ´rضtÚ³nÔµq׳q×¶nÔ´rسtÚ·nÔ±q×·q׳nÔ´sÙ¶sÙ³nÔµq׳q×¶nÔ´tÚ³rØ·oÕ±q×·oÕ³nÔ´tÚ¶rسnÔµq׳oÕ¶nÔ´uÛ³rØ·nÔ±q×·oÕ³nÔ´vܶpÖ±oÕµq׳oÕ¶nÔ¶uÛ²pÖ·oÕ±q×·oÕ³pÖ³uÛ·nÔ±oÕ·qײnÖ·h×´]Ûªa¥’ÿîö������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿðö†Ã­LÉŸfÖ­sÛ³lÒ±oÕ°oÕ²mÓ°pÖ²rزlÒ°oÕ²oÕ²mÓ°pÖ²rزlÒ±oÕ²oÕ²mÓ°rزrزlÒ°oÕ²oÕ²lÒ°rزrزlÒ±oÕ²oÕ²lÒ°rزpÖ²mÓ°oÕ²oÕ²lÒ°rزpÖ²mÓ±oÕ²oÕ²lÒ°sÙ²pÖ±lÒ°q׳oÕ°lÒ°tÚ²nÔ°mÓ±qײmÓ°nÔ°tÚ²nÔ±mÓ°qײmÓ°nÔ°tÚ²nÔ°mÔ±mز[Ò«R¼•ÁÊÆ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÚßÞO¯–YÔ§bÑ´lÔ³nÔ´jжnÔ²oÕ´jвlÒ¶nÔ°jжmÓ¶oÕ°jжlÒ°lÒ¶jжmÓ²oÕ¶jвlÒ¶lÒ²jжoÕ¶mÓ°jжlÒ°lÒ¶jжoÕ°mÓ¶jвlÒ´lÒ²jжoÕ´nÔ°jжnÔ°lÒ¶jжoÕ°mÓ¶jвnÔ´lÒ²jдpÖ´lÒ²jжnÔ°lÒ¶lÒ¶oÕ°lÒ¶jвnÔ´jдlÒ´pÖµjÓ³aÓ³FÁ™Œ»­ÿöü���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ËßÔG´Œ\רnÝ´o׳sÙ²wݶpÖ°tÚ´tÚ²pÖ´uÛ´wݲpÖµtÚ²tÚ¶pÖ²uÛ²uÛ¶pÖ°tÚ´tÚ²pÖ²uÛ´uÛ²pÖµtÚ²tÚ´pÖ´wݲuÛ´pÖ°tÚ¶tÚ²oÕ²wݶsÙ²pÖµvܲrØ´pÖ´wݲsÙ´pÖ°vܶrزpÖ²wݶsÙ°pÖ´vܲrØ´q×´wݲq×´rذvܶrÙ³qܵmáµSÒ£l·›åâÞ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿûÿ¹ÖÌT¯”RШdÕ¯qÚ³lÒ²nÔ³pÖ°lÒ²qײq×°lÒ³pÖ°pÖ²lÒ²qײqײlÒ²pÖ²pÖ²lÒ²qײq×°lÒ³pÖ°pÖ²lÒ²qײqײlÒ²pÖ²pÖ²lÒ²sÙ²oÕ°lÒ³pÖ°nÔ²lÒ²sÙ°oÕ³lÒ²pÖ²nÔ²mÓ²sÙ²oÕ²nÔ³pÖ°nÔ²mÓ²sÙ°mÓ³nÕ³lײaÖ°JÄšT‹{ÜØÛ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÍÙØf´—QÓ¨[Ñ­hÕ¶nÕ±jжnÔ¶pÖ±jзmÓ±oÕ¶jжpÖ²pÖ¶jвmÓ¶mÓ²jжpÖ¶pÖ±jзoÕ±mÓ¶jжpÖ°nÔ¶jвoÕ¶mÓ²jжpÖ¶nÔ±kÑ·oÕ±mÓ¶jжq×±nÔ·kѲoÕµmÓ³lÒ´q×´nÔ²kÑ·oÕ±mÓ¶lÒ¶rÙ²gÔ¶\Ô®D¾š„¾¬ØÉÐ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ìã䇶§SšYÕ©eÖ®oÙ²sÛ²oÕ±qײqײnÔ°rزtÚ²nÔ°qײqײnÔ°tÚ²tÚ²nÔ±qײqײnÔ°tÚ²rزoÕ°qײoÕ²oÕ°tÚ²rزoÕ±qײoÕ²nÔ°uÛ²rرoÕ°qײoÕ°nÔ°uÛ²pÖ°oÕ±qÙ´kزcذ]ܪB¯ˆšÁ²ÿèò������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������«Â»h»¥QŸOÍŸXϯgÖ¯mÖ·kÑ·pÖ²pÖ¶jвoÕ¶oÕ²jжpÖ¶pÖ±jзoÕ±oÕ¶jжpÖ²pÖ¶jвoÕ¶mÓ²jдrضnÔ±kÑ·oÕ±mÓ¶lÒ¶q×±nÔ·lÒ²oÕ¶mÓ³mÕ·pܹeسZÓ±QÒ¦>§…~¸¨¹·¸������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������óëï£Ì¾b¾œE¿–OϦ[ÔªeØ®gÕ²nÖ³oÕ±lÒ²qײoÕ°lÒ³nÔ°nÔ²lÒ²q×°oÕ²lÒ²pÖ²nÔ²lÒ²qײoÕ°lÒ³pÖ°nÔ²lÒ²rÚ²nÚµfسaØ®VÔ©GÆA¤{h«’¬ÐÀäÞàÿüÿ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ÿíõäâáµÕLjȳW·˜?½”RÔ£TÔª]Ù¬cÝ­a×°iݱqâºpܹyâ·tÚ¶oÕ°vÞºwâ¹oà¹pä¸eܯ_Ù±^ÚªXجOѧTÚ¥:¡ƒb©·­ÔÜ×öÛæ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������þþþûýü×ÚØ×ìæ²ÊöÝћɻ’̺†Ê¶N˜…tÚ³sÙ¶pÖ²rØ·S¡ˆj¯›‘É·–ĵ±Ö̬ŽÙðéÅÈÆðóñúûú������������������������������������������������������������������������������������������������������������������������������������������������������������ÿÿÿÿÿÿÀ��������ÿÿÿÿÿü���������ÿÿÿÿÿÀ���������ÿÿÿÿü����������ÿÿÿÿð����������ÿÿÿÿÀ����������ÿÿÿÿ�����������ÿÿÿü�����������ÿÿÿð�����������ÿÿÿÀ�����������ÿÿÿ€�����������ÿÿþ������������ÿÿü������������ÿÿø������������ÿÿð������������ÿÿà������������ÿÿÀ������������ÿÿ�������������ÿþ�������������ÿþ�������������ÿü�������������ÿø�������������ÿð�������������ÿà�������������ÿà�������������ÿÀ�������������ÿ€�������������ÿ€�������������ÿ��������������ÿ��������������þ��������������ü��������������ü��������������ü��������������ø��������������ø��������������ð��������������ð��������������à��������������à��������������à��������������À��������������À��������������À��������������À��������������À��������������€�������ÿÿÿÿÿÿÿ€������ÿÿÿÿÿÿÿÿ€������?ÿÿÿÿÿÿÿÿ€������ÿÿÿÿÿÿÿÿÿ������ÿÿÿÿÿÿÿÿÿ������ÿÿÿÿÿÿÿÿÿ������ÿÿþ������������ÿÿþ������������?ÿÿÿ������������ÿÿÿ������������ÿÿÿ€�����������ÿÿÿ€�����������ÿÿÿÿ€�����������ÿÿÿÿ€�����������ÿÿÿÿÀ�����������ÿÿÿÿÀ����������ÿÿÿÿÀ����������ÿÿÿÿÀ�����������ÿÿÿÿÀ�����������ÿÿÿÿÀ�����������ÿÿÿÿÀ�����������ÿÿÿÿÀ�����������ÿÿÿÿ€�����������ÿÿÿ€�����������ÿÿÿ€�����������?ÿÿÿ������������?ÿÿÿ������������ÿÿþ������������ÿÿü������������ÿÿø������€�����ÿÿø������€�����ÿÿà�����€������ÿÀ�����€������þ������À��������������À��������������À��������������À��������������à��������������à��������������à��������������ð��������������ð��������������ø��������������ø��������������ø��������������ü��������������?ü��������������?þ��������������ÿ��������������ÿ��������������ÿÿ€�������������ÿÿ€������������ÿÿÀ������������ÿÿà������������ÿÿð������������ÿÿð������������ÿÿø������������ÿÿü������������ÿÿþ������������?ÿÿÿ������������ÿÿÿ€�����������ÿÿÿÿ€����������ÿÿÿÿÀ����������ÿÿÿÿà����������ÿÿÿÿð����������ÿÿÿÿü����������ÿÿÿÿþ����������?ÿÿÿÿÿ����������ÿÿÿÿÿ€���������ÿÿÿÿÿÿà��������ÿÿÿÿÿÿð��������ÿÿÿÿÿÿø��������ÿÿÿÿÿÿþ��������?ÿÿÿÿÿÿÿ€�������ÿÿÿÿÿÿÿÿÀ������ÿÿÿÿÿÿÿÿø������ÿÿÿÿÿÿÿÿþ������?ÿÿÿÿÿÿÿÿÿÀ����ÿÿÿÿÿÿÿÿÿÿø����ÿÿÿÿÿÿÿÿÿÿÿ����ÿÿÿÿÿÿÿÿÿÿÿÿð��ÿÿÿÿÿÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/VbrTag.c����������������������������������������������������������������������000644 �001751 �001751 �00000075577 13144574735 017503� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Xing VBR tagging for LAME. * * Copyright (c) 1999 A.L. Faber * Copyright (c) 2001 Jonathan Dee * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: VbrTag.c,v 1.106 2017/08/06 18:15:47 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "bitstream.h" #include "VbrTag.h" #include "lame_global_flags.h" #include "tables.h" #ifdef __sun__ /* woraround for SunOS 4.x, it has SEEK_* defined here */ #include <unistd.h> #endif #ifdef _DEBUG /* #define DEBUG_VBRTAG */ #endif /* * 4 bytes for Header Tag * 4 bytes for Header Flags * 100 bytes for entry (NUMTOCENTRIES) * 4 bytes for FRAME SIZE * 4 bytes for STREAM_SIZE * 4 bytes for VBR SCALE. a VBR quality indicator: 0=best 100=worst * 20 bytes for LAME tag. for example, "LAME3.12 (beta 6)" * ___________ * 140 bytes */ #define VBRHEADERSIZE (NUMTOCENTRIES+4+4+4+4+4) #define LAMEHEADERSIZE (VBRHEADERSIZE + 9 + 1 + 1 + 8 + 1 + 1 + 3 + 1 + 1 + 2 + 4 + 2 + 2) /* the size of the Xing header (MPEG1 and MPEG2) in kbps */ #define XING_BITRATE1 128 #define XING_BITRATE2 64 #define XING_BITRATE25 32 extern const char* get_lame_tag_encoder_short_version(void); static const char VBRTag0[] = { "Xing" }; static const char VBRTag1[] = { "Info" }; /* Lookup table for fast CRC computation * See 'CRC_update_lookup' * Uses the polynomial x^16+x^15+x^2+1 */ static const unsigned int crc16_lookup[256] = { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 }; /*********************************************************************** * Robert Hegemann 2001-01-17 ***********************************************************************/ static void addVbr(VBR_seek_info_t * v, int bitrate) { int i; v->nVbrNumFrames++; v->sum += bitrate; v->seen++; if (v->seen < v->want) { return; } if (v->pos < v->size) { v->bag[v->pos] = v->sum; v->pos++; v->seen = 0; } if (v->pos == v->size) { for (i = 1; i < v->size; i += 2) { v->bag[i / 2] = v->bag[i]; } v->want *= 2; v->pos /= 2; } } static void Xing_seek_table(VBR_seek_info_t const* v, unsigned char *t) { int i, indx; int seek_point; if (v->pos <= 0) return; for (i = 1; i < NUMTOCENTRIES; ++i) { float j = i / (float) NUMTOCENTRIES, act, sum; indx = (int) (floor(j * v->pos)); if (indx > v->pos - 1) indx = v->pos - 1; act = v->bag[indx]; sum = v->sum; seek_point = (int) (256. * act / sum); if (seek_point > 255) seek_point = 255; t[i] = seek_point; } } #ifdef DEBUG_VBR_SEEKING_TABLE static void print_seeking(unsigned char *t) { int i; printf("seeking table "); for (i = 0; i < NUMTOCENTRIES; ++i) { printf(" %d ", t[i]); } printf("\n"); } #endif /**************************************************************************** * AddVbrFrame: Add VBR entry, used to fill the VBR the TOC entries * Paramters: * nStreamPos: how many bytes did we write to the bitstream so far * (in Bytes NOT Bits) **************************************************************************** */ void AddVbrFrame(lame_internal_flags * gfc) { int kbps = bitrate_table[gfc->cfg.version][gfc->ov_enc.bitrate_index]; assert(gfc->VBR_seek_table.bag); addVbr(&gfc->VBR_seek_table, kbps); } /*-------------------------------------------------------------*/ static int ExtractI4(const unsigned char *buf) { int x; /* big endian extract */ x = buf[0]; x <<= 8; x |= buf[1]; x <<= 8; x |= buf[2]; x <<= 8; x |= buf[3]; return x; } static void CreateI4(unsigned char *buf, uint32_t nValue) { /* big endian create */ buf[0] = (nValue >> 24) & 0xff; buf[1] = (nValue >> 16) & 0xff; buf[2] = (nValue >> 8) & 0xff; buf[3] = (nValue) & 0xff; } static void CreateI2(unsigned char *buf, int nValue) { /* big endian create */ buf[0] = (nValue >> 8) & 0xff; buf[1] = (nValue) & 0xff; } /* check for magic strings*/ static int IsVbrTag(const unsigned char *buf) { int isTag0, isTag1; isTag0 = ((buf[0] == VBRTag0[0]) && (buf[1] == VBRTag0[1]) && (buf[2] == VBRTag0[2]) && (buf[3] == VBRTag0[3])); isTag1 = ((buf[0] == VBRTag1[0]) && (buf[1] == VBRTag1[1]) && (buf[2] == VBRTag1[2]) && (buf[3] == VBRTag1[3])); return (isTag0 || isTag1); } #define SHIFT_IN_BITS_VALUE(x,n,v) ( x = (x << (n)) | ( (v) & ~(-1 << (n)) ) ) static void setLameTagFrameHeader(lame_internal_flags const *gfc, unsigned char *buffer) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; char abyte, bbyte; SHIFT_IN_BITS_VALUE(buffer[0], 8u, 0xffu); SHIFT_IN_BITS_VALUE(buffer[1], 3u, 7); SHIFT_IN_BITS_VALUE(buffer[1], 1u, (cfg->samplerate_out < 16000) ? 0 : 1); SHIFT_IN_BITS_VALUE(buffer[1], 1u, cfg->version); SHIFT_IN_BITS_VALUE(buffer[1], 2u, 4 - 3); SHIFT_IN_BITS_VALUE(buffer[1], 1u, (!cfg->error_protection) ? 1 : 0); SHIFT_IN_BITS_VALUE(buffer[2], 4u, eov->bitrate_index); SHIFT_IN_BITS_VALUE(buffer[2], 2u, cfg->samplerate_index); SHIFT_IN_BITS_VALUE(buffer[2], 1u, 0); SHIFT_IN_BITS_VALUE(buffer[2], 1u, cfg->extension); SHIFT_IN_BITS_VALUE(buffer[3], 2u, cfg->mode); SHIFT_IN_BITS_VALUE(buffer[3], 2u, eov->mode_ext); SHIFT_IN_BITS_VALUE(buffer[3], 1u, cfg->copyright); SHIFT_IN_BITS_VALUE(buffer[3], 1u, cfg->original); SHIFT_IN_BITS_VALUE(buffer[3], 2u, cfg->emphasis); /* the default VBR header. 48 kbps layer III, no padding, no crc */ /* but sampling freq, mode andy copyright/copy protection taken */ /* from first valid frame */ buffer[0] = (uint8_t) 0xff; abyte = (buffer[1] & (unsigned char) 0xf1); { int bitrate; if (1 == cfg->version) { bitrate = XING_BITRATE1; } else { if (cfg->samplerate_out < 16000) bitrate = XING_BITRATE25; else bitrate = XING_BITRATE2; } if (cfg->vbr == vbr_off) bitrate = cfg->avg_bitrate; if (cfg->free_format) bbyte = 0x00; else bbyte = 16 * BitrateIndex(bitrate, cfg->version, cfg->samplerate_out); } /* Use as much of the info from the real frames in the * Xing header: samplerate, channels, crc, etc... */ if (cfg->version == 1) { /* MPEG1 */ buffer[1] = abyte | (char) 0x0a; /* was 0x0b; */ abyte = buffer[2] & (char) 0x0d; /* AF keep also private bit */ buffer[2] = (char) bbyte | abyte; /* 64kbs MPEG1 frame */ } else { /* MPEG2 */ buffer[1] = abyte | (char) 0x02; /* was 0x03; */ abyte = buffer[2] & (char) 0x0d; /* AF keep also private bit */ buffer[2] = (char) bbyte | abyte; /* 64kbs MPEG2 frame */ } } #if 0 static int CheckVbrTag(unsigned char *buf); /*-------------------------------------------------------------*/ /* Same as GetVbrTag below, but only checks for the Xing tag. requires buf to contain only 40 bytes */ /*-------------------------------------------------------------*/ int CheckVbrTag(unsigned char *buf) { int h_id, h_mode; /* get selected MPEG header data */ h_id = (buf[1] >> 3) & 1; h_mode = (buf[3] >> 6) & 3; /* determine offset of header */ if (h_id) { /* mpeg1 */ if (h_mode != 3) buf += (32 + 4); else buf += (17 + 4); } else { /* mpeg2 */ if (h_mode != 3) buf += (17 + 4); else buf += (9 + 4); } return IsVbrTag(buf); } #endif int GetVbrTag(VBRTAGDATA * pTagData, const unsigned char *buf) { int i, head_flags; int h_bitrate, h_id, h_mode, h_sr_index, h_layer; int enc_delay, enc_padding; /* get Vbr header data */ pTagData->flags = 0; /* get selected MPEG header data */ h_layer = (buf[1] >> 1) & 3; if ( h_layer != 0x01 ) { /* the following code assumes Layer-3, so give up here */ return 0; } h_id = (buf[1] >> 3) & 1; h_sr_index = (buf[2] >> 2) & 3; h_mode = (buf[3] >> 6) & 3; h_bitrate = ((buf[2] >> 4) & 0xf); h_bitrate = bitrate_table[h_id][h_bitrate]; /* check for FFE syncword */ if ((buf[1] >> 4) == 0xE) pTagData->samprate = samplerate_table[2][h_sr_index]; else pTagData->samprate = samplerate_table[h_id][h_sr_index]; /* if( h_id == 0 ) */ /* pTagData->samprate >>= 1; */ /* determine offset of header */ if (h_id) { /* mpeg1 */ if (h_mode != 3) buf += (32 + 4); else buf += (17 + 4); } else { /* mpeg2 */ if (h_mode != 3) buf += (17 + 4); else buf += (9 + 4); } if (!IsVbrTag(buf)) return 0; buf += 4; pTagData->h_id = h_id; head_flags = pTagData->flags = ExtractI4(buf); buf += 4; /* get flags */ if (head_flags & FRAMES_FLAG) { pTagData->frames = ExtractI4(buf); buf += 4; } if (head_flags & BYTES_FLAG) { pTagData->bytes = ExtractI4(buf); buf += 4; } if (head_flags & TOC_FLAG) { if (pTagData->toc != NULL) { for (i = 0; i < NUMTOCENTRIES; i++) pTagData->toc[i] = buf[i]; } buf += NUMTOCENTRIES; } pTagData->vbr_scale = -1; if (head_flags & VBR_SCALE_FLAG) { pTagData->vbr_scale = ExtractI4(buf); buf += 4; } pTagData->headersize = ((h_id + 1) * 72000 * h_bitrate) / pTagData->samprate; buf += 21; enc_delay = buf[0] << 4; enc_delay += buf[1] >> 4; enc_padding = (buf[1] & 0x0F) << 8; enc_padding += buf[2]; /* check for reasonable values (this may be an old Xing header, */ /* not a INFO tag) */ if (enc_delay < 0 || enc_delay > 3000) enc_delay = -1; if (enc_padding < 0 || enc_padding > 3000) enc_padding = -1; pTagData->enc_delay = enc_delay; pTagData->enc_padding = enc_padding; #ifdef DEBUG_VBRTAG fprintf(stderr, "\n\n********************* VBR TAG INFO *****************\n"); fprintf(stderr, "tag :%s\n", VBRTag); fprintf(stderr, "head_flags :%d\n", head_flags); fprintf(stderr, "bytes :%d\n", pTagData->bytes); fprintf(stderr, "frames :%d\n", pTagData->frames); fprintf(stderr, "VBR Scale :%d\n", pTagData->vbr_scale); fprintf(stderr, "enc_delay = %i \n", enc_delay); fprintf(stderr, "enc_padding= %i \n", enc_padding); fprintf(stderr, "toc:\n"); if (pTagData->toc != NULL) { for (i = 0; i < NUMTOCENTRIES; i++) { if ((i % 10) == 0) fprintf(stderr, "\n"); fprintf(stderr, " %3d", (int) (pTagData->toc[i])); } } fprintf(stderr, "\n***************** END OF VBR TAG INFO ***************\n"); #endif return 1; /* success */ } /**************************************************************************** * InitVbrTag: Initializes the header, and write empty frame to stream * Paramters: * fpStream: pointer to output file stream * nMode : Channel Mode: 0=STEREO 1=JS 2=DS 3=MONO **************************************************************************** */ int InitVbrTag(lame_global_flags * gfp) { lame_internal_flags *gfc = gfp->internal_flags; SessionConfig_t const *const cfg = &gfc->cfg; int kbps_header; #define MAXFRAMESIZE 2880 /* or 0xB40, the max freeformat 640 32kHz framesize */ /* * Xing VBR pretends to be a 48kbs layer III frame. (at 44.1kHz). * (at 48kHz they use 56kbs since 48kbs frame not big enough for * table of contents) * let's always embed Xing header inside a 64kbs layer III frame. * this gives us enough room for a LAME version string too. * size determined by sampling frequency (MPEG1) * 32kHz: 216 bytes@48kbs 288bytes@ 64kbs * 44.1kHz: 156 bytes 208bytes@64kbs (+1 if padding = 1) * 48kHz: 144 bytes 192 * * MPEG 2 values are the same since the framesize and samplerate * are each reduced by a factor of 2. */ if (1 == cfg->version) { kbps_header = XING_BITRATE1; } else { if (cfg->samplerate_out < 16000) kbps_header = XING_BITRATE25; else kbps_header = XING_BITRATE2; } if (cfg->vbr == vbr_off) kbps_header = cfg->avg_bitrate; /** make sure LAME Header fits into Frame */ { int total_frame_size = ((cfg->version + 1) * 72000 * kbps_header) / cfg->samplerate_out; int header_size = (cfg->sideinfo_len + LAMEHEADERSIZE); gfc->VBR_seek_table.TotalFrameSize = total_frame_size; if (total_frame_size < header_size || total_frame_size > MAXFRAMESIZE) { /* disable tag, it wont fit */ gfc->cfg.write_lame_tag = 0; return 0; } } gfc->VBR_seek_table.nVbrNumFrames = 0; gfc->VBR_seek_table.nBytesWritten = 0; gfc->VBR_seek_table.sum = 0; gfc->VBR_seek_table.seen = 0; gfc->VBR_seek_table.want = 1; gfc->VBR_seek_table.pos = 0; if (gfc->VBR_seek_table.bag == NULL) { gfc->VBR_seek_table.bag = lame_calloc(int, 400); if (gfc->VBR_seek_table.bag != NULL) { gfc->VBR_seek_table.size = 400; } else { gfc->VBR_seek_table.size = 0; ERRORF(gfc, "Error: can't allocate VbrFrames buffer\n"); gfc->cfg.write_lame_tag = 0; return -1; } } /* write dummy VBR tag of all 0's into bitstream */ { uint8_t buffer[MAXFRAMESIZE]; size_t i, n; memset(buffer, 0, sizeof(buffer)); setLameTagFrameHeader(gfc, buffer); n = gfc->VBR_seek_table.TotalFrameSize; for (i = 0; i < n; ++i) { add_dummy_byte(gfc, buffer[i], 1); } } /* Success */ return 0; } /* fast CRC-16 computation - uses table crc16_lookup 8*/ static uint16_t CRC_update_lookup(uint16_t value, uint16_t crc) { uint16_t tmp; tmp = crc ^ value; crc = (crc >> 8) ^ crc16_lookup[tmp & 0xff]; return crc; } void UpdateMusicCRC(uint16_t * crc, unsigned char const *buffer, int size) { int i; for (i = 0; i < size; ++i) *crc = CRC_update_lookup(buffer[i], *crc); } /**************************************************************************** * Jonathan Dee 2001/08/31 * * PutLameVBR: Write LAME info: mini version + info on various switches used * Paramters: * pbtStreamBuffer : pointer to output buffer * id3v2size : size of id3v2 tag in bytes * crc : computation of crc-16 of Lame Tag so far (starting at frame sync) * **************************************************************************** */ static int PutLameVBR(lame_global_flags const *gfp, size_t nMusicLength, uint8_t * pbtStreamBuffer, uint16_t crc) { lame_internal_flags const *gfc = gfp->internal_flags; SessionConfig_t const *const cfg = &gfc->cfg; int nBytesWritten = 0; int i; int enc_delay = gfc->ov_enc.encoder_delay; /* encoder delay */ int enc_padding = gfc->ov_enc.encoder_padding; /* encoder padding */ /*recall: cfg->vbr_q is for example set by the switch -V */ /* gfp->quality by -q, -h, -f, etc */ int nQuality = (100 - 10 * gfp->VBR_q - gfp->quality); /* NOTE: Even though the specification for the LAME VBR tag did explicitly mention other encoders than LAME, many SW/HW decoder seem to be able to make use of this tag only, if the encoder version starts with LAME. To be compatible with such decoders, ANY encoder will be forced to write a fake LAME version string! As a result, the encoder version info becomes worthless. */ const char *szVersion = get_lame_tag_encoder_short_version(); uint8_t nVBR; uint8_t nRevision = 0x00; uint8_t nRevMethod; uint8_t vbr_type_translator[] = { 1, 5, 3, 2, 4, 0, 3 }; /*numbering different in vbr_mode vs. Lame tag */ uint8_t nLowpass = (((cfg->lowpassfreq / 100.0) + .5) > 255 ? 255 : (cfg->lowpassfreq / 100.0) + .5); uint32_t nPeakSignalAmplitude = 0; uint16_t nRadioReplayGain = 0; uint16_t nAudiophileReplayGain = 0; uint8_t nNoiseShaping = cfg->noise_shaping; uint8_t nStereoMode = 0; int bNonOptimal = 0; uint8_t nSourceFreq = 0; uint8_t nMisc = 0; uint16_t nMusicCRC = 0; /*psy model type: Gpsycho or NsPsytune */ unsigned char bExpNPsyTune = 1; /* only NsPsytune */ unsigned char bSafeJoint = (cfg->use_safe_joint_stereo) != 0; unsigned char bNoGapMore = 0; unsigned char bNoGapPrevious = 0; int nNoGapCount = gfp->nogap_total; int nNoGapCurr = gfp->nogap_current; uint8_t nAthType = cfg->ATHtype; /*4 bits. */ uint8_t nFlags = 0; /* if ABR, {store bitrate <=255} else { store "-b"} */ int nABRBitrate; switch (cfg->vbr) { case vbr_abr:{ nABRBitrate = cfg->vbr_avg_bitrate_kbps; break; } case vbr_off:{ nABRBitrate = cfg->avg_bitrate; break; } default:{ /*vbr modes */ nABRBitrate = bitrate_table[cfg->version][cfg->vbr_min_bitrate_index];; } } /*revision and vbr method */ if (cfg->vbr < sizeof(vbr_type_translator)) nVBR = vbr_type_translator[cfg->vbr]; else nVBR = 0x00; /*unknown. */ nRevMethod = 0x10 * nRevision + nVBR; /* ReplayGain */ if (cfg->findReplayGain) { int RadioGain = gfc->ov_rpg.RadioGain; if (RadioGain > 0x1FE) RadioGain = 0x1FE; if (RadioGain < -0x1FE) RadioGain = -0x1FE; nRadioReplayGain = 0x2000; /* set name code */ nRadioReplayGain |= 0xC00; /* set originator code to `determined automatically' */ if (RadioGain >= 0) nRadioReplayGain |= RadioGain; /* set gain adjustment */ else { nRadioReplayGain |= 0x200; /* set the sign bit */ nRadioReplayGain |= -RadioGain; /* set gain adjustment */ } } /* peak sample */ if (cfg->findPeakSample) nPeakSignalAmplitude = abs((int) ((((FLOAT) gfc->ov_rpg.PeakSample) / 32767.0) * pow(2, 23) + .5)); /*nogap */ if (nNoGapCount != -1) { if (nNoGapCurr > 0) bNoGapPrevious = 1; if (nNoGapCurr < nNoGapCount - 1) bNoGapMore = 1; } /*flags */ nFlags = nAthType + (bExpNPsyTune << 4) + (bSafeJoint << 5) + (bNoGapMore << 6) + (bNoGapPrevious << 7); if (nQuality < 0) nQuality = 0; /*stereo mode field... a bit ugly. */ switch (cfg->mode) { case MONO: nStereoMode = 0; break; case STEREO: nStereoMode = 1; break; case DUAL_CHANNEL: nStereoMode = 2; break; case JOINT_STEREO: if (cfg->force_ms) nStereoMode = 4; else nStereoMode = 3; break; case NOT_SET: /* FALLTHROUGH */ default: nStereoMode = 7; break; } /*Intensity stereo : nStereoMode = 6. IS is not implemented */ if (cfg->samplerate_in <= 32000) nSourceFreq = 0x00; else if (cfg->samplerate_in == 48000) nSourceFreq = 0x02; else if (cfg->samplerate_in > 48000) nSourceFreq = 0x03; else nSourceFreq = 0x01; /*default is 44100Hz. */ /*Check if the user overrided the default LAME behaviour with some nasty options */ if (cfg->short_blocks == short_block_forced || cfg->short_blocks == short_block_dispensed || ((cfg->lowpassfreq == -1) && (cfg->highpassfreq == -1)) || /* "-k" */ (cfg->disable_reservoir && cfg->avg_bitrate < 320) || cfg->noATH || cfg->ATHonly || (nAthType == 0) || cfg->samplerate_in <= 32000) bNonOptimal = 1; nMisc = nNoiseShaping + (nStereoMode << 2) + (bNonOptimal << 5) + (nSourceFreq << 6); nMusicCRC = gfc->nMusicCRC; /*Write all this information into the stream */ CreateI4(&pbtStreamBuffer[nBytesWritten], nQuality); nBytesWritten += 4; strncpy((char *) &pbtStreamBuffer[nBytesWritten], szVersion, 9); nBytesWritten += 9; pbtStreamBuffer[nBytesWritten] = nRevMethod; nBytesWritten++; pbtStreamBuffer[nBytesWritten] = nLowpass; nBytesWritten++; CreateI4(&pbtStreamBuffer[nBytesWritten], nPeakSignalAmplitude); nBytesWritten += 4; CreateI2(&pbtStreamBuffer[nBytesWritten], nRadioReplayGain); nBytesWritten += 2; CreateI2(&pbtStreamBuffer[nBytesWritten], nAudiophileReplayGain); nBytesWritten += 2; pbtStreamBuffer[nBytesWritten] = nFlags; nBytesWritten++; if (nABRBitrate >= 255) pbtStreamBuffer[nBytesWritten] = 0xFF; else pbtStreamBuffer[nBytesWritten] = nABRBitrate; nBytesWritten++; pbtStreamBuffer[nBytesWritten] = enc_delay >> 4; /* works for win32, does it for unix? */ pbtStreamBuffer[nBytesWritten + 1] = (enc_delay << 4) + (enc_padding >> 8); pbtStreamBuffer[nBytesWritten + 2] = enc_padding; nBytesWritten += 3; pbtStreamBuffer[nBytesWritten] = nMisc; nBytesWritten++; pbtStreamBuffer[nBytesWritten++] = 0; /*unused in rev0 */ CreateI2(&pbtStreamBuffer[nBytesWritten], cfg->preset); nBytesWritten += 2; CreateI4(&pbtStreamBuffer[nBytesWritten], (int) nMusicLength); nBytesWritten += 4; CreateI2(&pbtStreamBuffer[nBytesWritten], nMusicCRC); nBytesWritten += 2; /*Calculate tag CRC.... must be done here, since it includes *previous information*/ for (i = 0; i < nBytesWritten; i++) crc = CRC_update_lookup(pbtStreamBuffer[i], crc); CreateI2(&pbtStreamBuffer[nBytesWritten], crc); nBytesWritten += 2; return nBytesWritten; } static long skipId3v2(FILE * fpStream) { size_t nbytes; long id3v2TagSize; unsigned char id3v2Header[10]; /* seek to the beginning of the stream */ if (fseek(fpStream, 0, SEEK_SET) != 0) { return -2; /* not seekable, abort */ } /* read 10 bytes in case there's an ID3 version 2 header here */ nbytes = fread(id3v2Header, 1, sizeof(id3v2Header), fpStream); if (nbytes != sizeof(id3v2Header)) { return -3; /* not readable, maybe opened Write-Only */ } /* does the stream begin with the ID3 version 2 file identifier? */ if (!strncmp((char *) id3v2Header, "ID3", 3)) { /* the tag size (minus the 10-byte header) is encoded into four * bytes where the most significant bit is clear in each byte */ id3v2TagSize = (((id3v2Header[6] & 0x7f) << 21) | ((id3v2Header[7] & 0x7f) << 14) | ((id3v2Header[8] & 0x7f) << 7) | (id3v2Header[9] & 0x7f)) + sizeof id3v2Header; } else { /* no ID3 version 2 tag in this stream */ id3v2TagSize = 0; } return id3v2TagSize; } size_t lame_get_lametag_frame(lame_global_flags const *gfp, unsigned char *buffer, size_t size) { lame_internal_flags *gfc; SessionConfig_t const *cfg; unsigned long stream_size; unsigned int nStreamIndex; uint8_t btToc[NUMTOCENTRIES]; if (gfp == 0) { return 0; } gfc = gfp->internal_flags; if (gfc == 0) { return 0; } if (!is_lame_internal_flags_valid(gfc)) { return 0; } cfg = &gfc->cfg; if (cfg->write_lame_tag == 0) { return 0; } if (gfc->VBR_seek_table.pos <= 0) { return 0; } if (size < gfc->VBR_seek_table.TotalFrameSize) { return gfc->VBR_seek_table.TotalFrameSize; } if (buffer == 0) { return 0; } memset(buffer, 0, gfc->VBR_seek_table.TotalFrameSize); /* 4 bytes frame header */ setLameTagFrameHeader(gfc, buffer); /* Clear all TOC entries */ memset(btToc, 0, sizeof(btToc)); if (cfg->free_format) { int i; for (i = 1; i < NUMTOCENTRIES; ++i) btToc[i] = 255 * i / 100; } else { Xing_seek_table(&gfc->VBR_seek_table, btToc); } #ifdef DEBUG_VBR_SEEKING_TABLE print_seeking(btToc); #endif /* Start writing the tag after the zero frame */ nStreamIndex = cfg->sideinfo_len; /* note! Xing header specifies that Xing data goes in the * ancillary data with NO ERROR PROTECTION. If error protecton * in enabled, the Xing data still starts at the same offset, * and now it is in sideinfo data block, and thus will not * decode correctly by non-Xing tag aware players */ if (cfg->error_protection) nStreamIndex -= 2; /* Put Vbr tag */ if (cfg->vbr == vbr_off) { buffer[nStreamIndex++] = VBRTag1[0]; buffer[nStreamIndex++] = VBRTag1[1]; buffer[nStreamIndex++] = VBRTag1[2]; buffer[nStreamIndex++] = VBRTag1[3]; } else { buffer[nStreamIndex++] = VBRTag0[0]; buffer[nStreamIndex++] = VBRTag0[1]; buffer[nStreamIndex++] = VBRTag0[2]; buffer[nStreamIndex++] = VBRTag0[3]; } /* Put header flags */ CreateI4(&buffer[nStreamIndex], FRAMES_FLAG + BYTES_FLAG + TOC_FLAG + VBR_SCALE_FLAG); nStreamIndex += 4; /* Put Total Number of frames */ CreateI4(&buffer[nStreamIndex], gfc->VBR_seek_table.nVbrNumFrames); nStreamIndex += 4; /* Put total audio stream size, including Xing/LAME Header */ stream_size = gfc->VBR_seek_table.nBytesWritten + gfc->VBR_seek_table.TotalFrameSize; CreateI4(&buffer[nStreamIndex], stream_size); nStreamIndex += 4; /* Put TOC */ memcpy(&buffer[nStreamIndex], btToc, sizeof(btToc)); nStreamIndex += sizeof(btToc); if (cfg->error_protection) { /* (jo) error_protection: add crc16 information to header */ CRC_writeheader(gfc, (char *) buffer); } { /*work out CRC so far: initially crc = 0 */ uint16_t crc = 0x00; unsigned int i; for (i = 0; i < nStreamIndex; i++) crc = CRC_update_lookup(buffer[i], crc); /*Put LAME VBR info */ nStreamIndex += PutLameVBR(gfp, stream_size, buffer + nStreamIndex, crc); } #ifdef DEBUG_VBRTAG { VBRTAGDATA TestHeader; GetVbrTag(&TestHeader, buffer); } #endif return gfc->VBR_seek_table.TotalFrameSize; } /*********************************************************************** * * PutVbrTag: Write final VBR tag to the file * Paramters: * lpszFileName: filename of MP3 bit stream * nVbrScale : encoder quality indicator (0..100) **************************************************************************** */ int PutVbrTag(lame_global_flags const *gfp, FILE * fpStream) { lame_internal_flags *gfc = gfp->internal_flags; long lFileSize; long id3v2TagSize; size_t nbytes; uint8_t buffer[MAXFRAMESIZE]; if (gfc->VBR_seek_table.pos <= 0) return -1; /* Seek to end of file */ fseek(fpStream, 0, SEEK_END); /* Get file size */ lFileSize = ftell(fpStream); /* Abort if file has zero length. Yes, it can happen :) */ if (lFileSize == 0) return -1; /* * The VBR tag may NOT be located at the beginning of the stream. * If an ID3 version 2 tag was added, then it must be skipped to write * the VBR tag data. */ id3v2TagSize = skipId3v2(fpStream); if (id3v2TagSize < 0) { return id3v2TagSize; } /*Seek to the beginning of the stream */ fseek(fpStream, id3v2TagSize, SEEK_SET); nbytes = lame_get_lametag_frame(gfp, buffer, sizeof(buffer)); if (nbytes > sizeof(buffer)) { return -1; } if (nbytes < 1) { return 0; } /* Put it all to disk again */ if (fwrite(buffer, nbytes, 1, fpStream) != 1) { return -1; } return 0; /* success */ } ���������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/tables.h����������������������������������������������������������������������000644 �001751 �001751 �00000004651 11561266675 017560� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MPEG layer 3 tables include file * * Copyright (c) 1999 Albert L Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_TABLES_H #define LAME_TABLES_H #if 0 typedef struct { unsigned char no; unsigned char width; unsigned char minval_2; float quiet_thr; float norm; float bark; } type1_t; typedef struct { unsigned char no; unsigned char width; float quiet_thr; float norm; float SNR; float bark; } type2_t; typedef struct { unsigned int no:5; unsigned int cbw:3; unsigned int bu:6; unsigned int bo:6; unsigned int w1_576:10; unsigned int w2_576:10; } type34_t; typedef struct { size_t len1; const type1_t *const tab1; size_t len2; const type2_t *const tab2; size_t len3; const type34_t *const tab3; size_t len4; const type34_t *const tab4; } type5_t; extern const type5_t table5[6]; #endif #define HTN 34 struct huffcodetab { const unsigned int xlen; /* max. x-index+ */ const unsigned int linmax; /* max number to be stored in linbits */ const uint16_t *table; /* pointer to array[xlen][ylen] */ const uint8_t *hlen; /* pointer to array[xlen][ylen] */ }; extern const struct huffcodetab ht[HTN]; /* global memory block */ /* array of all huffcodtable headers */ /* 0..31 Huffman code table 0..31 */ /* 32,33 count1-tables */ extern const uint8_t t32l[]; extern const uint8_t t33l[]; extern const uint32_t largetbl[16 * 16]; extern const uint32_t table23[3 * 3]; extern const uint32_t table56[4 * 4]; extern const int scfsi_band[5]; extern const int bitrate_table [3][16]; extern const int samplerate_table [3][ 4]; #endif /* LAME_TABLES_H */ ���������������������������������������������������������������������������������������lame-3.100/libmp3lame/vbrquantize.c�����������������������������������������������������������������000644 �001751 �001751 �00000133204 11714224343 020632� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 quantization * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 2000-2012 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: vbrquantize.c,v 1.142 2012/02/07 13:36:35 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "vbrquantize.h" #include "quantize_pvt.h" struct algo_s; typedef struct algo_s algo_t; typedef void (*alloc_sf_f) (const algo_t *, const int *, const int *, int); typedef uint8_t (*find_sf_f) (const FLOAT *, const FLOAT *, FLOAT, unsigned int, uint8_t); struct algo_s { alloc_sf_f alloc; find_sf_f find; const FLOAT *xr34orig; lame_internal_flags *gfc; gr_info *cod_info; int mingain_l; int mingain_s[3]; }; /* Remarks on optimizing compilers: * * the MSVC compiler may get into aliasing problems when accessing * memory through the fi_union. declaring it volatile does the trick here * * the calc_sfb_noise_* functions are not inlined because the intel compiler * optimized executeables won't work as expected anymore */ #ifdef _MSC_VER # if _MSC_VER < 1400 # define VOLATILE volatile # else # define VOLATILE # endif #else # define VOLATILE #endif typedef VOLATILE union { float f; int i; } fi_union; #ifdef TAKEHIRO_IEEE754_HACK #define DOUBLEX double #else #define DOUBLEX FLOAT #endif #define MAGIC_FLOAT_def (65536*(128)) #define MAGIC_INT_def 0x4b000000 #ifdef TAKEHIRO_IEEE754_HACK #else /********************************************************************* * XRPOW_FTOI is a macro to convert floats to ints. * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x] * ROUNDFAC= -0.0946 * * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x] * ROUNDFAC=0.4054 *********************************************************************/ # define QUANTFAC(rx) adj43[rx] # define ROUNDFAC_def 0.4054f # define XRPOW_FTOI(src,dest) ((dest) = (int)(src)) #endif static int const MAGIC_INT = MAGIC_INT_def; #ifndef TAKEHIRO_IEEE754_HACK static DOUBLEX const ROUNDFAC = ROUNDFAC_def; #endif static DOUBLEX const MAGIC_FLOAT = MAGIC_FLOAT_def; inline static float vec_max_c(const float * xr34, unsigned int bw) { float xfsf = 0; unsigned int i = bw >> 2u; unsigned int const remaining = (bw & 0x03u); while (i-- > 0) { if (xfsf < xr34[0]) { xfsf = xr34[0]; } if (xfsf < xr34[1]) { xfsf = xr34[1]; } if (xfsf < xr34[2]) { xfsf = xr34[2]; } if (xfsf < xr34[3]) { xfsf = xr34[3]; } xr34 += 4; } switch( remaining ) { case 3: if (xfsf < xr34[2]) xfsf = xr34[2]; case 2: if (xfsf < xr34[1]) xfsf = xr34[1]; case 1: if (xfsf < xr34[0]) xfsf = xr34[0]; default: break; } return xfsf; } inline static uint8_t find_lowest_scalefac(const FLOAT xr34) { uint8_t sf_ok = 255; uint8_t sf = 128, delsf = 64; uint8_t i; FLOAT const ixmax_val = IXMAX_VAL; for (i = 0; i < 8; ++i) { FLOAT const xfsf = ipow20[sf] * xr34; if (xfsf <= ixmax_val) { sf_ok = sf; sf -= delsf; } else { sf += delsf; } delsf >>= 1; } return sf_ok; } inline static void k_34_4(DOUBLEX x[4], int l3[4]) { #ifdef TAKEHIRO_IEEE754_HACK fi_union fi[4]; assert(x[0] <= IXMAX_VAL && x[1] <= IXMAX_VAL && x[2] <= IXMAX_VAL && x[3] <= IXMAX_VAL); x[0] += MAGIC_FLOAT; fi[0].f = x[0]; x[1] += MAGIC_FLOAT; fi[1].f = x[1]; x[2] += MAGIC_FLOAT; fi[2].f = x[2]; x[3] += MAGIC_FLOAT; fi[3].f = x[3]; fi[0].f = x[0] + adj43asm[fi[0].i - MAGIC_INT]; fi[1].f = x[1] + adj43asm[fi[1].i - MAGIC_INT]; fi[2].f = x[2] + adj43asm[fi[2].i - MAGIC_INT]; fi[3].f = x[3] + adj43asm[fi[3].i - MAGIC_INT]; l3[0] = fi[0].i - MAGIC_INT; l3[1] = fi[1].i - MAGIC_INT; l3[2] = fi[2].i - MAGIC_INT; l3[3] = fi[3].i - MAGIC_INT; #else assert(x[0] <= IXMAX_VAL && x[1] <= IXMAX_VAL && x[2] <= IXMAX_VAL && x[3] <= IXMAX_VAL); XRPOW_FTOI(x[0], l3[0]); XRPOW_FTOI(x[1], l3[1]); XRPOW_FTOI(x[2], l3[2]); XRPOW_FTOI(x[3], l3[3]); x[0] += QUANTFAC(l3[0]); x[1] += QUANTFAC(l3[1]); x[2] += QUANTFAC(l3[2]); x[3] += QUANTFAC(l3[3]); XRPOW_FTOI(x[0], l3[0]); XRPOW_FTOI(x[1], l3[1]); XRPOW_FTOI(x[2], l3[2]); XRPOW_FTOI(x[3], l3[3]); #endif } /* do call the calc_sfb_noise_* functions only with sf values * for which holds: sfpow34*xr34 <= IXMAX_VAL */ static FLOAT calc_sfb_noise_x34(const FLOAT * xr, const FLOAT * xr34, unsigned int bw, uint8_t sf) { DOUBLEX x[4]; int l3[4]; const FLOAT sfpow = pow20[sf + Q_MAX2]; /*pow(2.0,sf/4.0); */ const FLOAT sfpow34 = ipow20[sf]; /*pow(sfpow,-3.0/4.0); */ FLOAT xfsf = 0; unsigned int i = bw >> 2u; unsigned int const remaining = (bw & 0x03u); while (i-- > 0) { x[0] = sfpow34 * xr34[0]; x[1] = sfpow34 * xr34[1]; x[2] = sfpow34 * xr34[2]; x[3] = sfpow34 * xr34[3]; k_34_4(x, l3); x[0] = fabsf(xr[0]) - sfpow * pow43[l3[0]]; x[1] = fabsf(xr[1]) - sfpow * pow43[l3[1]]; x[2] = fabsf(xr[2]) - sfpow * pow43[l3[2]]; x[3] = fabsf(xr[3]) - sfpow * pow43[l3[3]]; xfsf += (x[0] * x[0] + x[1] * x[1]) + (x[2] * x[2] + x[3] * x[3]); xr += 4; xr34 += 4; } if (remaining) { x[0] = x[1] = x[2] = x[3] = 0; switch( remaining ) { case 3: x[2] = sfpow34 * xr34[2]; case 2: x[1] = sfpow34 * xr34[1]; case 1: x[0] = sfpow34 * xr34[0]; } k_34_4(x, l3); x[0] = x[1] = x[2] = x[3] = 0; switch( remaining ) { case 3: x[2] = fabsf(xr[2]) - sfpow * pow43[l3[2]]; case 2: x[1] = fabsf(xr[1]) - sfpow * pow43[l3[1]]; case 1: x[0] = fabsf(xr[0]) - sfpow * pow43[l3[0]]; } xfsf += (x[0] * x[0] + x[1] * x[1]) + (x[2] * x[2] + x[3] * x[3]); } return xfsf; } struct calc_noise_cache { int valid; FLOAT value; }; typedef struct calc_noise_cache calc_noise_cache_t; static uint8_t tri_calc_sfb_noise_x34(const FLOAT * xr, const FLOAT * xr34, FLOAT l3_xmin, unsigned int bw, uint8_t sf, calc_noise_cache_t * did_it) { if (did_it[sf].valid == 0) { did_it[sf].valid = 1; did_it[sf].value = calc_sfb_noise_x34(xr, xr34, bw, sf); } if (l3_xmin < did_it[sf].value) { return 1; } if (sf < 255) { uint8_t const sf_x = sf + 1; if (did_it[sf_x].valid == 0) { did_it[sf_x].valid = 1; did_it[sf_x].value = calc_sfb_noise_x34(xr, xr34, bw, sf_x); } if (l3_xmin < did_it[sf_x].value) { return 1; } } if (sf > 0) { uint8_t const sf_x = sf - 1; if (did_it[sf_x].valid == 0) { did_it[sf_x].valid = 1; did_it[sf_x].value = calc_sfb_noise_x34(xr, xr34, bw, sf_x); } if (l3_xmin < did_it[sf_x].value) { return 1; } } return 0; } /** * Robert Hegemann 2001-05-01 * calculates quantization step size determined by allowed masking */ static int calc_scalefac(FLOAT l3_xmin, int bw) { FLOAT const c = 5.799142446; /* 10 * 10^(2/3) * log10(4/3) */ return 210 + (int) (c * log10f(l3_xmin / bw) - .5f); } static uint8_t guess_scalefac_x34(const FLOAT * xr, const FLOAT * xr34, FLOAT l3_xmin, unsigned int bw, uint8_t sf_min) { int const guess = calc_scalefac(l3_xmin, bw); if (guess < sf_min) return sf_min; if (guess >= 255) return 255; (void) xr; (void) xr34; return guess; } /* the find_scalefac* routines calculate * a quantization step size which would * introduce as much noise as is allowed. * The larger the step size the more * quantization noise we'll get. The * scalefactors are there to lower the * global step size, allowing limited * differences in quantization step sizes * per band (shaping the noise). */ static uint8_t find_scalefac_x34(const FLOAT * xr, const FLOAT * xr34, FLOAT l3_xmin, unsigned int bw, uint8_t sf_min) { calc_noise_cache_t did_it[256]; uint8_t sf = 128, sf_ok = 255, delsf = 128, seen_good_one = 0, i; memset(did_it, 0, sizeof(did_it)); for (i = 0; i < 8; ++i) { delsf >>= 1; if (sf <= sf_min) { sf += delsf; } else { uint8_t const bad = tri_calc_sfb_noise_x34(xr, xr34, l3_xmin, bw, sf, did_it); if (bad) { /* distortion. try a smaller scalefactor */ sf -= delsf; } else { sf_ok = sf; sf += delsf; seen_good_one = 1; } } } /* returning a scalefac without distortion, if possible */ if (seen_good_one > 0) { sf = sf_ok; } if (sf <= sf_min) { sf = sf_min; } return sf; } /*********************************************************************** * * calc_short_block_vbr_sf() * calc_long_block_vbr_sf() * * Mark Taylor 2000-??-?? * Robert Hegemann 2000-10-25 made functions of it * ***********************************************************************/ /* a variation for vbr-mtrh */ static int block_sf(algo_t * that, const FLOAT l3_xmin[SFBMAX], int vbrsf[SFBMAX], int vbrsfmin[SFBMAX]) { FLOAT max_xr34; const FLOAT *const xr = &that->cod_info->xr[0]; const FLOAT *const xr34_orig = &that->xr34orig[0]; const int *const width = &that->cod_info->width[0]; const char *const energy_above_cutoff = &that->cod_info->energy_above_cutoff[0]; unsigned int const max_nonzero_coeff = (unsigned int) that->cod_info->max_nonzero_coeff; uint8_t maxsf = 0; int sfb = 0, m_o = -1; unsigned int j = 0, i = 0; int const psymax = that->cod_info->psymax; assert(that->cod_info->max_nonzero_coeff >= 0); that->mingain_l = 0; that->mingain_s[0] = 0; that->mingain_s[1] = 0; that->mingain_s[2] = 0; while (j <= max_nonzero_coeff) { unsigned int const w = (unsigned int) width[sfb]; unsigned int const m = (unsigned int) (max_nonzero_coeff - j + 1); unsigned int l = w; uint8_t m1, m2; if (l > m) { l = m; } max_xr34 = vec_max_c(&xr34_orig[j], l); m1 = find_lowest_scalefac(max_xr34); vbrsfmin[sfb] = m1; if (that->mingain_l < m1) { that->mingain_l = m1; } if (that->mingain_s[i] < m1) { that->mingain_s[i] = m1; } if (++i > 2) { i = 0; } if (sfb < psymax && w > 2) { /* mpeg2.5 at 8 kHz doesn't use all scalefactors, unused have width 2 */ if (energy_above_cutoff[sfb]) { m2 = that->find(&xr[j], &xr34_orig[j], l3_xmin[sfb], l, m1); #if 0 if (0) { /** Robert Hegemann 2007-09-29: * It seems here is some more potential for speed improvements. * Current find method does 11-18 quantization calculations. * Using a "good guess" may help to reduce this amount. */ uint8_t guess = calc_scalefac(l3_xmin[sfb], l); DEBUGF(that->gfc, "sfb=%3d guess=%3d found=%3d diff=%3d\n", sfb, guess, m2, m2 - guess); } #endif if (maxsf < m2) { maxsf = m2; } if (m_o < m2 && m2 < 255) { m_o = m2; } } else { m2 = 255; maxsf = 255; } } else { if (maxsf < m1) { maxsf = m1; } m2 = maxsf; } vbrsf[sfb] = m2; ++sfb; j += w; } for (; sfb < SFBMAX; ++sfb) { vbrsf[sfb] = maxsf; vbrsfmin[sfb] = 0; } if (m_o > -1) { maxsf = m_o; for (sfb = 0; sfb < SFBMAX; ++sfb) { if (vbrsf[sfb] == 255) { vbrsf[sfb] = m_o; } } } return maxsf; } /*********************************************************************** * * quantize xr34 based on scalefactors * * block_xr34 * * Mark Taylor 2000-??-?? * Robert Hegemann 2000-10-20 made functions of them * ***********************************************************************/ static void quantize_x34(const algo_t * that) { DOUBLEX x[4]; const FLOAT *xr34_orig = that->xr34orig; gr_info *const cod_info = that->cod_info; int const ifqstep = (cod_info->scalefac_scale == 0) ? 2 : 4; int *l3 = cod_info->l3_enc; unsigned int j = 0, sfb = 0; unsigned int const max_nonzero_coeff = (unsigned int) cod_info->max_nonzero_coeff; assert(cod_info->max_nonzero_coeff >= 0); assert(cod_info->max_nonzero_coeff < 576); while (j <= max_nonzero_coeff) { int const s = (cod_info->scalefac[sfb] + (cod_info->preflag ? pretab[sfb] : 0)) * ifqstep + cod_info->subblock_gain[cod_info->window[sfb]] * 8; uint8_t const sfac = (uint8_t) (cod_info->global_gain - s); FLOAT const sfpow34 = ipow20[sfac]; unsigned int const w = (unsigned int) cod_info->width[sfb]; unsigned int const m = (unsigned int) (max_nonzero_coeff - j + 1); unsigned int i, remaining; assert((cod_info->global_gain - s) >= 0); assert(cod_info->width[sfb] >= 0); j += w; ++sfb; i = (w <= m) ? w : m; remaining = (i & 0x03u); i >>= 2u; while (i-- > 0) { x[0] = sfpow34 * xr34_orig[0]; x[1] = sfpow34 * xr34_orig[1]; x[2] = sfpow34 * xr34_orig[2]; x[3] = sfpow34 * xr34_orig[3]; k_34_4(x, l3); l3 += 4; xr34_orig += 4; } if (remaining) { int tmp_l3[4]; x[0] = x[1] = x[2] = x[3] = 0; switch( remaining ) { case 3: x[2] = sfpow34 * xr34_orig[2]; case 2: x[1] = sfpow34 * xr34_orig[1]; case 1: x[0] = sfpow34 * xr34_orig[0]; } k_34_4(x, tmp_l3); switch( remaining ) { case 3: l3[2] = tmp_l3[2]; case 2: l3[1] = tmp_l3[1]; case 1: l3[0] = tmp_l3[0]; } l3 += remaining; xr34_orig += remaining; } } } static const uint8_t max_range_short[SBMAX_s * 3] = { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0 }; static const uint8_t max_range_long[SBMAX_l] = { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0 }; static const uint8_t max_range_long_lsf_pretab[SBMAX_l] = { 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* sfb=0..5 scalefac < 16 sfb>5 scalefac < 8 ifqstep = ( cod_info->scalefac_scale == 0 ) ? 2 : 4; ol_sf = (cod_info->global_gain-210.0); ol_sf -= 8*cod_info->subblock_gain[i]; ol_sf -= ifqstep*scalefac[gr][ch].s[sfb][i]; */ static void set_subblock_gain(gr_info * cod_info, const int mingain_s[3], int sf[]) { const int maxrange1 = 15, maxrange2 = 7; const int ifqstepShift = (cod_info->scalefac_scale == 0) ? 1 : 2; int *const sbg = cod_info->subblock_gain; unsigned int const psymax = (unsigned int) cod_info->psymax; unsigned int psydiv = 18; int sbg0, sbg1, sbg2; unsigned int sfb, i; int min_sbg = 7; if (psydiv > psymax) { psydiv = psymax; } for (i = 0; i < 3; ++i) { int maxsf1 = 0, maxsf2 = 0, minsf = 1000; /* see if we should use subblock gain */ for (sfb = i; sfb < psydiv; sfb += 3) { /* part 1 */ int const v = -sf[sfb]; if (maxsf1 < v) { maxsf1 = v; } if (minsf > v) { minsf = v; } } for (; sfb < SFBMAX; sfb += 3) { /* part 2 */ int const v = -sf[sfb]; if (maxsf2 < v) { maxsf2 = v; } if (minsf > v) { minsf = v; } } /* boost subblock gain as little as possible so we can * reach maxsf1 with scalefactors * 8*sbg >= maxsf1 */ { int const m1 = maxsf1 - (maxrange1 << ifqstepShift); int const m2 = maxsf2 - (maxrange2 << ifqstepShift); maxsf1 = Max(m1, m2); } if (minsf > 0) { sbg[i] = minsf >> 3; } else { sbg[i] = 0; } if (maxsf1 > 0) { int const m1 = sbg[i]; int const m2 = (maxsf1 + 7) >> 3; sbg[i] = Max(m1, m2); } if (sbg[i] > 0 && mingain_s[i] > (cod_info->global_gain - sbg[i] * 8)) { sbg[i] = (cod_info->global_gain - mingain_s[i]) >> 3; } if (sbg[i] > 7) { sbg[i] = 7; } if (min_sbg > sbg[i]) { min_sbg = sbg[i]; } } sbg0 = sbg[0] * 8; sbg1 = sbg[1] * 8; sbg2 = sbg[2] * 8; for (sfb = 0; sfb < SFBMAX; sfb += 3) { sf[sfb + 0] += sbg0; sf[sfb + 1] += sbg1; sf[sfb + 2] += sbg2; } if (min_sbg > 0) { for (i = 0; i < 3; ++i) { sbg[i] -= min_sbg; } cod_info->global_gain -= min_sbg * 8; } } /* ifqstep = ( cod_info->scalefac_scale == 0 ) ? 2 : 4; ol_sf = (cod_info->global_gain-210.0); ol_sf -= ifqstep*scalefac[gr][ch].l[sfb]; if (cod_info->preflag && sfb>=11) ol_sf -= ifqstep*pretab[sfb]; */ static void set_scalefacs(gr_info * cod_info, const int *vbrsfmin, int sf[], const uint8_t * max_range) { const int ifqstep = (cod_info->scalefac_scale == 0) ? 2 : 4; const int ifqstepShift = (cod_info->scalefac_scale == 0) ? 1 : 2; int *const scalefac = cod_info->scalefac; int const sfbmax = cod_info->sfbmax; int sfb; int const *const sbg = cod_info->subblock_gain; int const *const window = cod_info->window; int const preflag = cod_info->preflag; if (preflag) { for (sfb = 11; sfb < sfbmax; ++sfb) { sf[sfb] += pretab[sfb] * ifqstep; } } for (sfb = 0; sfb < sfbmax; ++sfb) { int const gain = cod_info->global_gain - (sbg[window[sfb]] * 8) - ((preflag ? pretab[sfb] : 0) * ifqstep); if (sf[sfb] < 0) { int const m = gain - vbrsfmin[sfb]; /* ifqstep*scalefac >= -sf[sfb], so round UP */ scalefac[sfb] = (ifqstep - 1 - sf[sfb]) >> ifqstepShift; if (scalefac[sfb] > max_range[sfb]) { scalefac[sfb] = max_range[sfb]; } if (scalefac[sfb] > 0 && (scalefac[sfb] << ifqstepShift) > m) { scalefac[sfb] = m >> ifqstepShift; } } else { scalefac[sfb] = 0; } } for (; sfb < SFBMAX; ++sfb) { scalefac[sfb] = 0; /* sfb21 */ } } #ifndef NDEBUG static int checkScalefactor(const gr_info * cod_info, const int vbrsfmin[SFBMAX]) { int const ifqstep = cod_info->scalefac_scale == 0 ? 2 : 4; int sfb; for (sfb = 0; sfb < cod_info->psymax; ++sfb) { const int s = ((cod_info->scalefac[sfb] + (cod_info->preflag ? pretab[sfb] : 0)) * ifqstep) + cod_info->subblock_gain[cod_info->window[sfb]] * 8; if ((cod_info->global_gain - s) < vbrsfmin[sfb]) { /* fprintf( stdout, "sf %d\n", sfb ); fprintf( stdout, "min %d\n", vbrsfmin[sfb] ); fprintf( stdout, "ggain %d\n", cod_info->global_gain ); fprintf( stdout, "scalefac %d\n", cod_info->scalefac[sfb] ); fprintf( stdout, "pretab %d\n", (cod_info->preflag ? pretab[sfb] : 0) ); fprintf( stdout, "scale %d\n", (cod_info->scalefac_scale + 1) ); fprintf( stdout, "subgain %d\n", cod_info->subblock_gain[cod_info->window[sfb]] * 8 ); fflush( stdout ); exit(-1); */ return 0; } } return 1; } #endif /****************************************************************** * * short block scalefacs * ******************************************************************/ static void short_block_constrain(const algo_t * that, const int vbrsf[SFBMAX], const int vbrsfmin[SFBMAX], int vbrmax) { gr_info *const cod_info = that->cod_info; lame_internal_flags const *const gfc = that->gfc; SessionConfig_t const *const cfg = &gfc->cfg; int const maxminsfb = that->mingain_l; int mover, maxover0 = 0, maxover1 = 0, delta = 0; int v, v0, v1; int sfb; int const psymax = cod_info->psymax; for (sfb = 0; sfb < psymax; ++sfb) { assert(vbrsf[sfb] >= vbrsfmin[sfb]); v = vbrmax - vbrsf[sfb]; if (delta < v) { delta = v; } v0 = v - (4 * 14 + 2 * max_range_short[sfb]); v1 = v - (4 * 14 + 4 * max_range_short[sfb]); if (maxover0 < v0) { maxover0 = v0; } if (maxover1 < v1) { maxover1 = v1; } } if (cfg->noise_shaping == 2) { /* allow scalefac_scale=1 */ mover = Min(maxover0, maxover1); } else { mover = maxover0; } if (delta > mover) { delta = mover; } vbrmax -= delta; maxover0 -= mover; maxover1 -= mover; if (maxover0 == 0) { cod_info->scalefac_scale = 0; } else if (maxover1 == 0) { cod_info->scalefac_scale = 1; } if (vbrmax < maxminsfb) { vbrmax = maxminsfb; } cod_info->global_gain = vbrmax; if (cod_info->global_gain < 0) { cod_info->global_gain = 0; } else if (cod_info->global_gain > 255) { cod_info->global_gain = 255; } { int sf_temp[SFBMAX]; for (sfb = 0; sfb < SFBMAX; ++sfb) { sf_temp[sfb] = vbrsf[sfb] - vbrmax; } set_subblock_gain(cod_info, &that->mingain_s[0], sf_temp); set_scalefacs(cod_info, vbrsfmin, sf_temp, max_range_short); } assert(checkScalefactor(cod_info, vbrsfmin)); } /****************************************************************** * * long block scalefacs * ******************************************************************/ static void long_block_constrain(const algo_t * that, const int vbrsf[SFBMAX], const int vbrsfmin[SFBMAX], int vbrmax) { gr_info *const cod_info = that->cod_info; lame_internal_flags const *const gfc = that->gfc; SessionConfig_t const *const cfg = &gfc->cfg; uint8_t const *max_rangep; int const maxminsfb = that->mingain_l; int sfb; int maxover0, maxover1, maxover0p, maxover1p, mover, delta = 0; int v, v0, v1, v0p, v1p, vm0p = 1, vm1p = 1; int const psymax = cod_info->psymax; max_rangep = cfg->mode_gr == 2 ? max_range_long : max_range_long_lsf_pretab; maxover0 = 0; maxover1 = 0; maxover0p = 0; /* pretab */ maxover1p = 0; /* pretab */ for (sfb = 0; sfb < psymax; ++sfb) { assert(vbrsf[sfb] >= vbrsfmin[sfb]); v = vbrmax - vbrsf[sfb]; if (delta < v) { delta = v; } v0 = v - 2 * max_range_long[sfb]; v1 = v - 4 * max_range_long[sfb]; v0p = v - 2 * (max_rangep[sfb] + pretab[sfb]); v1p = v - 4 * (max_rangep[sfb] + pretab[sfb]); if (maxover0 < v0) { maxover0 = v0; } if (maxover1 < v1) { maxover1 = v1; } if (maxover0p < v0p) { maxover0p = v0p; } if (maxover1p < v1p) { maxover1p = v1p; } } if (vm0p == 1) { int gain = vbrmax - maxover0p; if (gain < maxminsfb) { gain = maxminsfb; } for (sfb = 0; sfb < psymax; ++sfb) { int const a = (gain - vbrsfmin[sfb]) - 2 * pretab[sfb]; if (a <= 0) { vm0p = 0; vm1p = 0; break; } } } if (vm1p == 1) { int gain = vbrmax - maxover1p; if (gain < maxminsfb) { gain = maxminsfb; } for (sfb = 0; sfb < psymax; ++sfb) { int const b = (gain - vbrsfmin[sfb]) - 4 * pretab[sfb]; if (b <= 0) { vm1p = 0; break; } } } if (vm0p == 0) { maxover0p = maxover0; } if (vm1p == 0) { maxover1p = maxover1; } if (cfg->noise_shaping != 2) { maxover1 = maxover0; maxover1p = maxover0p; } mover = Min(maxover0, maxover0p); mover = Min(mover, maxover1); mover = Min(mover, maxover1p); if (delta > mover) { delta = mover; } vbrmax -= delta; if (vbrmax < maxminsfb) { vbrmax = maxminsfb; } maxover0 -= mover; maxover0p -= mover; maxover1 -= mover; maxover1p -= mover; if (maxover0 == 0) { cod_info->scalefac_scale = 0; cod_info->preflag = 0; max_rangep = max_range_long; } else if (maxover0p == 0) { cod_info->scalefac_scale = 0; cod_info->preflag = 1; } else if (maxover1 == 0) { cod_info->scalefac_scale = 1; cod_info->preflag = 0; max_rangep = max_range_long; } else if (maxover1p == 0) { cod_info->scalefac_scale = 1; cod_info->preflag = 1; } else { assert(0); /* this should not happen */ } cod_info->global_gain = vbrmax; if (cod_info->global_gain < 0) { cod_info->global_gain = 0; } else if (cod_info->global_gain > 255) { cod_info->global_gain = 255; } { int sf_temp[SFBMAX]; for (sfb = 0; sfb < SFBMAX; ++sfb) { sf_temp[sfb] = vbrsf[sfb] - vbrmax; } set_scalefacs(cod_info, vbrsfmin, sf_temp, max_rangep); } assert(checkScalefactor(cod_info, vbrsfmin)); } static void bitcount(const algo_t * that) { int rc = scale_bitcount(that->gfc, that->cod_info); if (rc == 0) { return; } /* this should not happen due to the way the scalefactors are selected */ ERRORF(that->gfc, "INTERNAL ERROR IN VBR NEW CODE (986), please send bug report\n"); exit(-1); } static int quantizeAndCountBits(const algo_t * that) { quantize_x34(that); that->cod_info->part2_3_length = noquant_count_bits(that->gfc, that->cod_info, 0); return that->cod_info->part2_3_length; } static int tryGlobalStepsize(const algo_t * that, const int sfwork[SFBMAX], const int vbrsfmin[SFBMAX], int delta) { FLOAT const xrpow_max = that->cod_info->xrpow_max; int sftemp[SFBMAX], i, nbits; int gain, vbrmax = 0; for (i = 0; i < SFBMAX; ++i) { gain = sfwork[i] + delta; if (gain < vbrsfmin[i]) { gain = vbrsfmin[i]; } if (gain > 255) { gain = 255; } if (vbrmax < gain) { vbrmax = gain; } sftemp[i] = gain; } that->alloc(that, sftemp, vbrsfmin, vbrmax); bitcount(that); nbits = quantizeAndCountBits(that); that->cod_info->xrpow_max = xrpow_max; return nbits; } static void searchGlobalStepsizeMax(const algo_t * that, const int sfwork[SFBMAX], const int vbrsfmin[SFBMAX], int target) { gr_info const *const cod_info = that->cod_info; const int gain = cod_info->global_gain; int curr = gain; int gain_ok = 1024; int nbits = LARGE_BITS; int l = gain, r = 512; assert(gain >= 0); while (l <= r) { curr = (l + r) >> 1; nbits = tryGlobalStepsize(that, sfwork, vbrsfmin, curr - gain); if (nbits == 0 || (nbits + cod_info->part2_length) < target) { r = curr - 1; gain_ok = curr; } else { l = curr + 1; if (gain_ok == 1024) { gain_ok = curr; } } } if (gain_ok != curr) { curr = gain_ok; nbits = tryGlobalStepsize(that, sfwork, vbrsfmin, curr - gain); } } static int sfDepth(const int sfwork[SFBMAX]) { int m = 0; unsigned int i, j; for (j = SFBMAX, i = 0; j > 0; --j, ++i) { int const di = 255 - sfwork[i]; if (m < di) { m = di; } assert(sfwork[i] >= 0); assert(sfwork[i] <= 255); } assert(m >= 0); assert(m <= 255); return m; } static void cutDistribution(const int sfwork[SFBMAX], int sf_out[SFBMAX], int cut) { unsigned int i, j; for (j = SFBMAX, i = 0; j > 0; --j, ++i) { int const x = sfwork[i]; sf_out[i] = x < cut ? x : cut; } } static int flattenDistribution(const int sfwork[SFBMAX], int sf_out[SFBMAX], int dm, int k, int p) { unsigned int i, j; int x, sfmax = 0; if (dm > 0) { for (j = SFBMAX, i = 0; j > 0; --j, ++i) { int const di = p - sfwork[i]; x = sfwork[i] + (k * di) / dm; if (x < 0) { x = 0; } else { if (x > 255) { x = 255; } } sf_out[i] = x; if (sfmax < x) { sfmax = x; } } } else { for (j = SFBMAX, i = 0; j > 0u; --j, ++i) { x = sfwork[i]; sf_out[i] = x; if (sfmax < x) { sfmax = x; } } } return sfmax; } static int tryThatOne(algo_t const* that, const int sftemp[SFBMAX], const int vbrsfmin[SFBMAX], int vbrmax) { FLOAT const xrpow_max = that->cod_info->xrpow_max; int nbits = LARGE_BITS; that->alloc(that, sftemp, vbrsfmin, vbrmax); bitcount(that); nbits = quantizeAndCountBits(that); nbits += that->cod_info->part2_length; that->cod_info->xrpow_max = xrpow_max; return nbits; } static void outOfBitsStrategy(algo_t const* that, const int sfwork[SFBMAX], const int vbrsfmin[SFBMAX], int target) { int wrk[SFBMAX]; int const dm = sfDepth(sfwork); int const p = that->cod_info->global_gain; int nbits; /* PART 1 */ { int bi = dm / 2; int bi_ok = -1; int bu = 0; int bo = dm; for (;;) { int const sfmax = flattenDistribution(sfwork, wrk, dm, bi, p); nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); if (nbits <= target) { bi_ok = bi; bo = bi - 1; } else { bu = bi + 1; } if (bu <= bo) { bi = (bu + bo) / 2; } else { break; } } if (bi_ok >= 0) { if (bi != bi_ok) { int const sfmax = flattenDistribution(sfwork, wrk, dm, bi_ok, p); nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); } return; } } /* PART 2: */ { int bi = (255 + p) / 2; int bi_ok = -1; int bu = p; int bo = 255; for (;;) { int const sfmax = flattenDistribution(sfwork, wrk, dm, dm, bi); nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); if (nbits <= target) { bi_ok = bi; bo = bi - 1; } else { bu = bi + 1; } if (bu <= bo) { bi = (bu + bo) / 2; } else { break; } } if (bi_ok >= 0) { if (bi != bi_ok) { int const sfmax = flattenDistribution(sfwork, wrk, dm, dm, bi_ok); nbits = tryThatOne(that, wrk, vbrsfmin, sfmax); } return; } } /* fall back to old code, likely to be never called */ searchGlobalStepsizeMax(that, wrk, vbrsfmin, target); } static int reduce_bit_usage(lame_internal_flags * gfc, int gr, int ch #if 0 , const FLOAT xr34orig[576], const FLOAT l3_xmin[SFBMAX], int maxbits #endif ) { SessionConfig_t const *const cfg = &gfc->cfg; gr_info *const cod_info = &gfc->l3_side.tt[gr][ch]; /* try some better scalefac storage */ best_scalefac_store(gfc, gr, ch, &gfc->l3_side); /* best huffman_divide may save some bits too */ if (cfg->use_best_huffman == 1) best_huffman_divide(gfc, cod_info); return cod_info->part2_3_length + cod_info->part2_length; } int VBR_encode_frame(lame_internal_flags * gfc, const FLOAT xr34orig[2][2][576], const FLOAT l3_xmin[2][2][SFBMAX], const int max_bits[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; int sfwork_[2][2][SFBMAX]; int vbrsfmin_[2][2][SFBMAX]; algo_t that_[2][2]; int const ngr = cfg->mode_gr; int const nch = cfg->channels_out; int max_nbits_ch[2][2] = {{0, 0}, {0 ,0}}; int max_nbits_gr[2] = {0, 0}; int max_nbits_fr = 0; int use_nbits_ch[2][2] = {{MAX_BITS_PER_CHANNEL+1, MAX_BITS_PER_CHANNEL+1} ,{MAX_BITS_PER_CHANNEL+1, MAX_BITS_PER_CHANNEL+1}}; int use_nbits_gr[2] = { MAX_BITS_PER_GRANULE+1, MAX_BITS_PER_GRANULE+1 }; int use_nbits_fr = MAX_BITS_PER_GRANULE+MAX_BITS_PER_GRANULE; int gr, ch; int ok, sum_fr; /* set up some encoding parameters */ for (gr = 0; gr < ngr; ++gr) { max_nbits_gr[gr] = 0; for (ch = 0; ch < nch; ++ch) { max_nbits_ch[gr][ch] = max_bits[gr][ch]; use_nbits_ch[gr][ch] = 0; max_nbits_gr[gr] += max_bits[gr][ch]; max_nbits_fr += max_bits[gr][ch]; that_[gr][ch].find = (cfg->full_outer_loop < 0) ? guess_scalefac_x34 : find_scalefac_x34; that_[gr][ch].gfc = gfc; that_[gr][ch].cod_info = &gfc->l3_side.tt[gr][ch]; that_[gr][ch].xr34orig = xr34orig[gr][ch]; if (that_[gr][ch].cod_info->block_type == SHORT_TYPE) { that_[gr][ch].alloc = short_block_constrain; } else { that_[gr][ch].alloc = long_block_constrain; } } /* for ch */ } /* searches scalefactors */ for (gr = 0; gr < ngr; ++gr) { for (ch = 0; ch < nch; ++ch) { if (max_bits[gr][ch] > 0) { algo_t *that = &that_[gr][ch]; int *sfwork = sfwork_[gr][ch]; int *vbrsfmin = vbrsfmin_[gr][ch]; int vbrmax; vbrmax = block_sf(that, l3_xmin[gr][ch], sfwork, vbrsfmin); that->alloc(that, sfwork, vbrsfmin, vbrmax); bitcount(that); } else { /* xr contains no energy * l3_enc, our encoding data, will be quantized to zero * continue with next channel */ } } /* for ch */ } /* encode 'as is' */ use_nbits_fr = 0; for (gr = 0; gr < ngr; ++gr) { use_nbits_gr[gr] = 0; for (ch = 0; ch < nch; ++ch) { algo_t const *that = &that_[gr][ch]; if (max_bits[gr][ch] > 0) { memset(&that->cod_info->l3_enc[0], 0, sizeof(that->cod_info->l3_enc)); (void) quantizeAndCountBits(that); } else { /* xr contains no energy * l3_enc, our encoding data, will be quantized to zero * continue with next channel */ } use_nbits_ch[gr][ch] = reduce_bit_usage(gfc, gr, ch); use_nbits_gr[gr] += use_nbits_ch[gr][ch]; } /* for ch */ use_nbits_fr += use_nbits_gr[gr]; } /* check bit constrains */ if (use_nbits_fr <= max_nbits_fr) { ok = 1; for (gr = 0; gr < ngr; ++gr) { if (use_nbits_gr[gr] > MAX_BITS_PER_GRANULE) { /* violates the rule that every granule has to use no more * bits than MAX_BITS_PER_GRANULE */ ok = 0; } for (ch = 0; ch < nch; ++ch) { if (use_nbits_ch[gr][ch] > MAX_BITS_PER_CHANNEL) { /* violates the rule that every gr_ch has to use no more * bits than MAX_BITS_PER_CHANNEL * * This isn't explicitly stated in the ISO docs, but the * part2_3_length field has only 12 bits, that makes it * up to a maximum size of 4095 bits!!! */ ok = 0; } } } if (ok) { return use_nbits_fr; } } /* OK, we are in trouble and have to define how many bits are * to be used for each granule */ { ok = 1; sum_fr = 0; for (gr = 0; gr < ngr; ++gr) { max_nbits_gr[gr] = 0; for (ch = 0; ch < nch; ++ch) { if (use_nbits_ch[gr][ch] > MAX_BITS_PER_CHANNEL) { max_nbits_ch[gr][ch] = MAX_BITS_PER_CHANNEL; } else { max_nbits_ch[gr][ch] = use_nbits_ch[gr][ch]; } max_nbits_gr[gr] += max_nbits_ch[gr][ch]; } if (max_nbits_gr[gr] > MAX_BITS_PER_GRANULE) { float f[2] = {0.0f, 0.0f}, s = 0.0f; for (ch = 0; ch < nch; ++ch) { if (max_nbits_ch[gr][ch] > 0) { f[ch] = sqrt(sqrt(max_nbits_ch[gr][ch])); s += f[ch]; } else { f[ch] = 0; } } for (ch = 0; ch < nch; ++ch) { if (s > 0) { max_nbits_ch[gr][ch] = MAX_BITS_PER_GRANULE * f[ch] / s; } else { max_nbits_ch[gr][ch] = 0; } } if (nch > 1) { if (max_nbits_ch[gr][0] > use_nbits_ch[gr][0] + 32) { max_nbits_ch[gr][1] += max_nbits_ch[gr][0]; max_nbits_ch[gr][1] -= use_nbits_ch[gr][0] + 32; max_nbits_ch[gr][0] = use_nbits_ch[gr][0] + 32; } if (max_nbits_ch[gr][1] > use_nbits_ch[gr][1] + 32) { max_nbits_ch[gr][0] += max_nbits_ch[gr][1]; max_nbits_ch[gr][0] -= use_nbits_ch[gr][1] + 32; max_nbits_ch[gr][1] = use_nbits_ch[gr][1] + 32; } if (max_nbits_ch[gr][0] > MAX_BITS_PER_CHANNEL) { max_nbits_ch[gr][0] = MAX_BITS_PER_CHANNEL; } if (max_nbits_ch[gr][1] > MAX_BITS_PER_CHANNEL) { max_nbits_ch[gr][1] = MAX_BITS_PER_CHANNEL; } } max_nbits_gr[gr] = 0; for (ch = 0; ch < nch; ++ch) { max_nbits_gr[gr] += max_nbits_ch[gr][ch]; } } sum_fr += max_nbits_gr[gr]; } if (sum_fr > max_nbits_fr) { { float f[2] = {0.0f, 0.0f}, s = 0.0f; for (gr = 0; gr < ngr; ++gr) { if (max_nbits_gr[gr] > 0) { f[gr] = sqrt(max_nbits_gr[gr]); s += f[gr]; } else { f[gr] = 0; } } for (gr = 0; gr < ngr; ++gr) { if (s > 0) { max_nbits_gr[gr] = max_nbits_fr * f[gr] / s; } else { max_nbits_gr[gr] = 0; } } } if (ngr > 1) { if (max_nbits_gr[0] > use_nbits_gr[0] + 125) { max_nbits_gr[1] += max_nbits_gr[0]; max_nbits_gr[1] -= use_nbits_gr[0] + 125; max_nbits_gr[0] = use_nbits_gr[0] + 125; } if (max_nbits_gr[1] > use_nbits_gr[1] + 125) { max_nbits_gr[0] += max_nbits_gr[1]; max_nbits_gr[0] -= use_nbits_gr[1] + 125; max_nbits_gr[1] = use_nbits_gr[1] + 125; } for (gr = 0; gr < ngr; ++gr) { if (max_nbits_gr[gr] > MAX_BITS_PER_GRANULE) { max_nbits_gr[gr] = MAX_BITS_PER_GRANULE; } } } for (gr = 0; gr < ngr; ++gr) { float f[2] = {0.0f, 0.0f}, s = 0.0f; for (ch = 0; ch < nch; ++ch) { if (max_nbits_ch[gr][ch] > 0) { f[ch] = sqrt(max_nbits_ch[gr][ch]); s += f[ch]; } else { f[ch] = 0; } } for (ch = 0; ch < nch; ++ch) { if (s > 0) { max_nbits_ch[gr][ch] = max_nbits_gr[gr] * f[ch] / s; } else { max_nbits_ch[gr][ch] = 0; } } if (nch > 1) { if (max_nbits_ch[gr][0] > use_nbits_ch[gr][0] + 32) { max_nbits_ch[gr][1] += max_nbits_ch[gr][0]; max_nbits_ch[gr][1] -= use_nbits_ch[gr][0] + 32; max_nbits_ch[gr][0] = use_nbits_ch[gr][0] + 32; } if (max_nbits_ch[gr][1] > use_nbits_ch[gr][1] + 32) { max_nbits_ch[gr][0] += max_nbits_ch[gr][1]; max_nbits_ch[gr][0] -= use_nbits_ch[gr][1] + 32; max_nbits_ch[gr][1] = use_nbits_ch[gr][1] + 32; } for (ch = 0; ch < nch; ++ch) { if (max_nbits_ch[gr][ch] > MAX_BITS_PER_CHANNEL) { max_nbits_ch[gr][ch] = MAX_BITS_PER_CHANNEL; } } } } } /* sanity check */ sum_fr = 0; for (gr = 0; gr < ngr; ++gr) { int sum_gr = 0; for (ch = 0; ch < nch; ++ch) { sum_gr += max_nbits_ch[gr][ch]; if (max_nbits_ch[gr][ch] > MAX_BITS_PER_CHANNEL) { ok = 0; } } sum_fr += sum_gr; if (sum_gr > MAX_BITS_PER_GRANULE) { ok = 0; } } if (sum_fr > max_nbits_fr) { ok = 0; } if (!ok) { /* we must have done something wrong, fallback to 'on_pe' based constrain */ for (gr = 0; gr < ngr; ++gr) { for (ch = 0; ch < nch; ++ch) { max_nbits_ch[gr][ch] = max_bits[gr][ch]; } } } } /* we already called the 'best_scalefac_store' function, so we need to reset some * variables before we can do it again. */ for (ch = 0; ch < nch; ++ch) { gfc->l3_side.scfsi[ch][0] = 0; gfc->l3_side.scfsi[ch][1] = 0; gfc->l3_side.scfsi[ch][2] = 0; gfc->l3_side.scfsi[ch][3] = 0; } for (gr = 0; gr < ngr; ++gr) { for (ch = 0; ch < nch; ++ch) { gfc->l3_side.tt[gr][ch].scalefac_compress = 0; } } /* alter our encoded data, until it fits into the target bitrate */ use_nbits_fr = 0; for (gr = 0; gr < ngr; ++gr) { use_nbits_gr[gr] = 0; for (ch = 0; ch < nch; ++ch) { algo_t const *that = &that_[gr][ch]; use_nbits_ch[gr][ch] = 0; if (max_bits[gr][ch] > 0) { int *sfwork = sfwork_[gr][ch]; int const *vbrsfmin = vbrsfmin_[gr][ch]; cutDistribution(sfwork, sfwork, that->cod_info->global_gain); outOfBitsStrategy(that, sfwork, vbrsfmin, max_nbits_ch[gr][ch]); } use_nbits_ch[gr][ch] = reduce_bit_usage(gfc, gr, ch); assert(use_nbits_ch[gr][ch] <= max_nbits_ch[gr][ch]); use_nbits_gr[gr] += use_nbits_ch[gr][ch]; } /* for ch */ use_nbits_fr += use_nbits_gr[gr]; } /* check bit constrains, but it should always be ok, iff there are no bugs ;-) */ if (use_nbits_fr <= max_nbits_fr) { return use_nbits_fr; } ERRORF(gfc, "INTERNAL ERROR IN VBR NEW CODE (1313), please send bug report\n" "maxbits=%d usedbits=%d\n", max_nbits_fr, use_nbits_fr); exit(-1); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/version.c���������������������������������������������������������������������000644 �001751 �001751 �00000015342 11661425206 017751� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Version numbering for LAME. * * Copyright (c) 1999 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /*! \file version.c \brief Version numbering for LAME. Contains functions which describe the version of LAME. \author A.L. Faber \version \$Id: version.c,v 1.34 2011/11/18 09:51:02 robert Exp $ \ingroup libmp3lame */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "version.h" /* macros of version numbers */ /*! Get the LAME version string. */ /*! \param void \return a pointer to a string which describes the version of LAME. */ const char * get_lame_version(void) { /* primary to write screen reports */ /* Here we can also add informations about compile time configurations */ #if LAME_ALPHA_VERSION static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " " "(alpha " STR(LAME_PATCH_VERSION) ", " __DATE__ " " __TIME__ ")"; #elif LAME_BETA_VERSION static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " " "(beta " STR(LAME_PATCH_VERSION) ", " __DATE__ ")"; #elif LAME_RELEASE_VERSION && (LAME_PATCH_VERSION > 0) static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) "." STR(LAME_PATCH_VERSION); #else static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION); #endif return str; } /*! Get the short LAME version string. */ /*! It's mainly for inclusion into the MP3 stream. \param void \return a pointer to the short version of the LAME version string. */ const char * get_lame_short_version(void) { /* adding date and time to version string makes it harder for output validation */ #if LAME_ALPHA_VERSION static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " (alpha " STR(LAME_PATCH_VERSION) ")"; #elif LAME_BETA_VERSION static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) " (beta " STR(LAME_PATCH_VERSION) ")"; #elif LAME_RELEASE_VERSION && (LAME_PATCH_VERSION > 0) static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) "." STR(LAME_PATCH_VERSION); #else static /*@observer@ */ const char *const str = STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION); #endif return str; } /*! Get the _very_ short LAME version string. */ /*! It's used in the LAME VBR tag only. \param void \return a pointer to the short version of the LAME version string. */ const char * get_lame_very_short_version(void) { /* adding date and time to version string makes it harder for output validation */ #if LAME_ALPHA_VERSION #define P "a" #elif LAME_BETA_VERSION #define P "b" #elif LAME_RELEASE_VERSION && (LAME_PATCH_VERSION > 0) #define P "r" #else #define P " " #endif static /*@observer@ */ const char *const str = #if (LAME_PATCH_VERSION > 0) "LAME" STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) P STR(LAME_PATCH_VERSION) #else "LAME" STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) P #endif ; return str; } /*! Get the _very_ short LAME version string. */ /*! It's used in the LAME VBR tag only, limited to 9 characters max. Due to some 3rd party HW/SW decoders, it has to start with LAME. \param void \return a pointer to the short version of the LAME version string. */ const char* get_lame_tag_encoder_short_version(void) { static /*@observer@ */ const char *const str = /* FIXME: new scheme / new version counting / drop versioning here ? */ "LAME" STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) P ; return str; } /*! Get the version string for GPSYCHO. */ /*! \param void \return a pointer to a string which describes the version of GPSYCHO. */ const char * get_psy_version(void) { #if PSY_ALPHA_VERSION > 0 static /*@observer@ */ const char *const str = STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION) " (alpha " STR(PSY_ALPHA_VERSION) ", " __DATE__ " " __TIME__ ")"; #elif PSY_BETA_VERSION > 0 static /*@observer@ */ const char *const str = STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION) " (beta " STR(PSY_BETA_VERSION) ", " __DATE__ ")"; #else static /*@observer@ */ const char *const str = STR(PSY_MAJOR_VERSION) "." STR(PSY_MINOR_VERSION); #endif return str; } /*! Get the URL for the LAME website. */ /*! \param void \return a pointer to a string which is a URL for the LAME website. */ const char * get_lame_url(void) { static /*@observer@ */ const char *const str = LAME_URL; return str; } /*! Get the numerical representation of the version. */ /*! Writes the numerical representation of the version of LAME and GPSYCHO into lvp. \param lvp */ void get_lame_version_numerical(lame_version_t * lvp) { static /*@observer@ */ const char *const features = ""; /* obsolete */ /* generic version */ lvp->major = LAME_MAJOR_VERSION; lvp->minor = LAME_MINOR_VERSION; #if LAME_ALPHA_VERSION lvp->alpha = LAME_PATCH_VERSION; lvp->beta = 0; #elif LAME_BETA_VERSION lvp->alpha = 0; lvp->beta = LAME_PATCH_VERSION; #else lvp->alpha = 0; lvp->beta = 0; #endif /* psy version */ lvp->psy_major = PSY_MAJOR_VERSION; lvp->psy_minor = PSY_MINOR_VERSION; lvp->psy_alpha = PSY_ALPHA_VERSION; lvp->psy_beta = PSY_BETA_VERSION; /* compile time features */ /*@-mustfree@ */ lvp->features = features; /*@=mustfree@ */ } const char * get_lame_os_bitness(void) { static /*@observer@ */ const char *const strXX = ""; static /*@observer@ */ const char *const str32 = "32bits"; static /*@observer@ */ const char *const str64 = "64bits"; switch (sizeof(void *)) { case 4: return str32; case 8: return str64; default: return strXX; } } /* end of version.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/reservoir.h�������������������������������������������������������������������000644 �001751 �001751 �00000002305 11561266675 020320� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bit reservoir include file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_RESERVOIR_H #define LAME_RESERVOIR_H int ResvFrameBegin(lame_internal_flags * gfc, int *mean_bits); void ResvMaxBits(lame_internal_flags * gfc, int mean_bits, int *targ_bits, int *max_bits, int cbr); void ResvAdjust(lame_internal_flags * gfc, gr_info const *gi); void ResvFrameEnd(lame_internal_flags * gfc, int mean_bits); #endif /* LAME_RESERVOIR_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/newmdct.h���������������������������������������������������������������������000644 �001751 �001751 �00000001741 11561266675 017744� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * New Modified DCT include file * * Copyright (c) 1999 Takehiro TOMINAGA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_NEWMDCT_H #define LAME_NEWMDCT_H void mdct_sub48(lame_internal_flags * gfc, const sample_t * w0, const sample_t * w1); #endif /* LAME_NEWMDCT_H */ �������������������������������lame-3.100/libmp3lame/machine.h���������������������������������������������������������������������000644 �001751 �001751 �00000010650 13167215267 017701� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Machine dependent defines/includes for LAME. * * Copyright (c) 1999 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_MACHINE_H #define LAME_MACHINE_H #include "version.h" #include <stdio.h> #include <assert.h> #ifdef STDC_HEADERS # include <stdlib.h> # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #if defined(__riscos__) && defined(FPA10) # include "ymath.h" #else # include <math.h> #endif #include <limits.h> #include <ctype.h> #ifdef HAVE_ERRNO_H # include <errno.h> #endif #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #if defined(macintosh) # include <types.h> # include <stat.h> #else # include <sys/types.h> # include <sys/stat.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #else # ifdef HAVE_STDINT_H # include <stdint.h> # endif #endif #ifdef WITH_DMALLOC #include <dmalloc.h> #endif /* * 3 different types of pow() functions: * - table lookup * - pow() * - exp() on some machines this is claimed to be faster than pow() */ #define POW20(x) (assert(0 <= (x+Q_MAX2) && x < Q_MAX), pow20[x+Q_MAX2]) /*#define POW20(x) pow(2.0,((double)(x)-210)*.25) */ /*#define POW20(x) exp( ((double)(x)-210)*(.25*LOG2) ) */ #define IPOW20(x) (assert(0 <= x && x < Q_MAX), ipow20[x]) /*#define IPOW20(x) exp( -((double)(x)-210)*.1875*LOG2 ) */ /*#define IPOW20(x) pow(2.0,-((double)(x)-210)*.1875) */ /* in case this is used without configure */ #ifndef inline # define inline #endif #if defined(_MSC_VER) # undef inline # define inline _inline #elif defined(__SASC) || defined(__GNUC__) || defined(__ICC) || defined(__ECC) /* if __GNUC__ we always want to inline, not only if the user requests it */ # undef inline # define inline __inline #endif #if defined(_MSC_VER) # pragma warning( disable : 4244 ) /*# pragma warning( disable : 4305 ) */ #endif /* * FLOAT for variables which require at least 32 bits * FLOAT8 for variables which require at least 64 bits * * On some machines, 64 bit will be faster than 32 bit. Also, some math * routines require 64 bit float, so setting FLOAT=float will result in a * lot of conversions. */ #if ( defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__) ) # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <float.h> # define FLOAT_MAX FLT_MAX #else # ifndef FLOAT typedef float FLOAT; # ifdef FLT_MAX # define FLOAT_MAX FLT_MAX # else # define FLOAT_MAX 1e37 /* approx */ # endif # endif #endif #ifndef FLOAT8 typedef double FLOAT8; # ifdef DBL_MAX # define FLOAT8_MAX DBL_MAX # else # define FLOAT8_MAX 1e99 /* approx */ # endif #else # ifdef FLT_MAX # define FLOAT8_MAX FLT_MAX # else # define FLOAT8_MAX 1e37 /* approx */ # endif #endif /* sample_t must be floating point, at least 32 bits */ typedef FLOAT sample_t; #define dimension_of(array) (sizeof(array)/sizeof(array[0])) #define beyond(array) (array+dimension_of(array)) #define compiletime_assert(expression) enum{static_assert_##FILE##_##LINE = 1/((expression)?1:0)} #define lame_calloc(TYPE, COUNT) ((TYPE*)calloc(COUNT, sizeof(TYPE))) #define multiple_of(CHUNK, COUNT) (\ ( (COUNT) < 1 || (CHUNK) < 1 || (COUNT) % (CHUNK) == 0 ) \ ? (COUNT) \ : ((COUNT) + (CHUNK) - (COUNT) % (CHUNK)) \ ) #if 1 #define EQ(a,b) (\ (fabs(a) > fabs(b)) \ ? (fabs((a)-(b)) <= (fabs(a) * 1e-6f)) \ : (fabs((a)-(b)) <= (fabs(b) * 1e-6f))) #else #define EQ(a,b) (fabs((a)-(b))<1E-37) #endif #define NEQ(a,b) (!EQ(a,b)) #ifdef _MSC_VER # if _MSC_VER < 1400 # define fabsf fabs # define powf pow # define log10f log10 # endif #endif #endif /* end of machine.h */ ����������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/�������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221264 016577� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/lame.rc�����������������������������������������������������������������������000644 �001751 �001751 �00000002310 11666664457 017375� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <winver.h> #include "version.h" #ifdef _DLL IDI_ICON1 ICON DISCARDABLE "logoe.ico" #else IDI_ICON1 ICON DISCARDABLE "logoe.ico" #endif VS_VERSION_INFO VERSIONINFO FILEVERSION LAME_MAJOR_VERSION,LAME_MINOR_VERSION,LAME_TYPE_VERSION,LAME_PATCH_VERSION PRODUCTVERSION LAME_MAJOR_VERSION,LAME_MINOR_VERSION,LAME_TYPE_VERSION,LAME_PATCH_VERSION FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 0x0L #endif FILEOS VOS__WINDOWS32 #ifdef _DLL FILETYPE VFT_DLL #else FILETYPE VFT_APP #endif FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual BEGIN VALUE "CompanyName", LAME_URL "\0" VALUE "FileDescription", "MP3 Encoder.\0" VALUE "FileVersion", LAME_VERSION_STRING "\0" VALUE "LegalCopyright", "Copyright (C) 1999-2011 The L.A.M.E. Team\0" #ifdef _DLL VALUE "OriginalFilename", STR(_DLL) "\0" #else VALUE "OriginalFilename", STR(_APP) "\0" #endif VALUE "ProductName", "L.A.M.E.\0" VALUE "ProductVersion", LAME_VERSION_STRING "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 // mandatory by convention END END /* End of Version info */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/quantize.h��������������������������������������������������������������������000644 �001751 �001751 �00000003024 11561266675 020137� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 quantization * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_QUANTIZE_H #define LAME_QUANTIZE_H void CBR_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ratio[2], const III_psy_ratio ratio[2][2]); void VBR_old_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ratio[2], const III_psy_ratio ratio[2][2]); void VBR_new_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ratio[2], const III_psy_ratio ratio[2][2]); void ABR_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ratio[2], const III_psy_ratio ratio[2][2]); #endif /* LAME_QUANTIZE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/Makefile.am�������������������������������������������������������������������000644 �001751 �001751 �00000003635 12652752122 020157� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.41 2016/01/29 21:06:26 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global SUBDIRS = i386 vector lib_LTLIBRARIES = libmp3lame.la if HAVE_NASM cpu_ldadd = $(top_builddir)/libmp3lame/@CPUTYPE@/liblameasmroutines.la endif if WITH_VECTOR vector_ldadd = $(top_builddir)/libmp3lame/vector/liblamevectorroutines.la endif if LIB_WITH_DECODER decoder_ldadd = $(top_builddir)/mpglib/libmpgdecoder.la else decoder_ldadd = endif libmp3lame_la_LIBADD = $(cpu_ldadd) $(vector_ldadd) $(decoder_ldadd) \ $(CONFIG_MATH_LIB) libmp3lame_la_LDFLAGS = -version-info @LIB_MAJOR_VERSION@:@LIB_MINOR_VERSION@ \ -export-symbols $(top_srcdir)/include/libmp3lame.sym \ -no-undefined INCLUDES = @INCLUDES@ -I$(top_srcdir)/mpglib -I$(top_builddir) DEFS = @DEFS@ @CONFIG_DEFS@ EXTRA_DIST = \ lame.rc \ vbrquantize.h \ logoe.ico libmp3lame_la_SOURCES = \ VbrTag.c \ bitstream.c \ encoder.c \ fft.c \ gain_analysis.c \ id3tag.c \ lame.c \ newmdct.c \ presets.c \ psymodel.c \ quantize.c \ quantize_pvt.c \ reservoir.c \ set_get.c \ tables.c \ takehiro.c \ util.c \ vbrquantize.c \ version.c \ mpglib_interface.c noinst_HEADERS= \ VbrTag.h \ bitstream.h \ encoder.h \ fft.h \ gain_analysis.h \ id3tag.h \ l3side.h \ lame-analysis.h \ lame_global_flags.h \ lameerror.h \ machine.h \ newmdct.h \ psymodel.h \ quantize.h \ quantize_pvt.h \ reservoir.h \ set_get.h \ tables.h \ util.h \ vbrquantize.h \ version.h CLEANFILES = lclint.txt LCLINTFLAGS= \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint lclint.txt: ${libmp3lame_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${libmp3lame_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck ���������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/bitstream.c�������������������������������������������������������������������000644 �001751 �001751 �00000106417 13154046617 020266� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 bitstream Output interface for LAME * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 1999-2002 Takehiro Tominaga * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * $Id: bitstream.c,v 1.99 2017/08/31 14:14:46 robert Exp $ */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <stdlib.h> #include <stdio.h> #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "tables.h" #include "quantize_pvt.h" #include "lame_global_flags.h" #include "gain_analysis.h" #include "VbrTag.h" #include "bitstream.h" #include "tables.h" /* unsigned int is at least this large: */ /* we work with ints, so when doing bit manipulation, we limit * ourselves to MAX_LENGTH-2 just to be on the safe side */ #define MAX_LENGTH 32 #ifdef DEBUG static int hogege; #endif static int calcFrameLength(SessionConfig_t const *const cfg, int kbps, int pad) { return 8 * ((cfg->version + 1) * 72000 * kbps / cfg->samplerate_out + pad); } /*********************************************************************** * compute bitsperframe and mean_bits for a layer III frame **********************************************************************/ int getframebits(const lame_internal_flags * gfc) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; int bit_rate; /* get bitrate in kbps [?] */ if (eov->bitrate_index) bit_rate = bitrate_table[cfg->version][eov->bitrate_index]; else bit_rate = cfg->avg_bitrate; /*assert(bit_rate <= 550); */ assert(8 <= bit_rate && bit_rate <= 640); /* main encoding routine toggles padding on and off */ /* one Layer3 Slot consists of 8 bits */ return calcFrameLength(cfg, bit_rate, eov->padding); } int get_max_frame_buffer_size_by_constraint(SessionConfig_t const * cfg, int constraint) { int maxmp3buf = 0; if (cfg->avg_bitrate > 320) { /* in freeformat the buffer is constant */ if (constraint == MDB_STRICT_ISO) { maxmp3buf = calcFrameLength(cfg, cfg->avg_bitrate, 0); } else { /* maximum allowed bits per granule are 7680 */ maxmp3buf = 7680 * (cfg->version + 1); } } else { int max_kbps; if (cfg->samplerate_out < 16000) { max_kbps = bitrate_table[cfg->version][8]; /* default: allow 64 kbps (MPEG-2.5) */ } else { max_kbps = bitrate_table[cfg->version][14]; } switch (constraint) { default: case MDB_DEFAULT: /* Bouvigne suggests this more lax interpretation of the ISO doc instead of using 8*960. */ /* All mp3 decoders should have enough buffer to handle this value: size of a 320kbps 32kHz frame */ maxmp3buf = 8 * 1440; break; case MDB_STRICT_ISO: maxmp3buf = calcFrameLength(cfg, max_kbps, 0); break; case MDB_MAXIMUM: maxmp3buf = 7680 * (cfg->version + 1); break; } } return maxmp3buf; } static void putheader_bits(lame_internal_flags * gfc) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; Bit_stream_struc *bs = &gfc->bs; #ifdef DEBUG hogege += cfg->sideinfo_len * 8; #endif memcpy(&bs->buf[bs->buf_byte_idx], esv->header[esv->w_ptr].buf, cfg->sideinfo_len); bs->buf_byte_idx += cfg->sideinfo_len; bs->totbit += cfg->sideinfo_len * 8; esv->w_ptr = (esv->w_ptr + 1) & (MAX_HEADER_BUF - 1); } /*write j bits into the bit stream */ inline static void putbits2(lame_internal_flags * gfc, int val, int j) { EncStateVar_t const *const esv = &gfc->sv_enc; Bit_stream_struc *bs; bs = &gfc->bs; assert(j < MAX_LENGTH - 2); while (j > 0) { int k; if (bs->buf_bit_idx == 0) { bs->buf_bit_idx = 8; bs->buf_byte_idx++; assert(bs->buf_byte_idx < BUFFER_SIZE); assert(esv->header[esv->w_ptr].write_timing >= bs->totbit); if (esv->header[esv->w_ptr].write_timing == bs->totbit) { putheader_bits(gfc); } bs->buf[bs->buf_byte_idx] = 0; } k = Min(j, bs->buf_bit_idx); j -= k; bs->buf_bit_idx -= k; assert(j < MAX_LENGTH); /* 32 too large on 32 bit machines */ assert(bs->buf_bit_idx < MAX_LENGTH); bs->buf[bs->buf_byte_idx] |= ((val >> j) << bs->buf_bit_idx); bs->totbit += k; } } /*write j bits into the bit stream, ignoring frame headers */ inline static void putbits_noheaders(lame_internal_flags * gfc, int val, int j) { Bit_stream_struc *bs; bs = &gfc->bs; assert(j < MAX_LENGTH - 2); while (j > 0) { int k; if (bs->buf_bit_idx == 0) { bs->buf_bit_idx = 8; bs->buf_byte_idx++; assert(bs->buf_byte_idx < BUFFER_SIZE); bs->buf[bs->buf_byte_idx] = 0; } k = Min(j, bs->buf_bit_idx); j -= k; bs->buf_bit_idx -= k; assert(j < MAX_LENGTH); /* 32 too large on 32 bit machines */ assert(bs->buf_bit_idx < MAX_LENGTH); bs->buf[bs->buf_byte_idx] |= ((val >> j) << bs->buf_bit_idx); bs->totbit += k; } } /* Some combinations of bitrate, Fs, and stereo make it impossible to stuff out a frame using just main_data, due to the limited number of bits to indicate main_data_length. In these situations, we put stuffing bits into the ancillary data... */ inline static void drain_into_ancillary(lame_internal_flags * gfc, int remainingBits) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int i; assert(remainingBits >= 0); if (remainingBits >= 8) { putbits2(gfc, 0x4c, 8); remainingBits -= 8; } if (remainingBits >= 8) { putbits2(gfc, 0x41, 8); remainingBits -= 8; } if (remainingBits >= 8) { putbits2(gfc, 0x4d, 8); remainingBits -= 8; } if (remainingBits >= 8) { putbits2(gfc, 0x45, 8); remainingBits -= 8; } if (remainingBits >= 32) { const char *const version = get_lame_short_version(); if (remainingBits >= 32) for (i = 0; i < (int) strlen(version) && remainingBits >= 8; ++i) { remainingBits -= 8; putbits2(gfc, version[i], 8); } } for (; remainingBits >= 1; remainingBits -= 1) { putbits2(gfc, esv->ancillary_flag, 1); esv->ancillary_flag ^= !cfg->disable_reservoir; } assert(remainingBits == 0); } /*write N bits into the header */ inline static void writeheader(lame_internal_flags * gfc, int val, int j) { EncStateVar_t *const esv = &gfc->sv_enc; int ptr = esv->header[esv->h_ptr].ptr; while (j > 0) { int const k = Min(j, 8 - (ptr & 7)); j -= k; assert(j < MAX_LENGTH); /* >> 32 too large for 32 bit machines */ esv->header[esv->h_ptr].buf[ptr >> 3] |= ((val >> j)) << (8 - (ptr & 7) - k); ptr += k; } esv->header[esv->h_ptr].ptr = ptr; } static int CRC_update(int value, int crc) { int i; value <<= 8; for (i = 0; i < 8; i++) { value <<= 1; crc <<= 1; if (((crc ^ value) & 0x10000)) crc ^= CRC16_POLYNOMIAL; } return crc; } void CRC_writeheader(lame_internal_flags const *gfc, char *header) { SessionConfig_t const *const cfg = &gfc->cfg; int crc = 0xffff; /* (jo) init crc16 for error_protection */ int i; crc = CRC_update(((unsigned char *) header)[2], crc); crc = CRC_update(((unsigned char *) header)[3], crc); for (i = 6; i < cfg->sideinfo_len; i++) { crc = CRC_update(((unsigned char *) header)[i], crc); } header[4] = crc >> 8; header[5] = crc & 255; } inline static void encodeSideInfo2(lame_internal_flags * gfc, int bitsPerFrame) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; EncStateVar_t *const esv = &gfc->sv_enc; III_side_info_t *l3_side; int gr, ch; l3_side = &gfc->l3_side; esv->header[esv->h_ptr].ptr = 0; memset(esv->header[esv->h_ptr].buf, 0, cfg->sideinfo_len); if (cfg->samplerate_out < 16000) writeheader(gfc, 0xffe, 12); else writeheader(gfc, 0xfff, 12); writeheader(gfc, (cfg->version), 1); writeheader(gfc, 4 - 3, 2); writeheader(gfc, (!cfg->error_protection), 1); writeheader(gfc, (eov->bitrate_index), 4); writeheader(gfc, (cfg->samplerate_index), 2); writeheader(gfc, (eov->padding), 1); writeheader(gfc, (cfg->extension), 1); writeheader(gfc, (cfg->mode), 2); writeheader(gfc, (eov->mode_ext), 2); writeheader(gfc, (cfg->copyright), 1); writeheader(gfc, (cfg->original), 1); writeheader(gfc, (cfg->emphasis), 2); if (cfg->error_protection) { writeheader(gfc, 0, 16); /* dummy */ } if (cfg->version == 1) { /* MPEG1 */ assert(l3_side->main_data_begin >= 0); writeheader(gfc, (l3_side->main_data_begin), 9); if (cfg->channels_out == 2) writeheader(gfc, l3_side->private_bits, 3); else writeheader(gfc, l3_side->private_bits, 5); for (ch = 0; ch < cfg->channels_out; ch++) { int band; for (band = 0; band < 4; band++) { writeheader(gfc, l3_side->scfsi[ch][band], 1); } } for (gr = 0; gr < 2; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info *const gi = &l3_side->tt[gr][ch]; writeheader(gfc, gi->part2_3_length + gi->part2_length, 12); writeheader(gfc, gi->big_values / 2, 9); writeheader(gfc, gi->global_gain, 8); writeheader(gfc, gi->scalefac_compress, 4); if (gi->block_type != NORM_TYPE) { writeheader(gfc, 1, 1); /* window_switching_flag */ writeheader(gfc, gi->block_type, 2); writeheader(gfc, gi->mixed_block_flag, 1); if (gi->table_select[0] == 14) gi->table_select[0] = 16; writeheader(gfc, gi->table_select[0], 5); if (gi->table_select[1] == 14) gi->table_select[1] = 16; writeheader(gfc, gi->table_select[1], 5); writeheader(gfc, gi->subblock_gain[0], 3); writeheader(gfc, gi->subblock_gain[1], 3); writeheader(gfc, gi->subblock_gain[2], 3); } else { writeheader(gfc, 0, 1); /* window_switching_flag */ if (gi->table_select[0] == 14) gi->table_select[0] = 16; writeheader(gfc, gi->table_select[0], 5); if (gi->table_select[1] == 14) gi->table_select[1] = 16; writeheader(gfc, gi->table_select[1], 5); if (gi->table_select[2] == 14) gi->table_select[2] = 16; writeheader(gfc, gi->table_select[2], 5); assert(0 <= gi->region0_count && gi->region0_count < 16); assert(0 <= gi->region1_count && gi->region1_count < 8); writeheader(gfc, gi->region0_count, 4); writeheader(gfc, gi->region1_count, 3); } writeheader(gfc, gi->preflag, 1); writeheader(gfc, gi->scalefac_scale, 1); writeheader(gfc, gi->count1table_select, 1); } } } else { /* MPEG2 */ assert(l3_side->main_data_begin >= 0); writeheader(gfc, (l3_side->main_data_begin), 8); writeheader(gfc, l3_side->private_bits, cfg->channels_out); gr = 0; for (ch = 0; ch < cfg->channels_out; ch++) { gr_info *const gi = &l3_side->tt[gr][ch]; writeheader(gfc, gi->part2_3_length + gi->part2_length, 12); writeheader(gfc, gi->big_values / 2, 9); writeheader(gfc, gi->global_gain, 8); writeheader(gfc, gi->scalefac_compress, 9); if (gi->block_type != NORM_TYPE) { writeheader(gfc, 1, 1); /* window_switching_flag */ writeheader(gfc, gi->block_type, 2); writeheader(gfc, gi->mixed_block_flag, 1); if (gi->table_select[0] == 14) gi->table_select[0] = 16; writeheader(gfc, gi->table_select[0], 5); if (gi->table_select[1] == 14) gi->table_select[1] = 16; writeheader(gfc, gi->table_select[1], 5); writeheader(gfc, gi->subblock_gain[0], 3); writeheader(gfc, gi->subblock_gain[1], 3); writeheader(gfc, gi->subblock_gain[2], 3); } else { writeheader(gfc, 0, 1); /* window_switching_flag */ if (gi->table_select[0] == 14) gi->table_select[0] = 16; writeheader(gfc, gi->table_select[0], 5); if (gi->table_select[1] == 14) gi->table_select[1] = 16; writeheader(gfc, gi->table_select[1], 5); if (gi->table_select[2] == 14) gi->table_select[2] = 16; writeheader(gfc, gi->table_select[2], 5); assert(0 <= gi->region0_count && gi->region0_count < 16); assert(0 <= gi->region1_count && gi->region1_count < 8); writeheader(gfc, gi->region0_count, 4); writeheader(gfc, gi->region1_count, 3); } writeheader(gfc, gi->scalefac_scale, 1); writeheader(gfc, gi->count1table_select, 1); } } if (cfg->error_protection) { /* (jo) error_protection: add crc16 information to header */ CRC_writeheader(gfc, esv->header[esv->h_ptr].buf); } { int const old = esv->h_ptr; assert(esv->header[old].ptr == cfg->sideinfo_len * 8); esv->h_ptr = (old + 1) & (MAX_HEADER_BUF - 1); esv->header[esv->h_ptr].write_timing = esv->header[old].write_timing + bitsPerFrame; if (esv->h_ptr == esv->w_ptr) { /* yikes! we are out of header buffer space */ ERRORF(gfc, "Error: MAX_HEADER_BUF too small in bitstream.c \n"); } } } inline static int huffman_coder_count1(lame_internal_flags * gfc, gr_info const *gi) { /* Write count1 area */ struct huffcodetab const *const h = &ht[gi->count1table_select + 32]; int i, bits = 0; #ifdef DEBUG int gegebo = gfc->bs.totbit; #endif int const *ix = &gi->l3_enc[gi->big_values]; FLOAT const *xr = &gi->xr[gi->big_values]; assert(gi->count1table_select < 2); for (i = (gi->count1 - gi->big_values) / 4; i > 0; --i) { int huffbits = 0; int p = 0, v; v = ix[0]; if (v) { p += 8; if (xr[0] < 0.0f) huffbits++; assert(v <= 1); } v = ix[1]; if (v) { p += 4; huffbits *= 2; if (xr[1] < 0.0f) huffbits++; assert(v <= 1); } v = ix[2]; if (v) { p += 2; huffbits *= 2; if (xr[2] < 0.0f) huffbits++; assert(v <= 1); } v = ix[3]; if (v) { p++; huffbits *= 2; if (xr[3] < 0.0f) huffbits++; assert(v <= 1); } ix += 4; xr += 4; putbits2(gfc, huffbits + h->table[p], h->hlen[p]); bits += h->hlen[p]; } #ifdef DEBUG DEBUGF(gfc, "count1: real: %ld counted:%d (bigv %d count1len %d)\n", gfc->bs.totbit - gegebo, gi->count1bits, gi->big_values, gi->count1); #endif return bits; } /* Implements the pseudocode of page 98 of the IS */ inline static int Huffmancode(lame_internal_flags * const gfc, const unsigned int tableindex, int start, int end, gr_info const *gi) { struct huffcodetab const *const h = &ht[tableindex]; unsigned int const linbits = h->xlen; int i, bits = 0; assert(tableindex < 32u); if (!tableindex) return bits; for (i = start; i < end; i += 2) { int16_t cbits = 0; uint16_t xbits = 0; unsigned int xlen = h->xlen; unsigned int ext = 0; unsigned int x1 = gi->l3_enc[i]; unsigned int x2 = gi->l3_enc[i + 1]; assert(gi->l3_enc[i] >= 0); assert(gi->l3_enc[i+1] >= 0); if (x1 != 0u) { if (gi->xr[i] < 0.0f) ext++; cbits--; } if (tableindex > 15u) { /* use ESC-words */ if (x1 >= 15u) { uint16_t const linbits_x1 = x1 - 15u; assert(linbits_x1 <= h->linmax); ext |= linbits_x1 << 1u; xbits = linbits; x1 = 15u; } if (x2 >= 15u) { uint16_t const linbits_x2 = x2 - 15u; assert(linbits_x2 <= h->linmax); ext <<= linbits; ext |= linbits_x2; xbits += linbits; x2 = 15u; } xlen = 16; } if (x2 != 0u) { ext <<= 1; if (gi->xr[i + 1] < 0.0f) ext++; cbits--; } assert((x1 | x2) < 16u); x1 = x1 * xlen + x2; xbits -= cbits; cbits += h->hlen[x1]; assert(cbits <= MAX_LENGTH); assert(xbits <= MAX_LENGTH); putbits2(gfc, h->table[x1], cbits); putbits2(gfc, (int)ext, xbits); bits += cbits + xbits; } return bits; } /* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as well as the definitions of the side information on pages 26 and 27. */ static int ShortHuffmancodebits(lame_internal_flags * gfc, gr_info const *gi) { int bits; int region1Start; region1Start = 3 * gfc->scalefac_band.s[3]; if (region1Start > gi->big_values) region1Start = gi->big_values; /* short blocks do not have a region2 */ bits = Huffmancode(gfc, gi->table_select[0], 0, region1Start, gi); bits += Huffmancode(gfc, gi->table_select[1], region1Start, gi->big_values, gi); return bits; } static int LongHuffmancodebits(lame_internal_flags * gfc, gr_info const *gi) { unsigned int i; int bigvalues, bits; int region1Start, region2Start; bigvalues = gi->big_values; assert(0 <= bigvalues && bigvalues <= 576); assert(gi->region0_count >= -1); assert(gi->region1_count >= -1); i = gi->region0_count + 1; assert((size_t) i < dimension_of(gfc->scalefac_band.l)); region1Start = gfc->scalefac_band.l[i]; i += gi->region1_count + 1; assert((size_t) i < dimension_of(gfc->scalefac_band.l)); region2Start = gfc->scalefac_band.l[i]; if (region1Start > bigvalues) region1Start = bigvalues; if (region2Start > bigvalues) region2Start = bigvalues; bits = Huffmancode(gfc, gi->table_select[0], 0, region1Start, gi); bits += Huffmancode(gfc, gi->table_select[1], region1Start, region2Start, gi); bits += Huffmancode(gfc, gi->table_select[2], region2Start, bigvalues, gi); return bits; } inline static int writeMainData(lame_internal_flags * const gfc) { SessionConfig_t const *const cfg = &gfc->cfg; III_side_info_t const *const l3_side = &gfc->l3_side; int gr, ch, sfb, data_bits, tot_bits = 0; if (cfg->version == 1) { /* MPEG 1 */ for (gr = 0; gr < 2; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info const *const gi = &l3_side->tt[gr][ch]; int const slen1 = slen1_tab[gi->scalefac_compress]; int const slen2 = slen2_tab[gi->scalefac_compress]; data_bits = 0; #ifdef DEBUG hogege = gfc->bs.totbit; #endif for (sfb = 0; sfb < gi->sfbdivide; sfb++) { if (gi->scalefac[sfb] == -1) continue; /* scfsi is used */ putbits2(gfc, gi->scalefac[sfb], slen1); data_bits += slen1; } for (; sfb < gi->sfbmax; sfb++) { if (gi->scalefac[sfb] == -1) continue; /* scfsi is used */ putbits2(gfc, gi->scalefac[sfb], slen2); data_bits += slen2; } assert(data_bits == gi->part2_length); if (gi->block_type == SHORT_TYPE) { data_bits += ShortHuffmancodebits(gfc, gi); } else { data_bits += LongHuffmancodebits(gfc, gi); } data_bits += huffman_coder_count1(gfc, gi); #ifdef DEBUG DEBUGF(gfc, "<%ld> ", gfc->bs.totbit - hogege); #endif /* does bitcount in quantize.c agree with actual bit count? */ assert(data_bits == gi->part2_3_length + gi->part2_length); tot_bits += data_bits; } /* for ch */ } /* for gr */ } else { /* MPEG 2 */ gr = 0; for (ch = 0; ch < cfg->channels_out; ch++) { gr_info const *const gi = &l3_side->tt[gr][ch]; int i, sfb_partition, scale_bits = 0; assert(gi->sfb_partition_table); data_bits = 0; #ifdef DEBUG hogege = gfc->bs.totbit; #endif sfb = 0; sfb_partition = 0; if (gi->block_type == SHORT_TYPE) { for (; sfb_partition < 4; sfb_partition++) { int const sfbs = gi->sfb_partition_table[sfb_partition] / 3; int const slen = gi->slen[sfb_partition]; for (i = 0; i < sfbs; i++, sfb++) { putbits2(gfc, Max(gi->scalefac[sfb * 3 + 0], 0), slen); putbits2(gfc, Max(gi->scalefac[sfb * 3 + 1], 0), slen); putbits2(gfc, Max(gi->scalefac[sfb * 3 + 2], 0), slen); scale_bits += 3 * slen; } } data_bits += ShortHuffmancodebits(gfc, gi); } else { for (; sfb_partition < 4; sfb_partition++) { int const sfbs = gi->sfb_partition_table[sfb_partition]; int const slen = gi->slen[sfb_partition]; for (i = 0; i < sfbs; i++, sfb++) { putbits2(gfc, Max(gi->scalefac[sfb], 0), slen); scale_bits += slen; } } data_bits += LongHuffmancodebits(gfc, gi); } data_bits += huffman_coder_count1(gfc, gi); #ifdef DEBUG DEBUGF(gfc, "<%ld> ", gfc->bs.totbit - hogege); #endif /* does bitcount in quantize.c agree with actual bit count? */ assert(data_bits == gi->part2_3_length); assert(scale_bits == gi->part2_length); tot_bits += scale_bits + data_bits; } /* for ch */ } /* for gf */ return tot_bits; } /* main_data */ /* compute the number of bits required to flush all mp3 frames currently in the buffer. This should be the same as the reservoir size. Only call this routine between frames - i.e. only after all headers and data have been added to the buffer by format_bitstream(). Also compute total_bits_output = size of mp3 buffer (including frame headers which may not have yet been send to the mp3 buffer) + number of bits needed to flush all mp3 frames. total_bytes_output is the size of the mp3 output buffer if lame_encode_flush_nogap() was called right now. */ int compute_flushbits(const lame_internal_flags * gfc, int *total_bytes_output) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t const *const esv = &gfc->sv_enc; int flushbits, remaining_headers; int bitsPerFrame; int last_ptr, first_ptr; first_ptr = esv->w_ptr; /* first header to add to bitstream */ last_ptr = esv->h_ptr - 1; /* last header to add to bitstream */ if (last_ptr == -1) last_ptr = MAX_HEADER_BUF - 1; /* add this many bits to bitstream so we can flush all headers */ flushbits = esv->header[last_ptr].write_timing - gfc->bs.totbit; *total_bytes_output = flushbits; if (flushbits >= 0) { /* if flushbits >= 0, some headers have not yet been written */ /* reduce flushbits by the size of the headers */ remaining_headers = 1 + last_ptr - first_ptr; if (last_ptr < first_ptr) remaining_headers = 1 + last_ptr - first_ptr + MAX_HEADER_BUF; flushbits -= remaining_headers * 8 * cfg->sideinfo_len; } /* finally, add some bits so that the last frame is complete * these bits are not necessary to decode the last frame, but * some decoders will ignore last frame if these bits are missing */ bitsPerFrame = getframebits(gfc); flushbits += bitsPerFrame; *total_bytes_output += bitsPerFrame; /* round up: */ if (*total_bytes_output % 8) *total_bytes_output = 1 + (*total_bytes_output / 8); else *total_bytes_output = (*total_bytes_output / 8); *total_bytes_output += gfc->bs.buf_byte_idx + 1; if (flushbits < 0) { #if 0 /* if flushbits < 0, this would mean that the buffer looks like: * (data...) last_header (data...) (extra data that should not be here...) */ DEBUGF(gfc, "last header write_timing = %i \n", esv->header[last_ptr].write_timing); DEBUGF(gfc, "first header write_timing = %i \n", esv->header[first_ptr].write_timing); DEBUGF(gfc, "bs.totbit: %i \n", gfc->bs.totbit); DEBUGF(gfc, "first_ptr, last_ptr %i %i \n", first_ptr, last_ptr); DEBUGF(gfc, "remaining_headers = %i \n", remaining_headers); DEBUGF(gfc, "bitsperframe: %i \n", bitsPerFrame); DEBUGF(gfc, "sidelen: %i \n", cfg->sideinfo_len); #endif ERRORF(gfc, "strange error flushing buffer ... \n"); } return flushbits; } void flush_bitstream(lame_internal_flags * gfc) { EncStateVar_t *const esv = &gfc->sv_enc; III_side_info_t *l3_side; int nbytes; int flushbits; int last_ptr = esv->h_ptr - 1; /* last header to add to bitstream */ if (last_ptr == -1) last_ptr = MAX_HEADER_BUF - 1; l3_side = &gfc->l3_side; if ((flushbits = compute_flushbits(gfc, &nbytes)) < 0) return; drain_into_ancillary(gfc, flushbits); /* check that the 100% of the last frame has been written to bitstream */ assert(esv->header[last_ptr].write_timing + getframebits(gfc) == gfc->bs.totbit); /* we have padded out all frames with ancillary data, which is the same as filling the bitreservoir with ancillary data, so : */ esv->ResvSize = 0; l3_side->main_data_begin = 0; } void add_dummy_byte(lame_internal_flags * gfc, unsigned char val, unsigned int n) { EncStateVar_t *const esv = &gfc->sv_enc; int i; while (n-- > 0u) { putbits_noheaders(gfc, val, 8); for (i = 0; i < MAX_HEADER_BUF; ++i) esv->header[i].write_timing += 8; } } /* format_bitstream() This is called after a frame of audio has been quantized and coded. It will write the encoded audio to the bitstream. Note that from a layer3 encoder's perspective the bit stream is primarily a series of main_data() blocks, with header and side information inserted at the proper locations to maintain framing. (See Figure A.7 in the IS). */ int format_bitstream(lame_internal_flags * gfc) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int bits, nbytes; III_side_info_t *l3_side; int bitsPerFrame; l3_side = &gfc->l3_side; bitsPerFrame = getframebits(gfc); drain_into_ancillary(gfc, l3_side->resvDrain_pre); encodeSideInfo2(gfc, bitsPerFrame); bits = 8 * cfg->sideinfo_len; bits += writeMainData(gfc); drain_into_ancillary(gfc, l3_side->resvDrain_post); bits += l3_side->resvDrain_post; l3_side->main_data_begin += (bitsPerFrame - bits) / 8; /* compare number of bits needed to clear all buffered mp3 frames * with what we think the resvsize is: */ if (compute_flushbits(gfc, &nbytes) != esv->ResvSize) { ERRORF(gfc, "Internal buffer inconsistency. flushbits <> ResvSize"); } /* compare main_data_begin for the next frame with what we * think the resvsize is: */ if ((l3_side->main_data_begin * 8) != esv->ResvSize) { ERRORF(gfc, "bit reservoir error: \n" "l3_side->main_data_begin: %i \n" "Resvoir size: %i \n" "resv drain (post) %i \n" "resv drain (pre) %i \n" "header and sideinfo: %i \n" "data bits: %i \n" "total bits: %i (remainder: %i) \n" "bitsperframe: %i \n", 8 * l3_side->main_data_begin, esv->ResvSize, l3_side->resvDrain_post, l3_side->resvDrain_pre, 8 * cfg->sideinfo_len, bits - l3_side->resvDrain_post - 8 * cfg->sideinfo_len, bits, bits % 8, bitsPerFrame); ERRORF(gfc, "This is a fatal error. It has several possible causes:"); ERRORF(gfc, "90%% LAME compiled with buggy version of gcc using advanced optimizations"); ERRORF(gfc, " 9%% Your system is overclocked"); ERRORF(gfc, " 1%% bug in LAME encoding library"); esv->ResvSize = l3_side->main_data_begin * 8; }; assert(gfc->bs.totbit % 8 == 0); if (gfc->bs.totbit > 1000000000) { /* to avoid totbit overflow, (at 8h encoding at 128kbs) lets reset bit counter */ int i; for (i = 0; i < MAX_HEADER_BUF; ++i) esv->header[i].write_timing -= gfc->bs.totbit; gfc->bs.totbit = 0; } return 0; } static int do_gain_analysis(lame_internal_flags * gfc, unsigned char* buffer, int minimum) { SessionConfig_t const *const cfg = &gfc->cfg; RpgStateVar_t const *const rsv = &gfc->sv_rpg; RpgResult_t *const rov = &gfc->ov_rpg; #ifdef DECODE_ON_THE_FLY if (cfg->decode_on_the_fly) { /* decode the frame */ sample_t pcm_buf[2][1152]; int mp3_in = minimum; int samples_out = -1; /* re-synthesis to pcm. Repeat until we get a samples_out=0 */ while (samples_out != 0) { samples_out = hip_decode1_unclipped(gfc->hip, buffer, mp3_in, pcm_buf[0], pcm_buf[1]); /* samples_out = 0: need more data to decode * samples_out = -1: error. Lets assume 0 pcm output * samples_out = number of samples output */ /* set the lenght of the mp3 input buffer to zero, so that in the * next iteration of the loop we will be querying mpglib about * buffered data */ mp3_in = 0; if (samples_out == -1) { /* error decoding. Not fatal, but might screw up * the ReplayGain tag. What should we do? Ignore for now */ samples_out = 0; } if (samples_out > 0) { /* process the PCM data */ /* this should not be possible, and indicates we have * overflown the pcm_buf buffer */ assert(samples_out <= 1152); if (cfg->findPeakSample) { int i; /* FIXME: is this correct? maybe Max(fabs(pcm),PeakSample) */ for (i = 0; i < samples_out; i++) { if (pcm_buf[0][i] > rov->PeakSample) rov->PeakSample = pcm_buf[0][i]; else if (-pcm_buf[0][i] > rov->PeakSample) rov->PeakSample = -pcm_buf[0][i]; } if (cfg->channels_out > 1) for (i = 0; i < samples_out; i++) { if (pcm_buf[1][i] > rov->PeakSample) rov->PeakSample = pcm_buf[1][i]; else if (-pcm_buf[1][i] > rov->PeakSample) rov->PeakSample = -pcm_buf[1][i]; } } if (cfg->findReplayGain) if (AnalyzeSamples (rsv->rgdata, pcm_buf[0], pcm_buf[1], samples_out, cfg->channels_out) == GAIN_ANALYSIS_ERROR) return -6; } /* if (samples_out>0) */ } /* while (samples_out!=0) */ } /* if (gfc->decode_on_the_fly) */ #endif return minimum; } static int do_copy_buffer(lame_internal_flags * gfc, unsigned char *buffer, int size) { Bit_stream_struc *const bs = &gfc->bs; int const minimum = bs->buf_byte_idx + 1; if (minimum <= 0) return 0; if (minimum > size) return -1; /* buffer is too small */ memcpy(buffer, bs->buf, minimum); bs->buf_byte_idx = -1; bs->buf_bit_idx = 0; return minimum; } /* copy data out of the internal MP3 bit buffer into a user supplied unsigned char buffer. mp3data=0 indicates data in buffer is an id3tags and VBR tags mp3data=1 data is real mp3 frame data. */ int copy_buffer(lame_internal_flags * gfc, unsigned char *buffer, int size, int mp3data) { int const minimum = do_copy_buffer(gfc, buffer, size); if (minimum > 0 && mp3data) { UpdateMusicCRC(&gfc->nMusicCRC, buffer, minimum); /** sum number of bytes belonging to the mp3 stream * this info will be written into the Xing/LAME header for seeking */ gfc->VBR_seek_table.nBytesWritten += minimum; return do_gain_analysis(gfc, buffer, minimum); } /* if (mp3data) */ return minimum; } void init_bit_stream_w(lame_internal_flags * gfc) { EncStateVar_t *const esv = &gfc->sv_enc; esv->h_ptr = esv->w_ptr = 0; esv->header[esv->h_ptr].write_timing = 0; gfc->bs.buf = lame_calloc(unsigned char, BUFFER_SIZE); gfc->bs.buf_size = BUFFER_SIZE; gfc->bs.buf_byte_idx = -1; gfc->bs.buf_bit_idx = 0; gfc->bs.totbit = 0; } /* end of bitstream.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/encoder.c���������������������������������������������������������������������000644 �001751 �001751 �00000044153 13154046617 017711� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * LAME MP3 encoding engine * * Copyright (c) 1999 Mark Taylor * Copyright (c) 2000-2002 Takehiro Tominaga * Copyright (c) 2000-2011 Robert Hegemann * Copyright (c) 2001 Gabriel Bouvigne * Copyright (c) 2001 John Dahlstrom * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: encoder.c,v 1.114 2017/08/26 10:54:57 robert Exp $ */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "lame_global_flags.h" #include "newmdct.h" #include "psymodel.h" #include "lame-analysis.h" #include "bitstream.h" #include "VbrTag.h" #include "quantize.h" #include "quantize_pvt.h" /* * auto-adjust of ATH, useful for low volume * Gabriel Bouvigne 3 feb 2001 * * modifies some values in * gfp->internal_flags->ATH * (gfc->ATH) */ static void adjust_ATH(lame_internal_flags const *const gfc) { SessionConfig_t const *const cfg = &gfc->cfg; FLOAT gr2_max, max_pow; if (gfc->ATH->use_adjust == 0) { gfc->ATH->adjust_factor = 1.0; /* no adjustment */ return; } /* jd - 2001 mar 12, 27, jun 30 */ /* loudness based on equal loudness curve; */ /* use granule with maximum combined loudness */ max_pow = gfc->ov_psy.loudness_sq[0][0]; gr2_max = gfc->ov_psy.loudness_sq[1][0]; if (cfg->channels_out == 2) { max_pow += gfc->ov_psy.loudness_sq[0][1]; gr2_max += gfc->ov_psy.loudness_sq[1][1]; } else { max_pow += max_pow; gr2_max += gr2_max; } if (cfg->mode_gr == 2) { max_pow = Max(max_pow, gr2_max); } max_pow *= 0.5; /* max_pow approaches 1.0 for full band noise */ /* jd - 2001 mar 31, jun 30 */ /* user tuning of ATH adjustment region */ max_pow *= gfc->ATH->aa_sensitivity_p; /* adjust ATH depending on range of maximum value */ /* jd - 2001 feb27, mar12,20, jun30, jul22 */ /* continuous curves based on approximation */ /* to GB's original values. */ /* For an increase in approximate loudness, */ /* set ATH adjust to adjust_limit immediately */ /* after a delay of one frame. */ /* For a loudness decrease, reduce ATH adjust */ /* towards adjust_limit gradually. */ /* max_pow is a loudness squared or a power. */ if (max_pow > 0.03125) { /* ((1 - 0.000625)/ 31.98) from curve below */ if (gfc->ATH->adjust_factor >= 1.0) { gfc->ATH->adjust_factor = 1.0; } else { /* preceding frame has lower ATH adjust; */ /* ascend only to the preceding adjust_limit */ /* in case there is leading low volume */ if (gfc->ATH->adjust_factor < gfc->ATH->adjust_limit) { gfc->ATH->adjust_factor = gfc->ATH->adjust_limit; } } gfc->ATH->adjust_limit = 1.0; } else { /* adjustment curve */ /* about 32 dB maximum adjust (0.000625) */ FLOAT const adj_lim_new = 31.98 * max_pow + 0.000625; if (gfc->ATH->adjust_factor >= adj_lim_new) { /* descend gradually */ gfc->ATH->adjust_factor *= adj_lim_new * 0.075 + 0.925; if (gfc->ATH->adjust_factor < adj_lim_new) { /* stop descent */ gfc->ATH->adjust_factor = adj_lim_new; } } else { /* ascend */ if (gfc->ATH->adjust_limit >= adj_lim_new) { gfc->ATH->adjust_factor = adj_lim_new; } else { /* preceding frame has lower ATH adjust; */ /* ascend only to the preceding adjust_limit */ if (gfc->ATH->adjust_factor < gfc->ATH->adjust_limit) { gfc->ATH->adjust_factor = gfc->ATH->adjust_limit; } } } gfc->ATH->adjust_limit = adj_lim_new; } } /*********************************************************************** * * some simple statistics * * bitrate index 0: free bitrate -> not allowed in VBR mode * : bitrates, kbps depending on MPEG version * bitrate index 15: forbidden * * mode_ext: * 0: LR * 1: LR-i * 2: MS * 3: MS-i * ***********************************************************************/ static void updateStats(lame_internal_flags * const gfc) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *eov = &gfc->ov_enc; int gr, ch; assert(0 <= eov->bitrate_index && eov->bitrate_index < 16); assert(0 <= eov->mode_ext && eov->mode_ext < 4); /* count bitrate indices */ eov->bitrate_channelmode_hist[eov->bitrate_index][4]++; eov->bitrate_channelmode_hist[15][4]++; /* count 'em for every mode extension in case of 2 channel encoding */ if (cfg->channels_out == 2) { eov->bitrate_channelmode_hist[eov->bitrate_index][eov->mode_ext]++; eov->bitrate_channelmode_hist[15][eov->mode_ext]++; } for (gr = 0; gr < cfg->mode_gr; ++gr) { for (ch = 0; ch < cfg->channels_out; ++ch) { int bt = gfc->l3_side.tt[gr][ch].block_type; if (gfc->l3_side.tt[gr][ch].mixed_block_flag) bt = 4; eov->bitrate_blocktype_hist[eov->bitrate_index][bt]++; eov->bitrate_blocktype_hist[eov->bitrate_index][5]++; eov->bitrate_blocktype_hist[15][bt]++; eov->bitrate_blocktype_hist[15][5]++; } } } static void lame_encode_frame_init(lame_internal_flags * gfc, const sample_t *const inbuf[2]) { SessionConfig_t const *const cfg = &gfc->cfg; int ch, gr; if (gfc->lame_encode_frame_init == 0) { sample_t primebuff0[286 + 1152 + 576]; sample_t primebuff1[286 + 1152 + 576]; int const framesize = 576 * cfg->mode_gr; /* prime the MDCT/polyphase filterbank with a short block */ int i, j; gfc->lame_encode_frame_init = 1; memset(primebuff0, 0, sizeof(primebuff0)); memset(primebuff1, 0, sizeof(primebuff1)); for (i = 0, j = 0; i < 286 + 576 * (1 + cfg->mode_gr); ++i) { if (i < framesize) { primebuff0[i] = 0; if (cfg->channels_out == 2) primebuff1[i] = 0; } else { primebuff0[i] = inbuf[0][j]; if (cfg->channels_out == 2) primebuff1[i] = inbuf[1][j]; ++j; } } /* polyphase filtering / mdct */ for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gfc->l3_side.tt[gr][ch].block_type = SHORT_TYPE; } } mdct_sub48(gfc, primebuff0, primebuff1); /* check FFT will not use a negative starting offset */ #if 576 < FFTOFFSET # error FFTOFFSET greater than 576: FFT uses a negative offset #endif /* check if we have enough data for FFT */ assert(gfc->sv_enc.mf_size >= (BLKSIZE + framesize - FFTOFFSET)); /* check if we have enough data for polyphase filterbank */ assert(gfc->sv_enc.mf_size >= (512 + framesize - 32)); } } /************************************************************************ * * encodeframe() Layer 3 * * encode a single frame * ************************************************************************ lame_encode_frame() gr 0 gr 1 inbuf: |--------------|--------------|--------------| Polyphase (18 windows, each shifted 32) gr 0: window1 <----512----> window18 <----512----> gr 1: window1 <----512----> window18 <----512----> MDCT output: |--------------|--------------|--------------| FFT's <---------1024----------> <---------1024--------> inbuf = buffer of PCM data size=MP3 framesize encoder acts on inbuf[ch][0], but output is delayed by MDCTDELAY so the MDCT coefficints are from inbuf[ch][-MDCTDELAY] psy-model FFT has a 1 granule delay, so we feed it data for the next granule. FFT is centered over granule: 224+576+224 So FFT starts at: 576-224-MDCTDELAY MPEG2: FFT ends at: BLKSIZE+576-224-MDCTDELAY (1328) MPEG1: FFT ends at: BLKSIZE+2*576-224-MDCTDELAY (1904) MPEG2: polyphase first window: [0..511] 18th window: [544..1055] (1056) MPEG1: 36th window: [1120..1631] (1632) data needed: 512+framesize-32 A close look newmdct.c shows that the polyphase filterbank only uses data from [0..510] for each window. Perhaps because the window used by the filterbank is zero for the last point, so Takehiro's code doesn't bother to compute with it. FFT starts at 576-224-MDCTDELAY (304) = 576-FFTOFFSET */ typedef FLOAT chgrdata[2][2]; int lame_encode_mp3_frame( /* Output */ lame_internal_flags * gfc, /* Context */ sample_t const *inbuf_l, /* Input */ sample_t const *inbuf_r, /* Input */ unsigned char *mp3buf, /* Output */ int mp3buf_size) { /* Output */ SessionConfig_t const *const cfg = &gfc->cfg; int mp3count; III_psy_ratio masking_LR[2][2]; /*LR masking & energy */ III_psy_ratio masking_MS[2][2]; /*MS masking & energy */ const III_psy_ratio (*masking)[2]; /*pointer to selected maskings */ const sample_t *inbuf[2]; FLOAT tot_ener[2][4]; FLOAT ms_ener_ratio[2] = { .5, .5 }; FLOAT pe[2][2] = { {0., 0.}, {0., 0.} }, pe_MS[2][2] = { { 0., 0.}, { 0., 0.}}; FLOAT (*pe_use)[2]; int ch, gr; inbuf[0] = inbuf_l; inbuf[1] = inbuf_r; if (gfc->lame_encode_frame_init == 0) { /*first run? */ lame_encode_frame_init(gfc, inbuf); } /********************** padding *****************************/ /* padding method as described in * "MPEG-Layer3 / Bitstream Syntax and Decoding" * by Martin Sieler, Ralph Sperschneider * * note: there is no padding for the very first frame * * Robert Hegemann 2000-06-22 */ gfc->ov_enc.padding = FALSE; if ((gfc->sv_enc.slot_lag -= gfc->sv_enc.frac_SpF) < 0) { gfc->sv_enc.slot_lag += cfg->samplerate_out; gfc->ov_enc.padding = TRUE; } /**************************************** * Stage 1: psychoacoustic model * ****************************************/ { /* psychoacoustic model * psy model has a 1 granule (576) delay that we must compensate for * (mt 6/99). */ int ret; const sample_t *bufp[2] = {0, 0}; /* address of beginning of left & right granule */ int blocktype[2]; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { bufp[ch] = &inbuf[ch][576 + gr * 576 - FFTOFFSET]; } ret = L3psycho_anal_vbr(gfc, bufp, gr, masking_LR, masking_MS, pe[gr], pe_MS[gr], tot_ener[gr], blocktype); if (ret != 0) return -4; if (cfg->mode == JOINT_STEREO) { ms_ener_ratio[gr] = tot_ener[gr][2] + tot_ener[gr][3]; if (ms_ener_ratio[gr] > 0) ms_ener_ratio[gr] = tot_ener[gr][3] / ms_ener_ratio[gr]; } /* block type flags */ for (ch = 0; ch < cfg->channels_out; ch++) { gr_info *const cod_info = &gfc->l3_side.tt[gr][ch]; cod_info->block_type = blocktype[ch]; cod_info->mixed_block_flag = 0; } } } /* auto-adjust of ATH, useful for low volume */ adjust_ATH(gfc); /**************************************** * Stage 2: MDCT * ****************************************/ /* polyphase filtering / mdct */ mdct_sub48(gfc, inbuf[0], inbuf[1]); /**************************************** * Stage 3: MS/LR decision * ****************************************/ /* Here will be selected MS or LR coding of the 2 stereo channels */ gfc->ov_enc.mode_ext = MPG_MD_LR_LR; if (cfg->force_ms) { gfc->ov_enc.mode_ext = MPG_MD_MS_LR; } else if (cfg->mode == JOINT_STEREO) { /* ms_ratio = is scaled, for historical reasons, to look like a ratio of side_channel / total. 0 = signal is 100% mono .5 = L & R uncorrelated */ /* [0] and [1] are the results for the two granules in MPEG-1, * in MPEG-2 it's only a faked averaging of the same value * _prev is the value of the last granule of the previous frame * _next is the value of the first granule of the next frame */ FLOAT sum_pe_MS = 0; FLOAT sum_pe_LR = 0; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { sum_pe_MS += pe_MS[gr][ch]; sum_pe_LR += pe[gr][ch]; } } /* based on PE: M/S coding would not use much more bits than L/R */ if (sum_pe_MS <= 1.00 * sum_pe_LR) { gr_info const *const gi0 = &gfc->l3_side.tt[0][0]; gr_info const *const gi1 = &gfc->l3_side.tt[cfg->mode_gr - 1][0]; if (gi0[0].block_type == gi0[1].block_type && gi1[0].block_type == gi1[1].block_type) { gfc->ov_enc.mode_ext = MPG_MD_MS_LR; } } } /* bit and noise allocation */ if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { masking = (const III_psy_ratio (*)[2])masking_MS; /* use MS masking */ pe_use = pe_MS; } else { masking = (const III_psy_ratio (*)[2])masking_LR; /* use LR masking */ pe_use = pe; } /* copy data for MP3 frame analyzer */ if (cfg->analysis && gfc->pinfo != NULL) { for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gfc->pinfo->ms_ratio[gr] = 0; gfc->pinfo->ms_ener_ratio[gr] = ms_ener_ratio[gr]; gfc->pinfo->blocktype[gr][ch] = gfc->l3_side.tt[gr][ch].block_type; gfc->pinfo->pe[gr][ch] = pe_use[gr][ch]; memcpy(gfc->pinfo->xr[gr][ch], &gfc->l3_side.tt[gr][ch].xr[0], sizeof(FLOAT) * 576); /* in psymodel, LR and MS data was stored in pinfo. switch to MS data: */ if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { gfc->pinfo->ers[gr][ch] = gfc->pinfo->ers[gr][ch + 2]; memcpy(gfc->pinfo->energy[gr][ch], gfc->pinfo->energy[gr][ch + 2], sizeof(gfc->pinfo->energy[gr][ch])); } } } } /**************************************** * Stage 4: quantization loop * ****************************************/ if (cfg->vbr == vbr_off || cfg->vbr == vbr_abr) { static FLOAT const fircoef[9] = { -0.0207887 * 5, -0.0378413 * 5, -0.0432472 * 5, -0.031183 * 5, 7.79609e-18 * 5, 0.0467745 * 5, 0.10091 * 5, 0.151365 * 5, 0.187098 * 5 }; int i; FLOAT f; for (i = 0; i < 18; i++) gfc->sv_enc.pefirbuf[i] = gfc->sv_enc.pefirbuf[i + 1]; f = 0.0; for (gr = 0; gr < cfg->mode_gr; gr++) for (ch = 0; ch < cfg->channels_out; ch++) f += pe_use[gr][ch]; gfc->sv_enc.pefirbuf[18] = f; f = gfc->sv_enc.pefirbuf[9]; for (i = 0; i < 9; i++) f += (gfc->sv_enc.pefirbuf[i] + gfc->sv_enc.pefirbuf[18 - i]) * fircoef[i]; f = (670 * 5 * cfg->mode_gr * cfg->channels_out) / f; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { pe_use[gr][ch] *= f; } } } switch (cfg->vbr) { default: case vbr_off: CBR_iteration_loop(gfc, (const FLOAT (*)[2])pe_use, ms_ener_ratio, masking); break; case vbr_abr: ABR_iteration_loop(gfc, (const FLOAT (*)[2])pe_use, ms_ener_ratio, masking); break; case vbr_rh: VBR_old_iteration_loop(gfc, (const FLOAT (*)[2])pe_use, ms_ener_ratio, masking); break; case vbr_mt: case vbr_mtrh: VBR_new_iteration_loop(gfc, (const FLOAT (*)[2])pe_use, ms_ener_ratio, masking); break; } /**************************************** * Stage 5: bitstream formatting * ****************************************/ /* write the frame to the bitstream */ (void) format_bitstream(gfc); /* copy mp3 bit buffer into array */ mp3count = copy_buffer(gfc, mp3buf, mp3buf_size, 1); if (cfg->write_lame_tag) { AddVbrFrame(gfc); } if (cfg->analysis && gfc->pinfo != NULL) { int framesize = 576 * cfg->mode_gr; for (ch = 0; ch < cfg->channels_out; ch++) { int j; for (j = 0; j < FFTOFFSET; j++) gfc->pinfo->pcmdata[ch][j] = gfc->pinfo->pcmdata[ch][j + framesize]; for (j = FFTOFFSET; j < 1600; j++) { gfc->pinfo->pcmdata[ch][j] = inbuf[ch][j - FFTOFFSET]; } } gfc->sv_qnt.masking_lower = 1.0; set_frame_pinfo(gfc, masking); } ++gfc->ov_enc.frame_number; updateStats(gfc); return mp3count; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/id3tag.h����������������������������������������������������������������������000644 �001751 �001751 �00000003414 13154046620 017437� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ #ifndef LAME_ID3_H #define LAME_ID3_H #define CHANGED_FLAG (1U << 0) #define ADD_V2_FLAG (1U << 1) #define V1_ONLY_FLAG (1U << 2) #define V2_ONLY_FLAG (1U << 3) #define SPACE_V1_FLAG (1U << 4) #define PAD_V2_FLAG (1U << 5) enum { MIMETYPE_NONE = 0, MIMETYPE_JPEG, MIMETYPE_PNG, MIMETYPE_GIF }; typedef struct FrameDataNode { struct FrameDataNode *nxt; uint32_t fid; /* Frame Identifier */ char lng[4]; /* 3-character language descriptor */ struct { union { char *l; /* ptr to Latin-1 chars */ unsigned short *u; /* ptr to UCS-2 text */ unsigned char *b; /* ptr to raw bytes */ } ptr; size_t dim; int enc; /* 0:Latin-1, 1:UCS-2, 2:RAW */ } dsc , txt; } FrameDataNode; typedef struct id3tag_spec { /* private data members */ unsigned int flags; int year; char *title; char *artist; char *album; char *comment; int track_id3v1; int genre_id3v1; unsigned char *albumart; unsigned int albumart_size; unsigned int padding_size; int albumart_mimetype; char language[4]; /* the language of the frame's content, according to ISO-639-2 */ FrameDataNode *v2_head, *v2_tail; } id3tag_spec; /* write tag into stream at current position */ extern int id3tag_write_v2(lame_global_flags * gfp); extern int id3tag_write_v1(lame_global_flags * gfp); /* * NOTE: A version 2 tag will NOT be added unless one of the text fields won't * fit in a version 1 tag (e.g. the title string is longer than 30 characters), * or the "id3tag_add_v2" or "id3tag_v2_only" functions are used. */ #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/mpglib_interface.c������������������������������������������������������������000644 �001751 �001751 �00000033175 11717721354 021567� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C; mode: fold -*- */ /* * LAME MP3 encoding engine * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 2003 Olcios * Copyright (c) 2008 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: mpglib_interface.c,v 1.44 2012/02/18 13:09:00 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef HAVE_MPGLIB #define hip_global_struct mpstr_tag #include "lame.h" #include "machine.h" #include "encoder.h" #include "interface.h" #include "util.h" #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED /* * OBSOLETE: * - kept to let it link * - forward declaration to silence compiler */ int CDECL lame_decode_init(void); int CDECL lame_decode( unsigned char * mp3buf, int len, short pcm_l[], short pcm_r[] ); int CDECL lame_decode_headers( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data ); int CDECL lame_decode1( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[] ); int CDECL lame_decode1_headers( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data ); int CDECL lame_decode1_headersB( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data, int *enc_delay, int *enc_padding ); int CDECL lame_decode_exit(void); #endif static MPSTR mp; int lame_decode_exit(void) { ExitMP3(&mp); return 0; } int lame_decode_init(void) { (void) InitMP3(&mp); return 0; } /* copy mono samples */ #define COPY_MONO(DST_TYPE, SRC_TYPE) \ DST_TYPE *pcm_l = (DST_TYPE *)pcm_l_raw; \ SRC_TYPE const *p_samples = (SRC_TYPE const *)p; \ for (i = 0; i < processed_samples; i++) \ *pcm_l++ = (DST_TYPE)(*p_samples++); /* copy stereo samples */ #define COPY_STEREO(DST_TYPE, SRC_TYPE) \ DST_TYPE *pcm_l = (DST_TYPE *)pcm_l_raw, *pcm_r = (DST_TYPE *)pcm_r_raw; \ SRC_TYPE const *p_samples = (SRC_TYPE const *)p; \ for (i = 0; i < processed_samples; i++) { \ *pcm_l++ = (DST_TYPE)(*p_samples++); \ *pcm_r++ = (DST_TYPE)(*p_samples++); \ } /* * For lame_decode: return code * -1 error * 0 ok, but need more data before outputing any samples * n number of samples output. either 576 or 1152 depending on MP3 file. */ static int decode1_headersB_clipchoice(PMPSTR pmp, unsigned char *buffer, size_t len, char pcm_l_raw[], char pcm_r_raw[], mp3data_struct * mp3data, int *enc_delay, int *enc_padding, char *p, size_t psize, int decoded_sample_size, int (*decodeMP3_ptr) (PMPSTR, unsigned char *, int, char *, int, int *)) { static const int smpls[2][4] = { /* Layer I II III */ {0, 384, 1152, 1152}, /* MPEG-1 */ {0, 384, 1152, 576} /* MPEG-2(.5) */ }; int processed_bytes; int processed_samples; /* processed samples per channel */ int ret; int i; int const len_l = len < INT_MAX ? (int) len : INT_MAX; int const psize_l = psize < INT_MAX ? (int) psize : INT_MAX; mp3data->header_parsed = 0; ret = (*decodeMP3_ptr) (pmp, buffer, len_l, p, psize_l, &processed_bytes); /* three cases: * 1. headers parsed, but data not complete * pmp->header_parsed==1 * pmp->framesize=0 * pmp->fsizeold=size of last frame, or 0 if this is first frame * * 2. headers, data parsed, but ancillary data not complete * pmp->header_parsed==1 * pmp->framesize=size of frame * pmp->fsizeold=size of last frame, or 0 if this is first frame * * 3. frame fully decoded: * pmp->header_parsed==0 * pmp->framesize=0 * pmp->fsizeold=size of frame (which is now the last frame) * */ if (pmp->header_parsed || pmp->fsizeold > 0 || pmp->framesize > 0) { mp3data->header_parsed = 1; mp3data->stereo = pmp->fr.stereo; mp3data->samplerate = freqs[pmp->fr.sampling_frequency]; mp3data->mode = pmp->fr.mode; mp3data->mode_ext = pmp->fr.mode_ext; mp3data->framesize = smpls[pmp->fr.lsf][pmp->fr.lay]; /* free format, we need the entire frame before we can determine * the bitrate. If we haven't gotten the entire frame, bitrate=0 */ if (pmp->fsizeold > 0) /* works for free format and fixed, no overrun, temporal results are < 400.e6 */ mp3data->bitrate = 8 * (4 + pmp->fsizeold) * mp3data->samplerate / (1.e3 * mp3data->framesize) + 0.5; else if (pmp->framesize > 0) mp3data->bitrate = 8 * (4 + pmp->framesize) * mp3data->samplerate / (1.e3 * mp3data->framesize) + 0.5; else mp3data->bitrate = tabsel_123[pmp->fr.lsf][pmp->fr.lay - 1][pmp->fr.bitrate_index]; if (pmp->num_frames > 0) { /* Xing VBR header found and num_frames was set */ mp3data->totalframes = pmp->num_frames; mp3data->nsamp = mp3data->framesize * pmp->num_frames; *enc_delay = pmp->enc_delay; *enc_padding = pmp->enc_padding; } } switch (ret) { case MP3_OK: switch (pmp->fr.stereo) { case 1: processed_samples = processed_bytes / decoded_sample_size; if (decoded_sample_size == sizeof(short)) { COPY_MONO(short, short) } else { COPY_MONO(sample_t, FLOAT) } break; case 2: processed_samples = (processed_bytes / decoded_sample_size) >> 1; if (decoded_sample_size == sizeof(short)) { COPY_STEREO(short, short) } else { COPY_STEREO(sample_t, FLOAT) } break; default: processed_samples = -1; assert(0); break; } break; case MP3_NEED_MORE: processed_samples = 0; break; case MP3_ERR: processed_samples = -1; break; default: processed_samples = -1; assert(0); break; } /*fprintf(stderr,"ok, more, err: %i %i %i\n", MP3_OK, MP3_NEED_MORE, MP3_ERR ); */ /*fprintf(stderr,"ret = %i out=%i\n", ret, processed_samples ); */ return processed_samples; } #define OUTSIZE_CLIPPED (4096*sizeof(short)) int lame_decode1_headersB(unsigned char *buffer, int len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data, int *enc_delay, int *enc_padding) { static char out[OUTSIZE_CLIPPED]; return decode1_headersB_clipchoice(&mp, buffer, len, (char *) pcm_l, (char *) pcm_r, mp3data, enc_delay, enc_padding, out, OUTSIZE_CLIPPED, sizeof(short), decodeMP3); } /* * For lame_decode: return code * -1 error * 0 ok, but need more data before outputing any samples * n number of samples output. Will be at most one frame of * MPEG data. */ int lame_decode1_headers(unsigned char *buffer, int len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int enc_delay, enc_padding; return lame_decode1_headersB(buffer, len, pcm_l, pcm_r, mp3data, &enc_delay, &enc_padding); } int lame_decode1(unsigned char *buffer, int len, short pcm_l[], short pcm_r[]) { mp3data_struct mp3data; return lame_decode1_headers(buffer, len, pcm_l, pcm_r, &mp3data); } /* * For lame_decode: return code * -1 error * 0 ok, but need more data before outputing any samples * n number of samples output. a multiple of 576 or 1152 depending on MP3 file. */ int lame_decode_headers(unsigned char *buffer, int len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int ret; int totsize = 0; /* number of decoded samples per channel */ for (;;) { switch (ret = lame_decode1_headers(buffer, len, pcm_l + totsize, pcm_r + totsize, mp3data)) { case -1: return ret; case 0: return totsize; default: totsize += ret; len = 0; /* future calls to decodeMP3 are just to flush buffers */ break; } } } int lame_decode(unsigned char *buffer, int len, short pcm_l[], short pcm_r[]) { mp3data_struct mp3data; return lame_decode_headers(buffer, len, pcm_l, pcm_r, &mp3data); } hip_t hip_decode_init(void) { hip_t hip = lame_calloc(hip_global_flags, 1); InitMP3(hip); return hip; } int hip_decode_exit(hip_t hip) { if (hip) { ExitMP3(hip); free(hip); } return 0; } /* we forbid input with more than 1152 samples per channel for output in the unclipped mode */ #define OUTSIZE_UNCLIPPED (1152*2*sizeof(FLOAT)) int hip_decode1_unclipped(hip_t hip, unsigned char *buffer, size_t len, sample_t pcm_l[], sample_t pcm_r[]) { static char out[OUTSIZE_UNCLIPPED]; mp3data_struct mp3data; int enc_delay, enc_padding; if (hip) { return decode1_headersB_clipchoice(hip, buffer, len, (char *) pcm_l, (char *) pcm_r, &mp3data, &enc_delay, &enc_padding, out, OUTSIZE_UNCLIPPED, sizeof(FLOAT), decodeMP3_unclipped); } return 0; } /* * For hip_decode: return code * -1 error * 0 ok, but need more data before outputing any samples * n number of samples output. Will be at most one frame of * MPEG data. */ int hip_decode1_headers(hip_t hip, unsigned char *buffer, size_t len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int enc_delay, enc_padding; return hip_decode1_headersB(hip, buffer, len, pcm_l, pcm_r, mp3data, &enc_delay, &enc_padding); } int hip_decode1(hip_t hip, unsigned char *buffer, size_t len, short pcm_l[], short pcm_r[]) { mp3data_struct mp3data; return hip_decode1_headers(hip, buffer, len, pcm_l, pcm_r, &mp3data); } /* * For hip_decode: return code * -1 error * 0 ok, but need more data before outputing any samples * n number of samples output. a multiple of 576 or 1152 depending on MP3 file. */ int hip_decode_headers(hip_t hip, unsigned char *buffer, size_t len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data) { int ret; int totsize = 0; /* number of decoded samples per channel */ for (;;) { switch (ret = hip_decode1_headers(hip, buffer, len, pcm_l + totsize, pcm_r + totsize, mp3data)) { case -1: return ret; case 0: return totsize; default: totsize += ret; len = 0; /* future calls to decodeMP3 are just to flush buffers */ break; } } } int hip_decode(hip_t hip, unsigned char *buffer, size_t len, short pcm_l[], short pcm_r[]) { mp3data_struct mp3data; return hip_decode_headers(hip, buffer, len, pcm_l, pcm_r, &mp3data); } int hip_decode1_headersB(hip_t hip, unsigned char *buffer, size_t len, short pcm_l[], short pcm_r[], mp3data_struct * mp3data, int *enc_delay, int *enc_padding) { static char out[OUTSIZE_CLIPPED]; if (hip) { return decode1_headersB_clipchoice(hip, buffer, len, (char *) pcm_l, (char *) pcm_r, mp3data, enc_delay, enc_padding, out, OUTSIZE_CLIPPED, sizeof(short), decodeMP3); } return -1; } void hip_set_pinfo(hip_t hip, plotting_data* pinfo) { if (hip) { hip->pinfo = pinfo; } } void hip_set_errorf(hip_t hip, lame_report_function func) { if (hip) { hip->report_err = func; } } void hip_set_debugf(hip_t hip, lame_report_function func) { if (hip) { hip->report_dbg = func; } } void hip_set_msgf (hip_t hip, lame_report_function func) { if (hip) { hip->report_msg = func; } } #endif /* end of mpglib_interface.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/util.h������������������������������������������������������������������������000644 �001751 �001751 �00000052650 13154046620 017247� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * lame utility library include file * * Copyright (c) 1999 Albert L Faber * Copyright (c) 2008 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_UTIL_H #define LAME_UTIL_H #include "l3side.h" #include "id3tag.h" #include "lame_global_flags.h" #ifdef __cplusplus extern "C" { #endif /*********************************************************************** * * Global Definitions * ***********************************************************************/ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE (!FALSE) #endif #ifdef UINT_MAX # define MAX_U_32_NUM UINT_MAX #else # define MAX_U_32_NUM 0xFFFFFFFF #endif #ifndef PI # ifdef M_PI # define PI M_PI # else # define PI 3.14159265358979323846 # endif #endif #ifdef M_LN2 # define LOG2 M_LN2 #else # define LOG2 0.69314718055994530942 #endif #ifdef M_LN10 # define LOG10 M_LN10 #else # define LOG10 2.30258509299404568402 #endif #ifdef M_SQRT2 # define SQRT2 M_SQRT2 #else # define SQRT2 1.41421356237309504880 #endif #define CRC16_POLYNOMIAL 0x8005 #define MAX_BITS_PER_CHANNEL 4095 #define MAX_BITS_PER_GRANULE 7680 /* "bit_stream.h" Definitions */ #define BUFFER_SIZE LAME_MAXMP3BUFFER #define Min(A, B) ((A) < (B) ? (A) : (B)) #define Max(A, B) ((A) > (B) ? (A) : (B)) /* log/log10 approximations */ #ifdef USE_FAST_LOG #define FAST_LOG10(x) (fast_log2(x)*(LOG2/LOG10)) #define FAST_LOG(x) (fast_log2(x)*LOG2) #define FAST_LOG10_X(x,y) (fast_log2(x)*(LOG2/LOG10*(y))) #define FAST_LOG_X(x,y) (fast_log2(x)*(LOG2*(y))) #else #define FAST_LOG10(x) log10(x) #define FAST_LOG(x) log(x) #define FAST_LOG10_X(x,y) (log10(x)*(y)) #define FAST_LOG_X(x,y) (log(x)*(y)) #endif struct replaygain_data; #ifndef replaygain_data_defined #define replaygain_data_defined typedef struct replaygain_data replaygain_t; #endif struct plotting_data; #ifndef plotting_data_defined #define plotting_data_defined typedef struct plotting_data plotting_data; #endif /*********************************************************************** * * Global Type Definitions * ***********************************************************************/ typedef struct { void *aligned; /* pointer to ie. 128 bit aligned memory */ void *pointer; /* to use with malloc/free */ } aligned_pointer_t; void calloc_aligned(aligned_pointer_t * ptr, unsigned int size, unsigned int bytes); void free_aligned(aligned_pointer_t * ptr); /* "bit_stream.h" Type Definitions */ typedef struct bit_stream_struc { unsigned char *buf; /* bit stream buffer */ int buf_size; /* size of buffer (in number of bytes) */ int totbit; /* bit counter of bit stream */ int buf_byte_idx; /* pointer to top byte in buffer */ int buf_bit_idx; /* pointer to top bit of top byte in buffer */ /* format of file in rd mode (BINARY/ASCII) */ } Bit_stream_struc; typedef struct { int sum; /* what we have seen so far */ int seen; /* how many frames we have seen in this chunk */ int want; /* how many frames we want to collect into one chunk */ int pos; /* actual position in our bag */ int size; /* size of our bag */ int *bag; /* pointer to our bag */ unsigned int nVbrNumFrames; unsigned long nBytesWritten; /* VBR tag data */ unsigned int TotalFrameSize; } VBR_seek_info_t; /** * ATH related stuff, if something new ATH related has to be added, * please plugg it here into the ATH_t struct */ typedef struct { int use_adjust; /* method for the auto adjustment */ FLOAT aa_sensitivity_p; /* factor for tuning the (sample power) point below which adaptive threshold of hearing adjustment occurs */ FLOAT adjust_factor; /* lowering based on peak volume, 1 = no lowering */ FLOAT adjust_limit; /* limit for dynamic ATH adjust */ FLOAT decay; /* determined to lower x dB each second */ FLOAT floor; /* lowest ATH value */ FLOAT l[SBMAX_l]; /* ATH for sfbs in long blocks */ FLOAT s[SBMAX_s]; /* ATH for sfbs in short blocks */ FLOAT psfb21[PSFB21]; /* ATH for partitionned sfb21 in long blocks */ FLOAT psfb12[PSFB12]; /* ATH for partitionned sfb12 in short blocks */ FLOAT cb_l[CBANDS]; /* ATH for long block convolution bands */ FLOAT cb_s[CBANDS]; /* ATH for short block convolution bands */ FLOAT eql_w[BLKSIZE / 2]; /* equal loudness weights (based on ATH) */ } ATH_t; /** * PSY Model related stuff */ typedef struct { FLOAT masking_lower[CBANDS]; FLOAT minval[CBANDS]; FLOAT rnumlines[CBANDS]; FLOAT mld_cb[CBANDS]; FLOAT mld[Max(SBMAX_l,SBMAX_s)]; FLOAT bo_weight[Max(SBMAX_l,SBMAX_s)]; /* band weight long scalefactor bands, at transition */ FLOAT attack_threshold; /* short block tuning */ int s3ind[CBANDS][2]; int numlines[CBANDS]; int bm[Max(SBMAX_l,SBMAX_s)]; int bo[Max(SBMAX_l,SBMAX_s)]; int npart; int n_sb; /* SBMAX_l or SBMAX_s */ FLOAT *s3; } PsyConst_CB2SB_t; /** * global data constants */ typedef struct { FLOAT window[BLKSIZE], window_s[BLKSIZE_s / 2]; PsyConst_CB2SB_t l; PsyConst_CB2SB_t s; PsyConst_CB2SB_t l_to_s; FLOAT attack_threshold[4]; FLOAT decay; int force_short_block_calc; } PsyConst_t; typedef struct { FLOAT nb_l1[4][CBANDS], nb_l2[4][CBANDS]; FLOAT nb_s1[4][CBANDS], nb_s2[4][CBANDS]; III_psy_xmin thm[4]; III_psy_xmin en[4]; /* loudness calculation (for adaptive threshold of hearing) */ FLOAT loudness_sq_save[2]; /* account for granule delay of L3psycho_anal */ FLOAT tot_ener[4]; FLOAT last_en_subshort[4][9]; int last_attacks[4]; int blocktype_old[2]; } PsyStateVar_t; typedef struct { /* loudness calculation (for adaptive threshold of hearing) */ FLOAT loudness_sq[2][2]; /* loudness^2 approx. per granule and channel */ } PsyResult_t; /* variables used by encoder.c */ typedef struct { /* variables for newmdct.c */ FLOAT sb_sample[2][2][18][SBLIMIT]; FLOAT amp_filter[32]; /* variables used by util.c */ /* BPC = maximum number of filter convolution windows to precompute */ #define BPC 320 double itime[2]; /* float precision seems to be not enough */ sample_t *inbuf_old[2]; sample_t *blackfilt[2 * BPC + 1]; FLOAT pefirbuf[19]; /* used for padding */ int frac_SpF; int slot_lag; /* variables for bitstream.c */ /* mpeg1: buffer=511 bytes smallest frame: 96-38(sideinfo)=58 * max number of frames in reservoir: 8 * mpeg2: buffer=255 bytes. smallest frame: 24-23bytes=1 * with VBR, if you are encoding all silence, it is possible to * have 8kbs/24khz frames with 1byte of data each, which means we need * to buffer up to 255 headers! */ /* also, max_header_buf has to be a power of two */ #define MAX_HEADER_BUF 256 #define MAX_HEADER_LEN 40 /* max size of header is 38 */ struct { int write_timing; int ptr; char buf[MAX_HEADER_LEN]; } header[MAX_HEADER_BUF]; int h_ptr; int w_ptr; int ancillary_flag; /* variables for reservoir.c */ int ResvSize; /* in bits */ int ResvMax; /* in bits */ int in_buffer_nsamples; sample_t *in_buffer_0; sample_t *in_buffer_1; #ifndef MFSIZE # define MFSIZE ( 3*1152 + ENCDELAY - MDCTDELAY ) #endif sample_t mfbuf[2][MFSIZE]; int mf_samples_to_encode; int mf_size; } EncStateVar_t; typedef struct { /* simple statistics */ int bitrate_channelmode_hist[16][4 + 1]; int bitrate_blocktype_hist[16][4 + 1 + 1]; /*norm/start/short/stop/mixed(short)/sum */ int bitrate_index; int frame_number; /* number of frames encoded */ int padding; /* padding for the current frame? */ int mode_ext; int encoder_delay; int encoder_padding; /* number of samples of padding appended to input */ } EncResult_t; /* variables used by quantize.c */ typedef struct { /* variables for nspsytune */ FLOAT longfact[SBMAX_l]; FLOAT shortfact[SBMAX_s]; FLOAT masking_lower; FLOAT mask_adjust; /* the dbQ stuff */ FLOAT mask_adjust_short; /* the dbQ stuff */ int OldValue[2]; int CurrentStep[2]; int pseudohalf[SFBMAX]; int sfb21_extra; /* will be set in lame_init_params */ int substep_shaping; /* 0 = no substep 1 = use substep shaping at last step(VBR only) (not implemented yet) 2 = use substep inside loop 3 = use substep inside loop and last step */ char bv_scf[576]; } QntStateVar_t; typedef struct { replaygain_t *rgdata; /* ReplayGain */ } RpgStateVar_t; typedef struct { FLOAT noclipScale; /* user-specified scale factor required for preventing clipping */ sample_t PeakSample; int RadioGain; int noclipGainChange; /* gain change required for preventing clipping */ } RpgResult_t; typedef struct { int version; /* 0=MPEG-2/2.5 1=MPEG-1 */ int samplerate_index; int sideinfo_len; int noise_shaping; /* 0 = none 1 = ISO AAC model 2 = allow scalefac_select=1 */ int subblock_gain; /* 0 = no, 1 = yes */ int use_best_huffman; /* 0 = no. 1=outside loop 2=inside loop(slow) */ int noise_shaping_amp; /* 0 = ISO model: amplify all distorted bands 1 = amplify within 50% of max (on db scale) 2 = amplify only most distorted band 3 = method 1 and refine with method 2 */ int noise_shaping_stop; /* 0 = stop at over=0, all scalefacs amplified or a scalefac has reached max value 1 = stop when all scalefacs amplified or a scalefac has reached max value 2 = stop when all scalefacs amplified */ int full_outer_loop; /* 0 = stop early after 0 distortion found. 1 = full search */ int lowpassfreq; int highpassfreq; int samplerate_in; /* input_samp_rate in Hz. default=44.1 kHz */ int samplerate_out; /* output_samp_rate. */ int channels_in; /* number of channels in the input data stream (PCM or decoded PCM) */ int channels_out; /* number of channels in the output data stream (not used for decoding) */ int mode_gr; /* granules per frame */ int force_ms; /* force M/S mode. requires mode=1 */ int quant_comp; int quant_comp_short; int use_temporal_masking_effect; int use_safe_joint_stereo; int preset; vbr_mode vbr; int vbr_avg_bitrate_kbps; int vbr_min_bitrate_index; /* min bitrate index */ int vbr_max_bitrate_index; /* max bitrate index */ int avg_bitrate; int enforce_min_bitrate; /* strictly enforce VBR_min_bitrate normaly, it will be violated for analog silence */ int findReplayGain; /* find the RG value? default=0 */ int findPeakSample; int decode_on_the_fly; /* decode on the fly? default=0 */ int analysis; int disable_reservoir; int buffer_constraint; /* enforce ISO spec as much as possible */ int free_format; int write_lame_tag; /* add Xing VBR tag? */ int error_protection; /* use 2 bytes per frame for a CRC checksum. default=0 */ int copyright; /* mark as copyright. default=0 */ int original; /* mark as original. default=1 */ int extension; /* the MP3 'private extension' bit. Meaningless */ int emphasis; /* Input PCM is emphased PCM (for instance from one of the rarely emphased CDs), it is STRONGLY not recommended to use this, because psycho does not take it into account, and last but not least many decoders don't care about these bits */ MPEG_mode mode; short_block_t short_blocks; float interChRatio; float msfix; /* Naoki's adjustment of Mid/Side maskings */ float ATH_offset_db;/* add to ATH this many db */ float ATH_offset_factor;/* change ATH by this factor, derived from ATH_offset_db */ float ATHcurve; /* change ATH formula 4 shape */ int ATHtype; int ATHonly; /* only use ATH */ int ATHshort; /* only use ATH for short blocks */ int noATH; /* disable ATH */ float ATHfixpoint; float adjust_alto_db; float adjust_bass_db; float adjust_treble_db; float adjust_sfb21_db; float compression_ratio; /* sizeof(wav file)/sizeof(mp3 file) */ /* lowpass and highpass filter control */ FLOAT lowpass1, lowpass2; /* normalized frequency bounds of passband */ FLOAT highpass1, highpass2; /* normalized frequency bounds of passband */ /* scale input by this amount before encoding at least not used for MP3 decoding */ FLOAT pcm_transform[2][2]; FLOAT minval; } SessionConfig_t; struct lame_internal_flags { /******************************************************************** * internal variables NOT set by calling program, and should not be * * modified by the calling program * ********************************************************************/ /* * Some remarks to the Class_ID field: * The Class ID is an Identifier for a pointer to this struct. * It is very unlikely that a pointer to lame_global_flags has the same 32 bits * in it's structure (large and other special properties, for instance prime). * * To test that the structure is right and initialized, use: * if ( gfc -> Class_ID == LAME_ID ) ... * Other remark: * If you set a flag to 0 for uninit data and 1 for init data, the right test * should be "if (flag == 1)" and NOT "if (flag)". Unintended modification * of this element will be otherwise misinterpreted as an init. */ # define LAME_ID 0xFFF88E3B unsigned long class_id; int lame_init_params_successful; int lame_encode_frame_init; int iteration_init_init; int fill_buffer_resample_init; SessionConfig_t cfg; /* variables used by lame.c */ Bit_stream_struc bs; III_side_info_t l3_side; scalefac_struct scalefac_band; PsyStateVar_t sv_psy; /* DATA FROM PSYMODEL.C */ PsyResult_t ov_psy; EncStateVar_t sv_enc; /* DATA FROM ENCODER.C */ EncResult_t ov_enc; QntStateVar_t sv_qnt; /* DATA FROM QUANTIZE.C */ RpgStateVar_t sv_rpg; RpgResult_t ov_rpg; /* optional ID3 tags, used in id3tag.c */ struct id3tag_spec tag_spec; uint16_t nMusicCRC; uint16_t _unused; /* CPU features */ struct { unsigned int MMX:1; /* Pentium MMX, Pentium II...IV, K6, K6-2, K6-III, Athlon */ unsigned int AMD_3DNow:1; /* K6-2, K6-III, Athlon */ unsigned int SSE:1; /* Pentium III, Pentium 4 */ unsigned int SSE2:1; /* Pentium 4, K8 */ unsigned int _unused:28; } CPU_features; VBR_seek_info_t VBR_seek_table; /* used for Xing VBR header */ ATH_t *ATH; /* all ATH related stuff */ PsyConst_t *cd_psy; /* used by the frame analyzer */ plotting_data *pinfo; hip_t hip; /* functions to replace with CPU feature optimized versions in takehiro.c */ int (*choose_table) (const int *ix, const int *const end, int *const s); void (*fft_fht) (FLOAT *, int); void (*init_xrpow_core) (gr_info * const cod_info, FLOAT xrpow[576], int upper, FLOAT * sum); lame_report_function report_msg; lame_report_function report_dbg; lame_report_function report_err; }; #ifndef lame_internal_flags_defined #define lame_internal_flags_defined typedef struct lame_internal_flags lame_internal_flags; #endif /*********************************************************************** * * Global Function Prototype Declarations * ***********************************************************************/ void freegfc(lame_internal_flags * const gfc); void free_id3tag(lame_internal_flags * const gfc); extern int BitrateIndex(int, int, int); extern int FindNearestBitrate(int, int, int); extern int map2MP3Frequency(int freq); extern int SmpFrqIndex(int, int *const); extern int nearestBitrateFullIndex(uint16_t brate); extern FLOAT ATHformula(SessionConfig_t const *cfg, FLOAT freq); extern FLOAT freq2bark(FLOAT freq); void disable_FPE(void); /* log/log10 approximations */ extern void init_log_table(void); extern ieee754_float32_t fast_log2(ieee754_float32_t x); int isResamplingNecessary(SessionConfig_t const* cfg); void fill_buffer(lame_internal_flags * gfc, sample_t *const mfbuf[2], sample_t const *const in_buffer[2], int nsamples, int *n_in, int *n_out); /* same as lame_decode1 (look in lame.h), but returns unclipped raw floating-point samples. It is declared here, not in lame.h, because it returns LAME's internal type sample_t. No more than 1152 samples per channel are allowed. */ int hip_decode1_unclipped(hip_t hip, unsigned char *mp3buf, size_t len, sample_t pcm_l[], sample_t pcm_r[]); extern int has_MMX(void); extern int has_3DNow(void); extern int has_SSE(void); extern int has_SSE2(void); /*********************************************************************** * * Macros about Message Printing and Exit * ***********************************************************************/ extern void lame_report_def(const char* format, va_list args); extern void lame_report_fnc(lame_report_function print_f, const char *, ...); extern void lame_errorf(const lame_internal_flags * gfc, const char *, ...); extern void lame_debugf(const lame_internal_flags * gfc, const char *, ...); extern void lame_msgf(const lame_internal_flags * gfc, const char *, ...); #define DEBUGF lame_debugf #define ERRORF lame_errorf #define MSGF lame_msgf int is_lame_internal_flags_valid(const lame_internal_flags * gfp); extern void hip_set_pinfo(hip_t hip, plotting_data* pinfo); #ifdef __cplusplus } #endif #endif /* LAME_UTIL_H */ ����������������������������������������������������������������������������������������lame-3.100/libmp3lame/quantize_pvt.c����������������������������������������������������������������000644 �001751 �001751 �00000102473 13154046620 021015� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * quantize_pvt source file * * Copyright (c) 1999-2002 Takehiro Tominaga * Copyright (c) 2000-2012 Robert Hegemann * Copyright (c) 2001 Naoki Shibata * Copyright (c) 2002-2005 Gabriel Bouvigne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: quantize_pvt.c,v 1.175 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "quantize_pvt.h" #include "reservoir.h" #include "lame-analysis.h" #include <float.h> #define NSATHSCALE 100 /* Assuming dynamic range=96dB, this value should be 92 */ /* The following table is used to implement the scalefactor partitioning for MPEG2 as described in section 2.4.3.2 of the IS. The indexing corresponds to the way the tables are presented in the IS: [table_number][row_in_table][column of nr_of_sfb] */ const int nr_of_sfb_block[6][3][4] = { { {6, 5, 5, 5}, {9, 9, 9, 9}, {6, 9, 9, 9} }, { {6, 5, 7, 3}, {9, 9, 12, 6}, {6, 9, 12, 6} }, { {11, 10, 0, 0}, {18, 18, 0, 0}, {15, 18, 0, 0} }, { {7, 7, 7, 0}, {12, 12, 12, 0}, {6, 15, 12, 0} }, { {6, 6, 6, 3}, {12, 9, 9, 6}, {6, 12, 9, 6} }, { {8, 8, 5, 0}, {15, 12, 9, 0}, {6, 18, 9, 0} } }; /* Table B.6: layer3 preemphasis */ const int pretab[SBMAX_l] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 }; /* Here are MPEG1 Table B.8 and MPEG2 Table B.1 -- Layer III scalefactor bands. Index into this using a method such as: idx = fr_ps->header->sampling_frequency + (fr_ps->header->version * 3) */ const scalefac_struct sfBandIndex[9] = { { /* Table B.2.b: 22.05 kHz */ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, {0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* Table B.2.c: 24 kHz */ /* docs: 332. mpg123(broken): 330 */ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 332, 394, 464, 540, 576}, {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* Table B.2.a: 16 kHz */ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, {0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* Table B.8.b: 44.1 kHz */ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576}, {0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* Table B.8.c: 48 kHz */ {0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576}, {0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* Table B.8.a: 32 kHz */ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576}, {0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* MPEG-2.5 11.025 kHz */ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, {0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, 402 / 3, 522 / 3, 576 / 3} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* MPEG-2.5 12 kHz */ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576}, {0 / 3, 12 / 3, 24 / 3, 36 / 3, 54 / 3, 78 / 3, 108 / 3, 144 / 3, 186 / 3, 240 / 3, 312 / 3, 402 / 3, 522 / 3, 576 / 3} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ }, { /* MPEG-2.5 8 kHz */ {0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192, 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576}, {0 / 3, 24 / 3, 48 / 3, 72 / 3, 108 / 3, 156 / 3, 216 / 3, 288 / 3, 372 / 3, 480 / 3, 486 / 3, 492 / 3, 498 / 3, 576 / 3} , {0, 0, 0, 0, 0, 0, 0} /* sfb21 pseudo sub bands */ , {0, 0, 0, 0, 0, 0, 0} /* sfb12 pseudo sub bands */ } }; /* FIXME: move global variables in some struct */ FLOAT pow20[Q_MAX + Q_MAX2 + 1]; FLOAT ipow20[Q_MAX]; FLOAT pow43[PRECALC_SIZE]; /* initialized in first call to iteration_init */ #ifdef TAKEHIRO_IEEE754_HACK FLOAT adj43asm[PRECALC_SIZE]; #else FLOAT adj43[PRECALC_SIZE]; #endif /* compute the ATH for each scalefactor band cd range: 0..96db Input: 3.3kHz signal 32767 amplitude (3.3kHz is where ATH is smallest = -5db) longblocks: sfb=12 en0/bw=-11db max_en0 = 1.3db shortblocks: sfb=5 -9db 0db Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) longblocks: amp=1 sfb=12 en0/bw=-103 db max_en0 = -92db amp=32767 sfb=12 -12 db -1.4db Input: 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 (repeated) shortblocks: amp=1 sfb=5 en0/bw= -99 -86 amp=32767 sfb=5 -9 db 4db MAX energy of largest wave at 3.3kHz = 1db AVE energy of largest wave at 3.3kHz = -11db Let's take AVE: -11db = maximum signal in sfb=12. Dynamic range of CD: 96db. Therefor energy of smallest audible wave in sfb=12 = -11 - 96 = -107db = ATH at 3.3kHz. ATH formula for this wave: -5db. To adjust to LAME scaling, we need ATH = ATH_formula - 103 (db) ATH = ATH * 2.5e-10 (ener) */ static FLOAT ATHmdct(SessionConfig_t const *cfg, FLOAT f) { FLOAT ath; ath = ATHformula(cfg, f); if (cfg->ATHfixpoint > 0) { ath -= cfg->ATHfixpoint; } else { ath -= NSATHSCALE; } ath += cfg->ATH_offset_db; /* modify the MDCT scaling for the ATH and convert to energy */ ath = powf(10.0f, ath * 0.1f); return ath; } static void compute_ath(lame_internal_flags const* gfc) { SessionConfig_t const *const cfg = &gfc->cfg; FLOAT *const ATH_l = gfc->ATH->l; FLOAT *const ATH_psfb21 = gfc->ATH->psfb21; FLOAT *const ATH_s = gfc->ATH->s; FLOAT *const ATH_psfb12 = gfc->ATH->psfb12; int sfb, i, start, end; FLOAT ATH_f; FLOAT const samp_freq = cfg->samplerate_out; for (sfb = 0; sfb < SBMAX_l; sfb++) { start = gfc->scalefac_band.l[sfb]; end = gfc->scalefac_band.l[sfb + 1]; ATH_l[sfb] = FLOAT_MAX; for (i = start; i < end; i++) { FLOAT const freq = i * samp_freq / (2 * 576); ATH_f = ATHmdct(cfg, freq); /* freq in kHz */ ATH_l[sfb] = Min(ATH_l[sfb], ATH_f); } } for (sfb = 0; sfb < PSFB21; sfb++) { start = gfc->scalefac_band.psfb21[sfb]; end = gfc->scalefac_band.psfb21[sfb + 1]; ATH_psfb21[sfb] = FLOAT_MAX; for (i = start; i < end; i++) { FLOAT const freq = i * samp_freq / (2 * 576); ATH_f = ATHmdct(cfg, freq); /* freq in kHz */ ATH_psfb21[sfb] = Min(ATH_psfb21[sfb], ATH_f); } } for (sfb = 0; sfb < SBMAX_s; sfb++) { start = gfc->scalefac_band.s[sfb]; end = gfc->scalefac_band.s[sfb + 1]; ATH_s[sfb] = FLOAT_MAX; for (i = start; i < end; i++) { FLOAT const freq = i * samp_freq / (2 * 192); ATH_f = ATHmdct(cfg, freq); /* freq in kHz */ ATH_s[sfb] = Min(ATH_s[sfb], ATH_f); } ATH_s[sfb] *= (gfc->scalefac_band.s[sfb + 1] - gfc->scalefac_band.s[sfb]); } for (sfb = 0; sfb < PSFB12; sfb++) { start = gfc->scalefac_band.psfb12[sfb]; end = gfc->scalefac_band.psfb12[sfb + 1]; ATH_psfb12[sfb] = FLOAT_MAX; for (i = start; i < end; i++) { FLOAT const freq = i * samp_freq / (2 * 192); ATH_f = ATHmdct(cfg, freq); /* freq in kHz */ ATH_psfb12[sfb] = Min(ATH_psfb12[sfb], ATH_f); } /*not sure about the following */ ATH_psfb12[sfb] *= (gfc->scalefac_band.s[13] - gfc->scalefac_band.s[12]); } /* no-ATH mode: * reduce ATH to -200 dB */ if (cfg->noATH) { for (sfb = 0; sfb < SBMAX_l; sfb++) { ATH_l[sfb] = 1E-20; } for (sfb = 0; sfb < PSFB21; sfb++) { ATH_psfb21[sfb] = 1E-20; } for (sfb = 0; sfb < SBMAX_s; sfb++) { ATH_s[sfb] = 1E-20; } for (sfb = 0; sfb < PSFB12; sfb++) { ATH_psfb12[sfb] = 1E-20; } } /* work in progress, don't rely on it too much */ gfc->ATH->floor = 10. * log10(ATHmdct(cfg, -1.)); /* { FLOAT g=10000, t=1e30, x; for ( f = 100; f < 10000; f++ ) { x = ATHmdct( cfg, f ); if ( t > x ) t = x, g = f; } printf("min=%g\n", g); } */ } static float const payload_long[2][4] = { {-0.000f, -0.000f, -0.000f, +0.000f} , {-0.500f, -0.250f, -0.025f, +0.500f} }; static float const payload_short[2][4] = { {-0.000f, -0.000f, -0.000f, +0.000f} , {-2.000f, -1.000f, -0.050f, +0.500f} }; /************************************************************************/ /* initialization for iteration_loop */ /************************************************************************/ void iteration_init(lame_internal_flags * gfc) { SessionConfig_t const *const cfg = &gfc->cfg; III_side_info_t *const l3_side = &gfc->l3_side; FLOAT adjust, db; int i, sel; if (gfc->iteration_init_init == 0) { gfc->iteration_init_init = 1; l3_side->main_data_begin = 0; compute_ath(gfc); pow43[0] = 0.0; for (i = 1; i < PRECALC_SIZE; i++) pow43[i] = pow((FLOAT) i, 4.0 / 3.0); #ifdef TAKEHIRO_IEEE754_HACK adj43asm[0] = 0.0; for (i = 1; i < PRECALC_SIZE; i++) adj43asm[i] = i - 0.5 - pow(0.5 * (pow43[i - 1] + pow43[i]), 0.75); #else for (i = 0; i < PRECALC_SIZE - 1; i++) adj43[i] = (i + 1) - pow(0.5 * (pow43[i] + pow43[i + 1]), 0.75); adj43[i] = 0.5; #endif for (i = 0; i < Q_MAX; i++) ipow20[i] = pow(2.0, (double) (i - 210) * -0.1875); for (i = 0; i <= Q_MAX + Q_MAX2; i++) pow20[i] = pow(2.0, (double) (i - 210 - Q_MAX2) * 0.25); huffman_init(gfc); init_xrpow_core_init(gfc); sel = 1;/* RH: all modes like vbr-new (cfg->vbr == vbr_mt || cfg->vbr == vbr_mtrh) ? 1 : 0;*/ /* long */ db = cfg->adjust_bass_db + payload_long[sel][0]; adjust = powf(10.f, db * 0.1f); for (i = 0; i <= 6; ++i) { gfc->sv_qnt.longfact[i] = adjust; } db = cfg->adjust_alto_db + payload_long[sel][1]; adjust = powf(10.f, db * 0.1f); for (; i <= 13; ++i) { gfc->sv_qnt.longfact[i] = adjust; } db = cfg->adjust_treble_db + payload_long[sel][2]; adjust = powf(10.f, db * 0.1f); for (; i <= 20; ++i) { gfc->sv_qnt.longfact[i] = adjust; } db = cfg->adjust_sfb21_db + payload_long[sel][3]; adjust = powf(10.f, db * 0.1f); for (; i < SBMAX_l; ++i) { gfc->sv_qnt.longfact[i] = adjust; } /* short */ db = cfg->adjust_bass_db + payload_short[sel][0]; adjust = powf(10.f, db * 0.1f); for (i = 0; i <= 2; ++i) { gfc->sv_qnt.shortfact[i] = adjust; } db = cfg->adjust_alto_db + payload_short[sel][1]; adjust = powf(10.f, db * 0.1f); for (; i <= 6; ++i) { gfc->sv_qnt.shortfact[i] = adjust; } db = cfg->adjust_treble_db + payload_short[sel][2]; adjust = powf(10.f, db * 0.1f); for (; i <= 11; ++i) { gfc->sv_qnt.shortfact[i] = adjust; } db = cfg->adjust_sfb21_db + payload_short[sel][3]; adjust = powf(10.f, db * 0.1f); for (; i < SBMAX_s; ++i) { gfc->sv_qnt.shortfact[i] = adjust; } } } /************************************************************************ * allocate bits among 2 channels based on PE * mt 6/99 * bugfixes rh 8/01: often allocated more than the allowed 4095 bits ************************************************************************/ int on_pe(lame_internal_flags * gfc, const FLOAT pe[][2], int targ_bits[2], int mean_bits, int gr, int cbr) { SessionConfig_t const *const cfg = &gfc->cfg; int extra_bits = 0, tbits, bits; int add_bits[2] = {0, 0}; int max_bits; /* maximum allowed bits for this granule */ int ch; /* allocate targ_bits for granule */ ResvMaxBits(gfc, mean_bits, &tbits, &extra_bits, cbr); max_bits = tbits + extra_bits; if (max_bits > MAX_BITS_PER_GRANULE) /* hard limit per granule */ max_bits = MAX_BITS_PER_GRANULE; for (bits = 0, ch = 0; ch < cfg->channels_out; ++ch) { /****************************************************************** * allocate bits for each channel ******************************************************************/ targ_bits[ch] = Min(MAX_BITS_PER_CHANNEL, tbits / cfg->channels_out); add_bits[ch] = targ_bits[ch] * pe[gr][ch] / 700.0 - targ_bits[ch]; /* at most increase bits by 1.5*average */ if (add_bits[ch] > mean_bits * 3 / 4) add_bits[ch] = mean_bits * 3 / 4; if (add_bits[ch] < 0) add_bits[ch] = 0; if (add_bits[ch] + targ_bits[ch] > MAX_BITS_PER_CHANNEL) add_bits[ch] = Max(0, MAX_BITS_PER_CHANNEL - targ_bits[ch]); bits += add_bits[ch]; } if (bits > extra_bits && bits > 0) { for (ch = 0; ch < cfg->channels_out; ++ch) { add_bits[ch] = extra_bits * add_bits[ch] / bits; } } for (ch = 0; ch < cfg->channels_out; ++ch) { targ_bits[ch] += add_bits[ch]; extra_bits -= add_bits[ch]; } for (bits = 0, ch = 0; ch < cfg->channels_out; ++ch) { bits += targ_bits[ch]; } if (bits > MAX_BITS_PER_GRANULE) { int sum = 0; for (ch = 0; ch < cfg->channels_out; ++ch) { targ_bits[ch] *= MAX_BITS_PER_GRANULE; targ_bits[ch] /= bits; sum += targ_bits[ch]; } assert(sum <= MAX_BITS_PER_GRANULE); } return max_bits; } void reduce_side(int targ_bits[2], FLOAT ms_ener_ratio, int mean_bits, int max_bits) { int move_bits; FLOAT fac; assert(max_bits <= MAX_BITS_PER_GRANULE); assert(targ_bits[0] + targ_bits[1] <= MAX_BITS_PER_GRANULE); /* ms_ener_ratio = 0: allocate 66/33 mid/side fac=.33 * ms_ener_ratio =.5: allocate 50/50 mid/side fac= 0 */ /* 75/25 split is fac=.5 */ /* float fac = .50*(.5-ms_ener_ratio[gr])/.5; */ fac = .33 * (.5 - ms_ener_ratio) / .5; if (fac < 0) fac = 0; if (fac > .5) fac = .5; /* number of bits to move from side channel to mid channel */ /* move_bits = fac*targ_bits[1]; */ move_bits = fac * .5 * (targ_bits[0] + targ_bits[1]); if (move_bits > MAX_BITS_PER_CHANNEL - targ_bits[0]) { move_bits = MAX_BITS_PER_CHANNEL - targ_bits[0]; } if (move_bits < 0) move_bits = 0; if (targ_bits[1] >= 125) { /* dont reduce side channel below 125 bits */ if (targ_bits[1] - move_bits > 125) { /* if mid channel already has 2x more than average, dont bother */ /* mean_bits = bits per granule (for both channels) */ if (targ_bits[0] < mean_bits) targ_bits[0] += move_bits; targ_bits[1] -= move_bits; } else { targ_bits[0] += targ_bits[1] - 125; targ_bits[1] = 125; } } move_bits = targ_bits[0] + targ_bits[1]; if (move_bits > max_bits) { targ_bits[0] = (max_bits * targ_bits[0]) / move_bits; targ_bits[1] = (max_bits * targ_bits[1]) / move_bits; } assert(targ_bits[0] <= MAX_BITS_PER_CHANNEL); assert(targ_bits[1] <= MAX_BITS_PER_CHANNEL); assert(targ_bits[0] + targ_bits[1] <= MAX_BITS_PER_GRANULE); } /** * Robert Hegemann 2001-04-27: * this adjusts the ATH, keeping the original noise floor * affects the higher frequencies more than the lower ones */ FLOAT athAdjust(FLOAT a, FLOAT x, FLOAT athFloor, float ATHfixpoint) { /* work in progress */ FLOAT const o = 90.30873362f; FLOAT const p = (ATHfixpoint < 1.f) ? 94.82444863f : ATHfixpoint; FLOAT u = FAST_LOG10_X(x, 10.0f); FLOAT const v = a * a; FLOAT w = 0.0f; u -= athFloor; /* undo scaling */ if (v > 1E-20f) w = 1.f + FAST_LOG10_X(v, 10.0f / o); if (w < 0) w = 0.f; u *= w; u += athFloor + o - p; /* redo scaling */ return powf(10.f, 0.1f * u); } /*************************************************************************/ /* calc_xmin */ /*************************************************************************/ /* Calculate the allowed distortion for each scalefactor band, as determined by the psychoacoustic model. xmin(sb) = ratio(sb) * en(sb) / bw(sb) returns number of sfb's with energy > ATH */ int calc_xmin(lame_internal_flags const *gfc, III_psy_ratio const *const ratio, gr_info * const cod_info, FLOAT * pxmin) { SessionConfig_t const *const cfg = &gfc->cfg; int sfb, gsfb, j = 0, ath_over = 0, k; ATH_t const *const ATH = gfc->ATH; const FLOAT *const xr = cod_info->xr; int max_nonzero; for (gsfb = 0; gsfb < cod_info->psy_lmax; gsfb++) { FLOAT en0, xmin; FLOAT rh1, rh2, rh3; int width, l; xmin = athAdjust(ATH->adjust_factor, ATH->l[gsfb], ATH->floor, cfg->ATHfixpoint); xmin *= gfc->sv_qnt.longfact[gsfb]; width = cod_info->width[gsfb]; rh1 = xmin / width; #ifdef DBL_EPSILON rh2 = DBL_EPSILON; #else rh2 = 2.2204460492503131e-016; #endif en0 = 0.0; for (l = 0; l < width; ++l) { FLOAT const xa = xr[j++]; FLOAT const x2 = xa * xa; en0 += x2; rh2 += (x2 < rh1) ? x2 : rh1; } if (en0 > xmin) ath_over++; if (en0 < xmin) { rh3 = en0; } else if (rh2 < xmin) { rh3 = xmin; } else { rh3 = rh2; } xmin = rh3; { FLOAT const e = ratio->en.l[gsfb]; if (e > 1e-12f) { FLOAT x; x = en0 * ratio->thm.l[gsfb] / e; x *= gfc->sv_qnt.longfact[gsfb]; if (xmin < x) xmin = x; } } xmin = Max(xmin, DBL_EPSILON); cod_info->energy_above_cutoff[gsfb] = (en0 > xmin+1e-14f) ? 1 : 0; *pxmin++ = xmin; } /* end of long block loop */ /*use this function to determine the highest non-zero coeff */ max_nonzero = 0; for (k = 575; k > 0; --k) { if (fabs(xr[k]) > 1e-12f) { max_nonzero = k; break; } } if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type, but not SHORT */ max_nonzero |= 1; /* only odd numbers */ } else { max_nonzero /= 6; /* 3 short blocks */ max_nonzero *= 6; max_nonzero += 5; } if (gfc->sv_qnt.sfb21_extra == 0 && cfg->samplerate_out < 44000) { int const sfb_l = (cfg->samplerate_out <= 8000) ? 17 : 21; int const sfb_s = (cfg->samplerate_out <= 8000) ? 9 : 12; int limit = 575; if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type, but not SHORT */ limit = gfc->scalefac_band.l[sfb_l]-1; } else { limit = 3*gfc->scalefac_band.s[sfb_s]-1; } if (max_nonzero > limit) { max_nonzero = limit; } } cod_info->max_nonzero_coeff = max_nonzero; for (sfb = cod_info->sfb_smin; gsfb < cod_info->psymax; sfb++, gsfb += 3) { int width, b, l; FLOAT tmpATH; tmpATH = athAdjust(ATH->adjust_factor, ATH->s[sfb], ATH->floor, cfg->ATHfixpoint); tmpATH *= gfc->sv_qnt.shortfact[sfb]; width = cod_info->width[gsfb]; for (b = 0; b < 3; b++) { FLOAT en0 = 0.0, xmin = tmpATH; FLOAT rh1, rh2, rh3; rh1 = tmpATH / width; #ifdef DBL_EPSILON rh2 = DBL_EPSILON; #else rh2 = 2.2204460492503131e-016; #endif for (l = 0; l < width; ++l) { FLOAT const xa = xr[j++]; FLOAT const x2 = xa * xa; en0 += x2; rh2 += (x2 < rh1) ? x2 : rh1; } if (en0 > tmpATH) ath_over++; if (en0 < tmpATH) { rh3 = en0; } else if (rh2 < tmpATH) { rh3 = tmpATH; } else { rh3 = rh2; } xmin = rh3; { FLOAT const e = ratio->en.s[sfb][b]; if (e > 1e-12f) { FLOAT x; x = en0 * ratio->thm.s[sfb][b] / e; x *= gfc->sv_qnt.shortfact[sfb]; if (xmin < x) xmin = x; } } xmin = Max(xmin, DBL_EPSILON); cod_info->energy_above_cutoff[gsfb+b] = (en0 > xmin+1e-14f) ? 1 : 0; *pxmin++ = xmin; } /* b */ if (cfg->use_temporal_masking_effect) { if (pxmin[-3] > pxmin[-3 + 1]) pxmin[-3 + 1] += (pxmin[-3] - pxmin[-3 + 1]) * gfc->cd_psy->decay; if (pxmin[-3 + 1] > pxmin[-3 + 2]) pxmin[-3 + 2] += (pxmin[-3 + 1] - pxmin[-3 + 2]) * gfc->cd_psy->decay; } } /* end of short block sfb loop */ return ath_over; } static FLOAT calc_noise_core_c(const gr_info * const cod_info, int *startline, int l, FLOAT step) { FLOAT noise = 0; int j = *startline; const int *const ix = cod_info->l3_enc; if (j > cod_info->count1) { while (l--) { FLOAT temp; temp = cod_info->xr[j]; j++; noise += temp * temp; temp = cod_info->xr[j]; j++; noise += temp * temp; } } else if (j > cod_info->big_values) { FLOAT ix01[2]; ix01[0] = 0; ix01[1] = step; while (l--) { FLOAT temp; temp = fabs(cod_info->xr[j]) - ix01[ix[j]]; j++; noise += temp * temp; temp = fabs(cod_info->xr[j]) - ix01[ix[j]]; j++; noise += temp * temp; } } else { while (l--) { FLOAT temp; temp = fabs(cod_info->xr[j]) - pow43[ix[j]] * step; j++; noise += temp * temp; temp = fabs(cod_info->xr[j]) - pow43[ix[j]] * step; j++; noise += temp * temp; } } *startline = j; return noise; } /*************************************************************************/ /* calc_noise */ /*************************************************************************/ /* -oo dB => -1.00 */ /* - 6 dB => -0.97 */ /* - 3 dB => -0.80 */ /* - 2 dB => -0.64 */ /* - 1 dB => -0.38 */ /* 0 dB => 0.00 */ /* + 1 dB => +0.49 */ /* + 2 dB => +1.06 */ /* + 3 dB => +1.68 */ /* + 6 dB => +3.69 */ /* +10 dB => +6.45 */ int calc_noise(gr_info const *const cod_info, FLOAT const *l3_xmin, FLOAT * distort, calc_noise_result * const res, calc_noise_data * prev_noise) { int sfb, l, over = 0; FLOAT over_noise_db = 0; FLOAT tot_noise_db = 0; /* 0 dB relative to masking */ FLOAT max_noise = -20.0; /* -200 dB relative to masking */ int j = 0; const int *scalefac = cod_info->scalefac; res->over_SSD = 0; for (sfb = 0; sfb < cod_info->psymax; sfb++) { int const s = cod_info->global_gain - (((*scalefac++) + (cod_info->preflag ? pretab[sfb] : 0)) << (cod_info->scalefac_scale + 1)) - cod_info->subblock_gain[cod_info->window[sfb]] * 8; FLOAT const r_l3_xmin = 1.f / *l3_xmin++; FLOAT distort_ = 0.0f; FLOAT noise = 0.0f; if (prev_noise && (prev_noise->step[sfb] == s)) { /* use previously computed values */ j += cod_info->width[sfb]; distort_ = r_l3_xmin * prev_noise->noise[sfb]; noise = prev_noise->noise_log[sfb]; } else { FLOAT const step = POW20(s); l = cod_info->width[sfb] >> 1; if ((j + cod_info->width[sfb]) > cod_info->max_nonzero_coeff) { int usefullsize; usefullsize = cod_info->max_nonzero_coeff - j + 1; if (usefullsize > 0) l = usefullsize >> 1; else l = 0; } noise = calc_noise_core_c(cod_info, &j, l, step); if (prev_noise) { /* save noise values */ prev_noise->step[sfb] = s; prev_noise->noise[sfb] = noise; } distort_ = r_l3_xmin * noise; /* multiplying here is adding in dB, but can overflow */ noise = FAST_LOG10(Max(distort_, 1E-20f)); if (prev_noise) { /* save noise values */ prev_noise->noise_log[sfb] = noise; } } *distort++ = distort_; if (prev_noise) { /* save noise values */ prev_noise->global_gain = cod_info->global_gain;; } /*tot_noise *= Max(noise, 1E-20); */ tot_noise_db += noise; if (noise > 0.0) { int tmp; tmp = Max((int) (noise * 10 + .5), 1); res->over_SSD += tmp * tmp; over++; /* multiplying here is adding in dB -but can overflow */ /*over_noise *= noise; */ over_noise_db += noise; } max_noise = Max(max_noise, noise); } res->over_count = over; res->tot_noise = tot_noise_db; res->over_noise = over_noise_db; res->max_noise = max_noise; return over; } /************************************************************************ * * set_pinfo() * * updates plotting data * * Mark Taylor 2000-??-?? * * Robert Hegemann: moved noise/distortion calc into it * ************************************************************************/ static void set_pinfo(lame_internal_flags const *gfc, gr_info * const cod_info, const III_psy_ratio * const ratio, const int gr, const int ch) { SessionConfig_t const *const cfg = &gfc->cfg; int sfb, sfb2; int j, i, l, start, end, bw; FLOAT en0, en1; FLOAT const ifqstep = (cod_info->scalefac_scale == 0) ? .5 : 1.0; int const *const scalefac = cod_info->scalefac; FLOAT l3_xmin[SFBMAX], xfsf[SFBMAX]; calc_noise_result noise; (void) calc_xmin(gfc, ratio, cod_info, l3_xmin); (void) calc_noise(cod_info, l3_xmin, xfsf, &noise, 0); j = 0; sfb2 = cod_info->sfb_lmax; if (cod_info->block_type != SHORT_TYPE && !cod_info->mixed_block_flag) sfb2 = 22; for (sfb = 0; sfb < sfb2; sfb++) { start = gfc->scalefac_band.l[sfb]; end = gfc->scalefac_band.l[sfb + 1]; bw = end - start; for (en0 = 0.0; j < end; j++) en0 += cod_info->xr[j] * cod_info->xr[j]; en0 /= bw; /* convert to MDCT units */ en1 = 1e15; /* scaling so it shows up on FFT plot */ gfc->pinfo->en[gr][ch][sfb] = en1 * en0; gfc->pinfo->xfsf[gr][ch][sfb] = en1 * l3_xmin[sfb] * xfsf[sfb] / bw; if (ratio->en.l[sfb] > 0 && !cfg->ATHonly) en0 = en0 / ratio->en.l[sfb]; else en0 = 0.0; gfc->pinfo->thr[gr][ch][sfb] = en1 * Max(en0 * ratio->thm.l[sfb], gfc->ATH->l[sfb]); /* there is no scalefactor bands >= SBPSY_l */ gfc->pinfo->LAMEsfb[gr][ch][sfb] = 0; if (cod_info->preflag && sfb >= 11) gfc->pinfo->LAMEsfb[gr][ch][sfb] = -ifqstep * pretab[sfb]; if (sfb < SBPSY_l) { assert(scalefac[sfb] >= 0); /* scfsi should be decoded by caller side */ gfc->pinfo->LAMEsfb[gr][ch][sfb] -= ifqstep * scalefac[sfb]; } } /* for sfb */ if (cod_info->block_type == SHORT_TYPE) { sfb2 = sfb; for (sfb = cod_info->sfb_smin; sfb < SBMAX_s; sfb++) { start = gfc->scalefac_band.s[sfb]; end = gfc->scalefac_band.s[sfb + 1]; bw = end - start; for (i = 0; i < 3; i++) { for (en0 = 0.0, l = start; l < end; l++) { en0 += cod_info->xr[j] * cod_info->xr[j]; j++; } en0 = Max(en0 / bw, 1e-20); /* convert to MDCT units */ en1 = 1e15; /* scaling so it shows up on FFT plot */ gfc->pinfo->en_s[gr][ch][3 * sfb + i] = en1 * en0; gfc->pinfo->xfsf_s[gr][ch][3 * sfb + i] = en1 * l3_xmin[sfb2] * xfsf[sfb2] / bw; if (ratio->en.s[sfb][i] > 0) en0 = en0 / ratio->en.s[sfb][i]; else en0 = 0.0; if (cfg->ATHonly || cfg->ATHshort) en0 = 0; gfc->pinfo->thr_s[gr][ch][3 * sfb + i] = en1 * Max(en0 * ratio->thm.s[sfb][i], gfc->ATH->s[sfb]); /* there is no scalefactor bands >= SBPSY_s */ gfc->pinfo->LAMEsfb_s[gr][ch][3 * sfb + i] = -2.0 * cod_info->subblock_gain[i]; if (sfb < SBPSY_s) { gfc->pinfo->LAMEsfb_s[gr][ch][3 * sfb + i] -= ifqstep * scalefac[sfb2]; } sfb2++; } } } /* block type short */ gfc->pinfo->LAMEqss[gr][ch] = cod_info->global_gain; gfc->pinfo->LAMEmainbits[gr][ch] = cod_info->part2_3_length + cod_info->part2_length; gfc->pinfo->LAMEsfbits[gr][ch] = cod_info->part2_length; gfc->pinfo->over[gr][ch] = noise.over_count; gfc->pinfo->max_noise[gr][ch] = noise.max_noise * 10.0; gfc->pinfo->over_noise[gr][ch] = noise.over_noise * 10.0; gfc->pinfo->tot_noise[gr][ch] = noise.tot_noise * 10.0; gfc->pinfo->over_SSD[gr][ch] = noise.over_SSD; } /************************************************************************ * * set_frame_pinfo() * * updates plotting data for a whole frame * * Robert Hegemann 2000-10-21 * ************************************************************************/ void set_frame_pinfo(lame_internal_flags * gfc, const III_psy_ratio ratio[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; int ch; int gr; /* for every granule and channel patch l3_enc and set info */ for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info *const cod_info = &gfc->l3_side.tt[gr][ch]; int scalefac_sav[SFBMAX]; memcpy(scalefac_sav, cod_info->scalefac, sizeof(scalefac_sav)); /* reconstruct the scalefactors in case SCFSI was used */ if (gr == 1) { int sfb; for (sfb = 0; sfb < cod_info->sfb_lmax; sfb++) { if (cod_info->scalefac[sfb] < 0) /* scfsi */ cod_info->scalefac[sfb] = gfc->l3_side.tt[0][ch].scalefac[sfb]; } } set_pinfo(gfc, cod_info, &ratio[gr][ch], gr, ch); memcpy(cod_info->scalefac, scalefac_sav, sizeof(scalefac_sav)); } /* for ch */ } /* for gr */ } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/vbrquantize.h�����������������������������������������������������������������000644 �001751 �001751 �00000002060 11561266675 020650� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 VBR quantization * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_VBRQUANTIZE_H #define LAME_VBRQUANTIZE_H int VBR_encode_frame(lame_internal_flags * gfc, const FLOAT xr34orig[2][2][576], const FLOAT l3_xmin[2][2][SFBMAX], const int maxbits[2][2]); #endif /* LAME_VBRQUANTIZE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/version.h���������������������������������������������������������������������000644 �001751 �001751 �00000004402 13167215270 017752� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Version numbering for LAME. * * Copyright (c) 1999 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_VERSION_H #define LAME_VERSION_H /* * To make a string from a token, use the # operator: */ #ifndef STR # define __STR(x) #x # define STR(x) __STR(x) #endif # define LAME_URL "http://lame.sf.net" # define LAME_MAJOR_VERSION 3 /* Major version number */ # define LAME_MINOR_VERSION 100 /* Minor version number */ # define LAME_TYPE_VERSION 2 /* 0:alpha 1:beta 2:release */ # define LAME_PATCH_VERSION 0 /* Patch level */ # define LAME_ALPHA_VERSION (LAME_TYPE_VERSION==0) # define LAME_BETA_VERSION (LAME_TYPE_VERSION==1) # define LAME_RELEASE_VERSION (LAME_TYPE_VERSION==2) # define PSY_MAJOR_VERSION 1 /* Major version number */ # define PSY_MINOR_VERSION 0 /* Minor version number */ # define PSY_ALPHA_VERSION 0 /* Set number if this is an alpha version, otherwise zero */ # define PSY_BETA_VERSION 0 /* Set number if this is a beta version, otherwise zero */ #if LAME_ALPHA_VERSION #define LAME_PATCH_LEVEL_STRING " alpha " STR(LAME_PATCH_VERSION) #endif #if LAME_BETA_VERSION #define LAME_PATCH_LEVEL_STRING " beta " STR(LAME_PATCH_VERSION) #endif #if LAME_RELEASE_VERSION #if LAME_PATCH_VERSION #define LAME_PATCH_LEVEL_STRING " release " STR(LAME_PATCH_VERSION) #else #define LAME_PATCH_LEVEL_STRING "" #endif #endif # define LAME_VERSION_STRING STR(LAME_MAJOR_VERSION) "." STR(LAME_MINOR_VERSION) LAME_PATCH_LEVEL_STRING #endif /* LAME_VERSION_H */ /* End of version.h */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/reservoir.c�������������������������������������������������������������������000644 �001751 �001751 �00000024027 11561266675 020320� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * bit reservoir source file * * Copyright (c) 1999-2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: reservoir.c,v 1.45 2011/05/07 16:05:17 rbrito Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "reservoir.h" #include "bitstream.h" #include "lame-analysis.h" #include "lame_global_flags.h" /* ResvFrameBegin: Called (repeatedly) at the beginning of a frame. Updates the maximum size of the reservoir, and checks to make sure main_data_begin was set properly by the formatter */ /* * Background information: * * This is the original text from the ISO standard. Because of * sooo many bugs and irritations correcting comments are added * in brackets []. A '^W' means you should remove the last word. * * 1) The following rule can be used to calculate the maximum * number of bits used for one granule [^W frame]: * At the highest possible bitrate of Layer III (320 kbps * per stereo signal [^W^W^W], 48 kHz) the frames must be of * [^W^W^W are designed to have] constant length, i.e. * one buffer [^W^W the frame] length is: * * 320 kbps * 1152/48 kHz = 7680 bit = 960 byte * * This value is used as the maximum buffer per channel [^W^W] at * lower bitrates [than 320 kbps]. At 64 kbps mono or 128 kbps * stereo the main granule length is 64 kbps * 576/48 kHz = 768 bit * [per granule and channel] at 48 kHz sampling frequency. * This means that there is a maximum deviation (short time buffer * [= reservoir]) of 7680 - 2*2*768 = 4608 bits is allowed at 64 kbps. * The actual deviation is equal to the number of bytes [with the * meaning of octets] denoted by the main_data_end offset pointer. * The actual maximum deviation is (2^9-1)*8 bit = 4088 bits * [for MPEG-1 and (2^8-1)*8 bit for MPEG-2, both are hard limits]. * ... The xchange of buffer bits between the left and right channel * is allowed without restrictions [exception: dual channel]. * Because of the [constructed] constraint on the buffer size * main_data_end is always set to 0 in the case of bit_rate_index==14, * i.e. data rate 320 kbps per stereo signal [^W^W^W]. In this case * all data are allocated between adjacent header [^W sync] words * [, i.e. there is no buffering at all]. */ int ResvFrameBegin(lame_internal_flags * gfc, int *mean_bits) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int fullFrameBits; int resvLimit; int maxmp3buf; III_side_info_t *const l3_side = &gfc->l3_side; int frameLength; int meanBits; frameLength = getframebits(gfc); meanBits = (frameLength - cfg->sideinfo_len * 8) / cfg->mode_gr; /* * Meaning of the variables: * resvLimit: (0, 8, ..., 8*255 (MPEG-2), 8*511 (MPEG-1)) * Number of bits can be stored in previous frame(s) due to * counter size constaints * maxmp3buf: ( ??? ... 8*1951 (MPEG-1 and 2), 8*2047 (MPEG-2.5)) * Number of bits allowed to encode one frame (you can take 8*511 bit * from the bit reservoir and at most 8*1440 bit from the current * frame (320 kbps, 32 kHz), so 8*1951 bit is the largest possible * value for MPEG-1 and -2) * * maximum allowed granule/channel size times 4 = 8*2047 bits., * so this is the absolute maximum supported by the format. * * * fullFrameBits: maximum number of bits available for encoding * the current frame. * * mean_bits: target number of bits per granule. * * frameLength: * * gfc->ResvMax: maximum allowed reservoir * * gfc->ResvSize: current reservoir size * * l3_side->resvDrain_pre: * ancillary data to be added to previous frame: * (only usefull in VBR modes if it is possible to have * maxmp3buf < fullFrameBits)). Currently disabled, * see #define NEW_DRAIN * 2010-02-13: RH now enabled, it seems to be needed for CBR too, * as there exists one example, where the FhG decoder * can't decode a -b320 CBR file anymore. * * l3_side->resvDrain_post: * ancillary data to be added to this frame: * */ /* main_data_begin has 9 bits in MPEG-1, 8 bits MPEG-2 */ resvLimit = (8 * 256) * cfg->mode_gr - 8; /* maximum allowed frame size. dont use more than this number of bits, even if the frame has the space for them: */ maxmp3buf = cfg->buffer_constraint; esv->ResvMax = maxmp3buf - frameLength; if (esv->ResvMax > resvLimit) esv->ResvMax = resvLimit; if (esv->ResvMax < 0 || cfg->disable_reservoir) esv->ResvMax = 0; fullFrameBits = meanBits * cfg->mode_gr + Min(esv->ResvSize, esv->ResvMax); if (fullFrameBits > maxmp3buf) fullFrameBits = maxmp3buf; assert(0 == esv->ResvMax % 8); assert(esv->ResvMax >= 0); l3_side->resvDrain_pre = 0; if (gfc->pinfo != NULL) { gfc->pinfo->mean_bits = meanBits / 2; /* expected bits per channel per granule [is this also right for mono/stereo, MPEG-1/2 ?] */ gfc->pinfo->resvsize = esv->ResvSize; } *mean_bits = meanBits; return fullFrameBits; } /* ResvMaxBits returns targ_bits: target number of bits to use for 1 granule extra_bits: amount extra available from reservoir Mark Taylor 4/99 */ void ResvMaxBits(lame_internal_flags * gfc, int mean_bits, int *targ_bits, int *extra_bits, int cbr) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int add_bits, targBits, extraBits; int ResvSize = esv->ResvSize, ResvMax = esv->ResvMax; /* conpensate the saved bits used in the 1st granule */ if (cbr) ResvSize += mean_bits; if (gfc->sv_qnt.substep_shaping & 1) ResvMax *= 0.9; targBits = mean_bits; /* extra bits if the reservoir is almost full */ if (ResvSize * 10 > ResvMax * 9) { add_bits = ResvSize - (ResvMax * 9) / 10; targBits += add_bits; gfc->sv_qnt.substep_shaping |= 0x80; } else { add_bits = 0; gfc->sv_qnt.substep_shaping &= 0x7f; /* build up reservoir. this builds the reservoir a little slower * than FhG. It could simple be mean_bits/15, but this was rigged * to always produce 100 (the old value) at 128kbs */ /* *targ_bits -= (int) (mean_bits/15.2); */ if (!cfg->disable_reservoir && !(gfc->sv_qnt.substep_shaping & 1)) targBits -= .1 * mean_bits; } /* amount from the reservoir we are allowed to use. ISO says 6/10 */ extraBits = (ResvSize < (esv->ResvMax * 6) / 10 ? ResvSize : (esv->ResvMax * 6) / 10); extraBits -= add_bits; if (extraBits < 0) extraBits = 0; *targ_bits = targBits; *extra_bits = extraBits; } /* ResvAdjust: Called after a granule's bit allocation. Readjusts the size of the reservoir to reflect the granule's usage. */ void ResvAdjust(lame_internal_flags * gfc, gr_info const *gi) { gfc->sv_enc.ResvSize -= gi->part2_3_length + gi->part2_length; } /* ResvFrameEnd: Called after all granules in a frame have been allocated. Makes sure that the reservoir size is within limits, possibly by adding stuffing bits. */ void ResvFrameEnd(lame_internal_flags * gfc, int mean_bits) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; III_side_info_t *const l3_side = &gfc->l3_side; int stuffingBits; int over_bits; esv->ResvSize += mean_bits * cfg->mode_gr; stuffingBits = 0; l3_side->resvDrain_post = 0; l3_side->resvDrain_pre = 0; /* we must be byte aligned */ if ((over_bits = esv->ResvSize % 8) != 0) stuffingBits += over_bits; over_bits = (esv->ResvSize - stuffingBits) - esv->ResvMax; if (over_bits > 0) { assert(0 == over_bits % 8); assert(over_bits >= 0); stuffingBits += over_bits; } /* NOTE: enabling the NEW_DRAIN code fixes some problems with FhG decoder shipped with MS Windows operating systems. Using this, it is even possible to use Gabriel's lax buffer consideration again, which assumes, any decoder should have a buffer large enough for a 320 kbps frame at 32 kHz sample rate. old drain code: lame -b320 BlackBird.wav ---> does not play with GraphEdit.exe using FhG decoder V1.5 Build 50 new drain code: lame -b320 BlackBird.wav ---> plays fine with GraphEdit.exe using FhG decoder V1.5 Build 50 Robert Hegemann, 2010-02-13. */ /* drain as many bits as possible into previous frame ancillary data * In particular, in VBR mode ResvMax may have changed, and we have * to make sure main_data_begin does not create a reservoir bigger * than ResvMax mt 4/00*/ { int mdb_bytes = Min(l3_side->main_data_begin * 8, stuffingBits) / 8; l3_side->resvDrain_pre += 8 * mdb_bytes; stuffingBits -= 8 * mdb_bytes; esv->ResvSize -= 8 * mdb_bytes; l3_side->main_data_begin -= mdb_bytes; } /* drain the rest into this frames ancillary data */ l3_side->resvDrain_post += stuffingBits; esv->ResvSize -= stuffingBits; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/newmdct.c���������������������������������������������������������������������000644 �001751 �001751 �00000110404 11561266675 017734� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 window subband -> subband filtering -> mdct routine * * Copyright (c) 1999-2000 Takehiro Tominaga * * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Special Thanks to Patrick De Smet for your advices. */ /* $Id: newmdct.c,v 1.39 2011/05/07 16:05:17 rbrito Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "newmdct.h" #ifndef USE_GOGO_SUBBAND static const FLOAT enwindow[] = { -4.77e-07 * 0.740951125354959 / 2.384e-06, 1.03951e-04 * 0.740951125354959 / 2.384e-06, 9.53674e-04 * 0.740951125354959 / 2.384e-06, 2.841473e-03 * 0.740951125354959 / 2.384e-06, 3.5758972e-02 * 0.740951125354959 / 2.384e-06, 3.401756e-03 * 0.740951125354959 / 2.384e-06, 9.83715e-04 * 0.740951125354959 / 2.384e-06, 9.9182e-05 * 0.740951125354959 / 2.384e-06, /* 15 */ 1.2398e-05 * 0.740951125354959 / 2.384e-06, 1.91212e-04 * 0.740951125354959 / 2.384e-06, 2.283096e-03 * 0.740951125354959 / 2.384e-06, 1.6994476e-02 * 0.740951125354959 / 2.384e-06, -1.8756866e-02 * 0.740951125354959 / 2.384e-06, -2.630711e-03 * 0.740951125354959 / 2.384e-06, -2.47478e-04 * 0.740951125354959 / 2.384e-06, -1.4782e-05 * 0.740951125354959 / 2.384e-06, 9.063471690191471e-01, 1.960342806591213e-01, -4.77e-07 * 0.773010453362737 / 2.384e-06, 1.05858e-04 * 0.773010453362737 / 2.384e-06, 9.30786e-04 * 0.773010453362737 / 2.384e-06, 2.521515e-03 * 0.773010453362737 / 2.384e-06, 3.5694122e-02 * 0.773010453362737 / 2.384e-06, 3.643036e-03 * 0.773010453362737 / 2.384e-06, 9.91821e-04 * 0.773010453362737 / 2.384e-06, 9.6321e-05 * 0.773010453362737 / 2.384e-06, /* 14 */ 1.1444e-05 * 0.773010453362737 / 2.384e-06, 1.65462e-04 * 0.773010453362737 / 2.384e-06, 2.110004e-03 * 0.773010453362737 / 2.384e-06, 1.6112804e-02 * 0.773010453362737 / 2.384e-06, -1.9634247e-02 * 0.773010453362737 / 2.384e-06, -2.803326e-03 * 0.773010453362737 / 2.384e-06, -2.77042e-04 * 0.773010453362737 / 2.384e-06, -1.6689e-05 * 0.773010453362737 / 2.384e-06, 8.206787908286602e-01, 3.901806440322567e-01, -4.77e-07 * 0.803207531480645 / 2.384e-06, 1.07288e-04 * 0.803207531480645 / 2.384e-06, 9.02653e-04 * 0.803207531480645 / 2.384e-06, 2.174854e-03 * 0.803207531480645 / 2.384e-06, 3.5586357e-02 * 0.803207531480645 / 2.384e-06, 3.858566e-03 * 0.803207531480645 / 2.384e-06, 9.95159e-04 * 0.803207531480645 / 2.384e-06, 9.3460e-05 * 0.803207531480645 / 2.384e-06, /* 13 */ 1.0014e-05 * 0.803207531480645 / 2.384e-06, 1.40190e-04 * 0.803207531480645 / 2.384e-06, 1.937389e-03 * 0.803207531480645 / 2.384e-06, 1.5233517e-02 * 0.803207531480645 / 2.384e-06, -2.0506859e-02 * 0.803207531480645 / 2.384e-06, -2.974033e-03 * 0.803207531480645 / 2.384e-06, -3.07560e-04 * 0.803207531480645 / 2.384e-06, -1.8120e-05 * 0.803207531480645 / 2.384e-06, 7.416505462720353e-01, 5.805693545089249e-01, -4.77e-07 * 0.831469612302545 / 2.384e-06, 1.08242e-04 * 0.831469612302545 / 2.384e-06, 8.68797e-04 * 0.831469612302545 / 2.384e-06, 1.800537e-03 * 0.831469612302545 / 2.384e-06, 3.5435200e-02 * 0.831469612302545 / 2.384e-06, 4.049301e-03 * 0.831469612302545 / 2.384e-06, 9.94205e-04 * 0.831469612302545 / 2.384e-06, 9.0599e-05 * 0.831469612302545 / 2.384e-06, /* 12 */ 9.060e-06 * 0.831469612302545 / 2.384e-06, 1.16348e-04 * 0.831469612302545 / 2.384e-06, 1.766682e-03 * 0.831469612302545 / 2.384e-06, 1.4358521e-02 * 0.831469612302545 / 2.384e-06, -2.1372318e-02 * 0.831469612302545 / 2.384e-06, -3.14188e-03 * 0.831469612302545 / 2.384e-06, -3.39031e-04 * 0.831469612302545 / 2.384e-06, -1.9550e-05 * 0.831469612302545 / 2.384e-06, 6.681786379192989e-01, 7.653668647301797e-01, -4.77e-07 * 0.857728610000272 / 2.384e-06, 1.08719e-04 * 0.857728610000272 / 2.384e-06, 8.29220e-04 * 0.857728610000272 / 2.384e-06, 1.399517e-03 * 0.857728610000272 / 2.384e-06, 3.5242081e-02 * 0.857728610000272 / 2.384e-06, 4.215240e-03 * 0.857728610000272 / 2.384e-06, 9.89437e-04 * 0.857728610000272 / 2.384e-06, 8.7261e-05 * 0.857728610000272 / 2.384e-06, /* 11 */ 8.106e-06 * 0.857728610000272 / 2.384e-06, 9.3937e-05 * 0.857728610000272 / 2.384e-06, 1.597881e-03 * 0.857728610000272 / 2.384e-06, 1.3489246e-02 * 0.857728610000272 / 2.384e-06, -2.2228718e-02 * 0.857728610000272 / 2.384e-06, -3.306866e-03 * 0.857728610000272 / 2.384e-06, -3.71456e-04 * 0.857728610000272 / 2.384e-06, -2.1458e-05 * 0.857728610000272 / 2.384e-06, 5.993769336819237e-01, 9.427934736519954e-01, -4.77e-07 * 0.881921264348355 / 2.384e-06, 1.08719e-04 * 0.881921264348355 / 2.384e-06, 7.8392e-04 * 0.881921264348355 / 2.384e-06, 9.71317e-04 * 0.881921264348355 / 2.384e-06, 3.5007000e-02 * 0.881921264348355 / 2.384e-06, 4.357815e-03 * 0.881921264348355 / 2.384e-06, 9.80854e-04 * 0.881921264348355 / 2.384e-06, 8.3923e-05 * 0.881921264348355 / 2.384e-06, /* 10 */ 7.629e-06 * 0.881921264348355 / 2.384e-06, 7.2956e-05 * 0.881921264348355 / 2.384e-06, 1.432419e-03 * 0.881921264348355 / 2.384e-06, 1.2627602e-02 * 0.881921264348355 / 2.384e-06, -2.3074150e-02 * 0.881921264348355 / 2.384e-06, -3.467083e-03 * 0.881921264348355 / 2.384e-06, -4.04358e-04 * 0.881921264348355 / 2.384e-06, -2.3365e-05 * 0.881921264348355 / 2.384e-06, 5.345111359507916e-01, 1.111140466039205e+00, -9.54e-07 * 0.903989293123443 / 2.384e-06, 1.08242e-04 * 0.903989293123443 / 2.384e-06, 7.31945e-04 * 0.903989293123443 / 2.384e-06, 5.15938e-04 * 0.903989293123443 / 2.384e-06, 3.4730434e-02 * 0.903989293123443 / 2.384e-06, 4.477024e-03 * 0.903989293123443 / 2.384e-06, 9.68933e-04 * 0.903989293123443 / 2.384e-06, 8.0585e-05 * 0.903989293123443 / 2.384e-06, /* 9 */ 6.676e-06 * 0.903989293123443 / 2.384e-06, 5.2929e-05 * 0.903989293123443 / 2.384e-06, 1.269817e-03 * 0.903989293123443 / 2.384e-06, 1.1775017e-02 * 0.903989293123443 / 2.384e-06, -2.3907185e-02 * 0.903989293123443 / 2.384e-06, -3.622532e-03 * 0.903989293123443 / 2.384e-06, -4.38213e-04 * 0.903989293123443 / 2.384e-06, -2.5272e-05 * 0.903989293123443 / 2.384e-06, 4.729647758913199e-01, 1.268786568327291e+00, -9.54e-07 * 0.92387953251128675613 / 2.384e-06, 1.06812e-04 * 0.92387953251128675613 / 2.384e-06, 6.74248e-04 * 0.92387953251128675613 / 2.384e-06, 3.3379e-05 * 0.92387953251128675613 / 2.384e-06, 3.4412861e-02 * 0.92387953251128675613 / 2.384e-06, 4.573822e-03 * 0.92387953251128675613 / 2.384e-06, 9.54151e-04 * 0.92387953251128675613 / 2.384e-06, 7.6771e-05 * 0.92387953251128675613 / 2.384e-06, 6.199e-06 * 0.92387953251128675613 / 2.384e-06, 3.4332e-05 * 0.92387953251128675613 / 2.384e-06, 1.111031e-03 * 0.92387953251128675613 / 2.384e-06, 1.0933399e-02 * 0.92387953251128675613 / 2.384e-06, -2.4725437e-02 * 0.92387953251128675613 / 2.384e-06, -3.771782e-03 * 0.92387953251128675613 / 2.384e-06, -4.72546e-04 * 0.92387953251128675613 / 2.384e-06, -2.7657e-05 * 0.92387953251128675613 / 2.384e-06, 4.1421356237309504879e-01, /* tan(PI/8) */ 1.414213562373095e+00, -9.54e-07 * 0.941544065183021 / 2.384e-06, 1.05381e-04 * 0.941544065183021 / 2.384e-06, 6.10352e-04 * 0.941544065183021 / 2.384e-06, -4.75883e-04 * 0.941544065183021 / 2.384e-06, 3.4055710e-02 * 0.941544065183021 / 2.384e-06, 4.649162e-03 * 0.941544065183021 / 2.384e-06, 9.35555e-04 * 0.941544065183021 / 2.384e-06, 7.3433e-05 * 0.941544065183021 / 2.384e-06, /* 7 */ 5.245e-06 * 0.941544065183021 / 2.384e-06, 1.7166e-05 * 0.941544065183021 / 2.384e-06, 9.56535e-04 * 0.941544065183021 / 2.384e-06, 1.0103703e-02 * 0.941544065183021 / 2.384e-06, -2.5527000e-02 * 0.941544065183021 / 2.384e-06, -3.914356e-03 * 0.941544065183021 / 2.384e-06, -5.07355e-04 * 0.941544065183021 / 2.384e-06, -3.0041e-05 * 0.941544065183021 / 2.384e-06, 3.578057213145241e-01, 1.546020906725474e+00, -9.54e-07 * 0.956940335732209 / 2.384e-06, 1.02520e-04 * 0.956940335732209 / 2.384e-06, 5.39303e-04 * 0.956940335732209 / 2.384e-06, -1.011848e-03 * 0.956940335732209 / 2.384e-06, 3.3659935e-02 * 0.956940335732209 / 2.384e-06, 4.703045e-03 * 0.956940335732209 / 2.384e-06, 9.15051e-04 * 0.956940335732209 / 2.384e-06, 7.0095e-05 * 0.956940335732209 / 2.384e-06, /* 6 */ 4.768e-06 * 0.956940335732209 / 2.384e-06, 9.54e-07 * 0.956940335732209 / 2.384e-06, 8.06808e-04 * 0.956940335732209 / 2.384e-06, 9.287834e-03 * 0.956940335732209 / 2.384e-06, -2.6310921e-02 * 0.956940335732209 / 2.384e-06, -4.048824e-03 * 0.956940335732209 / 2.384e-06, -5.42164e-04 * 0.956940335732209 / 2.384e-06, -3.2425e-05 * 0.956940335732209 / 2.384e-06, 3.033466836073424e-01, 1.662939224605090e+00, -1.431e-06 * 0.970031253194544 / 2.384e-06, 9.9182e-05 * 0.970031253194544 / 2.384e-06, 4.62532e-04 * 0.970031253194544 / 2.384e-06, -1.573563e-03 * 0.970031253194544 / 2.384e-06, 3.3225536e-02 * 0.970031253194544 / 2.384e-06, 4.737377e-03 * 0.970031253194544 / 2.384e-06, 8.91685e-04 * 0.970031253194544 / 2.384e-06, 6.6280e-05 * 0.970031253194544 / 2.384e-06, /* 5 */ 4.292e-06 * 0.970031253194544 / 2.384e-06, -1.3828e-05 * 0.970031253194544 / 2.384e-06, 6.61850e-04 * 0.970031253194544 / 2.384e-06, 8.487225e-03 * 0.970031253194544 / 2.384e-06, -2.7073860e-02 * 0.970031253194544 / 2.384e-06, -4.174709e-03 * 0.970031253194544 / 2.384e-06, -5.76973e-04 * 0.970031253194544 / 2.384e-06, -3.4809e-05 * 0.970031253194544 / 2.384e-06, 2.504869601913055e-01, 1.763842528696710e+00, -1.431e-06 * 0.98078528040323 / 2.384e-06, 9.5367e-05 * 0.98078528040323 / 2.384e-06, 3.78609e-04 * 0.98078528040323 / 2.384e-06, -2.161503e-03 * 0.98078528040323 / 2.384e-06, 3.2754898e-02 * 0.98078528040323 / 2.384e-06, 4.752159e-03 * 0.98078528040323 / 2.384e-06, 8.66413e-04 * 0.98078528040323 / 2.384e-06, 6.2943e-05 * 0.98078528040323 / 2.384e-06, /* 4 */ 3.815e-06 * 0.98078528040323 / 2.384e-06, -2.718e-05 * 0.98078528040323 / 2.384e-06, 5.22137e-04 * 0.98078528040323 / 2.384e-06, 7.703304e-03 * 0.98078528040323 / 2.384e-06, -2.7815342e-02 * 0.98078528040323 / 2.384e-06, -4.290581e-03 * 0.98078528040323 / 2.384e-06, -6.11782e-04 * 0.98078528040323 / 2.384e-06, -3.7670e-05 * 0.98078528040323 / 2.384e-06, 1.989123673796580e-01, 1.847759065022573e+00, -1.907e-06 * 0.989176509964781 / 2.384e-06, 9.0122e-05 * 0.989176509964781 / 2.384e-06, 2.88486e-04 * 0.989176509964781 / 2.384e-06, -2.774239e-03 * 0.989176509964781 / 2.384e-06, 3.2248020e-02 * 0.989176509964781 / 2.384e-06, 4.748821e-03 * 0.989176509964781 / 2.384e-06, 8.38757e-04 * 0.989176509964781 / 2.384e-06, 5.9605e-05 * 0.989176509964781 / 2.384e-06, /* 3 */ 3.338e-06 * 0.989176509964781 / 2.384e-06, -3.9577e-05 * 0.989176509964781 / 2.384e-06, 3.88145e-04 * 0.989176509964781 / 2.384e-06, 6.937027e-03 * 0.989176509964781 / 2.384e-06, -2.8532982e-02 * 0.989176509964781 / 2.384e-06, -4.395962e-03 * 0.989176509964781 / 2.384e-06, -6.46591e-04 * 0.989176509964781 / 2.384e-06, -4.0531e-05 * 0.989176509964781 / 2.384e-06, 1.483359875383474e-01, 1.913880671464418e+00, -1.907e-06 * 0.995184726672197 / 2.384e-06, 8.4400e-05 * 0.995184726672197 / 2.384e-06, 1.91689e-04 * 0.995184726672197 / 2.384e-06, -3.411293e-03 * 0.995184726672197 / 2.384e-06, 3.1706810e-02 * 0.995184726672197 / 2.384e-06, 4.728317e-03 * 0.995184726672197 / 2.384e-06, 8.09669e-04 * 0.995184726672197 / 2.384e-06, 5.579e-05 * 0.995184726672197 / 2.384e-06, 3.338e-06 * 0.995184726672197 / 2.384e-06, -5.0545e-05 * 0.995184726672197 / 2.384e-06, 2.59876e-04 * 0.995184726672197 / 2.384e-06, 6.189346e-03 * 0.995184726672197 / 2.384e-06, -2.9224873e-02 * 0.995184726672197 / 2.384e-06, -4.489899e-03 * 0.995184726672197 / 2.384e-06, -6.80923e-04 * 0.995184726672197 / 2.384e-06, -4.3392e-05 * 0.995184726672197 / 2.384e-06, 9.849140335716425e-02, 1.961570560806461e+00, -2.384e-06 * 0.998795456205172 / 2.384e-06, 7.7724e-05 * 0.998795456205172 / 2.384e-06, 8.8215e-05 * 0.998795456205172 / 2.384e-06, -4.072189e-03 * 0.998795456205172 / 2.384e-06, 3.1132698e-02 * 0.998795456205172 / 2.384e-06, 4.691124e-03 * 0.998795456205172 / 2.384e-06, 7.79152e-04 * 0.998795456205172 / 2.384e-06, 5.2929e-05 * 0.998795456205172 / 2.384e-06, 2.861e-06 * 0.998795456205172 / 2.384e-06, -6.0558e-05 * 0.998795456205172 / 2.384e-06, 1.37329e-04 * 0.998795456205172 / 2.384e-06, 5.462170e-03 * 0.998795456205172 / 2.384e-06, -2.9890060e-02 * 0.998795456205172 / 2.384e-06, -4.570484e-03 * 0.998795456205172 / 2.384e-06, -7.14302e-04 * 0.998795456205172 / 2.384e-06, -4.6253e-05 * 0.998795456205172 / 2.384e-06, 4.912684976946725e-02, 1.990369453344394e+00, 3.5780907e-02 * SQRT2 * 0.5 / 2.384e-06, 1.7876148e-02 * SQRT2 * 0.5 / 2.384e-06, 3.134727e-03 * SQRT2 * 0.5 / 2.384e-06, 2.457142e-03 * SQRT2 * 0.5 / 2.384e-06, 9.71317e-04 * SQRT2 * 0.5 / 2.384e-06, 2.18868e-04 * SQRT2 * 0.5 / 2.384e-06, 1.01566e-04 * SQRT2 * 0.5 / 2.384e-06, 1.3828e-05 * SQRT2 * 0.5 / 2.384e-06, 3.0526638e-02 / 2.384e-06, 4.638195e-03 / 2.384e-06, 7.47204e-04 / 2.384e-06, 4.9591e-05 / 2.384e-06, 4.756451e-03 / 2.384e-06, 2.1458e-05 / 2.384e-06, -6.9618e-05 / 2.384e-06, /* 2.384e-06/2.384e-06 */ }; #endif #define NS 12 #define NL 36 static const FLOAT win[4][NL] = { { 2.382191739347913e-13, 6.423305872147834e-13, 9.400849094049688e-13, 1.122435026096556e-12, 1.183840321267481e-12, 1.122435026096556e-12, 9.400849094049690e-13, 6.423305872147839e-13, 2.382191739347918e-13, 5.456116108943412e-12, 4.878985199565852e-12, 4.240448995017367e-12, 3.559909094758252e-12, 2.858043359288075e-12, 2.156177623817898e-12, 1.475637723558783e-12, 8.371015190102974e-13, 2.599706096327376e-13, -5.456116108943412e-12, -4.878985199565852e-12, -4.240448995017367e-12, -3.559909094758252e-12, -2.858043359288076e-12, -2.156177623817898e-12, -1.475637723558783e-12, -8.371015190102975e-13, -2.599706096327376e-13, -2.382191739347923e-13, -6.423305872147843e-13, -9.400849094049696e-13, -1.122435026096556e-12, -1.183840321267481e-12, -1.122435026096556e-12, -9.400849094049694e-13, -6.423305872147840e-13, -2.382191739347918e-13, }, { 2.382191739347913e-13, 6.423305872147834e-13, 9.400849094049688e-13, 1.122435026096556e-12, 1.183840321267481e-12, 1.122435026096556e-12, 9.400849094049688e-13, 6.423305872147841e-13, 2.382191739347918e-13, 5.456116108943413e-12, 4.878985199565852e-12, 4.240448995017367e-12, 3.559909094758253e-12, 2.858043359288075e-12, 2.156177623817898e-12, 1.475637723558782e-12, 8.371015190102975e-13, 2.599706096327376e-13, -5.461314069809755e-12, -4.921085770524055e-12, -4.343405037091838e-12, -3.732668368707687e-12, -3.093523840190885e-12, -2.430835727329465e-12, -1.734679010007751e-12, -9.748253656609281e-13, -2.797435120168326e-13, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, -2.283748241799531e-13, -4.037858874020686e-13, -2.146547464825323e-13, }, { 1.316524975873958e-01, /* win[SHORT_TYPE] */ 4.142135623730950e-01, 7.673269879789602e-01, 1.091308501069271e+00, /* tantab_l */ 1.303225372841206e+00, 1.569685577117490e+00, 1.920982126971166e+00, 2.414213562373094e+00, 3.171594802363212e+00, 4.510708503662055e+00, 7.595754112725146e+00, 2.290376554843115e+01, 0.98480775301220802032, /* cx */ 0.64278760968653936292, 0.34202014332566882393, 0.93969262078590842791, -0.17364817766693030343, -0.76604444311897790243, 0.86602540378443870761, 0.500000000000000e+00, -5.144957554275265e-01, /* ca */ -4.717319685649723e-01, -3.133774542039019e-01, -1.819131996109812e-01, -9.457419252642064e-02, -4.096558288530405e-02, -1.419856857247115e-02, -3.699974673760037e-03, 8.574929257125442e-01, /* cs */ 8.817419973177052e-01, 9.496286491027329e-01, 9.833145924917901e-01, 9.955178160675857e-01, 9.991605581781475e-01, 9.998991952444470e-01, 9.999931550702802e-01, }, { 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 0.000000000000000e+00, 2.283748241799531e-13, 4.037858874020686e-13, 2.146547464825323e-13, 5.461314069809755e-12, 4.921085770524055e-12, 4.343405037091838e-12, 3.732668368707687e-12, 3.093523840190885e-12, 2.430835727329466e-12, 1.734679010007751e-12, 9.748253656609281e-13, 2.797435120168326e-13, -5.456116108943413e-12, -4.878985199565852e-12, -4.240448995017367e-12, -3.559909094758253e-12, -2.858043359288075e-12, -2.156177623817898e-12, -1.475637723558782e-12, -8.371015190102975e-13, -2.599706096327376e-13, -2.382191739347913e-13, -6.423305872147834e-13, -9.400849094049688e-13, -1.122435026096556e-12, -1.183840321267481e-12, -1.122435026096556e-12, -9.400849094049688e-13, -6.423305872147841e-13, -2.382191739347918e-13, } }; #define tantab_l (win[SHORT_TYPE]+3) #define cx (win[SHORT_TYPE]+12) #define ca (win[SHORT_TYPE]+20) #define cs (win[SHORT_TYPE]+28) /************************************************************************ * * window_subband() * * PURPOSE: Overlapping window on PCM samples * * SEMANTICS: * 32 16-bit pcm samples are scaled to fractional 2's complement and * concatenated to the end of the window buffer #x#. The updated window * buffer #x# is then windowed by the analysis window #c# to produce the * windowed sample #z# * ************************************************************************/ /* * new IDCT routine written by Takehiro TOMINAGA */ static const int order[] = { 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29, 2, 3, 18, 19, 10, 11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 }; /* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */ inline static void window_subband(const sample_t * x1, FLOAT a[SBLIMIT]) { int i; FLOAT const *wp = enwindow + 10; const sample_t *x2 = &x1[238 - 14 - 286]; for (i = -15; i < 0; i++) { FLOAT w, s, t; w = wp[-10]; s = x2[-224] * w; t = x1[224] * w; w = wp[-9]; s += x2[-160] * w; t += x1[160] * w; w = wp[-8]; s += x2[-96] * w; t += x1[96] * w; w = wp[-7]; s += x2[-32] * w; t += x1[32] * w; w = wp[-6]; s += x2[32] * w; t += x1[-32] * w; w = wp[-5]; s += x2[96] * w; t += x1[-96] * w; w = wp[-4]; s += x2[160] * w; t += x1[-160] * w; w = wp[-3]; s += x2[224] * w; t += x1[-224] * w; w = wp[-2]; s += x1[-256] * w; t -= x2[256] * w; w = wp[-1]; s += x1[-192] * w; t -= x2[192] * w; w = wp[0]; s += x1[-128] * w; t -= x2[128] * w; w = wp[1]; s += x1[-64] * w; t -= x2[64] * w; w = wp[2]; s += x1[0] * w; t -= x2[0] * w; w = wp[3]; s += x1[64] * w; t -= x2[-64] * w; w = wp[4]; s += x1[128] * w; t -= x2[-128] * w; w = wp[5]; s += x1[192] * w; t -= x2[-192] * w; /* * this multiplyer could be removed, but it needs more 256 FLOAT data. * thinking about the data cache performance, I think we should not * use such a huge table. tt 2000/Oct/25 */ s *= wp[6]; w = t - s; a[30 + i * 2] = t + s; a[31 + i * 2] = wp[7] * w; wp += 18; x1--; x2++; } { FLOAT s, t, u, v; t = x1[-16] * wp[-10]; s = x1[-32] * wp[-2]; t += (x1[-48] - x1[16]) * wp[-9]; s += x1[-96] * wp[-1]; t += (x1[-80] + x1[48]) * wp[-8]; s += x1[-160] * wp[0]; t += (x1[-112] - x1[80]) * wp[-7]; s += x1[-224] * wp[1]; t += (x1[-144] + x1[112]) * wp[-6]; s -= x1[32] * wp[2]; t += (x1[-176] - x1[144]) * wp[-5]; s -= x1[96] * wp[3]; t += (x1[-208] + x1[176]) * wp[-4]; s -= x1[160] * wp[4]; t += (x1[-240] - x1[208]) * wp[-3]; s -= x1[224]; u = s - t; v = s + t; t = a[14]; s = a[15] - t; a[31] = v + t; /* A0 */ a[30] = u + s; /* A1 */ a[15] = u - s; /* A2 */ a[14] = v - t; /* A3 */ } { FLOAT xr; xr = a[28] - a[0]; a[0] += a[28]; a[28] = xr * wp[-2 * 18 + 7]; xr = a[29] - a[1]; a[1] += a[29]; a[29] = xr * wp[-2 * 18 + 7]; xr = a[26] - a[2]; a[2] += a[26]; a[26] = xr * wp[-4 * 18 + 7]; xr = a[27] - a[3]; a[3] += a[27]; a[27] = xr * wp[-4 * 18 + 7]; xr = a[24] - a[4]; a[4] += a[24]; a[24] = xr * wp[-6 * 18 + 7]; xr = a[25] - a[5]; a[5] += a[25]; a[25] = xr * wp[-6 * 18 + 7]; xr = a[22] - a[6]; a[6] += a[22]; a[22] = xr * SQRT2; xr = a[23] - a[7]; a[7] += a[23]; a[23] = xr * SQRT2 - a[7]; a[7] -= a[6]; a[22] -= a[7]; a[23] -= a[22]; xr = a[6]; a[6] = a[31] - xr; a[31] = a[31] + xr; xr = a[7]; a[7] = a[30] - xr; a[30] = a[30] + xr; xr = a[22]; a[22] = a[15] - xr; a[15] = a[15] + xr; xr = a[23]; a[23] = a[14] - xr; a[14] = a[14] + xr; xr = a[20] - a[8]; a[8] += a[20]; a[20] = xr * wp[-10 * 18 + 7]; xr = a[21] - a[9]; a[9] += a[21]; a[21] = xr * wp[-10 * 18 + 7]; xr = a[18] - a[10]; a[10] += a[18]; a[18] = xr * wp[-12 * 18 + 7]; xr = a[19] - a[11]; a[11] += a[19]; a[19] = xr * wp[-12 * 18 + 7]; xr = a[16] - a[12]; a[12] += a[16]; a[16] = xr * wp[-14 * 18 + 7]; xr = a[17] - a[13]; a[13] += a[17]; a[17] = xr * wp[-14 * 18 + 7]; xr = -a[20] + a[24]; a[20] += a[24]; a[24] = xr * wp[-12 * 18 + 7]; xr = -a[21] + a[25]; a[21] += a[25]; a[25] = xr * wp[-12 * 18 + 7]; xr = a[4] - a[8]; a[4] += a[8]; a[8] = xr * wp[-12 * 18 + 7]; xr = a[5] - a[9]; a[5] += a[9]; a[9] = xr * wp[-12 * 18 + 7]; xr = a[0] - a[12]; a[0] += a[12]; a[12] = xr * wp[-4 * 18 + 7]; xr = a[1] - a[13]; a[1] += a[13]; a[13] = xr * wp[-4 * 18 + 7]; xr = a[16] - a[28]; a[16] += a[28]; a[28] = xr * wp[-4 * 18 + 7]; xr = -a[17] + a[29]; a[17] += a[29]; a[29] = xr * wp[-4 * 18 + 7]; xr = SQRT2 * (a[2] - a[10]); a[2] += a[10]; a[10] = xr; xr = SQRT2 * (a[3] - a[11]); a[3] += a[11]; a[11] = xr; xr = SQRT2 * (-a[18] + a[26]); a[18] += a[26]; a[26] = xr - a[18]; xr = SQRT2 * (-a[19] + a[27]); a[19] += a[27]; a[27] = xr - a[19]; xr = a[2]; a[19] -= a[3]; a[3] -= xr; a[2] = a[31] - xr; a[31] += xr; xr = a[3]; a[11] -= a[19]; a[18] -= xr; a[3] = a[30] - xr; a[30] += xr; xr = a[18]; a[27] -= a[11]; a[19] -= xr; a[18] = a[15] - xr; a[15] += xr; xr = a[19]; a[10] -= xr; a[19] = a[14] - xr; a[14] += xr; xr = a[10]; a[11] -= xr; a[10] = a[23] - xr; a[23] += xr; xr = a[11]; a[26] -= xr; a[11] = a[22] - xr; a[22] += xr; xr = a[26]; a[27] -= xr; a[26] = a[7] - xr; a[7] += xr; xr = a[27]; a[27] = a[6] - xr; a[6] += xr; xr = SQRT2 * (a[0] - a[4]); a[0] += a[4]; a[4] = xr; xr = SQRT2 * (a[1] - a[5]); a[1] += a[5]; a[5] = xr; xr = SQRT2 * (a[16] - a[20]); a[16] += a[20]; a[20] = xr; xr = SQRT2 * (a[17] - a[21]); a[17] += a[21]; a[21] = xr; xr = -SQRT2 * (a[8] - a[12]); a[8] += a[12]; a[12] = xr - a[8]; xr = -SQRT2 * (a[9] - a[13]); a[9] += a[13]; a[13] = xr - a[9]; xr = -SQRT2 * (a[25] - a[29]); a[25] += a[29]; a[29] = xr - a[25]; xr = -SQRT2 * (a[24] + a[28]); a[24] -= a[28]; a[28] = xr - a[24]; xr = a[24] - a[16]; a[24] = xr; xr = a[20] - xr; a[20] = xr; xr = a[28] - xr; a[28] = xr; xr = a[25] - a[17]; a[25] = xr; xr = a[21] - xr; a[21] = xr; xr = a[29] - xr; a[29] = xr; xr = a[17] - a[1]; a[17] = xr; xr = a[9] - xr; a[9] = xr; xr = a[25] - xr; a[25] = xr; xr = a[5] - xr; a[5] = xr; xr = a[21] - xr; a[21] = xr; xr = a[13] - xr; a[13] = xr; xr = a[29] - xr; a[29] = xr; xr = a[1] - a[0]; a[1] = xr; xr = a[16] - xr; a[16] = xr; xr = a[17] - xr; a[17] = xr; xr = a[8] - xr; a[8] = xr; xr = a[9] - xr; a[9] = xr; xr = a[24] - xr; a[24] = xr; xr = a[25] - xr; a[25] = xr; xr = a[4] - xr; a[4] = xr; xr = a[5] - xr; a[5] = xr; xr = a[20] - xr; a[20] = xr; xr = a[21] - xr; a[21] = xr; xr = a[12] - xr; a[12] = xr; xr = a[13] - xr; a[13] = xr; xr = a[28] - xr; a[28] = xr; xr = a[29] - xr; a[29] = xr; xr = a[0]; a[0] += a[31]; a[31] -= xr; xr = a[1]; a[1] += a[30]; a[30] -= xr; xr = a[16]; a[16] += a[15]; a[15] -= xr; xr = a[17]; a[17] += a[14]; a[14] -= xr; xr = a[8]; a[8] += a[23]; a[23] -= xr; xr = a[9]; a[9] += a[22]; a[22] -= xr; xr = a[24]; a[24] += a[7]; a[7] -= xr; xr = a[25]; a[25] += a[6]; a[6] -= xr; xr = a[4]; a[4] += a[27]; a[27] -= xr; xr = a[5]; a[5] += a[26]; a[26] -= xr; xr = a[20]; a[20] += a[11]; a[11] -= xr; xr = a[21]; a[21] += a[10]; a[10] -= xr; xr = a[12]; a[12] += a[19]; a[19] -= xr; xr = a[13]; a[13] += a[18]; a[18] -= xr; xr = a[28]; a[28] += a[3]; a[3] -= xr; xr = a[29]; a[29] += a[2]; a[2] -= xr; } } /*-------------------------------------------------------------------*/ /* */ /* Function: Calculation of the MDCT */ /* In the case of long blocks (type 0,1,3) there are */ /* 36 coefficents in the time domain and 18 in the frequency */ /* domain. */ /* In the case of short blocks (type 2) there are 3 */ /* transformations with short length. This leads to 12 coefficents */ /* in the time and 6 in the frequency domain. In this case the */ /* results are stored side by side in the vector out[]. */ /* */ /* New layer3 */ /* */ /*-------------------------------------------------------------------*/ inline static void mdct_short(FLOAT * inout) { int l; for (l = 0; l < 3; l++) { FLOAT tc0, tc1, tc2, ts0, ts1, ts2; ts0 = inout[2 * 3] * win[SHORT_TYPE][0] - inout[5 * 3]; tc0 = inout[0 * 3] * win[SHORT_TYPE][2] - inout[3 * 3]; tc1 = ts0 + tc0; tc2 = ts0 - tc0; ts0 = inout[5 * 3] * win[SHORT_TYPE][0] + inout[2 * 3]; tc0 = inout[3 * 3] * win[SHORT_TYPE][2] + inout[0 * 3]; ts1 = ts0 + tc0; ts2 = -ts0 + tc0; tc0 = (inout[1 * 3] * win[SHORT_TYPE][1] - inout[4 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */ ts0 = (inout[4 * 3] * win[SHORT_TYPE][1] + inout[1 * 3]) * 2.069978111953089e-11; /* tritab_s[1] */ inout[3 * 0] = tc1 * 1.907525191737280e-11 /* tritab_s[2] */ + tc0; inout[3 * 5] = -ts1 * 1.907525191737280e-11 /* tritab_s[0] */ + ts0; tc2 = tc2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[2] */ ; ts1 = ts1 * 0.5 * 1.907525191737281e-11 + ts0; inout[3 * 1] = tc2 - ts1; inout[3 * 2] = tc2 + ts1; tc1 = tc1 * 0.5 * 1.907525191737281e-11 - tc0; ts2 = ts2 * 0.86602540378443870761 * 1.907525191737281e-11 /* tritab_s[0] */ ; inout[3 * 3] = tc1 + ts2; inout[3 * 4] = tc1 - ts2; inout++; } } inline static void mdct_long(FLOAT * out, FLOAT const *in) { FLOAT ct, st; { FLOAT tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8; /* 1,2, 5,6, 9,10, 13,14, 17 */ tc1 = in[17] - in[9]; tc3 = in[15] - in[11]; tc4 = in[14] - in[12]; ts5 = in[0] + in[8]; ts6 = in[1] + in[7]; ts7 = in[2] + in[6]; ts8 = in[3] + in[5]; out[17] = (ts5 + ts7 - ts8) - (ts6 - in[4]); st = (ts5 + ts7 - ts8) * cx[7] + (ts6 - in[4]); ct = (tc1 - tc3 - tc4) * cx[6]; out[5] = ct + st; out[6] = ct - st; tc2 = (in[16] - in[10]) * cx[6]; ts6 = ts6 * cx[7] + in[4]; ct = tc1 * cx[0] + tc2 + tc3 * cx[1] + tc4 * cx[2]; st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3]; out[1] = ct + st; out[2] = ct - st; ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0]; st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4]; out[9] = ct + st; out[10] = ct - st; ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1]; st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5]; out[13] = ct + st; out[14] = ct - st; } { FLOAT ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8; ts1 = in[8] - in[0]; ts3 = in[6] - in[2]; ts4 = in[5] - in[3]; tc5 = in[17] + in[9]; tc6 = in[16] + in[10]; tc7 = in[15] + in[11]; tc8 = in[14] + in[12]; out[0] = (tc5 + tc7 + tc8) + (tc6 + in[13]); ct = (tc5 + tc7 + tc8) * cx[7] - (tc6 + in[13]); st = (ts1 - ts3 + ts4) * cx[6]; out[11] = ct + st; out[12] = ct - st; ts2 = (in[7] - in[1]) * cx[6]; tc6 = in[13] - tc6 * cx[7]; ct = tc5 * cx[3] - tc6 + tc7 * cx[4] + tc8 * cx[5]; st = ts1 * cx[2] + ts2 + ts3 * cx[0] + ts4 * cx[1]; out[3] = ct + st; out[4] = ct - st; ct = -tc5 * cx[5] + tc6 - tc7 * cx[3] - tc8 * cx[4]; st = ts1 * cx[1] + ts2 - ts3 * cx[2] - ts4 * cx[0]; out[7] = ct + st; out[8] = ct - st; ct = -tc5 * cx[4] + tc6 - tc7 * cx[5] - tc8 * cx[3]; st = ts1 * cx[0] - ts2 + ts3 * cx[1] - ts4 * cx[2]; out[15] = ct + st; out[16] = ct - st; } } void mdct_sub48(lame_internal_flags * gfc, const sample_t * w0, const sample_t * w1) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int gr, k, ch; const sample_t *wk; wk = w0 + 286; /* thinking cache performance, ch->gr loop is better than gr->ch loop */ for (ch = 0; ch < cfg->channels_out; ch++) { for (gr = 0; gr < cfg->mode_gr; gr++) { int band; gr_info *const gi = &(gfc->l3_side.tt[gr][ch]); FLOAT *mdct_enc = gi->xr; FLOAT *samp = esv->sb_sample[ch][1 - gr][0]; for (k = 0; k < 18 / 2; k++) { window_subband(wk, samp); window_subband(wk + 32, samp + 32); samp += 64; wk += 64; /* * Compensate for inversion in the analysis filter */ for (band = 1; band < 32; band += 2) { samp[band - 32] *= -1; } } /* * Perform imdct of 18 previous subband samples * + 18 current subband samples */ for (band = 0; band < 32; band++, mdct_enc += 18) { int type = gi->block_type; FLOAT const *const band0 = esv->sb_sample[ch][gr][0] + order[band]; FLOAT *const band1 = esv->sb_sample[ch][1 - gr][0] + order[band]; if (gi->mixed_block_flag && band < 2) type = 0; if (esv->amp_filter[band] < 1e-12) { memset(mdct_enc, 0, 18 * sizeof(FLOAT)); } else { if (esv->amp_filter[band] < 1.0) { for (k = 0; k < 18; k++) band1[k * 32] *= esv->amp_filter[band]; } if (type == SHORT_TYPE) { for (k = -NS / 4; k < 0; k++) { FLOAT const w = win[SHORT_TYPE][k + 3]; mdct_enc[k * 3 + 9] = band0[(9 + k) * 32] * w - band0[(8 - k) * 32]; mdct_enc[k * 3 + 18] = band0[(14 - k) * 32] * w + band0[(15 + k) * 32]; mdct_enc[k * 3 + 10] = band0[(15 + k) * 32] * w - band0[(14 - k) * 32]; mdct_enc[k * 3 + 19] = band1[(2 - k) * 32] * w + band1[(3 + k) * 32]; mdct_enc[k * 3 + 11] = band1[(3 + k) * 32] * w - band1[(2 - k) * 32]; mdct_enc[k * 3 + 20] = band1[(8 - k) * 32] * w + band1[(9 + k) * 32]; } mdct_short(mdct_enc); } else { FLOAT work[18]; for (k = -NL / 4; k < 0; k++) { FLOAT a, b; a = win[type][k + 27] * band1[(k + 9) * 32] + win[type][k + 36] * band1[(8 - k) * 32]; b = win[type][k + 9] * band0[(k + 9) * 32] - win[type][k + 18] * band0[(8 - k) * 32]; work[k + 9] = a - b * tantab_l[k + 9]; work[k + 18] = a * tantab_l[k + 9] + b; } mdct_long(mdct_enc, work); } } /* * Perform aliasing reduction butterfly */ if (type != SHORT_TYPE && band != 0) { for (k = 7; k >= 0; --k) { FLOAT bu, bd; bu = mdct_enc[k] * ca[k] + mdct_enc[-1 - k] * cs[k]; bd = mdct_enc[k] * cs[k] - mdct_enc[-1 - k] * ca[k]; mdct_enc[-1 - k] = bu; mdct_enc[k] = bd; } } } } wk = w1 + 286; if (cfg->mode_gr == 1) { memcpy(esv->sb_sample[ch][0], esv->sb_sample[ch][1], 576 * sizeof(FLOAT)); } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/fft.h�������������������������������������������������������������������������000644 �001751 �001751 �00000002313 11561266675 017056� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Fast Fourier Transform include file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_FFT_H #define LAME_FFT_H void fft_long(lame_internal_flags const *const gfc, FLOAT x_real[BLKSIZE], int chn, const sample_t *const data[2]); void fft_short(lame_internal_flags const *const gfc, FLOAT x_real[3][BLKSIZE_s], int chn, const sample_t *const data[2]); void init_fft(lame_internal_flags * const gfc); #endif /* End of fft.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/VbrTag.h����������������������������������������������������������������������000644 �001751 �001751 �00000005561 11561266675 017474� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Xing VBR tagging for LAME. * * Copyright (c) 1999 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_VRBTAG_H #define LAME_VRBTAG_H /* ----------------------------------------------------------- * A Vbr header may be present in the ancillary * data field of the first frame of an mp3 bitstream * The Vbr header (optionally) contains * frames total number of audio frames in the bitstream * bytes total number of bytes in the bitstream * toc table of contents * toc (table of contents) gives seek points * for random access * the ith entry determines the seek point for * i-percent duration * seek point in bytes = (toc[i]/256.0) * total_bitstream_bytes * e.g. half duration seek point = (toc[50]/256.0) * total_bitstream_bytes */ #define FRAMES_FLAG 0x0001 #define BYTES_FLAG 0x0002 #define TOC_FLAG 0x0004 #define VBR_SCALE_FLAG 0x0008 #define NUMTOCENTRIES 100 #ifndef lame_internal_flags_defined #define lame_internal_flags_defined struct lame_internal_flags; typedef struct lame_internal_flags lame_internal_flags; #endif /*structure to receive extracted header */ /* toc may be NULL*/ typedef struct { int h_id; /* from MPEG header, 0=MPEG2, 1=MPEG1 */ int samprate; /* determined from MPEG header */ int flags; /* from Vbr header data */ int frames; /* total bit stream frames from Vbr header data */ int bytes; /* total bit stream bytes from Vbr header data */ int vbr_scale; /* encoded vbr scale from Vbr header data */ unsigned char toc[NUMTOCENTRIES]; /* may be NULL if toc not desired */ int headersize; /* size of VBR header, in bytes */ int enc_delay; /* encoder delay */ int enc_padding; /* encoder paddign added at end of stream */ } VBRTAGDATA; int GetVbrTag(VBRTAGDATA * pTagData, const unsigned char *buf); int InitVbrTag(lame_global_flags * gfp); int PutVbrTag(lame_global_flags const *gfp, FILE * fid); void AddVbrFrame(lame_internal_flags * gfc); void UpdateMusicCRC(uint16_t * crc, const unsigned char *buffer, int size); #endif �����������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/tables.c����������������������������������������������������������������������000644 �001751 �001751 �00000051564 11561266675 017560� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MPEG layer 3 tables source file * * Copyright (c) 1999 Albert L Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: tables.c,v 1.29 2011/05/07 16:05:17 rbrito Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "machine.h" #include "lame.h" #include "tables.h" static const uint16_t t1HB[] = { 1, 1, 1, 0 }; static const uint16_t t2HB[] = { 1, 2, 1, 3, 1, 1, 3, 2, 0 }; static const uint16_t t3HB[] = { 3, 2, 1, 1, 1, 1, 3, 2, 0 }; static const uint16_t t5HB[] = { 1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0 }; static const uint16_t t6HB[] = { 7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0 }; static const uint16_t t7HB[] = { 1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3, 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2, 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0 }; static const uint16_t t8HB[] = { 3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3, 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4, 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0 }; static const uint16_t t9HB[] = { 7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1, 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0 }; static const uint16_t t10HB[] = { 1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7, 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7, 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3, 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4, 4, 2, 0 }; static const uint16_t t11HB[] = { 3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10, 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5, 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14, 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0 }; static const uint16_t t12HB[] = { 9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11, 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5, 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2, 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12, 6, 3, 1, 0 }; static const uint16_t t13HB[] = { 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1 }; static const uint16_t t15HB[] = { 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33, 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38, 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20, 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11, 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0 }; static const uint16_t t16HB[] = { 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3 }; static const uint16_t t24HB[] = { 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3 }; static const uint16_t t32HB[] = { 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3, 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4 }; static const uint16_t t33HB[] = { 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3, 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4 }; const uint8_t t1l[] = { 1, 4, 3, 5 }; static const uint8_t t2l[] = { 1, 4, 7, 4, 5, 7, 6, 7, 8 }; static const uint8_t t3l[] = { 2, 3, 7, 4, 4, 7, 6, 7, 8 }; static const uint8_t t5l[] = { 1, 4, 7, 8, 4, 5, 8, 9, 7, 8, 9, 10, 8, 8, 9, 10 }; static const uint8_t t6l[] = { 3, 4, 6, 8, 4, 4, 6, 7, 5, 6, 7, 8, 7, 7, 8, 9 }; static const uint8_t t7l[] = { 1, 4, 7, 9, 9, 10, 4, 6, 8, 9, 9, 10, 7, 7, 9, 10, 10, 11, 8, 9, 10, 11, 11, 11, 8, 9, 10, 11, 11, 12, 9, 10, 11, 12, 12, 12 }; static const uint8_t t8l[] = { 2, 4, 7, 9, 9, 10, 4, 4, 6, 10, 10, 10, 7, 6, 8, 10, 10, 11, 9, 10, 10, 11, 11, 12, 9, 9, 10, 11, 12, 12, 10, 10, 11, 11, 13, 13 }; static const uint8_t t9l[] = { 3, 4, 6, 7, 9, 10, 4, 5, 6, 7, 8, 10, 5, 6, 7, 8, 9, 10, 7, 7, 8, 9, 9, 10, 8, 8, 9, 9, 10, 11, 9, 9, 10, 10, 11, 11 }; static const uint8_t t10l[] = { 1, 4, 7, 9, 10, 10, 10, 11, 4, 6, 8, 9, 10, 11, 10, 10, 7, 8, 9, 10, 11, 12, 11, 11, 8, 9, 10, 11, 12, 12, 11, 12, 9, 10, 11, 12, 12, 12, 12, 12, 10, 11, 12, 12, 13, 13, 12, 13, 9, 10, 11, 12, 12, 12, 13, 13, 10, 10, 11, 12, 12, 13, 13, 13 }; static const uint8_t t11l[] = { 2, 4, 6, 8, 9, 10, 9, 10, 4, 5, 6, 8, 10, 10, 9, 10, 6, 7, 8, 9, 10, 11, 10, 10, 8, 8, 9, 11, 10, 12, 10, 11, 9, 10, 10, 11, 11, 12, 11, 12, 9, 10, 11, 12, 12, 13, 12, 13, 9, 9, 9, 10, 11, 12, 12, 12, 9, 9, 10, 11, 12, 12, 12, 12 }; static const uint8_t t12l[] = { 4, 4, 6, 8, 9, 10, 10, 10, 4, 5, 6, 7, 9, 9, 10, 10, 6, 6, 7, 8, 9, 10, 9, 10, 7, 7, 8, 8, 9, 10, 10, 10, 8, 8, 9, 9, 10, 10, 10, 11, 9, 9, 10, 10, 10, 11, 10, 11, 9, 9, 9, 10, 10, 11, 11, 12, 10, 10, 10, 11, 11, 11, 11, 12 }; static const uint8_t t13l[] = { 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14, 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14, 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15, 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15, 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16, 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16, 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16, 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18, 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17, 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19, 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18, 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18, 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18, 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18, 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18 }; static const uint8_t t15l[] = { 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14, 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15 }; static const uint8_t t16_5l[] = { 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11, 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11, 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12, 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13, 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12, 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13, 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14, 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13, 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14, 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14, 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14, 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12 }; static const uint8_t t16l[] = { 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10, 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10, 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11, 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12, 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11, 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12, 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13, 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12, 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13, 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13, 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10 }; static const uint8_t t24l[] = { 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10, 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10, 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9, 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9, 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10, 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10, 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6 }; const uint8_t t32l[] = { 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3, 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4 }; const uint8_t t33l[] = { 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4 }; const struct huffcodetab ht[HTN] = { /* xlen, linmax, table, hlen */ {0, 0, NULL, NULL}, {2, 0, t1HB, t1l}, {3, 0, t2HB, t2l}, {3, 0, t3HB, t3l}, {0, 0, NULL, NULL}, /* Apparently not used */ {4, 0, t5HB, t5l}, {4, 0, t6HB, t6l}, {6, 0, t7HB, t7l}, {6, 0, t8HB, t8l}, {6, 0, t9HB, t9l}, {8, 0, t10HB, t10l}, {8, 0, t11HB, t11l}, {8, 0, t12HB, t12l}, {16, 0, t13HB, t13l}, {0, 0, NULL, t16_5l}, /* Apparently not used */ {16, 0, t15HB, t15l}, {1, 1, t16HB, t16l}, {2, 3, t16HB, t16l}, {3, 7, t16HB, t16l}, {4, 15, t16HB, t16l}, {6, 63, t16HB, t16l}, {8, 255, t16HB, t16l}, {10, 1023, t16HB, t16l}, {13, 8191, t16HB, t16l}, {4, 15, t24HB, t24l}, {5, 31, t24HB, t24l}, {6, 63, t24HB, t24l}, {7, 127, t24HB, t24l}, {8, 255, t24HB, t24l}, {9, 511, t24HB, t24l}, {11, 2047, t24HB, t24l}, {13, 8191, t24HB, t24l}, {0, 0, t32HB, t32l}, {0, 0, t33HB, t33l}, }; /* for (i = 0; i < 16*16; i++) { * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i]; * } */ const uint32_t largetbl[16 * 16] = { 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b, 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a, 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b, 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a, 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b, 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009, 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009, 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009, 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009, 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a, 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a, 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a, 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a, 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c, 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a, 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a, 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a, 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d, 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a, 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009, 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006 }; /* for (i = 0; i < 3*3; i++) { * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i]; * } */ const uint32_t table23[3 * 3] = { 0x010002, 0x040003, 0x070007, 0x040004, 0x050004, 0x070007, 0x060006, 0x070007, 0x080008 }; /* for (i = 0; i < 4*4; i++) { * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i]; * } */ const uint32_t table56[4 * 4] = { 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007, 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009 }; /* * 0: MPEG-2 LSF * 1: MPEG-1 * 2: MPEG-2.5 LSF FhG extention (1995-07-11 shn) */ typedef enum { MPEG_2 = 0, MPEG_1 = 1, MPEG_25 = 2 } MPEG_t; const int bitrate_table[3][16] = { {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1}, /* MPEG 2 */ {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1}, /* MPEG 1 */ {0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1}, /* MPEG 2.5 */ }; const int samplerate_table[3][4] = { {22050, 24000, 16000, -1}, /* MPEG 2 */ {44100, 48000, 32000, -1}, /* MPEG 1 */ {11025, 12000, 8000, -1}, /* MPEG 2.5 */ }; int lame_get_bitrate(int mpeg_version, int table_index) { if (0 <= mpeg_version && mpeg_version <= 2) { if (0 <= table_index && table_index <= 15) { return bitrate_table[mpeg_version][table_index]; } } return -1; } int lame_get_samplerate(int mpeg_version, int table_index) { if (0 <= mpeg_version && mpeg_version <= 2) { if (0 <= table_index && table_index <= 3) { return samplerate_table[mpeg_version][table_index]; } } return -1; } /* This is the scfsi_band table from 2.4.2.7 of the IS */ const int scfsi_band[5] = { 0, 6, 11, 16, 21 }; /* end of tables.c */ ��������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/takehiro.c��������������������������������������������������������������������000644 �001751 �001751 �00000112460 13154046620 020067� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 huffman table selecting and bit counting * * Copyright (c) 1999-2005 Takehiro TOMINAGA * Copyright (c) 2002-2005 Gabriel Bouvigne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: takehiro.c,v 1.80 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "quantize_pvt.h" #include "tables.h" static const struct { const int region0_count; const int region1_count; } subdv_table[23] = { { 0, 0}, /* 0 bands */ { 0, 0}, /* 1 bands */ { 0, 0}, /* 2 bands */ { 0, 0}, /* 3 bands */ { 0, 0}, /* 4 bands */ { 0, 1}, /* 5 bands */ { 1, 1}, /* 6 bands */ { 1, 1}, /* 7 bands */ { 1, 2}, /* 8 bands */ { 2, 2}, /* 9 bands */ { 2, 3}, /* 10 bands */ { 2, 3}, /* 11 bands */ { 3, 4}, /* 12 bands */ { 3, 4}, /* 13 bands */ { 3, 4}, /* 14 bands */ { 4, 5}, /* 15 bands */ { 4, 5}, /* 16 bands */ { 4, 6}, /* 17 bands */ { 5, 6}, /* 18 bands */ { 5, 6}, /* 19 bands */ { 5, 7}, /* 20 bands */ { 6, 7}, /* 21 bands */ { 6, 7}, /* 22 bands */ }; /********************************************************************* * nonlinear quantization of xr * More accurate formula than the ISO formula. Takes into account * the fact that we are quantizing xr -> ix, but we want ix^4/3 to be * as close as possible to x^4/3. (taking the nearest int would mean * ix is as close as possible to xr, which is different.) * * From Segher Boessenkool <segher@eastsite.nl> 11/1999 * * 09/2000: ASM code removed in favor of IEEE754 hack by Takehiro * Tominaga. If you need the ASM code, check CVS circa Aug 2000. * * 01/2004: Optimizations by Gabriel Bouvigne *********************************************************************/ static void quantize_lines_xrpow_01(unsigned int l, FLOAT istep, const FLOAT * xr, int *ix) { const FLOAT compareval0 = (1.0f - 0.4054f) / istep; unsigned int i; assert(l > 0); assert(l % 2 == 0); for (i = 0; i < l; i += 2) { FLOAT const xr_0 = xr[i+0]; FLOAT const xr_1 = xr[i+1]; int const ix_0 = (compareval0 > xr_0) ? 0 : 1; int const ix_1 = (compareval0 > xr_1) ? 0 : 1; ix[i+0] = ix_0; ix[i+1] = ix_1; } } #ifdef TAKEHIRO_IEEE754_HACK typedef union { float f; int i; } fi_union; #define MAGIC_FLOAT (65536*(128)) #define MAGIC_INT 0x4b000000 static void quantize_lines_xrpow(unsigned int l, FLOAT istep, const FLOAT * xp, int *pi) { fi_union *fi; unsigned int remaining; assert(l > 0); fi = (fi_union *) pi; l = l >> 1; remaining = l % 2; l = l >> 1; while (l--) { double x0 = istep * xp[0]; double x1 = istep * xp[1]; double x2 = istep * xp[2]; double x3 = istep * xp[3]; x0 += MAGIC_FLOAT; fi[0].f = x0; x1 += MAGIC_FLOAT; fi[1].f = x1; x2 += MAGIC_FLOAT; fi[2].f = x2; x3 += MAGIC_FLOAT; fi[3].f = x3; fi[0].f = x0 + adj43asm[fi[0].i - MAGIC_INT]; fi[1].f = x1 + adj43asm[fi[1].i - MAGIC_INT]; fi[2].f = x2 + adj43asm[fi[2].i - MAGIC_INT]; fi[3].f = x3 + adj43asm[fi[3].i - MAGIC_INT]; fi[0].i -= MAGIC_INT; fi[1].i -= MAGIC_INT; fi[2].i -= MAGIC_INT; fi[3].i -= MAGIC_INT; fi += 4; xp += 4; }; if (remaining) { double x0 = istep * xp[0]; double x1 = istep * xp[1]; x0 += MAGIC_FLOAT; fi[0].f = x0; x1 += MAGIC_FLOAT; fi[1].f = x1; fi[0].f = x0 + adj43asm[fi[0].i - MAGIC_INT]; fi[1].f = x1 + adj43asm[fi[1].i - MAGIC_INT]; fi[0].i -= MAGIC_INT; fi[1].i -= MAGIC_INT; } } #else /********************************************************************* * XRPOW_FTOI is a macro to convert floats to ints. * if XRPOW_FTOI(x) = nearest_int(x), then QUANTFAC(x)=adj43asm[x] * ROUNDFAC= -0.0946 * * if XRPOW_FTOI(x) = floor(x), then QUANTFAC(x)=asj43[x] * ROUNDFAC=0.4054 * * Note: using floor() or (int) is extremely slow. On machines where * the TAKEHIRO_IEEE754_HACK code above does not work, it is worthwile * to write some ASM for XRPOW_FTOI(). *********************************************************************/ #define XRPOW_FTOI(src,dest) ((dest) = (int)(src)) #define QUANTFAC(rx) adj43[rx] #define ROUNDFAC 0.4054 static void quantize_lines_xrpow(unsigned int l, FLOAT istep, const FLOAT * xr, int *ix) { unsigned int remaining; assert(l > 0); l = l >> 1; remaining = l % 2; l = l >> 1; while (l--) { FLOAT x0, x1, x2, x3; int rx0, rx1, rx2, rx3; x0 = *xr++ * istep; x1 = *xr++ * istep; XRPOW_FTOI(x0, rx0); x2 = *xr++ * istep; XRPOW_FTOI(x1, rx1); x3 = *xr++ * istep; XRPOW_FTOI(x2, rx2); x0 += QUANTFAC(rx0); XRPOW_FTOI(x3, rx3); x1 += QUANTFAC(rx1); XRPOW_FTOI(x0, *ix++); x2 += QUANTFAC(rx2); XRPOW_FTOI(x1, *ix++); x3 += QUANTFAC(rx3); XRPOW_FTOI(x2, *ix++); XRPOW_FTOI(x3, *ix++); }; if (remaining) { FLOAT x0, x1; int rx0, rx1; x0 = *xr++ * istep; x1 = *xr++ * istep; XRPOW_FTOI(x0, rx0); XRPOW_FTOI(x1, rx1); x0 += QUANTFAC(rx0); x1 += QUANTFAC(rx1); XRPOW_FTOI(x0, *ix++); XRPOW_FTOI(x1, *ix++); } } #endif /********************************************************************* * Quantization function * This function will select which lines to quantize and call the * proper quantization function *********************************************************************/ static void quantize_xrpow(const FLOAT * xp, int *pi, FLOAT istep, gr_info const *const cod_info, calc_noise_data const *prev_noise) { /* quantize on xr^(3/4) instead of xr */ int sfb; int sfbmax; int j = 0; int prev_data_use; int *iData; int accumulate = 0; int accumulate01 = 0; int *acc_iData; const FLOAT *acc_xp; iData = pi; acc_xp = xp; acc_iData = iData; /* Reusing previously computed data does not seems to work if global gain is changed. Finding why it behaves this way would allow to use a cache of previously computed values (let's 10 cached values per sfb) that would probably provide a noticeable speedup */ prev_data_use = (prev_noise && (cod_info->global_gain == prev_noise->global_gain)); if (cod_info->block_type == SHORT_TYPE) sfbmax = 38; else sfbmax = 21; for (sfb = 0; sfb <= sfbmax; sfb++) { int step = -1; if (prev_data_use || cod_info->block_type == NORM_TYPE) { step = cod_info->global_gain - ((cod_info->scalefac[sfb] + (cod_info->preflag ? pretab[sfb] : 0)) << (cod_info->scalefac_scale + 1)) - cod_info->subblock_gain[cod_info->window[sfb]] * 8; } assert(cod_info->width[sfb] >= 0); if (prev_data_use && (prev_noise->step[sfb] == step)) { /* do not recompute this part, but compute accumulated lines */ if (accumulate) { quantize_lines_xrpow(accumulate, istep, acc_xp, acc_iData); accumulate = 0; } if (accumulate01) { quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_iData); accumulate01 = 0; } } else { /*should compute this part */ int l; l = cod_info->width[sfb]; if ((j + cod_info->width[sfb]) > cod_info->max_nonzero_coeff) { /*do not compute upper zero part */ int usefullsize; usefullsize = cod_info->max_nonzero_coeff - j + 1; memset(&pi[cod_info->max_nonzero_coeff], 0, sizeof(int) * (576 - cod_info->max_nonzero_coeff)); l = usefullsize; if (l < 0) { l = 0; } /* no need to compute higher sfb values */ sfb = sfbmax + 1; } /*accumulate lines to quantize */ if (!accumulate && !accumulate01) { acc_iData = iData; acc_xp = xp; } if (prev_noise && prev_noise->sfb_count1 > 0 && sfb >= prev_noise->sfb_count1 && prev_noise->step[sfb] > 0 && step >= prev_noise->step[sfb]) { if (accumulate) { quantize_lines_xrpow(accumulate, istep, acc_xp, acc_iData); accumulate = 0; acc_iData = iData; acc_xp = xp; } accumulate01 += l; } else { if (accumulate01) { quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_iData); accumulate01 = 0; acc_iData = iData; acc_xp = xp; } accumulate += l; } if (l <= 0) { /* rh: 20040215 * may happen due to "prev_data_use" optimization */ if (accumulate01) { quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_iData); accumulate01 = 0; } if (accumulate) { quantize_lines_xrpow(accumulate, istep, acc_xp, acc_iData); accumulate = 0; } break; /* ends for-loop */ } } if (sfb <= sfbmax) { iData += cod_info->width[sfb]; xp += cod_info->width[sfb]; j += cod_info->width[sfb]; } } if (accumulate) { /*last data part */ quantize_lines_xrpow(accumulate, istep, acc_xp, acc_iData); accumulate = 0; } if (accumulate01) { /*last data part */ quantize_lines_xrpow_01(accumulate01, istep, acc_xp, acc_iData); accumulate01 = 0; } } /*************************************************************************/ /* ix_max */ /*************************************************************************/ static int ix_max(const int *ix, const int *end) { int max1 = 0, max2 = 0; do { int const x1 = *ix++; int const x2 = *ix++; if (max1 < x1) max1 = x1; if (max2 < x2) max2 = x2; } while (ix < end); if (max1 < max2) max1 = max2; return max1; } static int count_bit_ESC(const int *ix, const int *const end, int t1, const int t2, unsigned int *const s) { /* ESC-table is used */ unsigned int const linbits = ht[t1].xlen * 65536u + ht[t2].xlen; unsigned int sum = 0, sum2; do { unsigned int x = *ix++; unsigned int y = *ix++; if (x >= 15u) { x = 15u; sum += linbits; } if (y >= 15u) { y = 15u; sum += linbits; } x <<= 4u; x += y; sum += largetbl[x]; } while (ix < end); sum2 = sum & 0xffffu; sum >>= 16u; if (sum > sum2) { sum = sum2; t1 = t2; } *s += sum; return t1; } static int count_bit_noESC(const int *ix, const int *end, int mx, unsigned int *s) { /* No ESC-words */ unsigned int sum1 = 0; const uint8_t *const hlen1 = ht[1].hlen; (void) mx; do { unsigned int const x0 = *ix++; unsigned int const x1 = *ix++; sum1 += hlen1[ x0+x0 + x1 ]; } while (ix < end); *s += sum1; return 1; } static const int huf_tbl_noESC[] = { 1, 2, 5, 7, 7, 10, 10, 13, 13, 13, 13, 13, 13, 13, 13 }; static int count_bit_noESC_from2(const int *ix, const int *end, int max, unsigned int *s) { int t1 = huf_tbl_noESC[max - 1]; /* No ESC-words */ const unsigned int xlen = ht[t1].xlen; uint32_t const* table = (t1 == 2) ? &table23[0] : &table56[0]; unsigned int sum = 0, sum2; do { unsigned int const x0 = *ix++; unsigned int const x1 = *ix++; sum += table[ x0 * xlen + x1 ]; } while (ix < end); sum2 = sum & 0xffffu; sum >>= 16u; if (sum > sum2) { sum = sum2; t1++; } *s += sum; return t1; } inline static int count_bit_noESC_from3(const int *ix, const int *end, int max, unsigned int * s) { int t1 = huf_tbl_noESC[max - 1]; /* No ESC-words */ unsigned int sum1 = 0; unsigned int sum2 = 0; unsigned int sum3 = 0; const unsigned int xlen = ht[t1].xlen; const uint8_t *const hlen1 = ht[t1].hlen; const uint8_t *const hlen2 = ht[t1 + 1].hlen; const uint8_t *const hlen3 = ht[t1 + 2].hlen; int t; do { unsigned int x0 = *ix++; unsigned int x1 = *ix++; unsigned int x = x0 * xlen + x1; sum1 += hlen1[x]; sum2 += hlen2[x]; sum3 += hlen3[x]; } while (ix < end); t = t1; if (sum1 > sum2) { sum1 = sum2; t++; } if (sum1 > sum3) { sum1 = sum3; t = t1 + 2; } *s += sum1; return t; } /*************************************************************************/ /* choose table */ /*************************************************************************/ /* Choose the Huffman table that will encode ix[begin..end] with the fewest bits. Note: This code contains knowledge about the sizes and characteristics of the Huffman tables as defined in the IS (Table B.7), and will not work with any arbitrary tables. */ static int count_bit_null(const int* ix, const int* end, int max, unsigned int* s) { (void) ix; (void) end; (void) max; (void) s; return 0; } typedef int (*count_fnc)(const int* ix, const int* end, int max, unsigned int* s); static const count_fnc count_fncs[] = { &count_bit_null , &count_bit_noESC , &count_bit_noESC_from2 , &count_bit_noESC_from2 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 , &count_bit_noESC_from3 }; static int choose_table_nonMMX(const int *ix, const int *const end, int *const _s) { unsigned int* s = (unsigned int*)_s; unsigned int max; int choice, choice2; max = ix_max(ix, end); if (max <= 15) { return count_fncs[max](ix, end, max, s); } /* try tables with linbits */ if (max > IXMAX_VAL) { *s = LARGE_BITS; return -1; } max -= 15u; for (choice2 = 24; choice2 < 32; choice2++) { if (ht[choice2].linmax >= max) { break; } } for (choice = choice2 - 8; choice < 24; choice++) { if (ht[choice].linmax >= max) { break; } } return count_bit_ESC(ix, end, choice, choice2, s); } /*************************************************************************/ /* count_bit */ /*************************************************************************/ int noquant_count_bits(lame_internal_flags const *const gfc, gr_info * const gi, calc_noise_data * prev_noise) { SessionConfig_t const *const cfg = &gfc->cfg; int bits = 0; int i, a1, a2; int const *const ix = gi->l3_enc; i = Min(576, ((gi->max_nonzero_coeff + 2) >> 1) << 1); if (prev_noise) prev_noise->sfb_count1 = 0; /* Determine count1 region */ for (; i > 1; i -= 2) if (ix[i - 1] | ix[i - 2]) break; gi->count1 = i; /* Determines the number of bits to encode the quadruples. */ a1 = a2 = 0; for (; i > 3; i -= 4) { int x4 = ix[i-4]; int x3 = ix[i-3]; int x2 = ix[i-2]; int x1 = ix[i-1]; int p; /* hack to check if all values <= 1 */ if ((unsigned int) (x4 | x3 | x2 | x1) > 1) break; p = ((x4 * 2 + x3) * 2 + x2) * 2 + x1; a1 += t32l[p]; a2 += t33l[p]; } bits = a1; gi->count1table_select = 0; if (a1 > a2) { bits = a2; gi->count1table_select = 1; } gi->count1bits = bits; gi->big_values = i; if (i == 0) return bits; if (gi->block_type == SHORT_TYPE) { a1 = 3 * gfc->scalefac_band.s[3]; if (a1 > gi->big_values) a1 = gi->big_values; a2 = gi->big_values; } else if (gi->block_type == NORM_TYPE) { assert(i <= 576); /* bv_scf has 576 entries (0..575) */ a1 = gi->region0_count = gfc->sv_qnt.bv_scf[i - 2]; a2 = gi->region1_count = gfc->sv_qnt.bv_scf[i - 1]; assert(a1 + a2 + 2 < SBPSY_l); a2 = gfc->scalefac_band.l[a1 + a2 + 2]; a1 = gfc->scalefac_band.l[a1 + 1]; if (a2 < i) gi->table_select[2] = gfc->choose_table(ix + a2, ix + i, &bits); } else { gi->region0_count = 7; /*gi->region1_count = SBPSY_l - 7 - 1; */ gi->region1_count = SBMAX_l - 1 - 7 - 1; a1 = gfc->scalefac_band.l[7 + 1]; a2 = i; if (a1 > a2) { a1 = a2; } } /* have to allow for the case when bigvalues < region0 < region1 */ /* (and region0, region1 are ignored) */ a1 = Min(a1, i); a2 = Min(a2, i); assert(a1 >= 0); assert(a2 >= 0); /* Count the number of bits necessary to code the bigvalues region. */ if (0 < a1) gi->table_select[0] = gfc->choose_table(ix, ix + a1, &bits); if (a1 < a2) gi->table_select[1] = gfc->choose_table(ix + a1, ix + a2, &bits); if (cfg->use_best_huffman == 2) { gi->part2_3_length = bits; best_huffman_divide(gfc, gi); bits = gi->part2_3_length; } if (prev_noise) { if (gi->block_type == NORM_TYPE) { int sfb = 0; while (gfc->scalefac_band.l[sfb] < gi->big_values) { sfb++; } prev_noise->sfb_count1 = sfb; } } return bits; } int count_bits(lame_internal_flags const *const gfc, const FLOAT * const xr, gr_info * const gi, calc_noise_data * prev_noise) { int *const ix = gi->l3_enc; /* since quantize_xrpow uses table lookup, we need to check this first: */ FLOAT const w = (IXMAX_VAL) / IPOW20(gi->global_gain); if (gi->xrpow_max > w) return LARGE_BITS; quantize_xrpow(xr, ix, IPOW20(gi->global_gain), gi, prev_noise); if (gfc->sv_qnt.substep_shaping & 2) { int sfb, j = 0; /* 0.634521682242439 = 0.5946*2**(.5*0.1875) */ int const gain = gi->global_gain + gi->scalefac_scale; const FLOAT roundfac = 0.634521682242439 / IPOW20(gain); for (sfb = 0; sfb < gi->sfbmax; sfb++) { int const width = gi->width[sfb]; assert(width >= 0); if (!gfc->sv_qnt.pseudohalf[sfb]) { j += width; } else { int k; for (k = j, j += width; k < j; ++k) { ix[k] = (xr[k] >= roundfac) ? ix[k] : 0; } } } } return noquant_count_bits(gfc, gi, prev_noise); } /*********************************************************************** re-calculate the best scalefac_compress using scfsi the saved bits are kept in the bit reservoir. **********************************************************************/ inline static void recalc_divide_init(const lame_internal_flags * const gfc, gr_info const *cod_info, int const *const ix, int r01_bits[], int r01_div[], int r0_tbl[], int r1_tbl[]) { int r0, r1, bigv, r0t, r1t, bits; bigv = cod_info->big_values; for (r0 = 0; r0 <= 7 + 15; r0++) { r01_bits[r0] = LARGE_BITS; } for (r0 = 0; r0 < 16; r0++) { int const a1 = gfc->scalefac_band.l[r0 + 1]; int r0bits; if (a1 >= bigv) break; r0bits = 0; r0t = gfc->choose_table(ix, ix + a1, &r0bits); for (r1 = 0; r1 < 8; r1++) { int const a2 = gfc->scalefac_band.l[r0 + r1 + 2]; if (a2 >= bigv) break; bits = r0bits; r1t = gfc->choose_table(ix + a1, ix + a2, &bits); if (r01_bits[r0 + r1] > bits) { r01_bits[r0 + r1] = bits; r01_div[r0 + r1] = r0; r0_tbl[r0 + r1] = r0t; r1_tbl[r0 + r1] = r1t; } } } } inline static void recalc_divide_sub(const lame_internal_flags * const gfc, const gr_info * cod_info2, gr_info * const gi, const int *const ix, const int r01_bits[], const int r01_div[], const int r0_tbl[], const int r1_tbl[]) { int bits, r2, a2, bigv, r2t; bigv = cod_info2->big_values; for (r2 = 2; r2 < SBMAX_l + 1; r2++) { a2 = gfc->scalefac_band.l[r2]; if (a2 >= bigv) break; bits = r01_bits[r2 - 2] + cod_info2->count1bits; if (gi->part2_3_length <= bits) break; r2t = gfc->choose_table(ix + a2, ix + bigv, &bits); if (gi->part2_3_length <= bits) continue; memcpy(gi, cod_info2, sizeof(gr_info)); gi->part2_3_length = bits; gi->region0_count = r01_div[r2 - 2]; gi->region1_count = r2 - 2 - r01_div[r2 - 2]; gi->table_select[0] = r0_tbl[r2 - 2]; gi->table_select[1] = r1_tbl[r2 - 2]; gi->table_select[2] = r2t; } } void best_huffman_divide(const lame_internal_flags * const gfc, gr_info * const gi) { SessionConfig_t const *const cfg = &gfc->cfg; int i, a1, a2; gr_info cod_info2; int const *const ix = gi->l3_enc; int r01_bits[7 + 15 + 1]; int r01_div[7 + 15 + 1]; int r0_tbl[7 + 15 + 1]; int r1_tbl[7 + 15 + 1]; /* SHORT BLOCK stuff fails for MPEG2 */ if (gi->block_type == SHORT_TYPE && cfg->mode_gr == 1) return; memcpy(&cod_info2, gi, sizeof(gr_info)); if (gi->block_type == NORM_TYPE) { recalc_divide_init(gfc, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); recalc_divide_sub(gfc, &cod_info2, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); } i = cod_info2.big_values; if (i == 0 || (unsigned int) (ix[i - 2] | ix[i - 1]) > 1) return; i = gi->count1 + 2; if (i > 576) return; /* Determines the number of bits to encode the quadruples. */ memcpy(&cod_info2, gi, sizeof(gr_info)); cod_info2.count1 = i; a1 = a2 = 0; assert(i <= 576); for (; i > cod_info2.big_values; i -= 4) { int const p = ((ix[i - 4] * 2 + ix[i - 3]) * 2 + ix[i - 2]) * 2 + ix[i - 1]; a1 += t32l[p]; a2 += t33l[p]; } cod_info2.big_values = i; cod_info2.count1table_select = 0; if (a1 > a2) { a1 = a2; cod_info2.count1table_select = 1; } cod_info2.count1bits = a1; if (cod_info2.block_type == NORM_TYPE) recalc_divide_sub(gfc, &cod_info2, gi, ix, r01_bits, r01_div, r0_tbl, r1_tbl); else { /* Count the number of bits necessary to code the bigvalues region. */ cod_info2.part2_3_length = a1; a1 = gfc->scalefac_band.l[7 + 1]; if (a1 > i) { a1 = i; } if (a1 > 0) cod_info2.table_select[0] = gfc->choose_table(ix, ix + a1, (int *) &cod_info2.part2_3_length); if (i > a1) cod_info2.table_select[1] = gfc->choose_table(ix + a1, ix + i, (int *) &cod_info2.part2_3_length); if (gi->part2_3_length > cod_info2.part2_3_length) memcpy(gi, &cod_info2, sizeof(gr_info)); } } static const int slen1_n[16] = { 1, 1, 1, 1, 8, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16 }; static const int slen2_n[16] = { 1, 2, 4, 8, 1, 2, 4, 8, 2, 4, 8, 2, 4, 8, 4, 8 }; const int slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }; const int slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 }; static void scfsi_calc(int ch, III_side_info_t * l3_side) { unsigned int i; int s1, s2, c1, c2; int sfb; gr_info *const gi = &l3_side->tt[1][ch]; gr_info const *const g0 = &l3_side->tt[0][ch]; for (i = 0; i < (sizeof(scfsi_band) / sizeof(int)) - 1; i++) { for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) { if (g0->scalefac[sfb] != gi->scalefac[sfb] && gi->scalefac[sfb] >= 0) break; } if (sfb == scfsi_band[i + 1]) { for (sfb = scfsi_band[i]; sfb < scfsi_band[i + 1]; sfb++) { gi->scalefac[sfb] = -1; } l3_side->scfsi[ch][i] = 1; } } s1 = c1 = 0; for (sfb = 0; sfb < 11; sfb++) { if (gi->scalefac[sfb] == -1) continue; c1++; if (s1 < gi->scalefac[sfb]) s1 = gi->scalefac[sfb]; } s2 = c2 = 0; for (; sfb < SBPSY_l; sfb++) { if (gi->scalefac[sfb] == -1) continue; c2++; if (s2 < gi->scalefac[sfb]) s2 = gi->scalefac[sfb]; } for (i = 0; i < 16; i++) { if (s1 < slen1_n[i] && s2 < slen2_n[i]) { int const c = slen1_tab[i] * c1 + slen2_tab[i] * c2; if (gi->part2_length > c) { gi->part2_length = c; gi->scalefac_compress = (int)i; } } } } /* Find the optimal way to store the scalefactors. Only call this routine after final scalefactors have been chosen and the channel/granule will not be re-encoded. */ void best_scalefac_store(const lame_internal_flags * gfc, const int gr, const int ch, III_side_info_t * const l3_side) { SessionConfig_t const *const cfg = &gfc->cfg; /* use scalefac_scale if we can */ gr_info *const gi = &l3_side->tt[gr][ch]; int sfb, i, j, l; int recalc = 0; /* remove scalefacs from bands with ix=0. This idea comes * from the AAC ISO docs. added mt 3/00 */ /* check if l3_enc=0 */ j = 0; for (sfb = 0; sfb < gi->sfbmax; sfb++) { int const width = gi->width[sfb]; assert(width >= 0); for (l = j, j += width; l < j; ++l) { if (gi->l3_enc[l] != 0) break; } if (l == j) gi->scalefac[sfb] = recalc = -2; /* anything goes. */ /* only best_scalefac_store and calc_scfsi * know--and only they should know--about the magic number -2. */ } if (!gi->scalefac_scale && !gi->preflag) { int s = 0; for (sfb = 0; sfb < gi->sfbmax; sfb++) if (gi->scalefac[sfb] > 0) s |= gi->scalefac[sfb]; if (!(s & 1) && s != 0) { for (sfb = 0; sfb < gi->sfbmax; sfb++) if (gi->scalefac[sfb] > 0) gi->scalefac[sfb] >>= 1; gi->scalefac_scale = recalc = 1; } } if (!gi->preflag && gi->block_type != SHORT_TYPE && cfg->mode_gr == 2) { for (sfb = 11; sfb < SBPSY_l; sfb++) if (gi->scalefac[sfb] < pretab[sfb] && gi->scalefac[sfb] != -2) break; if (sfb == SBPSY_l) { for (sfb = 11; sfb < SBPSY_l; sfb++) if (gi->scalefac[sfb] > 0) gi->scalefac[sfb] -= pretab[sfb]; gi->preflag = recalc = 1; } } for (i = 0; i < 4; i++) l3_side->scfsi[ch][i] = 0; if (cfg->mode_gr == 2 && gr == 1 && l3_side->tt[0][ch].block_type != SHORT_TYPE && l3_side->tt[1][ch].block_type != SHORT_TYPE) { scfsi_calc(ch, l3_side); recalc = 0; } for (sfb = 0; sfb < gi->sfbmax; sfb++) { if (gi->scalefac[sfb] == -2) { gi->scalefac[sfb] = 0; /* if anything goes, then 0 is a good choice */ } } if (recalc) { (void) scale_bitcount(gfc, gi); } } #ifndef NDEBUG static int all_scalefactors_not_negative(int const *scalefac, int n) { int i; for (i = 0; i < n; ++i) { if (scalefac[i] < 0) return 0; } return 1; } #endif /* number of bits used to encode scalefacs */ /* 18*slen1_tab[i] + 18*slen2_tab[i] */ static const int scale_short[16] = { 0, 18, 36, 54, 54, 36, 54, 72, 54, 72, 90, 72, 90, 108, 108, 126 }; /* 17*slen1_tab[i] + 18*slen2_tab[i] */ static const int scale_mixed[16] = { 0, 18, 36, 54, 51, 35, 53, 71, 52, 70, 88, 69, 87, 105, 104, 122 }; /* 11*slen1_tab[i] + 10*slen2_tab[i] */ static const int scale_long[16] = { 0, 10, 20, 30, 33, 21, 31, 41, 32, 42, 52, 43, 53, 63, 64, 74 }; /*************************************************************************/ /* scale_bitcount */ /*************************************************************************/ /* Also calculates the number of bits necessary to code the scalefactors. */ static int mpeg1_scale_bitcount(const lame_internal_flags * gfc, gr_info * const cod_info) { int k, sfb, max_slen1 = 0, max_slen2 = 0; /* maximum values */ const int *tab; int *const scalefac = cod_info->scalefac; (void) gfc; assert(all_scalefactors_not_negative(scalefac, cod_info->sfbmax)); if (cod_info->block_type == SHORT_TYPE) { tab = scale_short; if (cod_info->mixed_block_flag) tab = scale_mixed; } else { /* block_type == 1,2,or 3 */ tab = scale_long; if (!cod_info->preflag) { for (sfb = 11; sfb < SBPSY_l; sfb++) if (scalefac[sfb] < pretab[sfb]) break; if (sfb == SBPSY_l) { cod_info->preflag = 1; for (sfb = 11; sfb < SBPSY_l; sfb++) scalefac[sfb] -= pretab[sfb]; } } } for (sfb = 0; sfb < cod_info->sfbdivide; sfb++) if (max_slen1 < scalefac[sfb]) max_slen1 = scalefac[sfb]; for (; sfb < cod_info->sfbmax; sfb++) if (max_slen2 < scalefac[sfb]) max_slen2 = scalefac[sfb]; /* from Takehiro TOMINAGA <tominaga@isoternet.org> 10/99 * loop over *all* posible values of scalefac_compress to find the * one which uses the smallest number of bits. ISO would stop * at first valid index */ cod_info->part2_length = LARGE_BITS; for (k = 0; k < 16; k++) { if (max_slen1 < slen1_n[k] && max_slen2 < slen2_n[k] && cod_info->part2_length > tab[k]) { cod_info->part2_length = tab[k]; cod_info->scalefac_compress = k; } } return cod_info->part2_length == LARGE_BITS; } /* table of largest scalefactor values for MPEG2 */ static const int max_range_sfac_tab[6][4] = { {15, 15, 7, 7}, {15, 15, 7, 0}, {7, 3, 0, 0}, {15, 31, 31, 0}, {7, 7, 7, 0}, {3, 3, 0, 0} }; /*************************************************************************/ /* scale_bitcount_lsf */ /*************************************************************************/ /* Also counts the number of bits to encode the scalefacs but for MPEG 2 */ /* Lower sampling frequencies (24, 22.05 and 16 kHz.) */ /* This is reverse-engineered from section 2.4.3.2 of the MPEG2 IS, */ /* "Audio Decoding Layer III" */ static int mpeg2_scale_bitcount(const lame_internal_flags * gfc, gr_info * const cod_info) { int table_number, row_in_table, partition, nr_sfb, window, over; int i, sfb, max_sfac[4]; const int *partition_table; int const *const scalefac = cod_info->scalefac; /* Set partition table. Note that should try to use table one, but do not yet... */ if (cod_info->preflag) table_number = 2; else table_number = 0; for (i = 0; i < 4; i++) max_sfac[i] = 0; if (cod_info->block_type == SHORT_TYPE) { row_in_table = 1; partition_table = &nr_of_sfb_block[table_number][row_in_table][0]; for (sfb = 0, partition = 0; partition < 4; partition++) { nr_sfb = partition_table[partition] / 3; for (i = 0; i < nr_sfb; i++, sfb++) for (window = 0; window < 3; window++) if (scalefac[sfb * 3 + window] > max_sfac[partition]) max_sfac[partition] = scalefac[sfb * 3 + window]; } } else { row_in_table = 0; partition_table = &nr_of_sfb_block[table_number][row_in_table][0]; for (sfb = 0, partition = 0; partition < 4; partition++) { nr_sfb = partition_table[partition]; for (i = 0; i < nr_sfb; i++, sfb++) if (scalefac[sfb] > max_sfac[partition]) max_sfac[partition] = scalefac[sfb]; } } for (over = 0, partition = 0; partition < 4; partition++) { if (max_sfac[partition] > max_range_sfac_tab[table_number][partition]) over++; } if (!over) { /* Since no bands have been over-amplified, we can set scalefac_compress and slen[] for the formatter */ static const int log2tab[] = { 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4 }; int slen1, slen2, slen3, slen4; cod_info->sfb_partition_table = nr_of_sfb_block[table_number][row_in_table]; for (partition = 0; partition < 4; partition++) cod_info->slen[partition] = log2tab[max_sfac[partition]]; /* set scalefac_compress */ slen1 = cod_info->slen[0]; slen2 = cod_info->slen[1]; slen3 = cod_info->slen[2]; slen4 = cod_info->slen[3]; switch (table_number) { case 0: cod_info->scalefac_compress = (((slen1 * 5) + slen2) << 4) + (slen3 << 2) + slen4; break; case 1: cod_info->scalefac_compress = 400 + (((slen1 * 5) + slen2) << 2) + slen3; break; case 2: cod_info->scalefac_compress = 500 + (slen1 * 3) + slen2; break; default: ERRORF(gfc, "intensity stereo not implemented yet\n"); break; } } #ifdef DEBUG if (over) ERRORF(gfc, "---WARNING !! Amplification of some bands over limits\n"); #endif if (!over) { assert(cod_info->sfb_partition_table); cod_info->part2_length = 0; for (partition = 0; partition < 4; partition++) cod_info->part2_length += cod_info->slen[partition] * cod_info->sfb_partition_table[partition]; } return over; } int scale_bitcount(const lame_internal_flags * gfc, gr_info * cod_info) { if (gfc->cfg.mode_gr == 2) { return mpeg1_scale_bitcount(gfc, cod_info); } else { return mpeg2_scale_bitcount(gfc, cod_info); } } #ifdef MMX_choose_table extern int choose_table_MMX(const int *ix, const int *const end, int *const s); #endif void huffman_init(lame_internal_flags * const gfc) { int i; gfc->choose_table = choose_table_nonMMX; #ifdef MMX_choose_table if (gfc->CPU_features.MMX) { gfc->choose_table = choose_table_MMX; } #endif for (i = 2; i <= 576; i += 2) { int scfb_anz = 0, bv_index; while (gfc->scalefac_band.l[++scfb_anz] < i); bv_index = subdv_table[scfb_anz].region0_count; while (gfc->scalefac_band.l[bv_index + 1] > i) bv_index--; if (bv_index < 0) { /* this is an indication that everything is going to be encoded as region0: bigvalues < region0 < region1 so lets set region0, region1 to some value larger than bigvalues */ bv_index = subdv_table[scfb_anz].region0_count; } gfc->sv_qnt.bv_scf[i - 2] = bv_index; bv_index = subdv_table[scfb_anz].region1_count; while (gfc->scalefac_band.l[bv_index + gfc->sv_qnt.bv_scf[i - 2] + 2] > i) bv_index--; if (bv_index < 0) { bv_index = subdv_table[scfb_anz].region1_count; } gfc->sv_qnt.bv_scf[i - 1] = bv_index; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/set_get.h���������������������������������������������������������������������000644 �001751 �001751 �00000005033 11561266675 017733� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * set_get.h -- Internal set/get definitions * * Copyright (C) 2003 Gabriel Bouvigne / Lame project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __SET_GET_H__ #define __SET_GET_H__ #include <lame.h> #if defined(__cplusplus) extern "C" { #endif /* select psychoacoustic model */ /* manage short blocks */ int CDECL lame_set_short_threshold(lame_global_flags *, float, float); int CDECL lame_set_short_threshold_lrm(lame_global_flags *, float); float CDECL lame_get_short_threshold_lrm(const lame_global_flags *); int CDECL lame_set_short_threshold_s(lame_global_flags *, float); float CDECL lame_get_short_threshold_s(const lame_global_flags *); int CDECL lame_set_maskingadjust(lame_global_flags *, float); float CDECL lame_get_maskingadjust(const lame_global_flags *); int CDECL lame_set_maskingadjust_short(lame_global_flags *, float); float CDECL lame_get_maskingadjust_short(const lame_global_flags *); /* select ATH formula 4 shape */ int CDECL lame_set_ATHcurve(lame_global_flags *, float); float CDECL lame_get_ATHcurve(const lame_global_flags *); int CDECL lame_set_preset_notune(lame_global_flags *, int); /* substep shaping method */ int CDECL lame_set_substep(lame_global_flags *, int); int CDECL lame_get_substep(const lame_global_flags *); /* scalefactors scale */ int CDECL lame_set_sfscale(lame_global_flags *, int); int CDECL lame_get_sfscale(const lame_global_flags *); /* subblock gain */ int CDECL lame_set_subblock_gain(lame_global_flags *, int); int CDECL lame_get_subblock_gain(const lame_global_flags *); /*presets*/ int apply_preset(lame_global_flags *, int preset, int enforce); void CDECL lame_set_tune(lame_t, float); /* FOR INTERNAL USE ONLY */ void CDECL lame_set_msfix(lame_t gfp, double msfix); #if defined(__cplusplus) } #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/depcomp�����������������������������������������������������������������������000755 �001751 �001751 �00000056017 13126231407 017475� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/lameerror.h�������������������������������������������������������������������000644 �001751 �001751 �00000001175 10444371224 020256� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * A collection of LAME Error Codes * * Please use the constants defined here instead of some arbitrary * values. Currently the values starting at -10 to avoid intersection * with the -1, -2, -3 and -4 used in the current code. * * May be this should be a part of the include/lame.h. */ typedef enum { LAME_OKAY = 0, LAME_NOERROR = 0, LAME_GENERICERROR = -1, LAME_NOMEM = -10, LAME_BADBITRATE = -11, LAME_BADSAMPFREQ = -12, LAME_INTERNALERROR = -13, FRONTEND_READERROR = -80, FRONTEND_WRITEERROR = -81, FRONTEND_FILETOOLARGE = -82, } lame_errorcodes_t; /* end of lameerror.h */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/psymodel.c��������������������������������������������������������������������000644 �001751 �001751 �00000212501 13154047257 020121� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * psymodel.c * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 2001-2002 Naoki Shibata * Copyright (c) 2000-2003 Takehiro Tominaga * Copyright (c) 2000-2012 Robert Hegemann * Copyright (c) 2000-2005 Gabriel Bouvigne * Copyright (c) 2000-2005 Alexander Leidinger * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: psymodel.c,v 1.216 2017/09/06 19:38:23 aleidinger Exp $ */ /* PSYCHO ACOUSTICS This routine computes the psycho acoustics, delayed by one granule. Input: buffer of PCM data (1024 samples). This window should be centered over the 576 sample granule window. The routine will compute the psycho acoustics for this granule, but return the psycho acoustics computed for the *previous* granule. This is because the block type of the previous granule can only be determined after we have computed the psycho acoustics for the following granule. Output: maskings and energies for each scalefactor band. block type, PE, and some correlation measures. The PE is used by CBR modes to determine if extra bits from the bit reservoir should be used. The correlation measures are used to determine mid/side or regular stereo. */ /* Notation: barks: a non-linear frequency scale. Mapping from frequency to barks is given by freq2bark() scalefactor bands: The spectrum (frequencies) are broken into SBMAX "scalefactor bands". Thes bands are determined by the MPEG ISO spec. In the noise shaping/quantization code, we allocate bits among the partition bands to achieve the best possible quality partition bands: The spectrum is also broken into about 64 "partition bands". Each partition band is about .34 barks wide. There are about 2-5 partition bands for each scalefactor band. LAME computes all psycho acoustic information for each partition band. Then at the end of the computations, this information is mapped to scalefactor bands. The energy in each scalefactor band is taken as the sum of the energy in all partition bands which overlap the scalefactor band. The maskings can be computed in the same way (and thus represent the average masking in that band) or by taking the minmum value multiplied by the number of partition bands used (which represents a minimum masking in that band). */ /* The general outline is as follows: 1. compute the energy in each partition band 2. compute the tonality in each partition band 3. compute the strength of each partion band "masker" 4. compute the masking (via the spreading function applied to each masker) 5. Modifications for mid/side masking. Each partition band is considiered a "masker". The strength of the i'th masker in band j is given by: s3(bark(i)-bark(j))*strength(i) The strength of the masker is a function of the energy and tonality. The more tonal, the less masking. LAME uses a simple linear formula (controlled by NMT and TMN) which says the strength is given by the energy divided by a linear function of the tonality. */ /* s3() is the "spreading function". It is given by a formula determined via listening tests. The total masking in the j'th partition band is the sum over all maskings i. It is thus given by the convolution of the strength with s3(), the "spreading function." masking(j) = sum_over_i s3(i-j)*strength(i) = s3 o strength where "o" = convolution operator. s3 is given by a formula determined via listening tests. It is normalized so that s3 o 1 = 1. Note: instead of a simple convolution, LAME also has the option of using "additive masking" The most critical part is step 2, computing the tonality of each partition band. LAME has two tonality estimators. The first is based on the ISO spec, and measures how predictiable the signal is over time. The more predictable, the more tonal. The second measure is based on looking at the spectrum of a single granule. The more peaky the spectrum, the more tonal. By most indications, the latter approach is better. Finally, in step 5, the maskings for the mid and side channel are possibly increased. Under certain circumstances, noise in the mid & side channels is assumed to also be masked by strong maskers in the L or R channels. Other data computed by the psy-model: ms_ratio side-channel / mid-channel masking ratio (for previous granule) ms_ratio_next side-channel / mid-channel masking ratio for this granule percep_entropy[2] L and R values (prev granule) of PE - A measure of how much pre-echo is in the previous granule percep_entropy_MS[2] mid and side channel values (prev granule) of percep_entropy energy[4] L,R,M,S energy in each channel, prev granule blocktype_d[2] block type to use for previous granule */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <float.h> #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "psymodel.h" #include "lame_global_flags.h" #include "fft.h" #include "lame-analysis.h" #define NSFIRLEN 21 #ifdef M_LN10 #define LN_TO_LOG10 (M_LN10/10) #else #define LN_TO_LOG10 0.2302585093 #endif /* L3psycho_anal. Compute psycho acoustics. Data returned to the calling program must be delayed by one granule. This is done in two places. If we do not need to know the blocktype, the copying can be done here at the top of the program: we copy the data for the last granule (computed during the last call) before it is overwritten with the new data. It looks like this: 0. static psymodel_data 1. calling_program_data = psymodel_data 2. compute psymodel_data For data which needs to know the blocktype, the copying must be done at the end of this loop, and the old values must be saved: 0. static psymodel_data_old 1. compute psymodel_data 2. compute possible block type of this granule 3. compute final block type of previous granule based on #2. 4. calling_program_data = psymodel_data_old 5. psymodel_data_old = psymodel_data */ /* psycho_loudness_approx jd - 2001 mar 12 in: energy - BLKSIZE/2 elements of frequency magnitudes ^ 2 gfp - uses out_samplerate, ATHtype (also needed for ATHformula) returns: loudness^2 approximation, a positive value roughly tuned for a value of 1.0 for signals near clipping. notes: When calibrated, feeding this function binary white noise at sample values +32767 or -32768 should return values that approach 3. ATHformula is used to approximate an equal loudness curve. future: Data indicates that the shape of the equal loudness curve varies with intensity. This function might be improved by using an equal loudness curve shaped for typical playback levels (instead of the ATH, that is shaped for the threshold). A flexible realization might simply bend the existing ATH curve to achieve the desired shape. However, the potential gain may not be enough to justify an effort. */ static FLOAT psycho_loudness_approx(FLOAT const *energy, FLOAT const *eql_w) { int i; FLOAT loudness_power; loudness_power = 0.0; /* apply weights to power in freq. bands */ for (i = 0; i < BLKSIZE / 2; ++i) loudness_power += energy[i] * eql_w[i]; loudness_power *= VO_SCALE; return loudness_power; } /* mask_add optimization */ /* init the limit values used to avoid computing log in mask_add when it is not necessary */ /* For example, with i = 10*log10(m2/m1)/10*16 (= log10(m2/m1)*16) * * abs(i)>8 is equivalent (as i is an integer) to * abs(i)>=9 * i>=9 || i<=-9 * equivalent to (as i is the biggest integer smaller than log10(m2/m1)*16 * or the smallest integer bigger than log10(m2/m1)*16 depending on the sign of log10(m2/m1)*16) * log10(m2/m1)>=9/16 || log10(m2/m1)<=-9/16 * exp10 is strictly increasing thus this is equivalent to * m2/m1 >= 10^(9/16) || m2/m1<=10^(-9/16) which are comparisons to constants */ #define I1LIMIT 8 /* as in if(i>8) */ #define I2LIMIT 23 /* as in if(i>24) -> changed 23 */ #define MLIMIT 15 /* as in if(m<15) */ /* pow(10, (I1LIMIT + 1) / 16.0); */ static const FLOAT ma_max_i1 = 3.6517412725483771; /* pow(10, (I2LIMIT + 1) / 16.0); */ static const FLOAT ma_max_i2 = 31.622776601683793; /* pow(10, (MLIMIT) / 10.0); */ static const FLOAT ma_max_m = 31.622776601683793; /*This is the masking table: According to tonality, values are going from 0dB (TMN) to 9.3dB (NMT). After additive masking computation, 8dB are added, so final values are going from 8dB to 17.3dB */ static const FLOAT tab[] = { 1.0 /*pow(10, -0) */ , 0.79433 /*pow(10, -0.1) */ , 0.63096 /*pow(10, -0.2) */ , 0.63096 /*pow(10, -0.2) */ , 0.63096 /*pow(10, -0.2) */ , 0.63096 /*pow(10, -0.2) */ , 0.63096 /*pow(10, -0.2) */ , 0.25119 /*pow(10, -0.6) */ , 0.11749 /*pow(10, -0.93) */ }; static const int tab_mask_add_delta[] = { 2, 2, 2, 1, 1, 1, 0, 0, -1 }; #define STATIC_ASSERT_EQUAL_DIMENSION(A,B) enum{static_assert_##A=1/((dimension_of(A) == dimension_of(B))?1:0)} inline static int mask_add_delta(int i) { STATIC_ASSERT_EQUAL_DIMENSION(tab_mask_add_delta,tab); assert(i < (int)dimension_of(tab)); return tab_mask_add_delta[i]; } static void init_mask_add_max_values(void) { #ifndef NDEBUG FLOAT const _ma_max_i1 = pow(10, (I1LIMIT + 1) / 16.0); FLOAT const _ma_max_i2 = pow(10, (I2LIMIT + 1) / 16.0); FLOAT const _ma_max_m = pow(10, (MLIMIT) / 10.0); assert(fabs(ma_max_i1 - _ma_max_i1) <= FLT_EPSILON); assert(fabs(ma_max_i2 - _ma_max_i2) <= FLT_EPSILON); assert(fabs(ma_max_m - _ma_max_m ) <= FLT_EPSILON); #endif } /* addition of simultaneous masking Naoki Shibata 2000/7 */ inline static FLOAT vbrpsy_mask_add(FLOAT m1, FLOAT m2, int b, int delta) { static const FLOAT table2[] = { 1.33352 * 1.33352, 1.35879 * 1.35879, 1.38454 * 1.38454, 1.39497 * 1.39497, 1.40548 * 1.40548, 1.3537 * 1.3537, 1.30382 * 1.30382, 1.22321 * 1.22321, 1.14758 * 1.14758, 1 }; FLOAT ratio; if (m1 < 0) { m1 = 0; } if (m2 < 0) { m2 = 0; } if (m1 <= 0) { return m2; } if (m2 <= 0) { return m1; } if (m2 > m1) { ratio = m2 / m1; } else { ratio = m1 / m2; } if (abs(b) <= delta) { /* approximately, 1 bark = 3 partitions */ /* originally 'if(i > 8)' */ if (ratio >= ma_max_i1) { return m1 + m2; } else { int i = (int) (FAST_LOG10_X(ratio, 16.0f)); return (m1 + m2) * table2[i]; } } if (ratio < ma_max_i2) { return m1 + m2; } if (m1 < m2) { m1 = m2; } return m1; } /* short block threshold calculation (part 2) partition band bo_s[sfb] is at the transition from scalefactor band sfb to the next one sfb+1; enn and thmm have to be split between them */ static void convert_partition2scalefac(PsyConst_CB2SB_t const *const gd, FLOAT const *eb, FLOAT const *thr, FLOAT enn_out[], FLOAT thm_out[]) { FLOAT enn, thmm; int sb, b, n = gd->n_sb; enn = thmm = 0.0f; for (sb = b = 0; sb < n; ++b, ++sb) { int const bo_sb = gd->bo[sb]; int const npart = gd->npart; int const b_lim = bo_sb < npart ? bo_sb : npart; while (b < b_lim) { assert(eb[b] >= 0); /* iff failed, it may indicate some index error elsewhere */ assert(thr[b] >= 0); enn += eb[b]; thmm += thr[b]; b++; } if (b >= npart) { enn_out[sb] = enn; thm_out[sb] = thmm; ++sb; break; } assert(eb[b] >= 0); /* iff failed, it may indicate some index error elsewhere */ assert(thr[b] >= 0); { /* at transition sfb -> sfb+1 */ FLOAT const w_curr = gd->bo_weight[sb]; FLOAT const w_next = 1.0f - w_curr; enn += w_curr * eb[b]; thmm += w_curr * thr[b]; enn_out[sb] = enn; thm_out[sb] = thmm; enn = w_next * eb[b]; thmm = w_next * thr[b]; } } /* zero initialize the rest */ for (; sb < n; ++sb) { enn_out[sb] = 0; thm_out[sb] = 0; } } static void convert_partition2scalefac_s(lame_internal_flags * gfc, FLOAT const *eb, FLOAT const *thr, int chn, int sblock) { PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gds = &gfc->cd_psy->s; FLOAT enn[SBMAX_s], thm[SBMAX_s]; int sb; convert_partition2scalefac(gds, eb, thr, enn, thm); for (sb = 0; sb < SBMAX_s; ++sb) { psv->en[chn].s[sb][sblock] = enn[sb]; psv->thm[chn].s[sb][sblock] = thm[sb]; } } /* longblock threshold calculation (part 2) */ static void convert_partition2scalefac_l(lame_internal_flags * gfc, FLOAT const *eb, FLOAT const *thr, int chn) { PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gdl = &gfc->cd_psy->l; FLOAT *enn = &psv->en[chn].l[0]; FLOAT *thm = &psv->thm[chn].l[0]; convert_partition2scalefac(gdl, eb, thr, enn, thm); } static void convert_partition2scalefac_l_to_s(lame_internal_flags * gfc, FLOAT const *eb, FLOAT const *thr, int chn) { PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gds = &gfc->cd_psy->l_to_s; FLOAT enn[SBMAX_s], thm[SBMAX_s]; int sb, sblock; convert_partition2scalefac(gds, eb, thr, enn, thm); for (sb = 0; sb < SBMAX_s; ++sb) { FLOAT const scale = 1. / 64.f; FLOAT const tmp_enn = enn[sb]; FLOAT const tmp_thm = thm[sb] * scale; for (sblock = 0; sblock < 3; ++sblock) { psv->en[chn].s[sb][sblock] = tmp_enn; psv->thm[chn].s[sb][sblock] = tmp_thm; } } } static inline FLOAT NS_INTERP(FLOAT x, FLOAT y, FLOAT r) { /* was pow((x),(r))*pow((y),1-(r)) */ if (r >= 1.0f) return x; /* 99.7% of the time */ if (r <= 0.0f) return y; if (y > 0.0f) return powf(x / y, r) * y; /* rest of the time */ return 0.0f; /* never happens */ } static FLOAT pecalc_s(III_psy_ratio const *mr, FLOAT masking_lower) { FLOAT pe_s; static const FLOAT regcoef_s[] = { 11.8, /* these values are tuned only for 44.1kHz... */ 13.6, 17.2, 32, 46.5, 51.3, 57.5, 67.1, 71.5, 84.6, 97.6, 130, /* 255.8 */ }; unsigned int sb, sblock; pe_s = 1236.28f / 4; for (sb = 0; sb < SBMAX_s - 1; sb++) { for (sblock = 0; sblock < 3; sblock++) { FLOAT const thm = mr->thm.s[sb][sblock]; assert(sb < dimension_of(regcoef_s)); if (thm > 0.0f) { FLOAT const x = thm * masking_lower; FLOAT const en = mr->en.s[sb][sblock]; if (en > x) { if (en > x * 1e10f) { pe_s += regcoef_s[sb] * (10.0f * LOG10); } else { assert(x > 0); pe_s += regcoef_s[sb] * FAST_LOG10(en / x); } } } } } return pe_s; } static FLOAT pecalc_l(III_psy_ratio const *mr, FLOAT masking_lower) { FLOAT pe_l; static const FLOAT regcoef_l[] = { 6.8, /* these values are tuned only for 44.1kHz... */ 5.8, 5.8, 6.4, 6.5, 9.9, 12.1, 14.4, 15, 18.9, 21.6, 26.9, 34.2, 40.2, 46.8, 56.5, 60.7, 73.9, 85.7, 93.4, 126.1, /* 241.3 */ }; unsigned int sb; pe_l = 1124.23f / 4; for (sb = 0; sb < SBMAX_l - 1; sb++) { FLOAT const thm = mr->thm.l[sb]; assert(sb < dimension_of(regcoef_l)); if (thm > 0.0f) { FLOAT const x = thm * masking_lower; FLOAT const en = mr->en.l[sb]; if (en > x) { if (en > x * 1e10f) { pe_l += regcoef_l[sb] * (10.0f * LOG10); } else { assert(x > 0); pe_l += regcoef_l[sb] * FAST_LOG10(en / x); } } } } return pe_l; } static void calc_energy(PsyConst_CB2SB_t const *l, FLOAT const *fftenergy, FLOAT * eb, FLOAT * max, FLOAT * avg) { int b, j; for (b = j = 0; b < l->npart; ++b) { FLOAT ebb = 0, m = 0; int i; for (i = 0; i < l->numlines[b]; ++i, ++j) { FLOAT const el = fftenergy[j]; assert(el >= 0); ebb += el; if (m < el) m = el; } eb[b] = ebb; max[b] = m; avg[b] = ebb * l->rnumlines[b]; assert(l->rnumlines[b] >= 0); assert(ebb >= 0); assert(eb[b] >= 0); assert(max[b] >= 0); assert(avg[b] >= 0); } } static void calc_mask_index_l(lame_internal_flags const *gfc, FLOAT const *max, FLOAT const *avg, unsigned char *mask_idx) { PsyConst_CB2SB_t const *const gdl = &gfc->cd_psy->l; FLOAT m, a; int b, k; int const last_tab_entry = sizeof(tab) / sizeof(tab[0]) - 1; b = 0; a = avg[b] + avg[b + 1]; assert(a >= 0); if (a > 0.0f) { m = max[b]; if (m < max[b + 1]) m = max[b + 1]; assert((gdl->numlines[b] + gdl->numlines[b + 1] - 1) > 0); a = 20.0f * (m * 2.0f - a) / (a * (gdl->numlines[b] + gdl->numlines[b + 1] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } for (b = 1; b < gdl->npart - 1; b++) { a = avg[b - 1] + avg[b] + avg[b + 1]; assert(a >= 0); if (a > 0.0f) { m = max[b - 1]; if (m < max[b]) m = max[b]; if (m < max[b + 1]) m = max[b + 1]; assert((gdl->numlines[b - 1] + gdl->numlines[b] + gdl->numlines[b + 1] - 1) > 0); a = 20.0f * (m * 3.0f - a) / (a * (gdl->numlines[b - 1] + gdl->numlines[b] + gdl->numlines[b + 1] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } } assert(b > 0); assert(b == gdl->npart - 1); a = avg[b - 1] + avg[b]; assert(a >= 0); if (a > 0.0f) { m = max[b - 1]; if (m < max[b]) m = max[b]; assert((gdl->numlines[b - 1] + gdl->numlines[b] - 1) > 0); a = 20.0f * (m * 2.0f - a) / (a * (gdl->numlines[b - 1] + gdl->numlines[b] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } assert(b == (gdl->npart - 1)); } static void vbrpsy_compute_fft_l(lame_internal_flags * gfc, const sample_t * const buffer[2], int chn, int gr_out, FLOAT fftenergy[HBLKSIZE], FLOAT(*wsamp_l)[BLKSIZE]) { SessionConfig_t const *const cfg = &gfc->cfg; PsyStateVar_t *psv = &gfc->sv_psy; plotting_data *plt = cfg->analysis ? gfc->pinfo : 0; int j; if (chn < 2) { fft_long(gfc, *wsamp_l, chn, buffer); } else if (chn == 2) { FLOAT const sqrt2_half = SQRT2 * 0.5f; /* FFT data for mid and side channel is derived from L & R */ for (j = BLKSIZE - 1; j >= 0; --j) { FLOAT const l = wsamp_l[0][j]; FLOAT const r = wsamp_l[1][j]; wsamp_l[0][j] = (l + r) * sqrt2_half; wsamp_l[1][j] = (l - r) * sqrt2_half; } } /********************************************************************* * compute energies *********************************************************************/ fftenergy[0] = wsamp_l[0][0]; fftenergy[0] *= fftenergy[0]; for (j = BLKSIZE / 2 - 1; j >= 0; --j) { FLOAT const re = (*wsamp_l)[BLKSIZE / 2 - j]; FLOAT const im = (*wsamp_l)[BLKSIZE / 2 + j]; fftenergy[BLKSIZE / 2 - j] = (re * re + im * im) * 0.5f; } /* total energy */ { FLOAT totalenergy = 0.0f; for (j = 11; j < HBLKSIZE; j++) totalenergy += fftenergy[j]; psv->tot_ener[chn] = totalenergy; } if (plt) { for (j = 0; j < HBLKSIZE; j++) { plt->energy[gr_out][chn][j] = plt->energy_save[chn][j]; plt->energy_save[chn][j] = fftenergy[j]; } } } static void vbrpsy_compute_fft_s(lame_internal_flags const *gfc, const sample_t * const buffer[2], int chn, int sblock, FLOAT(*fftenergy_s)[HBLKSIZE_s], FLOAT(*wsamp_s)[3][BLKSIZE_s]) { int j; if (sblock == 0 && chn < 2) { fft_short(gfc, *wsamp_s, chn, buffer); } if (chn == 2) { FLOAT const sqrt2_half = SQRT2 * 0.5f; /* FFT data for mid and side channel is derived from L & R */ for (j = BLKSIZE_s - 1; j >= 0; --j) { FLOAT const l = wsamp_s[0][sblock][j]; FLOAT const r = wsamp_s[1][sblock][j]; wsamp_s[0][sblock][j] = (l + r) * sqrt2_half; wsamp_s[1][sblock][j] = (l - r) * sqrt2_half; } } /********************************************************************* * compute energies *********************************************************************/ fftenergy_s[sblock][0] = (*wsamp_s)[sblock][0]; fftenergy_s[sblock][0] *= fftenergy_s[sblock][0]; for (j = BLKSIZE_s / 2 - 1; j >= 0; --j) { FLOAT const re = (*wsamp_s)[sblock][BLKSIZE_s / 2 - j]; FLOAT const im = (*wsamp_s)[sblock][BLKSIZE_s / 2 + j]; fftenergy_s[sblock][BLKSIZE_s / 2 - j] = (re * re + im * im) * 0.5f; } } /********************************************************************* * compute loudness approximation (used for ATH auto-level adjustment) *********************************************************************/ static void vbrpsy_compute_loudness_approximation_l(lame_internal_flags * gfc, int gr_out, int chn, const FLOAT fftenergy[HBLKSIZE]) { PsyStateVar_t *psv = &gfc->sv_psy; if (chn < 2) { /*no loudness for mid/side ch */ gfc->ov_psy.loudness_sq[gr_out][chn] = psv->loudness_sq_save[chn]; psv->loudness_sq_save[chn] = psycho_loudness_approx(fftenergy, gfc->ATH->eql_w); } } /********************************************************************** * Apply HPF of fs/4 to the input signal. * This is used for attack detection / handling. **********************************************************************/ static void vbrpsy_attack_detection(lame_internal_flags * gfc, const sample_t * const buffer[2], int gr_out, III_psy_ratio masking_ratio[2][2], III_psy_ratio masking_MS_ratio[2][2], FLOAT energy[4], FLOAT sub_short_factor[4][3], int ns_attacks[4][4], int uselongblock[2]) { FLOAT ns_hpfsmpl[2][576]; SessionConfig_t const *const cfg = &gfc->cfg; PsyStateVar_t *const psv = &gfc->sv_psy; plotting_data *plt = cfg->analysis ? gfc->pinfo : 0; int const n_chn_out = cfg->channels_out; /* chn=2 and 3 = Mid and Side channels */ int const n_chn_psy = (cfg->mode == JOINT_STEREO) ? 4 : n_chn_out; int chn, i, j; memset(&ns_hpfsmpl[0][0], 0, sizeof(ns_hpfsmpl)); /* Don't copy the input buffer into a temporary buffer */ /* unroll the loop 2 times */ for (chn = 0; chn < n_chn_out; chn++) { static const FLOAT fircoef[] = { -8.65163e-18 * 2, -0.00851586 * 2, -6.74764e-18 * 2, 0.0209036 * 2, -3.36639e-17 * 2, -0.0438162 * 2, -1.54175e-17 * 2, 0.0931738 * 2, -5.52212e-17 * 2, -0.313819 * 2 }; /* apply high pass filter of fs/4 */ const sample_t *const firbuf = &buffer[chn][576 - 350 - NSFIRLEN + 192]; assert(dimension_of(fircoef) == ((NSFIRLEN - 1) / 2)); for (i = 0; i < 576; i++) { FLOAT sum1, sum2; sum1 = firbuf[i + 10]; sum2 = 0.0; for (j = 0; j < ((NSFIRLEN - 1) / 2) - 1; j += 2) { sum1 += fircoef[j] * (firbuf[i + j] + firbuf[i + NSFIRLEN - j]); sum2 += fircoef[j + 1] * (firbuf[i + j + 1] + firbuf[i + NSFIRLEN - j - 1]); } ns_hpfsmpl[chn][i] = sum1 + sum2; } masking_ratio[gr_out][chn].en = psv->en[chn]; masking_ratio[gr_out][chn].thm = psv->thm[chn]; if (n_chn_psy > 2) { /* MS maskings */ /*percep_MS_entropy [chn-2] = gfc -> pe [chn]; */ masking_MS_ratio[gr_out][chn].en = psv->en[chn + 2]; masking_MS_ratio[gr_out][chn].thm = psv->thm[chn + 2]; } } for (chn = 0; chn < n_chn_psy; chn++) { FLOAT attack_intensity[12]; FLOAT en_subshort[12]; FLOAT en_short[4] = { 0, 0, 0, 0 }; FLOAT const *pf = ns_hpfsmpl[chn & 1]; int ns_uselongblock = 1; if (chn == 2) { for (i = 0, j = 576; j > 0; ++i, --j) { FLOAT const l = ns_hpfsmpl[0][i]; FLOAT const r = ns_hpfsmpl[1][i]; ns_hpfsmpl[0][i] = l + r; ns_hpfsmpl[1][i] = l - r; } } /*************************************************************** * determine the block type (window type) ***************************************************************/ /* calculate energies of each sub-shortblocks */ for (i = 0; i < 3; i++) { en_subshort[i] = psv->last_en_subshort[chn][i + 6]; assert(psv->last_en_subshort[chn][i + 4] > 0); attack_intensity[i] = en_subshort[i] / psv->last_en_subshort[chn][i + 4]; en_short[0] += en_subshort[i]; } for (i = 0; i < 9; i++) { FLOAT const *const pfe = pf + 576 / 9; FLOAT p = 1.; for (; pf < pfe; pf++) if (p < fabs(*pf)) p = fabs(*pf); psv->last_en_subshort[chn][i] = en_subshort[i + 3] = p; en_short[1 + i / 3] += p; if (p > en_subshort[i + 3 - 2]) { assert(en_subshort[i + 3 - 2] > 0); p = p / en_subshort[i + 3 - 2]; } else if (en_subshort[i + 3 - 2] > p * 10.0f) { assert(p > 0); p = en_subshort[i + 3 - 2] / (p * 10.0f); } else { p = 0.0; } attack_intensity[i + 3] = p; } /* pulse like signal detection for fatboy.wav and so on */ for (i = 0; i < 3; ++i) { FLOAT const enn = en_subshort[i * 3 + 3] + en_subshort[i * 3 + 4] + en_subshort[i * 3 + 5]; FLOAT factor = 1.f; if (en_subshort[i * 3 + 5] * 6 < enn) { factor *= 0.5f; if (en_subshort[i * 3 + 4] * 6 < enn) { factor *= 0.5f; } } sub_short_factor[chn][i] = factor; } if (plt) { FLOAT x = attack_intensity[0]; for (i = 1; i < 12; i++) { if (x < attack_intensity[i]) { x = attack_intensity[i]; } } plt->ers[gr_out][chn] = plt->ers_save[chn]; plt->ers_save[chn] = x; } /* compare energies between sub-shortblocks */ { FLOAT x = gfc->cd_psy->attack_threshold[chn]; for (i = 0; i < 12; i++) { if (ns_attacks[chn][i / 3] == 0) { if (attack_intensity[i] > x) { ns_attacks[chn][i / 3] = (i % 3) + 1; } } } } /* should have energy change between short blocks, in order to avoid periodic signals */ /* Good samples to show the effect are Trumpet test songs */ /* GB: tuned (1) to avoid too many short blocks for test sample TRUMPET */ /* RH: tuned (2) to let enough short blocks through for test sample FSOL and SNAPS */ for (i = 1; i < 4; i++) { FLOAT const u = en_short[i - 1]; FLOAT const v = en_short[i]; FLOAT const m = Max(u, v); if (m < 40000) { /* (2) */ if (u < 1.7f * v && v < 1.7f * u) { /* (1) */ if (i == 1 && ns_attacks[chn][0] <= ns_attacks[chn][i]) { ns_attacks[chn][0] = 0; } ns_attacks[chn][i] = 0; } } } if (ns_attacks[chn][0] <= psv->last_attacks[chn]) { ns_attacks[chn][0] = 0; } if (psv->last_attacks[chn] == 3 || ns_attacks[chn][0] + ns_attacks[chn][1] + ns_attacks[chn][2] + ns_attacks[chn][3]) { ns_uselongblock = 0; if (ns_attacks[chn][1] && ns_attacks[chn][0]) { ns_attacks[chn][1] = 0; } if (ns_attacks[chn][2] && ns_attacks[chn][1]) { ns_attacks[chn][2] = 0; } if (ns_attacks[chn][3] && ns_attacks[chn][2]) { ns_attacks[chn][3] = 0; } } if (chn < 2) { uselongblock[chn] = ns_uselongblock; } else { if (ns_uselongblock == 0) { uselongblock[0] = uselongblock[1] = 0; } } /* there is a one granule delay. Copy maskings computed last call * into masking_ratio to return to calling program. */ energy[chn] = psv->tot_ener[chn]; } } static void vbrpsy_skip_masking_s(lame_internal_flags * gfc, int chn, int sblock) { if (sblock == 0) { FLOAT *nbs2 = &gfc->sv_psy.nb_s2[chn][0]; FLOAT *nbs1 = &gfc->sv_psy.nb_s1[chn][0]; int const n = gfc->cd_psy->s.npart; int b; for (b = 0; b < n; b++) { nbs2[b] = nbs1[b]; } } } static void vbrpsy_calc_mask_index_s(lame_internal_flags const *gfc, FLOAT const *max, FLOAT const *avg, unsigned char *mask_idx) { PsyConst_CB2SB_t const *const gds = &gfc->cd_psy->s; FLOAT m, a; int b, k; int const last_tab_entry = dimension_of(tab) - 1; b = 0; a = avg[b] + avg[b + 1]; assert(a >= 0); if (a > 0.0f) { m = max[b]; if (m < max[b + 1]) m = max[b + 1]; assert((gds->numlines[b] + gds->numlines[b + 1] - 1) > 0); a = 20.0f * (m * 2.0f - a) / (a * (gds->numlines[b] + gds->numlines[b + 1] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } for (b = 1; b < gds->npart - 1; b++) { a = avg[b - 1] + avg[b] + avg[b + 1]; assert(b + 1 < gds->npart); assert(a >= 0); if (a > 0.0) { m = max[b - 1]; if (m < max[b]) m = max[b]; if (m < max[b + 1]) m = max[b + 1]; assert((gds->numlines[b - 1] + gds->numlines[b] + gds->numlines[b + 1] - 1) > 0); a = 20.0f * (m * 3.0f - a) / (a * (gds->numlines[b - 1] + gds->numlines[b] + gds->numlines[b + 1] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } } assert(b > 0); assert(b == gds->npart - 1); a = avg[b - 1] + avg[b]; assert(a >= 0); if (a > 0.0f) { m = max[b - 1]; if (m < max[b]) m = max[b]; assert((gds->numlines[b - 1] + gds->numlines[b] - 1) > 0); a = 20.0f * (m * 2.0f - a) / (a * (gds->numlines[b - 1] + gds->numlines[b] - 1)); k = (int) a; if (k > last_tab_entry) k = last_tab_entry; mask_idx[b] = k; } else { mask_idx[b] = 0; } assert(b == (gds->npart - 1)); } static void vbrpsy_compute_masking_s(lame_internal_flags * gfc, const FLOAT(*fftenergy_s)[HBLKSIZE_s], FLOAT * eb, FLOAT * thr, int chn, int sblock) { PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gds = &gfc->cd_psy->s; FLOAT max[CBANDS], avg[CBANDS]; int i, j, b; unsigned char mask_idx_s[CBANDS]; memset(max, 0, sizeof(max)); memset(avg, 0, sizeof(avg)); for (b = j = 0; b < gds->npart; ++b) { FLOAT ebb = 0, m = 0; int const n = gds->numlines[b]; for (i = 0; i < n; ++i, ++j) { FLOAT const el = fftenergy_s[sblock][j]; ebb += el; if (m < el) m = el; } eb[b] = ebb; assert(ebb >= 0); max[b] = m; assert(n > 0); avg[b] = ebb * gds->rnumlines[b]; assert(avg[b] >= 0); } assert(b == gds->npart); assert(j == 129); vbrpsy_calc_mask_index_s(gfc, max, avg, mask_idx_s); for (j = b = 0; b < gds->npart; b++) { int kk = gds->s3ind[b][0]; int const last = gds->s3ind[b][1]; int const delta = mask_add_delta(mask_idx_s[b]); int dd, dd_n; FLOAT x, ecb, avg_mask; FLOAT const masking_lower = gds->masking_lower[b] * gfc->sv_qnt.masking_lower; dd = mask_idx_s[kk]; dd_n = 1; ecb = gds->s3[j] * eb[kk] * tab[mask_idx_s[kk]]; ++j, ++kk; while (kk <= last) { dd += mask_idx_s[kk]; dd_n += 1; x = gds->s3[j] * eb[kk] * tab[mask_idx_s[kk]]; ecb = vbrpsy_mask_add(ecb, x, kk - b, delta); ++j, ++kk; } dd = (1 + 2 * dd) / (2 * dd_n); avg_mask = tab[dd] * 0.5f; ecb *= avg_mask; #if 0 /* we can do PRE ECHO control now here, or do it later */ if (psv->blocktype_old[chn & 0x01] == SHORT_TYPE) { /* limit calculated threshold by even older granule */ FLOAT const t1 = rpelev_s * psv->nb_s1[chn][b]; FLOAT const t2 = rpelev2_s * psv->nb_s2[chn][b]; FLOAT const tm = (t2 > 0) ? Min(ecb, t2) : ecb; thr[b] = (t1 > 0) ? NS_INTERP(Min(tm, t1), ecb, 0.6) : ecb; } else { /* limit calculated threshold by older granule */ FLOAT const t1 = rpelev_s * psv->nb_s1[chn][b]; thr[b] = (t1 > 0) ? NS_INTERP(Min(ecb, t1), ecb, 0.6) : ecb; } #else /* we do it later */ thr[b] = ecb; #endif psv->nb_s2[chn][b] = psv->nb_s1[chn][b]; psv->nb_s1[chn][b] = ecb; { /* if THR exceeds EB, the quantization routines will take the difference * from other bands. in case of strong tonal samples (tonaltest.wav) * this leads to heavy distortions. that's why we limit THR here. */ x = max[b]; x *= gds->minval[b]; x *= avg_mask; if (thr[b] > x) { thr[b] = x; } } if (masking_lower > 1) { thr[b] *= masking_lower; } if (thr[b] > eb[b]) { thr[b] = eb[b]; } if (masking_lower < 1) { thr[b] *= masking_lower; } assert(thr[b] >= 0); } for (; b < CBANDS; ++b) { eb[b] = 0; thr[b] = 0; } } static void vbrpsy_compute_masking_l(lame_internal_flags * gfc, const FLOAT fftenergy[HBLKSIZE], FLOAT eb_l[CBANDS], FLOAT thr[CBANDS], int chn) { PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gdl = &gfc->cd_psy->l; FLOAT max[CBANDS], avg[CBANDS]; unsigned char mask_idx_l[CBANDS + 2]; int k, b; /********************************************************************* * Calculate the energy and the tonality of each partition. *********************************************************************/ calc_energy(gdl, fftenergy, eb_l, max, avg); calc_mask_index_l(gfc, max, avg, mask_idx_l); /********************************************************************* * convolve the partitioned energy and unpredictability * with the spreading function, s3_l[b][k] ********************************************************************/ k = 0; for (b = 0; b < gdl->npart; b++) { FLOAT x, ecb, avg_mask, t; FLOAT const masking_lower = gdl->masking_lower[b] * gfc->sv_qnt.masking_lower; /* convolve the partitioned energy with the spreading function */ int kk = gdl->s3ind[b][0]; int const last = gdl->s3ind[b][1]; int const delta = mask_add_delta(mask_idx_l[b]); int dd = 0, dd_n = 0; dd = mask_idx_l[kk]; dd_n += 1; ecb = gdl->s3[k] * eb_l[kk] * tab[mask_idx_l[kk]]; ++k, ++kk; while (kk <= last) { dd += mask_idx_l[kk]; dd_n += 1; x = gdl->s3[k] * eb_l[kk] * tab[mask_idx_l[kk]]; t = vbrpsy_mask_add(ecb, x, kk - b, delta); #if 0 ecb += eb_l[kk]; if (ecb > t) { ecb = t; } #else ecb = t; #endif ++k, ++kk; } dd = (1 + 2 * dd) / (2 * dd_n); avg_mask = tab[dd] * 0.5f; ecb *= avg_mask; /**** long block pre-echo control ****/ /* dont use long block pre-echo control if previous granule was * a short block. This is to avoid the situation: * frame0: quiet (very low masking) * frame1: surge (triggers short blocks) * frame2: regular frame. looks like pre-echo when compared to * frame0, but all pre-echo was in frame1. */ /* chn=0,1 L and R channels chn=2,3 S and M channels. */ if (psv->blocktype_old[chn & 0x01] == SHORT_TYPE) { FLOAT const ecb_limit = rpelev * psv->nb_l1[chn][b]; if (ecb_limit > 0) { thr[b] = Min(ecb, ecb_limit); } else { /* Robert 071209: Because we don't calculate long block psy when we know a granule should be of short blocks, we don't have any clue how the granule before would have looked like as a long block. So we have to guess a little bit for this END_TYPE block. Most of the time we get away with this sloppyness. (fingers crossed :) The speed increase is worth it. */ thr[b] = Min(ecb, eb_l[b] * NS_PREECHO_ATT2); } } else { FLOAT ecb_limit_2 = rpelev2 * psv->nb_l2[chn][b]; FLOAT ecb_limit_1 = rpelev * psv->nb_l1[chn][b]; FLOAT ecb_limit; if (ecb_limit_2 <= 0) { ecb_limit_2 = ecb; } if (ecb_limit_1 <= 0) { ecb_limit_1 = ecb; } if (psv->blocktype_old[chn & 0x01] == NORM_TYPE) { ecb_limit = Min(ecb_limit_1, ecb_limit_2); } else { ecb_limit = ecb_limit_1; } thr[b] = Min(ecb, ecb_limit); } psv->nb_l2[chn][b] = psv->nb_l1[chn][b]; psv->nb_l1[chn][b] = ecb; { /* if THR exceeds EB, the quantization routines will take the difference * from other bands. in case of strong tonal samples (tonaltest.wav) * this leads to heavy distortions. that's why we limit THR here. */ x = max[b]; x *= gdl->minval[b]; x *= avg_mask; if (thr[b] > x) { thr[b] = x; } } if (masking_lower > 1) { thr[b] *= masking_lower; } if (thr[b] > eb_l[b]) { thr[b] = eb_l[b]; } if (masking_lower < 1) { thr[b] *= masking_lower; } assert(thr[b] >= 0); } for (; b < CBANDS; ++b) { eb_l[b] = 0; thr[b] = 0; } } static void vbrpsy_compute_block_type(SessionConfig_t const *cfg, int *uselongblock) { int chn; if (cfg->short_blocks == short_block_coupled /* force both channels to use the same block type */ /* this is necessary if the frame is to be encoded in ms_stereo. */ /* But even without ms_stereo, FhG does this */ && !(uselongblock[0] && uselongblock[1])) uselongblock[0] = uselongblock[1] = 0; for (chn = 0; chn < cfg->channels_out; chn++) { /* disable short blocks */ if (cfg->short_blocks == short_block_dispensed) { uselongblock[chn] = 1; } if (cfg->short_blocks == short_block_forced) { uselongblock[chn] = 0; } } } static void vbrpsy_apply_block_type(PsyStateVar_t * psv, int nch, int const *uselongblock, int *blocktype_d) { int chn; /* update the blocktype of the previous granule, since it depends on what * happend in this granule */ for (chn = 0; chn < nch; chn++) { int blocktype = NORM_TYPE; /* disable short blocks */ if (uselongblock[chn]) { /* no attack : use long blocks */ assert(psv->blocktype_old[chn] != START_TYPE); if (psv->blocktype_old[chn] == SHORT_TYPE) blocktype = STOP_TYPE; } else { /* attack : use short blocks */ blocktype = SHORT_TYPE; if (psv->blocktype_old[chn] == NORM_TYPE) { psv->blocktype_old[chn] = START_TYPE; } if (psv->blocktype_old[chn] == STOP_TYPE) psv->blocktype_old[chn] = SHORT_TYPE; } blocktype_d[chn] = psv->blocktype_old[chn]; /* value returned to calling program */ psv->blocktype_old[chn] = blocktype; /* save for next call to l3psy_anal */ } } /*************************************************************** * compute M/S thresholds from Johnston & Ferreira 1992 ICASSP paper ***************************************************************/ static void vbrpsy_compute_MS_thresholds(const FLOAT eb[4][CBANDS], FLOAT thr[4][CBANDS], const FLOAT cb_mld[CBANDS], const FLOAT ath_cb[CBANDS], FLOAT athlower, FLOAT msfix, int n) { FLOAT const msfix2 = msfix * 2.f; FLOAT rside, rmid; int b; for (b = 0; b < n; ++b) { FLOAT const ebM = eb[2][b]; FLOAT const ebS = eb[3][b]; FLOAT const thmL = thr[0][b]; FLOAT const thmR = thr[1][b]; FLOAT thmM = thr[2][b]; FLOAT thmS = thr[3][b]; /* use this fix if L & R masking differs by 2db or less */ /* if db = 10*log10(x2/x1) < 2 */ /* if (x2 < 1.58*x1) { */ if (thmL <= 1.58f * thmR && thmR <= 1.58f * thmL) { FLOAT const mld_m = cb_mld[b] * ebS; FLOAT const mld_s = cb_mld[b] * ebM; FLOAT const tmp_m = Min(thmS, mld_m); FLOAT const tmp_s = Min(thmM, mld_s); rmid = Max(thmM, tmp_m); rside = Max(thmS, tmp_s); } else { rmid = thmM; rside = thmS; } if (msfix > 0.f) { /***************************************************************/ /* Adjust M/S maskings if user set "msfix" */ /***************************************************************/ /* Naoki Shibata 2000 */ FLOAT thmLR, thmMS; FLOAT const ath = ath_cb[b] * athlower; FLOAT const tmp_l = Max(thmL, ath); FLOAT const tmp_r = Max(thmR, ath); thmLR = Min(tmp_l, tmp_r); thmM = Max(rmid, ath); thmS = Max(rside, ath); thmMS = thmM + thmS; if (thmMS > 0.f && (thmLR * msfix2) < thmMS) { FLOAT const f = thmLR * msfix2 / thmMS; thmM *= f; thmS *= f; assert(thmMS > 0.f); } rmid = Min(thmM, rmid); rside = Min(thmS, rside); } if (rmid > ebM) { rmid = ebM; } if (rside > ebS) { rside = ebS; } thr[2][b] = rmid; thr[3][b] = rside; } } /* * NOTE: the bitrate reduction from the inter-channel masking effect is low * compared to the chance of getting annyoing artefacts. L3psycho_anal_vbr does * not use this feature. (Robert 071216) */ int L3psycho_anal_vbr(lame_internal_flags * gfc, const sample_t * const buffer[2], int gr_out, III_psy_ratio masking_ratio[2][2], III_psy_ratio masking_MS_ratio[2][2], FLOAT percep_entropy[2], FLOAT percep_MS_entropy[2], FLOAT energy[4], int blocktype_d[2]) { SessionConfig_t const *const cfg = &gfc->cfg; PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_CB2SB_t const *const gdl = &gfc->cd_psy->l; PsyConst_CB2SB_t const *const gds = &gfc->cd_psy->s; plotting_data *plt = cfg->analysis ? gfc->pinfo : 0; III_psy_xmin last_thm[4]; /* fft and energy calculation */ FLOAT(*wsamp_l)[BLKSIZE]; FLOAT(*wsamp_s)[3][BLKSIZE_s]; FLOAT fftenergy[HBLKSIZE]; FLOAT fftenergy_s[3][HBLKSIZE_s]; FLOAT wsamp_L[2][BLKSIZE]; FLOAT wsamp_S[2][3][BLKSIZE_s]; FLOAT eb[4][CBANDS], thr[4][CBANDS]; FLOAT sub_short_factor[4][3]; FLOAT thmm; FLOAT const pcfact = 0.6f; FLOAT const ath_factor = (cfg->msfix > 0.f) ? (cfg->ATH_offset_factor * gfc->ATH->adjust_factor) : 1.f; const FLOAT(*const_eb)[CBANDS] = (const FLOAT(*)[CBANDS]) eb; const FLOAT(*const_fftenergy_s)[HBLKSIZE_s] = (const FLOAT(*)[HBLKSIZE_s]) fftenergy_s; /* block type */ int ns_attacks[4][4] = { {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} }; int uselongblock[2]; /* usual variables like loop indices, etc.. */ int chn, sb, sblock; /* chn=2 and 3 = Mid and Side channels */ int const n_chn_psy = (cfg->mode == JOINT_STEREO) ? 4 : cfg->channels_out; memcpy(&last_thm[0], &psv->thm[0], sizeof(last_thm)); vbrpsy_attack_detection(gfc, buffer, gr_out, masking_ratio, masking_MS_ratio, energy, sub_short_factor, ns_attacks, uselongblock); vbrpsy_compute_block_type(cfg, uselongblock); /* LONG BLOCK CASE */ { for (chn = 0; chn < n_chn_psy; chn++) { int const ch01 = chn & 0x01; wsamp_l = wsamp_L + ch01; vbrpsy_compute_fft_l(gfc, buffer, chn, gr_out, fftenergy, wsamp_l); vbrpsy_compute_loudness_approximation_l(gfc, gr_out, chn, fftenergy); vbrpsy_compute_masking_l(gfc, fftenergy, eb[chn], thr[chn], chn); } if (cfg->mode == JOINT_STEREO) { if ((uselongblock[0] + uselongblock[1]) == 2) { vbrpsy_compute_MS_thresholds(const_eb, thr, gdl->mld_cb, gfc->ATH->cb_l, ath_factor, cfg->msfix, gdl->npart); } } /* TODO: apply adaptive ATH masking here ?? */ for (chn = 0; chn < n_chn_psy; chn++) { convert_partition2scalefac_l(gfc, eb[chn], thr[chn], chn); convert_partition2scalefac_l_to_s(gfc, eb[chn], thr[chn], chn); } } /* SHORT BLOCKS CASE */ { int const force_short_block_calc = gfc->cd_psy->force_short_block_calc; for (sblock = 0; sblock < 3; sblock++) { for (chn = 0; chn < n_chn_psy; ++chn) { int const ch01 = chn & 0x01; if (uselongblock[ch01] && !force_short_block_calc) { vbrpsy_skip_masking_s(gfc, chn, sblock); } else { /* compute masking thresholds for short blocks */ wsamp_s = wsamp_S + ch01; vbrpsy_compute_fft_s(gfc, buffer, chn, sblock, fftenergy_s, wsamp_s); vbrpsy_compute_masking_s(gfc, const_fftenergy_s, eb[chn], thr[chn], chn, sblock); } } if (cfg->mode == JOINT_STEREO) { if ((uselongblock[0] + uselongblock[1]) == 0) { vbrpsy_compute_MS_thresholds(const_eb, thr, gds->mld_cb, gfc->ATH->cb_s, ath_factor, cfg->msfix, gds->npart); } } /* TODO: apply adaptive ATH masking here ?? */ for (chn = 0; chn < n_chn_psy; ++chn) { int const ch01 = chn & 0x01; if (!uselongblock[ch01] || force_short_block_calc) { convert_partition2scalefac_s(gfc, eb[chn], thr[chn], chn, sblock); } } } /**** short block pre-echo control ****/ for (chn = 0; chn < n_chn_psy; chn++) { for (sb = 0; sb < SBMAX_s; sb++) { FLOAT new_thmm[3], prev_thm, t1, t2; for (sblock = 0; sblock < 3; sblock++) { thmm = psv->thm[chn].s[sb][sblock]; thmm *= NS_PREECHO_ATT0; t1 = t2 = thmm; if (sblock > 0) { prev_thm = new_thmm[sblock - 1]; } else { prev_thm = last_thm[chn].s[sb][2]; } if (ns_attacks[chn][sblock] >= 2 || ns_attacks[chn][sblock + 1] == 1) { t1 = NS_INTERP(prev_thm, thmm, NS_PREECHO_ATT1 * pcfact); } thmm = Min(t1, thmm); if (ns_attacks[chn][sblock] == 1) { t2 = NS_INTERP(prev_thm, thmm, NS_PREECHO_ATT2 * pcfact); } else if ((sblock == 0 && psv->last_attacks[chn] == 3) || (sblock > 0 && ns_attacks[chn][sblock - 1] == 3)) { /* 2nd preceeding block */ switch (sblock) { case 0: prev_thm = last_thm[chn].s[sb][1]; break; case 1: prev_thm = last_thm[chn].s[sb][2]; break; case 2: prev_thm = new_thmm[0]; break; } t2 = NS_INTERP(prev_thm, thmm, NS_PREECHO_ATT2 * pcfact); } thmm = Min(t1, thmm); thmm = Min(t2, thmm); /* pulse like signal detection for fatboy.wav and so on */ thmm *= sub_short_factor[chn][sblock]; new_thmm[sblock] = thmm; } for (sblock = 0; sblock < 3; sblock++) { psv->thm[chn].s[sb][sblock] = new_thmm[sblock]; } } } } for (chn = 0; chn < n_chn_psy; chn++) { psv->last_attacks[chn] = ns_attacks[chn][2]; } /*************************************************************** * determine final block type ***************************************************************/ vbrpsy_apply_block_type(psv, cfg->channels_out, uselongblock, blocktype_d); /********************************************************************* * compute the value of PE to return ... no delay and advance *********************************************************************/ for (chn = 0; chn < n_chn_psy; chn++) { FLOAT *ppe; int type; III_psy_ratio const *mr; if (chn > 1) { ppe = percep_MS_entropy - 2; type = NORM_TYPE; if (blocktype_d[0] == SHORT_TYPE || blocktype_d[1] == SHORT_TYPE) type = SHORT_TYPE; mr = &masking_MS_ratio[gr_out][chn - 2]; } else { ppe = percep_entropy; type = blocktype_d[chn]; mr = &masking_ratio[gr_out][chn]; } if (type == SHORT_TYPE) { ppe[chn] = pecalc_s(mr, gfc->sv_qnt.masking_lower); } else { ppe[chn] = pecalc_l(mr, gfc->sv_qnt.masking_lower); } if (plt) { plt->pe[gr_out][chn] = ppe[chn]; } } return 0; } /* * The spreading function. Values returned in units of energy */ static FLOAT s3_func(FLOAT bark) { FLOAT tempx, x, tempy, temp; tempx = bark; if (tempx >= 0) tempx *= 3; else tempx *= 1.5; if (tempx >= 0.5 && tempx <= 2.5) { temp = tempx - 0.5; x = 8.0 * (temp * temp - 2.0 * temp); } else x = 0.0; tempx += 0.474; tempy = 15.811389 + 7.5 * tempx - 17.5 * sqrt(1.0 + tempx * tempx); if (tempy <= -60.0) return 0.0; tempx = exp((x + tempy) * LN_TO_LOG10); /* Normalization. The spreading function should be normalized so that: +inf / | s3 [ bark ] d(bark) = 1 / -inf */ tempx /= .6609193; return tempx; } #if 0 static FLOAT norm_s3_func(void) { double lim_a = 0, lim_b = 0; double x = 0, l, h; for (x = 0; s3_func(x) > 1e-20; x -= 1); l = x; h = 0; while (fabs(h - l) > 1e-12) { x = (h + l) / 2; if (s3_func(x) > 0) { h = x; } else { l = x; } } lim_a = l; for (x = 0; s3_func(x) > 1e-20; x += 1); l = 0; h = x; while (fabs(h - l) > 1e-12) { x = (h + l) / 2; if (s3_func(x) > 0) { l = x; } else { h = x; } } lim_b = h; { double sum = 0; int const m = 1000; int i; for (i = 0; i <= m; ++i) { double x = lim_a + i * (lim_b - lim_a) / m; double y = s3_func(x); sum += y; } { double norm = (m + 1) / (sum * (lim_b - lim_a)); /*printf( "norm = %lf\n",norm); */ return norm; } } } #endif static FLOAT stereo_demask(double f) { /* setup stereo demasking thresholds */ /* formula reverse enginerred from plot in paper */ double arg = freq2bark(f); arg = (Min(arg, 15.5) / 15.5); return pow(10.0, 1.25 * (1 - cos(PI * arg)) - 2.5); } static void init_numline(PsyConst_CB2SB_t * gd, FLOAT sfreq, int fft_size, int mdct_size, int sbmax, int const *scalepos) { FLOAT b_frq[CBANDS + 1]; FLOAT const mdct_freq_frac = sfreq / (2.0f * mdct_size); FLOAT const deltafreq = fft_size / (2.0f * mdct_size); int partition[HBLKSIZE] = { 0 }; int i, j, ni; int sfb; sfreq /= fft_size; j = 0; ni = 0; /* compute numlines, the number of spectral lines in each partition band */ /* each partition band should be about DELBARK wide. */ for (i = 0; i < CBANDS; i++) { FLOAT bark1; int j2, nl; bark1 = freq2bark(sfreq * j); b_frq[i] = sfreq * j; for (j2 = j; freq2bark(sfreq * j2) - bark1 < DELBARK && j2 <= fft_size / 2; j2++); nl = j2 - j; gd->numlines[i] = nl; gd->rnumlines[i] = (nl > 0) ? (1.0f / nl) : 0; ni = i + 1; while (j < j2) { assert(j < HBLKSIZE); partition[j++] = i; } if (j > fft_size / 2) { j = fft_size / 2; ++i; break; } } assert(i < CBANDS); b_frq[i] = sfreq * j; gd->n_sb = sbmax; gd->npart = ni; { j = 0; for (i = 0; i < gd->npart; i++) { int const nl = gd->numlines[i]; FLOAT const freq = sfreq * (j + nl / 2); gd->mld_cb[i] = stereo_demask(freq); j += nl; } for (; i < CBANDS; ++i) { gd->mld_cb[i] = 1; } } for (sfb = 0; sfb < sbmax; sfb++) { int i1, i2, bo; int start = scalepos[sfb]; int end = scalepos[sfb + 1]; i1 = floor(.5 + deltafreq * (start - .5)); if (i1 < 0) i1 = 0; i2 = floor(.5 + deltafreq * (end - .5)); if (i2 > fft_size / 2) i2 = fft_size / 2; bo = partition[i2]; gd->bm[sfb] = (partition[i1] + partition[i2]) / 2; gd->bo[sfb] = bo; /* calculate how much of this band belongs to current scalefactor band */ { FLOAT const f_tmp = mdct_freq_frac * end; FLOAT bo_w = (f_tmp - b_frq[bo]) / (b_frq[bo + 1] - b_frq[bo]); if (bo_w < 0) { bo_w = 0; } else { if (bo_w > 1) { bo_w = 1; } } gd->bo_weight[sfb] = bo_w; } gd->mld[sfb] = stereo_demask(mdct_freq_frac * start); } } static void compute_bark_values(PsyConst_CB2SB_t const *gd, FLOAT sfreq, int fft_size, FLOAT * bval, FLOAT * bval_width) { /* compute bark values of each critical band */ int k, j = 0, ni = gd->npart; sfreq /= fft_size; for (k = 0; k < ni; k++) { int const w = gd->numlines[k]; FLOAT bark1, bark2; bark1 = freq2bark(sfreq * (j)); bark2 = freq2bark(sfreq * (j + w - 1)); bval[k] = .5 * (bark1 + bark2); bark1 = freq2bark(sfreq * (j - .5)); bark2 = freq2bark(sfreq * (j + w - .5)); bval_width[k] = bark2 - bark1; j += w; } } static int init_s3_values(FLOAT ** p, int (*s3ind)[2], int npart, FLOAT const *bval, FLOAT const *bval_width, FLOAT const *norm) { FLOAT s3[CBANDS][CBANDS]; /* The s3 array is not linear in the bark scale. * bval[x] should be used to get the bark value. */ int i, j, k; int numberOfNoneZero = 0; memset(&s3[0][0], 0, sizeof(s3)); /* s[i][j], the value of the spreading function, * centered at band j (masker), for band i (maskee) * * i.e.: sum over j to spread into signal barkval=i * NOTE: i and j are used opposite as in the ISO docs */ for (i = 0; i < npart; i++) { for (j = 0; j < npart; j++) { FLOAT v = s3_func(bval[i] - bval[j]) * bval_width[j]; s3[i][j] = v * norm[i]; } } for (i = 0; i < npart; i++) { for (j = 0; j < npart; j++) { if (s3[i][j] > 0.0f) break; } s3ind[i][0] = j; for (j = npart - 1; j > 0; j--) { if (s3[i][j] > 0.0f) break; } s3ind[i][1] = j; numberOfNoneZero += (s3ind[i][1] - s3ind[i][0] + 1); } *p = lame_calloc(FLOAT, numberOfNoneZero); if (!*p) return -1; k = 0; for (i = 0; i < npart; i++) for (j = s3ind[i][0]; j <= s3ind[i][1]; j++) (*p)[k++] = s3[i][j]; return 0; } int psymodel_init(lame_global_flags const *gfp) { lame_internal_flags *const gfc = gfp->internal_flags; SessionConfig_t *const cfg = &gfc->cfg; PsyStateVar_t *const psv = &gfc->sv_psy; PsyConst_t *gd; int i, j, b, sb, k; FLOAT bvl_a = 13, bvl_b = 24; FLOAT snr_l_a = 0, snr_l_b = 0; FLOAT snr_s_a = -8.25, snr_s_b = -4.5; FLOAT bval[CBANDS]; FLOAT bval_width[CBANDS]; FLOAT norm[CBANDS]; FLOAT const sfreq = cfg->samplerate_out; FLOAT xav = 10, xbv = 12; FLOAT const minval_low = (0.f - cfg->minval); if (gfc->cd_psy != 0) { return 0; } memset(norm, 0, sizeof(norm)); gd = lame_calloc(PsyConst_t, 1); gfc->cd_psy = gd; gd->force_short_block_calc = gfp->experimentalZ; psv->blocktype_old[0] = psv->blocktype_old[1] = NORM_TYPE; /* the vbr header is long blocks */ for (i = 0; i < 4; ++i) { for (j = 0; j < CBANDS; ++j) { psv->nb_l1[i][j] = 1e20; psv->nb_l2[i][j] = 1e20; psv->nb_s1[i][j] = psv->nb_s2[i][j] = 1.0; } for (sb = 0; sb < SBMAX_l; sb++) { psv->en[i].l[sb] = 1e20; psv->thm[i].l[sb] = 1e20; } for (j = 0; j < 3; ++j) { for (sb = 0; sb < SBMAX_s; sb++) { psv->en[i].s[sb][j] = 1e20; psv->thm[i].s[sb][j] = 1e20; } psv->last_attacks[i] = 0; } for (j = 0; j < 9; j++) psv->last_en_subshort[i][j] = 10.; } /* init. for loudness approx. -jd 2001 mar 27 */ psv->loudness_sq_save[0] = psv->loudness_sq_save[1] = 0.0; /************************************************************************* * now compute the psychoacoustic model specific constants ************************************************************************/ /* compute numlines, bo, bm, bval, bval_width, mld */ init_numline(&gd->l, sfreq, BLKSIZE, 576, SBMAX_l, gfc->scalefac_band.l); assert(gd->l.npart < CBANDS); compute_bark_values(&gd->l, sfreq, BLKSIZE, bval, bval_width); /* compute the spreading function */ for (i = 0; i < gd->l.npart; i++) { double snr = snr_l_a; if (bval[i] >= bvl_a) { snr = snr_l_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_l_a * (bvl_b - bval[i]) / (bvl_b - bvl_a); } norm[i] = pow(10.0, snr / 10.0); } i = init_s3_values(&gd->l.s3, gd->l.s3ind, gd->l.npart, bval, bval_width, norm); if (i) return i; /* compute long block specific values, ATH and MINVAL */ j = 0; for (i = 0; i < gd->l.npart; i++) { double x; /* ATH */ x = FLOAT_MAX; for (k = 0; k < gd->l.numlines[i]; k++, j++) { FLOAT const freq = sfreq * j / (1000.0 * BLKSIZE); FLOAT level; /* freq = Min(.1,freq); *//* ATH below 100 Hz constant, not further climbing */ level = ATHformula(cfg, freq * 1000) - 20; /* scale to FFT units; returned value is in dB */ level = pow(10., 0.1 * level); /* convert from dB -> energy */ level *= gd->l.numlines[i]; if (x > level) x = level; } gfc->ATH->cb_l[i] = x; /* MINVAL. For low freq, the strength of the masking is limited by minval this is an ISO MPEG1 thing, dont know if it is really needed */ /* FIXME: it does work to reduce low-freq problems in S53-Wind-Sax and lead-voice samples, but introduces some 3 kbps bit bloat too. TODO: Further refinement of the shape of this hack. */ x = 20.0 * (bval[i] / xav - 1.0); if (x > 6) { x = 30; } if (x < minval_low) { x = minval_low; } if (cfg->samplerate_out < 44000) { x = 30; } x -= 8.; gd->l.minval[i] = pow(10.0, x / 10.) * gd->l.numlines[i]; } /************************************************************************ * do the same things for short blocks ************************************************************************/ init_numline(&gd->s, sfreq, BLKSIZE_s, 192, SBMAX_s, gfc->scalefac_band.s); assert(gd->s.npart < CBANDS); compute_bark_values(&gd->s, sfreq, BLKSIZE_s, bval, bval_width); /* SNR formula. short block is normalized by SNR. is it still right ? */ j = 0; for (i = 0; i < gd->s.npart; i++) { double x; double snr = snr_s_a; if (bval[i] >= bvl_a) { snr = snr_s_b * (bval[i] - bvl_a) / (bvl_b - bvl_a) + snr_s_a * (bvl_b - bval[i]) / (bvl_b - bvl_a); } norm[i] = pow(10.0, snr / 10.0); /* ATH */ x = FLOAT_MAX; for (k = 0; k < gd->s.numlines[i]; k++, j++) { FLOAT const freq = sfreq * j / (1000.0 * BLKSIZE_s); FLOAT level; /* freq = Min(.1,freq); *//* ATH below 100 Hz constant, not further climbing */ level = ATHformula(cfg, freq * 1000) - 20; /* scale to FFT units; returned value is in dB */ level = pow(10., 0.1 * level); /* convert from dB -> energy */ level *= gd->s.numlines[i]; if (x > level) x = level; } gfc->ATH->cb_s[i] = x; /* MINVAL. For low freq, the strength of the masking is limited by minval this is an ISO MPEG1 thing, dont know if it is really needed */ x = 7.0 * (bval[i] / xbv - 1.0); if (bval[i] > xbv) { x *= 1 + log(1 + x) * 3.1; } if (bval[i] < xbv) { x *= 1 + log(1 - x) * 2.3; } if (x > 6) { x = 30; } if (x < minval_low) { x = minval_low; } if (cfg->samplerate_out < 44000) { x = 30; } x -= 8; gd->s.minval[i] = pow(10.0, x / 10) * gd->s.numlines[i]; } i = init_s3_values(&gd->s.s3, gd->s.s3ind, gd->s.npart, bval, bval_width, norm); if (i) return i; init_mask_add_max_values(); init_fft(gfc); /* setup temporal masking */ gd->decay = exp(-1.0 * LOG10 / (temporalmask_sustain_sec * sfreq / 192.0)); { FLOAT msfix; msfix = NS_MSFIX; if (cfg->use_safe_joint_stereo) msfix = 1.0; if (fabs(cfg->msfix) > 0.0) msfix = cfg->msfix; cfg->msfix = msfix; /* spread only from npart_l bands. Normally, we use the spreading * function to convolve from npart_l down to npart_l bands */ for (b = 0; b < gd->l.npart; b++) if (gd->l.s3ind[b][1] > gd->l.npart - 1) gd->l.s3ind[b][1] = gd->l.npart - 1; } /* prepare for ATH auto adjustment: * we want to decrease the ATH by 12 dB per second */ #define frame_duration (576. * cfg->mode_gr / sfreq) gfc->ATH->decay = pow(10., -12. / 10. * frame_duration); gfc->ATH->adjust_factor = 0.01; /* minimum, for leading low loudness */ gfc->ATH->adjust_limit = 1.0; /* on lead, allow adjust up to maximum */ #undef frame_duration assert(gd->l.bo[SBMAX_l - 1] <= gd->l.npart); assert(gd->s.bo[SBMAX_s - 1] <= gd->s.npart); if (cfg->ATHtype != -1) { /* compute equal loudness weights (eql_w) */ FLOAT freq; FLOAT const freq_inc = (FLOAT) cfg->samplerate_out / (FLOAT) (BLKSIZE); FLOAT eql_balance = 0.0; freq = 0.0; for (i = 0; i < BLKSIZE / 2; ++i) { /* convert ATH dB to relative power (not dB) */ /* to determine eql_w */ freq += freq_inc; gfc->ATH->eql_w[i] = 1. / pow(10, ATHformula(cfg, freq) / 10); eql_balance += gfc->ATH->eql_w[i]; } eql_balance = 1.0 / eql_balance; for (i = BLKSIZE / 2; --i >= 0;) { /* scale weights */ gfc->ATH->eql_w[i] *= eql_balance; } } { for (b = j = 0; b < gd->s.npart; ++b) { for (i = 0; i < gd->s.numlines[b]; ++i) { ++j; } } assert(j == 129); for (b = j = 0; b < gd->l.npart; ++b) { for (i = 0; i < gd->l.numlines[b]; ++i) { ++j; } } assert(j == 513); } /* short block attack threshold */ { float x = gfp->attackthre; float y = gfp->attackthre_s; if (x < 0) { x = NSATTACKTHRE; } if (y < 0) { y = NSATTACKTHRE_S; } gd->attack_threshold[0] = gd->attack_threshold[1] = gd->attack_threshold[2] = x; gd->attack_threshold[3] = y; } { float sk_s = -10.f, sk_l = -4.7f; static float const sk[] = { -7.4, -7.4, -7.4, -9.5, -7.4, -6.1, -5.5, -4.7, -4.7, -4.7, -4.7 }; if (gfp->VBR_q < 4) { sk_l = sk_s = sk[0]; } else { sk_l = sk_s = sk[gfp->VBR_q] + gfp->VBR_q_frac * (sk[gfp->VBR_q] - sk[gfp->VBR_q + 1]); } b = 0; for (; b < gd->s.npart; b++) { float m = (float) (gd->s.npart - b) / gd->s.npart; gd->s.masking_lower[b] = powf(10.f, sk_s * m * 0.1f); } for (; b < CBANDS; ++b) { gd->s.masking_lower[b] = 1.f; } b = 0; for (; b < gd->l.npart; b++) { float m = (float) (gd->l.npart - b) / gd->l.npart; gd->l.masking_lower[b] = powf(10.f, sk_l * m * 0.1f); } for (; b < CBANDS; ++b) { gd->l.masking_lower[b] = 1.f; } } memcpy(&gd->l_to_s, &gd->l, sizeof(gd->l_to_s)); init_numline(&gd->l_to_s, sfreq, BLKSIZE, 192, SBMAX_s, gfc->scalefac_band.s); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/gain_analysis.h���������������������������������������������������������������000644 �001751 �001751 �00000010152 11476441154 021110� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * ReplayGainAnalysis - analyzes input samples and give the recommended dB change * Copyright (C) 2001 David Robinson and Glen Sawyer * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * concept and filter values by David Robinson (David@Robinson.org) * -- blame him if you think the idea is flawed * coding by Glen Sawyer (mp3gain@hotmail.com) 735 W 255 N, Orem, UT 84057-4505 USA * -- blame him if you think this runs too slowly, or the coding is otherwise flawed * * For an explanation of the concepts and the basic algorithms involved, go to: * http://www.replaygain.org/ */ #ifndef GAIN_ANALYSIS_H #define GAIN_ANALYSIS_H #ifdef HAVE_INTTYPES_H # include <inttypes.h> #else # ifdef HAVE_STDINT_H # include <stdint.h> # endif #endif #ifdef __cplusplus extern "C" { #endif typedef sample_t Float_t; /* Type used for filtering */ #define PINK_REF 64.82 /* 298640883795 */ /* calibration value for 89dB */ #define YULE_ORDER 10 #define BUTTER_ORDER 2 #define YULE_FILTER filterYule #define BUTTER_FILTER filterButter #define RMS_PERCENTILE 0.95 /* percentile which is louder than the proposed level */ #define MAX_SAMP_FREQ 48000L /* maximum allowed sample frequency [Hz] */ #define RMS_WINDOW_TIME_NUMERATOR 1L #define RMS_WINDOW_TIME_DENOMINATOR 20L /* numerator / denominator = time slice size [s] */ #define STEPS_per_dB 100 /* Table entries per dB */ #define MAX_dB 120 /* Table entries for 0...MAX_dB (normal max. values are 70...80 dB) */ enum { GAIN_NOT_ENOUGH_SAMPLES = -24601, GAIN_ANALYSIS_ERROR = 0, GAIN_ANALYSIS_OK = 1, INIT_GAIN_ANALYSIS_ERROR = 0, INIT_GAIN_ANALYSIS_OK = 1 }; enum { MAX_ORDER = (BUTTER_ORDER > YULE_ORDER ? BUTTER_ORDER : YULE_ORDER) , MAX_SAMPLES_PER_WINDOW = ((MAX_SAMP_FREQ * RMS_WINDOW_TIME_NUMERATOR) / RMS_WINDOW_TIME_DENOMINATOR + 1) /* max. Samples per Time slice */ }; struct replaygain_data { Float_t linprebuf[MAX_ORDER * 2]; Float_t *linpre; /* left input samples, with pre-buffer */ Float_t lstepbuf[MAX_SAMPLES_PER_WINDOW + MAX_ORDER]; Float_t *lstep; /* left "first step" (i.e. post first filter) samples */ Float_t loutbuf[MAX_SAMPLES_PER_WINDOW + MAX_ORDER]; Float_t *lout; /* left "out" (i.e. post second filter) samples */ Float_t rinprebuf[MAX_ORDER * 2]; Float_t *rinpre; /* right input samples ... */ Float_t rstepbuf[MAX_SAMPLES_PER_WINDOW + MAX_ORDER]; Float_t *rstep; Float_t routbuf[MAX_SAMPLES_PER_WINDOW + MAX_ORDER]; Float_t *rout; long sampleWindow; /* number of samples required to reach number of milliseconds required for RMS window */ long totsamp; double lsum; double rsum; int freqindex; int first; uint32_t A[STEPS_per_dB * MAX_dB]; uint32_t B[STEPS_per_dB * MAX_dB]; }; #ifndef replaygain_data_defined #define replaygain_data_defined typedef struct replaygain_data replaygain_t; #endif int InitGainAnalysis(replaygain_t * rgData, long samplefreq); int AnalyzeSamples(replaygain_t * rgData, const Float_t * left_samples, const Float_t * right_samples, size_t num_samples, int num_channels); Float_t GetTitleGain(replaygain_t * rgData); #ifdef __cplusplus } #endif #endif /* GAIN_ANALYSIS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/util.c������������������������������������������������������������������������000644 �001751 �001751 �00000062352 13154046620 017242� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * lame utility library source file * * Copyright (c) 1999 Albert L Faber * Copyright (c) 2000-2005 Alexander Leidinger * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: util.c,v 1.159 2017/09/06 15:07:30 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <float.h> #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "tables.h" #define PRECOMPUTE #if defined(__FreeBSD__) && !defined(__alpha__) # include <machine/floatingpoint.h> #endif /*********************************************************************** * * Global Function Definitions * ***********************************************************************/ /*empty and close mallocs in gfc */ void free_id3tag(lame_internal_flags * const gfc) { gfc->tag_spec.language[0] = 0; if (gfc->tag_spec.title != 0) { free(gfc->tag_spec.title); gfc->tag_spec.title = 0; } if (gfc->tag_spec.artist != 0) { free(gfc->tag_spec.artist); gfc->tag_spec.artist = 0; } if (gfc->tag_spec.album != 0) { free(gfc->tag_spec.album); gfc->tag_spec.album = 0; } if (gfc->tag_spec.comment != 0) { free(gfc->tag_spec.comment); gfc->tag_spec.comment = 0; } if (gfc->tag_spec.albumart != 0) { free(gfc->tag_spec.albumart); gfc->tag_spec.albumart = 0; gfc->tag_spec.albumart_size = 0; gfc->tag_spec.albumart_mimetype = MIMETYPE_NONE; } if (gfc->tag_spec.v2_head != 0) { FrameDataNode *node = gfc->tag_spec.v2_head; do { void *p = node->dsc.ptr.b; void *q = node->txt.ptr.b; void *r = node; node = node->nxt; free(p); free(q); free(r); } while (node != 0); gfc->tag_spec.v2_head = 0; gfc->tag_spec.v2_tail = 0; } } static void free_global_data(lame_internal_flags * gfc) { if (gfc && gfc->cd_psy) { if (gfc->cd_psy->l.s3) { /* XXX allocated in psymodel_init() */ free(gfc->cd_psy->l.s3); } if (gfc->cd_psy->s.s3) { /* XXX allocated in psymodel_init() */ free(gfc->cd_psy->s.s3); } free(gfc->cd_psy); gfc->cd_psy = 0; } } void freegfc(lame_internal_flags * const gfc) { /* bit stream structure */ int i; if (gfc == 0) return; for (i = 0; i <= 2 * BPC; i++) if (gfc->sv_enc.blackfilt[i] != NULL) { free(gfc->sv_enc.blackfilt[i]); gfc->sv_enc.blackfilt[i] = NULL; } if (gfc->sv_enc.inbuf_old[0]) { free(gfc->sv_enc.inbuf_old[0]); gfc->sv_enc.inbuf_old[0] = NULL; } if (gfc->sv_enc.inbuf_old[1]) { free(gfc->sv_enc.inbuf_old[1]); gfc->sv_enc.inbuf_old[1] = NULL; } if (gfc->bs.buf != NULL) { free(gfc->bs.buf); gfc->bs.buf = NULL; } if (gfc->VBR_seek_table.bag) { free(gfc->VBR_seek_table.bag); gfc->VBR_seek_table.bag = NULL; gfc->VBR_seek_table.size = 0; } if (gfc->ATH) { free(gfc->ATH); } if (gfc->sv_rpg.rgdata) { free(gfc->sv_rpg.rgdata); } if (gfc->sv_enc.in_buffer_0) { free(gfc->sv_enc.in_buffer_0); } if (gfc->sv_enc.in_buffer_1) { free(gfc->sv_enc.in_buffer_1); } free_id3tag(gfc); #ifdef DECODE_ON_THE_FLY if (gfc->hip) { hip_decode_exit(gfc->hip); gfc->hip = 0; } #endif free_global_data(gfc); free(gfc); } void calloc_aligned(aligned_pointer_t * ptr, unsigned int size, unsigned int bytes) { if (ptr) { if (!ptr->pointer) { ptr->pointer = malloc(size + bytes); if (ptr->pointer != 0) { memset(ptr->pointer, 0, size + bytes); if (bytes > 0) { ptr->aligned = (void *) ((((size_t) ptr->pointer + bytes - 1) / bytes) * bytes); } else { ptr->aligned = ptr->pointer; } } else { ptr->aligned = 0; } } } } void free_aligned(aligned_pointer_t * ptr) { if (ptr) { if (ptr->pointer) { free(ptr->pointer); ptr->pointer = 0; ptr->aligned = 0; } } } /*those ATH formulas are returning their minimum value for input = -1*/ static FLOAT ATHformula_GB(FLOAT f, FLOAT value, FLOAT f_min, FLOAT f_max) { /* from Painter & Spanias modified by Gabriel Bouvigne to better fit the reality ath = 3.640 * pow(f,-0.8) - 6.800 * exp(-0.6*pow(f-3.4,2.0)) + 6.000 * exp(-0.15*pow(f-8.7,2.0)) + 0.6* 0.001 * pow(f,4.0); In the past LAME was using the Painter &Spanias formula. But we had some recurrent problems with HF content. We measured real ATH values, and found the older formula to be inacurate in the higher part. So we made this new formula and this solved most of HF problematic testcases. The tradeoff is that in VBR mode it increases a lot the bitrate. */ /*this curve can be udjusted according to the VBR scale: it adjusts from something close to Painter & Spanias on V9 up to Bouvigne's formula for V0. This way the VBR bitrate is more balanced according to the -V value.*/ FLOAT ath; /* the following Hack allows to ask for the lowest value */ if (f < -.3) f = 3410; f /= 1000; /* convert to khz */ f = Max(f_min, f); f = Min(f_max, f); ath = 3.640 * pow(f, -0.8) - 6.800 * exp(-0.6 * pow(f - 3.4, 2.0)) + 6.000 * exp(-0.15 * pow(f - 8.7, 2.0)) + (0.6 + 0.04 * value) * 0.001 * pow(f, 4.0); return ath; } FLOAT ATHformula(SessionConfig_t const *cfg, FLOAT f) { FLOAT ath; switch (cfg->ATHtype) { case 0: ath = ATHformula_GB(f, 9, 0.1f, 24.0f); break; case 1: ath = ATHformula_GB(f, -1, 0.1f, 24.0f); /*over sensitive, should probably be removed */ break; case 2: ath = ATHformula_GB(f, 0, 0.1f, 24.0f); break; case 3: ath = ATHformula_GB(f, 1, 0.1f, 24.0f) + 6; /*modification of GB formula by Roel */ break; case 4: ath = ATHformula_GB(f, cfg->ATHcurve, 0.1f, 24.0f); break; case 5: ath = ATHformula_GB(f, cfg->ATHcurve, 3.41f, 16.1f); break; default: ath = ATHformula_GB(f, 0, 0.1f, 24.0f); break; } return ath; } /* see for example "Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7 */ FLOAT freq2bark(FLOAT freq) { /* input: freq in hz output: barks */ if (freq < 0) freq = 0; freq = freq * 0.001; return 13.0 * atan(.76 * freq) + 3.5 * atan(freq * freq / (7.5 * 7.5)); } #if 0 extern FLOAT freq2cbw(FLOAT freq); /* see for example "Zwicker: Psychoakustik, 1982; ISBN 3-540-11401-7 */ FLOAT freq2cbw(FLOAT freq) { /* input: freq in hz output: critical band width */ freq = freq * 0.001; return 25 + 75 * pow(1 + 1.4 * (freq * freq), 0.69); } #endif #define ABS(A) (((A)>0) ? (A) : -(A)) int FindNearestBitrate(int bRate, /* legal rates from 8 to 320 */ int version, int samplerate) { /* MPEG-1 or MPEG-2 LSF */ int bitrate; int i; if (samplerate < 16000) version = 2; bitrate = bitrate_table[version][1]; for (i = 2; i <= 14; i++) { if (bitrate_table[version][i] > 0) { if (ABS(bitrate_table[version][i] - bRate) < ABS(bitrate - bRate)) bitrate = bitrate_table[version][i]; } } return bitrate; } #ifndef Min #define Min(A, B) ((A) < (B) ? (A) : (B)) #endif #ifndef Max #define Max(A, B) ((A) > (B) ? (A) : (B)) #endif /* Used to find table index when * we need bitrate-based values * determined using tables * * bitrate in kbps * * Gabriel Bouvigne 2002-11-03 */ int nearestBitrateFullIndex(uint16_t bitrate) { /* borrowed from DM abr presets */ const int full_bitrate_table[] = { 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 }; int lower_range = 0, lower_range_kbps = 0, upper_range = 0, upper_range_kbps = 0; int b; /* We assume specified bitrate will be 320kbps */ upper_range_kbps = full_bitrate_table[16]; upper_range = 16; lower_range_kbps = full_bitrate_table[16]; lower_range = 16; /* Determine which significant bitrates the value specified falls between, * if loop ends without breaking then we were correct above that the value was 320 */ for (b = 0; b < 16; b++) { if ((Max(bitrate, full_bitrate_table[b + 1])) != bitrate) { upper_range_kbps = full_bitrate_table[b + 1]; upper_range = b + 1; lower_range_kbps = full_bitrate_table[b]; lower_range = (b); break; /* We found upper range */ } } /* Determine which range the value specified is closer to */ if ((upper_range_kbps - bitrate) > (bitrate - lower_range_kbps)) { return lower_range; } return upper_range; } /* map frequency to a valid MP3 sample frequency * * Robert Hegemann 2000-07-01 */ int map2MP3Frequency(int freq) { if (freq <= 8000) return 8000; if (freq <= 11025) return 11025; if (freq <= 12000) return 12000; if (freq <= 16000) return 16000; if (freq <= 22050) return 22050; if (freq <= 24000) return 24000; if (freq <= 32000) return 32000; if (freq <= 44100) return 44100; return 48000; } int BitrateIndex(int bRate, /* legal rates from 32 to 448 kbps */ int version, /* MPEG-1 or MPEG-2/2.5 LSF */ int samplerate) { /* convert bitrate in kbps to index */ int i; if (samplerate < 16000) version = 2; for (i = 0; i <= 14; i++) { if (bitrate_table[version][i] > 0) { if (bitrate_table[version][i] == bRate) { return i; } } } return -1; } /* convert samp freq in Hz to index */ int SmpFrqIndex(int sample_freq, int *const version) { switch (sample_freq) { case 44100: *version = 1; return 0; case 48000: *version = 1; return 1; case 32000: *version = 1; return 2; case 22050: *version = 0; return 0; case 24000: *version = 0; return 1; case 16000: *version = 0; return 2; case 11025: *version = 0; return 0; case 12000: *version = 0; return 1; case 8000: *version = 0; return 2; default: *version = 0; return -1; } } /***************************************************************************** * * End of bit_stream.c package * *****************************************************************************/ /* resampling via FIR filter, blackman window */ inline static FLOAT blackman(FLOAT x, FLOAT fcn, int l) { /* This algorithm from: SIGNAL PROCESSING ALGORITHMS IN FORTRAN AND C S.D. Stearns and R.A. David, Prentice-Hall, 1992 */ FLOAT bkwn, x2; FLOAT const wcn = (PI * fcn); x /= l; if (x < 0) x = 0; if (x > 1) x = 1; x2 = x - .5; bkwn = 0.42 - 0.5 * cos(2 * x * PI) + 0.08 * cos(4 * x * PI); if (fabs(x2) < 1e-9) return wcn / PI; else return (bkwn * sin(l * wcn * x2) / (PI * l * x2)); } /* gcd - greatest common divisor */ /* Joint work of Euclid and M. Hendry */ static int gcd(int i, int j) { /* assert ( i > 0 && j > 0 ); */ return j ? gcd(j, i % j) : i; } static int fill_buffer_resample(lame_internal_flags * gfc, sample_t * outbuf, int desired_len, sample_t const *inbuf, int len, int *num_used, int ch) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *esv = &gfc->sv_enc; double resample_ratio = (double)cfg->samplerate_in / (double)cfg->samplerate_out; int BLACKSIZE; FLOAT offset, xvalue; int i, j = 0, k; int filter_l; FLOAT fcn, intratio; FLOAT *inbuf_old; int bpc; /* number of convolution functions to pre-compute */ bpc = cfg->samplerate_out / gcd(cfg->samplerate_out, cfg->samplerate_in); if (bpc > BPC) bpc = BPC; intratio = (fabs(resample_ratio - floor(.5 + resample_ratio)) < FLT_EPSILON); fcn = 1.00 / resample_ratio; if (fcn > 1.00) fcn = 1.00; filter_l = 31; /* must be odd */ filter_l += intratio; /* unless resample_ratio=int, it must be even */ BLACKSIZE = filter_l + 1; /* size of data needed for FIR */ if (gfc->fill_buffer_resample_init == 0) { esv->inbuf_old[0] = lame_calloc(sample_t, BLACKSIZE); esv->inbuf_old[1] = lame_calloc(sample_t, BLACKSIZE); for (i = 0; i <= 2 * bpc; ++i) esv->blackfilt[i] = lame_calloc(sample_t, BLACKSIZE); esv->itime[0] = 0; esv->itime[1] = 0; /* precompute blackman filter coefficients */ for (j = 0; j <= 2 * bpc; j++) { FLOAT sum = 0.; offset = (j - bpc) / (2. * bpc); for (i = 0; i <= filter_l; i++) sum += esv->blackfilt[j][i] = blackman(i - offset, fcn, filter_l); for (i = 0; i <= filter_l; i++) esv->blackfilt[j][i] /= sum; } gfc->fill_buffer_resample_init = 1; } inbuf_old = esv->inbuf_old[ch]; /* time of j'th element in inbuf = itime + j/ifreq; */ /* time of k'th element in outbuf = j/ofreq */ for (k = 0; k < desired_len; k++) { double time0 = k * resample_ratio; /* time of k'th output sample */ int joff; j = floor(time0 - esv->itime[ch]); /* check if we need more input data */ if ((filter_l + j - filter_l / 2) >= len) break; /* blackman filter. by default, window centered at j+.5(filter_l%2) */ /* but we want a window centered at time0. */ offset = (time0 - esv->itime[ch] - (j + .5 * (filter_l % 2))); assert(fabs(offset) <= .501); /* find the closest precomputed window for this offset: */ joff = floor((offset * 2 * bpc) + bpc + .5); xvalue = 0.; for (i = 0; i <= filter_l; ++i) { int const j2 = i + j - filter_l / 2; sample_t y; assert(j2 < len); assert(j2 + BLACKSIZE >= 0); y = (j2 < 0) ? inbuf_old[BLACKSIZE + j2] : inbuf[j2]; #ifdef PRECOMPUTE xvalue += y * esv->blackfilt[joff][i]; #else xvalue += y * blackman(i - offset, fcn, filter_l); /* very slow! */ #endif } outbuf[k] = xvalue; } /* k = number of samples added to outbuf */ /* last k sample used data from [j-filter_l/2,j+filter_l-filter_l/2] */ /* how many samples of input data were used: */ *num_used = Min(len, filter_l + j - filter_l / 2); /* adjust our input time counter. Incriment by the number of samples used, * then normalize so that next output sample is at time 0, next * input buffer is at time itime[ch] */ esv->itime[ch] += *num_used - k * resample_ratio; /* save the last BLACKSIZE samples into the inbuf_old buffer */ if (*num_used >= BLACKSIZE) { for (i = 0; i < BLACKSIZE; i++) inbuf_old[i] = inbuf[*num_used + i - BLACKSIZE]; } else { /* shift in *num_used samples into inbuf_old */ int const n_shift = BLACKSIZE - *num_used; /* number of samples to shift */ /* shift n_shift samples by *num_used, to make room for the * num_used new samples */ for (i = 0; i < n_shift; ++i) inbuf_old[i] = inbuf_old[i + *num_used]; /* shift in the *num_used samples */ for (j = 0; i < BLACKSIZE; ++i, ++j) inbuf_old[i] = inbuf[j]; assert(j == *num_used); } return k; /* return the number samples created at the new samplerate */ } int isResamplingNecessary(SessionConfig_t const* cfg) { int const l = cfg->samplerate_out * 0.9995f; int const h = cfg->samplerate_out * 1.0005f; return (cfg->samplerate_in < l) || (h < cfg->samplerate_in) ? 1 : 0; } /* copy in new samples from in_buffer into mfbuf, with resampling if necessary. n_in = number of samples from the input buffer that were used. n_out = number of samples copied into mfbuf */ void fill_buffer(lame_internal_flags * gfc, sample_t * const mfbuf[2], sample_t const * const in_buffer[2], int nsamples, int *n_in, int *n_out) { SessionConfig_t const *const cfg = &gfc->cfg; int mf_size = gfc->sv_enc.mf_size; int framesize = 576 * cfg->mode_gr; int nout, ch = 0; int nch = cfg->channels_out; /* copy in new samples into mfbuf, with resampling if necessary */ if (isResamplingNecessary(cfg)) { do { nout = fill_buffer_resample(gfc, &mfbuf[ch][mf_size], framesize, in_buffer[ch], nsamples, n_in, ch); } while (++ch < nch); *n_out = nout; } else { nout = Min(framesize, nsamples); do { memcpy(&mfbuf[ch][mf_size], &in_buffer[ch][0], nout * sizeof(mfbuf[0][0])); } while (++ch < nch); *n_out = nout; *n_in = nout; } } /*********************************************************************** * * Message Output * ***********************************************************************/ void lame_report_def(const char *format, va_list args) { (void) vfprintf(stderr, format, args); fflush(stderr); /* an debug function should flush immediately */ } void lame_report_fnc(lame_report_function print_f, const char *format, ...) { if (print_f) { va_list args; va_start(args, format); print_f(format, args); va_end(args); } } void lame_debugf(const lame_internal_flags* gfc, const char *format, ...) { if (gfc && gfc->report_dbg) { va_list args; va_start(args, format); gfc->report_dbg(format, args); va_end(args); } } void lame_msgf(const lame_internal_flags* gfc, const char *format, ...) { if (gfc && gfc->report_msg) { va_list args; va_start(args, format); gfc->report_msg(format, args); va_end(args); } } void lame_errorf(const lame_internal_flags* gfc, const char *format, ...) { if (gfc && gfc->report_err) { va_list args; va_start(args, format); gfc->report_err(format, args); va_end(args); } } /*********************************************************************** * * routines to detect CPU specific features like 3DNow, MMX, SSE * * donated by Frank Klemm * added Robert Hegemann 2000-10-10 * ***********************************************************************/ #ifdef HAVE_NASM extern int has_MMX_nasm(void); extern int has_3DNow_nasm(void); extern int has_SSE_nasm(void); extern int has_SSE2_nasm(void); #endif int has_MMX(void) { #ifdef HAVE_NASM return has_MMX_nasm(); #else return 0; /* don't know, assume not */ #endif } int has_3DNow(void) { #ifdef HAVE_NASM return has_3DNow_nasm(); #else return 0; /* don't know, assume not */ #endif } int has_SSE(void) { #ifdef HAVE_NASM return has_SSE_nasm(); #else #if defined( _M_X64 ) || defined( MIN_ARCH_SSE ) return 1; #else return 0; /* don't know, assume not */ #endif #endif } int has_SSE2(void) { #ifdef HAVE_NASM return has_SSE2_nasm(); #else #if defined( _M_X64 ) || defined( MIN_ARCH_SSE ) return 1; #else return 0; /* don't know, assume not */ #endif #endif } void disable_FPE(void) { /* extremly system dependent stuff, move to a lib to make the code readable */ /*==========================================================================*/ /* * Disable floating point exceptions */ #if defined(__FreeBSD__) && !defined(__alpha__) { /* seet floating point mask to the Linux default */ fp_except_t mask; mask = fpgetmask(); /* if bit is set, we get SIGFPE on that error! */ fpsetmask(mask & ~(FP_X_INV | FP_X_DZ)); /* DEBUGF("FreeBSD mask is 0x%x\n",mask); */ } #endif #if defined(__riscos__) && !defined(ABORTFP) /* Disable FPE's under RISC OS */ /* if bit is set, we disable trapping that error! */ /* _FPE_IVO : invalid operation */ /* _FPE_DVZ : divide by zero */ /* _FPE_OFL : overflow */ /* _FPE_UFL : underflow */ /* _FPE_INX : inexact */ DisableFPETraps(_FPE_IVO | _FPE_DVZ | _FPE_OFL); #endif /* * Debugging stuff * The default is to ignore FPE's, unless compiled with -DABORTFP * so add code below to ENABLE FPE's. */ #if defined(ABORTFP) #if defined(_MSC_VER) { #if 0 /* rh 061207 the following fix seems to be a workaround for a problem in the parent process calling LAME. It would be better to fix the broken application => code disabled. */ /* set affinity to a single CPU. Fix for EAC/lame on SMP systems from "Todd Richmond" <todd.richmond@openwave.com> */ SYSTEM_INFO si; GetSystemInfo(&si); SetProcessAffinityMask(GetCurrentProcess(), si.dwActiveProcessorMask); #endif #include <float.h> unsigned int mask; mask = _controlfp(0, 0); mask &= ~(_EM_OVERFLOW | _EM_UNDERFLOW | _EM_ZERODIVIDE | _EM_INVALID); mask = _controlfp(mask, _MCW_EM); } #elif defined(__CYGWIN__) # define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (*&cw)) # define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw)) # define _EM_INEXACT 0x00000020 /* inexact (precision) */ # define _EM_UNDERFLOW 0x00000010 /* underflow */ # define _EM_OVERFLOW 0x00000008 /* overflow */ # define _EM_ZERODIVIDE 0x00000004 /* zero divide */ # define _EM_INVALID 0x00000001 /* invalid */ { unsigned int mask; _FPU_GETCW(mask); /* Set the FPU control word to abort on most FPEs */ mask &= ~(_EM_OVERFLOW | _EM_ZERODIVIDE | _EM_INVALID); _FPU_SETCW(mask); } # elif defined(__linux__) { # include <fpu_control.h> # ifndef _FPU_GETCW # define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (*&cw)) # endif # ifndef _FPU_SETCW # define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw)) # endif /* * Set the Linux mask to abort on most FPE's * if bit is set, we _mask_ SIGFPE on that error! * mask &= ~( _FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM | _FPU_MASK_UM ); */ unsigned int mask; _FPU_GETCW(mask); mask &= ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM); _FPU_SETCW(mask); } #endif #endif /* ABORTFP */ } #ifdef USE_FAST_LOG /*********************************************************************** * * Fast Log Approximation for log2, used to approximate every other log * (log10 and log) * maximum absolute error for log10 is around 10-6 * maximum *relative* error can be high when x is almost 1 because error/log10(x) tends toward x/e * * use it if typical RESULT values are > 1e-5 (for example if x>1.00001 or x<0.99999) * or if the relative precision in the domain around 1 is not important (result in 1 is exact and 0) * ***********************************************************************/ #define LOG2_SIZE (512) #define LOG2_SIZE_L2 (9) static ieee754_float32_t log_table[LOG2_SIZE + 1]; void init_log_table(void) { int j; static int init = 0; /* Range for log2(x) over [1,2[ is [0,1[ */ assert((1 << LOG2_SIZE_L2) == LOG2_SIZE); if (!init) { for (j = 0; j < LOG2_SIZE + 1; j++) log_table[j] = log(1.0f + j / (ieee754_float32_t) LOG2_SIZE) / log(2.0f); } init = 1; } ieee754_float32_t fast_log2(ieee754_float32_t x) { ieee754_float32_t log2val, partial; union { ieee754_float32_t f; int i; } fi; int mantisse; fi.f = x; mantisse = fi.i & 0x7fffff; log2val = ((fi.i >> 23) & 0xFF) - 0x7f; partial = (mantisse & ((1 << (23 - LOG2_SIZE_L2)) - 1)); partial *= 1.0f / ((1 << (23 - LOG2_SIZE_L2))); mantisse >>= (23 - LOG2_SIZE_L2); /* log2val += log_table[mantisse]; without interpolation the results are not good */ log2val += log_table[mantisse] * (1.0f - partial) + log_table[mantisse + 1] * partial; return log2val; } #else /* Don't use FAST_LOG */ void init_log_table(void) { } #endif /* end of util.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/quantize_pvt.h����������������������������������������������������������������000644 �001751 �001751 �00000010247 11561266675 021035� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * quantize_pvt include file * * Copyright (c) 1999 Takehiro TOMINAGA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_QUANTIZE_PVT_H #define LAME_QUANTIZE_PVT_H #define IXMAX_VAL 8206 /* ix always <= 8191+15. see count_bits() */ /* buggy Winamp decoder cannot handle values > 8191 */ /* #define IXMAX_VAL 8191 */ #define PRECALC_SIZE (IXMAX_VAL+2) extern const int nr_of_sfb_block[6][3][4]; extern const int pretab[SBMAX_l]; extern const int slen1_tab[16]; extern const int slen2_tab[16]; extern const scalefac_struct sfBandIndex[9]; extern FLOAT pow43[PRECALC_SIZE]; #ifdef TAKEHIRO_IEEE754_HACK extern FLOAT adj43asm[PRECALC_SIZE]; #else extern FLOAT adj43[PRECALC_SIZE]; #endif #define Q_MAX (256+1) #define Q_MAX2 116 /* minimum possible number of -cod_info->global_gain + ((scalefac[] + (cod_info->preflag ? pretab[sfb] : 0)) << (cod_info->scalefac_scale + 1)) + cod_info->subblock_gain[cod_info->window[sfb]] * 8; for long block, 0+((15+3)<<2) = 18*4 = 72 for short block, 0+(15<<2)+7*8 = 15*4+56 = 116 */ extern FLOAT pow20[Q_MAX + Q_MAX2 + 1]; extern FLOAT ipow20[Q_MAX]; typedef struct calc_noise_result_t { FLOAT over_noise; /* sum of quantization noise > masking */ FLOAT tot_noise; /* sum of all quantization noise */ FLOAT max_noise; /* max quantization noise */ int over_count; /* number of quantization noise > masking */ int over_SSD; /* SSD-like cost of distorted bands */ int bits; } calc_noise_result; /** * allows re-use of previously * computed noise values */ typedef struct calc_noise_data_t { int global_gain; int sfb_count1; int step[39]; FLOAT noise[39]; FLOAT noise_log[39]; } calc_noise_data; int on_pe(lame_internal_flags * gfc, const FLOAT pe[2][2], int targ_bits[2], int mean_bits, int gr, int cbr); void reduce_side(int targ_bits[2], FLOAT ms_ener_ratio, int mean_bits, int max_bits); void iteration_init(lame_internal_flags * gfc); int calc_xmin(lame_internal_flags const *gfc, III_psy_ratio const *const ratio, gr_info * const cod_info, FLOAT * l3_xmin); int calc_noise(const gr_info * const cod_info, const FLOAT * l3_xmin, FLOAT * distort, calc_noise_result * const res, calc_noise_data * prev_noise); void set_frame_pinfo(lame_internal_flags * gfc, const III_psy_ratio ratio[2][2]); /* takehiro.c */ int count_bits(lame_internal_flags const *const gfc, const FLOAT * const xr, gr_info * const cod_info, calc_noise_data * prev_noise); int noquant_count_bits(lame_internal_flags const *const gfc, gr_info * const cod_info, calc_noise_data * prev_noise); void best_huffman_divide(const lame_internal_flags * const gfc, gr_info * const cod_info); void best_scalefac_store(const lame_internal_flags * gfc, const int gr, const int ch, III_side_info_t * const l3_side); int scale_bitcount(const lame_internal_flags * gfc, gr_info * cod_info); void huffman_init(lame_internal_flags * const gfc); void init_xrpow_core_init(lame_internal_flags * const gfc); FLOAT athAdjust(FLOAT a, FLOAT x, FLOAT athFloor, float ATHfixpoint); #define LARGE_BITS 100000 #endif /* LAME_QUANTIZE_PVT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/l3side.h����������������������������������������������������������������������000644 �001751 �001751 �00000004556 11714224343 017457� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Layer 3 side include file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_L3SIDE_H #define LAME_L3SIDE_H /* max scalefactor band, max(SBMAX_l, SBMAX_s*3, (SBMAX_s-3)*3+8) */ #define SFBMAX (SBMAX_s*3) /* Layer III side information. */ typedef struct { int l[1 + SBMAX_l]; int s[1 + SBMAX_s]; int psfb21[1 + PSFB21]; int psfb12[1 + PSFB12]; } scalefac_struct; typedef struct { FLOAT l[SBMAX_l]; FLOAT s[SBMAX_s][3]; } III_psy_xmin; typedef struct { III_psy_xmin thm; III_psy_xmin en; } III_psy_ratio; typedef struct { FLOAT xr[576]; int l3_enc[576]; int scalefac[SFBMAX]; FLOAT xrpow_max; int part2_3_length; int big_values; int count1; int global_gain; int scalefac_compress; int block_type; int mixed_block_flag; int table_select[3]; int subblock_gain[3 + 1]; int region0_count; int region1_count; int preflag; int scalefac_scale; int count1table_select; int part2_length; int sfb_lmax; int sfb_smin; int psy_lmax; int sfbmax; int psymax; int sfbdivide; int width[SFBMAX]; int window[SFBMAX]; int count1bits; /* added for LSF */ const int *sfb_partition_table; int slen[4]; int max_nonzero_coeff; char energy_above_cutoff[SFBMAX]; } gr_info; typedef struct { gr_info tt[2][2]; int main_data_begin; int private_bits; int resvDrain_pre; int resvDrain_post; int scfsi[2][4]; } III_side_info_t; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/lame-analysis.h���������������������������������������������������������������000644 �001751 �001751 �00000006005 11561266675 021040� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * GTK plotting routines source file * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_GTKANAL_H #define LAME_GTKANAL_H #define READ_AHEAD 40 /* number of frames to read ahead */ #define MAXMPGLAG READ_AHEAD /* if the mpg123 lag becomes bigger than this we have to stop */ #define NUMBACK 6 /* number of frames we can back up */ #define NUMPINFO (NUMBACK+READ_AHEAD+1) struct plotting_data { int frameNum; /* current frame number */ int frameNum123; int num_samples; /* number of pcm samples read for this frame */ double frametime; /* starting time of frame, in seconds */ double pcmdata[2][1600]; double pcmdata2[2][1152 + 1152 - DECDELAY]; double xr[2][2][576]; double mpg123xr[2][2][576]; double ms_ratio[2]; double ms_ener_ratio[2]; /* L,R, M and S values */ double energy_save[4][BLKSIZE]; /* psymodel is one ahead */ double energy[2][4][BLKSIZE]; double pe[2][4]; double thr[2][4][SBMAX_l]; double en[2][4][SBMAX_l]; double thr_s[2][4][3 * SBMAX_s]; double en_s[2][4][3 * SBMAX_s]; double ers_save[4]; /* psymodel is one ahead */ double ers[2][4]; double sfb[2][2][SBMAX_l]; double sfb_s[2][2][3 * SBMAX_s]; double LAMEsfb[2][2][SBMAX_l]; double LAMEsfb_s[2][2][3 * SBMAX_s]; int LAMEqss[2][2]; int qss[2][2]; int big_values[2][2]; int sub_gain[2][2][3]; double xfsf[2][2][SBMAX_l]; double xfsf_s[2][2][3 * SBMAX_s]; int over[2][2]; double tot_noise[2][2]; double max_noise[2][2]; double over_noise[2][2]; int over_SSD[2][2]; int blocktype[2][2]; int scalefac_scale[2][2]; int preflag[2][2]; int mpg123blocktype[2][2]; int mixed[2][2]; int mainbits[2][2]; int sfbits[2][2]; int LAMEmainbits[2][2]; int LAMEsfbits[2][2]; int framesize, stereo, js, ms_stereo, i_stereo, emph, bitrate, sampfreq, maindata; int crc, padding; int scfsi[2], mean_bits, resvsize; int totbits; }; #ifndef plotting_data_defined #define plotting_data_defined typedef struct plotting_data plotting_data; #endif #if 0 extern plotting_data *pinfo; #endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/presets.c���������������������������������������������������������������������000644 �001751 �001751 �00000036350 12034014670 017745� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * presets.c -- Apply presets * * Copyright (c) 2002-2008 Gabriel Bouvigne * Copyright (c) 2007-2012 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "set_get.h" #include "encoder.h" #include "util.h" #include "lame_global_flags.h" #define SET_OPTION(opt, val, def) if (enforce) \ (void) lame_set_##opt(gfp, val); \ else if (!(fabs(lame_get_##opt(gfp) - def) > 0)) \ (void) lame_set_##opt(gfp, val); #define SET__OPTION(opt, val, def) if (enforce) \ lame_set_##opt(gfp, val); \ else if (!(fabs(lame_get_##opt(gfp) - def) > 0)) \ lame_set_##opt(gfp, val); #undef Min #undef Max static inline int min_int(int a, int b) { if (a < b) { return a; } return b; } static inline int max_int(int a, int b) { if (a > b) { return a; } return b; } typedef struct { int vbr_q; int quant_comp; int quant_comp_s; int expY; FLOAT st_lrm; /*short threshold */ FLOAT st_s; FLOAT masking_adj; FLOAT masking_adj_short; FLOAT ath_lower; FLOAT ath_curve; FLOAT ath_sensitivity; FLOAT interch; int safejoint; int sfb21mod; FLOAT msfix; FLOAT minval; FLOAT ath_fixpoint; } vbr_presets_t; /* *INDENT-OFF* */ /* Switch mappings for VBR mode VBR_RH */ static const vbr_presets_t vbr_old_switch_map[] = { /*vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens interChR safejoint sfb21mod msfix */ {0, 9, 9, 0, 5.20, 125.0, -4.2, -6.3, 4.8, 1, 0, 0, 2, 21, 0.97, 5, 100}, {1, 9, 9, 0, 5.30, 125.0, -3.6, -5.6, 4.5, 1.5, 0, 0, 2, 21, 1.35, 5, 100}, {2, 9, 9, 0, 5.60, 125.0, -2.2, -3.5, 2.8, 2, 0, 0, 2, 21, 1.49, 5, 100}, {3, 9, 9, 1, 5.80, 130.0, -1.8, -2.8, 2.6, 3, -4, 0, 2, 20, 1.64, 5, 100}, {4, 9, 9, 1, 6.00, 135.0, -0.7, -1.1, 1.1, 3.5, -8, 0, 2, 0, 1.79, 5, 100}, {5, 9, 9, 1, 6.40, 140.0, 0.5, 0.4, -7.5, 4, -12, 0.0002, 0, 0, 1.95, 5, 100}, {6, 9, 9, 1, 6.60, 145.0, 0.67, 0.65, -14.7, 6.5, -19, 0.0004, 0, 0, 2.30, 5, 100}, {7, 9, 9, 1, 6.60, 145.0, 0.8, 0.75, -19.7, 8, -22, 0.0006, 0, 0, 2.70, 5, 100}, {8, 9, 9, 1, 6.60, 145.0, 1.2, 1.15, -27.5, 10, -23, 0.0007, 0, 0, 0, 5, 100}, {9, 9, 9, 1, 6.60, 145.0, 1.6, 1.6, -36, 11, -25, 0.0008, 0, 0, 0, 5, 100}, {10, 9, 9, 1, 6.60, 145.0, 2.0, 2.0, -36, 12, -25, 0.0008, 0, 0, 0, 5, 100} }; static const vbr_presets_t vbr_mt_psy_switch_map[] = { /*vbr_q qcomp_l qcomp_s expY st_lrm st_s mask adj_l adj_s ath_lower ath_curve ath_sens --- safejoint sfb21mod msfix */ {0, 9, 9, 0, 4.20, 25.0, -6.8, -6.8, 7.1, 1, 0, 0, 2, 31, 1.000, 5, 100}, {1, 9, 9, 0, 4.20, 25.0, -4.8, -4.8, 5.4, 1.4, -1, 0, 2, 27, 1.122, 5, 98}, {2, 9, 9, 0, 4.20, 25.0, -2.6, -2.6, 3.7, 2.0, -3, 0, 2, 23, 1.288, 5, 97}, {3, 9, 9, 1, 4.20, 25.0, -1.6, -1.6, 2.0, 2.0, -5, 0, 2, 18, 1.479, 5, 96}, {4, 9, 9, 1, 4.20, 25.0, -0.0, -0.0, 0.0, 2.0, -8, 0, 2, 12, 1.698, 5, 95}, {5, 9, 9, 1, 4.20, 25.0, 1.3, 1.3, -6, 3.5, -11, 0, 2, 8, 1.950, 5, 94.2}, #if 0 {6, 9, 9, 1, 4.50, 100.0, 1.5, 1.5, -24.0, 6.0, -14, 0, 2, 4, 2.239, 3, 93.9}, {7, 9, 9, 1, 4.80, 200.0, 1.7, 1.7, -28.0, 9.0, -20, 0, 2, 0, 2.570, 1, 93.6}, #else {6, 9, 9, 1, 4.50, 100.0, 2.2, 2.3, -12.0, 6.0, -14, 0, 2, 4, 2.239, 3, 93.9}, {7, 9, 9, 1, 4.80, 200.0, 2.7, 2.7, -18.0, 9.0, -17, 0, 2, 0, 2.570, 1, 93.6}, #endif {8, 9, 9, 1, 5.30, 300.0, 2.8, 2.8, -21.0, 10.0, -23, 0.0002, 0, 0, 2.951, 0, 93.3}, {9, 9, 9, 1, 6.60, 300.0, 2.8, 2.8, -23.0, 11.0, -25, 0.0006, 0, 0, 3.388, 0, 93.3}, {10, 9, 9, 1, 25.00, 300.0, 2.8, 2.8, -25.0, 12.0, -27, 0.0025, 0, 0, 3.500, 0, 93.3} }; /* *INDENT-ON* */ static vbr_presets_t const* get_vbr_preset(int v) { switch (v) { case vbr_mtrh: case vbr_mt: return &vbr_mt_psy_switch_map[0]; default: return &vbr_old_switch_map[0]; } } #define NOOP(m) (void)p.m #define LERP(m) (p.m = p.m + x * (q.m - p.m)) static void apply_vbr_preset(lame_global_flags * gfp, int a, int enforce) { vbr_presets_t const *vbr_preset = get_vbr_preset(lame_get_VBR(gfp)); float x = gfp->VBR_q_frac; vbr_presets_t p = vbr_preset[a]; vbr_presets_t q = vbr_preset[a + 1]; vbr_presets_t const *set = &p; NOOP(vbr_q); NOOP(quant_comp); NOOP(quant_comp_s); NOOP(expY); LERP(st_lrm); LERP(st_s); LERP(masking_adj); LERP(masking_adj_short); LERP(ath_lower); LERP(ath_curve); LERP(ath_sensitivity); LERP(interch); NOOP(safejoint); LERP(sfb21mod); LERP(msfix); LERP(minval); LERP(ath_fixpoint); (void) lame_set_VBR_q(gfp, set->vbr_q); SET_OPTION(quant_comp, set->quant_comp, -1); SET_OPTION(quant_comp_short, set->quant_comp_s, -1); if (set->expY) { (void) lame_set_experimentalY(gfp, set->expY); } SET_OPTION(short_threshold_lrm, set->st_lrm, -1); SET_OPTION(short_threshold_s, set->st_s, -1); SET_OPTION(maskingadjust, set->masking_adj, 0); SET_OPTION(maskingadjust_short, set->masking_adj_short, 0); if (lame_get_VBR(gfp) == vbr_mt || lame_get_VBR(gfp) == vbr_mtrh) { lame_set_ATHtype(gfp, 5); } SET_OPTION(ATHlower, set->ath_lower, 0); SET_OPTION(ATHcurve, set->ath_curve, -1); SET_OPTION(athaa_sensitivity, set->ath_sensitivity, 0); if (set->interch > 0) { SET_OPTION(interChRatio, set->interch, -1); } /* parameters for which there is no proper set/get interface */ if (set->safejoint > 0) { (void) lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 2); } if (set->sfb21mod > 0) { int const nsp = lame_get_exp_nspsytune(gfp); int const val = (nsp >> 20) & 63; if (val == 0) { int const sf21mod = (set->sfb21mod << 20) | nsp; (void) lame_set_exp_nspsytune(gfp, sf21mod); } } SET__OPTION(msfix, set->msfix, -1); if (enforce == 0) { gfp->VBR_q = a; gfp->VBR_q_frac = x; } gfp->internal_flags->cfg.minval = set->minval; { /* take care of gain adjustments */ double const x = fabs(gfp->scale); double const y = (x > 0.f) ? (10.f * log10(x)) : 0.f; gfp->internal_flags->cfg.ATHfixpoint = set->ath_fixpoint - y; } } static int apply_abr_preset(lame_global_flags * gfp, int preset, int enforce) { typedef struct { int abr_kbps; int quant_comp; int quant_comp_s; int safejoint; FLOAT nsmsfix; FLOAT st_lrm; /*short threshold */ FLOAT st_s; FLOAT scale; FLOAT masking_adj; FLOAT ath_lower; FLOAT ath_curve; FLOAT interch; int sfscale; } abr_presets_t; /* *INDENT-OFF* */ /* * Switch mappings for ABR mode */ const abr_presets_t abr_switch_map[] = { /* kbps quant q_s safejoint nsmsfix st_lrm st_s scale msk ath_lwr ath_curve interch , sfscale */ { 8, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -30.0, 11, 0.0012, 1}, /* 8, impossible to use in stereo */ { 16, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -25.0, 11, 0.0010, 1}, /* 16 */ { 24, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -20.0, 11, 0.0010, 1}, /* 24 */ { 32, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -15.0, 11, 0.0010, 1}, /* 32 */ { 40, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -10.0, 11, 0.0009, 1}, /* 40 */ { 48, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -10.0, 11, 0.0009, 1}, /* 48 */ { 56, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -6.0, 11, 0.0008, 1}, /* 56 */ { 64, 9, 9, 0, 0, 6.60, 145, 0.95, 0, -2.0, 11, 0.0008, 1}, /* 64 */ { 80, 9, 9, 0, 0, 6.60, 145, 0.95, 0, .0, 8, 0.0007, 1}, /* 80 */ { 96, 9, 9, 0, 2.50, 6.60, 145, 0.95, 0, 1.0, 5.5, 0.0006, 1}, /* 96 */ {112, 9, 9, 0, 2.25, 6.60, 145, 0.95, 0, 2.0, 4.5, 0.0005, 1}, /* 112 */ {128, 9, 9, 0, 1.95, 6.40, 140, 0.95, 0, 3.0, 4, 0.0002, 1}, /* 128 */ {160, 9, 9, 1, 1.79, 6.00, 135, 0.95, -2, 5.0, 3.5, 0, 1}, /* 160 */ {192, 9, 9, 1, 1.49, 5.60, 125, 0.97, -4, 7.0, 3, 0, 0}, /* 192 */ {224, 9, 9, 1, 1.25, 5.20, 125, 0.98, -6, 9.0, 2, 0, 0}, /* 224 */ {256, 9, 9, 1, 0.97, 5.20, 125, 1.00, -8, 10.0, 1, 0, 0}, /* 256 */ {320, 9, 9, 1, 0.90, 5.20, 125, 1.00, -10, 12.0, 0, 0, 0} /* 320 */ }; /* *INDENT-ON* */ /* Variables for the ABR stuff */ int r; int actual_bitrate = preset; r = nearestBitrateFullIndex(preset); (void) lame_set_VBR(gfp, vbr_abr); (void) lame_set_VBR_mean_bitrate_kbps(gfp, (actual_bitrate)); (void) lame_set_VBR_mean_bitrate_kbps(gfp, min_int(lame_get_VBR_mean_bitrate_kbps(gfp), 320)); (void) lame_set_VBR_mean_bitrate_kbps(gfp, max_int(lame_get_VBR_mean_bitrate_kbps(gfp), 8)); (void) lame_set_brate(gfp, lame_get_VBR_mean_bitrate_kbps(gfp)); /* parameters for which there is no proper set/get interface */ if (abr_switch_map[r].safejoint > 0) (void) lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 2); /* safejoint */ if (abr_switch_map[r].sfscale > 0) (void) lame_set_sfscale(gfp, 1); SET_OPTION(quant_comp, abr_switch_map[r].quant_comp, -1); SET_OPTION(quant_comp_short, abr_switch_map[r].quant_comp_s, -1); SET__OPTION(msfix, abr_switch_map[r].nsmsfix, -1); SET_OPTION(short_threshold_lrm, abr_switch_map[r].st_lrm, -1); SET_OPTION(short_threshold_s, abr_switch_map[r].st_s, -1); /* ABR seems to have big problems with clipping, especially at low bitrates */ /* so we compensate for that here by using a scale value depending on bitrate */ lame_set_scale(gfp, lame_get_scale(gfp) * abr_switch_map[r].scale); SET_OPTION(maskingadjust, abr_switch_map[r].masking_adj, 0); if (abr_switch_map[r].masking_adj > 0) { SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * .9, 0); } else { SET_OPTION(maskingadjust_short, abr_switch_map[r].masking_adj * 1.1, 0); } SET_OPTION(ATHlower, abr_switch_map[r].ath_lower, 0); SET_OPTION(ATHcurve, abr_switch_map[r].ath_curve, -1); SET_OPTION(interChRatio, abr_switch_map[r].interch, -1); (void) abr_switch_map[r].abr_kbps; gfp->internal_flags->cfg.minval = 5. * (abr_switch_map[r].abr_kbps / 320.); return preset; } int apply_preset(lame_global_flags * gfp, int preset, int enforce) { /*translate legacy presets */ switch (preset) { case R3MIX: { preset = V3; (void) lame_set_VBR(gfp, vbr_mtrh); break; } case MEDIUM: case MEDIUM_FAST: { preset = V4; (void) lame_set_VBR(gfp, vbr_mtrh); break; } case STANDARD: case STANDARD_FAST: { preset = V2; (void) lame_set_VBR(gfp, vbr_mtrh); break; } case EXTREME: case EXTREME_FAST: { preset = V0; (void) lame_set_VBR(gfp, vbr_mtrh); break; } case INSANE: { preset = 320; gfp->preset = preset; (void) apply_abr_preset(gfp, preset, enforce); lame_set_VBR(gfp, vbr_off); return preset; } } gfp->preset = preset; { switch (preset) { case V9: apply_vbr_preset(gfp, 9, enforce); return preset; case V8: apply_vbr_preset(gfp, 8, enforce); return preset; case V7: apply_vbr_preset(gfp, 7, enforce); return preset; case V6: apply_vbr_preset(gfp, 6, enforce); return preset; case V5: apply_vbr_preset(gfp, 5, enforce); return preset; case V4: apply_vbr_preset(gfp, 4, enforce); return preset; case V3: apply_vbr_preset(gfp, 3, enforce); return preset; case V2: apply_vbr_preset(gfp, 2, enforce); return preset; case V1: apply_vbr_preset(gfp, 1, enforce); return preset; case V0: apply_vbr_preset(gfp, 0, enforce); return preset; default: break; } } if (8 <= preset && preset <= 320) { return apply_abr_preset(gfp, preset, enforce); } gfp->preset = 0; /*no corresponding preset found */ return preset; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/id3tag.c����������������������������������������������������������������������000644 �001751 �001751 �00000151023 13154046620 017432� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * id3tag.c -- Write ID3 version 1 and 2 tags. * * Copyright (C) 2000 Don Melton * Copyright (C) 2011-2017 Robert Hegemann * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /* * HISTORY: This source file is part of LAME (see http://www.mp3dev.org) * and was originally adapted by Conrad Sanderson <c.sanderson@me.gu.edu.au> * from mp3info by Ricardo Cerqueira <rmc@rccn.net> to write only ID3 version 1 * tags. Don Melton <don@blivet.com> COMPLETELY rewrote it to support version * 2 tags and be more conformant to other standards while remaining flexible. * * NOTE: See http://id3.org/ for more information about ID3 tag formats. */ /* $Id: id3tag.c,v 1.80 2017/08/28 15:39:51 robert Exp $ */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #ifdef STDC_HEADERS # include <stddef.h> # include <stdlib.h> # include <string.h> # include <ctype.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr(), *strrchr(); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # endif #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "id3tag.h" #include "lame_global_flags.h" #include "util.h" #include "bitstream.h" static const char *const genre_names[] = { /* * NOTE: The spelling of these genre names is identical to those found in * Winamp and mp3info. */ "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise", "Alternative Rock", "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native US", "Cabaret", "New Wave", "Psychedelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk-Rock", "National Folk", "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", "A Cappella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", "Club-House", "Hardcore", "Terror", "Indie", "BritPop", "Negerpunk", "Polsk Punk", "Beat", "Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover", "Contemporary Christian", "Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop", "SynthPop" }; #define GENRE_NAME_COUNT \ ((int)(sizeof genre_names / sizeof (const char *const))) static const int genre_alpha_map[] = { 123, 34, 74, 73, 99, 20, 40, 26, 145, 90, 116, 41, 135, 85, 96, 138, 89, 0, 107, 132, 65, 88, 104, 102, 97, 136, 61, 141, 32, 1, 112, 128, 57, 140, 2, 139, 58, 3, 125, 50, 22, 4, 55, 127, 122, 120, 98, 52, 48, 54, 124, 25, 84, 80, 115, 81, 119, 5, 30, 36, 59, 126, 38, 49, 91, 6, 129, 79, 137, 7, 35, 100, 131, 19, 33, 46, 47, 8, 29, 146, 63, 86, 71, 45, 142, 9, 77, 82, 64, 133, 10, 66, 39, 11, 103, 12, 75, 134, 13, 53, 62, 109, 117, 23, 108, 92, 67, 93, 43, 121, 15, 68, 14, 16, 76, 87, 118, 17, 78, 143, 114, 110, 69, 21, 111, 95, 105, 42, 37, 24, 56, 44, 101, 83, 94, 106, 147, 113, 18, 51, 130, 144, 60, 70, 31, 72, 27, 28 }; #define GENRE_ALPHA_COUNT ((int)(sizeof genre_alpha_map / sizeof (int))) #define GENRE_INDEX_OTHER 12 #define FRAME_ID(a, b, c, d) \ ( ((unsigned long)(a) << 24) \ | ((unsigned long)(b) << 16) \ | ((unsigned long)(c) << 8) \ | ((unsigned long)(d) << 0) ) typedef enum UsualStringIDs { ID_TITLE = FRAME_ID('T', 'I', 'T', '2') , ID_ARTIST = FRAME_ID('T', 'P', 'E', '1') , ID_ALBUM = FRAME_ID('T', 'A', 'L', 'B') , ID_GENRE = FRAME_ID('T', 'C', 'O', 'N') , ID_ENCODER = FRAME_ID('T', 'S', 'S', 'E') , ID_PLAYLENGTH = FRAME_ID('T', 'L', 'E', 'N') , ID_COMMENT = FRAME_ID('C', 'O', 'M', 'M') /* full text string */ } UsualStringIDs; typedef enum NumericStringIDs { ID_DATE = FRAME_ID('T', 'D', 'A', 'T') /* "ddMM" */ , ID_TIME = FRAME_ID('T', 'I', 'M', 'E') /* "hhmm" */ , ID_TPOS = FRAME_ID('T', 'P', 'O', 'S') /* '0'-'9' and '/' allowed */ , ID_TRACK = FRAME_ID('T', 'R', 'C', 'K') /* '0'-'9' and '/' allowed */ , ID_YEAR = FRAME_ID('T', 'Y', 'E', 'R') /* "yyyy" */ } NumericStringIDs; typedef enum MiscIDs { ID_TXXX = FRAME_ID('T', 'X', 'X', 'X') , ID_WXXX = FRAME_ID('W', 'X', 'X', 'X') , ID_SYLT = FRAME_ID('S', 'Y', 'L', 'T') , ID_APIC = FRAME_ID('A', 'P', 'I', 'C') , ID_GEOB = FRAME_ID('G', 'E', 'O', 'B') , ID_PCNT = FRAME_ID('P', 'C', 'N', 'T') , ID_AENC = FRAME_ID('A', 'E', 'N', 'C') , ID_LINK = FRAME_ID('L', 'I', 'N', 'K') , ID_ENCR = FRAME_ID('E', 'N', 'C', 'R') , ID_GRID = FRAME_ID('G', 'R', 'I', 'D') , ID_PRIV = FRAME_ID('P', 'R', 'I', 'V') , ID_USLT = FRAME_ID('U', 'S', 'L', 'T') /* full text string */ , ID_USER = FRAME_ID('U', 'S', 'E', 'R') /* full text string */ , ID_PCST = FRAME_ID('P', 'C', 'S', 'T') /* iTunes Podcast indicator, only presence important */ , ID_WFED = FRAME_ID('W', 'F', 'E', 'D') /* iTunes Podcast URL as TEXT FRAME !!! violates standard */ } MiscIDs; static int frame_id_matches(int id, int mask) { int result = 0, i, window = 0xff; for (i = 0; i < 4; ++i, window <<= 8) { int const mw = (mask & window); int const iw = (id & window); if (mw != 0 && mw != iw) { result |= iw; } } return result; } static int isFrameIdMatching(int id, int mask) { return frame_id_matches(id, mask) == 0 ? 1 : 0; } static int test_tag_spec_flags(lame_internal_flags const *gfc, unsigned int tst) { return (gfc->tag_spec.flags & tst) != 0u ? 1 : 0; } #if 0 static void debug_tag_spec_flags(lame_internal_flags * gfc, const char* info) { MSGF(gfc, "%s\n", info); MSGF(gfc, "CHANGED_FLAG : %d\n", test_tag_spec_flags(gfc, CHANGED_FLAG )); MSGF(gfc, "ADD_V2_FLAG : %d\n", test_tag_spec_flags(gfc, ADD_V2_FLAG )); MSGF(gfc, "V1_ONLY_FLAG : %d\n", test_tag_spec_flags(gfc, V1_ONLY_FLAG )); MSGF(gfc, "V2_ONLY_FLAG : %d\n", test_tag_spec_flags(gfc, V2_ONLY_FLAG )); MSGF(gfc, "SPACE_V1_FLAG : %d\n", test_tag_spec_flags(gfc, SPACE_V1_FLAG)); MSGF(gfc, "PAD_V2_FLAG : %d\n", test_tag_spec_flags(gfc, PAD_V2_FLAG )); } #endif static int is_lame_internal_flags_null(lame_t gfp) { return (gfp && gfp->internal_flags) ? 0 : 1; } static int id3v2_add_ucs2_lng(lame_t gfp, uint32_t frame_id, unsigned short const *desc, unsigned short const *text); static int id3v2_add_latin1_lng(lame_t gfp, uint32_t frame_id, char const *desc, char const *text); static void copyV1ToV2(lame_t gfp, int frame_id, char const *s) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc != 0) { unsigned int flags = gfc->tag_spec.flags; id3v2_add_latin1_lng(gfp, frame_id, 0, s); gfc->tag_spec.flags = flags; #if 0 debug_tag_spec_flags(gfc, "copyV1ToV2"); #endif } } static void id3v2AddLameVersion(lame_t gfp) { char buffer[1024]; const char *b = get_lame_os_bitness(); const char *v = get_lame_version(); const char *u = get_lame_url(); const size_t lenb = strlen(b); if (lenb > 0) { sprintf(buffer, "LAME %s version %s (%s)", b, v, u); } else { sprintf(buffer, "LAME version %s (%s)", v, u); } copyV1ToV2(gfp, ID_ENCODER, buffer); } static void id3v2AddAudioDuration(lame_t gfp, double ms) { SessionConfig_t const *const cfg = &gfp->internal_flags->cfg; /* caller checked pointers */ char buffer[1024]; double const max_ulong = MAX_U_32_NUM; unsigned long playlength_ms; ms *= 1000; ms /= cfg->samplerate_in; if (ms > max_ulong) { playlength_ms = max_ulong; } else if (ms < 0) { playlength_ms = 0; } else { playlength_ms = ms; } sprintf(buffer, "%lu", playlength_ms); copyV1ToV2(gfp, ID_PLAYLENGTH, buffer); } void id3tag_genre_list(void (*handler) (int, const char *, void *), void *cookie) { if (handler) { int i; for (i = 0; i < GENRE_NAME_COUNT; ++i) { if (i < GENRE_ALPHA_COUNT) { int j = genre_alpha_map[i]; handler(j, genre_names[j], cookie); } } } } #define GENRE_NUM_UNKNOWN 255 void id3tag_init(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; free_id3tag(gfc); memset(&gfc->tag_spec, 0, sizeof gfc->tag_spec); gfc->tag_spec.genre_id3v1 = GENRE_NUM_UNKNOWN; gfc->tag_spec.padding_size = 128; id3v2AddLameVersion(gfp); } void id3tag_add_v2(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; gfc->tag_spec.flags &= ~V1_ONLY_FLAG; gfc->tag_spec.flags |= ADD_V2_FLAG; } void id3tag_v1_only(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; gfc->tag_spec.flags &= ~(ADD_V2_FLAG | V2_ONLY_FLAG); gfc->tag_spec.flags |= V1_ONLY_FLAG; } void id3tag_v2_only(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; gfc->tag_spec.flags &= ~V1_ONLY_FLAG; gfc->tag_spec.flags |= V2_ONLY_FLAG; } void id3tag_space_v1(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; gfc->tag_spec.flags &= ~V2_ONLY_FLAG; gfc->tag_spec.flags |= SPACE_V1_FLAG; } void id3tag_pad_v2(lame_t gfp) { id3tag_set_pad(gfp, 128); } void id3tag_set_pad(lame_t gfp, size_t n) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return; } gfc = gfp->internal_flags; gfc->tag_spec.flags &= ~V1_ONLY_FLAG; gfc->tag_spec.flags |= PAD_V2_FLAG; gfc->tag_spec.flags |= ADD_V2_FLAG; gfc->tag_spec.padding_size = (unsigned int)n; } static int hasUcs2ByteOrderMarker(unsigned short bom) { if (bom == 0xFFFEu || bom == 0xFEFFu) { return 1; } return 0; } static unsigned short swap_bytes(unsigned short w) { return (0xff00u & (w << 8)) | (0x00ffu & (w >> 8)); } static unsigned short toLittleEndian(unsigned short bom, unsigned short c) { if (bom == 0xFFFEu) { return swap_bytes(c); } return c; } static unsigned short fromLatin1Char(const unsigned short* s, unsigned short c) { if (s[0] == 0xFFFEu) { return swap_bytes(c); } return c; } static size_t local_strdup(char **dst, const char *src) { if (dst == 0) { return 0; } free(*dst); *dst = 0; if (src != 0) { size_t n; for (n = 0; src[n] != 0; ++n) { /* calc src string length */ } if (n > 0) { /* string length without zero termination */ assert(sizeof(*src) == sizeof(**dst)); *dst = lame_calloc(char, n + 1); if (*dst != 0) { memcpy(*dst, src, n * sizeof(**dst)); (*dst)[n] = 0; return n; } } } return 0; } static size_t local_ucs2_strdup(unsigned short **dst, unsigned short const *src) { if (dst == 0) { return 0; } free(*dst); /* free old string pointer */ *dst = 0; if (src != 0) { size_t n; for (n = 0; src[n] != 0; ++n) { /* calc src string length */ } if (n > 0) { /* string length without zero termination */ assert(sizeof(*src) >= 2); assert(sizeof(*src) == sizeof(**dst)); *dst = lame_calloc(unsigned short, n + 1); if (*dst != 0) { memcpy(*dst, src, n * sizeof(**dst)); (*dst)[n] = 0; return n; } } } return 0; } static size_t local_ucs2_strlen(unsigned short const *s) { size_t n = 0; if (s != 0) { while (*s++) { ++n; } } return n; } static size_t local_ucs2_substr(unsigned short** dst, unsigned short const* src, size_t start, size_t end) { size_t const len = 1 + 1 + ((start < end) ? (end - start) : 0); size_t n = 0; unsigned short *ptr = lame_calloc(unsigned short, len); *dst = ptr; if (ptr == 0 || src == 0) { return 0; } if (hasUcs2ByteOrderMarker(src[0])) { ptr[n++] = src[0]; if (start == 0) { ++start; } } while (start < end) { ptr[n++] = src[start++]; } ptr[n] = 0; return n; } static int local_ucs2_pos(unsigned short const* str, unsigned short c) { int i; for (i = 0; str != 0 && str[i] != 0; ++i) { if (str[i] == c) { return i; } } return -1; } static int local_char_pos(char const* str, char c) { int i; for (i = 0; str != 0 && str[i] != 0; ++i) { if (str[i] == c) { return i; } } return -1; } static int maybeLatin1(unsigned short const* text) { if (text) { unsigned short bom = *text++; while (*text) { unsigned short c = toLittleEndian(bom, *text++); if (c > 0x00fe) return 0; } } return 1; } static int searchGenre(char const* genre); static int sloppySearchGenre(char const* genre); static int lookupGenre(char const* genre) { char *str; int num = strtol(genre, &str, 10); /* is the input a string or a valid number? */ if (*str) { num = searchGenre(genre); if (num == GENRE_NAME_COUNT) { num = sloppySearchGenre(genre); } if (num == GENRE_NAME_COUNT) { return -2; /* no common genre text found */ } } else { if ((num < 0) || (num >= GENRE_NAME_COUNT)) { return -1; /* number unknown */ } } return num; } static unsigned char * writeLoBytes(unsigned char *frame, unsigned short const *str, size_t n); static char* local_strdup_utf16_to_latin1(unsigned short const* utf16) { size_t len = local_ucs2_strlen(utf16); unsigned char* latin1 = lame_calloc(unsigned char, len+1); writeLoBytes(latin1, utf16, len); return (char*)latin1; } static int id3tag_set_genre_utf16(lame_t gfp, unsigned short const* text) { lame_internal_flags* gfc = gfp->internal_flags; int ret; if (text == 0) { return -3; } if (!hasUcs2ByteOrderMarker(text[0])) { return -3; } if (maybeLatin1(text)) { char* latin1 = local_strdup_utf16_to_latin1(text); int num = lookupGenre(latin1); free(latin1); if (num == -1) return -1; /* number out of range */ if (num >= 0) { /* common genre found */ gfc->tag_spec.flags |= CHANGED_FLAG; gfc->tag_spec.genre_id3v1 = num; copyV1ToV2(gfp, ID_GENRE, genre_names[num]); return 0; } } ret = id3v2_add_ucs2_lng(gfp, ID_GENRE, 0, text); if (ret == 0) { gfc->tag_spec.flags |= CHANGED_FLAG; gfc->tag_spec.genre_id3v1 = GENRE_INDEX_OTHER; } return ret; } /* Some existing options for ID3 tag can be specified by --tv option as follows. --tt <value>, --tv TIT2=value --ta <value>, --tv TPE1=value --tl <value>, --tv TALB=value --ty <value>, --tv TYER=value --tn <value>, --tv TRCK=value --tg <value>, --tv TCON=value (although some are not exactly same)*/ int id3tag_set_albumart(lame_t gfp, const char *image, size_t size) { int mimetype = MIMETYPE_NONE; lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return 0; } gfc = gfp->internal_flags; if (image != 0) { unsigned char const *data = (unsigned char const *) image; /* determine MIME type from the actual image data */ if (2 < size && data[0] == 0xFF && data[1] == 0xD8) { mimetype = MIMETYPE_JPEG; } else if (4 < size && data[0] == 0x89 && strncmp((const char *) &data[1], "PNG", 3) == 0) { mimetype = MIMETYPE_PNG; } else if (4 < size && strncmp((const char *) data, "GIF8", 4) == 0) { mimetype = MIMETYPE_GIF; } else { return -1; } } if (gfc->tag_spec.albumart != 0) { free(gfc->tag_spec.albumart); gfc->tag_spec.albumart = 0; gfc->tag_spec.albumart_size = 0; gfc->tag_spec.albumart_mimetype = MIMETYPE_NONE; } if (size < 1 || mimetype == MIMETYPE_NONE) { return 0; } gfc->tag_spec.albumart = lame_calloc(unsigned char, size); if (gfc->tag_spec.albumart != 0) { memcpy(gfc->tag_spec.albumart, image, size); gfc->tag_spec.albumart_size = (unsigned int)size; gfc->tag_spec.albumart_mimetype = mimetype; gfc->tag_spec.flags |= CHANGED_FLAG; id3tag_add_v2(gfp); } return 0; } static unsigned char * set_4_byte_value(unsigned char *bytes, uint32_t value) { int i; for (i = 3; i >= 0; --i) { bytes[i] = value & 0xffUL; value >>= 8; } return bytes + 4; } static uint32_t toID3v2TagId(char const *s) { unsigned int i, x = 0; if (s == 0) { return 0; } for (i = 0; i < 4 && s[i] != 0; ++i) { char const c = s[i]; unsigned int const u = 0x0ff & c; x <<= 8; x |= u; if (c < 'A' || 'Z' < c) { if (c < '0' || '9' < c) { return 0; } } } return x; } static uint32_t toID3v2TagId_ucs2(unsigned short const *s) { unsigned int i, x = 0; unsigned short bom = 0; if (s == 0) { return 0; } bom = s[0]; if (hasUcs2ByteOrderMarker(bom)) { ++s; } for (i = 0; i < 4 && s[i] != 0; ++i) { unsigned short const c = toLittleEndian(bom, s[i]); if (c < 'A' || 'Z' < c) { if (c < '0' || '9' < c) { return 0; } } x <<= 8; x |= c; } return x; } #if 0 static int isNumericString(uint32_t frame_id) { switch (frame_id) { case ID_DATE: case ID_TIME: case ID_TPOS: case ID_TRACK: case ID_YEAR: return 1; } return 0; } #endif static int isMultiFrame(uint32_t frame_id) { switch (frame_id) { case ID_TXXX: case ID_WXXX: case ID_COMMENT: case ID_SYLT: case ID_APIC: case ID_GEOB: case ID_PCNT: case ID_AENC: case ID_LINK: case ID_ENCR: case ID_GRID: case ID_PRIV: return 1; } return 0; } #if 0 static int isFullTextString(int frame_id) { switch (frame_id) { case ID_VSLT: case ID_COMMENT: return 1; } return 0; } #endif static FrameDataNode * findNode(id3tag_spec const *tag, uint32_t frame_id, FrameDataNode const *last) { FrameDataNode *node = last ? last->nxt : tag->v2_head; while (node != 0) { if (node->fid == frame_id) { return node; } node = node->nxt; } return 0; } static void appendNode(id3tag_spec * tag, FrameDataNode * node) { if (tag->v2_tail == 0 || tag->v2_head == 0) { tag->v2_head = node; tag->v2_tail = node; } else { tag->v2_tail->nxt = node; tag->v2_tail = node; } } static void setLang(char *dst, char const *src) { int i; if (src == 0 || src[0] == 0) { dst[0] = 'e'; dst[1] = 'n'; dst[2] = 'g'; } else { for (i = 0; i < 3 && src && *src; ++i) { dst[i] = src[i]; } for (; i < 3; ++i) { dst[i] = ' '; } } } static int isSameLang(char const *l1, char const *l2) { char d[3]; int i; setLang(d, l2); for (i = 0; i < 3; ++i) { char a = tolower(l1[i]); char b = tolower(d[i]); if (a < ' ') a = ' '; if (b < ' ') b = ' '; if (a != b) { return 0; } } return 1; } static int isSameDescriptor(FrameDataNode const *node, char const *dsc) { size_t i; if (node->dsc.enc == 1 && node->dsc.dim > 0) { return 0; } for (i = 0; i < node->dsc.dim; ++i) { if (!dsc || node->dsc.ptr.l[i] != dsc[i]) { return 0; } } return 1; } static int isSameDescriptorUcs2(FrameDataNode const *node, unsigned short const *dsc) { size_t i; if (node->dsc.enc != 1 && node->dsc.dim > 0) { return 0; } for (i = 0; i < node->dsc.dim; ++i) { if (!dsc || node->dsc.ptr.u[i] != dsc[i]) { return 0; } } return 1; } static int id3v2_add_ucs2(lame_t gfp, uint32_t frame_id, char const *lng, unsigned short const *desc, unsigned short const *text) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc != 0) { FrameDataNode *node = findNode(&gfc->tag_spec, frame_id, 0); char lang[4]; setLang(lang, lng); if (isMultiFrame(frame_id)) { while (node) { if (isSameLang(node->lng, lang)) { if (isSameDescriptorUcs2(node, desc)) { break; } } node = findNode(&gfc->tag_spec, frame_id, node); } } if (node == 0) { node = lame_calloc(FrameDataNode, 1); if (node == 0) { return -254; /* memory problem */ } appendNode(&gfc->tag_spec, node); } node->fid = frame_id; setLang(node->lng, lang); node->dsc.dim = local_ucs2_strdup(&node->dsc.ptr.u, desc); node->dsc.enc = 1; node->txt.dim = local_ucs2_strdup(&node->txt.ptr.u, text); node->txt.enc = 1; gfc->tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); return 0; } return -255; } static int id3v2_add_latin1(lame_t gfp, uint32_t frame_id, char const *lng, char const *desc, char const *text) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc != 0) { FrameDataNode *node = findNode(&gfc->tag_spec, frame_id, 0); char lang[4]; setLang(lang, lng); if (isMultiFrame(frame_id)) { while (node) { if (isSameLang(node->lng, lang)) { if (isSameDescriptor(node, desc)) { break; } } node = findNode(&gfc->tag_spec, frame_id, node); } } if (node == 0) { node = lame_calloc(FrameDataNode, 1); if (node == 0) { return -254; /* memory problem */ } appendNode(&gfc->tag_spec, node); } node->fid = frame_id; setLang(node->lng, lang); node->dsc.dim = local_strdup(&node->dsc.ptr.l, desc); node->dsc.enc = 0; node->txt.dim = local_strdup(&node->txt.ptr.l, text); node->txt.enc = 0; gfc->tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); return 0; } return -255; } static char const* id3v2_get_language(lame_t gfp) { lame_internal_flags const* gfc = gfp ? gfp->internal_flags : 0; if (gfc) return gfc->tag_spec.language; return 0; } static int id3v2_add_ucs2_lng(lame_t gfp, uint32_t frame_id, unsigned short const *desc, unsigned short const *text) { char const* lang = id3v2_get_language(gfp); return id3v2_add_ucs2(gfp, frame_id, lang, desc, text); } static int id3v2_add_latin1_lng(lame_t gfp, uint32_t frame_id, char const *desc, char const *text) { char const* lang = id3v2_get_language(gfp); return id3v2_add_latin1(gfp, frame_id, lang, desc, text); } static int id3tag_set_userinfo_latin1(lame_t gfp, uint32_t id, char const *fieldvalue) { char const separator = '='; int rc = -7; int a = local_char_pos(fieldvalue, separator); if (a >= 0) { char* dup = 0; local_strdup(&dup, fieldvalue); dup[a] = 0; rc = id3v2_add_latin1_lng(gfp, id, dup, dup+a+1); free(dup); } return rc; } static int id3tag_set_userinfo_ucs2(lame_t gfp, uint32_t id, unsigned short const *fieldvalue) { unsigned short const separator = fromLatin1Char(fieldvalue,'='); int rc = -7; size_t b = local_ucs2_strlen(fieldvalue); int a = local_ucs2_pos(fieldvalue, separator); if (a >= 0) { unsigned short* dsc = 0, *val = 0; local_ucs2_substr(&dsc, fieldvalue, 0, a); local_ucs2_substr(&val, fieldvalue, a+1, b); rc = id3v2_add_ucs2_lng(gfp, id, dsc, val); free(dsc); free(val); } return rc; } int id3tag_set_textinfo_utf16(lame_t gfp, char const *id, unsigned short const *text) { uint32_t const frame_id = toID3v2TagId(id); if (frame_id == 0) { return -1; } if (is_lame_internal_flags_null(gfp)) { return 0; } if (text == 0) { return 0; } if (!hasUcs2ByteOrderMarker(text[0])) { return -3; /* BOM missing */ } if (frame_id == ID_TXXX || frame_id == ID_WXXX || frame_id == ID_COMMENT) { return id3tag_set_userinfo_ucs2(gfp, frame_id, text); } if (frame_id == ID_GENRE) { return id3tag_set_genre_utf16(gfp, text); } if (frame_id == ID_PCST) { return id3v2_add_ucs2_lng(gfp, frame_id, 0, text); } if (frame_id == ID_USER) { return id3v2_add_ucs2_lng(gfp, frame_id, text, 0); } if (frame_id == ID_WFED) { return id3v2_add_ucs2_lng(gfp, frame_id, text, 0); /* iTunes expects WFED to be a text frame */ } if (isFrameIdMatching(frame_id, FRAME_ID('T', 0, 0, 0)) ||isFrameIdMatching(frame_id, FRAME_ID('W', 0, 0, 0))) { #if 0 if (isNumericString(frame_id)) { return -2; /* must be Latin-1 encoded */ } #endif return id3v2_add_ucs2_lng(gfp, frame_id, 0, text); } return -255; /* not supported by now */ } extern int id3tag_set_textinfo_ucs2(lame_t gfp, char const *id, unsigned short const *text); int id3tag_set_textinfo_ucs2(lame_t gfp, char const *id, unsigned short const *text) { return id3tag_set_textinfo_utf16(gfp, id, text); } int id3tag_set_textinfo_latin1(lame_t gfp, char const *id, char const *text) { uint32_t const frame_id = toID3v2TagId(id); if (frame_id == 0) { return -1; } if (is_lame_internal_flags_null(gfp)) { return 0; } if (text == 0) { return 0; } if (frame_id == ID_TXXX || frame_id == ID_WXXX || frame_id == ID_COMMENT) { return id3tag_set_userinfo_latin1(gfp, frame_id, text); } if (frame_id == ID_GENRE) { return id3tag_set_genre(gfp, text); } if (frame_id == ID_PCST) { return id3v2_add_latin1_lng(gfp, frame_id, 0, text); } if (frame_id == ID_USER) { return id3v2_add_latin1_lng(gfp, frame_id, text, 0); } if (frame_id == ID_WFED) { return id3v2_add_latin1_lng(gfp, frame_id, text, 0); /* iTunes expects WFED to be a text frame */ } if (isFrameIdMatching(frame_id, FRAME_ID('T', 0, 0, 0)) ||isFrameIdMatching(frame_id, FRAME_ID('W', 0, 0, 0))) { return id3v2_add_latin1_lng(gfp, frame_id, 0, text); } return -255; /* not supported by now */ } int id3tag_set_comment_latin1(lame_t gfp, char const *lang, char const *desc, char const *text) { if (is_lame_internal_flags_null(gfp)) { return 0; } return id3v2_add_latin1(gfp, ID_COMMENT, lang, desc, text); } int id3tag_set_comment_utf16(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text) { if (is_lame_internal_flags_null(gfp)) { return 0; } return id3v2_add_ucs2(gfp, ID_COMMENT, lang, desc, text); } extern int id3tag_set_comment_ucs2(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text); int id3tag_set_comment_ucs2(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text) { if (is_lame_internal_flags_null(gfp)) { return 0; } return id3tag_set_comment_utf16(gfp, lang, desc, text); } void id3tag_set_title(lame_t gfp, const char *title) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc && title && *title) { local_strdup(&gfc->tag_spec.title, title); gfc->tag_spec.flags |= CHANGED_FLAG; copyV1ToV2(gfp, ID_TITLE, title); } } void id3tag_set_artist(lame_t gfp, const char *artist) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc && artist && *artist) { local_strdup(&gfc->tag_spec.artist, artist); gfc->tag_spec.flags |= CHANGED_FLAG; copyV1ToV2(gfp, ID_ARTIST, artist); } } void id3tag_set_album(lame_t gfp, const char *album) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc && album && *album) { local_strdup(&gfc->tag_spec.album, album); gfc->tag_spec.flags |= CHANGED_FLAG; copyV1ToV2(gfp, ID_ALBUM, album); } } void id3tag_set_year(lame_t gfp, const char *year) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc && year && *year) { int num = atoi(year); if (num < 0) { num = 0; } /* limit a year to 4 digits so it fits in a version 1 tag */ if (num > 9999) { num = 9999; } if (num) { gfc->tag_spec.year = num; gfc->tag_spec.flags |= CHANGED_FLAG; } copyV1ToV2(gfp, ID_YEAR, year); } } void id3tag_set_comment(lame_t gfp, const char *comment) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; if (gfc && comment && *comment) { local_strdup(&gfc->tag_spec.comment, comment); gfc->tag_spec.flags |= CHANGED_FLAG; { uint32_t const flags = gfc->tag_spec.flags; id3v2_add_latin1_lng(gfp, ID_COMMENT, "", comment); gfc->tag_spec.flags = flags; } } } int id3tag_set_track(lame_t gfp, const char *track) { char const *trackcount; lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; int ret = 0; if (gfc && track && *track) { int num = atoi(track); /* check for valid ID3v1 track number range */ if (num < 1 || num > 255) { num = 0; ret = -1; /* track number out of ID3v1 range, ignored for ID3v1 */ gfc->tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); } if (num) { gfc->tag_spec.track_id3v1 = num; gfc->tag_spec.flags |= CHANGED_FLAG; } /* Look for the total track count after a "/", same restrictions */ trackcount = strchr(track, '/'); if (trackcount && *trackcount) { gfc->tag_spec.flags |= (CHANGED_FLAG | ADD_V2_FLAG); } copyV1ToV2(gfp, ID_TRACK, track); } return ret; } /* would use real "strcasecmp" but it isn't portable */ static int local_strcasecmp(const char *s1, const char *s2) { unsigned char c1; unsigned char c2; do { c1 = tolower(*s1); c2 = tolower(*s2); if (!c1) { break; } ++s1; ++s2; } while (c1 == c2); return c1 - c2; } static const char* nextUpperAlpha(const char* p, char x) { char c; for(c = toupper(*p); *p != 0; c = toupper(*++p)) { if ('A' <= c && c <= 'Z') { if (c != x) { return p; } } } return p; } static int sloppyCompared(const char* p, const char* q) { char cp, cq; p = nextUpperAlpha(p, 0); q = nextUpperAlpha(q, 0); cp = toupper(*p); cq = toupper(*q); while (cp == cq) { if (cp == 0) { return 1; } if (p[1] == '.') { /* some abbrevation */ while (*q && *q++ != ' ') { } } p = nextUpperAlpha(p, cp); q = nextUpperAlpha(q, cq); cp = toupper(*p); cq = toupper(*q); } return 0; } static int sloppySearchGenre(const char *genre) { int i; for (i = 0; i < GENRE_NAME_COUNT; ++i) { if (sloppyCompared(genre, genre_names[i])) { return i; } } return GENRE_NAME_COUNT; } static int searchGenre(const char* genre) { int i; for (i = 0; i < GENRE_NAME_COUNT; ++i) { if (!local_strcasecmp(genre, genre_names[i])) { return i; } } return GENRE_NAME_COUNT; } int id3tag_set_genre(lame_t gfp, const char *genre) { lame_internal_flags *gfc = gfp != 0 ? gfp->internal_flags : 0; int ret = 0; if (gfc && genre && *genre) { int const num = lookupGenre(genre); if (num == -1) return num; gfc->tag_spec.flags |= CHANGED_FLAG; if (num >= 0) { gfc->tag_spec.genre_id3v1 = num; genre = genre_names[num]; } else { gfc->tag_spec.genre_id3v1 = GENRE_INDEX_OTHER; gfc->tag_spec.flags |= ADD_V2_FLAG; } copyV1ToV2(gfp, ID_GENRE, genre); } return ret; } static size_t sizeOfNode(FrameDataNode const *node) { size_t n = 0; if (node) { n = 10; /* header size */ n += 1; /* text encoding flag */ switch (node->txt.enc) { default: case 0: if (node->dsc.dim > 0) { n += node->dsc.dim + 1; } n += node->txt.dim; break; case 1: if (node->dsc.dim > 0) { n += (node->dsc.dim+1) * 2; } n += node->txt.dim * 2; break; } } return n; } static size_t sizeOfCommentNode(FrameDataNode const *node) { size_t n = 0; if (node) { n = 10; /* header size */ n += 1; /* text encoding flag */ n += 3; /* language */ switch (node->dsc.enc) { default: case 0: n += 1 + node->dsc.dim; break; case 1: n += 2 + node->dsc.dim * 2; break; } switch (node->txt.enc) { default: case 0: n += node->txt.dim; break; case 1: n += node->txt.dim * 2; break; } } return n; } static size_t sizeOfWxxxNode(FrameDataNode const *node) { size_t n = 0; if (node) { n = 10; /* header size */ if (node->dsc.dim > 0) { n += 1; /* text encoding flag */ switch (node->dsc.enc) { default: case 0: n += 1 + node->dsc.dim; break; case 1: n += 2 + node->dsc.dim * 2; break; } } if (node->txt.dim > 0) { switch (node->txt.enc) { default: case 0: n += node->txt.dim; break; case 1: n += node->txt.dim - 1; /* UCS2 -> Latin1, skip BOM */ break; } } } return n; } static unsigned char * writeChars(unsigned char *frame, char const *str, size_t n) { while (n--) { *frame++ = *str++; } return frame; } static unsigned char * writeUcs2s(unsigned char *frame, unsigned short const *str, size_t n) { if (n > 0) { unsigned short const bom = *str; while (n--) { unsigned short const c = toLittleEndian(bom, *str++); *frame++ = 0x00ffu & c; *frame++ = 0x00ffu & (c >> 8); } } return frame; } static unsigned char * writeLoBytes(unsigned char *frame, unsigned short const *str, size_t n) { if (n > 0) { unsigned short const bom = *str; if (hasUcs2ByteOrderMarker(bom)) { str++; n--; /* skip BOM */ } while (n--) { unsigned short const c = toLittleEndian(bom, *str++); if (c < 0x0020u || 0x00ffu < c) { *frame++ = 0x0020; /* blank */ } else { *frame++ = c; } } } return frame; } static unsigned char * set_frame_comment(unsigned char *frame, FrameDataNode const *node) { size_t const n = sizeOfCommentNode(node); if (n > 10) { frame = set_4_byte_value(frame, node->fid); frame = set_4_byte_value(frame, (uint32_t) (n - 10)); /* clear 2-byte header flags */ *frame++ = 0; *frame++ = 0; /* encoding descriptor byte */ *frame++ = node->txt.enc == 1 ? 1 : 0; /* 3 bytes language */ *frame++ = node->lng[0]; *frame++ = node->lng[1]; *frame++ = node->lng[2]; /* descriptor with zero byte(s) separator */ if (node->dsc.enc != 1) { frame = writeChars(frame, node->dsc.ptr.l, node->dsc.dim); *frame++ = 0; } else { frame = writeUcs2s(frame, node->dsc.ptr.u, node->dsc.dim); *frame++ = 0; *frame++ = 0; } /* comment full text */ if (node->txt.enc != 1) { frame = writeChars(frame, node->txt.ptr.l, node->txt.dim); } else { frame = writeUcs2s(frame, node->txt.ptr.u, node->txt.dim); } } return frame; } static unsigned char * set_frame_custom2(unsigned char *frame, FrameDataNode const *node) { size_t const n = sizeOfNode(node); if (n > 10) { frame = set_4_byte_value(frame, node->fid); frame = set_4_byte_value(frame, (unsigned long) (n - 10)); /* clear 2-byte header flags */ *frame++ = 0; *frame++ = 0; /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ *frame++ = node->txt.enc == 1 ? 1 : 0; if (node->dsc.dim > 0) { if (node->dsc.enc != 1) { frame = writeChars(frame, node->dsc.ptr.l, node->dsc.dim); *frame++ = 0; } else { frame = writeUcs2s(frame, node->dsc.ptr.u, node->dsc.dim); *frame++ = 0; *frame++ = 0; } } if (node->txt.enc != 1) { frame = writeChars(frame, node->txt.ptr.l, node->txt.dim); } else { frame = writeUcs2s(frame, node->txt.ptr.u, node->txt.dim); } } return frame; } static unsigned char * set_frame_wxxx(unsigned char *frame, FrameDataNode const *node) { size_t const n = sizeOfWxxxNode(node); if (n > 10) { frame = set_4_byte_value(frame, node->fid); frame = set_4_byte_value(frame, (unsigned long) (n - 10)); /* clear 2-byte header flags */ *frame++ = 0; *frame++ = 0; if (node->dsc.dim > 0) { /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ *frame++ = node->dsc.enc == 1 ? 1 : 0; if (node->dsc.enc != 1) { frame = writeChars(frame, node->dsc.ptr.l, node->dsc.dim); *frame++ = 0; } else { frame = writeUcs2s(frame, node->dsc.ptr.u, node->dsc.dim); *frame++ = 0; *frame++ = 0; } } if (node->txt.enc != 1) { frame = writeChars(frame, node->txt.ptr.l, node->txt.dim); } else { frame = writeLoBytes(frame, node->txt.ptr.u, node->txt.dim); } } return frame; } static unsigned char * set_frame_apic(unsigned char *frame, const char *mimetype, const unsigned char *data, size_t size) { /* ID3v2.3 standard APIC frame: * <Header for 'Attached picture', ID: "APIC"> * Text encoding $xx * MIME type <text string> $00 * Picture type $xx * Description <text string according to encoding> $00 (00) * Picture data <binary data> */ if (mimetype && data && size) { frame = set_4_byte_value(frame, FRAME_ID('A', 'P', 'I', 'C')); frame = set_4_byte_value(frame, (unsigned long) (4 + strlen(mimetype) + size)); /* clear 2-byte header flags */ *frame++ = 0; *frame++ = 0; /* clear 1 encoding descriptor byte to indicate ISO-8859-1 format */ *frame++ = 0; /* copy mime_type */ while (*mimetype) { *frame++ = *mimetype++; } *frame++ = 0; /* set picture type to 0 */ *frame++ = 0; /* empty description field */ *frame++ = 0; /* copy the image data */ while (size--) { *frame++ = *data++; } } return frame; } int id3tag_set_fieldvalue(lame_t gfp, const char *fieldvalue) { if (is_lame_internal_flags_null(gfp)) { return 0; } if (fieldvalue && *fieldvalue) { if (strlen(fieldvalue) < 5 || fieldvalue[4] != '=') { return -1; } return id3tag_set_textinfo_latin1(gfp, fieldvalue, &fieldvalue[5]); } return 0; } int id3tag_set_fieldvalue_utf16(lame_t gfp, const unsigned short *fieldvalue) { if (is_lame_internal_flags_null(gfp)) { return 0; } if (fieldvalue && *fieldvalue) { size_t dx = hasUcs2ByteOrderMarker(fieldvalue[0]); unsigned short const separator = fromLatin1Char(fieldvalue, '='); char fid[5] = {0,0,0,0,0}; uint32_t const frame_id = toID3v2TagId_ucs2(fieldvalue); if (local_ucs2_strlen(fieldvalue) < (5+dx) || fieldvalue[4+dx] != separator) { return -1; } fid[0] = (frame_id >> 24) & 0x0ff; fid[1] = (frame_id >> 16) & 0x0ff; fid[2] = (frame_id >> 8) & 0x0ff; fid[3] = frame_id & 0x0ff; if (frame_id != 0) { unsigned short* txt = 0; int rc; local_ucs2_substr(&txt, fieldvalue, dx+5, local_ucs2_strlen(fieldvalue)); rc = id3tag_set_textinfo_utf16(gfp, fid, txt); free(txt); return rc; } } return -1; } extern int id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue); int id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue) { if (is_lame_internal_flags_null(gfp)) { return 0; } return id3tag_set_fieldvalue_utf16(gfp, fieldvalue); } size_t lame_get_id3v2_tag(lame_t gfp, unsigned char *buffer, size_t size) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return 0; } gfc = gfp->internal_flags; if (test_tag_spec_flags(gfc, V1_ONLY_FLAG)) { return 0; } #if 0 debug_tag_spec_flags(gfc, "lame_get_id3v2_tag"); #endif { int usev2 = test_tag_spec_flags(gfc, ADD_V2_FLAG | V2_ONLY_FLAG); /* calculate length of four fields which may not fit in verion 1 tag */ size_t title_length = gfc->tag_spec.title ? strlen(gfc->tag_spec.title) : 0; size_t artist_length = gfc->tag_spec.artist ? strlen(gfc->tag_spec.artist) : 0; size_t album_length = gfc->tag_spec.album ? strlen(gfc->tag_spec.album) : 0; size_t comment_length = gfc->tag_spec.comment ? strlen(gfc->tag_spec.comment) : 0; /* write tag if explicitly requested or if fields overflow */ if ((title_length > 30) || (artist_length > 30) || (album_length > 30) || (comment_length > 30) || (gfc->tag_spec.track_id3v1 && (comment_length > 28))) { usev2 = 1; } if (usev2) { size_t tag_size; unsigned char *p; size_t adjusted_tag_size; const char *albumart_mime = NULL; static const char *mime_jpeg = "image/jpeg"; static const char *mime_png = "image/png"; static const char *mime_gif = "image/gif"; if (gfp->num_samples != MAX_U_32_NUM) { id3v2AddAudioDuration(gfp, gfp->num_samples); } /* calulate size of tag starting with 10-byte tag header */ tag_size = 10; if (gfc->tag_spec.albumart && gfc->tag_spec.albumart_size) { switch (gfc->tag_spec.albumart_mimetype) { case MIMETYPE_JPEG: albumart_mime = mime_jpeg; break; case MIMETYPE_PNG: albumart_mime = mime_png; break; case MIMETYPE_GIF: albumart_mime = mime_gif; break; } if (albumart_mime) { tag_size += 10 + 4 + strlen(albumart_mime) + gfc->tag_spec.albumart_size; } } { id3tag_spec *tag = &gfc->tag_spec; if (tag->v2_head != 0) { FrameDataNode *node; for (node = tag->v2_head; node != 0; node = node->nxt) { if (node->fid == ID_COMMENT || node->fid == ID_USER) { tag_size += sizeOfCommentNode(node); } else if (isFrameIdMatching(node->fid, FRAME_ID('W',0,0,0))) { tag_size += sizeOfWxxxNode(node); } else { tag_size += sizeOfNode(node); } } } } if (test_tag_spec_flags(gfc, PAD_V2_FLAG)) { /* add some bytes of padding */ tag_size += gfc->tag_spec.padding_size; } if (size < tag_size) { return tag_size; } if (buffer == 0) { return 0; } p = buffer; /* set tag header starting with file identifier */ *p++ = 'I'; *p++ = 'D'; *p++ = '3'; /* set version number word */ *p++ = 3; *p++ = 0; /* clear flags byte */ *p++ = 0; /* calculate and set tag size = total size - header size */ adjusted_tag_size = tag_size - 10; /* encode adjusted size into four bytes where most significant * bit is clear in each byte, for 28-bit total */ *p++ = (unsigned char) ((adjusted_tag_size >> 21) & 0x7fu); *p++ = (unsigned char) ((adjusted_tag_size >> 14) & 0x7fu); *p++ = (unsigned char) ((adjusted_tag_size >> 7) & 0x7fu); *p++ = (unsigned char) (adjusted_tag_size & 0x7fu); /* * NOTE: The remainder of the tag (frames and padding, if any) * are not "unsynchronized" to prevent false MPEG audio headers * from appearing in the bitstream. Why? Well, most players * and utilities know how to skip the ID3 version 2 tag by now * even if they don't read its contents, and it's actually * very unlikely that such a false "sync" pattern would occur * in just the simple text frames added here. */ /* set each frame in tag */ { id3tag_spec *tag = &gfc->tag_spec; if (tag->v2_head != 0) { FrameDataNode *node; for (node = tag->v2_head; node != 0; node = node->nxt) { if (node->fid == ID_COMMENT || node->fid == ID_USER) { p = set_frame_comment(p, node); } else if (isFrameIdMatching(node->fid,FRAME_ID('W',0,0,0))) { p = set_frame_wxxx(p, node); } else { p = set_frame_custom2(p, node); } } } } if (albumart_mime) { p = set_frame_apic(p, albumart_mime, gfc->tag_spec.albumart, gfc->tag_spec.albumart_size); } /* clear any padding bytes */ memset(p, 0, tag_size - (p - buffer)); return tag_size; } } return 0; } int id3tag_write_v2(lame_t gfp) { lame_internal_flags *gfc = 0; if (is_lame_internal_flags_null(gfp)) { return 0; } gfc = gfp->internal_flags; #if 0 debug_tag_spec_flags(gfc, "write v2"); #endif if (test_tag_spec_flags(gfc, V1_ONLY_FLAG)) { return 0; } if (test_tag_spec_flags(gfc, CHANGED_FLAG)) { unsigned char *tag = 0; size_t tag_size, n; n = lame_get_id3v2_tag(gfp, 0, 0); tag = lame_calloc(unsigned char, n); if (tag == 0) { return -1; } tag_size = lame_get_id3v2_tag(gfp, tag, n); if (tag_size > n) { free(tag); return -1; } else { size_t i; /* write tag directly into bitstream at current position */ for (i = 0; i < tag_size; ++i) { add_dummy_byte(gfc, tag[i], 1); } } free(tag); return (int) tag_size; /* ok, tag should not exceed 2GB */ } return 0; } static unsigned char * set_text_field(unsigned char *field, const char *text, size_t size, int pad) { while (size--) { if (text && *text) { *field++ = *text++; } else { *field++ = pad; } } return field; } size_t lame_get_id3v1_tag(lame_t gfp, unsigned char *buffer, size_t size) { size_t const tag_size = 128; lame_internal_flags *gfc; if (gfp == 0) { return 0; } if (size < tag_size) { return tag_size; } gfc = gfp->internal_flags; if (gfc == 0) { return 0; } if (buffer == 0) { return 0; } if (test_tag_spec_flags(gfc, V2_ONLY_FLAG)) { return 0; } if (test_tag_spec_flags(gfc, CHANGED_FLAG)) { unsigned char *p = buffer; int pad = test_tag_spec_flags(gfc, SPACE_V1_FLAG) ? ' ' : 0; char year[5]; /* set tag identifier */ *p++ = 'T'; *p++ = 'A'; *p++ = 'G'; /* set each field in tag */ p = set_text_field(p, gfc->tag_spec.title, 30, pad); p = set_text_field(p, gfc->tag_spec.artist, 30, pad); p = set_text_field(p, gfc->tag_spec.album, 30, pad); sprintf(year, "%d", gfc->tag_spec.year); p = set_text_field(p, gfc->tag_spec.year ? year : NULL, 4, pad); /* limit comment field to 28 bytes if a track is specified */ p = set_text_field(p, gfc->tag_spec.comment, gfc->tag_spec.track_id3v1 ? 28 : 30, pad); if (gfc->tag_spec.track_id3v1) { /* clear the next byte to indicate a version 1.1 tag */ *p++ = 0; *p++ = gfc->tag_spec.track_id3v1; } *p++ = gfc->tag_spec.genre_id3v1; return tag_size; } return 0; } int id3tag_write_v1(lame_t gfp) { lame_internal_flags* gfc = 0; size_t i, n, m; unsigned char tag[128]; if (is_lame_internal_flags_null(gfp)) { return 0; } gfc = gfp->internal_flags; m = sizeof(tag); n = lame_get_id3v1_tag(gfp, tag, m); if (n > m) { return 0; } /* write tag directly into bitstream at current position */ for (i = 0; i < n; ++i) { add_dummy_byte(gfc, tag[i], 1); } return (int) n; /* ok, tag has fixed size of 128 bytes, well below 2GB */ } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/vector/�����������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221264 017410� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/quantize.c��������������������������������������������������������������������000644 �001751 �001751 �00000200352 13144574735 020133� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 quantization * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 1999-2003 Takehiro Tominaga * Copyright (c) 2000-2011 Robert Hegemann * Copyright (c) 2001-2005 Gabriel Bouvigne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: quantize.c,v 1.219 2017/08/02 19:48:05 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "quantize_pvt.h" #include "reservoir.h" #include "bitstream.h" #include "vbrquantize.h" #include "quantize.h" #ifdef HAVE_XMMINTRIN_H #include "vector/lame_intrin.h" #endif /* convert from L/R <-> Mid/Side */ static void ms_convert(III_side_info_t * l3_side, int gr) { int i; for (i = 0; i < 576; ++i) { FLOAT l, r; l = l3_side->tt[gr][0].xr[i]; r = l3_side->tt[gr][1].xr[i]; l3_side->tt[gr][0].xr[i] = (l + r) * (FLOAT) (SQRT2 * 0.5); l3_side->tt[gr][1].xr[i] = (l - r) * (FLOAT) (SQRT2 * 0.5); } } /************************************************************************ * * init_outer_loop() * mt 6/99 * * initializes cod_info, scalefac and xrpow * * returns 0 if all energies in xr are zero, else 1 * ************************************************************************/ static void init_xrpow_core_c(gr_info * const cod_info, FLOAT xrpow[576], int upper, FLOAT * sum) { int i; FLOAT tmp; *sum = 0; for (i = 0; i <= upper; ++i) { tmp = fabs(cod_info->xr[i]); *sum += tmp; xrpow[i] = sqrt(tmp * sqrt(tmp)); if (xrpow[i] > cod_info->xrpow_max) cod_info->xrpow_max = xrpow[i]; } } void init_xrpow_core_init(lame_internal_flags * const gfc) { gfc->init_xrpow_core = init_xrpow_core_c; #if defined(HAVE_XMMINTRIN_H) if (gfc->CPU_features.SSE) gfc->init_xrpow_core = init_xrpow_core_sse; #endif #ifndef HAVE_NASM #ifdef MIN_ARCH_SSE gfc->init_xrpow_core = init_xrpow_core_sse; #endif #endif } static int init_xrpow(lame_internal_flags * gfc, gr_info * const cod_info, FLOAT xrpow[576]) { FLOAT sum = 0; int i; int const upper = cod_info->max_nonzero_coeff; assert(xrpow != NULL); cod_info->xrpow_max = 0; /* check if there is some energy we have to quantize * and calculate xrpow matching our fresh scalefactors */ assert(0 <= upper && upper <= 575); memset(&(xrpow[upper]), 0, (576 - upper) * sizeof(xrpow[0])); gfc->init_xrpow_core(cod_info, xrpow, upper, &sum); /* return 1 if we have something to quantize, else 0 */ if (sum > (FLOAT) 1E-20) { int j = 0; if (gfc->sv_qnt.substep_shaping & 2) j = 1; for (i = 0; i < cod_info->psymax; i++) gfc->sv_qnt.pseudohalf[i] = j; return 1; } memset(&cod_info->l3_enc[0], 0, sizeof(int) * 576); return 0; } /* Gabriel Bouvigne feb/apr 2003 Analog silence detection in partitionned sfb21 or sfb12 for short blocks From top to bottom of sfb, changes to 0 coeffs which are below ath. It stops on the first coeff higher than ath. */ static void psfb21_analogsilence(lame_internal_flags const *gfc, gr_info * const cod_info) { ATH_t const *const ATH = gfc->ATH; FLOAT *const xr = cod_info->xr; if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type, but not SHORT blocks */ int gsfb; int stop = 0; for (gsfb = PSFB21 - 1; gsfb >= 0 && !stop; gsfb--) { int const start = gfc->scalefac_band.psfb21[gsfb]; int const end = gfc->scalefac_band.psfb21[gsfb + 1]; int j; FLOAT ath21; ath21 = athAdjust(ATH->adjust_factor, ATH->psfb21[gsfb], ATH->floor, 0); if (gfc->sv_qnt.longfact[21] > 1e-12f) ath21 *= gfc->sv_qnt.longfact[21]; for (j = end - 1; j >= start; j--) { if (fabs(xr[j]) < ath21) xr[j] = 0; else { stop = 1; break; } } } } else { /*note: short blocks coeffs are reordered */ int block; for (block = 0; block < 3; block++) { int gsfb; int stop = 0; for (gsfb = PSFB12 - 1; gsfb >= 0 && !stop; gsfb--) { int const start = gfc->scalefac_band.s[12] * 3 + (gfc->scalefac_band.s[13] - gfc->scalefac_band.s[12]) * block + (gfc->scalefac_band.psfb12[gsfb] - gfc->scalefac_band.psfb12[0]); int const end = start + (gfc->scalefac_band.psfb12[gsfb + 1] - gfc->scalefac_band.psfb12[gsfb]); int j; FLOAT ath12; ath12 = athAdjust(ATH->adjust_factor, ATH->psfb12[gsfb], ATH->floor, 0); if (gfc->sv_qnt.shortfact[12] > 1e-12f) ath12 *= gfc->sv_qnt.shortfact[12]; for (j = end - 1; j >= start; j--) { if (fabs(xr[j]) < ath12) xr[j] = 0; else { stop = 1; break; } } } } } } static void init_outer_loop(lame_internal_flags const *gfc, gr_info * const cod_info) { SessionConfig_t const *const cfg = &gfc->cfg; int sfb, j; /* initialize fresh cod_info */ cod_info->part2_3_length = 0; cod_info->big_values = 0; cod_info->count1 = 0; cod_info->global_gain = 210; cod_info->scalefac_compress = 0; /* mixed_block_flag, block_type was set in psymodel.c */ cod_info->table_select[0] = 0; cod_info->table_select[1] = 0; cod_info->table_select[2] = 0; cod_info->subblock_gain[0] = 0; cod_info->subblock_gain[1] = 0; cod_info->subblock_gain[2] = 0; cod_info->subblock_gain[3] = 0; /* this one is always 0 */ cod_info->region0_count = 0; cod_info->region1_count = 0; cod_info->preflag = 0; cod_info->scalefac_scale = 0; cod_info->count1table_select = 0; cod_info->part2_length = 0; if (cfg->samplerate_out <= 8000) { cod_info->sfb_lmax = 17; cod_info->sfb_smin = 9; cod_info->psy_lmax = 17; } else { cod_info->sfb_lmax = SBPSY_l; cod_info->sfb_smin = SBPSY_s; cod_info->psy_lmax = gfc->sv_qnt.sfb21_extra ? SBMAX_l : SBPSY_l; } cod_info->psymax = cod_info->psy_lmax; cod_info->sfbmax = cod_info->sfb_lmax; cod_info->sfbdivide = 11; for (sfb = 0; sfb < SBMAX_l; sfb++) { cod_info->width[sfb] = gfc->scalefac_band.l[sfb + 1] - gfc->scalefac_band.l[sfb]; cod_info->window[sfb] = 3; /* which is always 0. */ } if (cod_info->block_type == SHORT_TYPE) { FLOAT ixwork[576]; FLOAT *ix; cod_info->sfb_smin = 0; cod_info->sfb_lmax = 0; if (cod_info->mixed_block_flag) { /* * MPEG-1: sfbs 0-7 long block, 3-12 short blocks * MPEG-2(.5): sfbs 0-5 long block, 3-12 short blocks */ cod_info->sfb_smin = 3; cod_info->sfb_lmax = cfg->mode_gr * 2 + 4; } if (cfg->samplerate_out <= 8000) { cod_info->psymax = cod_info->sfb_lmax + 3 * (9 - cod_info->sfb_smin); cod_info->sfbmax = cod_info->sfb_lmax + 3 * (9 - cod_info->sfb_smin); } else { cod_info->psymax = cod_info->sfb_lmax + 3 * ((gfc->sv_qnt.sfb21_extra ? SBMAX_s : SBPSY_s) - cod_info->sfb_smin); cod_info->sfbmax = cod_info->sfb_lmax + 3 * (SBPSY_s - cod_info->sfb_smin); } cod_info->sfbdivide = cod_info->sfbmax - 18; cod_info->psy_lmax = cod_info->sfb_lmax; /* re-order the short blocks, for more efficient encoding below */ /* By Takehiro TOMINAGA */ /* Within each scalefactor band, data is given for successive time windows, beginning with window 0 and ending with window 2. Within each window, the quantized values are then arranged in order of increasing frequency... */ ix = &cod_info->xr[gfc->scalefac_band.l[cod_info->sfb_lmax]]; memcpy(ixwork, cod_info->xr, 576 * sizeof(FLOAT)); for (sfb = cod_info->sfb_smin; sfb < SBMAX_s; sfb++) { int const start = gfc->scalefac_band.s[sfb]; int const end = gfc->scalefac_band.s[sfb + 1]; int window, l; for (window = 0; window < 3; window++) { for (l = start; l < end; l++) { *ix++ = ixwork[3 * l + window]; } } } j = cod_info->sfb_lmax; for (sfb = cod_info->sfb_smin; sfb < SBMAX_s; sfb++) { cod_info->width[j] = cod_info->width[j + 1] = cod_info->width[j + 2] = gfc->scalefac_band.s[sfb + 1] - gfc->scalefac_band.s[sfb]; cod_info->window[j] = 0; cod_info->window[j + 1] = 1; cod_info->window[j + 2] = 2; j += 3; } } cod_info->count1bits = 0; cod_info->sfb_partition_table = nr_of_sfb_block[0][0]; cod_info->slen[0] = 0; cod_info->slen[1] = 0; cod_info->slen[2] = 0; cod_info->slen[3] = 0; cod_info->max_nonzero_coeff = 575; /* fresh scalefactors are all zero */ memset(cod_info->scalefac, 0, sizeof(cod_info->scalefac)); if (cfg->vbr != vbr_mt && cfg->vbr != vbr_mtrh && cfg->vbr != vbr_abr && cfg->vbr != vbr_off) { psfb21_analogsilence(gfc, cod_info); } } /************************************************************************ * * bin_search_StepSize() * * author/date?? * * binary step size search * used by outer_loop to get a quantizer step size to start with * ************************************************************************/ typedef enum { BINSEARCH_NONE, BINSEARCH_UP, BINSEARCH_DOWN } binsearchDirection_t; static int bin_search_StepSize(lame_internal_flags * const gfc, gr_info * const cod_info, int desired_rate, const int ch, const FLOAT xrpow[576]) { int nBits; int CurrentStep = gfc->sv_qnt.CurrentStep[ch]; int flag_GoneOver = 0; int const start = gfc->sv_qnt.OldValue[ch]; binsearchDirection_t Direction = BINSEARCH_NONE; cod_info->global_gain = start; desired_rate -= cod_info->part2_length; assert(CurrentStep); for (;;) { int step; nBits = count_bits(gfc, xrpow, cod_info, 0); if (CurrentStep == 1 || nBits == desired_rate) break; /* nothing to adjust anymore */ if (nBits > desired_rate) { /* increase Quantize_StepSize */ if (Direction == BINSEARCH_DOWN) flag_GoneOver = 1; if (flag_GoneOver) CurrentStep /= 2; Direction = BINSEARCH_UP; step = CurrentStep; } else { /* decrease Quantize_StepSize */ if (Direction == BINSEARCH_UP) flag_GoneOver = 1; if (flag_GoneOver) CurrentStep /= 2; Direction = BINSEARCH_DOWN; step = -CurrentStep; } cod_info->global_gain += step; if (cod_info->global_gain < 0) { cod_info->global_gain = 0; flag_GoneOver = 1; } if (cod_info->global_gain > 255) { cod_info->global_gain = 255; flag_GoneOver = 1; } } assert(cod_info->global_gain >= 0); assert(cod_info->global_gain < 256); while (nBits > desired_rate && cod_info->global_gain < 255) { cod_info->global_gain++; nBits = count_bits(gfc, xrpow, cod_info, 0); } gfc->sv_qnt.CurrentStep[ch] = (start - cod_info->global_gain >= 4) ? 4 : 2; gfc->sv_qnt.OldValue[ch] = cod_info->global_gain; cod_info->part2_3_length = nBits; return nBits; } /************************************************************************ * * trancate_smallspectrums() * * Takehiro TOMINAGA 2002-07-21 * * trancate smaller nubmers into 0 as long as the noise threshold is allowed. * ************************************************************************/ static int floatcompare(const void *v1, const void *v2) { const FLOAT *const a = v1, *const b = v2; if (*a > *b) return 1; if (*a < *b) return -1; return 0; } static void trancate_smallspectrums(lame_internal_flags const *gfc, gr_info * const gi, const FLOAT * const l3_xmin, FLOAT * const work) { int sfb, j, width; FLOAT distort[SFBMAX]; calc_noise_result dummy; if ((!(gfc->sv_qnt.substep_shaping & 4) && gi->block_type == SHORT_TYPE) || gfc->sv_qnt.substep_shaping & 0x80) return; (void) calc_noise(gi, l3_xmin, distort, &dummy, 0); for (j = 0; j < 576; j++) { FLOAT xr = 0.0; if (gi->l3_enc[j] != 0) xr = fabs(gi->xr[j]); work[j] = xr; } j = 0; sfb = 8; if (gi->block_type == SHORT_TYPE) sfb = 6; do { FLOAT allowedNoise, trancateThreshold; int nsame, start; width = gi->width[sfb]; j += width; if (distort[sfb] >= 1.0) continue; qsort(&work[j - width], width, sizeof(FLOAT), floatcompare); if (EQ(work[j - 1], 0.0)) continue; /* all zero sfb */ allowedNoise = (1.0 - distort[sfb]) * l3_xmin[sfb]; trancateThreshold = 0.0; start = 0; do { FLOAT noise; for (nsame = 1; start + nsame < width; nsame++) if (NEQ(work[start + j - width], work[start + j + nsame - width])) break; noise = work[start + j - width] * work[start + j - width] * nsame; if (allowedNoise < noise) { if (start != 0) trancateThreshold = work[start + j - width - 1]; break; } allowedNoise -= noise; start += nsame; } while (start < width); if (EQ(trancateThreshold, 0.0)) continue; /* printf("%e %e %e\n", */ /* trancateThreshold/l3_xmin[sfb], */ /* trancateThreshold/(l3_xmin[sfb]*start), */ /* trancateThreshold/(l3_xmin[sfb]*(start+width)) */ /* ); */ /* if (trancateThreshold > 1000*l3_xmin[sfb]*start) */ /* trancateThreshold = 1000*l3_xmin[sfb]*start; */ do { if (fabs(gi->xr[j - width]) <= trancateThreshold) gi->l3_enc[j - width] = 0; } while (--width > 0); } while (++sfb < gi->psymax); gi->part2_3_length = noquant_count_bits(gfc, gi, 0); } /************************************************************************* * * loop_break() * * author/date?? * * Function: Returns zero if there is a scalefac which has not been * amplified. Otherwise it returns one. * *************************************************************************/ inline static int loop_break(const gr_info * const cod_info) { int sfb; for (sfb = 0; sfb < cod_info->sfbmax; sfb++) if (cod_info->scalefac[sfb] + cod_info->subblock_gain[cod_info->window[sfb]] == 0) return 0; return 1; } /* mt 5/99: Function: Improved calc_noise for a single channel */ /************************************************************************* * * quant_compare() * * author/date?? * * several different codes to decide which quantization is better * *************************************************************************/ static double penalties(double noise) { return FAST_LOG10(0.368 + 0.632 * noise * noise * noise); } static double get_klemm_noise(const FLOAT * distort, const gr_info * const gi) { int sfb; double klemm_noise = 1E-37; for (sfb = 0; sfb < gi->psymax; sfb++) klemm_noise += penalties(distort[sfb]); return Max(1e-20, klemm_noise); } inline static int quant_compare(const int quant_comp, const calc_noise_result * const best, calc_noise_result * const calc, const gr_info * const gi, const FLOAT * distort) { /* noise is given in decibels (dB) relative to masking thesholds. over_noise: ??? (the previous comment is fully wrong) tot_noise: ??? (the previous comment is fully wrong) max_noise: max quantization noise */ int better; switch (quant_comp) { default: case 9:{ if (best->over_count > 0) { /* there are distorted sfb */ better = calc->over_SSD <= best->over_SSD; if (calc->over_SSD == best->over_SSD) better = calc->bits < best->bits; } else { /* no distorted sfb */ better = ((calc->max_noise < 0) && ((calc->max_noise * 10 + calc->bits) <= (best->max_noise * 10 + best->bits))); } break; } case 0: better = calc->over_count < best->over_count || (calc->over_count == best->over_count && calc->over_noise < best->over_noise) || (calc->over_count == best->over_count && EQ(calc->over_noise, best->over_noise) && calc->tot_noise < best->tot_noise); break; case 8: calc->max_noise = get_klemm_noise(distort, gi); /*lint --fallthrough */ case 1: better = calc->max_noise < best->max_noise; break; case 2: better = calc->tot_noise < best->tot_noise; break; case 3: better = (calc->tot_noise < best->tot_noise) && (calc->max_noise < best->max_noise); break; case 4: better = (calc->max_noise <= 0.0 && best->max_noise > 0.2) || (calc->max_noise <= 0.0 && best->max_noise < 0.0 && best->max_noise > calc->max_noise - 0.2 && calc->tot_noise < best->tot_noise) || (calc->max_noise <= 0.0 && best->max_noise > 0.0 && best->max_noise > calc->max_noise - 0.2 && calc->tot_noise < best->tot_noise + best->over_noise) || (calc->max_noise > 0.0 && best->max_noise > -0.05 && best->max_noise > calc->max_noise - 0.1 && calc->tot_noise + calc->over_noise < best->tot_noise + best->over_noise) || (calc->max_noise > 0.0 && best->max_noise > -0.1 && best->max_noise > calc->max_noise - 0.15 && calc->tot_noise + calc->over_noise + calc->over_noise < best->tot_noise + best->over_noise + best->over_noise); break; case 5: better = calc->over_noise < best->over_noise || (EQ(calc->over_noise, best->over_noise) && calc->tot_noise < best->tot_noise); break; case 6: better = calc->over_noise < best->over_noise || (EQ(calc->over_noise, best->over_noise) && (calc->max_noise < best->max_noise || (EQ(calc->max_noise, best->max_noise) && calc->tot_noise <= best->tot_noise) )); break; case 7: better = calc->over_count < best->over_count || calc->over_noise < best->over_noise; break; } if (best->over_count == 0) { /* If no distorted bands, only use this quantization if it is better, and if it uses less bits. Unfortunately, part2_3_length is sometimes a poor estimator of the final size at low bitrates. */ better = better && calc->bits < best->bits; } return better; } /************************************************************************* * * amp_scalefac_bands() * * author/date?? * * Amplify the scalefactor bands that violate the masking threshold. * See ISO 11172-3 Section C.1.5.4.3.5 * * distort[] = noise/masking * distort[] > 1 ==> noise is not masked * distort[] < 1 ==> noise is masked * max_dist = maximum value of distort[] * * Three algorithms: * noise_shaping_amp * 0 Amplify all bands with distort[]>1. * * 1 Amplify all bands with distort[] >= max_dist^(.5); * ( 50% in the db scale) * * 2 Amplify first band with distort[] >= max_dist; * * * For algorithms 0 and 1, if max_dist < 1, then amplify all bands * with distort[] >= .95*max_dist. This is to make sure we always * amplify at least one band. * * *************************************************************************/ static void amp_scalefac_bands(lame_internal_flags * gfc, gr_info * const cod_info, FLOAT const *distort, FLOAT xrpow[576], int bRefine) { SessionConfig_t const *const cfg = &gfc->cfg; int j, sfb; FLOAT ifqstep34, trigger; int noise_shaping_amp; if (cod_info->scalefac_scale == 0) { ifqstep34 = 1.29683955465100964055; /* 2**(.75*.5) */ } else { ifqstep34 = 1.68179283050742922612; /* 2**(.75*1) */ } /* compute maximum value of distort[] */ trigger = 0; for (sfb = 0; sfb < cod_info->sfbmax; sfb++) { if (trigger < distort[sfb]) trigger = distort[sfb]; } noise_shaping_amp = cfg->noise_shaping_amp; if (noise_shaping_amp == 3) { if (bRefine == 1) noise_shaping_amp = 2; else noise_shaping_amp = 1; } switch (noise_shaping_amp) { case 2: /* amplify exactly 1 band */ break; case 1: /* amplify bands within 50% of max (on db scale) */ if (trigger > 1.0) trigger = pow(trigger, .5); else trigger *= .95; break; case 0: default: /* ISO algorithm. amplify all bands with distort>1 */ if (trigger > 1.0) trigger = 1.0; else trigger *= .95; break; } j = 0; for (sfb = 0; sfb < cod_info->sfbmax; sfb++) { int const width = cod_info->width[sfb]; int l; j += width; if (distort[sfb] < trigger) continue; if (gfc->sv_qnt.substep_shaping & 2) { gfc->sv_qnt.pseudohalf[sfb] = !gfc->sv_qnt.pseudohalf[sfb]; if (!gfc->sv_qnt.pseudohalf[sfb] && cfg->noise_shaping_amp == 2) return; } cod_info->scalefac[sfb]++; for (l = -width; l < 0; l++) { xrpow[j + l] *= ifqstep34; if (xrpow[j + l] > cod_info->xrpow_max) cod_info->xrpow_max = xrpow[j + l]; } if (cfg->noise_shaping_amp == 2) return; } } /************************************************************************* * * inc_scalefac_scale() * * Takehiro Tominaga 2000-xx-xx * * turns on scalefac scale and adjusts scalefactors * *************************************************************************/ static void inc_scalefac_scale(gr_info * const cod_info, FLOAT xrpow[576]) { int l, j, sfb; const FLOAT ifqstep34 = 1.29683955465100964055; j = 0; for (sfb = 0; sfb < cod_info->sfbmax; sfb++) { int const width = cod_info->width[sfb]; int s = cod_info->scalefac[sfb]; if (cod_info->preflag) s += pretab[sfb]; j += width; if (s & 1) { s++; for (l = -width; l < 0; l++) { xrpow[j + l] *= ifqstep34; if (xrpow[j + l] > cod_info->xrpow_max) cod_info->xrpow_max = xrpow[j + l]; } } cod_info->scalefac[sfb] = s >> 1; } cod_info->preflag = 0; cod_info->scalefac_scale = 1; } /************************************************************************* * * inc_subblock_gain() * * Takehiro Tominaga 2000-xx-xx * * increases the subblock gain and adjusts scalefactors * *************************************************************************/ static int inc_subblock_gain(const lame_internal_flags * const gfc, gr_info * const cod_info, FLOAT xrpow[576]) { int sfb, window; int *const scalefac = cod_info->scalefac; /* subbloc_gain can't do anything in the long block region */ for (sfb = 0; sfb < cod_info->sfb_lmax; sfb++) { if (scalefac[sfb] >= 16) return 1; } for (window = 0; window < 3; window++) { int s1, s2, l, j; s1 = s2 = 0; for (sfb = cod_info->sfb_lmax + window; sfb < cod_info->sfbdivide; sfb += 3) { if (s1 < scalefac[sfb]) s1 = scalefac[sfb]; } for (; sfb < cod_info->sfbmax; sfb += 3) { if (s2 < scalefac[sfb]) s2 = scalefac[sfb]; } if (s1 < 16 && s2 < 8) continue; if (cod_info->subblock_gain[window] >= 7) return 1; /* even though there is no scalefactor for sfb12 * subblock gain affects upper frequencies too, that's why * we have to go up to SBMAX_s */ cod_info->subblock_gain[window]++; j = gfc->scalefac_band.l[cod_info->sfb_lmax]; for (sfb = cod_info->sfb_lmax + window; sfb < cod_info->sfbmax; sfb += 3) { FLOAT amp; int const width = cod_info->width[sfb]; int s = scalefac[sfb]; assert(s >= 0); s = s - (4 >> cod_info->scalefac_scale); if (s >= 0) { scalefac[sfb] = s; j += width * 3; continue; } scalefac[sfb] = 0; { int const gain = 210 + (s << (cod_info->scalefac_scale + 1)); amp = IPOW20(gain); } j += width * (window + 1); for (l = -width; l < 0; l++) { xrpow[j + l] *= amp; if (xrpow[j + l] > cod_info->xrpow_max) cod_info->xrpow_max = xrpow[j + l]; } j += width * (3 - window - 1); } { FLOAT const amp = IPOW20(202); j += cod_info->width[sfb] * (window + 1); for (l = -cod_info->width[sfb]; l < 0; l++) { xrpow[j + l] *= amp; if (xrpow[j + l] > cod_info->xrpow_max) cod_info->xrpow_max = xrpow[j + l]; } } } return 0; } /******************************************************************** * * balance_noise() * * Takehiro Tominaga /date?? * Robert Hegemann 2000-09-06: made a function of it * * amplifies scalefactor bands, * - if all are already amplified returns 0 * - if some bands are amplified too much: * * try to increase scalefac_scale * * if already scalefac_scale was set * try on short blocks to increase subblock gain * ********************************************************************/ inline static int balance_noise(lame_internal_flags * gfc, gr_info * const cod_info, FLOAT const *distort, FLOAT xrpow[576], int bRefine) { SessionConfig_t const *const cfg = &gfc->cfg; int status; amp_scalefac_bands(gfc, cod_info, distort, xrpow, bRefine); /* check to make sure we have not amplified too much * loop_break returns 0 if there is an unamplified scalefac * scale_bitcount returns 0 if no scalefactors are too large */ status = loop_break(cod_info); if (status) return 0; /* all bands amplified */ /* not all scalefactors have been amplified. so these * scalefacs are possibly valid. encode them: */ status = scale_bitcount(gfc, cod_info); if (!status) return 1; /* amplified some bands not exceeding limits */ /* some scalefactors are too large. * lets try setting scalefac_scale=1 */ if (cfg->noise_shaping > 1) { memset(&gfc->sv_qnt.pseudohalf[0], 0, sizeof(gfc->sv_qnt.pseudohalf)); if (!cod_info->scalefac_scale) { inc_scalefac_scale(cod_info, xrpow); status = 0; } else { if (cod_info->block_type == SHORT_TYPE && cfg->subblock_gain > 0) { status = inc_subblock_gain(gfc, cod_info, xrpow) || loop_break(cod_info); } } } if (!status) { status = scale_bitcount(gfc, cod_info); } return !status; } /************************************************************************ * * outer_loop () * * Function: The outer iteration loop controls the masking conditions * of all scalefactorbands. It computes the best scalefac and * global gain. This module calls the inner iteration loop * * mt 5/99 completely rewritten to allow for bit reservoir control, * mid/side channels with L/R or mid/side masking thresholds, * and chooses best quantization instead of last quantization when * no distortion free quantization can be found. * * added VBR support mt 5/99 * * some code shuffle rh 9/00 ************************************************************************/ static int outer_loop(lame_internal_flags * gfc, gr_info * const cod_info, const FLOAT * const l3_xmin, /* allowed distortion */ FLOAT xrpow[576], /* coloured magnitudes of spectral */ const int ch, const int targ_bits) { /* maximum allowed bits */ SessionConfig_t const *const cfg = &gfc->cfg; gr_info cod_info_w; FLOAT save_xrpow[576]; FLOAT distort[SFBMAX]; calc_noise_result best_noise_info; int huff_bits; int better; int age; calc_noise_data prev_noise; int best_part2_3_length = 9999999; int bEndOfSearch = 0; int bRefine = 0; int best_ggain_pass1 = 0; (void) bin_search_StepSize(gfc, cod_info, targ_bits, ch, xrpow); if (!cfg->noise_shaping) /* fast mode, no noise shaping, we are ready */ return 100; /* default noise_info.over_count */ memset(&prev_noise, 0, sizeof(calc_noise_data)); /* compute the distortion in this quantization */ /* coefficients and thresholds both l/r (or both mid/side) */ (void) calc_noise(cod_info, l3_xmin, distort, &best_noise_info, &prev_noise); best_noise_info.bits = cod_info->part2_3_length; cod_info_w = *cod_info; age = 0; /* if (cfg->vbr == vbr_rh || cfg->vbr == vbr_mtrh) */ memcpy(save_xrpow, xrpow, sizeof(FLOAT) * 576); while (!bEndOfSearch) { /* BEGIN MAIN LOOP */ do { calc_noise_result noise_info; int search_limit; int maxggain = 255; /* When quantization with no distorted bands is found, * allow up to X new unsuccesful tries in serial. This * gives us more possibilities for different quant_compare modes. * Much more than 3 makes not a big difference, it is only slower. */ if (gfc->sv_qnt.substep_shaping & 2) { search_limit = 20; } else { search_limit = 3; } /* Check if the last scalefactor band is distorted. * in VBR mode we can't get rid of the distortion, so quit now * and VBR mode will try again with more bits. * (makes a 10% speed increase, the files I tested were * binary identical, 2000/05/20 Robert Hegemann) * distort[] > 1 means noise > allowed noise */ if (gfc->sv_qnt.sfb21_extra) { if (distort[cod_info_w.sfbmax] > 1.0) break; if (cod_info_w.block_type == SHORT_TYPE && (distort[cod_info_w.sfbmax + 1] > 1.0 || distort[cod_info_w.sfbmax + 2] > 1.0)) break; } /* try a new scalefactor conbination on cod_info_w */ if (balance_noise(gfc, &cod_info_w, distort, xrpow, bRefine) == 0) break; if (cod_info_w.scalefac_scale) maxggain = 254; /* inner_loop starts with the initial quantization step computed above * and slowly increases until the bits < huff_bits. * Thus it is important not to start with too large of an inital * quantization step. Too small is ok, but inner_loop will take longer */ huff_bits = targ_bits - cod_info_w.part2_length; if (huff_bits <= 0) break; /* increase quantizer stepsize until needed bits are below maximum */ while ((cod_info_w.part2_3_length = count_bits(gfc, xrpow, &cod_info_w, &prev_noise)) > huff_bits && cod_info_w.global_gain <= maxggain) cod_info_w.global_gain++; if (cod_info_w.global_gain > maxggain) break; if (best_noise_info.over_count == 0) { while ((cod_info_w.part2_3_length = count_bits(gfc, xrpow, &cod_info_w, &prev_noise)) > best_part2_3_length && cod_info_w.global_gain <= maxggain) cod_info_w.global_gain++; if (cod_info_w.global_gain > maxggain) break; } /* compute the distortion in this quantization */ (void) calc_noise(&cod_info_w, l3_xmin, distort, &noise_info, &prev_noise); noise_info.bits = cod_info_w.part2_3_length; /* check if this quantization is better * than our saved quantization */ if (cod_info->block_type != SHORT_TYPE) /* NORM, START or STOP type */ better = cfg->quant_comp; else better = cfg->quant_comp_short; better = quant_compare(better, &best_noise_info, &noise_info, &cod_info_w, distort); /* save data so we can restore this quantization later */ if (better) { best_part2_3_length = cod_info->part2_3_length; best_noise_info = noise_info; *cod_info = cod_info_w; age = 0; /* save data so we can restore this quantization later */ /*if (cfg->vbr == vbr_rh || cfg->vbr == vbr_mtrh) */ { /* store for later reuse */ memcpy(save_xrpow, xrpow, sizeof(FLOAT) * 576); } } else { /* early stop? */ if (cfg->full_outer_loop == 0) { if (++age > search_limit && best_noise_info.over_count == 0) break; if ((cfg->noise_shaping_amp == 3) && bRefine && age > 30) break; if ((cfg->noise_shaping_amp == 3) && bRefine && (cod_info_w.global_gain - best_ggain_pass1) > 15) break; } } } while ((cod_info_w.global_gain + cod_info_w.scalefac_scale) < 255); if (cfg->noise_shaping_amp == 3) { if (!bRefine) { /* refine search */ cod_info_w = *cod_info; memcpy(xrpow, save_xrpow, sizeof(FLOAT) * 576); age = 0; best_ggain_pass1 = cod_info_w.global_gain; bRefine = 1; } else { /* search already refined, stop */ bEndOfSearch = 1; } } else { bEndOfSearch = 1; } } assert((cod_info->global_gain + cod_info->scalefac_scale) <= 255); /* finish up */ if (cfg->vbr == vbr_rh || cfg->vbr == vbr_mtrh || cfg->vbr == vbr_mt) /* restore for reuse on next try */ memcpy(xrpow, save_xrpow, sizeof(FLOAT) * 576); /* do the 'substep shaping' */ else if (gfc->sv_qnt.substep_shaping & 1) trancate_smallspectrums(gfc, cod_info, l3_xmin, xrpow); return best_noise_info.over_count; } /************************************************************************ * * iteration_finish_one() * * Robert Hegemann 2000-09-06 * * update reservoir status after FINAL quantization/bitrate * ************************************************************************/ static void iteration_finish_one(lame_internal_flags * gfc, int gr, int ch) { SessionConfig_t const *const cfg = &gfc->cfg; III_side_info_t *const l3_side = &gfc->l3_side; gr_info *const cod_info = &l3_side->tt[gr][ch]; /* try some better scalefac storage */ best_scalefac_store(gfc, gr, ch, l3_side); /* best huffman_divide may save some bits too */ if (cfg->use_best_huffman == 1) best_huffman_divide(gfc, cod_info); /* update reservoir status after FINAL quantization/bitrate */ ResvAdjust(gfc, cod_info); } /********************************************************************* * * VBR_encode_granule() * * 2000-09-04 Robert Hegemann * *********************************************************************/ static void VBR_encode_granule(lame_internal_flags * gfc, gr_info * const cod_info, const FLOAT * const l3_xmin, /* allowed distortion of the scalefactor */ FLOAT xrpow[576], /* coloured magnitudes of spectral values */ const int ch, int min_bits, int max_bits) { gr_info bst_cod_info; FLOAT bst_xrpow[576]; int const Max_bits = max_bits; int real_bits = max_bits + 1; int this_bits = (max_bits + min_bits) / 2; int dbits, over, found = 0; int const sfb21_extra = gfc->sv_qnt.sfb21_extra; assert(Max_bits <= MAX_BITS_PER_CHANNEL); memset(bst_cod_info.l3_enc, 0, sizeof(bst_cod_info.l3_enc)); /* search within round about 40 bits of optimal */ do { assert(this_bits >= min_bits); assert(this_bits <= max_bits); assert(min_bits <= max_bits); if (this_bits > Max_bits - 42) gfc->sv_qnt.sfb21_extra = 0; else gfc->sv_qnt.sfb21_extra = sfb21_extra; over = outer_loop(gfc, cod_info, l3_xmin, xrpow, ch, this_bits); /* is quantization as good as we are looking for ? * in this case: is no scalefactor band distorted? */ if (over <= 0) { found = 1; /* now we know it can be done with "real_bits" * and maybe we can skip some iterations */ real_bits = cod_info->part2_3_length; /* store best quantization so far */ bst_cod_info = *cod_info; memcpy(bst_xrpow, xrpow, sizeof(FLOAT) * 576); /* try with fewer bits */ max_bits = real_bits - 32; dbits = max_bits - min_bits; this_bits = (max_bits + min_bits) / 2; } else { /* try with more bits */ min_bits = this_bits + 32; dbits = max_bits - min_bits; this_bits = (max_bits + min_bits) / 2; if (found) { found = 2; /* start again with best quantization so far */ *cod_info = bst_cod_info; memcpy(xrpow, bst_xrpow, sizeof(FLOAT) * 576); } } } while (dbits > 12); gfc->sv_qnt.sfb21_extra = sfb21_extra; /* found=0 => nothing found, use last one * found=1 => we just found the best and left the loop * found=2 => we restored a good one and have now l3_enc to restore too */ if (found == 2) { memcpy(cod_info->l3_enc, bst_cod_info.l3_enc, sizeof(int) * 576); } assert(cod_info->part2_3_length <= Max_bits); } /************************************************************************ * * get_framebits() * * Robert Hegemann 2000-09-05 * * calculates * * how many bits are available for analog silent granules * * how many bits to use for the lowest allowed bitrate * * how many bits each bitrate would provide * ************************************************************************/ static void get_framebits(lame_internal_flags * gfc, int frameBits[15]) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; int bitsPerFrame, i; /* always use at least this many bits per granule per channel * unless we detect analog silence, see below */ eov->bitrate_index = cfg->vbr_min_bitrate_index; bitsPerFrame = getframebits(gfc); /* bits for analog silence */ eov->bitrate_index = 1; bitsPerFrame = getframebits(gfc); for (i = 1; i <= cfg->vbr_max_bitrate_index; i++) { eov->bitrate_index = i; frameBits[i] = ResvFrameBegin(gfc, &bitsPerFrame); } } /********************************************************************* * * VBR_prepare() * * 2000-09-04 Robert Hegemann * * * converts LR to MS coding when necessary * * calculates allowed/adjusted quantization noise amounts * * detects analog silent frames * * some remarks: * - lower masking depending on Quality setting * - quality control together with adjusted ATH MDCT scaling * on lower quality setting allocate more noise from * ATH masking, and on higher quality setting allocate * less noise from ATH masking. * - experiments show that going more than 2dB over GPSYCHO's * limits ends up in very annoying artefacts * *********************************************************************/ /* RH: this one needs to be overhauled sometime */ static int VBR_old_prepare(lame_internal_flags * gfc, const FLOAT pe[2][2], FLOAT const ms_ener_ratio[2], const III_psy_ratio ratio[2][2], FLOAT l3_xmin[2][2][SFBMAX], int frameBits[16], int min_bits[2][2], int max_bits[2][2], int bands[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; FLOAT masking_lower_db, adjust = 0.0; int gr, ch; int analog_silence = 1; int avg, mxb, bits = 0; eov->bitrate_index = cfg->vbr_max_bitrate_index; avg = ResvFrameBegin(gfc, &avg) / cfg->mode_gr; get_framebits(gfc, frameBits); for (gr = 0; gr < cfg->mode_gr; gr++) { mxb = on_pe(gfc, pe, max_bits[gr], avg, gr, 0); if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { ms_convert(&gfc->l3_side, gr); reduce_side(max_bits[gr], ms_ener_ratio[gr], avg, mxb); } for (ch = 0; ch < cfg->channels_out; ++ch) { gr_info *const cod_info = &gfc->l3_side.tt[gr][ch]; if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type */ adjust = 1.28 / (1 + exp(3.5 - pe[gr][ch] / 300.)) - 0.05; masking_lower_db = gfc->sv_qnt.mask_adjust - adjust; } else { adjust = 2.56 / (1 + exp(3.5 - pe[gr][ch] / 300.)) - 0.14; masking_lower_db = gfc->sv_qnt.mask_adjust_short - adjust; } gfc->sv_qnt.masking_lower = pow(10.0, masking_lower_db * 0.1); init_outer_loop(gfc, cod_info); bands[gr][ch] = calc_xmin(gfc, &ratio[gr][ch], cod_info, l3_xmin[gr][ch]); if (bands[gr][ch]) analog_silence = 0; min_bits[gr][ch] = 126; bits += max_bits[gr][ch]; } } for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { if (bits > frameBits[cfg->vbr_max_bitrate_index] && bits > 0) { max_bits[gr][ch] *= frameBits[cfg->vbr_max_bitrate_index]; max_bits[gr][ch] /= bits; } if (min_bits[gr][ch] > max_bits[gr][ch]) min_bits[gr][ch] = max_bits[gr][ch]; } /* for ch */ } /* for gr */ return analog_silence; } static void bitpressure_strategy(lame_internal_flags const *gfc, FLOAT l3_xmin[2][2][SFBMAX], const int min_bits[2][2], int max_bits[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; int gr, ch, sfb; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info const *const gi = &gfc->l3_side.tt[gr][ch]; FLOAT *pxmin = l3_xmin[gr][ch]; for (sfb = 0; sfb < gi->psy_lmax; sfb++) *pxmin++ *= 1. + .029 * sfb * sfb / SBMAX_l / SBMAX_l; if (gi->block_type == SHORT_TYPE) { for (sfb = gi->sfb_smin; sfb < SBMAX_s; sfb++) { *pxmin++ *= 1. + .029 * sfb * sfb / SBMAX_s / SBMAX_s; *pxmin++ *= 1. + .029 * sfb * sfb / SBMAX_s / SBMAX_s; *pxmin++ *= 1. + .029 * sfb * sfb / SBMAX_s / SBMAX_s; } } max_bits[gr][ch] = Max(min_bits[gr][ch], 0.9 * max_bits[gr][ch]); } } } /************************************************************************ * * VBR_iteration_loop() * * tries to find out how many bits are needed for each granule and channel * to get an acceptable quantization. An appropriate bitrate will then be * choosed for quantization. rh 8/99 * * Robert Hegemann 2000-09-06 rewrite * ************************************************************************/ void VBR_old_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ener_ratio[2], const III_psy_ratio ratio[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; FLOAT l3_xmin[2][2][SFBMAX]; FLOAT xrpow[576]; int bands[2][2]; int frameBits[15]; int used_bits; int bits; int min_bits[2][2], max_bits[2][2]; int mean_bits; int ch, gr, analog_silence; III_side_info_t *const l3_side = &gfc->l3_side; analog_silence = VBR_old_prepare(gfc, pe, ms_ener_ratio, ratio, l3_xmin, frameBits, min_bits, max_bits, bands); /*---------------------------------*/ for (;;) { /* quantize granules with lowest possible number of bits */ used_bits = 0; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { int ret; gr_info *const cod_info = &l3_side->tt[gr][ch]; /* init_outer_loop sets up cod_info, scalefac and xrpow */ ret = init_xrpow(gfc, cod_info, xrpow); if (ret == 0 || max_bits[gr][ch] == 0) { /* xr contains no energy * l3_enc, our encoding data, will be quantized to zero */ continue; /* with next channel */ } VBR_encode_granule(gfc, cod_info, l3_xmin[gr][ch], xrpow, ch, min_bits[gr][ch], max_bits[gr][ch]); /* do the 'substep shaping' */ if (gfc->sv_qnt.substep_shaping & 1) { trancate_smallspectrums(gfc, &l3_side->tt[gr][ch], l3_xmin[gr][ch], xrpow); } ret = cod_info->part2_3_length + cod_info->part2_length; used_bits += ret; } /* for ch */ } /* for gr */ /* find lowest bitrate able to hold used bits */ if (analog_silence && !cfg->enforce_min_bitrate) /* we detected analog silence and the user did not specify * any hard framesize limit, so start with smallest possible frame */ eov->bitrate_index = 1; else eov->bitrate_index = cfg->vbr_min_bitrate_index; for (; eov->bitrate_index < cfg->vbr_max_bitrate_index; eov->bitrate_index++) { if (used_bits <= frameBits[eov->bitrate_index]) break; } bits = ResvFrameBegin(gfc, &mean_bits); if (used_bits <= bits) break; bitpressure_strategy(gfc, l3_xmin, (const int (*)[2])min_bits, max_bits); } /* breaks adjusted */ /*--------------------------------------*/ for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { iteration_finish_one(gfc, gr, ch); } /* for ch */ } /* for gr */ ResvFrameEnd(gfc, mean_bits); } static int VBR_new_prepare(lame_internal_flags * gfc, const FLOAT pe[2][2], const III_psy_ratio ratio[2][2], FLOAT l3_xmin[2][2][SFBMAX], int frameBits[16], int max_bits[2][2], int* max_resv) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; int gr, ch; int analog_silence = 1; int avg, bits = 0; int maximum_framebits; if (!cfg->free_format) { eov->bitrate_index = cfg->vbr_max_bitrate_index; (void) ResvFrameBegin(gfc, &avg); *max_resv = gfc->sv_enc.ResvMax; get_framebits(gfc, frameBits); maximum_framebits = frameBits[cfg->vbr_max_bitrate_index]; } else { eov->bitrate_index = 0; maximum_framebits = ResvFrameBegin(gfc, &avg); frameBits[0] = maximum_framebits; *max_resv = gfc->sv_enc.ResvMax; } for (gr = 0; gr < cfg->mode_gr; gr++) { (void) on_pe(gfc, pe, max_bits[gr], avg, gr, 0); if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { ms_convert(&gfc->l3_side, gr); } for (ch = 0; ch < cfg->channels_out; ++ch) { gr_info *const cod_info = &gfc->l3_side.tt[gr][ch]; gfc->sv_qnt.masking_lower = pow(10.0, gfc->sv_qnt.mask_adjust * 0.1); init_outer_loop(gfc, cod_info); if (0 != calc_xmin(gfc, &ratio[gr][ch], cod_info, l3_xmin[gr][ch])) analog_silence = 0; bits += max_bits[gr][ch]; } } for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { if (bits > maximum_framebits && bits > 0) { max_bits[gr][ch] *= maximum_framebits; max_bits[gr][ch] /= bits; } } /* for ch */ } /* for gr */ if (analog_silence) { *max_resv = 0; } return analog_silence; } void VBR_new_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ener_ratio[2], const III_psy_ratio ratio[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; FLOAT l3_xmin[2][2][SFBMAX]; FLOAT xrpow[2][2][576]; int frameBits[15]; int used_bits; int max_bits[2][2]; int ch, gr, analog_silence, pad; III_side_info_t *const l3_side = &gfc->l3_side; const FLOAT (*const_l3_xmin)[2][SFBMAX] = (const FLOAT (*)[2][SFBMAX])l3_xmin; const FLOAT (*const_xrpow)[2][576] = (const FLOAT (*)[2][576])xrpow; const int (*const_max_bits)[2] = (const int (*)[2])max_bits; (void) ms_ener_ratio; /* not used */ memset(xrpow, 0, sizeof(xrpow)); analog_silence = VBR_new_prepare(gfc, pe, ratio, l3_xmin, frameBits, max_bits, &pad); for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info *const cod_info = &l3_side->tt[gr][ch]; /* init_outer_loop sets up cod_info, scalefac and xrpow */ if (0 == init_xrpow(gfc, cod_info, xrpow[gr][ch])) { max_bits[gr][ch] = 0; /* silent granule needs no bits */ } } /* for ch */ } /* for gr */ /* quantize granules with lowest possible number of bits */ used_bits = VBR_encode_frame(gfc, const_xrpow, const_l3_xmin, const_max_bits); if (!cfg->free_format) { int i, j; /* find lowest bitrate able to hold used bits */ if (analog_silence && !cfg->enforce_min_bitrate) { /* we detected analog silence and the user did not specify * any hard framesize limit, so start with smallest possible frame */ i = 1; } else { i = cfg->vbr_min_bitrate_index; } for (; i < cfg->vbr_max_bitrate_index; i++) { if (used_bits <= frameBits[i]) break; } if (i > cfg->vbr_max_bitrate_index) { i = cfg->vbr_max_bitrate_index; } if (pad > 0) { for (j = cfg->vbr_max_bitrate_index; j > i; --j) { int const unused = frameBits[j] - used_bits; if (unused <= pad) break; } eov->bitrate_index = j; } else { eov->bitrate_index = i; } } else { #if 0 static int mmm = 0; int fff = getFramesize_kbps(gfc, used_bits); int hhh = getFramesize_kbps(gfc, MAX_BITS_PER_GRANULE * cfg->mode_gr); if (mmm < fff) mmm = fff; printf("demand=%3d kbps max=%3d kbps limit=%3d kbps\n", fff, mmm, hhh); #endif eov->bitrate_index = 0; } if (used_bits <= frameBits[eov->bitrate_index]) { /* update Reservoire status */ int mean_bits, fullframebits; fullframebits = ResvFrameBegin(gfc, &mean_bits); assert(used_bits <= fullframebits); for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { gr_info const *const cod_info = &l3_side->tt[gr][ch]; ResvAdjust(gfc, cod_info); } } ResvFrameEnd(gfc, mean_bits); } else { /* SHOULD NOT HAPPEN INTERNAL ERROR */ ERRORF(gfc, "INTERNAL ERROR IN VBR NEW CODE, please send bug report\n"); exit(-1); } } /******************************************************************** * * calc_target_bits() * * calculates target bits for ABR encoding * * mt 2000/05/31 * ********************************************************************/ static void calc_target_bits(lame_internal_flags * gfc, const FLOAT pe[2][2], FLOAT const ms_ener_ratio[2], int targ_bits[2][2], int *analog_silence_bits, int *max_frame_bits) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; III_side_info_t const *const l3_side = &gfc->l3_side; FLOAT res_factor; int gr, ch, totbits, mean_bits; int framesize = 576 * cfg->mode_gr; eov->bitrate_index = cfg->vbr_max_bitrate_index; *max_frame_bits = ResvFrameBegin(gfc, &mean_bits); eov->bitrate_index = 1; mean_bits = getframebits(gfc) - cfg->sideinfo_len * 8; *analog_silence_bits = mean_bits / (cfg->mode_gr * cfg->channels_out); mean_bits = cfg->vbr_avg_bitrate_kbps * framesize * 1000; if (gfc->sv_qnt.substep_shaping & 1) mean_bits *= 1.09; mean_bits /= cfg->samplerate_out; mean_bits -= cfg->sideinfo_len * 8; mean_bits /= (cfg->mode_gr * cfg->channels_out); /* res_factor is the percentage of the target bitrate that should be used on average. the remaining bits are added to the bitreservoir and used for difficult to encode frames. Since we are tracking the average bitrate, we should adjust res_factor "on the fly", increasing it if the average bitrate is greater than the requested bitrate, and decreasing it otherwise. Reasonable ranges are from .9 to 1.0 Until we get the above suggestion working, we use the following tuning: compression ratio res_factor 5.5 (256kbps) 1.0 no need for bitreservoir 11 (128kbps) .93 7% held for reservoir with linear interpolation for other values. */ res_factor = .93 + .07 * (11.0 - cfg->compression_ratio) / (11.0 - 5.5); if (res_factor < .90) res_factor = .90; if (res_factor > 1.00) res_factor = 1.00; for (gr = 0; gr < cfg->mode_gr; gr++) { int sum = 0; for (ch = 0; ch < cfg->channels_out; ch++) { targ_bits[gr][ch] = res_factor * mean_bits; if (pe[gr][ch] > 700) { int add_bits = (pe[gr][ch] - 700) / 1.4; gr_info const *const cod_info = &l3_side->tt[gr][ch]; targ_bits[gr][ch] = res_factor * mean_bits; /* short blocks use a little extra, no matter what the pe */ if (cod_info->block_type == SHORT_TYPE) { if (add_bits < mean_bits / 2) add_bits = mean_bits / 2; } /* at most increase bits by 1.5*average */ if (add_bits > mean_bits * 3 / 2) add_bits = mean_bits * 3 / 2; else if (add_bits < 0) add_bits = 0; targ_bits[gr][ch] += add_bits; } if (targ_bits[gr][ch] > MAX_BITS_PER_CHANNEL) { targ_bits[gr][ch] = MAX_BITS_PER_CHANNEL; } sum += targ_bits[gr][ch]; } /* for ch */ if (sum > MAX_BITS_PER_GRANULE) { for (ch = 0; ch < cfg->channels_out; ++ch) { targ_bits[gr][ch] *= MAX_BITS_PER_GRANULE; targ_bits[gr][ch] /= sum; } } } /* for gr */ if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) for (gr = 0; gr < cfg->mode_gr; gr++) { reduce_side(targ_bits[gr], ms_ener_ratio[gr], mean_bits * cfg->channels_out, MAX_BITS_PER_GRANULE); } /* sum target bits */ totbits = 0; for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { if (targ_bits[gr][ch] > MAX_BITS_PER_CHANNEL) targ_bits[gr][ch] = MAX_BITS_PER_CHANNEL; totbits += targ_bits[gr][ch]; } } /* repartion target bits if needed */ if (totbits > *max_frame_bits && totbits > 0) { for (gr = 0; gr < cfg->mode_gr; gr++) { for (ch = 0; ch < cfg->channels_out; ch++) { targ_bits[gr][ch] *= *max_frame_bits; targ_bits[gr][ch] /= totbits; } } } } /******************************************************************** * * ABR_iteration_loop() * * encode a frame with a disired average bitrate * * mt 2000/05/31 * ********************************************************************/ void ABR_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ener_ratio[2], const III_psy_ratio ratio[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t *const eov = &gfc->ov_enc; FLOAT l3_xmin[SFBMAX]; FLOAT xrpow[576]; int targ_bits[2][2]; int mean_bits, max_frame_bits; int ch, gr, ath_over; int analog_silence_bits; gr_info *cod_info; III_side_info_t *const l3_side = &gfc->l3_side; mean_bits = 0; calc_target_bits(gfc, pe, ms_ener_ratio, targ_bits, &analog_silence_bits, &max_frame_bits); /* encode granules */ for (gr = 0; gr < cfg->mode_gr; gr++) { if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { ms_convert(&gfc->l3_side, gr); } for (ch = 0; ch < cfg->channels_out; ch++) { FLOAT adjust, masking_lower_db; cod_info = &l3_side->tt[gr][ch]; if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type */ /* adjust = 1.28/(1+exp(3.5-pe[gr][ch]/300.))-0.05; */ adjust = 0; masking_lower_db = gfc->sv_qnt.mask_adjust - adjust; } else { /* adjust = 2.56/(1+exp(3.5-pe[gr][ch]/300.))-0.14; */ adjust = 0; masking_lower_db = gfc->sv_qnt.mask_adjust_short - adjust; } gfc->sv_qnt.masking_lower = pow(10.0, masking_lower_db * 0.1); /* cod_info, scalefac and xrpow get initialized in init_outer_loop */ init_outer_loop(gfc, cod_info); if (init_xrpow(gfc, cod_info, xrpow)) { /* xr contains energy we will have to encode * calculate the masking abilities * find some good quantization in outer_loop */ ath_over = calc_xmin(gfc, &ratio[gr][ch], cod_info, l3_xmin); if (0 == ath_over) /* analog silence */ targ_bits[gr][ch] = analog_silence_bits; (void) outer_loop(gfc, cod_info, l3_xmin, xrpow, ch, targ_bits[gr][ch]); } iteration_finish_one(gfc, gr, ch); } /* ch */ } /* gr */ /* find a bitrate which can refill the resevoir to positive size. */ for (eov->bitrate_index = cfg->vbr_min_bitrate_index; eov->bitrate_index <= cfg->vbr_max_bitrate_index; eov->bitrate_index++) { if (ResvFrameBegin(gfc, &mean_bits) >= 0) break; } assert(eov->bitrate_index <= cfg->vbr_max_bitrate_index); ResvFrameEnd(gfc, mean_bits); } /************************************************************************ * * CBR_iteration_loop() * * author/date?? * * encodes one frame of MP3 data with constant bitrate * ************************************************************************/ void CBR_iteration_loop(lame_internal_flags * gfc, const FLOAT pe[2][2], const FLOAT ms_ener_ratio[2], const III_psy_ratio ratio[2][2]) { SessionConfig_t const *const cfg = &gfc->cfg; FLOAT l3_xmin[SFBMAX]; FLOAT xrpow[576]; int targ_bits[2]; int mean_bits, max_bits; int gr, ch; III_side_info_t *const l3_side = &gfc->l3_side; gr_info *cod_info; (void) ResvFrameBegin(gfc, &mean_bits); /* quantize! */ for (gr = 0; gr < cfg->mode_gr; gr++) { /* calculate needed bits */ max_bits = on_pe(gfc, pe, targ_bits, mean_bits, gr, gr); if (gfc->ov_enc.mode_ext == MPG_MD_MS_LR) { ms_convert(&gfc->l3_side, gr); reduce_side(targ_bits, ms_ener_ratio[gr], mean_bits, max_bits); } for (ch = 0; ch < cfg->channels_out; ch++) { FLOAT adjust, masking_lower_db; cod_info = &l3_side->tt[gr][ch]; if (cod_info->block_type != SHORT_TYPE) { /* NORM, START or STOP type */ /* adjust = 1.28/(1+exp(3.5-pe[gr][ch]/300.))-0.05; */ adjust = 0; masking_lower_db = gfc->sv_qnt.mask_adjust - adjust; } else { /* adjust = 2.56/(1+exp(3.5-pe[gr][ch]/300.))-0.14; */ adjust = 0; masking_lower_db = gfc->sv_qnt.mask_adjust_short - adjust; } gfc->sv_qnt.masking_lower = pow(10.0, masking_lower_db * 0.1); /* init_outer_loop sets up cod_info, scalefac and xrpow */ init_outer_loop(gfc, cod_info); if (init_xrpow(gfc, cod_info, xrpow)) { /* xr contains energy we will have to encode * calculate the masking abilities * find some good quantization in outer_loop */ (void) calc_xmin(gfc, &ratio[gr][ch], cod_info, l3_xmin); (void) outer_loop(gfc, cod_info, l3_xmin, xrpow, ch, targ_bits[ch]); } iteration_finish_one(gfc, gr, ch); assert(cod_info->part2_3_length <= MAX_BITS_PER_CHANNEL); assert(cod_info->part2_3_length <= targ_bits[ch]); } /* for ch */ } /* for gr */ ResvFrameEnd(gfc, mean_bits); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/bitstream.h�������������������������������������������������������������������000644 �001751 �001751 �00000003033 11561266675 020271� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 bitstream Output interface for LAME * * Copyright (c) 1999 Takehiro TOMINAGA * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_BITSTREAM_H #define LAME_BITSTREAM_H int getframebits(const lame_internal_flags * gfc); int format_bitstream(lame_internal_flags * gfc); void flush_bitstream(lame_internal_flags * gfc); void add_dummy_byte(lame_internal_flags * gfc, unsigned char val, unsigned int n); int copy_buffer(lame_internal_flags * gfc, unsigned char *buffer, int buffer_size, int update_crc); void init_bit_stream_w(lame_internal_flags * gfc); void CRC_writeheader(lame_internal_flags const *gfc, char *buffer); int compute_flushbits(const lame_internal_flags * gfp, int *nbytes); int get_max_frame_buffer_size_by_constraint(SessionConfig_t const * cfg, int constraint); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/lame.c������������������������������������������������������������������������000644 �001751 �001751 �00000245351 13167215267 017216� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C; mode: fold -*- */ /* * LAME MP3 encoding engine * * Copyright (c) 1999-2000 Mark Taylor * Copyright (c) 2000-2005 Takehiro Tominaga * Copyright (c) 2000-2017 Robert Hegemann * Copyright (c) 2000-2005 Gabriel Bouvigne * Copyright (c) 2000-2004 Alexander Leidinger * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: lame.c,v 1.377 2017/09/26 12:14:02 robert Exp $ */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "lame_global_flags.h" #include "gain_analysis.h" #include "bitstream.h" #include "quantize_pvt.h" #include "set_get.h" #include "quantize.h" #include "psymodel.h" #include "version.h" #include "VbrTag.h" #include "tables.h" #if defined(__FreeBSD__) && !defined(__alpha__) #include <floatingpoint.h> #endif #ifdef __riscos__ #include "asmstuff.h" #endif #ifdef __sun__ /* woraround for SunOS 4.x, it has SEEK_* defined here */ #include <unistd.h> #endif #define LAME_DEFAULT_QUALITY 3 int is_lame_global_flags_valid(const lame_global_flags * gfp) { if (gfp == NULL) return 0; if (gfp->class_id != LAME_ID) return 0; return 1; } int is_lame_internal_flags_valid(const lame_internal_flags * gfc) { if (gfc == NULL) return 0; if (gfc->class_id != LAME_ID) return 0; if (gfc->lame_init_params_successful <=0) return 0; return 1; } static FLOAT filter_coef(FLOAT x) { if (x > 1.0) return 0.0; if (x <= 0.0) return 1.0; return cos(PI / 2 * x); } static void lame_init_params_ppflt(lame_internal_flags * gfc) { SessionConfig_t *const cfg = &gfc->cfg; /***************************************************************/ /* compute info needed for polyphase filter (filter type==0, default) */ /***************************************************************/ int band, maxband, minband; FLOAT freq; int lowpass_band = 32; int highpass_band = -1; if (cfg->lowpass1 > 0) { minband = 999; for (band = 0; band <= 31; band++) { freq = band / 31.0; /* this band and above will be zeroed: */ if (freq >= cfg->lowpass2) { lowpass_band = Min(lowpass_band, band); } if (cfg->lowpass1 < freq && freq < cfg->lowpass2) { minband = Min(minband, band); } } /* compute the *actual* transition band implemented by * the polyphase filter */ if (minband == 999) { cfg->lowpass1 = (lowpass_band - .75) / 31.0; } else { cfg->lowpass1 = (minband - .75) / 31.0; } cfg->lowpass2 = lowpass_band / 31.0; } /* make sure highpass filter is within 90% of what the effective * highpass frequency will be */ if (cfg->highpass2 > 0) { if (cfg->highpass2 < .9 * (.75 / 31.0)) { cfg->highpass1 = 0; cfg->highpass2 = 0; MSGF(gfc, "Warning: highpass filter disabled. " "highpass frequency too small\n"); } } if (cfg->highpass2 > 0) { maxband = -1; for (band = 0; band <= 31; band++) { freq = band / 31.0; /* this band and below will be zereod */ if (freq <= cfg->highpass1) { highpass_band = Max(highpass_band, band); } if (cfg->highpass1 < freq && freq < cfg->highpass2) { maxband = Max(maxband, band); } } /* compute the *actual* transition band implemented by * the polyphase filter */ cfg->highpass1 = highpass_band / 31.0; if (maxband == -1) { cfg->highpass2 = (highpass_band + .75) / 31.0; } else { cfg->highpass2 = (maxband + .75) / 31.0; } } for (band = 0; band < 32; band++) { FLOAT fc1, fc2; freq = band / 31.0f; if (cfg->highpass2 > cfg->highpass1) { fc1 = filter_coef((cfg->highpass2 - freq) / (cfg->highpass2 - cfg->highpass1 + 1e-20)); } else { fc1 = 1.0f; } if (cfg->lowpass2 > cfg->lowpass1) { fc2 = filter_coef((freq - cfg->lowpass1) / (cfg->lowpass2 - cfg->lowpass1 + 1e-20)); } else { fc2 = 1.0f; } gfc->sv_enc.amp_filter[band] = fc1 * fc2; } } static void optimum_bandwidth(double *const lowerlimit, double *const upperlimit, const unsigned bitrate) { /* * Input: * bitrate total bitrate in kbps * * Output: * lowerlimit: best lowpass frequency limit for input filter in Hz * upperlimit: best highpass frequency limit for input filter in Hz */ int table_index; typedef struct { int bitrate; /* only indicative value */ int lowpass; } band_pass_t; const band_pass_t freq_map[] = { {8, 2000}, {16, 3700}, {24, 3900}, {32, 5500}, {40, 7000}, {48, 7500}, {56, 10000}, {64, 11000}, {80, 13500}, {96, 15100}, {112, 15600}, {128, 17000}, {160, 17500}, {192, 18600}, {224, 19400}, {256, 19700}, {320, 20500} }; table_index = nearestBitrateFullIndex(bitrate); (void) freq_map[table_index].bitrate; *lowerlimit = freq_map[table_index].lowpass; /* * Now we try to choose a good high pass filtering frequency. * This value is currently not used. * For fu < 16 kHz: sqrt(fu*fl) = 560 Hz * For fu = 18 kHz: no high pass filtering * This gives: * * 2 kHz => 160 Hz * 3 kHz => 107 Hz * 4 kHz => 80 Hz * 8 kHz => 40 Hz * 16 kHz => 20 Hz * 17 kHz => 10 Hz * 18 kHz => 0 Hz * * These are ad hoc values and these can be optimized if a high pass is available. */ /* if (f_low <= 16000) f_high = 16000. * 20. / f_low; else if (f_low <= 18000) f_high = 180. - 0.01 * f_low; else f_high = 0.;*/ /* * When we sometimes have a good highpass filter, we can add the highpass * frequency to the lowpass frequency */ /*if (upperlimit != NULL) *upperlimit = f_high;*/ (void) upperlimit; } static int optimum_samplefreq(int lowpassfreq, int input_samplefreq) { /* * Rules: * - if possible, sfb21 should NOT be used * */ int suggested_samplefreq = 44100; if (input_samplefreq >= 48000) suggested_samplefreq = 48000; else if (input_samplefreq >= 44100) suggested_samplefreq = 44100; else if (input_samplefreq >= 32000) suggested_samplefreq = 32000; else if (input_samplefreq >= 24000) suggested_samplefreq = 24000; else if (input_samplefreq >= 22050) suggested_samplefreq = 22050; else if (input_samplefreq >= 16000) suggested_samplefreq = 16000; else if (input_samplefreq >= 12000) suggested_samplefreq = 12000; else if (input_samplefreq >= 11025) suggested_samplefreq = 11025; else if (input_samplefreq >= 8000) suggested_samplefreq = 8000; if (lowpassfreq == -1) return suggested_samplefreq; if (lowpassfreq <= 15960) suggested_samplefreq = 44100; if (lowpassfreq <= 15250) suggested_samplefreq = 32000; if (lowpassfreq <= 11220) suggested_samplefreq = 24000; if (lowpassfreq <= 9970) suggested_samplefreq = 22050; if (lowpassfreq <= 7230) suggested_samplefreq = 16000; if (lowpassfreq <= 5420) suggested_samplefreq = 12000; if (lowpassfreq <= 4510) suggested_samplefreq = 11025; if (lowpassfreq <= 3970) suggested_samplefreq = 8000; if (input_samplefreq < suggested_samplefreq) { /* choose a valid MPEG sample frequency above the input sample frequency to avoid SFB21/12 bitrate bloat rh 061115 */ if (input_samplefreq > 44100) { return 48000; } if (input_samplefreq > 32000) { return 44100; } if (input_samplefreq > 24000) { return 32000; } if (input_samplefreq > 22050) { return 24000; } if (input_samplefreq > 16000) { return 22050; } if (input_samplefreq > 12000) { return 16000; } if (input_samplefreq > 11025) { return 12000; } if (input_samplefreq > 8000) { return 11025; } return 8000; } return suggested_samplefreq; } /* set internal feature flags. USER should not access these since * some combinations will produce strange results */ static void lame_init_qval(lame_global_flags * gfp) { lame_internal_flags *const gfc = gfp->internal_flags; SessionConfig_t *const cfg = &gfc->cfg; switch (gfp->quality) { default: case 9: /* no psymodel, no noise shaping */ cfg->noise_shaping = 0; cfg->noise_shaping_amp = 0; cfg->noise_shaping_stop = 0; cfg->use_best_huffman = 0; cfg->full_outer_loop = 0; break; case 8: gfp->quality = 7; /*lint --fallthrough */ case 7: /* use psymodel (for short block and m/s switching), but no noise shapping */ cfg->noise_shaping = 0; cfg->noise_shaping_amp = 0; cfg->noise_shaping_stop = 0; cfg->use_best_huffman = 0; cfg->full_outer_loop = 0; if (cfg->vbr == vbr_mt || cfg->vbr == vbr_mtrh) { cfg->full_outer_loop = -1; } break; case 6: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; cfg->noise_shaping_amp = 0; cfg->noise_shaping_stop = 0; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 0; cfg->full_outer_loop = 0; break; case 5: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; cfg->noise_shaping_amp = 0; cfg->noise_shaping_stop = 0; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 0; cfg->full_outer_loop = 0; break; case 4: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; cfg->noise_shaping_amp = 0; cfg->noise_shaping_stop = 0; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 1; cfg->full_outer_loop = 0; break; case 3: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; cfg->noise_shaping_amp = 1; cfg->noise_shaping_stop = 1; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 1; cfg->full_outer_loop = 0; break; case 2: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; if (gfc->sv_qnt.substep_shaping == 0) gfc->sv_qnt.substep_shaping = 2; cfg->noise_shaping_amp = 1; cfg->noise_shaping_stop = 1; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 1; /* inner loop */ cfg->full_outer_loop = 0; break; case 1: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; if (gfc->sv_qnt.substep_shaping == 0) gfc->sv_qnt.substep_shaping = 2; cfg->noise_shaping_amp = 2; cfg->noise_shaping_stop = 1; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 1; cfg->full_outer_loop = 0; break; case 0: if (cfg->noise_shaping == 0) cfg->noise_shaping = 1; if (gfc->sv_qnt.substep_shaping == 0) gfc->sv_qnt.substep_shaping = 2; cfg->noise_shaping_amp = 2; cfg->noise_shaping_stop = 1; if (cfg->subblock_gain == -1) cfg->subblock_gain = 1; cfg->use_best_huffman = 1; /*type 2 disabled because of it slowness, in favor of full outer loop search */ cfg->full_outer_loop = 1; break; } } static double linear_int(double a, double b, double m) { return a + m * (b - a); } /******************************************************************** * initialize internal params based on data in gf * (globalflags struct filled in by calling program) * * OUTLINE: * * We first have some complex code to determine bitrate, * output samplerate and mode. It is complicated by the fact * that we allow the user to set some or all of these parameters, * and need to determine best possible values for the rest of them: * * 1. set some CPU related flags * 2. check if we are mono->mono, stereo->mono or stereo->stereo * 3. compute bitrate and output samplerate: * user may have set compression ratio * user may have set a bitrate * user may have set a output samplerate * 4. set some options which depend on output samplerate * 5. compute the actual compression ratio * 6. set mode based on compression ratio * * The remaining code is much simpler - it just sets options * based on the mode & compression ratio: * * set allow_diff_short based on mode * select lowpass filter based on compression ratio & mode * set the bitrate index, and min/max bitrates for VBR modes * disable VBR tag if it is not appropriate * initialize the bitstream * initialize scalefac_band data * set sideinfo_len (based on channels, CRC, out_samplerate) * write an id3v2 tag into the bitstream * write VBR tag into the bitstream * set mpeg1/2 flag * estimate the number of frames (based on a lot of data) * * now we set more flags: * nspsytune: * see code * VBR modes * see code * CBR/ABR * see code * * Finally, we set the algorithm flags based on the gfp->quality value * lame_init_qval(gfp); * ********************************************************************/ int lame_init_params(lame_global_flags * gfp) { int i; int j; lame_internal_flags *gfc; SessionConfig_t *cfg; if (!is_lame_global_flags_valid(gfp)) return -1; gfc = gfp->internal_flags; if (gfc == 0) return -1; if (is_lame_internal_flags_valid(gfc)) return -1; /* already initialized */ /* start updating lame internal flags */ gfc->class_id = LAME_ID; gfc->lame_init_params_successful = 0; /* will be set to one, when we get through until the end */ if (gfp->samplerate_in < 1) return -1; /* input sample rate makes no sense */ if (gfp->num_channels < 1 || 2 < gfp->num_channels) return -1; /* number of input channels makes no sense */ if (gfp->samplerate_out != 0) { int v=0; if (SmpFrqIndex(gfp->samplerate_out, &v) < 0) return -1; /* output sample rate makes no sense */ } cfg = &gfc->cfg; cfg->enforce_min_bitrate = gfp->VBR_hard_min; cfg->analysis = gfp->analysis; if (cfg->analysis) gfp->write_lame_tag = 0; /* some file options not allowed if output is: not specified or stdout */ if (gfc->pinfo != NULL) gfp->write_lame_tag = 0; /* disable Xing VBR tag */ /* report functions */ gfc->report_msg = gfp->report.msgf; gfc->report_dbg = gfp->report.debugf; gfc->report_err = gfp->report.errorf; if (gfp->asm_optimizations.amd3dnow) gfc->CPU_features.AMD_3DNow = has_3DNow(); else gfc->CPU_features.AMD_3DNow = 0; if (gfp->asm_optimizations.mmx) gfc->CPU_features.MMX = has_MMX(); else gfc->CPU_features.MMX = 0; if (gfp->asm_optimizations.sse) { gfc->CPU_features.SSE = has_SSE(); gfc->CPU_features.SSE2 = has_SSE2(); } else { gfc->CPU_features.SSE = 0; gfc->CPU_features.SSE2 = 0; } cfg->vbr = gfp->VBR; cfg->error_protection = gfp->error_protection; cfg->copyright = gfp->copyright; cfg->original = gfp->original; cfg->extension = gfp->extension; cfg->emphasis = gfp->emphasis; cfg->channels_in = gfp->num_channels; if (cfg->channels_in == 1) gfp->mode = MONO; cfg->channels_out = (gfp->mode == MONO) ? 1 : 2; if (gfp->mode != JOINT_STEREO) gfp->force_ms = 0; /* forced mid/side stereo for j-stereo only */ cfg->force_ms = gfp->force_ms; if (cfg->vbr == vbr_off && gfp->VBR_mean_bitrate_kbps != 128 && gfp->brate == 0) gfp->brate = gfp->VBR_mean_bitrate_kbps; switch (cfg->vbr) { case vbr_off: case vbr_mtrh: case vbr_mt: /* these modes can handle free format condition */ break; default: gfp->free_format = 0; /* mode can't be mixed with free format */ break; } cfg->free_format = gfp->free_format; if (cfg->vbr == vbr_off && gfp->brate == 0) { /* no bitrate or compression ratio specified, use 11.025 */ if (EQ(gfp->compression_ratio, 0)) gfp->compression_ratio = 11.025; /* rate to compress a CD down to exactly 128000 bps */ } /* find bitrate if user specify a compression ratio */ if (cfg->vbr == vbr_off && gfp->compression_ratio > 0) { if (gfp->samplerate_out == 0) gfp->samplerate_out = map2MP3Frequency((int) (0.97 * gfp->samplerate_in)); /* round up with a margin of 3% */ /* choose a bitrate for the output samplerate which achieves * specified compression ratio */ gfp->brate = gfp->samplerate_out * 16 * cfg->channels_out / (1.e3 * gfp->compression_ratio); /* we need the version for the bitrate table look up */ cfg->samplerate_index = SmpFrqIndex(gfp->samplerate_out, &cfg->version); assert(cfg->samplerate_index >=0); if (!cfg->free_format) /* for non Free Format find the nearest allowed bitrate */ gfp->brate = FindNearestBitrate(gfp->brate, cfg->version, gfp->samplerate_out); } if (gfp->samplerate_out) { if (gfp->samplerate_out < 16000) { gfp->VBR_mean_bitrate_kbps = Max(gfp->VBR_mean_bitrate_kbps, 8); gfp->VBR_mean_bitrate_kbps = Min(gfp->VBR_mean_bitrate_kbps, 64); } else if (gfp->samplerate_out < 32000) { gfp->VBR_mean_bitrate_kbps = Max(gfp->VBR_mean_bitrate_kbps, 8); gfp->VBR_mean_bitrate_kbps = Min(gfp->VBR_mean_bitrate_kbps, 160); } else { gfp->VBR_mean_bitrate_kbps = Max(gfp->VBR_mean_bitrate_kbps, 32); gfp->VBR_mean_bitrate_kbps = Min(gfp->VBR_mean_bitrate_kbps, 320); } } /* WORK IN PROGRESS */ /* mapping VBR scale to internal VBR quality settings */ if (gfp->samplerate_out == 0 && (cfg->vbr == vbr_mt || cfg->vbr == vbr_mtrh)) { float const qval = gfp->VBR_q + gfp->VBR_q_frac; struct q_map { int sr_a; float qa, qb, ta, tb; int lp; }; struct q_map const m[9] = { {48000, 0.0,6.5, 0.0,6.5, 23700} , {44100, 0.0,6.5, 0.0,6.5, 21780} , {32000, 6.5,8.0, 5.2,6.5, 15800} , {24000, 8.0,8.5, 5.2,6.0, 11850} , {22050, 8.5,9.01, 5.2,6.5, 10892} , {16000, 9.01,9.4, 4.9,6.5, 7903} , {12000, 9.4,9.6, 4.5,6.0, 5928} , {11025, 9.6,9.9, 5.1,6.5, 5446} , { 8000, 9.9,10., 4.9,6.5, 3952} }; for (i = 2; i < 9; ++i) { if (gfp->samplerate_in == m[i].sr_a) { if (qval < m[i].qa) { double d = qval / m[i].qa; d = d * m[i].ta; gfp->VBR_q = (int)d; gfp->VBR_q_frac = d - gfp->VBR_q; } } if (gfp->samplerate_in >= m[i].sr_a) { if (m[i].qa <= qval && qval < m[i].qb) { float const q_ = m[i].qb-m[i].qa; float const t_ = m[i].tb-m[i].ta; double d = m[i].ta + t_ * (qval-m[i].qa) / q_; gfp->VBR_q = (int)d; gfp->VBR_q_frac = d - gfp->VBR_q; gfp->samplerate_out = m[i].sr_a; if (gfp->lowpassfreq == 0) { gfp->lowpassfreq = -1; } break; } } } } /****************************************************************/ /* if a filter has not been enabled, see if we should add one: */ /****************************************************************/ if (gfp->lowpassfreq == 0) { double lowpass = 16000; double highpass; switch (cfg->vbr) { case vbr_off:{ optimum_bandwidth(&lowpass, &highpass, gfp->brate); break; } case vbr_abr:{ optimum_bandwidth(&lowpass, &highpass, gfp->VBR_mean_bitrate_kbps); break; } case vbr_rh:{ int const x[11] = { 19500, 19000, 18600, 18000, 17500, 16000, 15600, 14900, 12500, 10000, 3950 }; if (0 <= gfp->VBR_q && gfp->VBR_q <= 9) { double a = x[gfp->VBR_q], b = x[gfp->VBR_q + 1], m = gfp->VBR_q_frac; lowpass = linear_int(a, b, m); } else { lowpass = 19500; } break; } case vbr_mtrh: case vbr_mt:{ int const x[11] = { 24000, 19500, 18500, 18000, 17500, 17000, 16500, 15600, 15200, 7230, 3950 }; if (0 <= gfp->VBR_q && gfp->VBR_q <= 9) { double a = x[gfp->VBR_q], b = x[gfp->VBR_q + 1], m = gfp->VBR_q_frac; lowpass = linear_int(a, b, m); } else { lowpass = 21500; } break; } default:{ int const x[11] = { 19500, 19000, 18500, 18000, 17500, 16500, 15500, 14500, 12500, 9500, 3950 }; if (0 <= gfp->VBR_q && gfp->VBR_q <= 9) { double a = x[gfp->VBR_q], b = x[gfp->VBR_q + 1], m = gfp->VBR_q_frac; lowpass = linear_int(a, b, m); } else { lowpass = 19500; } } } if (gfp->mode == MONO && (cfg->vbr == vbr_off || cfg->vbr == vbr_abr)) lowpass *= 1.5; gfp->lowpassfreq = lowpass; } if (gfp->samplerate_out == 0) { if (2 * gfp->lowpassfreq > gfp->samplerate_in) { gfp->lowpassfreq = gfp->samplerate_in / 2; } gfp->samplerate_out = optimum_samplefreq((int) gfp->lowpassfreq, gfp->samplerate_in); } if (cfg->vbr == vbr_mt || cfg->vbr == vbr_mtrh) { gfp->lowpassfreq = Min(24000, gfp->lowpassfreq); } else { gfp->lowpassfreq = Min(20500, gfp->lowpassfreq); } gfp->lowpassfreq = Min(gfp->samplerate_out / 2, gfp->lowpassfreq); if (cfg->vbr == vbr_off) { gfp->compression_ratio = gfp->samplerate_out * 16 * cfg->channels_out / (1.e3 * gfp->brate); } if (cfg->vbr == vbr_abr) { gfp->compression_ratio = gfp->samplerate_out * 16 * cfg->channels_out / (1.e3 * gfp->VBR_mean_bitrate_kbps); } cfg->disable_reservoir = gfp->disable_reservoir; cfg->lowpassfreq = gfp->lowpassfreq; cfg->highpassfreq = gfp->highpassfreq; cfg->samplerate_in = gfp->samplerate_in; cfg->samplerate_out = gfp->samplerate_out; cfg->mode_gr = cfg->samplerate_out <= 24000 ? 1 : 2; /* Number of granules per frame */ /* * sample freq bitrate compression ratio * [kHz] [kbps/channel] for 16 bit input * 44.1 56 12.6 * 44.1 64 11.025 * 44.1 80 8.82 * 22.05 24 14.7 * 22.05 32 11.025 * 22.05 40 8.82 * 16 16 16.0 * 16 24 10.667 * */ /* * For VBR, take a guess at the compression_ratio. * For example: * * VBR_q compression like * - 4.4 320 kbps/44 kHz * 0...1 5.5 256 kbps/44 kHz * 2 7.3 192 kbps/44 kHz * 4 8.8 160 kbps/44 kHz * 6 11 128 kbps/44 kHz * 9 14.7 96 kbps * * for lower bitrates, downsample with --resample */ switch (cfg->vbr) { case vbr_mt: case vbr_rh: case vbr_mtrh: { /*numbers are a bit strange, but they determine the lowpass value */ FLOAT const cmp[] = { 5.7, 6.5, 7.3, 8.2, 10, 11.9, 13, 14, 15, 16.5 }; gfp->compression_ratio = cmp[gfp->VBR_q]; } break; case vbr_abr: gfp->compression_ratio = cfg->samplerate_out * 16 * cfg->channels_out / (1.e3 * gfp->VBR_mean_bitrate_kbps); break; default: gfp->compression_ratio = cfg->samplerate_out * 16 * cfg->channels_out / (1.e3 * gfp->brate); break; } /* mode = -1 (not set by user) or * mode = MONO (because of only 1 input channel). * If mode has not been set, then select J-STEREO */ if (gfp->mode == NOT_SET) { gfp->mode = JOINT_STEREO; } cfg->mode = gfp->mode; /* apply user driven high pass filter */ if (cfg->highpassfreq > 0) { cfg->highpass1 = 2. * cfg->highpassfreq; if (gfp->highpasswidth >= 0) cfg->highpass2 = 2. * (cfg->highpassfreq + gfp->highpasswidth); else /* 0% above on default */ cfg->highpass2 = (1 + 0.00) * 2. * cfg->highpassfreq; cfg->highpass1 /= cfg->samplerate_out; cfg->highpass2 /= cfg->samplerate_out; } else { cfg->highpass1 = 0; cfg->highpass2 = 0; } /* apply user driven low pass filter */ cfg->lowpass1 = 0; cfg->lowpass2 = 0; if (cfg->lowpassfreq > 0 && cfg->lowpassfreq < (cfg->samplerate_out / 2) ) { cfg->lowpass2 = 2. * cfg->lowpassfreq; if (gfp->lowpasswidth >= 0) { cfg->lowpass1 = 2. * (cfg->lowpassfreq - gfp->lowpasswidth); if (cfg->lowpass1 < 0) /* has to be >= 0 */ cfg->lowpass1 = 0; } else { /* 0% below on default */ cfg->lowpass1 = (1 - 0.00) * 2. * cfg->lowpassfreq; } cfg->lowpass1 /= cfg->samplerate_out; cfg->lowpass2 /= cfg->samplerate_out; } /**********************************************************************/ /* compute info needed for polyphase filter (filter type==0, default) */ /**********************************************************************/ lame_init_params_ppflt(gfc); /******************************************************* * samplerate and bitrate index *******************************************************/ cfg->samplerate_index = SmpFrqIndex(cfg->samplerate_out, &cfg->version); assert(cfg->samplerate_index >= 0); if (cfg->vbr == vbr_off) { if (cfg->free_format) { gfc->ov_enc.bitrate_index = 0; } else { gfp->brate = FindNearestBitrate(gfp->brate, cfg->version, cfg->samplerate_out); gfc->ov_enc.bitrate_index = BitrateIndex(gfp->brate, cfg->version, cfg->samplerate_out); if (gfc->ov_enc.bitrate_index <= 0) { /* This never happens, because of preceding FindNearestBitrate! * But, set a sane value, just in case */ assert(0); gfc->ov_enc.bitrate_index = 8; } } } else { gfc->ov_enc.bitrate_index = 1; } init_bit_stream_w(gfc); j = cfg->samplerate_index + (3 * cfg->version) + 6 * (cfg->samplerate_out < 16000); for (i = 0; i < SBMAX_l + 1; i++) gfc->scalefac_band.l[i] = sfBandIndex[j].l[i]; for (i = 0; i < PSFB21 + 1; i++) { int const size = (gfc->scalefac_band.l[22] - gfc->scalefac_band.l[21]) / PSFB21; int const start = gfc->scalefac_band.l[21] + i * size; gfc->scalefac_band.psfb21[i] = start; } gfc->scalefac_band.psfb21[PSFB21] = 576; for (i = 0; i < SBMAX_s + 1; i++) gfc->scalefac_band.s[i] = sfBandIndex[j].s[i]; for (i = 0; i < PSFB12 + 1; i++) { int const size = (gfc->scalefac_band.s[13] - gfc->scalefac_band.s[12]) / PSFB12; int const start = gfc->scalefac_band.s[12] + i * size; gfc->scalefac_band.psfb12[i] = start; } gfc->scalefac_band.psfb12[PSFB12] = 192; /* determine the mean bitrate for main data */ if (cfg->mode_gr == 2) /* MPEG 1 */ cfg->sideinfo_len = (cfg->channels_out == 1) ? 4 + 17 : 4 + 32; else /* MPEG 2 */ cfg->sideinfo_len = (cfg->channels_out == 1) ? 4 + 9 : 4 + 17; if (cfg->error_protection) cfg->sideinfo_len += 2; { int k; for (k = 0; k < 19; k++) gfc->sv_enc.pefirbuf[k] = 700 * cfg->mode_gr * cfg->channels_out; if (gfp->ATHtype == -1) gfp->ATHtype = 4; } assert(gfp->VBR_q <= 9); assert(gfp->VBR_q >= 0); switch (cfg->vbr) { case vbr_mt: case vbr_mtrh:{ if (gfp->strict_ISO < 0) { gfp->strict_ISO = MDB_MAXIMUM; } if (gfp->useTemporal < 0) { gfp->useTemporal = 0; /* off by default for this VBR mode */ } (void) apply_preset(gfp, 500 - (gfp->VBR_q * 10), 0); /* The newer VBR code supports only a limited subset of quality levels: 9-5=5 are the same, uses x^3/4 quantization 4-0=0 are the same 5 plus best huffman divide code */ if (gfp->quality < 0) gfp->quality = LAME_DEFAULT_QUALITY; if (gfp->quality < 5) gfp->quality = 0; if (gfp->quality > 7) gfp->quality = 7; /* sfb21 extra only with MPEG-1 at higher sampling rates */ if (gfp->experimentalY) gfc->sv_qnt.sfb21_extra = 0; else gfc->sv_qnt.sfb21_extra = (cfg->samplerate_out > 44000); break; } case vbr_rh:{ (void) apply_preset(gfp, 500 - (gfp->VBR_q * 10), 0); /* sfb21 extra only with MPEG-1 at higher sampling rates */ if (gfp->experimentalY) gfc->sv_qnt.sfb21_extra = 0; else gfc->sv_qnt.sfb21_extra = (cfg->samplerate_out > 44000); /* VBR needs at least the output of GPSYCHO, * so we have to garantee that by setting a minimum * quality level, actually level 6 does it. * down to level 6 */ if (gfp->quality > 6) gfp->quality = 6; if (gfp->quality < 0) gfp->quality = LAME_DEFAULT_QUALITY; break; } default: /* cbr/abr */ { /* no sfb21 extra with CBR code */ gfc->sv_qnt.sfb21_extra = 0; if (gfp->quality < 0) gfp->quality = LAME_DEFAULT_QUALITY; if (cfg->vbr == vbr_off) (void) lame_set_VBR_mean_bitrate_kbps(gfp, gfp->brate); /* second, set parameters depending on bitrate */ (void) apply_preset(gfp, gfp->VBR_mean_bitrate_kbps, 0); gfp->VBR = cfg->vbr; break; } } /*initialize default values common for all modes */ gfc->sv_qnt.mask_adjust = gfp->maskingadjust; gfc->sv_qnt.mask_adjust_short = gfp->maskingadjust_short; /* just another daily changing developer switch */ if (gfp->tune) { gfc->sv_qnt.mask_adjust += gfp->tune_value_a; gfc->sv_qnt.mask_adjust_short += gfp->tune_value_a; } if (cfg->vbr != vbr_off) { /* choose a min/max bitrate for VBR */ /* if the user didn't specify VBR_max_bitrate: */ cfg->vbr_min_bitrate_index = 1; /* default: allow 8 kbps (MPEG-2) or 32 kbps (MPEG-1) */ cfg->vbr_max_bitrate_index = 14; /* default: allow 160 kbps (MPEG-2) or 320 kbps (MPEG-1) */ if (cfg->samplerate_out < 16000) cfg->vbr_max_bitrate_index = 8; /* default: allow 64 kbps (MPEG-2.5) */ if (gfp->VBR_min_bitrate_kbps) { gfp->VBR_min_bitrate_kbps = FindNearestBitrate(gfp->VBR_min_bitrate_kbps, cfg->version, cfg->samplerate_out); cfg->vbr_min_bitrate_index = BitrateIndex(gfp->VBR_min_bitrate_kbps, cfg->version, cfg->samplerate_out); if (cfg->vbr_min_bitrate_index < 0) { /* This never happens, because of preceding FindNearestBitrate! * But, set a sane value, just in case */ assert(0); cfg->vbr_min_bitrate_index = 1; } } if (gfp->VBR_max_bitrate_kbps) { gfp->VBR_max_bitrate_kbps = FindNearestBitrate(gfp->VBR_max_bitrate_kbps, cfg->version, cfg->samplerate_out); cfg->vbr_max_bitrate_index = BitrateIndex(gfp->VBR_max_bitrate_kbps, cfg->version, cfg->samplerate_out); if (cfg->vbr_max_bitrate_index < 0) { /* This never happens, because of preceding FindNearestBitrate! * But, set a sane value, just in case */ assert(0); cfg->vbr_max_bitrate_index = cfg->samplerate_out < 16000 ? 8 : 14; } } gfp->VBR_min_bitrate_kbps = bitrate_table[cfg->version][cfg->vbr_min_bitrate_index]; gfp->VBR_max_bitrate_kbps = bitrate_table[cfg->version][cfg->vbr_max_bitrate_index]; gfp->VBR_mean_bitrate_kbps = Min(bitrate_table[cfg->version][cfg->vbr_max_bitrate_index], gfp->VBR_mean_bitrate_kbps); gfp->VBR_mean_bitrate_kbps = Max(bitrate_table[cfg->version][cfg->vbr_min_bitrate_index], gfp->VBR_mean_bitrate_kbps); } cfg->preset = gfp->preset; cfg->write_lame_tag = gfp->write_lame_tag; gfc->sv_qnt.substep_shaping = gfp->substep_shaping; cfg->noise_shaping = gfp->noise_shaping; cfg->subblock_gain = gfp->subblock_gain; cfg->use_best_huffman = gfp->use_best_huffman; cfg->avg_bitrate = gfp->brate; cfg->vbr_avg_bitrate_kbps = gfp->VBR_mean_bitrate_kbps; cfg->compression_ratio = gfp->compression_ratio; /* initialize internal qval settings */ lame_init_qval(gfp); /* automatic ATH adjustment on */ if (gfp->athaa_type < 0) gfc->ATH->use_adjust = 3; else gfc->ATH->use_adjust = gfp->athaa_type; /* initialize internal adaptive ATH settings -jd */ gfc->ATH->aa_sensitivity_p = pow(10.0, gfp->athaa_sensitivity / -10.0); if (gfp->short_blocks == short_block_not_set) { gfp->short_blocks = short_block_allowed; } /*Note Jan/2003: Many hardware decoders cannot handle short blocks in regular stereo mode unless they are coupled (same type in both channels) it is a rare event (1 frame per min. or so) that LAME would use uncoupled short blocks, so lets turn them off until we decide how to handle this. No other encoders allow uncoupled short blocks, even though it is in the standard. */ /* rh 20040217: coupling makes no sense for mono and dual-mono streams */ if (gfp->short_blocks == short_block_allowed && (cfg->mode == JOINT_STEREO || cfg->mode == STEREO)) { gfp->short_blocks = short_block_coupled; } cfg->short_blocks = gfp->short_blocks; if (lame_get_quant_comp(gfp) < 0) (void) lame_set_quant_comp(gfp, 1); if (lame_get_quant_comp_short(gfp) < 0) (void) lame_set_quant_comp_short(gfp, 0); if (lame_get_msfix(gfp) < 0) lame_set_msfix(gfp, 0); /* select psychoacoustic model */ (void) lame_set_exp_nspsytune(gfp, lame_get_exp_nspsytune(gfp) | 1); if (gfp->ATHtype < 0) gfp->ATHtype = 4; if (gfp->ATHcurve < 0) gfp->ATHcurve = 4; if (gfp->interChRatio < 0) gfp->interChRatio = 0; if (gfp->useTemporal < 0) gfp->useTemporal = 1; /* on by default */ cfg->interChRatio = gfp->interChRatio; cfg->msfix = gfp->msfix; cfg->ATH_offset_db = 0-gfp->ATH_lower_db; cfg->ATH_offset_factor = powf(10.f, cfg->ATH_offset_db * 0.1f); cfg->ATHcurve = gfp->ATHcurve; cfg->ATHtype = gfp->ATHtype; cfg->ATHonly = gfp->ATHonly; cfg->ATHshort = gfp->ATHshort; cfg->noATH = gfp->noATH; cfg->quant_comp = gfp->quant_comp; cfg->quant_comp_short = gfp->quant_comp_short; cfg->use_temporal_masking_effect = gfp->useTemporal; if (cfg->mode == JOINT_STEREO) { cfg->use_safe_joint_stereo = gfp->exp_nspsytune & 2; } else { cfg->use_safe_joint_stereo = 0; } { cfg->adjust_bass_db = (gfp->exp_nspsytune >> 2) & 63; if (cfg->adjust_bass_db >= 32.f) cfg->adjust_bass_db -= 64.f; cfg->adjust_bass_db *= 0.25f; cfg->adjust_alto_db = (gfp->exp_nspsytune >> 8) & 63; if (cfg->adjust_alto_db >= 32.f) cfg->adjust_alto_db -= 64.f; cfg->adjust_alto_db *= 0.25f; cfg->adjust_treble_db = (gfp->exp_nspsytune >> 14) & 63; if (cfg->adjust_treble_db >= 32.f) cfg->adjust_treble_db -= 64.f; cfg->adjust_treble_db *= 0.25f; /* to be compatible with Naoki's original code, the next 6 bits * define only the amount of changing treble for sfb21 */ cfg->adjust_sfb21_db = (gfp->exp_nspsytune >> 20) & 63; if (cfg->adjust_sfb21_db >= 32.f) cfg->adjust_sfb21_db -= 64.f; cfg->adjust_sfb21_db *= 0.25f; cfg->adjust_sfb21_db += cfg->adjust_treble_db; } /* Setting up the PCM input data transform matrix, to apply * user defined re-scaling, and or two-to-one channel downmix. */ { FLOAT m[2][2] = { {1.0f, 0.0f}, {0.0f, 1.0f} }; /* user selected scaling of the samples */ m[0][0] *= gfp->scale; m[0][1] *= gfp->scale; m[1][0] *= gfp->scale; m[1][1] *= gfp->scale; /* user selected scaling of the channel 0 (left) samples */ m[0][0] *= gfp->scale_left; m[0][1] *= gfp->scale_left; /* user selected scaling of the channel 1 (right) samples */ m[1][0] *= gfp->scale_right; m[1][1] *= gfp->scale_right; /* Downsample to Mono if 2 channels in and 1 channel out */ if (cfg->channels_in == 2 && cfg->channels_out == 1) { m[0][0] = 0.5f * (m[0][0] + m[1][0]); m[0][1] = 0.5f * (m[0][1] + m[1][1]); m[1][0] = 0; m[1][1] = 0; } cfg->pcm_transform[0][0] = m[0][0]; cfg->pcm_transform[0][1] = m[0][1]; cfg->pcm_transform[1][0] = m[1][0]; cfg->pcm_transform[1][1] = m[1][1]; } /* padding method as described in * "MPEG-Layer3 / Bitstream Syntax and Decoding" * by Martin Sieler, Ralph Sperschneider * * note: there is no padding for the very first frame * * Robert Hegemann 2000-06-22 */ gfc->sv_enc.slot_lag = gfc->sv_enc.frac_SpF = 0; if (cfg->vbr == vbr_off) gfc->sv_enc.slot_lag = gfc->sv_enc.frac_SpF = ((cfg->version + 1) * 72000L * cfg->avg_bitrate) % cfg->samplerate_out; (void) lame_init_bitstream(gfp); iteration_init(gfc); (void) psymodel_init(gfp); cfg->buffer_constraint = get_max_frame_buffer_size_by_constraint(cfg, gfp->strict_ISO); cfg->findReplayGain = gfp->findReplayGain; cfg->decode_on_the_fly = gfp->decode_on_the_fly; if (cfg->decode_on_the_fly) cfg->findPeakSample = 1; if (cfg->findReplayGain) { if (InitGainAnalysis(gfc->sv_rpg.rgdata, cfg->samplerate_out) == INIT_GAIN_ANALYSIS_ERROR) { /* Actually this never happens, our samplerates are the ones RG accepts! * But just in case, turn RG off */ assert(0); cfg->findReplayGain = 0; } } #ifdef DECODE_ON_THE_FLY if (cfg->decode_on_the_fly && !gfp->decode_only) { if (gfc->hip) { hip_decode_exit(gfc->hip); } gfc->hip = hip_decode_init(); /* report functions */ hip_set_errorf(gfc->hip, gfp->report.errorf); hip_set_debugf(gfc->hip, gfp->report.debugf); hip_set_msgf(gfc->hip, gfp->report.msgf); } #endif /* updating lame internal flags finished successful */ gfc->lame_init_params_successful = 1; return 0; } static void concatSep(char* dest, char const* sep, char const* str) { if (*dest != 0) strcat(dest, sep); strcat(dest, str); } /* * print_config * * Prints some selected information about the coding parameters via * the macro command MSGF(), which is currently mapped to lame_errorf * (reports via a error function?), which is a printf-like function * for <stderr>. */ void lame_print_config(const lame_global_flags * gfp) { lame_internal_flags const *const gfc = gfp->internal_flags; SessionConfig_t const *const cfg = &gfc->cfg; double const out_samplerate = cfg->samplerate_out; double const in_samplerate = cfg->samplerate_in; MSGF(gfc, "LAME %s %s (%s)\n", get_lame_version(), get_lame_os_bitness(), get_lame_url()); #if (LAME_ALPHA_VERSION) MSGF(gfc, "warning: alpha versions should be used for testing only\n"); #endif if (gfc->CPU_features.MMX || gfc->CPU_features.AMD_3DNow || gfc->CPU_features.SSE || gfc->CPU_features.SSE2) { char text[256] = { 0 }; int fft_asm_used = 0; #ifdef HAVE_NASM if (gfc->CPU_features.AMD_3DNow) { fft_asm_used = 1; } else if (gfc->CPU_features.SSE) { fft_asm_used = 2; } #else # if defined( HAVE_XMMINTRIN_H ) && defined( MIN_ARCH_SSE ) { fft_asm_used = 3; } # endif #endif if (gfc->CPU_features.MMX) { #ifdef MMX_choose_table concatSep(text, ", ", "MMX (ASM used)"); #else concatSep(text, ", ", "MMX"); #endif } if (gfc->CPU_features.AMD_3DNow) { concatSep(text, ", ", (fft_asm_used == 1) ? "3DNow! (ASM used)" : "3DNow!"); } if (gfc->CPU_features.SSE) { #if defined(HAVE_XMMINTRIN_H) concatSep(text, ", ", "SSE (ASM used)"); #else concatSep(text, ", ", (fft_asm_used == 2) ? "SSE (ASM used)" : "SSE"); #endif } if (gfc->CPU_features.SSE2) { concatSep(text, ", ", (fft_asm_used == 3) ? "SSE2 (ASM used)" : "SSE2"); } MSGF(gfc, "CPU features: %s\n", text); } if (cfg->channels_in == 2 && cfg->channels_out == 1 /* mono */ ) { MSGF(gfc, "Autoconverting from stereo to mono. Setting encoding to mono mode.\n"); } if (isResamplingNecessary(cfg)) { MSGF(gfc, "Resampling: input %g kHz output %g kHz\n", 1.e-3 * in_samplerate, 1.e-3 * out_samplerate); } if (cfg->highpass2 > 0.) MSGF(gfc, "Using polyphase highpass filter, transition band: %5.0f Hz - %5.0f Hz\n", 0.5 * cfg->highpass1 * out_samplerate, 0.5 * cfg->highpass2 * out_samplerate); if (0. < cfg->lowpass1 || 0. < cfg->lowpass2) { MSGF(gfc, "Using polyphase lowpass filter, transition band: %5.0f Hz - %5.0f Hz\n", 0.5 * cfg->lowpass1 * out_samplerate, 0.5 * cfg->lowpass2 * out_samplerate); } else { MSGF(gfc, "polyphase lowpass filter disabled\n"); } if (cfg->free_format) { MSGF(gfc, "Warning: many decoders cannot handle free format bitstreams\n"); if (cfg->avg_bitrate > 320) { MSGF(gfc, "Warning: many decoders cannot handle free format bitrates >320 kbps (see documentation)\n"); } } } /** rh: * some pretty printing is very welcome at this point! * so, if someone is willing to do so, please do it! * add more, if you see more... */ void lame_print_internals(const lame_global_flags * gfp) { lame_internal_flags const *const gfc = gfp->internal_flags; SessionConfig_t const *const cfg = &gfc->cfg; const char *pc = ""; /* compiler/processor optimizations, operational, etc. */ MSGF(gfc, "\nmisc:\n\n"); MSGF(gfc, "\tscaling: %g\n", gfp->scale); MSGF(gfc, "\tch0 (left) scaling: %g\n", gfp->scale_left); MSGF(gfc, "\tch1 (right) scaling: %g\n", gfp->scale_right); switch (cfg->use_best_huffman) { default: pc = "normal"; break; case 1: pc = "best (outside loop)"; break; case 2: pc = "best (inside loop, slow)"; break; } MSGF(gfc, "\thuffman search: %s\n", pc); MSGF(gfc, "\texperimental Y=%d\n", gfp->experimentalY); MSGF(gfc, "\t...\n"); /* everything controlling the stream format */ MSGF(gfc, "\nstream format:\n\n"); switch (cfg->version) { case 0: pc = "2.5"; break; case 1: pc = "1"; break; case 2: pc = "2"; break; default: pc = "?"; break; } MSGF(gfc, "\tMPEG-%s Layer 3\n", pc); switch (cfg->mode) { case JOINT_STEREO: pc = "joint stereo"; break; case STEREO: pc = "stereo"; break; case DUAL_CHANNEL: pc = "dual channel"; break; case MONO: pc = "mono"; break; case NOT_SET: pc = "not set (error)"; break; default: pc = "unknown (error)"; break; } MSGF(gfc, "\t%d channel - %s\n", cfg->channels_out, pc); switch (cfg->vbr) { case vbr_off: pc = "off"; break; default: pc = "all"; break; } MSGF(gfc, "\tpadding: %s\n", pc); if (vbr_default == cfg->vbr) pc = "(default)"; else if (cfg->free_format) pc = "(free format)"; else pc = ""; switch (cfg->vbr) { case vbr_off: MSGF(gfc, "\tconstant bitrate - CBR %s\n", pc); break; case vbr_abr: MSGF(gfc, "\tvariable bitrate - ABR %s\n", pc); break; case vbr_rh: MSGF(gfc, "\tvariable bitrate - VBR rh %s\n", pc); break; case vbr_mt: MSGF(gfc, "\tvariable bitrate - VBR mt %s\n", pc); break; case vbr_mtrh: MSGF(gfc, "\tvariable bitrate - VBR mtrh %s\n", pc); break; default: MSGF(gfc, "\t ?? oops, some new one ?? \n"); break; } if (cfg->write_lame_tag) MSGF(gfc, "\tusing LAME Tag\n"); MSGF(gfc, "\t...\n"); /* everything controlling psychoacoustic settings, like ATH, etc. */ MSGF(gfc, "\npsychoacoustic:\n\n"); switch (cfg->short_blocks) { default: case short_block_not_set: pc = "?"; break; case short_block_allowed: pc = "allowed"; break; case short_block_coupled: pc = "channel coupled"; break; case short_block_dispensed: pc = "dispensed"; break; case short_block_forced: pc = "forced"; break; } MSGF(gfc, "\tusing short blocks: %s\n", pc); MSGF(gfc, "\tsubblock gain: %d\n", cfg->subblock_gain); MSGF(gfc, "\tadjust masking: %g dB\n", gfc->sv_qnt.mask_adjust); MSGF(gfc, "\tadjust masking short: %g dB\n", gfc->sv_qnt.mask_adjust_short); MSGF(gfc, "\tquantization comparison: %d\n", cfg->quant_comp); MSGF(gfc, "\t ^ comparison short blocks: %d\n", cfg->quant_comp_short); MSGF(gfc, "\tnoise shaping: %d\n", cfg->noise_shaping); MSGF(gfc, "\t ^ amplification: %d\n", cfg->noise_shaping_amp); MSGF(gfc, "\t ^ stopping: %d\n", cfg->noise_shaping_stop); pc = "using"; if (cfg->ATHshort) pc = "the only masking for short blocks"; if (cfg->ATHonly) pc = "the only masking"; if (cfg->noATH) pc = "not used"; MSGF(gfc, "\tATH: %s\n", pc); MSGF(gfc, "\t ^ type: %d\n", cfg->ATHtype); MSGF(gfc, "\t ^ shape: %g%s\n", cfg->ATHcurve, " (only for type 4)"); MSGF(gfc, "\t ^ level adjustement: %g dB\n", cfg->ATH_offset_db); MSGF(gfc, "\t ^ adjust type: %d\n", gfc->ATH->use_adjust); MSGF(gfc, "\t ^ adjust sensitivity power: %f\n", gfc->ATH->aa_sensitivity_p); MSGF(gfc, "\texperimental psy tunings by Naoki Shibata\n"); MSGF(gfc, "\t adjust masking bass=%g dB, alto=%g dB, treble=%g dB, sfb21=%g dB\n", 10 * log10(gfc->sv_qnt.longfact[0]), 10 * log10(gfc->sv_qnt.longfact[7]), 10 * log10(gfc->sv_qnt.longfact[14]), 10 * log10(gfc->sv_qnt.longfact[21])); pc = cfg->use_temporal_masking_effect ? "yes" : "no"; MSGF(gfc, "\tusing temporal masking effect: %s\n", pc); MSGF(gfc, "\tinterchannel masking ratio: %g\n", cfg->interChRatio); MSGF(gfc, "\t...\n"); /* that's all ? */ MSGF(gfc, "\n"); return; } static void save_gain_values(lame_internal_flags * gfc) { SessionConfig_t const *const cfg = &gfc->cfg; RpgStateVar_t const *const rsv = &gfc->sv_rpg; RpgResult_t *const rov = &gfc->ov_rpg; /* save the ReplayGain value */ if (cfg->findReplayGain) { FLOAT const RadioGain = (FLOAT) GetTitleGain(rsv->rgdata); if (NEQ(RadioGain, GAIN_NOT_ENOUGH_SAMPLES)) { rov->RadioGain = (int) floor(RadioGain * 10.0 + 0.5); /* round to nearest */ } else { rov->RadioGain = 0; } } /* find the gain and scale change required for no clipping */ if (cfg->findPeakSample) { rov->noclipGainChange = (int) ceil(log10(rov->PeakSample / 32767.0) * 20.0 * 10.0); /* round up */ if (rov->noclipGainChange > 0) { /* clipping occurs */ rov->noclipScale = floor((32767.0f / rov->PeakSample) * 100.0f) / 100.0f; /* round down */ } else /* no clipping */ rov->noclipScale = -1.0f; } } static int update_inbuffer_size(lame_internal_flags * gfc, const int nsamples) { EncStateVar_t *const esv = &gfc->sv_enc; if (esv->in_buffer_0 == 0 || esv->in_buffer_nsamples < nsamples) { if (esv->in_buffer_0) { free(esv->in_buffer_0); } if (esv->in_buffer_1) { free(esv->in_buffer_1); } esv->in_buffer_0 = lame_calloc(sample_t, nsamples); esv->in_buffer_1 = lame_calloc(sample_t, nsamples); esv->in_buffer_nsamples = nsamples; } if (esv->in_buffer_0 == NULL || esv->in_buffer_1 == NULL) { if (esv->in_buffer_0) { free(esv->in_buffer_0); } if (esv->in_buffer_1) { free(esv->in_buffer_1); } esv->in_buffer_0 = 0; esv->in_buffer_1 = 0; esv->in_buffer_nsamples = 0; ERRORF(gfc, "Error: can't allocate in_buffer buffer\n"); return -2; } return 0; } static int calcNeeded(SessionConfig_t const * cfg) { int mf_needed; int pcm_samples_per_frame = 576 * cfg->mode_gr; /* some sanity checks */ #if ENCDELAY < MDCTDELAY # error ENCDELAY is less than MDCTDELAY, see encoder.h #endif #if FFTOFFSET > BLKSIZE # error FFTOFFSET is greater than BLKSIZE, see encoder.h #endif mf_needed = BLKSIZE + pcm_samples_per_frame - FFTOFFSET; /* amount needed for FFT */ /*mf_needed = Max(mf_needed, 286 + 576 * (1 + gfc->mode_gr)); */ mf_needed = Max(mf_needed, 512 + pcm_samples_per_frame - 32); assert(MFSIZE >= mf_needed); return mf_needed; } /* * THE MAIN LAME ENCODING INTERFACE * mt 3/00 * * input pcm data, output (maybe) mp3 frames. * This routine handles all buffering, resampling and filtering for you. * The required mp3buffer_size can be computed from num_samples, * samplerate and encoding rate, but here is a worst case estimate: * * mp3buffer_size in bytes = 1.25*num_samples + 7200 * * return code = number of bytes output in mp3buffer. can be 0 * * NOTE: this routine uses LAME's internal PCM data representation, * 'sample_t'. It should not be used by any application. * applications should use lame_encode_buffer(), * lame_encode_buffer_float() * lame_encode_buffer_int() * etc... depending on what type of data they are working with. */ static int lame_encode_buffer_sample_t(lame_internal_flags * gfc, int nsamples, unsigned char *mp3buf, const int mp3buf_size) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; int pcm_samples_per_frame = 576 * cfg->mode_gr; int mp3size = 0, ret, i, ch, mf_needed; int mp3out; sample_t *mfbuf[2]; sample_t *in_buffer[2]; if (gfc->class_id != LAME_ID) return -3; if (nsamples == 0) return 0; /* copy out any tags that may have been written into bitstream */ { /* if user specifed buffer size = 0, dont check size */ int const buf_size = mp3buf_size == 0 ? INT_MAX : mp3buf_size; mp3out = copy_buffer(gfc, mp3buf, buf_size, 0); } if (mp3out < 0) return mp3out; /* not enough buffer space */ mp3buf += mp3out; mp3size += mp3out; in_buffer[0] = esv->in_buffer_0; in_buffer[1] = esv->in_buffer_1; mf_needed = calcNeeded(cfg); mfbuf[0] = esv->mfbuf[0]; mfbuf[1] = esv->mfbuf[1]; while (nsamples > 0) { sample_t const *in_buffer_ptr[2]; int n_in = 0; /* number of input samples processed with fill_buffer */ int n_out = 0; /* number of samples output with fill_buffer */ /* n_in <> n_out if we are resampling */ in_buffer_ptr[0] = in_buffer[0]; in_buffer_ptr[1] = in_buffer[1]; /* copy in new samples into mfbuf, with resampling */ fill_buffer(gfc, mfbuf, &in_buffer_ptr[0], nsamples, &n_in, &n_out); /* compute ReplayGain of resampled input if requested */ if (cfg->findReplayGain && !cfg->decode_on_the_fly) if (AnalyzeSamples (gfc->sv_rpg.rgdata, &mfbuf[0][esv->mf_size], &mfbuf[1][esv->mf_size], n_out, cfg->channels_out) == GAIN_ANALYSIS_ERROR) return -6; /* update in_buffer counters */ nsamples -= n_in; in_buffer[0] += n_in; if (cfg->channels_out == 2) in_buffer[1] += n_in; /* update mfbuf[] counters */ esv->mf_size += n_out; assert(esv->mf_size <= MFSIZE); /* lame_encode_flush may have set gfc->mf_sample_to_encode to 0 * so we have to reinitialize it here when that happened. */ if (esv->mf_samples_to_encode < 1) { esv->mf_samples_to_encode = ENCDELAY + POSTDELAY; } esv->mf_samples_to_encode += n_out; if (esv->mf_size >= mf_needed) { /* encode the frame. */ /* mp3buf = pointer to current location in buffer */ /* mp3buf_size = size of original mp3 output buffer */ /* = 0 if we should not worry about the */ /* buffer size because calling program is */ /* to lazy to compute it */ /* mp3size = size of data written to buffer so far */ /* mp3buf_size-mp3size = amount of space avalable */ int buf_size = mp3buf_size - mp3size; if (mp3buf_size == 0) buf_size = INT_MAX; ret = lame_encode_mp3_frame(gfc, mfbuf[0], mfbuf[1], mp3buf, buf_size); if (ret < 0) return ret; mp3buf += ret; mp3size += ret; /* shift out old samples */ esv->mf_size -= pcm_samples_per_frame; esv->mf_samples_to_encode -= pcm_samples_per_frame; for (ch = 0; ch < cfg->channels_out; ch++) for (i = 0; i < esv->mf_size; i++) mfbuf[ch][i] = mfbuf[ch][i + pcm_samples_per_frame]; } } assert(nsamples == 0); return mp3size; } enum PCMSampleType { pcm_short_type , pcm_int_type , pcm_long_type , pcm_float_type , pcm_double_type }; static void lame_copy_inbuffer(lame_internal_flags* gfc, void const* l, void const* r, int nsamples, enum PCMSampleType pcm_type, int jump, FLOAT s) { SessionConfig_t const *const cfg = &gfc->cfg; EncStateVar_t *const esv = &gfc->sv_enc; sample_t* ib0 = esv->in_buffer_0; sample_t* ib1 = esv->in_buffer_1; FLOAT m[2][2]; /* Apply user defined re-scaling */ m[0][0] = s * cfg->pcm_transform[0][0]; m[0][1] = s * cfg->pcm_transform[0][1]; m[1][0] = s * cfg->pcm_transform[1][0]; m[1][1] = s * cfg->pcm_transform[1][1]; /* make a copy of input buffer, changing type to sample_t */ #define COPY_AND_TRANSFORM(T) \ { \ T const *bl = l, *br = r; \ int i; \ for (i = 0; i < nsamples; i++) { \ sample_t const xl = *bl; \ sample_t const xr = *br; \ sample_t const u = xl * m[0][0] + xr * m[0][1]; \ sample_t const v = xl * m[1][0] + xr * m[1][1]; \ ib0[i] = u; \ ib1[i] = v; \ bl += jump; \ br += jump; \ } \ } switch ( pcm_type ) { case pcm_short_type: COPY_AND_TRANSFORM(short int); break; case pcm_int_type: COPY_AND_TRANSFORM(int); break; case pcm_long_type: COPY_AND_TRANSFORM(long int); break; case pcm_float_type: COPY_AND_TRANSFORM(float); break; case pcm_double_type: COPY_AND_TRANSFORM(double); break; } } static int lame_encode_buffer_template(lame_global_flags * gfp, void const* buffer_l, void const* buffer_r, const int nsamples, unsigned char *mp3buf, const int mp3buf_size, enum PCMSampleType pcm_type, int aa, FLOAT norm) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; if (nsamples == 0) return 0; if (update_inbuffer_size(gfc, nsamples) != 0) { return -2; } /* make a copy of input buffer, changing type to sample_t */ if (cfg->channels_in > 1) { if (buffer_l == 0 || buffer_r == 0) { return 0; } lame_copy_inbuffer(gfc, buffer_l, buffer_r, nsamples, pcm_type, aa, norm); } else { if (buffer_l == 0) { return 0; } lame_copy_inbuffer(gfc, buffer_l, buffer_l, nsamples, pcm_type, aa, norm); } return lame_encode_buffer_sample_t(gfc, nsamples, mp3buf, mp3buf_size); } } return -3; } int lame_encode_buffer(lame_global_flags * gfp, const short int pcm_l[], const short int pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_short_type, 1, 1.0); } int lame_encode_buffer_float(lame_global_flags * gfp, const float pcm_l[], const float pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 32768 for full scale */ return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_float_type, 1, 1.0); } int lame_encode_buffer_ieee_float(lame_t gfp, const float pcm_l[], const float pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 1.0 for full scale */ return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_float_type, 1, 32767.0); } int lame_encode_buffer_interleaved_ieee_float(lame_t gfp, const float pcm[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 1.0 for full scale */ return lame_encode_buffer_template(gfp, pcm, pcm+1, nsamples, mp3buf, mp3buf_size, pcm_float_type, 2, 32767.0); } int lame_encode_buffer_ieee_double(lame_t gfp, const double pcm_l[], const double pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 1.0 for full scale */ return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_double_type, 1, 32767.0); } int lame_encode_buffer_interleaved_ieee_double(lame_t gfp, const double pcm[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 1.0 for full scale */ return lame_encode_buffer_template(gfp, pcm, pcm+1, nsamples, mp3buf, mp3buf_size, pcm_double_type, 2, 32767.0); } int lame_encode_buffer_int(lame_global_flags * gfp, const int pcm_l[], const int pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- MAX_INT for full scale */ FLOAT const norm = (1.0 / (1L << (8 * sizeof(int) - 16))); return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_int_type, 1, norm); } int lame_encode_buffer_long2(lame_global_flags * gfp, const long pcm_l[], const long pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- MAX_LONG for full scale */ FLOAT const norm = (1.0 / (1L << (8 * sizeof(long) - 16))); return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_long_type, 1, norm); } int lame_encode_buffer_long(lame_global_flags * gfp, const long pcm_l[], const long pcm_r[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- 32768 for full scale */ return lame_encode_buffer_template(gfp, pcm_l, pcm_r, nsamples, mp3buf, mp3buf_size, pcm_long_type, 1, 1.0); } int lame_encode_buffer_interleaved(lame_global_flags * gfp, short int pcm[], int nsamples, unsigned char *mp3buf, int mp3buf_size) { /* input is assumed to be normalized to +/- MAX_SHORT for full scale */ return lame_encode_buffer_template(gfp, pcm, pcm+1, nsamples, mp3buf, mp3buf_size, pcm_short_type, 2, 1.0); } int lame_encode_buffer_interleaved_int(lame_t gfp, const int pcm[], const int nsamples, unsigned char *mp3buf, const int mp3buf_size) { /* input is assumed to be normalized to +/- MAX(int) for full scale */ FLOAT const norm = (1.0 / (1L << (8 * sizeof(int)-16))); return lame_encode_buffer_template(gfp, pcm, pcm + 1, nsamples, mp3buf, mp3buf_size, pcm_int_type, 2, norm); } /***************************************************************** Flush mp3 buffer, pad with ancillary data so last frame is complete. Reset reservoir size to 0 but keep all PCM samples and MDCT data in memory This option is used to break a large file into several mp3 files that when concatenated together will decode with no gaps Because we set the reservoir=0, they will also decode seperately with no errors. *********************************************************************/ int lame_encode_flush_nogap(lame_global_flags * gfp, unsigned char *mp3buffer, int mp3buffer_size) { int rc = -3; if (is_lame_global_flags_valid(gfp)) { lame_internal_flags *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { flush_bitstream(gfc); /* if user specifed buffer size = 0, dont check size */ if (mp3buffer_size == 0) mp3buffer_size = INT_MAX; rc = copy_buffer(gfc, mp3buffer, mp3buffer_size, 1); save_gain_values(gfc); } } return rc; } /* called by lame_init_params. You can also call this after flush_nogap if you want to write new id3v2 and Xing VBR tags into the bitstream */ int lame_init_bitstream(lame_global_flags * gfp) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags *const gfc = gfp->internal_flags; if (gfc != 0) { gfc->ov_enc.frame_number = 0; if (gfp->write_id3tag_automatic) { (void) id3tag_write_v2(gfp); } /* initialize histogram data optionally used by frontend */ memset(gfc->ov_enc.bitrate_channelmode_hist, 0, sizeof(gfc->ov_enc.bitrate_channelmode_hist)); memset(gfc->ov_enc.bitrate_blocktype_hist, 0, sizeof(gfc->ov_enc.bitrate_blocktype_hist)); gfc->ov_rpg.PeakSample = 0.0; /* Write initial VBR Header to bitstream and init VBR data */ if (gfc->cfg.write_lame_tag) (void) InitVbrTag(gfp); return 0; } } return -3; } /*****************************************************************/ /* flush internal PCM sample buffers, then mp3 buffers */ /* then write id3 v1 tags into bitstream. */ /*****************************************************************/ int lame_encode_flush(lame_global_flags * gfp, unsigned char *mp3buffer, int mp3buffer_size) { lame_internal_flags *gfc; SessionConfig_t const *cfg; EncStateVar_t *esv; short int buffer[2][1152]; int imp3 = 0, mp3count, mp3buffer_size_remaining; /* we always add POSTDELAY=288 padding to make sure granule with real * data can be complety decoded (because of 50% overlap with next granule */ int end_padding; int frames_left; int samples_to_encode; int pcm_samples_per_frame; int mf_needed; int is_resampling_necessary; double resample_ratio = 1; if (!is_lame_global_flags_valid(gfp)) { return -3; } gfc = gfp->internal_flags; if (!is_lame_internal_flags_valid(gfc)) { return -3; } cfg = &gfc->cfg; esv = &gfc->sv_enc; /* Was flush already called? */ if (esv->mf_samples_to_encode < 1) { return 0; } pcm_samples_per_frame = 576 * cfg->mode_gr; mf_needed = calcNeeded(cfg); samples_to_encode = esv->mf_samples_to_encode - POSTDELAY; memset(buffer, 0, sizeof(buffer)); mp3count = 0; is_resampling_necessary = isResamplingNecessary(cfg); if (is_resampling_necessary) { resample_ratio = (double)cfg->samplerate_in / (double)cfg->samplerate_out; /* delay due to resampling; needs to be fixed, if resampling code gets changed */ samples_to_encode += 16. / resample_ratio; } end_padding = pcm_samples_per_frame - (samples_to_encode % pcm_samples_per_frame); if (end_padding < 576) end_padding += pcm_samples_per_frame; gfc->ov_enc.encoder_padding = end_padding; frames_left = (samples_to_encode + end_padding) / pcm_samples_per_frame; while (frames_left > 0 && imp3 >= 0) { int const frame_num = gfc->ov_enc.frame_number; int bunch = mf_needed - esv->mf_size; bunch *= resample_ratio; if (bunch > 1152) bunch = 1152; if (bunch < 1) bunch = 1; mp3buffer_size_remaining = mp3buffer_size - mp3count; /* if user specifed buffer size = 0, dont check size */ if (mp3buffer_size == 0) mp3buffer_size_remaining = 0; /* send in a frame of 0 padding until all internal sample buffers * are flushed */ imp3 = lame_encode_buffer(gfp, buffer[0], buffer[1], bunch, mp3buffer, mp3buffer_size_remaining); mp3buffer += imp3; mp3count += imp3; { /* even a single pcm sample can produce several frames! * for example: 1 Hz input file resampled to 8 kHz mpeg2.5 */ int const new_frames = gfc->ov_enc.frame_number - frame_num; if (new_frames > 0) frames_left -= new_frames; } } /* Set esv->mf_samples_to_encode to 0, so we may detect * and break loops calling it more than once in a row. */ esv->mf_samples_to_encode = 0; if (imp3 < 0) { /* some type of fatal error */ return imp3; } mp3buffer_size_remaining = mp3buffer_size - mp3count; /* if user specifed buffer size = 0, dont check size */ if (mp3buffer_size == 0) mp3buffer_size_remaining = INT_MAX; /* mp3 related stuff. bit buffer might still contain some mp3 data */ flush_bitstream(gfc); imp3 = copy_buffer(gfc, mp3buffer, mp3buffer_size_remaining, 1); save_gain_values(gfc); if (imp3 < 0) { /* some type of fatal error */ return imp3; } mp3buffer += imp3; mp3count += imp3; mp3buffer_size_remaining = mp3buffer_size - mp3count; /* if user specifed buffer size = 0, dont check size */ if (mp3buffer_size == 0) mp3buffer_size_remaining = INT_MAX; if (gfp->write_id3tag_automatic) { /* write a id3 tag to the bitstream */ (void) id3tag_write_v1(gfp); imp3 = copy_buffer(gfc, mp3buffer, mp3buffer_size_remaining, 0); if (imp3 < 0) { return imp3; } mp3count += imp3; } #if 0 { int const ed = gfc->ov_enc.encoder_delay; int const ep = gfc->ov_enc.encoder_padding; int const ns = (gfc->ov_enc.frame_number * pcm_samples_per_frame) - (ed + ep); double duration = ns; duration /= cfg->samplerate_out; MSGF(gfc, "frames=%d\n", gfc->ov_enc.frame_number); MSGF(gfc, "pcm_samples_per_frame=%d\n", pcm_samples_per_frame); MSGF(gfc, "encoder delay=%d\n", ed); MSGF(gfc, "encoder padding=%d\n", ep); MSGF(gfc, "sample count=%d (%g)\n", ns, cfg->samplerate_in * duration); MSGF(gfc, "duration=%g sec\n", duration); } #endif return mp3count; } /*********************************************************************** * * lame_close () * * frees internal buffers * ***********************************************************************/ int lame_close(lame_global_flags * gfp) { int ret = 0; if (gfp && gfp->class_id == LAME_ID) { lame_internal_flags *const gfc = gfp->internal_flags; gfp->class_id = 0; if (NULL == gfc || gfc->class_id != LAME_ID) { ret = -3; } if (NULL != gfc) { gfc->lame_init_params_successful = 0; gfc->class_id = 0; /* this routine will free all malloc'd data in gfc, and then free gfc: */ freegfc(gfc); gfp->internal_flags = NULL; } if (gfp->lame_allocated_gfp) { gfp->lame_allocated_gfp = 0; free(gfp); } } return ret; } /*****************************************************************/ /* flush internal mp3 buffers, and free internal buffers */ /*****************************************************************/ #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED int CDECL lame_encode_finish(lame_global_flags * gfp, unsigned char *mp3buffer, int mp3buffer_size); #else #endif int lame_encode_finish(lame_global_flags * gfp, unsigned char *mp3buffer, int mp3buffer_size) { int const ret = lame_encode_flush(gfp, mp3buffer, mp3buffer_size); (void) lame_close(gfp); return ret; } /*****************************************************************/ /* write VBR Xing header, and ID3 version 1 tag, if asked for */ /*****************************************************************/ void lame_mp3_tags_fid(lame_global_flags * gfp, FILE * fpStream); void lame_mp3_tags_fid(lame_global_flags * gfp, FILE * fpStream) { lame_internal_flags *gfc; SessionConfig_t const *cfg; if (!is_lame_global_flags_valid(gfp)) { return; } gfc = gfp->internal_flags; if (!is_lame_internal_flags_valid(gfc)) { return; } cfg = &gfc->cfg; if (!cfg->write_lame_tag) { return; } /* Write Xing header again */ if (fpStream && !fseek(fpStream, 0, SEEK_SET)) { int rc = PutVbrTag(gfp, fpStream); switch (rc) { default: /* OK */ break; case -1: ERRORF(gfc, "Error: could not update LAME tag.\n"); break; case -2: ERRORF(gfc, "Error: could not update LAME tag, file not seekable.\n"); break; case -3: ERRORF(gfc, "Error: could not update LAME tag, file not readable.\n"); break; } } } static int lame_init_internal_flags(lame_internal_flags* gfc) { if (NULL == gfc) return -1; gfc->cfg.vbr_min_bitrate_index = 1; /* not 0 ????? */ gfc->cfg.vbr_max_bitrate_index = 13; /* not 14 ????? */ gfc->cfg.decode_on_the_fly = 0; gfc->cfg.findReplayGain = 0; gfc->cfg.findPeakSample = 0; gfc->sv_qnt.OldValue[0] = 180; gfc->sv_qnt.OldValue[1] = 180; gfc->sv_qnt.CurrentStep[0] = 4; gfc->sv_qnt.CurrentStep[1] = 4; gfc->sv_qnt.masking_lower = 1; /* The reason for * int mf_samples_to_encode = ENCDELAY + POSTDELAY; * ENCDELAY = internal encoder delay. And then we have to add POSTDELAY=288 * because of the 50% MDCT overlap. A 576 MDCT granule decodes to * 1152 samples. To synthesize the 576 samples centered under this granule * we need the previous granule for the first 288 samples (no problem), and * the next granule for the next 288 samples (not possible if this is last * granule). So we need to pad with 288 samples to make sure we can * encode the 576 samples we are interested in. */ gfc->sv_enc.mf_samples_to_encode = ENCDELAY + POSTDELAY; gfc->sv_enc.mf_size = ENCDELAY - MDCTDELAY; /* we pad input with this many 0's */ gfc->ov_enc.encoder_padding = 0; gfc->ov_enc.encoder_delay = ENCDELAY; gfc->ov_rpg.RadioGain = 0; gfc->ov_rpg.noclipGainChange = 0; gfc->ov_rpg.noclipScale = -1.0; gfc->ATH = lame_calloc(ATH_t, 1); if (NULL == gfc->ATH) return -2; /* maybe error codes should be enumerated in lame.h ?? */ gfc->sv_rpg.rgdata = lame_calloc(replaygain_t, 1); if (NULL == gfc->sv_rpg.rgdata) { return -2; } return 0; } /* initialize mp3 encoder */ #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED static #else #endif int lame_init_old(lame_global_flags * gfp) { disable_FPE(); /* disable floating point exceptions */ memset(gfp, 0, sizeof(lame_global_flags)); gfp->class_id = LAME_ID; /* Global flags. set defaults here for non-zero values */ /* see lame.h for description */ /* set integer values to -1 to mean that LAME will compute the * best value, UNLESS the calling program as set it * (and the value is no longer -1) */ gfp->strict_ISO = MDB_MAXIMUM; gfp->mode = NOT_SET; gfp->original = 1; gfp->samplerate_in = 44100; gfp->num_channels = 2; gfp->num_samples = MAX_U_32_NUM; gfp->write_lame_tag = 1; gfp->quality = -1; gfp->short_blocks = short_block_not_set; gfp->subblock_gain = -1; gfp->lowpassfreq = 0; gfp->highpassfreq = 0; gfp->lowpasswidth = -1; gfp->highpasswidth = -1; gfp->VBR = vbr_off; gfp->VBR_q = 4; gfp->VBR_mean_bitrate_kbps = 128; gfp->VBR_min_bitrate_kbps = 0; gfp->VBR_max_bitrate_kbps = 0; gfp->VBR_hard_min = 0; gfp->quant_comp = -1; gfp->quant_comp_short = -1; gfp->msfix = -1; gfp->attackthre = -1; gfp->attackthre_s = -1; gfp->scale = 1; gfp->scale_left = 1; gfp->scale_right = 1; gfp->ATHcurve = -1; gfp->ATHtype = -1; /* default = -1 = set in lame_init_params */ /* 2 = equal loudness curve */ gfp->athaa_sensitivity = 0.0; /* no offset */ gfp->athaa_type = -1; gfp->useTemporal = -1; gfp->interChRatio = -1; gfp->findReplayGain = 0; gfp->decode_on_the_fly = 0; gfp->asm_optimizations.mmx = 1; gfp->asm_optimizations.amd3dnow = 1; gfp->asm_optimizations.sse = 1; gfp->preset = 0; gfp->write_id3tag_automatic = 1; gfp->report.debugf = &lame_report_def; gfp->report.errorf = &lame_report_def; gfp->report.msgf = &lame_report_def; gfp->internal_flags = lame_calloc(lame_internal_flags, 1); if (lame_init_internal_flags(gfp->internal_flags) < 0) { freegfc(gfp->internal_flags); gfp->internal_flags = 0; return -1; } return 0; } lame_global_flags * lame_init(void) { lame_global_flags *gfp; int ret; init_log_table(); gfp = lame_calloc(lame_global_flags, 1); if (gfp == NULL) return NULL; ret = lame_init_old(gfp); if (ret != 0) { free(gfp); return NULL; } gfp->lame_allocated_gfp = 1; return gfp; } /*********************************************************************** * * some simple statistics * * Robert Hegemann 2000-10-11 * ***********************************************************************/ /* histogram of used bitrate indexes: * One has to weight them to calculate the average bitrate in kbps * * bitrate indices: * there are 14 possible bitrate indices, 0 has the special meaning * "free format" which is not possible to mix with VBR and 15 is forbidden * anyway. * * stereo modes: * 0: LR number of left-right encoded frames * 1: LR-I number of left-right and intensity encoded frames * 2: MS number of mid-side encoded frames * 3: MS-I number of mid-side and intensity encoded frames * * 4: number of encoded frames * */ void lame_bitrate_kbps(const lame_global_flags * gfp, int bitrate_kbps[14]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; int i; if (cfg->free_format) { for (i = 0; i < 14; i++) bitrate_kbps[i] = -1; bitrate_kbps[0] = cfg->avg_bitrate; } else { for (i = 0; i < 14; i++) bitrate_kbps[i] = bitrate_table[cfg->version][i + 1]; } } } } void lame_bitrate_hist(const lame_global_flags * gfp, int bitrate_count[14]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; int i; if (cfg->free_format) { for (i = 0; i < 14; i++) { bitrate_count[i] = 0; } bitrate_count[0] = eov->bitrate_channelmode_hist[0][4]; } else { for (i = 0; i < 14; i++) { bitrate_count[i] = eov->bitrate_channelmode_hist[i + 1][4]; } } } } } void lame_stereo_mode_hist(const lame_global_flags * gfp, int stmode_count[4]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { EncResult_t const *const eov = &gfc->ov_enc; int i; for (i = 0; i < 4; i++) { stmode_count[i] = eov->bitrate_channelmode_hist[15][i]; } } } } void lame_bitrate_stereo_mode_hist(const lame_global_flags * gfp, int bitrate_stmode_count[14][4]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; int i; int j; if (cfg->free_format) { for (j = 0; j < 14; j++) for (i = 0; i < 4; i++) { bitrate_stmode_count[j][i] = 0; } for (i = 0; i < 4; i++) { bitrate_stmode_count[0][i] = eov->bitrate_channelmode_hist[0][i]; } } else { for (j = 0; j < 14; j++) { for (i = 0; i < 4; i++) { bitrate_stmode_count[j][i] = eov->bitrate_channelmode_hist[j + 1][i]; } } } } } } void lame_block_type_hist(const lame_global_flags * gfp, int btype_count[6]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { EncResult_t const *const eov = &gfc->ov_enc; int i; for (i = 0; i < 6; ++i) { btype_count[i] = eov->bitrate_blocktype_hist[15][i]; } } } } void lame_bitrate_block_type_hist(const lame_global_flags * gfp, int bitrate_btype_count[14][6]) { if (is_lame_global_flags_valid(gfp)) { lame_internal_flags const *const gfc = gfp->internal_flags; if (is_lame_internal_flags_valid(gfc)) { SessionConfig_t const *const cfg = &gfc->cfg; EncResult_t const *const eov = &gfc->ov_enc; int i, j; if (cfg->free_format) { for (j = 0; j < 14; ++j) { for (i = 0; i < 6; ++i) { bitrate_btype_count[j][i] = 0; } } for (i = 0; i < 6; ++i) { bitrate_btype_count[0][i] = eov->bitrate_blocktype_hist[0][i]; } } else { for (j = 0; j < 14; ++j) { for (i = 0; i < 6; ++i) { bitrate_btype_count[j][i] = eov->bitrate_blocktype_hist[j + 1][i]; } } } } } } /* end of lame.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/encoder.h���������������������������������������������������������������������000644 �001751 �001751 �00000010000 11561266675 017706� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * encoder.h include file * * Copyright (c) 2000 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_ENCODER_H #define LAME_ENCODER_H /*********************************************************************** * * encoder and decoder delays * ***********************************************************************/ /* * layer III enc->dec delay: 1056 (1057?) (observed) * layer II enc->dec delay: 480 (481?) (observed) * * polyphase 256-16 (dec or enc) = 240 * mdct 256+32 (9*32) (dec or enc) = 288 * total: 512+16 * * My guess is that delay of polyphase filterbank is actualy 240.5 * (there are technical reasons for this, see postings in mp3encoder). * So total Encode+Decode delay = ENCDELAY + 528 + 1 */ /* * ENCDELAY The encoder delay. * * Minimum allowed is MDCTDELAY (see below) * * The first 96 samples will be attenuated, so using a value less than 96 * will result in corrupt data for the first 96-ENCDELAY samples. * * suggested: 576 * set to 1160 to sync with FhG. */ #define ENCDELAY 576 /* * make sure there is at least one complete frame after the * last frame containing real data * * Using a value of 288 would be sufficient for a * a very sophisticated decoder that can decode granule-by-granule instead * of frame by frame. But lets not assume this, and assume the decoder * will not decode frame N unless it also has data for frame N+1 * */ /*#define POSTDELAY 288*/ #define POSTDELAY 1152 /* * delay of the MDCT used in mdct.c * original ISO routines had a delay of 528! * Takehiro's routines: */ #define MDCTDELAY 48 #define FFTOFFSET (224+MDCTDELAY) /* * Most decoders, including the one we use, have a delay of 528 samples. */ #define DECDELAY 528 /* number of subbands */ #define SBLIMIT 32 /* parition bands bands */ #define CBANDS 64 /* number of critical bands/scale factor bands where masking is computed*/ #define SBPSY_l 21 #define SBPSY_s 12 /* total number of scalefactor bands encoded */ #define SBMAX_l 22 #define SBMAX_s 13 #define PSFB21 6 #define PSFB12 6 /* FFT sizes */ #define BLKSIZE 1024 #define HBLKSIZE (BLKSIZE/2 + 1) #define BLKSIZE_s 256 #define HBLKSIZE_s (BLKSIZE_s/2 + 1) /* #define switch_pe 1800 */ #define NORM_TYPE 0 #define START_TYPE 1 #define SHORT_TYPE 2 #define STOP_TYPE 3 /* * Mode Extention: * When we are in stereo mode, there are 4 possible methods to store these * two channels. The stereo modes -m? are using a subset of them. * * -ms: MPG_MD_LR_LR * -mj: MPG_MD_LR_LR and MPG_MD_MS_LR * -mf: MPG_MD_MS_LR * -mi: all */ #if 0 #define MPG_MD_LR_LR 0 #define MPG_MD_LR_I 1 #define MPG_MD_MS_LR 2 #define MPG_MD_MS_I 3 #endif enum MPEGChannelMode { MPG_MD_LR_LR = 0 , MPG_MD_LR_I = 1 , MPG_MD_MS_LR = 2 , MPG_MD_MS_I = 3 }; #ifndef lame_internal_flags_defined #define lame_internal_flags_defined struct lame_internal_flags; typedef struct lame_internal_flags lame_internal_flags; #endif int lame_encode_mp3_frame(lame_internal_flags * gfc, sample_t const *inbuf_l, sample_t const *inbuf_r, unsigned char *mp3buf, int mp3buf_size); #endif /* LAME_ENCODER_H */ lame-3.100/libmp3lame/vector/Makefile.am������������������������������������������������������������000644 �001751 �001751 �00000002002 10550665531 021446� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.1 2007/01/09 10:15:53 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global if WITH_XMM noinst_LTLIBRARIES = liblamevectorroutines.la endif ##liblamecpuroutines_la_LIBADD = ##liblamecpuroutines_la_LDFLAGS = INCLUDES = @INCLUDES@ \ -I$(top_srcdir)/libmp3lame \ -I$(top_srcdir)/mpglib \ -I$(top_builddir) DEFS = @DEFS@ @CONFIG_DEFS@ xmm_sources = xmm_quantize_sub.c if WITH_XMM liblamevectorroutines_la_SOURCES = $(xmm_sources) endif noinst_HEADERS = lame_intrin.h EXTRA_liblamevectorroutines_la_SOURCES = $(xmm_sources) CLEANFILES = lclint.txt LCLINTFLAGS= \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint lclint.txt: ${liblamecpuroutines_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${liblamecpuroutines_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/vector/xmm_quantize_sub.c�����������������������������������������������������000644 �001751 �001751 �00000020415 13144574735 023167� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * MP3 quantization, intrinsics functions * * Copyright (c) 2005-2006 Gabriel Bouvigne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "lame.h" #include "machine.h" #include "encoder.h" #include "util.h" #include "lame_intrin.h" #ifdef HAVE_XMMINTRIN_H #include <xmmintrin.h> typedef union { int32_t _i_32[4]; /* unions are initialized by its first member */ float _float[4]; __m128 _m128; } vecfloat_union; #define TRI_SIZE (5-1) /* 1024 = 4**5 */ static const FLOAT costab[TRI_SIZE * 2] = { 9.238795325112867e-01, 3.826834323650898e-01, 9.951847266721969e-01, 9.801714032956060e-02, 9.996988186962042e-01, 2.454122852291229e-02, 9.999811752826011e-01, 6.135884649154475e-03 }; /* make sure functions with SSE instructions maintain their own properly aligned stack */ #if defined (__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2))) #define SSE_FUNCTION __attribute__((force_align_arg_pointer)) #else #define SSE_FUNCTION #endif SSE_FUNCTION void init_xrpow_core_sse(gr_info * const cod_info, FLOAT xrpow[576], int upper, FLOAT * sum) { int i; float tmp_max = 0; float tmp_sum = 0; int upper4 = (upper / 4) * 4; int rest = upper-upper4; const vecfloat_union fabs_mask = {{ 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF }}; const __m128 vec_fabs_mask = _mm_loadu_ps(&fabs_mask._float[0]); vecfloat_union vec_xrpow_max; vecfloat_union vec_sum; vecfloat_union vec_tmp; _mm_prefetch((char *) cod_info->xr, _MM_HINT_T0); _mm_prefetch((char *) xrpow, _MM_HINT_T0); vec_xrpow_max._m128 = _mm_set_ps1(0); vec_sum._m128 = _mm_set_ps1(0); for (i = 0; i < upper4; i += 4) { vec_tmp._m128 = _mm_loadu_ps(&(cod_info->xr[i])); /* load */ vec_tmp._m128 = _mm_and_ps(vec_tmp._m128, vec_fabs_mask); /* fabs */ vec_sum._m128 = _mm_add_ps(vec_sum._m128, vec_tmp._m128); vec_tmp._m128 = _mm_sqrt_ps(_mm_mul_ps(vec_tmp._m128, _mm_sqrt_ps(vec_tmp._m128))); vec_xrpow_max._m128 = _mm_max_ps(vec_xrpow_max._m128, vec_tmp._m128); /* retrieve max */ _mm_storeu_ps(&(xrpow[i]), vec_tmp._m128); /* store into xrpow[] */ } vec_tmp._m128 = _mm_set_ps1(0); switch (rest) { case 3: vec_tmp._float[2] = cod_info->xr[upper4+2]; case 2: vec_tmp._float[1] = cod_info->xr[upper4+1]; case 1: vec_tmp._float[0] = cod_info->xr[upper4+0]; vec_tmp._m128 = _mm_and_ps(vec_tmp._m128, vec_fabs_mask); /* fabs */ vec_sum._m128 = _mm_add_ps(vec_sum._m128, vec_tmp._m128); vec_tmp._m128 = _mm_sqrt_ps(_mm_mul_ps(vec_tmp._m128, _mm_sqrt_ps(vec_tmp._m128))); vec_xrpow_max._m128 = _mm_max_ps(vec_xrpow_max._m128, vec_tmp._m128); /* retrieve max */ switch (rest) { case 3: xrpow[upper4+2] = vec_tmp._float[2]; case 2: xrpow[upper4+1] = vec_tmp._float[1]; case 1: xrpow[upper4+0] = vec_tmp._float[0]; default: break; } default: break; } tmp_sum = vec_sum._float[0] + vec_sum._float[1] + vec_sum._float[2] + vec_sum._float[3]; { float ma = vec_xrpow_max._float[0] > vec_xrpow_max._float[1] ? vec_xrpow_max._float[0] : vec_xrpow_max._float[1]; float mb = vec_xrpow_max._float[2] > vec_xrpow_max._float[3] ? vec_xrpow_max._float[2] : vec_xrpow_max._float[3]; tmp_max = ma > mb ? ma : mb; } cod_info->xrpow_max = tmp_max; *sum = tmp_sum; } SSE_FUNCTION static void store4(__m128 v, float* f0, float* f1, float* f2, float* f3) { vecfloat_union r; r._m128 = v; *f0 = r._float[0]; *f1 = r._float[1]; *f2 = r._float[2]; *f3 = r._float[3]; } SSE_FUNCTION void fht_SSE2(FLOAT * fz, int n) { const FLOAT *tri = costab; int k4; FLOAT *fi, *gi; FLOAT const *fn; n <<= 1; /* to get BLKSIZE, because of 3DNow! ASM routine */ fn = fz + n; k4 = 4; do { FLOAT s1, c1; int i, k1, k2, k3, kx; kx = k4 >> 1; k1 = k4; k2 = k4 << 1; k3 = k2 + k1; k4 = k2 << 1; fi = fz; gi = fi + kx; do { FLOAT f0, f1, f2, f3; f1 = fi[0] - fi[k1]; f0 = fi[0] + fi[k1]; f3 = fi[k2] - fi[k3]; f2 = fi[k2] + fi[k3]; fi[k2] = f0 - f2; fi[0] = f0 + f2; fi[k3] = f1 - f3; fi[k1] = f1 + f3; f1 = gi[0] - gi[k1]; f0 = gi[0] + gi[k1]; f3 = SQRT2 * gi[k3]; f2 = SQRT2 * gi[k2]; gi[k2] = f0 - f2; gi[0] = f0 + f2; gi[k3] = f1 - f3; gi[k1] = f1 + f3; gi += k4; fi += k4; } while (fi < fn); c1 = tri[0]; s1 = tri[1]; for (i = 1; i < kx; i++) { __m128 v_s2; __m128 v_c2; __m128 v_c1; __m128 v_s1; FLOAT c2, s2, s1_2 = s1+s1; c2 = 1 - s1_2 * s1; s2 = s1_2 * c1; fi = fz + i; gi = fz + k1 - i; v_c1 = _mm_set_ps1(c1); v_s1 = _mm_set_ps1(s1); v_c2 = _mm_set_ps1(c2); v_s2 = _mm_set_ps1(s2); { static const vecfloat_union sign_mask = {{0x80000000,0,0,0}}; v_c1 = _mm_xor_ps(sign_mask._m128, v_c1); /* v_c1 := {-c1, +c1, +c1, +c1} */ } { static const vecfloat_union sign_mask = {{0,0x80000000,0,0}}; v_s1 = _mm_xor_ps(sign_mask._m128, v_s1); /* v_s1 := {+s1, -s1, +s1, +s1} */ } { static const vecfloat_union sign_mask = {{0,0,0x80000000,0x80000000}}; v_c2 = _mm_xor_ps(sign_mask._m128, v_c2); /* v_c2 := {+c2, +c2, -c2, -c2} */ } do { __m128 p, q, r; q = _mm_setr_ps(fi[k1], fi[k3], gi[k1], gi[k3]); /* Q := {fi_k1,fi_k3,gi_k1,gi_k3}*/ p = _mm_mul_ps(_mm_set_ps1(s2), q); /* P := s2 * Q */ q = _mm_mul_ps(v_c2, q); /* Q := c2 * Q */ q = _mm_shuffle_ps(q, q, _MM_SHUFFLE(1,0,3,2)); /* Q := {-c2*gi_k1,-c2*gi_k3,c2*fi_k1,c2*fi_k3} */ p = _mm_add_ps(p, q); r = _mm_setr_ps(gi[0], gi[k2], fi[0], fi[k2]); /* R := {gi_0,gi_k2,fi_0,fi_k2} */ q = _mm_sub_ps(r, p); /* Q := {gi_0-p0,gi_k2-p1,fi_0-p2,fi_k2-p3} */ r = _mm_add_ps(r, p); /* R := {gi_0+p0,gi_k2+p1,fi_0+p2,fi_k2+p3} */ p = _mm_shuffle_ps(q, r, _MM_SHUFFLE(2,0,2,0)); /* P := {q0,q2,r0,r2} */ p = _mm_shuffle_ps(p, p, _MM_SHUFFLE(3,1,2,0)); /* P := {q0,r0,q2,r2} */ q = _mm_shuffle_ps(q, r, _MM_SHUFFLE(3,1,3,1)); /* Q := {q1,q3,r1,r3} */ r = _mm_mul_ps(v_c1, q); q = _mm_mul_ps(v_s1, q); q = _mm_shuffle_ps(q, q, _MM_SHUFFLE(0,1,2,3)); /* Q := {q3,q2,q1,q0} */ q = _mm_add_ps(q, r); store4(_mm_sub_ps(p, q), &gi[k3], &gi[k2], &fi[k3], &fi[k2]); store4(_mm_add_ps(p, q), &gi[k1], &gi[ 0], &fi[k1], &fi[ 0]); gi += k4; fi += k4; } while (fi < fn); c2 = c1; c1 = c2 * tri[0] - s1 * tri[1]; s1 = c2 * tri[1] + s1 * tri[0]; } tri += 2; } while (k4 < n); } #endif /* HAVE_XMMINTRIN_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/vector/Makefile.in������������������������������������������������������������000644 �001751 �001751 �00000046416 13170220146 021466� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = libmp3lame/vector ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblamevectorroutines_la_LIBADD = am__liblamevectorroutines_la_SOURCES_DIST = xmm_quantize_sub.c am__objects_1 = xmm_quantize_sub.lo @WITH_XMM_TRUE@am_liblamevectorroutines_la_OBJECTS = $(am__objects_1) liblamevectorroutines_la_OBJECTS = \ $(am_liblamevectorroutines_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @WITH_XMM_TRUE@am_liblamevectorroutines_la_rpath = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(liblamevectorroutines_la_SOURCES) \ $(EXTRA_liblamevectorroutines_la_SOURCES) DIST_SOURCES = $(am__liblamevectorroutines_la_SOURCES_DIST) \ $(EXTRA_liblamevectorroutines_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ @CONFIG_DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ \ -I$(top_srcdir)/libmp3lame \ -I$(top_srcdir)/mpglib \ -I$(top_builddir) INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign @WITH_XMM_TRUE@noinst_LTLIBRARIES = liblamevectorroutines.la xmm_sources = xmm_quantize_sub.c @WITH_XMM_TRUE@liblamevectorroutines_la_SOURCES = $(xmm_sources) noinst_HEADERS = lame_intrin.h EXTRA_liblamevectorroutines_la_SOURCES = $(xmm_sources) CLEANFILES = lclint.txt LCLINTFLAGS = \ +posixlib \ +showsummary \ +showalluses \ +whichlib \ +forcehints \ -fixedformalarray \ +matchanyintegral \ -Dlint all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libmp3lame/vector/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libmp3lame/vector/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblamevectorroutines.la: $(liblamevectorroutines_la_OBJECTS) $(liblamevectorroutines_la_DEPENDENCIES) $(EXTRA_liblamevectorroutines_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_liblamevectorroutines_la_rpath) $(liblamevectorroutines_la_OBJECTS) $(liblamevectorroutines_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmm_quantize_sub.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section lclint.txt: ${liblamecpuroutines_la_SOURCES} ${noinst_HEADERS} @lclint ${LCLINTFLAGS} ${INCLUDES} ${DEFS} ${liblamecpuroutines_la_SOURCES} 2>&1 >lclint.txt || true lclint: lclint.txt more lclint.txt #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/vector/lame_intrin.h����������������������������������������������������������000644 �001751 �001751 �00000001765 11561266675 022114� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * lame_intrin.h include file * * Copyright (c) 2006 Gabriel Bouvigne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef LAME_INTRIN_H #define LAME_INTRIN_H void init_xrpow_core_sse(gr_info * const cod_info, FLOAT xrpow[576], int upper, FLOAT * sum); void fht_SSE2(FLOAT* , int); #endif �����������lame-3.100/libmp3lame/i386/scalar.nas���������������������������������������������������������������000644 �001751 �001751 �00000062605 07232631510 020561� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; ; (C) Frank Klemm 1995,99,2000 ; Dedicated to the LAME project ; ; %include "nasm.h" segment_code ; float_t scalar04_float32_i387 ( ; const float32_t* const p, ; const float32_t* const q ); proc scalar04_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 endproc proc scalar08_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 endproc proc scalar12_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 fld dword [eax + 32] fmul dword [edx + 32] faddp st1,st0 fld dword [eax + 36] fmul dword [edx + 36] faddp st1,st0 fld dword [eax + 40] fmul dword [edx + 40] faddp st1,st0 fld dword [eax + 44] fmul dword [edx + 44] faddp st1,st0 endproc proc scalar16_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 fld dword [eax + 32] fmul dword [edx + 32] faddp st1,st0 fld dword [eax + 36] fmul dword [edx + 36] faddp st1,st0 fld dword [eax + 40] fmul dword [edx + 40] faddp st1,st0 fld dword [eax + 44] fmul dword [edx + 44] faddp st1,st0 fld dword [eax + 48] fmul dword [edx + 48] faddp st1,st0 fld dword [eax + 52] fmul dword [edx + 52] faddp st1,st0 fld dword [eax + 56] fmul dword [edx + 56] faddp st1,st0 fld dword [eax + 60] fmul dword [edx + 60] faddp st1,st0 endproc proc scalar20_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 fld dword [eax + 32] fmul dword [edx + 32] faddp st1,st0 fld dword [eax + 36] fmul dword [edx + 36] faddp st1,st0 fld dword [eax + 40] fmul dword [edx + 40] faddp st1,st0 fld dword [eax + 44] fmul dword [edx + 44] faddp st1,st0 fld dword [eax + 48] fmul dword [edx + 48] faddp st1,st0 fld dword [eax + 52] fmul dword [edx + 52] faddp st1,st0 fld dword [eax + 56] fmul dword [edx + 56] faddp st1,st0 fld dword [eax + 60] fmul dword [edx + 60] faddp st1,st0 fld dword [eax + 64] fmul dword [edx + 64] faddp st1,st0 fld dword [eax + 68] fmul dword [edx + 68] faddp st1,st0 fld dword [eax + 72] fmul dword [edx + 72] faddp st1,st0 fld dword [eax + 76] fmul dword [edx + 76] faddp st1,st0 endproc proc scalar24_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 fld dword [eax + 32] fmul dword [edx + 32] faddp st1,st0 fld dword [eax + 36] fmul dword [edx + 36] faddp st1,st0 fld dword [eax + 40] fmul dword [edx + 40] faddp st1,st0 fld dword [eax + 44] fmul dword [edx + 44] faddp st1,st0 fld dword [eax + 48] fmul dword [edx + 48] faddp st1,st0 fld dword [eax + 52] fmul dword [edx + 52] faddp st1,st0 fld dword [eax + 56] fmul dword [edx + 56] faddp st1,st0 fld dword [eax + 60] fmul dword [edx + 60] faddp st1,st0 fld dword [eax + 64] fmul dword [edx + 64] faddp st1,st0 fld dword [eax + 68] fmul dword [edx + 68] faddp st1,st0 fld dword [eax + 72] fmul dword [edx + 72] faddp st1,st0 fld dword [eax + 76] fmul dword [edx + 76] faddp st1,st0 fld dword [eax + 80] fmul dword [edx + 80] faddp st1,st0 fld dword [eax + 84] fmul dword [edx + 84] faddp st1,st0 fld dword [eax + 88] fmul dword [edx + 88] faddp st1,st0 fld dword [eax + 92] fmul dword [edx + 92] faddp st1,st0 endproc proc scalar32_float32_i387 %$p arg 4 %$q arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 fld dword [eax + 16] fmul dword [edx + 16] faddp st1,st0 fld dword [eax + 20] fmul dword [edx + 20] faddp st1,st0 fld dword [eax + 24] fmul dword [edx + 24] faddp st1,st0 fld dword [eax + 28] fmul dword [edx + 28] faddp st1,st0 fld dword [eax + 32] fmul dword [edx + 32] faddp st1,st0 fld dword [eax + 36] fmul dword [edx + 36] faddp st1,st0 fld dword [eax + 40] fmul dword [edx + 40] faddp st1,st0 fld dword [eax + 44] fmul dword [edx + 44] faddp st1,st0 fld dword [eax + 48] fmul dword [edx + 48] faddp st1,st0 fld dword [eax + 52] fmul dword [edx + 52] faddp st1,st0 fld dword [eax + 56] fmul dword [edx + 56] faddp st1,st0 fld dword [eax + 60] fmul dword [edx + 60] faddp st1,st0 fld dword [eax + 64] fmul dword [edx + 64] faddp st1,st0 fld dword [eax + 68] fmul dword [edx + 68] faddp st1,st0 fld dword [eax + 72] fmul dword [edx + 72] faddp st1,st0 fld dword [eax + 76] fmul dword [edx + 76] faddp st1,st0 fld dword [eax + 80] fmul dword [edx + 80] faddp st1,st0 fld dword [eax + 84] fmul dword [edx + 84] faddp st1,st0 fld dword [eax + 88] fmul dword [edx + 88] faddp st1,st0 fld dword [eax + 92] fmul dword [edx + 92] faddp st1,st0 fld dword [eax + 96] fmul dword [edx + 96] faddp st1,st0 fld dword [eax +100] fmul dword [edx +100] faddp st1,st0 fld dword [eax +104] fmul dword [edx +104] faddp st1,st0 fld dword [eax +108] fmul dword [edx +108] faddp st1,st0 fld dword [eax +112] fmul dword [edx +112] faddp st1,st0 fld dword [eax +116] fmul dword [edx +116] faddp st1,st0 fld dword [eax +120] fmul dword [edx +120] faddp st1,st0 fld dword [eax +124] fmul dword [edx +124] faddp st1,st0 endproc ; float_t scalar4n_float32_i387 ( ; const float32_t* const p, ; const float32_t* const q, ; const size_t len ); proc scalar4n_float32_i387 %$p arg 4 %$q arg 4 %$len arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] mov ecx,[sp(%$len)] fld dword [eax] fmul dword [edx] fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 dec ecx jz .ret1 add eax,byte 16 add edx,byte 16 .lbl1 fld dword [eax] fmul dword [edx] faddp st1,st0 fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 add eax,byte 16 add edx,byte 16 dec ecx jnz .lbl1 .ret1 endproc ; float_t scalar1n_float32_i387 ( ; const float32_t* const p, ; const float32_t* const q, ; const size_t len ); proc scalar1n_float32_i387 %$p arg 4 %$q arg 4 %$len arg 4 ;;; alloc mov eax,[sp(%$p)] mov edx,[sp(%$q)] mov ecx,[sp(%$len)] fld0 shr ecx,1 jnc .lbl2 fld dword [eax] fmul dword [edx] faddp st1,st0 add eax,byte 4 add edx,byte 4 .lbl2 shr ecx,1 jnc .lbl3 fld dword [eax] fmul dword [edx] faddp st1,st0 fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 add eax,byte 8 add edx,byte 8 and ecx,ecx .lbl3 jz .ret2 .lbl4 fld dword [eax] fmul dword [edx] faddp st1,st0 fld dword [eax + 4] fmul dword [edx + 4] faddp st1,st0 fld dword [eax + 8] fmul dword [edx + 8] faddp st1,st0 fld dword [eax + 12] fmul dword [edx + 12] faddp st1,st0 add eax,byte 16 add edx,byte 16 dec ecx jnz .lbl4 .ret2 endproc proc scalar04_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar08_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar12_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+32] pmov mm3,qword [eax+40] pfmul mm2,qword [edx+32] pfmul mm3,qword [edx+40] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar16_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+32] pmov mm3,qword [eax+40] pfmul mm2,qword [edx+32] pfmul mm3,qword [edx+40] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+48] pmov mm3,qword [eax+56] pfmul mm2,qword [edx+48] pfmul mm3,qword [edx+56] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar20_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+32] pmov mm3,qword [eax+40] pfmul mm2,qword [edx+32] pfmul mm3,qword [edx+40] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+48] pmov mm3,qword [eax+56] pfmul mm2,qword [edx+48] pfmul mm3,qword [edx+56] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+64] pmov mm3,qword [eax+72] pfmul mm2,qword [edx+64] pfmul mm3,qword [edx+72] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar24_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+32] pmov mm3,qword [eax+40] pfmul mm2,qword [edx+32] pfmul mm3,qword [edx+40] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+48] pmov mm3,qword [eax+56] pfmul mm2,qword [edx+48] pfmul mm3,qword [edx+56] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+64] pmov mm3,qword [eax+72] pfmul mm2,qword [edx+64] pfmul mm3,qword [edx+72] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+80] pmov mm3,qword [eax+88] pfmul mm2,qword [edx+80] pfmul mm3,qword [edx+88] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar32_float32_3DNow %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] pmov mm2,qword [eax+16] pmov mm3,qword [eax+24] pfmul mm2,qword [edx+16] pfmul mm3,qword [edx+24] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+32] pmov mm3,qword [eax+40] pfmul mm2,qword [edx+32] pfmul mm3,qword [edx+40] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+48] pmov mm3,qword [eax+56] pfmul mm2,qword [edx+48] pfmul mm3,qword [edx+56] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+64] pmov mm3,qword [eax+72] pfmul mm2,qword [edx+64] pfmul mm3,qword [edx+72] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+80] pmov mm3,qword [eax+88] pfmul mm2,qword [edx+80] pfmul mm3,qword [edx+88] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+96] pmov mm3,qword [eax+104] pfmul mm2,qword [edx+96] pfmul mm3,qword [edx+104] pfadd mm0,mm2 pfadd mm1,mm3 pmov mm2,qword [eax+112] pmov mm3,qword [eax+120] pfmul mm2,qword [edx+112] pfmul mm3,qword [edx+120] pfadd mm0,mm2 pfadd mm1,mm3 pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar4n_float32_3DNow %$p arg 4 %$q arg 4 %$len arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] mov ecx,[sp(%$len)] pmov mm0,qword [eax] pmov mm1,qword [eax+8] pfmul mm0,qword [edx] pfmul mm1,qword [edx+8] dec ecx jz .ret4 add eax,byte 16 add edx,byte 16 .lbl4: pmov mm2,qword [eax] pmov mm3,qword [eax+8] pfmul mm2,qword [edx] pfmul mm3,qword [edx+8] add eax,byte 16 add edx,byte 16 pfadd mm0,mm2 pfadd mm1,mm3 dec ecx jnz .lbl4 .ret4: pfadd mm0,mm1 pmov qword [sp(%$p)],mm0 femms fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar1n_float32_3DNow jmp scalar24_float32_i387 endproc proc scalar04_float32_SIMD jmp scalar04_float32_i387 endproc proc scalar08_float32_SIMD %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] movups xmm0, [eax] movups xmm1, [eax+16] mulps xmm0, [edx] mulps xmm1, [edx+16] addps xmm0,xmm1 sub esp,16 movups [esp],xmm0 fld dword [esp+ 0] fadd dword [esp+ 4] fadd dword [esp+ 8] fadd dword [esp+12] add esp,16 endproc proc scalar12_float32_SIMD jmp scalar12_float32_i387 endproc proc scalar16_float32_SIMD %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] movups xmm0, [eax] movups xmm1, [eax+16] mulps xmm0, [edx] mulps xmm1, [edx+16] movups xmm2, [eax+32] movups xmm3, [eax+48] mulps xmm2, [edx+32] mulps xmm3, [edx+48] addps xmm0,xmm2 addps xmm1,xmm3 addps xmm0,xmm1 sub esp,16 movups [esp],xmm0 fld dword [esp+ 0] fadd dword [esp+ 4] fadd dword [esp+ 8] fadd dword [esp+12] add esp,16 endproc proc scalar20_float32_SIMD jmp scalar20_float32_i387 endproc proc scalar24_float32_SIMD %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] movups xmm0, [eax] movups xmm1, [eax+16] mulps xmm0, [edx] mulps xmm1, [edx+16] movups xmm2, [eax+32] movups xmm3, [eax+48] mulps xmm2, [edx+32] mulps xmm3, [edx+48] addps xmm0,xmm2 addps xmm1,xmm3 movups xmm2, [eax+64] movups xmm3, [eax+80] mulps xmm2, [edx+64] mulps xmm3, [edx+80] addps xmm0,xmm2 addps xmm1,xmm3 addps xmm0,xmm1 sub esp,16 movups [esp],xmm0 fld dword [esp+ 0] fadd dword [esp+ 4] fadd dword [esp+ 8] fadd dword [esp+12] add esp,16 endproc proc scalar32_float32_SIMD %$p arg 4 %$q arg 4 mov eax,[sp(%$p)] mov edx,[sp(%$q)] movups xmm0, [eax] movups xmm1, [eax+16] mulps xmm0, [edx] mulps xmm1, [edx+16] movups xmm2, [eax+32] movups xmm3, [eax+48] mulps xmm2, [edx+32] mulps xmm3, [edx+48] addps xmm0,xmm2 addps xmm1,xmm3 movups xmm2, [eax+64] movups xmm3, [eax+80] mulps xmm2, [edx+64] mulps xmm3, [edx+80] addps xmm0,xmm2 addps xmm1,xmm3 movups xmm2, [eax+96] movups xmm3, [eax+112] mulps xmm2, [edx+96] mulps xmm3, [edx+112] addps xmm0,xmm2 addps xmm1,xmm3 addps xmm0,xmm1 ;sub esp,16 ;movups [esp],xmm0 ;fld dword [esp+ 0] ;fadd dword [esp+ 4] ;fadd dword [esp+ 8] ;fadd dword [esp+12] ;add esp,16 movhlps xmm1,xmm0 addps xmm0,xmm1 movlps [sp(%$p)],xmm0 fld dword [sp(%$p)] fadd dword [sp(%$p)+4] endproc proc scalar4n_float32_SIMD jmp scalar4n_float32_i387 endproc proc scalar1n_float32_SIMD jmp scalar1n_float32_i387 endproc ; end of scalar.nas ���������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/Makefile.am��������������������������������������������������������������000644 �001751 �001751 �00000003244 12156036155 020644� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.28 2013/06/12 09:16:29 rbrito Exp $ AUTOMAKE_OPTIONS = foreign DEFS = @DEFS@ @CONFIG_DEFS@ ECHO ?= echo nasm_sources = \ choose_table.nas \ cpu_feat.nas \ fft3dn.nas \ fftsse.nas if HAVE_NASM noinst_LTLIBRARIES = liblameasmroutines.la liblameasmroutines_la_SOURCES = $(nasm_sources) liblameasmroutines_la_DEPENDENCIES = $(nasm_sources:.nas.lo) am_liblameasmroutines_la_OBJECTS = \ choose_table$U.lo \ cpu_feat$U.lo \ fft3dn$U.lo \ fftsse$U.lo endif noinst_HEADERS = nasm.h INCLUDES = @INCLUDES@ -I$(top_srcdir)/libmp3lame/@CPUTYPE@ SUFFIXES = .nas .lo EXTRA_liblameasmroutines_la_SOURCES = $(nasm_sources) CLEANFILES = \ choose_table.o.lst \ choose_table.lo.lst \ cpu_feat.o.lst \ cpu_feat.lo.lst \ fft3dn.o.lst \ fft3dn.lo.lst \ fftsse.o.lst \ fftsse.lo.lst EXTRA_DIST = \ fft.nas \ fftfpu.nas \ ffttbl.nas \ scalar.nas NASM = @NASM@ NASMFLAGS=@NASM_FORMAT@ -i $(top_srcdir)/libmp3lame/@CPUTYPE@/ .nas.o: $< nasm.h $(NASM) $(NASMFLAGS) $< -o $@ -l $@.lst .nas.lo: $< nasm.h $(ECHO) '# Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)' >$@ $(ECHO) "pic_object='$*.o'" >>$@ $(ECHO) "non_pic_object='$*.o'" >>$@ $(NASM) $(NASMFLAGS) $< -o $*.o -l $@.lst COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/fftfpu.nas���������������������������������������������������������������000644 �001751 �001751 �00000023714 07166617346 020625� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; back port from GOGO-no coda 2.24b by Takehiro TOMINAGA ; GOGO-no-coda ; Copyright (C) 1999 shigeo ; special thanks to URURI %include "nasm.h" externdef costab_fft externdef sintab_fft segment_data align 32 D_1_41421 dd 1.41421356 D_1_0 dd 1.0 D_0_5 dd 0.5 D_0_25 dd 0.25 D_0_0005 dd 0.0005 D_0_0 dd 0.0 segment_code ;void fht(float *fz, int n); proc fht_FPU %$fz arg 4 %$n arg 4 %$k local 4 %$f0 local 4 %$f1 local 4 %$f2 local 4 %$f3 local 4 %$g0 local 4 %$g1 local 4 %$g2 local 4 %$g3 local 4 %$s1 local 4 %$c1 local 4 %$s2 local 4 %$c2 local 4 %$t_s local 4 %$t_c local 4 alloc pushd ebp, ebx, esi, edi fht_FPU_1st_part: fht_FPU_2nd_part: fht_FPU_3rd_part: .do_init: mov r3, 16 ;k1*fsize = 4*fsize = k4 mov r4, 8 ;kx = k1/2 mov r2, 48 ;k3*fsize mov dword [sp(%$k)], 2 ;k = 2 mov r0, [sp(%$fz)] ;fi lea r1, [r0+8] ;gi = fi + kx .do: .do2: ;f fld dword [r0] fsub dword [r0+r3] fld dword [r0] fadd dword [r0+r3] fld dword [r0+r3*2] fsub dword [r0+r2] fld dword [r0+r3*2] fadd dword [r0+r2] ;f2 f3 f0 f1 fld st2 ;f0 f2 f3 f0 f1 fadd st0, st1 fstp dword [r0] ;fi[0] fld st3 ;f1 f2 f3 f0 f1 fadd st0, st2 fstp dword [r0+r3] ;fi[k1] fsubr st0, st2 ;f0-f2 f3 f0 f1 fstp dword [r0+r3*2] ;fi[k2] fsubr st0, st2 ;f1-f3 f0 f1 fstp dword [r0+r2] ;fi[k3] fcompp ;g fld dword [r1] fsub dword [r1+r3] fld dword [r1] fadd dword [r1+r3] fld dword [D_1_41421] fmul dword [r1+r2] fld dword [D_1_41421] fmul dword [r1+r3*2] ;g2 g3 g0 g1 fld st2 ;g0 g2 g3 g0 g1 fadd st0, st1 fstp dword [r1] ;gi[0] fld st3 ;g1 g2 g3 g0 g1 fadd st0, st2 fstp dword [r1+r3] ;gi[k1] fsubr st0, st2 ;g0-g2 g3 g0 g1 fstp dword [r1+r3*2] ;gi[k2] fsubr st0, st2 ;g1-g3 g0 g1 fstp dword [r1+r2] ;gi[k3] fcompp lea r0, [r0+r3*4] lea r1, [r1+r3*4] cmp r0, r6 jb .do2 mov r0, [sp(%$k)] fld dword [costab_fft +r0*4] fstp dword [sp(%$t_c)] fld dword [sintab_fft +r0*4] fstp dword [sp(%$t_s)] fld dword [D_1_0] fstp dword [sp(%$c1)] fld dword [D_0_0] fstp dword [sp(%$s1)] .for_init: mov r5, 4 ;i = 1*fsize .for: fld dword [sp(%$c1)] fmul dword [sp(%$t_c)] fld dword [sp(%$s1)] fmul dword [sp(%$t_s)] fsubp st1, st0 ;c1 fld dword [sp(%$c1)] fmul dword [sp(%$t_s)] fld dword [sp(%$s1)] fmul dword [sp(%$t_c)] faddp st1, st0 ;s1 c1 fld st1 fmul st0, st0 ;c1c1 s1 c1 fld st1 fmul st0, st0 ;s1s1 c1c1 s1 c1 fsubp st1, st0 ;c2 s1 c1 fstp dword [sp(%$c2)] ;s1 c1 fld st1 ;c1 s1 c1 fmul st0, st1 ;c1s1 s1 c1 fadd st0, st0 ;s2 s1 c1 fstp dword [sp(%$s2)] ;s1 c1 fstp dword [sp(%$s1)] ;c1 fstp dword [sp(%$c1)] ; mov r0, [sp(%$fz)] add r0, r5 ;r0 = fi mov r1, [sp(%$fz)] add r1, r3 sub r1, r5 ;r1 = gi .do3: fld dword [sp(%$s2)] fmul dword [r0+r3] fld dword [sp(%$c2)] fmul dword [r1+r3] fsubp st1, st0 ;b = s2*fi[k1] - c2*gi[k1] fld dword [sp(%$c2)] fmul dword [r0+r3] fld dword [sp(%$s2)] fmul dword [r1+r3] faddp st1, st0 ;a = c2*fi[k1] + s2*gi[k1] b fld dword [r0] fsub st0, st1 ;f1 a b fstp dword [sp(%$f1)] ;a b fadd dword [r0] ;f0 b fstp dword [sp(%$f0)] ;b fld dword [r1] fsub st0, st1 ;g1 b fstp dword [sp(%$g1)] ;b fadd dword [r1] ;g0 fstp dword [sp(%$g0)] ; fld dword [sp(%$s2)] fmul dword [r0+r2] fld dword [sp(%$c2)] fmul dword [r1+r2] fsubp st1, st0 ;b = s2*fi[k3] - c2*gi[k3] fld dword [sp(%$c2)] fmul dword [r0+r2] fld dword [sp(%$s2)] fmul dword [r1+r2] faddp st1, st0 ;a = c2*fi[k3] + s2*gi[k3] b fld dword [r0+r3*2] fsub st0, st1 ;f3 a b fstp dword [sp(%$f3)] ;a b fadd dword [r0+r3*2] ;f2 b fstp dword [sp(%$f2)] ;b fld dword [r1+r3*2] fsub st0, st1 ;g3 b fstp dword [sp(%$g3)] ;b fadd dword [r1+r3*2] ;g2 fstp dword [sp(%$g2)] ; fld dword [sp(%$s1)] fmul dword [sp(%$f2)] fld dword [sp(%$c1)] fmul dword [sp(%$g3)] fsubp st1, st0 ;b = s1*f2 - c1*g3 fld dword [sp(%$c1)] fmul dword [sp(%$f2)] fld dword [sp(%$s1)] fmul dword [sp(%$g3)] faddp st1, st0 ;a = c1*f2 + s1*g3 b fld dword [sp(%$f0)] fsub st0, st1 ;fi[k2] a b fstp dword [r0+r3*2] fadd dword [sp(%$f0)] ;fi[0] b fstp dword [r0] fld dword [sp(%$g1)] fsub st0, st1 ;gi[k3] b fstp dword [r1+r2] fadd dword [sp(%$g1)] ;gi[k1] fstp dword [r1+r3] fld dword [sp(%$c1)] fmul dword [sp(%$g2)] fld dword [sp(%$s1)] fmul dword [sp(%$f3)] fsubp st1, st0 ;b = c1*g2 - s1*f3 fld dword [sp(%$s1)] fmul dword [sp(%$g2)] fld dword [sp(%$c1)] fmul dword [sp(%$f3)] faddp st1, st0 ;a = s1*g2 + c1*f3 b fld dword [sp(%$g0)] fsub st0, st1 ;gi[k2] a b fstp dword [r1+r3*2] fadd dword [sp(%$g0)] ;gi[0] b fstp dword [r1] fld dword [sp(%$f1)] fsub st0, st1 ;fi[k3] b fstp dword [r0+r2] fadd dword [sp(%$f1)] ;fi[k1] fstp dword [r0+r3] lea r0, [r0+r3*4] lea r1, [r1+r3*4] cmp r0, r6 jb near .do3 add r5, 4 cmp r5, r4 jb near .for cmp r3, [sp(%$n)] jae .exit add dword [sp(%$k)], 2 ;k += 2; lea r3, [r3*4] ;k1 *= 4 lea r2, [r2*4] ;k3 *= 4 lea r4, [r4*4] ;kx *= 4 mov r0, [sp(%$fz)] ;fi lea r1, [r0+r4] ;gi = fi + kx jmp .do .exit: popd ebp, ebx, esi, edi endproc ;************************************************************* ;void fht_FPU_FXCH(float *fz, int n); proc fht_FPU_FXCH %$fz arg 4 %$n arg 4 %$k local 4 %$f0 local 4 %$f1 local 4 %$f2 local 4 %$f3 local 4 %$g0 local 4 %$g1 local 4 %$g2 local 4 %$g3 local 4 %$s1 local 4 %$c1 local 4 %$s2 local 4 %$c2 local 4 %$t_s local 4 %$t_c local 4 alloc pushd ebp, ebx, esi, edi fht_FPU_FXCH_1st_part: fht_FPU_FXCH_2nd_part: fht_FPU_FXCH_3rd_part: .do_init: mov r3, 16 ;k1*fsize = 4*fsize = k4 mov r4, 8 ;kx = k1/2 mov r2, 48 ;k3*fsize mov dword [sp(%$k)], 2 ;k = 2 mov r0, [sp(%$fz)] ;fi lea r1, [r0+8] ;gi = fi + kx .do: .do2: ;f fld dword [r0] fsub dword [r0+r3] fld dword [r0] fadd dword [r0+r3] fld dword [r0+r3*2] fsub dword [r0+r2] fld dword [r0+r3*2] fadd dword [r0+r2] ;f2 f3 f0 f1 fld st3 fld st3 fxch st5 fadd st0, st3 fxch st4 fadd st0, st2 fxch st3 fsubp st1, st0 fxch st1 fsubp st4, st0 fxch st2 fstp dword [r0+r3] ;fi[k1] fstp dword [r0] ;fi[0] fstp dword [r0+r2] ;fi[k3] fstp dword [r0+r3*2] ;fi[k2] ;g fld dword [r1] fsub dword [r1+r3] fld dword [r1] fadd dword [r1+r3] fld dword [D_1_41421] fmul dword [r1+r2] fld dword [D_1_41421] fmul dword [r1+r3*2] ;g2 g3 g0 g1 fld st3 fld st3 fxch st5 fadd st0, st3 fxch st4 fadd st0, st2 fxch st3 fsubp st1, st0 fxch st1 fsubp st4, st0 fxch st2 fstp dword [r1+r3] ;gi[k1] fstp dword [r1] ;gi[0] fstp dword [r1+r2] ;gi[k3] fstp dword [r1+r3*2] ;gi[k2] lea r0, [r0+r3*4] lea r1, [r1+r3*4] cmp r0, r6 jb .do2 mov r0, [sp(%$k)] fld dword [costab_fft +r0*4] fld dword [sintab_fft +r0*4] fld dword [D_1_0] fld dword [D_0_0] fxch st3 fstp dword [sp(%$t_c)] fxch st1 fstp dword [sp(%$t_s)] fstp dword [sp(%$c1)] fstp dword [sp(%$s1)] .for_init: mov r5, 4 ;i = 1*fsize .for: fld dword [sp(%$c1)] fmul dword [sp(%$t_c)] fld dword [sp(%$s1)] fmul dword [sp(%$t_s)] fld dword [sp(%$c1)] fmul dword [sp(%$t_s)] fld dword [sp(%$s1)] fmul dword [sp(%$t_c)] fxch st2 fsubp st3, st0 ;c1 faddp st1, st0 ;s1 c1 fld st1 fxch st2 fmul st0, st0 ;c1c1 s1 c1 fld st1 fxch st2 fmul st0, st0 ;s1s1 c1c1 s1 c1 fxch st3 fst dword [sp(%$c1)] ;c1 fxch st2 fst dword [sp(%$s1)] ;s1 c1c1 c1 s1s1 fmulp st2, st0 fsubrp st2, st0 fadd st0, st0 ;s2 c2 fxch st1 fstp dword [sp(%$c2)] fstp dword [sp(%$s2)] mov r0, [sp(%$fz)] mov r1, [sp(%$fz)] add r0, r5 ;r0 = fi add r1, r3 sub r1, r5 ;r1 = gi .do3: fld dword [sp(%$s2)] fmul dword [r0+r3] fld dword [sp(%$c2)] fmul dword [r1+r3] fld dword [sp(%$c2)] fmul dword [r0+r3] fld dword [sp(%$s2)] fmul dword [r1+r3] fxch st2 fsubp st3, st0 ;b = s2*fi[k1] - c2*gi[k1] faddp st1, st0 ;a = c2*fi[k1] + s2*gi[k1] b fld dword [r1] fsub st0, st2 ;g1 a b fxch st2 fadd dword [r1] ;g0 a g1 fld dword [r0] fsub st0, st2 ;f1 g0 a g1 fxch st2 fadd dword [r0] ;f0 g0 f1 g1 fxch st3 fstp dword [sp(%$g1)] fstp dword [sp(%$g0)] fstp dword [sp(%$f1)] fstp dword [sp(%$f0)] fld dword [sp(%$s2)] fmul dword [r0+r2] fld dword [sp(%$c2)] fmul dword [r1+r2] fld dword [sp(%$c2)] fmul dword [r0+r2] fld dword [sp(%$s2)] fmul dword [r1+r2] fxch st2 fsubp st3, st0 ;b = s2*fi[k3] - c2*gi[k3] faddp st1, st0 ;a = c2*fi[k3] + s2*gi[k3] b fld dword [r1+r3*2] fsub st0, st2 ;g3 a b fxch st2 fadd dword [r1+r3*2] ;g2 a g3 fld dword [r0+r3*2] fsub st0, st2 ;f3 g2 a g3 fxch st2 fadd dword [r0+r3*2] ;f2 g2 f3 g3 fxch st3 fstp dword [sp(%$g3)] fstp dword [sp(%$g2)] fstp dword [sp(%$f3)] fstp dword [sp(%$f2)] fld dword [sp(%$s1)] fmul dword [sp(%$f2)] fld dword [sp(%$c1)] fmul dword [sp(%$g3)] fld dword [sp(%$c1)] fmul dword [sp(%$f2)] fld dword [sp(%$s1)] fmul dword [sp(%$g3)] fxch st2 fsubp st3, st0 ;b = s1*f2 - c1*g3 faddp st1, st0 ;a = c1*f2 + s1*g3 b fld dword [sp(%$g1)] fsub st0, st2 ;gi[k3] a b fxch st2 fadd dword [sp(%$g1)] ;gi[k1] a gi[k3] fld dword [sp(%$f0)] fsub st0, st2 ;fi[k2] gi[k1] a gi[k3] fxch st2 fadd dword [sp(%$f0)] ;fi[0] gi[k1] fi[k2] gi[k3] fxch st3 fstp dword [r1+r2] fstp dword [r1+r3] fstp dword [r0+r3*2] fstp dword [r0] fld dword [sp(%$c1)] fmul dword [sp(%$g2)] fld dword [sp(%$s1)] fmul dword [sp(%$f3)] fld dword [sp(%$s1)] fmul dword [sp(%$g2)] fld dword [sp(%$c1)] fmul dword [sp(%$f3)] fxch st2 fsubp st3, st0 ;b = c1*g2 - s1*f3 faddp st1, st0 ;a = s1*g2 + c1*f3 b fld dword [sp(%$f1)] fsub st0, st2 ;fi[k3] a b fxch st2 fadd dword [sp(%$f1)] ;fi[k1] a fi[k3] fld dword [sp(%$g0)] fsub st0, st2 ;gi[k2] fi[k1] a fi[k3] fxch st2 fadd dword [sp(%$g0)] ;gi[0] fi[k1] gi[k2] fi[k3] fxch st3 fstp dword [r0+r2] fstp dword [r0+r3] fstp dword [r1+r3*2] fstp dword [r1] lea r0, [r0+r3*4] lea r1, [r1+r3*4] cmp r0, r6 jb near .do3 add r5, 4 cmp r5, r4 jb near .for cmp r3, [sp(%$n)] jae .exit add dword [sp(%$k)], 2 ;k += 2; lea r3, [r3*4] ;k1 *= 4 lea r2, [r2*4] ;k3 *= 4 lea r4, [r4*4] ;kx *= 4 mov r0, [sp(%$fz)] ;fi lea r1, [r0+r4] ;gi = fi + kx jmp .do .exit: popd ebp, ebx, esi, edi endproc end ����������������������������������������������������lame-3.100/libmp3lame/i386/Makefile.in��������������������������������������������������������������000644 �001751 �001751 �00000043227 13170220146 020652� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = libmp3lame/i386 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblameasmroutines_la_LIBADD = am__liblameasmroutines_la_SOURCES_DIST = choose_table.nas cpu_feat.nas \ fft3dn.nas fftsse.nas am__objects_1 = choose_table.lo cpu_feat.lo fft3dn.lo fftsse.lo liblameasmroutines_la_OBJECTS = $(am_liblameasmroutines_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @HAVE_NASM_TRUE@am_liblameasmroutines_la_rpath = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) SOURCES = $(liblameasmroutines_la_SOURCES) \ $(EXTRA_liblameasmroutines_la_SOURCES) DIST_SOURCES = $(am__liblameasmroutines_la_SOURCES_DIST) \ $(EXTRA_liblameasmroutines_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ @CONFIG_DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ -I$(top_srcdir)/libmp3lame/@CPUTYPE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign nasm_sources = \ choose_table.nas \ cpu_feat.nas \ fft3dn.nas \ fftsse.nas @HAVE_NASM_TRUE@noinst_LTLIBRARIES = liblameasmroutines.la @HAVE_NASM_TRUE@liblameasmroutines_la_SOURCES = $(nasm_sources) @HAVE_NASM_TRUE@liblameasmroutines_la_DEPENDENCIES = $(nasm_sources:.nas.lo) @HAVE_NASM_TRUE@am_liblameasmroutines_la_OBJECTS = \ @HAVE_NASM_TRUE@ choose_table$U.lo \ @HAVE_NASM_TRUE@ cpu_feat$U.lo \ @HAVE_NASM_TRUE@ fft3dn$U.lo \ @HAVE_NASM_TRUE@ fftsse$U.lo noinst_HEADERS = nasm.h SUFFIXES = .nas .lo EXTRA_liblameasmroutines_la_SOURCES = $(nasm_sources) CLEANFILES = \ choose_table.o.lst \ choose_table.lo.lst \ cpu_feat.o.lst \ cpu_feat.lo.lst \ fft3dn.o.lst \ fft3dn.lo.lst \ fftsse.o.lst \ fftsse.lo.lst EXTRA_DIST = \ fft.nas \ fftfpu.nas \ ffttbl.nas \ scalar.nas NASMFLAGS = @NASM_FORMAT@ -i $(top_srcdir)/libmp3lame/@CPUTYPE@/ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ all: all-am .SUFFIXES: .SUFFIXES: .nas .lo .o $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libmp3lame/i386/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign libmp3lame/i386/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblameasmroutines.la: $(liblameasmroutines_la_OBJECTS) $(liblameasmroutines_la_DEPENDENCIES) $(EXTRA_liblameasmroutines_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_liblameasmroutines_la_rpath) $(liblameasmroutines_la_OBJECTS) $(liblameasmroutines_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile ECHO ?= echo .nas.o: $< nasm.h $(NASM) $(NASMFLAGS) $< -o $@ -l $@.lst .nas.lo: $< nasm.h $(ECHO) '# Generated by ltmain.sh - GNU libtool 1.5.22 (1.1220.2.365 2005/12/18 22:14:06)' >$@ $(ECHO) "pic_object='$*.o'" >>$@ $(ECHO) "non_pic_object='$*.o'" >>$@ $(NASM) $(NASMFLAGS) $< -o $*.o -l $@.lst #$(OBJECTS): libtool #libtool: $(LIBTOOL_DEPS) # $(SHELL) $(top_builddir)/config.status --recheck # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/choose_table.nas���������������������������������������������������������000644 �001751 �001751 �00000032247 11056506777 021761� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; new count bit routine ; part of this code is origined from ; new GOGO-no-coda (1999, 2000) ; Copyright (C) 1999 shigeo ; modified by Keiichi SAKAI %include "nasm.h" globaldef choose_table_MMX globaldef MMX_masking externdef largetbl externdef t1l externdef table23 externdef table56 segment_data align 16 D14_14_14_14 dd 0x000E000E, 0x000E000E D15_15_15_15 dd 0xfff0fff0, 0xfff0fff0 mul_add dd 0x00010010, 0x00010010 mul_add23 dd 0x00010003, 0x00010003 mul_add56 dd 0x00010004, 0x00010004 tableDEF dd 0x00010003,0x01,0x00050005,0x05,0x00070006,0x07,0x00090008,0x08,0x000a0008, 0x09 dd 0x000a0009,0x0a,0x000b000a,0x0a,0x000b000a,0x0b,0x000c000a,0x0a,0x000c000b, 0x0b dd 0x000c000b,0x0c,0x000d000c,0x0c,0x000d000c,0x0d,0x000d000c,0x0d,0x000e000d, 0x0e dd 0x000b000e,0x0e,0x00040005,0x04,0x00060005,0x06,0x00080007,0x08,0x00090008, 0x09 dd 0x000a0009,0x0a,0x000b0009,0x0a,0x000b000a,0x0b,0x000b000a,0x0b,0x000c000a, 0x0b dd 0x000c000b,0x0b,0x000c000b,0x0c,0x000d000c,0x0c,0x000e000c,0x0d,0x000d000c, 0x0e dd 0x000e000d,0x0e,0x000b000d,0x0e,0x00070006,0x07,0x00080007,0x08,0x00090007, 0x09 dd 0x000a0008,0x0a,0x000b0009,0x0b,0x000b0009,0x0b,0x000c000a,0x0c,0x000c000a, 0x0c dd 0x000d000a,0x0b,0x000c000b,0x0c,0x000d000b,0x0c,0x000d000c,0x0d,0x000d000c, 0x0d dd 0x000e000d,0x0e,0x000e000d,0x0f,0x000c000d,0x0f,0x00090007,0x08,0x00090008, 0x09 dd 0x000a0008,0x0a,0x000b0009,0x0b,0x000b0009,0x0b,0x000c000a,0x0c,0x000c000a, 0x0c dd 0x000c000b,0x0c,0x000d000b,0x0c,0x000d000b,0x0d,0x000e000c,0x0d,0x000e000c, 0x0d dd 0x000e000c,0x0d,0x000f000d,0x0e,0x000f000d,0x0f,0x000d000d,0x0f,0x000a0008, 0x09 dd 0x000a0008,0x09,0x000b0009,0x0b,0x000b0009,0x0b,0x000c000a,0x0c,0x000c000a, 0x0c dd 0x000d000b,0x0d,0x000d000b,0x0d,0x000d000b,0x0c,0x000e000b,0x0d,0x000e000c, 0x0d dd 0x000e000c,0x0e,0x000f000c,0x0e,0x000f000d,0x0f,0x000f000d,0x0f,0x000c000d, 0x10 dd 0x000a0009,0x0a,0x000a0009,0x0a,0x000b0009,0x0b,0x000b000a,0x0c,0x000c000a, 0x0c dd 0x000d000a,0x0c,0x000d000b,0x0d,0x000e000b,0x0d,0x000d000b,0x0d,0x000e000b, 0x0d dd 0x000e000c,0x0e,0x000f000c,0x0d,0x000f000d,0x0f,0x000f000d,0x0f,0x0010000d, 0x10 dd 0x000d000e,0x10,0x000b000a,0x0a,0x000b0009,0x0b,0x000b000a,0x0c,0x000c000a, 0x0c dd 0x000d000a,0x0d,0x000d000b,0x0d,0x000d000b,0x0d,0x000d000b,0x0d,0x000e000b, 0x0d dd 0x000e000c,0x0e,0x000e000c,0x0e,0x000e000c,0x0e,0x000f000d,0x0f,0x000f000d, 0x0f dd 0x0010000e,0x10,0x000d000e,0x10,0x000b000a,0x0b,0x000b000a,0x0b,0x000c000a, 0x0c dd 0x000c000b,0x0d,0x000d000b,0x0d,0x000d000b,0x0d,0x000d000b,0x0e,0x000e000c, 0x0e dd 0x000e000c,0x0e,0x000f000c,0x0e,0x000f000c,0x0f,0x000f000c,0x0f,0x000f000d, 0x0f dd 0x0011000d,0x10,0x0011000d,0x12,0x000d000e,0x12,0x000b000a,0x0a,0x000c000a, 0x0a dd 0x000c000a,0x0b,0x000d000b,0x0c,0x000d000b,0x0c,0x000d000b,0x0d,0x000e000b, 0x0d dd 0x000e000c,0x0e,0x000f000c,0x0e,0x000f000c,0x0e,0x000f000c,0x0e,0x000f000d, 0x0f dd 0x0010000d,0x0f,0x0010000e,0x10,0x0010000e,0x11,0x000d000e,0x11,0x000c000a, 0x0b dd 0x000c000a,0x0b,0x000c000b,0x0c,0x000d000b,0x0c,0x000d000b,0x0d,0x000e000b, 0x0d dd 0x000e000c,0x0d,0x000f000c,0x0f,0x000f000c,0x0e,0x000f000d,0x0f,0x000f000d, 0x0f dd 0x0010000d,0x10,0x000f000d,0x10,0x0010000e,0x10,0x000f000e,0x12,0x000e000e, 0x11 dd 0x000c000b,0x0b,0x000d000b,0x0c,0x000c000b,0x0c,0x000d000b,0x0d,0x000e000c, 0x0d dd 0x000e000c,0x0e,0x000e000c,0x0e,0x000e000c,0x0f,0x000f000c,0x0e,0x0010000d, 0x0f dd 0x0010000d,0x10,0x0010000d,0x0f,0x0011000d,0x10,0x0011000e,0x11,0x0010000f, 0x12 dd 0x000d000e,0x13,0x000d000b,0x0c,0x000d000b,0x0c,0x000d000b,0x0c,0x000d000b, 0x0d dd 0x000e000c,0x0e,0x000e000c,0x0e,0x000f000c,0x0e,0x0010000c,0x0e,0x0010000d, 0x0f dd 0x0010000d,0x0f,0x0010000d,0x0f,0x0010000d,0x10,0x0010000e,0x11,0x000f000e, 0x11 dd 0x0010000e,0x11,0x000e000f,0x12,0x000d000c,0x0c,0x000e000c,0x0d,0x000e000b, 0x0d dd 0x000e000c,0x0e,0x000e000c,0x0e,0x000f000c,0x0f,0x000f000d,0x0e,0x000f000d, 0x0f dd 0x000f000d,0x10,0x0011000d,0x10,0x0010000d,0x11,0x0010000d,0x11,0x0010000e, 0x11 dd 0x0010000e,0x12,0x0012000f,0x12,0x000e000f,0x12,0x000f000c,0x0d,0x000e000c, 0x0d dd 0x000e000c,0x0e,0x000e000c,0x0f,0x000f000c,0x0f,0x000f000d,0x0f,0x0010000d, 0x10 dd 0x0010000d,0x10,0x0010000d,0x10,0x0012000e,0x10,0x0011000e,0x10,0x0011000e, 0x11 dd 0x0011000e,0x12,0x0013000e,0x11,0x0011000f,0x12,0x000e000f,0x12,0x000e000d, 0x0e dd 0x000f000d,0x0e,0x000d000d,0x0e,0x000e000d,0x0f,0x0010000d,0x0f,0x0010000d, 0x0f dd 0x000f000d,0x11,0x0010000d,0x10,0x0010000e,0x10,0x0011000e,0x13,0x0012000e, 0x11 dd 0x0011000e,0x11,0x0013000f,0x11,0x0011000f,0x13,0x0010000e,0x12,0x000e000f, 0x12 dd 0x000b000d,0x0d,0x000b000d,0x0e,0x000b000d,0x0f,0x000c000d,0x10,0x000c000d, 0x10 dd 0x000d000d,0x10,0x000d000d,0x11,0x000d000e,0x10,0x000e000e,0x11,0x000e000e, 0x11 dd 0x000e000e,0x12,0x000e000e,0x12,0x000e000f,0x15,0x000e000f,0x14,0x000e000f, 0x15 dd 0x000c000f,0x12 tableABC dd 0x00020004,0x1,0x00040004,0x4,0x00060006,0x7,0x00080008,0x9,0x00090009,0xa,0x000a000a,0xa dd 0x0009000a,0xa,0x000a000a,0xb,0x00000000,0x0,0x00020003,0x1,0x00040004,0x4,0x00070006,0x7 dd 0x00090007,0x9,0x00090009,0x9,0x000a000a,0xa,0x00000000,0x0,0x00040004,0x4,0x00050005,0x6 dd 0x00060006,0x8,0x00080007,0x9,0x000a0009,0xa,0x000a0009,0xb,0x0009000a,0xa,0x000a000a,0xa dd 0x00000000,0x0,0x00040004,0x4,0x00040005,0x6,0x00060006,0x8,0x000a0007,0x9,0x000a0008,0x9 dd 0x000a000a,0xa,0x00000000,0x0,0x00060006,0x7,0x00070006,0x8,0x00080007,0x9,0x00090008,0xa dd 0x000a0009,0xb,0x000b000a,0xc,0x000a0009,0xb,0x000a000a,0xb,0x00000000,0x0,0x00070005,0x7 dd 0x00060006,0x7,0x00080007,0x9,0x000a0008,0xa,0x000a0009,0xa,0x000b000a,0xb,0x00000000,0x0 dd 0x00080007,0x8,0x00080007,0x9,0x00090008,0xa,0x000b0008,0xb,0x000a0009,0xc,0x000c000a,0xc dd 0x000a000a,0xb,0x000b000a,0xc,0x00000000,0x0,0x00090007,0x8,0x000a0007,0x9,0x000a0008,0xa dd 0x000b0009,0xb,0x000b0009,0xb,0x000c000a,0xb,0x00000000,0x0,0x00090008,0x9,0x000a0008,0xa dd 0x000a0009,0xb,0x000b0009,0xc,0x000b000a,0xc,0x000c000a,0xc,0x000b000a,0xc,0x000c000b,0xc dd 0x00000000,0x0,0x00090008,0x8,0x00090008,0x9,0x000a0009,0xa,0x000b0009,0xb,0x000c000a,0xb dd 0x000c000b,0xc,0x00000000,0x0,0x00090009,0xa,0x000a0009,0xb,0x000b000a,0xc,0x000c000a,0xc dd 0x000c000a,0xd,0x000d000b,0xd,0x000c000a,0xc,0x000d000b,0xd,0x00000000,0x0,0x000a0009,0x9 dd 0x000a0009,0xa,0x000b000a,0xb,0x000b000a,0xc,0x000d000b,0xc,0x000d000b,0xc,0x00000000,0x0 dd 0x00090009,0x9,0x00090009,0xa,0x00090009,0xb,0x000a000a,0xc,0x000b000a,0xc,0x000c000b,0xc dd 0x000c000b,0xd,0x000c000c,0xd,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0 dd 0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x0009000a,0xa,0x0009000a,0xa dd 0x000a000a,0xb,0x000b000b,0xc,0x000c000b,0xc,0x000c000b,0xd,0x000c000b,0xd,0x000c000c,0xd dd 0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0,0x00000000,0x0 dd 0x0,0x00000000, 0x0,0x00000000 linbits32 dd 0x00040004,0x10001,0x00040004,0x20002,0x00040004,0x30003,0x00040004,0x40004 dd 0x00050005,0x60006,0x00060006,0x60006,0x00070007,0x80008,0x00080008,0x80008 dd 0x00090009,0xa000a,0x000b000b,0xa000a,0x000b000b,0xd000d,0x000d000d,0xd000d dd 0x000d000d,0xd000d choose_table_H dw 0x1810, 0x1811, 0x1812, 0x1813, 0x1914, 0x1a14, 0x1b15, 0x1c15 dw 0x1d16, 0x1e16, 0x1e17, 0x1f17, 0x1f17 choose_jump_table_L: dd table_MMX.L_case_0 - choose_table_MMX dd table_MMX.L_case_1 - choose_table_MMX dd table_MMX.L_case_2 - choose_table_MMX dd table_MMX.L_case_3 - choose_table_MMX dd table_MMX.L_case_45 - choose_table_MMX dd table_MMX.L_case_45 - choose_table_MMX dd table_MMX.L_case_67 - choose_table_MMX dd table_MMX.L_case_67 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX dd table_MMX.L_case_8_15 - choose_table_MMX segment_code ; ; use MMX ; PIC_OFFSETTABLE align 16 ; int choose_table(int *ix, int *end, int *s) choose_table_MMX: push ebp call get_pc.bp add ebp, PIC_BASE() mov ecx,[esp+8] ;ecx = begin mov edx,[esp+12] ;edx = end sub ecx,edx ;ecx = begin-end(should be minus) test ecx,8 pxor mm0,mm0 ;mm0=[0:0] movq mm1,[edx+ecx] jz .lp add ecx,8 jz .exit align 4 .lp: movq mm4,[edx+ecx] movq mm5,[edx+ecx+8] add ecx,16 psubusw mm4,mm0 ; $BK\Ev$O(B dword $B$G$J$$$H$$$1$J$$$N$@$,(B psubusw mm5,mm1 ; $B$=$s$J%3%^%s%I$O$J$$(B :-p paddw mm0,mm4 ; $B$,(B, $B$3$3$G07$&CM$NHO0O$O(B 8191+15 $B0J2<$J$N$GLdBj$J$$(B paddw mm1,mm5 jnz .lp .exit: psubusw mm1,mm0 ; $B$3$l$bK\Ev$O(B dword $B$G$J$$$H$$$1$J$$(B paddw mm0,mm1 movq mm4,mm0 punpckhdq mm4,mm4 psubusw mm4,mm0 ; $B$3$l$bK\Ev$O(B dword $B$G$J$$$H$$$1$J$$(B paddw mm0,mm4 movd eax,mm0 cmp eax,15 ja .with_ESC lea ecx,[PIC_EBP_REL(choose_table_MMX)] add ecx,[PIC_EBP_REL(choose_jump_table_L+eax*4)] jmp ecx .with_ESC1: emms mov ecx, [esp+16] ; *s mov [ecx], eax or eax,-1 pop ebp ret .with_ESC: cmp eax, 8191+15 ja .with_ESC1 sub eax,15 push ebx push esi bsr eax, eax %assign _P 4*2 movq mm5, [PIC_EBP_REL(D15_15_15_15)] movq mm6, [PIC_EBP_REL(D14_14_14_14)] movq mm3, [PIC_EBP_REL(mul_add)] mov ecx, [esp+_P+8] ; = ix ; mov edx, [esp+_P+12] ; = end sub ecx, edx xor esi, esi ; sum = 0 test ecx, 8 pxor mm7, mm7 ; linbits_sum, 14$B$r1[$($?$b$N$N?t(B jz .H_dual_lp1 movq mm0, [edx+ecx] add ecx,8 packssdw mm0,mm7 movq mm2, mm0 paddusw mm0, mm5 ; mm0 = min(ix, 15)+0xfff0 pcmpgtw mm2, mm6 ; 14$B$h$jBg$-$$$+!)(B psubw mm7, mm2 ; 14$B$h$jBg$-$$$H$-(B linbits_sum++; pmaddwd mm0, mm3 ; {0, 0, y, x}*{1, 16, 1, 16} movd ebx, mm0 mov esi, [PIC_EBP_REL(largetbl+ebx*4+(16*16+16)*4)] jz .H_dual_exit align 4 .H_dual_lp1: movq mm0, [edx+ecx] movq mm1, [edx+ecx+8] packssdw mm0,mm1 movq mm2, mm0 paddusw mm0, mm5 ; mm0 = min(ix, 15)+0xfff0 pcmpgtw mm2, mm6 ; 14$B$h$jBg$-$$$+!)(B pmaddwd mm0, mm3 ; {y, x, y, x}*{1, 16, 1, 16} movd ebx, mm0 punpckhdq mm0,mm0 add esi, [PIC_EBP_REL(largetbl+ebx*4+(16*16+16)*4)] movd ebx, mm0 add esi, [PIC_EBP_REL(largetbl+ebx*4+(16*16+16)*4)] add ecx, 16 psubw mm7, mm2 ; 14$B$h$jBg$-$$$H$-(B linbits_sum++; jnz .H_dual_lp1 .H_dual_exit: pmov mm1,mm7 punpckhdq mm7,mm7 paddd mm7,mm1 punpckldq mm7,mm7 pmaddwd mm7, [PIC_EBP_REL(linbits32+eax*8)] ; linbits mov ax, [PIC_EBP_REL(choose_table_H+eax*2)] movd ecx, mm7 punpckhdq mm7,mm7 movd edx,mm7 emms shl edx, 16 add ecx, edx add ecx, esi pop esi pop ebx mov edx, ecx and ecx, 0xffff ; ecx = sum2 shr edx, 16 ; edx = sum cmp edx, ecx jle .chooseE_s1 mov edx, ecx shr eax, 8 .chooseE_s1: mov ecx, [esp+16] ; *s and eax, 0xff add [ecx], edx pop ebp ret table_MMX.L_case_0: emms pop ebp ret table_MMX.L_case_1: emms mov eax, [esp+16] ; *s mov ecx, [esp+8] ; *ix sub ecx, edx push ebx .lp: mov ebx, [edx+ecx] add ebx, ebx add ebx, [edx+ecx+4] movzx ebx, byte [PIC_EBP_REL(ebx+t1l)] add [eax], ebx add ecx, 8 jnz .lp pop ebx mov eax, 1 pop ebp ret table_MMX.L_case_45: push dword 7 lea ecx, [PIC_EBP_REL(tableABC+9*8)] jmp from3 table_MMX.L_case_67: push dword 10 lea ecx, [PIC_EBP_REL(tableABC)] jmp from3 table_MMX.L_case_8_15: push dword 13 lea ecx, [PIC_EBP_REL(tableDEF)] from3: mov eax,[esp+12] ;eax = *begin ; mov edx,[esp+16] ;edx = *end push ebx sub eax, edx movq mm5,[PIC_EBP_REL(mul_add)] pxor mm2,mm2 ;mm2 = sum test eax, 8 jz .choose3_lp1 ; odd length movq mm0,[edx+eax] ;mm0 = ix[0] | ix[1] add eax,8 packssdw mm0,mm2 pmaddwd mm0,mm5 movd ebx,mm0 movq mm2, [ecx+ebx*8] jz .choose3_exit align 4 .choose3_lp1 movq mm0,[edx+eax] movq mm1,[edx+eax+8] add eax,16 packssdw mm0,mm1 ;mm0 = ix[0]|ix[1]|ix[2]|ix[3] pmaddwd mm0,mm5 movd ebx,mm0 punpckhdq mm0,mm0 paddd mm2, [ecx+ebx*8] movd ebx,mm0 paddd mm2, [ecx+ebx*8] jnz .choose3_lp1 .choose3_exit ; xor eax,eax movd ebx, mm2 punpckhdq mm2,mm2 mov ecx, ebx and ecx, 0xffff ; ecx = sum2 shr ebx, 16 ; ebx = sum1 movd edx, mm2 ; edx = sum cmp edx, ebx jle .choose3_s1 mov edx, ebx inc eax .choose3_s1: emms pop ebx cmp edx, ecx jle .choose3_s2 mov edx, ecx mov eax, 2 .choose3_s2: pop ecx add eax, ecx mov ecx, [esp+16] ; *s add [ecx], edx pop ebp ret table_MMX.L_case_2: push dword 2 lea ecx,[PIC_EBP_REL(table23)] pmov mm5,[PIC_EBP_REL(mul_add23)] jmp from2 table_MMX.L_case_3: push dword 5 lea ecx,[PIC_EBP_REL(table56)] pmov mm5,[PIC_EBP_REL(mul_add56)] from2: mov eax,[esp+12] ;eax = *begin ; mov edx,[esp+16] ;edx = *end push ebx push edi sub eax, edx xor edi, edi test eax, 8 jz .choose2_lp1 ; odd length movq mm0,[edx+eax] ;mm0 = ix[0] | ix[1] pxor mm2,mm2 ;mm2 = sum packssdw mm0,mm2 pmaddwd mm0,mm5 movd ebx,mm0 mov edi, [ecx+ebx*4] add eax,8 jz .choose2_exit align 4 .choose2_lp1 movq mm0,[edx+eax] movq mm1,[edx+eax+8] packssdw mm0,mm1 ;mm0 = ix[0]|ix[1]|ix[2]|ix[3] pmaddwd mm0,mm5 movd ebx,mm0 punpckhdq mm0,mm0 add edi, [ecx+ebx*4] movd ebx, mm0 add edi, [ecx+ebx*4] add eax,16 jnc .choose2_lp1 .choose2_exit mov ecx, edi pop edi pop ebx pop eax ; table num. emms mov edx, ecx and ecx, 0xffff ; ecx = sum2 shr edx, 16 ; edx = sum1 cmp edx, ecx jle .choose2_s1 mov edx, ecx inc eax .choose2_s1: mov ecx, [esp+16] ; *s add [ecx], edx pop ebp ret end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/fftsse.nas���������������������������������������������������������������000644 �001751 �001751 �00000032676 11056506777 020632� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; back port from GOGO-no coda 2.24b by Takehiro TOMINAGA ; GOGO-no-coda ; Copyright (C) 1999 shigeo ; special thanks to Keiichi SAKAI %include "nasm.h" globaldef fht_SSE segment_data align 16 Q_MMPP dd 0x0,0x0,0x80000000,0x80000000 Q_MPMP dd 0x0,0x80000000,0x0,0x80000000 D_1100 dd 0.0, 0.0, 1.0, 1.0 costab_fft: dd 9.238795325112867e-01 dd 3.826834323650898e-01 dd 9.951847266721969e-01 dd 9.801714032956060e-02 dd 9.996988186962042e-01 dd 2.454122852291229e-02 dd 9.999811752836011e-01 dd 6.135884649154475e-03 S_SQRT2 dd 1.414213562 segment_code PIC_OFFSETTABLE ;------------------------------------------------------------------------ ; by K. SAKAI ; 99/08/18 PIII 23k[clk] ; 99/08/19 Ì¿Îá½ç½øÆþ¤ì´¹¤¨ PIII 22k[clk] ; 99/08/20 bit reversal ¤òµì¸á¸å¤«¤é°Ü¿¢¤·¤¿ PIII 17k[clk] ; 99/08/23 °ìÉô unroll PIII 14k[clk] ; 99/11/12 clean up ; ;void fht_SSE(float *fz, int n); align 16 fht_SSE: push ebx push esi push edi push ebp %assign _P 4*5 ;2¤ÄÌܤΥ롼¥× mov eax,[esp+_P+0] ;eax=fz mov ebp,[esp+_P+4] ;=n shl ebp,3 add ebp,eax ; fn = fz + n, ¤³¤Î´Ø¿ô½ªÎ»¤Þ¤ÇÉÔÊÑ push ebp call get_pc.bp add ebp, PIC_BASE() lea ecx,[PIC_EBP_REL(costab_fft)] xor eax,eax mov al,8 ; =k1=1*(sizeof float) // 4, 16, 64, 256,... .lp2: ; do{ mov esi,[esp+_P+4] ; esi=fi=fz lea edx,[eax+eax*2] mov ebx, esi ; ¤¿¤«¤À¤«2ÊÂÎó¤·¤«´üÂԤǤ­¤Ê¤¤Éôʬ¤ÏFPU¤Î¤Û¤¦¤¬Â®¤¤¡£ loopalign 16 .lp20: ; do{ ; f0 = fi[0 ] + fi[k1]; ; f2 = fi[k2] + fi[k3]; ; f1 = fi[0 ] - fi[k1]; ; f3 = fi[k2] - fi[k3]; ; fi[0 ] = f0 + f2; ; fi[k1] = f1 + f3; ; fi[k2] = f0 - f2; ; fi[k3] = f1 - f3; lea edi,[ebx+eax] ; edi=gi=fi+ki/2 fld dword [ebx] fadd dword [ebx+eax*2] fld dword [ebx+eax*4] fadd dword [ebx+edx*2] fld dword [ebx] fsub dword [ebx+eax*2] fld dword [ebx+eax*4] fsub dword [ebx+edx*2] fld st1 fadd st0,st1 fstp dword [ebx+eax*2] fsubp st1,st0 fstp dword [ebx+edx*2] fld st1 fadd st0,st1 fstp dword [ebx] fsubp st1,st0 fstp dword [ebx+eax*4] lea ebx,[ebx + eax*8] ; = fi += (k1 * 4); ; g0 = gi[0 ] + gi[k1]; ; g2 = SQRT2 * gi[k2]; ; g1 = gi[0 ] - gi[k1]; ; g3 = SQRT2 * gi[k3]; ; gi[0 ] = g0 + g2; ; gi[k2] = g0 - g2; ; gi[k1] = g1 + g3; ; gi[k3] = g1 - g3; fld dword [edi] fadd dword [edi+eax*2] fld dword [PIC_EBP_REL(S_SQRT2)] fmul dword [edi+eax*4] fld dword [edi] fsub dword [edi+eax*2] fld dword [PIC_EBP_REL(S_SQRT2)] fmul dword [edi+edx*2] fld st1 fadd st0,st1 fstp dword [edi+eax*2] fsubp st1,st0 fstp dword [edi+edx*2] fld st1 fadd st0,st1 fstp dword [edi] fsubp st1,st0 fstp dword [edi+eax*4] cmp ebx,[esp] jl near .lp20 ; while (fi<fn); ; i = 1; //for (i=1;i<kx;i++){ ; c1 = 1.0*t_c - 0.0*t_s; ; s1 = 0.0*t_c + 1.0*t_s; movlps xmm6,[ecx] ; = { --, --, s1, c1} movaps xmm7,xmm6 shufps xmm6,xmm6,R4(0,1,1,0) ; = {+c1, +s1, +s1, +c1} -> ɬÍ× ; c2 = c1*c1 - s1*s1 = 1 - (2*s1)*s1; ; s2 = c1*s1 + s1*c1 = 2*s1*c1; shufps xmm7,xmm7,R4(1,0,0,1) movss xmm5,xmm7 ; = { --, --, --, s1} xorps xmm7,[PIC_EBP_REL(Q_MMPP)] ; = {-s1, -c1, +c1, +s1} -> ɬÍ× addss xmm5,xmm5 ; = (--, --, --, 2*s1) add esi,4 ; esi = fi = fz + i shufps xmm5,xmm5,R4(0,0,0,0) ; = (2*s1, 2*s1, 2*s1, 2*s1) mulps xmm5,xmm6 ; = (2*s1*c1, 2*s1*s1, 2*s1*s1, 2*s1*c1) subps xmm5,[PIC_EBP_REL(D_1100)] ; = (--, 2*s1*s1-1, --, 2*s1*c1) = {-- -c2 -- s2} movaps xmm4,xmm5 shufps xmm5,xmm5,R4(2,0,2,0) ; = {-c2, s2, -c2, s2} -> ɬÍ× xorps xmm4,[PIC_EBP_REL(Q_MMPP)] ; = {--, c2, --, s2} shufps xmm4,xmm4,R4(0,2,0,2) ; = {s2, c2, s2, c2} -> ɬÍ× loopalign 16 .lp21: ; do{ ; a = c2*fi[k1] + s2*gi[k1]; ; b = s2*fi[k1] - c2*gi[k1]; ; c = c2*fi[k3] + s2*gi[k3]; ; d = s2*fi[k3] - c2*gi[k3]; ; f0 = fi[0 ] + a; ; g0 = gi[0 ] + b; ; f2 = fi[k1 * 2] + c; ; g2 = gi[k1 * 2] + d; ; f1 = fi[0 ] - a; ; g1 = gi[0 ] - b; ; f3 = fi[k1 * 2] - c; ; g3 = gi[k1 * 2] - d; lea edi,[esi + eax*2 - 8] ; edi = gi = fz +k1-i movss xmm0,[esi + eax*2] ; = fi[k1] movss xmm2,[esi + edx*2] ; = fi[k3] shufps xmm0,xmm2,0x00 ; = {fi[k3], fi[k3], fi[k1], fi[k1]} movss xmm1,[edi + eax*2] ; = fi[k1] movss xmm3,[edi + edx*2] ; = fi[k3] shufps xmm1,xmm3,0x00 ; = {gi[k3], gi[k3], gi[k1], gi[k1]} movss xmm2,[esi] ; = fi[0] mulps xmm0,xmm4 ; *= {+s2, +c2, +s2, +c2} movss xmm3,[esi + eax*4] ; = fi[k2] unpcklps xmm2,xmm3 ; = {--, --, fi[k2], fi[0]} mulps xmm1,xmm5 ; *= {-c2, +s2, -c2, +s2} movss xmm3,[edi + eax*4] ; = gi[k2] addps xmm0,xmm1 ; = {d, c, b, a} movss xmm1,[edi] ; = gi[0] unpcklps xmm1,xmm3 ; = {--, --, gi[k2], gi[0]} unpcklps xmm2,xmm1 ; = {gi[k2], fi[k2], gi[0], fi[0]} movaps xmm1,xmm2 addps xmm1,xmm0 ; = {g2, f2, g0, f0} subps xmm2,xmm0 ; = {g3, f3, g1, f1} ; a = c1*f2 + s1*g3; ; c = s1*g2 + c1*f3; ; b = s1*f2 - c1*g3; ; d = c1*g2 - s1*f3; ; fi[0 ] = f0 + a; ; gi[0 ] = g0 + c; ; gi[k1] = g1 + b; ; fi[k1] = f1 + d; ; fi[k1 * 2] = f0 - a; ; gi[k1 * 2] = g0 - c; ; gi[k3] = g1 - b; ; fi[k3] = f1 - d; movaps xmm3,xmm1 movhlps xmm1,xmm1 ; = {g2, f2, g2, f2} shufps xmm3,xmm2,0x14 ; = {f1, g1, g0, f0} mulps xmm1,xmm6 ; *= {+c1, +s1, +s1, +c1} shufps xmm2,xmm2,0xBB ; = {f3, g3, f3, g3} mulps xmm2,xmm7 ; *= {-s1, -c1, +c1, +s1} addps xmm1,xmm2 ; = {d, b, c, a} movaps xmm2,xmm3 addps xmm3,xmm1 ; = {fi[k1], gi[k1], gi[0], fi[0]} subps xmm2,xmm1 ; = {fi[k3], gi[k3], gi[k1*2], fi[k1*2]} movhlps xmm0,xmm3 movss [esi],xmm3 shufps xmm3,xmm3,0x55 movss [edi+eax*2],xmm0 shufps xmm0,xmm0,0x55 movss [edi],xmm3 movss [esi+eax*2],xmm0 movhlps xmm0,xmm2 movss [esi+eax*4],xmm2 shufps xmm2,xmm2,0x55 movss [edi+edx*2],xmm0 shufps xmm0,xmm0,0x55 movss [edi+eax*4],xmm2 movss [esi+edx*2],xmm0 lea esi,[esi + eax*8] ; fi += (k1 * 4); cmp esi,[esp] jl near .lp21 ; while (fi<fn); ; unrollÁ°¤Îdo loop¤Ï43+4Ì¿Îá ; ºÇÆâ¼þ¤Ç¤Ï¤Ê¤¤for¥ë¡¼¥×¤Îi=2¤«¤éÀè¤òunrolling¤·¤¿ ; kx= 2, 8, 32, 128 ; k4= 16, 64, 256, 1024 ; 0, 6/2,30/2,126/2 xor ebx,ebx mov bl, 4*2 ; = i = 4 cmp ebx,eax ; i < k1 jnl near .F22 ; for (i=2;i<kx;i+=2){ loopalign 16 .lp22: ; at here, xmm6 is {c3, s3, s3, c3} ; c1 = c3*t_c - s3*t_s; ; s1 = c3*t_s + s3*t_c; movlps xmm0,[ecx] shufps xmm0,xmm0,R4(1,1,0,0) ; = {t_s, t_s, t_c, t_c} mulps xmm6,xmm0 ; = {c3*ts, s3*ts, s3*tc, c3*tc} movhlps xmm4,xmm6 ; = {--, --, c3*ts, s3*ts} xorps xmm4,[PIC_EBP_REL(Q_MPMP)] ; = {--, --, -c3*ts, s3*ts} subps xmm6,xmm4 ; = {-,-, c3*ts+s3*tc, c3*tc-s3*ts}={-,-,s1,c1} ; c3 = c1*t_c - s1*t_s; ; s3 = s1*t_c + c1*t_s; shufps xmm6,xmm6,0x14 ; = {c1, s1, s1, c1} mulps xmm0,xmm6 ; = {ts*c1 ts*s1 tc*s1 tc*c1} movhlps xmm3,xmm0 xorps xmm3,[PIC_EBP_REL(Q_MPMP)] subps xmm0,xmm3 ; = {--, --, s3, c3} ; {s2 s4 c4 c2} = {2*s1*c1 2*s3*c3 1-2*s3*s3 1-2*s1*s1} unpcklps xmm6,xmm0 ; xmm6 = {s3, s1, c3, c1} movaps xmm7, xmm6 shufps xmm6,xmm6,R4(2,3,1,0) ; xmm6 = {s1, s3, c3, c1} addps xmm7, xmm7 ; {s3*2, s1*2, --, --} mov edi,[esp+_P+4] ; = fz shufps xmm7, xmm7, R4(2,3,3,2) ; {s1*2, s3*2, s3*2, s1*2} sub edi,ebx ; edi = fz - i/2 mulps xmm7, xmm6 ; {s1*s1*2, s3*s3*2, s3*c3*2, s1*c1*2} lea esi,[edi + ebx*2] ; esi = fi = fz +i/2 subps xmm7, [PIC_EBP_REL(D_1100)] ; {-c2, -c4, s4, s2} lea edi,[edi + eax*2-4] ; edi = gi = fz +k1-i/2 ; fi = fz +i; ; gi = fz +k1-i; ; do{ .lp220: ; unroll¸å¤Îdo loop¤Ï51+4Ì¿Îá ; a = c2*fi[k1 ] + s2*gi[k1 ]; ; e = c4*fi[k1+1] + s4*gi[k1-1]; ; f = s4*fi[k1+1] - c4*gi[k1-1]; ; b = s2*fi[k1 ] - c2*gi[k1 ]; ; c = c2*fi[k3 ] + s2*gi[k3 ]; ; g = c4*fi[k3+1] + s4*gi[k3-1]; ; h = s4*fi[k3+1] - c4*gi[k3-1]; ; d = s2*fi[k3 ] - c2*gi[k3 ]; movaps xmm4,xmm7 ; = {-c2 -c4 s4 s2} xorps xmm4,[PIC_EBP_REL(Q_MMPP)] ; = { c2 c4 s4 s2} shufps xmm4,xmm4,0x1B ; = { s2 s4 c4 c2} movlps xmm0,[esi+eax*2] movlps xmm1,[edi+eax*2] movlps xmm2,[esi+edx*2] movlps xmm3,[edi+edx*2] shufps xmm0,xmm0,0x14 shufps xmm1,xmm1,0x41 shufps xmm2,xmm2,0x14 shufps xmm3,xmm3,0x41 mulps xmm0,xmm4 mulps xmm1,xmm7 mulps xmm2,xmm4 mulps xmm3,xmm7 addps xmm0,xmm1 ; xmm0 = {b, f, e, a} addps xmm2,xmm3 ; xmm2 = {d, h, g, c} ;17 ; f0 = fi[0 ] + a; ; f4 = fi[0 +1] + e; ; g4 = gi[0 -1] + f; ; g0 = gi[0 ] + b; ; f1 = fi[0 ] - a; ; f5 = fi[0 +1] - e; ; g5 = gi[0 -1] - f; ; g1 = gi[0 ] - b; ; f2 = fi[k2 ] + c; ; f6 = fi[k2+1] + g; ; g6 = gi[k2-1] + h; ; g2 = gi[k2 ] + d; ; f3 = fi[k2 ] - c; ; f7 = fi[k2+1] - g; ; g7 = gi[k2-1] - h; ; g3 = gi[k2 ] - d; movlps xmm1,[esi ] movhps xmm1,[edi ] movaps xmm4,xmm1 subps xmm1,xmm0 ; xmm1 = {g1, g5, f5, f1} movlps xmm3,[esi+eax*4] movhps xmm3,[edi+eax*4] movaps xmm5,xmm3 subps xmm3,xmm2 ; xmm3 = {g3, g7, f7, f3} addps xmm0,xmm4 ; xmm0 = {g0, g4, f4, f0} addps xmm2,xmm5 ; xmm2 = {g2, g6, f6, f2} ;10 ; a = c1*f2 + s1*g3; ½ç*½ç + µÕ*µÕ ; e = c3*f6 + s3*g7; ; g = s3*g6 + c3*f7; ; c = s1*g2 + c1*f3; ; d = c1*g2 - s1*f3; ½ç*µÕ - µÕ*½ç ; h = c3*g6 - s3*f7; ; f = s3*f6 - c3*g7; ; b = s1*f2 - c1*g3; movaps xmm5,xmm6 ; xmm6 = {s1, s3, c3, c1} shufps xmm5,xmm5,0x1B ; = {c1, c3, s3, s1} movaps xmm4,xmm2 mulps xmm4,xmm6 shufps xmm2,xmm2,0x1B ; xmm2 = {f2, f6, g6, g2} mulps xmm2,xmm6 mulps xmm5,xmm3 mulps xmm3,xmm6 shufps xmm3,xmm3,0x1B addps xmm4,xmm3 ; = {c, g, e, a} subps xmm2,xmm5 ; = {b, f, h, d} ;10 ; fi[0 ] = f0 + a; ; fi[0 +1] = f4 + e; ; gi[0 -1] = g4 + g; ; gi[0 ] = g0 + c; ; fi[k2 ] = f0 - a; ; fi[k2+1] = f4 - e; ; gi[k2-1] = g4 - g; ; gi[k2 ] = g0 - c; ; fi[k1 ] = f1 + d; ; fi[k1+1] = f5 + h; ; gi[k1-1] = g5 + f; ; gi[k1 ] = g1 + b; ; fi[k3 ] = f1 - d; ; fi[k3+1] = f5 - h; ; gi[k3-1] = g5 - f; ; gi[k3 ] = g1 - b; movaps xmm3,xmm0 subps xmm0,xmm4 movlps [esi+eax*4],xmm0 movhps [edi+eax*4],xmm0 addps xmm4,xmm3 movlps [esi ],xmm4 movhps [edi ],xmm4 movaps xmm5,xmm1 subps xmm1,xmm2 movlps [esi+edx*2],xmm1 movhps [edi+edx*2],xmm1 addps xmm2,xmm5 movlps [esi+eax*2],xmm2 movhps [edi+eax*2],xmm2 ; 14 ; gi += k4; ; fi += k4; lea edi,[edi + eax*8] ; gi += (k1 * 4); lea esi,[esi + eax*8] ; fi += (k1 * 4); cmp esi,[esp] jl near .lp220 ; while (fi<fn); ; } while (fi<fn); add ebx,byte 2*4 ; i+= 4 cmp ebx,eax ; i < k1 shufps xmm6,xmm6,R4(1,2,2,1) ; (--,s3,c3,--) => {c3, s3, s3, c3} jl near .lp22 ; } .F22: shl eax,2 add ecx, byte 8 cmp eax,[esp+_P+8] ; while ((k1 * 4)<n); jle near .lp2 pop ebp pop ebp pop edi pop esi pop ebx ret end ������������������������������������������������������������������lame-3.100/libmp3lame/i386/fft.nas������������������������������������������������������������������000644 �001751 �001751 �00000015153 07166617346 020110� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ; for new GOGO-no-coda (1999/09) ; Copyright (C) 1999 shigeo ; special thanks to Keiichi SAKAI, URURI %include "nasm.h" globaldef fht_3DN globaldef fht externdef costab_fft externdef sintab_fft externdef gray_index segment_data align 16 D_MSB1_0 dd 0 ,0x80000000 D_SQRT2 dd 1.414213562,1.414213562 t_s0 dd 0 ;[ t_c:t_s] t_c0 dd 0 t_c1 dd 0 ;[-t_s:t_c] t_s1 dd 0 D_s1c1 dd 0, 0 D_Mc1s1 dd 0, 0 D_s2c2 dd 0, 0 D_Mc2s2 dd 0, 0 D_0_1 dd 1.0, 0.0 S_05 DD 0.5 S_00005 DD 0.0005 fht dd 0 ;´Ø¿ô¥Ý¥¤¥ó¥¿ segment_code ;************************************************************************ ; by shigeo ; 99/08/16 ; 23000clk ¿É¤«¤Ã¤¿¡Á ; 18500clk bit reversal from gogo1 by URURI ;void fht(float *fz, int n); align 16 fht_3DN: push ebx push esi push edi push ebp %assign _P 4*4 ;¤Þ¤ººÇ½é¤Î¥ë¡¼¥×... ¤Ïfht()¤Î³°¤Ø°Üư mov esi,[esp+_P+4] ;esi=fz mov ecx,[esp+_P+8] ;ecx=n ;¥á¥¤¥ó¥ë¡¼¥× movq mm7,[D_MSB1_0] ;mm7=[1<<31:0] %assign LOCAL_STACK 16 sub esp,LOCAL_STACK %assign _P (_P+LOCAL_STACK) xor eax,eax mov [esp],eax ;k=0 %define k dword [esp] %define kx dword [esp+4] %define fn dword [esp+8] .lp30: ;k=0; do{ mov ecx,k add ecx,2 mov k,ecx mov eax,1 shl eax,cl ;eax=k1 = 1<<k lea ebx,[eax+eax] ;ebx=k2 = k1*2 lea ecx,[eax+eax*2] ;ecx=k3 = k2 + k1 = k1*3 lea edx,[ebx+ebx] ;edx=k4 = k1*4 mov esi,eax shr esi,1 ;esi=kx=k1>>1 mov kx,esi ;Êݸ(¸å¤Ç»È¤¦) mov edi,[esp+_P+4] ;edi=fi=fz lea ebp,[edi+esi*4] ;ebp=gi=fz+kx mov esi,[esp+_P+8] ;esi=n lea esi,[edi+esi*4] ;esi=fn=fz+n movq mm6,[D_SQRT2] ;mm6=[¢å2:¢å2] .lp31: ;fn=fz+n; do{ FLOAT g0,f0,f1,... movd mm0,[edi] ;mm0=[0:fi[ 0]] movd mm1,[edi+eax*4] ;mm1=[0:fi[k1]] punpckldq mm0,mm0 ;mm0=[fi_0 :fi_0 ] punpckldq mm1,mm1 ;mm1=[fi_k1:fi_k1] movd mm2,[edi+ebx*4] movd mm3,[edi+ecx*4] punpckldq mm2,mm2 ;mm2=[fi_k2:fi_k2] punpckldq mm3,mm3 ;mm3=[fi_k3:fi_k3] pxor mm1,mm7 ;mm1=[-fi_k1:fi_k1] pxor mm3,mm7 ;mm3=[-fi_k3:fi_k3] pfadd mm0,mm1 ;mm0=[f1:f0]=[fi_0 -fi_k1 : fi_0 +fi_k1] pfadd mm2,mm3 ;mm2=[f3:f2]=[fi_k2-fi_k3 : fi_k2+fi_k3] movq mm3,mm0 ;mm3=[f1:f0] pfadd mm0,mm2 ;mm0=[f1+f3:f0+f2] movd [edi],mm0 ;fi[0]=f0+f2 psrlq mm0,32 ;mm0=[0:f1+f3] pfsub mm3,mm2 ;mm3=[f1-f3:f0-f2] movd [edi+eax*4],mm0 ;fi[k1]=f1+f3 movd [edi+ebx*4],mm3 ;fi[k2]=f0-f2 psrlq mm3,32 ;mm3=[0:f1-f3] movd [edi+ecx*4],mm3 ;fi[k3]=f1-f3 movd mm0,[ebp] ;mm0=[0:gi_0] movd mm1,[ebp+eax*4] ;mm1=[0:gi_k1] punpckldq mm0,mm0 ;mm0=[gi_0 :gi_0 ] punpckldq mm1,mm1 ;mm1=[gi_k1:gi_k1] movd mm2,[ebp+ebx*4] ;mm2=[0:gi_k2] pxor mm1,mm7 ;mm1=[-gi_k1:gi_k1] punpckldq mm2,[ebp+ecx*4] ;mm2=[gi_k3:gi_k2] pfadd mm0,mm1 ;mm0=[g1:g0]=[gi_0 -gi_k1:gi_0 +gi_k1] pfmul mm2,mm6 ;mm2=[g3:g2]=sqrt2 * [gi_k3:gi_k2] movq mm1,mm0 ;mm1=[g1:g0] pfadd mm0,mm2 ;mm0=[g1+g3:g0+g2] movd [ebp],mm0 ;gi[0]=g0+g2 psrlq mm0,32 ;mm0=[0:g1+g3] pfsub mm1,mm2 ;mm1=[g1-g3:g0-g2] movd [ebp+eax*4],mm0 ;gi[k1]=g1+g3 movd [ebp+ebx*4],mm1 ;gi[k2]=g0-g2 psrlq mm1,32 ;mm1=[0:g1-g3] movd [ebp+ecx*4],mm1 ;gi[k3]=g1-g3 lea edi,[edi+edx*4] ;fi += k4 lea ebp,[ebp+edx*4] ;gi += k4 cmp edi,esi jc near .lp31 ;}while(fi<fn); ; ¤³¤³¤Þ¤Ç¤Ï¿ʬO.K. mov fn,esi ;fn=fz+n ;¼¡¤ÎÃͤϰú¤­Â³¤­»È¤¦ ;eax=k1,ebx=k2,ecx=k3,edx=k4 mov edi,k lea ebp,[costab_fft+edi*4] mov ebp,[ebp] ;ebp=t_c mov [t_c0],ebp mov [t_c1],ebp ;t_c lea ebp,[sintab_fft+edi*4] mov ebp,[ebp] ;ebx=t_s mov [t_s0],ebp xor ebp,0x80000000 mov [t_s1],ebp ;-t_s movq mm1,[D_0_1] ;mm1=[0:1] movq [D_s1c1],mm1 ;mm1=[s1:c1] mov esi,1 ;esi=i=1 .lp32: ; for(i=1;i<kx;i++){ movq mm0,[D_s1c1] ;mm1=[s1:t]=[s1:c1] movq mm2,mm0 pfmul mm0,[t_c1] ;mm0=[-s1*t_s: t*t_c] pfmul mm2,[t_s0] ;mm2=[ s1*t_c: t*t_s] pfacc mm0,mm2 ;mm0=[s1:c1]=[ s1*t_c+t*t_s:-s1*t_s+t*t_c] movq mm2,mm0 ;mm2=[s1:c1] movq [D_s1c1],mm0 ;Êݸ movq mm6,mm2 punpckldq mm5,mm6 punpckhdq mm6,mm5 ;mm6=[ c1:s1] pxor mm6,mm7 ;mm6=[-c1:s1] movq [D_Mc1s1],mm6 ;Êݸ pfmul mm2,mm2 ;mm2=[s1*s1:c1*c1] movq mm3,mm0 ;mm3=[s1:c1] pxor mm2,mm7 ;mm2=[-s1*s1:c1*c1] psrlq mm3,32 ;mm3=[ 0:s1] pfacc mm2,mm2 ;mm2=[c2:c2]=[c1*c1-s1*s1:<] pfmul mm0,mm3 ;mm0=[ 0:c1*s1] pfadd mm0,mm0 ;mm0=[0:s2]=[ 0:2*c1*s1] punpckldq mm2,mm0 ;mm2=[s2:c2] movq [D_s2c2],mm2 ;Êݸ punpckldq mm0,mm2 punpckhdq mm2,mm0 ;mm2=[c2:s2] pxor mm2,mm7 ;mm2=[-c2:s2] movq [D_Mc2s2],mm2 ;Êݸ mov edi,[esp+_P+4] ;edi=fz lea edi,[edi+esi*4] ;edi=fz+i mov ebp,[esp+_P+4] ;ebp=fz neg esi ;esi=-i lea ebp,[ebp+eax*4] ;ebp=fz+k1 lea ebp,[ebp+esi*4] ;ebp=gi=fz+k1-i neg esi ;esi=i .lp33: ; do{ FLOAT a,b,g0,f0,f1,g1,f2,g2,f3,g3; movd mm0,[edi+eax*4] ;mm0=[0:fi_k1] punpckldq mm0,[ebp+eax*4] ;mm0=[gi_k1:fi_k1] movq mm1,mm0 pfmul mm0,[D_s2c2] ;mm0=[ s2*gi_k1:c2*fi_k1] pfmul mm1,[D_Mc2s2] ;mm1=[-c2*gi_k1:s2*fi_k1] pfacc mm0,mm1 ;mm0=[b:a] movd mm4,[edi] ;mm4=[0:fi_0] movq mm3,mm0 ;mm3=[b:a] punpckldq mm4,[ebp] ;mm4=[gi_0:fi_0] pfadd mm3,mm4 ;mm3=[g0:f0]=[gi_0+b:fi_0+a] pfsub mm4,mm0 ;mm4=[g1:f1]=[gi_0-b:fi_0-a] movd mm0,[edi+ecx*4] ;mm0=[0:fi_k3] punpckldq mm0,[ebp+ecx*4] ;mm0=[gi_k3:fi_k3] movq mm1,mm0 pfmul mm0,[D_s2c2] ;mm0=[ s2*gi_k3:c2*fi_k3] pfmul mm1,[D_Mc2s2] ;mm1=[-c2*gi_k3:s2*fi_k3] pfacc mm0,mm1 ;mm0=[b:a] movd mm5,[edi+ebx*4] ;mm5=[0:fi_k2] movq mm6,mm0 ;mm6=[b:a] punpckldq mm5,[ebp+ebx*4] ;mm5=[gi_k2:fi_k2] pfadd mm6,mm5 ;mm6=[g2:f2]=[gi_k2+b:fi_k2+a] pfsub mm5,mm0 ;mm5=[g3:f3]=[gi_k2-b:fi_k2-a] punpckldq mm1,mm6 ;mm1=[f2:*] movq mm0,[D_s1c1] ;mm0=[s1:c1] punpckhdq mm1,mm5 ;mm1=[g3:f2] pfmul mm0,mm1 ;mm0=[ s1*g3:c1*f2] movq mm2,[D_Mc1s1] ;mm2=[-c1:s1] pfmul mm2,mm1 ;mm2=[-c1*g3:s1*f2] pfacc mm0,mm2 ;mm0=[b:a] punpckldq mm1,mm3 ;mm1=[f0:*] punpckhdq mm1,mm4 ;mm1=[g1:f0] movq mm2,mm0 ;mm2=[b:a] pfadd mm0,mm1 ;mm0=[g1+b:f0+a] pfsubr mm2,mm1 ;mm2=[g1-b:f0-a] movd [edi],mm0 ;fi[0]=f0+a psrlq mm0,32 ;mm0=[0:g1+b] movd [edi+ebx*4],mm2 ;fi[k2]=f0-a psrlq mm2,32 ;mm2=[0:g1-b] movd [ebp+eax*4],mm0 ;gi[k1]=g1+b movd [ebp+ecx*4],mm2 ;gi[k3]=g1-b psrlq mm6,32 ;mm6=[0:g2] movq mm0,[D_s1c1] ;mm0=[s1:c1] punpckldq mm5,mm6 ;mm5=[g2:f3] pfmul mm0,mm5 ;mm0=[g2* s1:f3*c1] pfmul mm5,[D_Mc1s1] ;mm5=[g2*-c1:f3*s1] pfacc mm0,mm5 ;mm0=[-b:a] psrlq mm3,32 ;mm3=[0:g0] movq mm1,mm0 ;mm1=[-b:a] punpckldq mm3,mm4 ;mm3=[f1:g0] pfadd mm0,mm3 ;mm0=[f1-b:g0+a] pfsubr mm1,mm3 ;mm1=[f1+b:g0-a] movd [ebp],mm0 ;gi[0]=g0+a psrlq mm0,32 ;mm0=[0:f1-b] movd [ebp+ebx*4],mm1 ;gi[k2]=g0-a psrlq mm1,32 ;mm1=[0:f1+b] movd [edi+ecx*4],mm0 ;fi[k3]=f1-b movd [edi+eax*4],mm1 ;fi[k1]=f1+b lea edi,[edi+edx*4] ;fi += k4 lea ebp,[ebp+edx*4] ;gi += k4 cmp edi,fn jc near .lp33 ;}while(fi<fn) inc esi cmp esi,kx jnz near .lp32 ;} cmp edx,[esp+_P+8] jnz near .lp30 ;}while(k4<n) .exit: add esp,LOCAL_STACK femms pop ebp pop edi pop esi pop ebx ret ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/nasm.h�������������������������������������������������������������������000644 �001751 �001751 �00000016147 11561263277 017733� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ; Copyright (C) 1999 URURI ; nasm�ѥޥ��� ; 1999/08/21 ��� ; 1999/10/10 ���Ĥ��ɲ� ; 1999/10/27 aout�б� ; 1999/11/07 pushf, popf ��NASM�ΥХ��б� ; 1999/12/02 for BCC ( Thanks to Miquel ) ; for Windows Visual C++ -> define WIN32 ; Borland or cygwin -> WIN32 and COFF ; for FreeBSD 2.x -> AOUT ; for TownsOS -> __tos__ ; otherwise -> none ;̾����դ��� BITS 32 section .note.GNU-stack noalloc noexec nowrite progbits %ifdef YASM %define segment_code segment .text align=16 use32 %define segment_data segment .data align=16 use32 %define segment_bss segment .bss align=16 use32 %elifdef WIN32 %define segment_code segment .text align=16 class=CODE use32 %define segment_data segment .data align=16 class=DATA use32 %ifdef __BORLANDC__ %define segment_bss segment .data align=16 class=DATA use32 %else %define segment_bss segment .bss align=16 class=DATA use32 %endif %elifdef AOUT %define _NAMING %define segment_code segment .text %define segment_data segment .data %define segment_bss segment .bss %else %ifidn __OUTPUT_FORMAT__,elf section .note.GNU-stack progbits noalloc noexec nowrite align=1 %endif %define segment_code segment .text align=16 class=CODE use32 %define segment_data segment .data align=16 class=DATA use32 %define segment_bss segment .bss align=16 class=DATA use32 %endif %ifdef WIN32 %define _NAMING %endif %ifdef __tos__ group CGROUP text group DGROUP data %endif ;ñ�����ư�������� %idefine float dword %idefine fsize 4 %idefine fsizen(a) (fsize*(a)) ;��ɷ�� %idefine wsize 2 %idefine wsizen(a) (wsize*(a)) %idefine dwsize 4 %idefine dwsizen(a) (dwsize*(a)) ;REG %define r0 eax %define r1 ebx %define r2 ecx %define r3 edx %define r4 esi %define r5 edi %define r6 ebp %define r7 esp ;MMX,3DNow!,SSE %define pmov movq %define pmovd movd %define pupldq punpckldq %define puphdq punpckhdq %define puplwd punpcklwd %define puphwd punpckhwd %define xm0 xmm0 %define xm1 xmm1 %define xm2 xmm2 %define xm3 xmm3 %define xm4 xmm4 %define xm5 xmm5 %define xm6 xmm6 %define xm7 xmm7 ;�����åե��Ѥ�4�ʥޥ��� %define R4(a,b,c,d) (a*64+b*16+c*4+d) ;C�饤���ʴʰץޥ��� %imacro globaldef 1 %ifdef _NAMING %define %1 _%1 %endif global %1 %endmacro %imacro externdef 1 %ifdef _NAMING %define %1 _%1 %endif extern %1 %endmacro %imacro proc 1 %push proc %ifdef _NAMING global _%1 %else global %1 %endif align 32 %1: _%1: %assign %$STACK 0 %assign %$STACKN 0 %assign %$ARG 4 %endmacro %imacro endproc 0 %ifnctx proc %error expected 'proc' before 'endproc'. %else %if %$STACK > 0 add esp, %$STACK %endif %if %$STACK <> (-%$STACKN) %error STACKLEVEL mismatch check 'local', 'alloc', 'pushd', 'popd' %endif ret %pop %endif %endmacro %idefine sp(a) esp+%$STACK+a %imacro arg 1 %00 equ %$ARG %assign %$ARG %$ARG+%1 %endmacro %imacro local 1 %assign %$STACKN %$STACKN-%1 %00 equ %$STACKN %endmacro %imacro alloc 0 sub esp, (-%$STACKN)-%$STACK %assign %$STACK (-%$STACKN) %endmacro %imacro pushd 1-* %rep %0 push %1 %assign %$STACK %$STACK+4 %rotate 1 %endrep %endmacro %imacro popd 1-* %rep %0 %rotate -1 pop %1 %assign %$STACK %$STACK-4 %endrep %endmacro ; bug of NASM-0.98 %define pushf db 0x66, 0x9C %define popf db 0x66, 0x9D %define ge16(n) ((((n) / 16)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge15(n) ((((n) / 15)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge14(n) ((((n) / 14)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge13(n) ((((n) / 13)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge12(n) ((((n) / 12)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge11(n) ((((n) / 11)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge10(n) ((((n) / 10)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge9(n) ((((n) / 9)*0xFFFFFFFF) & 0xFFFFFFFF) %define ge8(n) (ge9(n) | ((((n) / 8)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge7(n) (ge9(n) | ((((n) / 7)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge6(n) (ge9(n) | ((((n) / 6)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge5(n) (ge9(n) | ((((n) / 5)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge4(n) (ge5(n) | ((((n) / 4)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge3(n) (ge5(n) | ((((n) / 3)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge2(n) (ge3(n) | ((((n) / 2)*0xFFFFFFFF) & 0xFFFFFFFF)) %define ge1(n) (ge2(n) | ((((n) / 1)*0xFFFFFFFF) & 0xFFFFFFFF)) ; macro to align for begining of loop ; %1 does not align if it LE bytes to next alignment ; 4..16 ; default is 12 %imacro loopalignK6 0-1 12 %%here: times (($$-%%here) & 15 & ge1(($$-%%here) & 15) & ~ge4(($$-%%here) & 15)) nop times (1 & ge4(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) jmp short %%skip times (((($$-%%here) & 15)-2) & ge4(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) nop %%skip: %endmacro %imacro loopalignK7 0-1 12 %%here: times (1 & ge1(($$-%%here) & 15) & ~ge2(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) nop times (1 & ge2(($$-%%here) & 15) & ~ge3(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Bh,0C0h times (1 & ge3(($$-%%here) & 15) & ~ge4(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,004h,020h times (1 & ge4(($$-%%here) & 15) & ~ge5(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,044h,020h,000h times (1 & ge5(($$-%%here) & 15) & ~ge6(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,044h,020h,000h,090h times (1 & ge6(($$-%%here) & 15) & ~ge7(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,080h,0,0,0,0 times (1 & ge7(($$-%%here) & 15) & ~ge8(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,004h,005h,0,0,0,0 times (1 & ge8(($$-%%here) & 15) & ~ge9(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 08Dh,004h,005h,0,0,0,0,90h times (1 & ge9(($$-%%here) & 15) & ~ge10(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,007h,90h,90h,90h,90h,90h,90h,90h times (1 & ge10(($$-%%here) & 15) & ~ge11(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,008h,90h,90h,90h,90h,90h,90h,90h,90h times (1 & ge11(($$-%%here) & 15) & ~ge12(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,009h,90h,90h,90h,90h,90h,90h,90h,90h,90h times (1 & ge12(($$-%%here) & 15) & ~ge13(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,00Ah,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h times (1 & ge13(($$-%%here) & 15) & ~ge14(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,00Bh,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h times (1 & ge14(($$-%%here) & 15) & ~ge15(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,00Ch,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h times (1 & ge15(($$-%%here) & 15) & ~ge16(($$-%%here) & 15) & ~ge%1(($$-%%here) & 15)) DB 0EBh,00Dh,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h,90h %%skip: %endmacro %imacro loopalign 0-1 12 loopalignK7 %1 %endmacro %define PACK(x,y,z,w) (x*64+y*16+z*4+w) %ifidn __OUTPUT_FORMAT__,elf %idefine PIC_BASE(A) _GLOBAL_OFFSET_TABLE_ + $$ - $ wrt ..gotpc %idefine PIC_EBP_REL(A) ebp + A wrt ..gotoff %macro PIC_OFFSETTABLE 0 extern _GLOBAL_OFFSET_TABLE_ get_pc.bp: mov ebp, [esp] retn %endmacro %else %define PIC_BASE(A) (0) %define PIC_EBP_REL(A) (A) %macro PIC_OFFSETTABLE 0 get_pc.bp: mov ebp, [esp] retn %endmacro %endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/ffttbl.nas���������������������������������������������������������������000644 �001751 �001751 �00000003503 07166617346 020606� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ; for new GOGO-no-coda (1999/09) ; Copyright (C) 1999 shigeo ; special thanks to URURI, Keiichi SAKAI ; fft sin,cos,gray¥Æ¡¼¥Ö¥ë ; 99/08/21 ; 99/09/01(¤¦¤ë¤ê)¡¡¥Ó¥Ã¥Èȿž¥Æ¡¼¥Ö¥ëºï½ü ; 99/09/14 ¥°¥ì¥¤¥³¡¼¥É¥¤¥ó¥Ç¥Ã¥¯¥¹É½¥°¥í¡¼¥Ð¥ë²½ %include "nasm.h" globaldef costab_fft globaldef sintab_fft globaldef gray_index segment_data align 16 costab_fft: dd 0.000000000000 dd 0.707106781187 dd 0.923879532511 dd 0.980785280403 dd 0.995184726672 dd 0.998795456205 dd 0.999698818696 dd 0.999924701839 dd 0.999981175283 dd 0.999995293810 dd 0.999998823452 dd 0.999999705863 dd 0.999999926466 dd 0.999999981616 dd 0.999999995404 dd 0.999999998851 sintab_fft: dd 1.000000000000 dd 0.707106781187 dd 0.382683432365 dd 0.195090322016 dd 0.098017140330 dd 0.049067674327 dd 0.024541228523 dd 0.012271538286 dd 0.006135884649 dd 0.003067956763 dd 0.001533980186 dd 0.000766990319 dd 0.000383495188 dd 0.000191747597 dd 0.000095873799 dd 0.000047936900 align 16 gray_index: db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 7 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 8 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 7 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 9 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 7 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 8 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 7 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 6 db 2, 3, 2, 4, 2, 3, 2, 5, 2, 3, 2, 4, 2, 3, 2, 10 segment_code end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/fft3dn.nas���������������������������������������������������������������000644 �001751 �001751 �00000022605 11056506777 020513� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; from a new GOGO-no-coda (1999/09) ; Copyright (C) 1999 shigeo ; special thanks to Keiichi SAKAI, URURI ; hacked and back-ported to LAME ; by Takehiro TOMINAGA Nov 2000 %include "nasm.h" globaldef fht_3DN segment_data align 16 costab dd 0x80000000, 0 dd 1.414213562,1.414213562 dd 9.238795283293805e-01, 9.238795283293805e-01 dd 3.826834424611044e-01, 3.826834424611044e-01 dd 9.951847264044178e-01, 9.951847264044178e-01 dd 9.801714304836734e-02, 9.801714304836734e-02 dd 9.996988186794428e-01, 9.996988186794428e-01 dd 2.454122920569705e-02, 2.454122920569705e-02 dd 9.999811752815535e-01, 9.999811752815535e-01 dd 6.135884819898878e-03, 6.135884819898878e-03 D_1_0_0_0 dd 0.0 , 1.0 segment_code PIC_OFFSETTABLE ;void fht_3DN(float *fz, int nn); proc fht_3DN pushd ebp, ebx, esi, edi sub esp, 20 call get_pc.bp add ebp, PIC_BASE() mov r0, [esp+40] ;fi mov r1, [esp+44] ;r1 = nn lea r3, [PIC_EBP_REL(costab)] ;tri = costab lea r4, [r0+r1*8] ;r4 = fn = &fz[n] mov [esp+16], r4 mov r4, 8 ;kx = k1/2 pmov mm7, [r3] loopalign 16 .do1 lea r3, [r3+16] ;tri += 2; pmov mm6, [PIC_EBP_REL(costab+8)] lea r2, [r4+r4*2] ;k3*fsize/2 mov r5, 4 ;i = 1*fsize loopalign 16 .do2: lea r1, [r0+r4] ;gi = fi + kx ;f pmov mm0, [r0] ;fi0 pmov mm1, [r0+r4*2] ;fi1 pmov mm2, [r0+r2*2] ;fi3 pmov mm3, [r0+r4*4] ;fi2 pupldq mm0, mm0 ;fi0 | fi0 pupldq mm1, mm1 ;fi1 | fi1 pupldq mm2, mm2 ;fi2 | fi2 pupldq mm3, mm3 ;fi3 | fi3 pxor mm1, mm7 ;fi1 | -fi1 pxor mm3, mm7 ;fi3 | -fi3 pfsub mm0, mm1 ;f1 | f0 pfsub mm2, mm3 ;f3 | f2 pmov mm4, mm0 pfadd mm0, mm2 ;f1+f3|f0+f2 = fi1 | fi0 pfsub mm4, mm2 ;f1-f3|f0-f2 = fi3 | fi2 pmovd [r0], mm0 ;fi[0] puphdq mm0, mm0 pmovd [r0+r4*4], mm4 ;fi[k2] puphdq mm4, mm4 pmovd [r0+r4*2], mm4 ;fi[k1] pmovd [r0+r2*2], mm0 ;fi[k3] lea r0, [r0+r4*8] ;g pmov mm0, [r1] ;gi0 pmov mm1, [r1+r4*2] ;gi1 pmov mm2, [r1+r4*4] ;gi2 pmov mm3, [r1+r2*2] ;gi3 pupldq mm1, mm1 pupldq mm0, mm0 ;gi0 | gi0 pupldq mm2, mm3 ;gi3 | gi2 pxor mm1, mm7 ;gi1 | -gi1 pfsub mm0, mm1 ;gi0-gi1|gi0+gi1 = g1 | g0 pfmul mm2, mm6 ;gi3*SQRT2|gi2*SQRT2 = g3 | g2 pmov mm4, mm0 pfadd mm0, mm2 ;g1+g3|g0+g2 = gi1 | gi0 pfsub mm4, mm2 ;g1-g3|g0-g2 = gi3 | gi2 pmovd [r1], mm0 ;gi[0] puphdq mm0, mm0 pmovd [r1+r4*4], mm4 ;gi[k2] puphdq mm4, mm4 cmp r0, [esp + 16] pmovd [r1+r4*2], mm0 ;gi[k1] pmovd [r1+r2*2], mm4 ;gi[k3] jb near .do2 pmov mm6, [r3+r5] ; this is not aligned address!! loopalign 16 .for: ; ; mm6 = c1 | s1 ; mm7 = 0x800000000 | 0 ; pmov mm1, mm6 mov r0, [esp+40] ; fz puphdq mm1, mm1 ; c1 | c1 lea r1, [r0+r4*2] pfadd mm1, mm1 ; c1+c1 | c1+c1 pfmul mm1, mm6 ; 2*c1*c1 | 2*c1*s1 pfsub mm1, [PIC_EBP_REL(D_1_0_0_0)] ; 2*c1*c1-1.0 | 2*c1*s1 = -c2 | s2 pmov mm0, mm1 pxor mm7, mm6 ; c1 | -s1 pupldq mm2, mm0 pupldq mm3, mm6 ; ** | c1 puphdq mm0, mm2 ; s2 | c2 puphdq mm6, mm3 ;-s1 | c1 pxor mm0, [PIC_EBP_REL(costab)] ; c2 | -s2 ; mm0 = s2| c2 ; mm1 = -c2| s2 ; mm6 = c1| s1 ; mm7 = s1|-c1 (we use the opposite sign. from GOGO here) pmov [esp], mm0 pmov [esp+8], mm1 sub r1, r5 ;r1 = gi add r0, r5 ;r0 = fi loopalign 16 .do3: pmov mm2, [r0+r4*2] ; fi[k1] pmov mm4, [r1+r4*2] ; gi[k1] pmov mm3, [r0+r2*2] ; fi[k3] pmov mm5, [r1+r2*2] ; gi[k3] pupldq mm2, mm2 ; fi1 | fi1 pupldq mm4, mm4 ; gi1 | gi1 pupldq mm3, mm3 ; fi3 | fi3 pupldq mm5, mm5 ; gi3 | gi3 pfmul mm2, mm0 ; s2 * fi1 | c2 * fi1 pfmul mm4, mm1 ;-c2 * gi1 | s2 * gi1 pfmul mm3, mm0 ; s2 * fi3 | c2 * fi3 pfmul mm5, mm1 ;-c2 * gi3 | s2 * gi3 pfadd mm2, mm4 ;b | a pfadd mm3, mm5 ;d | c pmov mm0, [r0] pmov mm4, [r1] pmov mm1, [r0+r4*4] pmov mm5, [r1+r4*4] pupldq mm0, mm4 ;gi0 | fi0 pupldq mm1, mm5 ;gi2 | fi2 pmov mm4, mm2 pmov mm5, mm3 pfadd mm2, mm0 ;g0 | f0 pfadd mm3, mm1 ;g2 | f2 pfsub mm0, mm4 ;g1 | f1 pfsub mm1, mm5 ;g3 | f3 pmov mm4, mm3 pmov mm5, mm1 pupldq mm4, mm4 ;f2 | f2 puphdq mm5, mm5 ;g3 | g3 puphdq mm3, mm3 ;g2 | g2 pupldq mm1, mm1 ;f3 | f3 pfmul mm4, mm6 ;f2 * c1 | f2 * s1 pfmul mm5, mm7 ;g3 * s1 | g3 *-c1 pfmul mm3, mm6 ;g2 * c1 | g2 * s1 pfmul mm1, mm7 ;f3 * s1 | f3 *-c1 pfadd mm4, mm5 ;a | b pfsub mm3, mm1 ;d | c pmov mm5, mm2 pmov mm1, mm0 pupldq mm2, mm2 ;f0 | f0 pupldq mm0, mm0 ;f1 | f1 puphdq mm1, mm2 ;f0 | g1 puphdq mm5, mm0 ;f1 | g0 pmov mm2, mm4 pmov mm0, mm3 pfadd mm4, mm1 ;fi0 | gi1 pfadd mm3, mm5 ;fi1 | gi0 pfsub mm1, mm2 ;fi2 | gi3 pfsub mm5, mm0 ;fi3 | gi2 pmovd [r1+r4*2], mm4 ;gi[k1] puphdq mm4, mm4 pmovd [r1], mm3 ;gi[0] puphdq mm3, mm3 pmovd [r1+r2*2], mm1 ;gi[k3] puphdq mm1, mm1 pmovd [r1+r4*4], mm5 ;gi[k2] puphdq mm5, mm5 pmovd [r0], mm4 ;fi[0] pmovd [r0+r4*2], mm3 ;fi[k1] pmovd [r0+r4*4], mm1 ;fi[k2] pmovd [r0+r2*2], mm5 ;fi[k3] lea r0, [r0+r4*8] lea r1, [r1+r4*8] cmp r0, [esp + 16] pmov mm0, [esp] pmov mm1, [esp+8] jb near .do3 add r5, 4 ; mm6 = c1| s1 ; mm7 = s1|-c1 (we use the opposite sign. from GOGO here) pfmul mm6, [r3] ; c1*a | s1*a pfmul mm7, [r3+8] ; s1*b |-c1*b cmp r5, r4 pfsub mm6, mm7 ; c1*a-s1*b | s1*a+c1*b pupldq mm7,mm6 puphdq mm6,mm7 pmov mm7, [PIC_EBP_REL(costab)] jb near .for mov r0, [esp+40] ;fi cmp r4, [esp+40+4] lea r4, [r4*4] ;kx *= 4 jb near .do1 .exitttt femms add esp,20 popd ebp, ebx, esi, edi endproc ;void fht_E3DN(float *fz, int nn); proc fht_E3DN pushd ebp, ebx, esi, edi sub esp, 20 call get_pc.bp add ebp, PIC_BASE() mov r0, [esp+40] ;fi mov r1, [esp+44] ;r1 = nn lea r3, [PIC_EBP_REL(costab)] ;tri = costab lea r4, [r0+r1*8] ;r4 = fn = &fz[n] mov [esp+16], r4 mov r4, 8 ;kx = k1/2 pmov mm7, [r3] loopalign 16 .do1 lea r3, [r3+16] ;tri += 2; pmov mm6, [PIC_EBP_REL(costab+8)] lea r2, [r4+r4*2] ;k3*fsize/2 mov r5, 4 ;i = 1*fsize loopalign 16 .do2: lea r1, [r0+r4] ;gi = fi + kx ;f pmov mm0, [r0] ; X | fi0 pmov mm1, [r0+r4*4] ; X | fi2 pupldq mm0, [r0+r4*2] ;fi1 | fi0 pupldq mm1, [r0+r2*2] ;fi3 | fi2 pfpnacc mm0, mm0 ;fi0+fi1 | fi0-fi1 = f0|f1 pfpnacc mm1, mm1 ;fi2+fi3 | fi2-fi3 = f2|f3 pmov mm2, mm0 pfadd mm0, mm1 ;f0+f2|f1+f3 = fi0 | fi1 pfsub mm2, mm1 ;f0-f2|f1-f3 = fi2 | fi3 pmovd [r0+r4*2], mm0 ;fi[k1] pmovd [r0+r2*2], mm2 ;fi[k3] puphdq mm0, mm0 puphdq mm2, mm2 pmovd [r0], mm0 ;fi[0] pmovd [r0+r4*4], mm2 ;fi[k2] lea r0, [r0+r4*8] ;g pmov mm3, [r1] ; gi0 pmov mm4, [r1+r2*2] ; gi3 pupldq mm3, [r1+r4*2] ;gi1|gi0 pupldq mm4, [r1+r4*4] ;gi2|gi3 pfpnacc mm3, mm3 ;gi0+gi1 |gi0-gi1 = f0|f1 pfmul mm4, mm6 ;gi2*SQRT2|gi3*SQRT2 = f2|f3 pmov mm5, mm3 pfadd mm3, mm4 ;f0+f2|f1+f3 pfsub mm5, mm4 ;f0-f2|f1-f3 cmp r0, [esp + 16] pmovd [r1+r4*2], mm3 ;gi[k1] pmovd [r1+r2*2], mm5 ;gi[k3] puphdq mm3, mm3 puphdq mm5, mm5 pmovd [r1], mm3 ;gi[0] pmovd [r1+r4*4], mm5 ;gi[k2] jb near .do2 pmov mm6, [r3+r5] ; this is not aligned address!! loopalign 16 .for: ; ; mm6 = c1 | s1 ; mm7 = 0x800000000 | 0 ; pmov mm5, mm6 mov r0, [esp+40] ; fz puphdq mm5, mm5 ; c1 | c1 lea r1, [r0+r4*2] pfadd mm5, mm5 ; c1+c1 | c1+c1 pfmul mm5, mm6 ; 2*c1*c1 | 2*c1*s1 pfsub mm5, [PIC_EBP_REL(D_1_0_0_0)] ; 2*c1*c1-1.0 | 2*c1*s1 = -c2 | s2 pswapd mm4, mm5 ; s2 |-c2 pxor mm4, mm7 ; s2 | c2 pxor mm7, mm6 ; c1 |-s1 pswapd mm6, mm6 ; s1 | c1 ; mm4 = s2| c2 ; mm5 = -c2| s2 ; mm6 = c1| s1 ; mm7 = s1|-c1 (we use the opposite sign. from GOGO here) pmov [esp], mm4 pmov [esp+8], mm5 sub r1, r5 ;r1 = gi add r0, r5 ;r0 = fi loopalign 16 .do3: pmov mm0, [r0+r2*2] ; fi[k1] pmov mm2, [r1+r2*2] ; gi[k1] pmov mm1, [r0+r4*2] ; fi[k3] pmov mm3, [r1+r4*2] ; gi[k3] pupldq mm0, mm0 pupldq mm2, mm2 pupldq mm1, mm1 pupldq mm3, mm3 pfmul mm0, mm4 pfmul mm2, mm5 pfmul mm1, mm4 pfmul mm3, mm5 pfadd mm0, mm2 ;d | c pfadd mm1, mm3 ;b | a pmov mm2, [r0+r4*4] ;fi2 pupldq mm3, [r1+r4*4] ;gi2 | - pmov mm4, [r0] ;fi0 pupldq mm5, [r1] ;gi0 | - pupldq mm2, mm0 ;c | fi2 puphdq mm3, mm0 ;d | gi2 pupldq mm4, mm1 ;a | fi0 puphdq mm5, mm1 ;b | gi0 pfpnacc mm2, mm2 ;f2 | f3 pfpnacc mm3, mm3 ;g2 | g3 pfpnacc mm4, mm4 ;f0 | f1 pfpnacc mm5, mm5 ;g0 | g1 pmov mm0, mm2 pmov mm1, mm3 pupldq mm2, mm2 ;f3 | f3 pupldq mm3, mm3 ;g3 | g3 puphdq mm0, mm0 ;f2 | f2 puphdq mm1, mm1 ;g2 | g2 pswapd mm4, mm4 ;f1 | f0 pswapd mm5, mm5 ;g1 | g0 pfmul mm0, mm7 ;f2 * s1 | f2 *-c1 pfmul mm3, mm6 ;g3 * c1 | g3 * s1 pfmul mm1, mm6 ;g2 * c1 | g2 * s1 pfmul mm2, mm7 ;f3 * s1 | f3 *-c1 pfsub mm0, mm3 ; b |-a pfsub mm1, mm2 ; d | c pmov mm2, mm5 pmov mm3, mm4 pupldq mm4, mm0 ;-a | f0 pupldq mm5, mm1 ; c | g0 puphdq mm2, mm0 ; b | g1 puphdq mm3, mm1 ; d | f1 pfpnacc mm4, mm4 ;fi2 | fi0 pfpnacc mm5, mm5 ;gi0 | gi2 pfpnacc mm2, mm2 ;gi1 | gi3 pfpnacc mm3, mm3 ;fi1 | fi3 pmovd [r0], mm4 ;fi[0] pmovd [r1+r4*4], mm5 ;gi[k2] pmovd [r1+r2*2], mm2 ;gi[k3] pmovd [r0+r2*2], mm3 ;fi[k3] puphdq mm4, mm4 puphdq mm5, mm5 puphdq mm2, mm2 puphdq mm3, mm3 pmovd [r0+r4*4], mm4 ;fi[k2] pmovd [r1], mm5 ;gi[0] pmovd [r1+r4*2], mm2 ;gi[k1] pmovd [r0+r4*2], mm3 ;fi[k1] lea r0, [r0+r4*8] lea r1, [r1+r4*8] cmp r0, [esp + 16] pmov mm4, [esp] pmov mm5, [esp+8] jb near .do3 add r5, 4 ; mm6 = c1| s1 ; mm7 = s1|-c1 (we use the opposite sign. from GOGO here) pfmul mm6, [r3] ; c1*a | s1*a pfmul mm7, [r3+8] ; s1*b |-c1*b cmp r5, r4 pfsub mm6, mm7 ; c1*a-s1*b | s1*a+c1*b pswapd mm6, mm6 ; ??? ; s1*a+c1*b | c1*a-s1*b pmov mm7, [PIC_EBP_REL(costab)] jb near .for mov r0, [esp+40] ;fi cmp r4, [esp+40+4] lea r4, [r4*4] ;kx *= 4 jb near .do1 .exitttt femms add esp,20 popd ebp, ebx, esi, edi endproc ���������������������������������������������������������������������������������������������������������������������������lame-3.100/libmp3lame/i386/cpu_feat.nas�������������������������������������������������������������000644 �001751 �001751 �00000003517 07753730614 021114� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; ; ; assembler routines to detect CPU-features ; ; MMX / 3DNow! / SSE / SSE2 ; ; for the LAME project ; Frank Klemm, Robert Hegemann 2000-10-12 ; %include "nasm.h" globaldef has_MMX_nasm globaldef has_3DNow_nasm globaldef has_SSE_nasm globaldef has_SSE2_nasm segment_code testCPUID: pushfd pop eax mov ecx,eax xor eax,0x200000 push eax popfd pushfd pop eax cmp eax,ecx ret ;--------------------------------------- ; int has_MMX_nasm (void) ;--------------------------------------- has_MMX_nasm: pushad call testCPUID jz return0 ; no CPUID command, so no MMX mov eax,0x1 CPUID test edx,0x800000 jz return0 ; no MMX support jmp return1 ; MMX support ;--------------------------------------- ; int has_SSE_nasm (void) ;--------------------------------------- has_SSE_nasm: pushad call testCPUID jz return0 ; no CPUID command, so no SSE mov eax,0x1 CPUID test edx,0x02000000 jz return0 ; no SSE support jmp return1 ; SSE support ;--------------------------------------- ; int has_SSE2_nasm (void) ;--------------------------------------- has_SSE2_nasm: pushad call testCPUID jz return0 ; no CPUID command, so no SSE2 mov eax,0x1 CPUID test edx,0x04000000 jz return0 ; no SSE2 support jmp return1 ; SSE2 support ;--------------------------------------- ; int has_3DNow_nasm (void) ;--------------------------------------- has_3DNow_nasm: pushad call testCPUID jz return0 ; no CPUID command, so no 3DNow! mov eax,0x80000000 CPUID cmp eax,0x80000000 jbe return0 ; no extended MSR(1), so no 3DNow! mov eax,0x80000001 CPUID test edx,0x80000000 jz return0 ; no 3DNow! support ; 3DNow! support return1: popad xor eax,eax inc eax ret return0: popad xor eax,eax ret end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/include/lame.def�������������������������������������������������������������������������000644 �001751 �001751 �00000013352 13154046617 017117� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������LIBRARY libmp3lame.DLL EXPORTS lame_init @1 lame_set_num_samples @2 lame_get_num_samples @3 lame_set_in_samplerate @4 lame_get_in_samplerate @5 lame_set_num_channels @6 lame_get_num_channels @7 lame_set_scale @8 lame_get_scale @9 lame_set_scale_left @10 lame_get_scale_left @11 lame_set_scale_right @12 lame_get_scale_right @13 lame_set_out_samplerate @14 lame_get_out_samplerate @15 lame_set_analysis @16 lame_get_analysis @17 lame_set_bWriteVbrTag @18 lame_get_bWriteVbrTag @19 lame_set_decode_only @20 lame_get_decode_only @21 lame_set_quality @22 lame_get_quality @23 lame_set_mode @24 lame_get_mode @25 lame_set_force_ms @26 lame_get_force_ms @27 lame_set_free_format @28 lame_get_free_format @29 lame_set_findReplayGain @30 lame_get_findReplayGain @31 lame_set_decode_on_the_fly @32 lame_get_decode_on_the_fly @33 lame_set_nogap_total @34 lame_get_nogap_total @35 lame_set_nogap_currentindex @36 lame_get_nogap_currentindex @37 lame_set_errorf @38 lame_set_debugf @39 lame_set_msgf @40 lame_set_brate @41 lame_get_brate @42 lame_set_compression_ratio @43 lame_get_compression_ratio @44 lame_set_preset @45 lame_set_asm_optimizations @46 lame_set_copyright @47 lame_get_copyright @48 lame_set_original @49 lame_get_original @50 lame_set_error_protection @51 lame_get_error_protection @52 lame_set_padding_type @53 lame_get_padding_type @54 lame_set_extension @55 lame_get_extension @56 lame_set_strict_ISO @57 lame_get_strict_ISO @58 lame_set_disable_reservoir @59 lame_get_disable_reservoir @60 lame_set_quant_comp @61 lame_get_quant_comp @62 lame_set_quant_comp_short @63 lame_get_quant_comp_short @64 lame_set_experimentalX @65 lame_get_experimentalX @66 lame_set_experimentalY @67 lame_get_experimentalY @68 lame_set_experimentalZ @69 lame_get_experimentalZ @70 lame_set_exp_nspsytune @71 lame_get_exp_nspsytune @72 lame_set_msfix @73 lame_get_msfix @74 lame_set_VBR @75 lame_get_VBR @76 lame_set_VBR_q @77 lame_get_VBR_q @78 lame_set_VBR_mean_bitrate_kbps @79 lame_get_VBR_mean_bitrate_kbps @80 lame_set_VBR_min_bitrate_kbps @81 lame_get_VBR_min_bitrate_kbps @82 lame_set_VBR_max_bitrate_kbps @83 lame_get_VBR_max_bitrate_kbps @84 lame_set_VBR_hard_min @85 lame_get_VBR_hard_min @86 lame_set_preset_expopts @87 lame_set_lowpassfreq @88 lame_get_lowpassfreq @89 lame_set_lowpasswidth @90 lame_get_lowpasswidth @91 lame_set_highpassfreq @92 lame_get_highpassfreq @93 lame_set_highpasswidth @94 lame_get_highpasswidth @95 lame_set_ATHonly @96 lame_get_ATHonly @97 lame_set_ATHshort @98 lame_get_ATHshort @99 lame_set_noATH @100 lame_get_noATH @101 lame_set_ATHtype @102 lame_get_ATHtype @103 lame_set_ATHlower @104 lame_get_ATHlower @105 lame_set_athaa_type @106 lame_get_athaa_type @107 lame_set_athaa_loudapprox @108 lame_get_athaa_loudapprox @109 lame_set_athaa_sensitivity @110 lame_get_athaa_sensitivity @111 lame_set_cwlimit @112 lame_get_cwlimit @113 lame_set_useTemporal @114 lame_get_useTemporal @115 lame_set_interChRatio @116 lame_get_interChRatio @117 lame_set_no_short_blocks @118 lame_get_no_short_blocks @119 lame_set_force_short_blocks @120 lame_get_force_short_blocks @121 lame_set_allow_diff_short @122 lame_get_allow_diff_short @123 lame_set_emphasis @124 lame_get_emphasis @125 lame_get_version @126 lame_get_encoder_delay @127 lame_get_encoder_padding @128 lame_get_framesize @129 lame_get_mf_samples_to_encode @130 lame_get_size_mp3buffer @131 lame_get_frameNum @132 lame_get_totalframes @133 lame_get_RadioGain @134 lame_get_AudiophileGain @135 lame_get_PeakSample @136 lame_get_noclipGainChange @137 lame_get_noclipScale @138 lame_init_params @139 get_lame_version @140 get_lame_short_version @141 get_lame_very_short_version @142 get_psy_version @143 get_lame_url @144 get_lame_version_numerical @145 lame_print_config @146 lame_print_internals @147 lame_encode_buffer @148 lame_encode_buffer_interleaved @149 lame_encode_buffer_float @150 lame_encode_buffer_long @151 lame_encode_buffer_long2 @152 lame_encode_buffer_int @153 lame_encode_flush @154 lame_encode_flush_nogap @155 lame_init_bitstream @156 lame_bitrate_hist @157 lame_bitrate_kbps @158 lame_stereo_mode_hist @159 lame_bitrate_stereo_mode_hist @160 lame_block_type_hist @161 lame_bitrate_block_type_hist @162 lame_mp3_tags_fid @163 lame_close @164 lame_get_lametag_frame @165 get_lame_os_bitness @166 lame_set_VBR_quality @167 lame_get_VBR_quality @168 lame_encode_buffer_ieee_float @169 lame_encode_buffer_interleaved_ieee_float @170 lame_encode_buffer_ieee_double @171 lame_encode_buffer_interleaved_ieee_double @172 lame_encode_buffer_interleaved_int @173 lame_get_bitrate @502 lame_get_samplerate @503 lame_get_maximum_number_of_samples @504 lame_decode_init @1000 lame_decode @1001 lame_decode_headers @1002 lame_decode1 @1003 lame_decode1_headers @1004 lame_decode1_headersB @1005 lame_decode_exit @1006 hip_decode_init @1100 hip_decode_exit @1101 hip_decode @1102 hip_decode_headers @1103 hip_decode1 @1104 hip_decode1_headers @1105 hip_decode1_headersB @1106 hip_set_debugf @1107 hip_set_errorf @1108 hip_set_msgf @1109 id3tag_genre_list @2000 id3tag_init @2001 id3tag_add_v2 @2002 id3tag_v1_only @2003 id3tag_v2_only @2004 id3tag_space_v1 @2005 id3tag_pad_v2 @2006 id3tag_set_title @2007 id3tag_set_artist @2008 id3tag_set_album @2009 id3tag_set_year @2010 id3tag_set_comment @2011 id3tag_set_track @2012 id3tag_set_genre @2013 id3tag_set_fieldvalue @2014 id3tag_set_albumart @2015 lame_get_id3v1_tag @2016 lame_get_id3v2_tag @2017 lame_set_write_id3tag_automatic @2018 lame_get_write_id3tag_automatic @2019 id3tag_set_pad @2020 id3tag_set_comment_ucs2 @2021 id3tag_set_textinfo_ucs2 @2022 id3tag_set_fieldvalue_ucs2 @2023 id3tag_set_comment_utf16 @2024 id3tag_set_textinfo_utf16 @2025 id3tag_set_fieldvalue_utf16 @2026 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/include/Makefile.am����������������������������������������������������������������������000644 �001751 �001751 �00000000251 11347215627 017550� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.4 2010/03/14 17:23:35 robert Exp $ include $(top_srcdir)/Makefile.am.global pkginclude_HEADERS = lame.h EXTRA_DIST = lame.def libmp3lame.sym �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/include/libmp3lame.sym�������������������������������������������������������������������000644 �001751 �001751 �00000011545 13154046617 020302� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame_init lame_init_old lame_set_num_samples lame_get_num_samples lame_set_in_samplerate lame_get_in_samplerate lame_set_num_channels lame_get_num_channels lame_set_scale lame_get_scale lame_set_scale_left lame_get_scale_left lame_set_scale_right lame_get_scale_right lame_set_out_samplerate lame_get_out_samplerate lame_set_analysis lame_get_analysis lame_set_bWriteVbrTag lame_get_bWriteVbrTag lame_set_decode_only lame_get_decode_only lame_set_ogg lame_get_ogg lame_set_quality lame_get_quality lame_set_mode lame_get_mode lame_set_mode_automs lame_get_mode_automs lame_set_force_ms lame_get_force_ms lame_set_free_format lame_get_free_format lame_set_findReplayGain lame_get_findReplayGain lame_set_decode_on_the_fly lame_get_decode_on_the_fly lame_set_ReplayGain_input lame_get_ReplayGain_input lame_set_ReplayGain_decode lame_get_ReplayGain_decode lame_set_findPeakSample lame_get_findPeakSample lame_set_nogap_total lame_get_nogap_total lame_set_nogap_currentindex lame_get_nogap_currentindex lame_set_errorf lame_set_debugf lame_set_msgf lame_set_brate lame_get_brate lame_set_compression_ratio lame_get_compression_ratio lame_set_preset lame_set_asm_optimizations lame_set_copyright lame_get_copyright lame_set_original lame_get_original lame_set_error_protection lame_get_error_protection lame_set_padding_type lame_get_padding_type lame_set_extension lame_get_extension lame_set_strict_ISO lame_get_strict_ISO lame_set_disable_reservoir lame_get_disable_reservoir lame_set_quant_comp lame_get_quant_comp lame_set_quant_comp_short lame_get_quant_comp_short lame_set_experimentalX lame_get_experimentalX lame_set_experimentalY lame_get_experimentalY lame_set_experimentalZ lame_get_experimentalZ lame_set_exp_nspsytune lame_get_exp_nspsytune lame_set_msfix lame_get_msfix lame_set_VBR lame_get_VBR lame_set_VBR_q lame_get_VBR_q lame_set_VBR_quality lame_get_VBR_quality lame_set_VBR_mean_bitrate_kbps lame_get_VBR_mean_bitrate_kbps lame_set_VBR_min_bitrate_kbps lame_get_VBR_min_bitrate_kbps lame_set_VBR_max_bitrate_kbps lame_get_VBR_max_bitrate_kbps lame_set_VBR_hard_min lame_get_VBR_hard_min lame_set_preset_expopts lame_set_lowpassfreq lame_get_lowpassfreq lame_set_lowpasswidth lame_get_lowpasswidth lame_set_highpassfreq lame_get_highpassfreq lame_set_highpasswidth lame_get_highpasswidth lame_set_ATHonly lame_get_ATHonly lame_set_ATHshort lame_get_ATHshort lame_set_noATH lame_get_noATH lame_set_ATHtype lame_get_ATHtype lame_set_ATHlower lame_get_ATHlower lame_set_athaa_type lame_get_athaa_type lame_set_athaa_loudapprox lame_get_athaa_loudapprox lame_set_athaa_sensitivity lame_get_athaa_sensitivity lame_set_cwlimit lame_get_cwlimit lame_set_allow_diff_short lame_get_allow_diff_short lame_set_useTemporal lame_get_useTemporal lame_set_interChRatio lame_get_interChRatio lame_set_no_short_blocks lame_get_no_short_blocks lame_set_force_short_blocks lame_get_force_short_blocks lame_set_emphasis lame_get_emphasis lame_get_version lame_get_encoder_delay lame_get_encoder_padding lame_get_framesize lame_get_mf_samples_to_encode lame_get_size_mp3buffer lame_get_frameNum lame_get_totalframes lame_get_RadioGain lame_get_AudiophileGain lame_get_PeakSample lame_get_noclipGainChange lame_get_noclipScale lame_init_params get_lame_version get_lame_short_version get_lame_very_short_version get_psy_version get_lame_url get_lame_os_bitness get_lame_version_numerical lame_print_config lame_print_internals lame_encode_buffer lame_encode_buffer_interleaved lame_encode_buffer_interleaved_int lame_encode_buffer_float lame_encode_buffer_ieee_float lame_encode_buffer_interleaved_ieee_float lame_encode_buffer_ieee_double lame_encode_buffer_interleaved_ieee_double lame_encode_buffer_long lame_encode_buffer_long2 lame_encode_buffer_int lame_encode_flush lame_encode_flush_nogap lame_init_bitstream lame_bitrate_hist lame_bitrate_kbps lame_stereo_mode_hist lame_bitrate_stereo_mode_hist lame_block_type_hist lame_bitrate_block_type_hist lame_mp3_tags_fid lame_get_lametag_frame lame_close lame_encode_finish hip_decode_init hip_decode_exit hip_set_errorf hip_set_debugf hip_set_msgf hip_decode hip_decode_headers hip_decode1 hip_decode1_headers hip_decode1_headersB lame_decode_init lame_decode lame_decode_headers lame_decode1 lame_decode1_headers lame_decode1_headersB lame_decode_exit id3tag_genre_list id3tag_init id3tag_add_v2 id3tag_v1_only id3tag_v2_only id3tag_space_v1 id3tag_pad_v2 id3tag_set_pad id3tag_set_title id3tag_set_artist id3tag_set_album id3tag_set_year id3tag_set_comment id3tag_set_track id3tag_set_genre id3tag_set_fieldvalue id3tag_set_albumart lame_get_id3v1_tag lame_get_id3v2_tag lame_set_write_id3tag_automatic lame_get_write_id3tag_automatic id3tag_set_textinfo_latin1 id3tag_set_comment_latin1 id3tag_set_textinfo_ucs2 id3tag_set_comment_ucs2 id3tag_set_fieldvalue_ucs2 id3tag_set_fieldvalue_utf16 id3tag_set_textinfo_utf16 id3tag_set_comment_utf16 lame_get_bitrate lame_get_samplerate lame_get_maximum_number_of_samples �����������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/include/lame.h���������������������������������������������������������������������������000644 �001751 �001751 �00000141605 13154046617 016613� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Interface to MP3 LAME encoding engine * * Copyright (c) 1999 Mark Taylor * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* $Id: lame.h,v 1.192 2017/08/31 14:14:46 robert Exp $ */ #ifndef LAME_LAME_H #define LAME_LAME_H /* for size_t typedef */ #include <stddef.h> /* for va_list typedef */ #include <stdarg.h> /* for FILE typedef, TODO: remove when removing lame_mp3_tags_fid */ #include <stdio.h> #if defined(__cplusplus) extern "C" { #endif typedef void (*lame_report_function)(const char *format, va_list ap); #if defined(WIN32) || defined(_WIN32) #undef CDECL #define CDECL __cdecl #else #define CDECL #endif #define DEPRECATED_OR_OBSOLETE_CODE_REMOVED 1 typedef enum vbr_mode_e { vbr_off=0, vbr_mt, /* obsolete, same as vbr_mtrh */ vbr_rh, vbr_abr, vbr_mtrh, vbr_max_indicator, /* Don't use this! It's used for sanity checks. */ vbr_default=vbr_mtrh /* change this to change the default VBR mode of LAME */ } vbr_mode; /* MPEG modes */ typedef enum MPEG_mode_e { STEREO = 0, JOINT_STEREO, DUAL_CHANNEL, /* LAME doesn't supports this! */ MONO, NOT_SET, MAX_INDICATOR /* Don't use this! It's used for sanity checks. */ } MPEG_mode; /* Padding types */ typedef enum Padding_type_e { PAD_NO = 0, PAD_ALL, PAD_ADJUST, PAD_MAX_INDICATOR /* Don't use this! It's used for sanity checks. */ } Padding_type; /*presets*/ typedef enum preset_mode_e { /*values from 8 to 320 should be reserved for abr bitrates*/ /*for abr I'd suggest to directly use the targeted bitrate as a value*/ ABR_8 = 8, ABR_320 = 320, V9 = 410, /*Vx to match Lame and VBR_xx to match FhG*/ VBR_10 = 410, V8 = 420, VBR_20 = 420, V7 = 430, VBR_30 = 430, V6 = 440, VBR_40 = 440, V5 = 450, VBR_50 = 450, V4 = 460, VBR_60 = 460, V3 = 470, VBR_70 = 470, V2 = 480, VBR_80 = 480, V1 = 490, VBR_90 = 490, V0 = 500, VBR_100 = 500, /*still there for compatibility*/ R3MIX = 1000, STANDARD = 1001, EXTREME = 1002, INSANE = 1003, STANDARD_FAST = 1004, EXTREME_FAST = 1005, MEDIUM = 1006, MEDIUM_FAST = 1007 } preset_mode; /*asm optimizations*/ typedef enum asm_optimizations_e { MMX = 1, AMD_3DNOW = 2, SSE = 3 } asm_optimizations; /* psychoacoustic model */ typedef enum Psy_model_e { PSY_GPSYCHO = 1, PSY_NSPSYTUNE = 2 } Psy_model; /* buffer considerations */ typedef enum buffer_constraint_e { MDB_DEFAULT=0, MDB_STRICT_ISO=1, MDB_MAXIMUM=2 } buffer_constraint; struct lame_global_struct; typedef struct lame_global_struct lame_global_flags; typedef lame_global_flags *lame_t; /*********************************************************************** * * The LAME API * These functions should be called, in this order, for each * MP3 file to be encoded. See the file "API" for more documentation * ***********************************************************************/ /* * REQUIRED: * initialize the encoder. sets default for all encoder parameters, * returns NULL if some malloc()'s failed * otherwise returns pointer to structure needed for all future * API calls. */ lame_global_flags * CDECL lame_init(void); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* obsolete version */ int CDECL lame_init_old(lame_global_flags *); #endif /* * OPTIONAL: * set as needed to override defaults */ /******************************************************************** * input stream description ***********************************************************************/ /* number of samples. default = 2^32-1 */ int CDECL lame_set_num_samples(lame_global_flags *, unsigned long); unsigned long CDECL lame_get_num_samples(const lame_global_flags *); /* input sample rate in Hz. default = 44100hz */ int CDECL lame_set_in_samplerate(lame_global_flags *, int); int CDECL lame_get_in_samplerate(const lame_global_flags *); /* number of channels in input stream. default=2 */ int CDECL lame_set_num_channels(lame_global_flags *, int); int CDECL lame_get_num_channels(const lame_global_flags *); /* scale the input by this amount before encoding. default=1 (not used by decoding routines) */ int CDECL lame_set_scale(lame_global_flags *, float); float CDECL lame_get_scale(const lame_global_flags *); /* scale the channel 0 (left) input by this amount before encoding. default=1 (not used by decoding routines) */ int CDECL lame_set_scale_left(lame_global_flags *, float); float CDECL lame_get_scale_left(const lame_global_flags *); /* scale the channel 1 (right) input by this amount before encoding. default=1 (not used by decoding routines) */ int CDECL lame_set_scale_right(lame_global_flags *, float); float CDECL lame_get_scale_right(const lame_global_flags *); /* output sample rate in Hz. default = 0, which means LAME picks best value based on the amount of compression. MPEG only allows: MPEG1 32, 44.1, 48khz MPEG2 16, 22.05, 24 MPEG2.5 8, 11.025, 12 (not used by decoding routines) */ int CDECL lame_set_out_samplerate(lame_global_flags *, int); int CDECL lame_get_out_samplerate(const lame_global_flags *); /******************************************************************** * general control parameters ***********************************************************************/ /* 1=cause LAME to collect data for an MP3 frame analyzer. default=0 */ int CDECL lame_set_analysis(lame_global_flags *, int); int CDECL lame_get_analysis(const lame_global_flags *); /* 1 = write a Xing VBR header frame. default = 1 this variable must have been added by a Hungarian notation Windows programmer :-) */ int CDECL lame_set_bWriteVbrTag(lame_global_flags *, int); int CDECL lame_get_bWriteVbrTag(const lame_global_flags *); /* 1=decode only. use lame/mpglib to convert mp3/ogg to wav. default=0 */ int CDECL lame_set_decode_only(lame_global_flags *, int); int CDECL lame_get_decode_only(const lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* 1=encode a Vorbis .ogg file. default=0 */ /* DEPRECATED */ int CDECL lame_set_ogg(lame_global_flags *, int); int CDECL lame_get_ogg(const lame_global_flags *); #endif /* internal algorithm selection. True quality is determined by the bitrate but this variable will effect quality by selecting expensive or cheap algorithms. quality=0..9. 0=best (very slow). 9=worst. recommended: 2 near-best quality, not too slow 5 good quality, fast 7 ok quality, really fast */ int CDECL lame_set_quality(lame_global_flags *, int); int CDECL lame_get_quality(const lame_global_flags *); /* mode = 0,1,2,3 = stereo, jstereo, dual channel (not supported), mono default: lame picks based on compression ration and input channels */ int CDECL lame_set_mode(lame_global_flags *, MPEG_mode); MPEG_mode CDECL lame_get_mode(const lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* mode_automs. Use a M/S mode with a switching threshold based on compression ratio DEPRECATED */ int CDECL lame_set_mode_automs(lame_global_flags *, int); int CDECL lame_get_mode_automs(const lame_global_flags *); #endif /* force_ms. Force M/S for all frames. For testing only. default = 0 (disabled) */ int CDECL lame_set_force_ms(lame_global_flags *, int); int CDECL lame_get_force_ms(const lame_global_flags *); /* use free_format? default = 0 (disabled) */ int CDECL lame_set_free_format(lame_global_flags *, int); int CDECL lame_get_free_format(const lame_global_flags *); /* perform ReplayGain analysis? default = 0 (disabled) */ int CDECL lame_set_findReplayGain(lame_global_flags *, int); int CDECL lame_get_findReplayGain(const lame_global_flags *); /* decode on the fly. Search for the peak sample. If the ReplayGain * analysis is enabled then perform the analysis on the decoded data * stream. default = 0 (disabled) * NOTE: if this option is set the build-in decoder should not be used */ int CDECL lame_set_decode_on_the_fly(lame_global_flags *, int); int CDECL lame_get_decode_on_the_fly(const lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* DEPRECATED: now does the same as lame_set_findReplayGain() default = 0 (disabled) */ int CDECL lame_set_ReplayGain_input(lame_global_flags *, int); int CDECL lame_get_ReplayGain_input(const lame_global_flags *); /* DEPRECATED: now does the same as lame_set_decode_on_the_fly() && lame_set_findReplayGain() default = 0 (disabled) */ int CDECL lame_set_ReplayGain_decode(lame_global_flags *, int); int CDECL lame_get_ReplayGain_decode(const lame_global_flags *); /* DEPRECATED: now does the same as lame_set_decode_on_the_fly() default = 0 (disabled) */ int CDECL lame_set_findPeakSample(lame_global_flags *, int); int CDECL lame_get_findPeakSample(const lame_global_flags *); #endif /* counters for gapless encoding */ int CDECL lame_set_nogap_total(lame_global_flags*, int); int CDECL lame_get_nogap_total(const lame_global_flags*); int CDECL lame_set_nogap_currentindex(lame_global_flags* , int); int CDECL lame_get_nogap_currentindex(const lame_global_flags*); /* * OPTIONAL: * Set printf like error/debug/message reporting functions. * The second argument has to be a pointer to a function which looks like * void my_debugf(const char *format, va_list ap) * { * (void) vfprintf(stdout, format, ap); * } * If you use NULL as the value of the pointer in the set function, the * lame buildin function will be used (prints to stderr). * To quiet any output you have to replace the body of the example function * with just "return;" and use it in the set function. */ int CDECL lame_set_errorf(lame_global_flags *, lame_report_function); int CDECL lame_set_debugf(lame_global_flags *, lame_report_function); int CDECL lame_set_msgf (lame_global_flags *, lame_report_function); /* set one of brate compression ratio. default is compression ratio of 11. */ int CDECL lame_set_brate(lame_global_flags *, int); int CDECL lame_get_brate(const lame_global_flags *); int CDECL lame_set_compression_ratio(lame_global_flags *, float); float CDECL lame_get_compression_ratio(const lame_global_flags *); int CDECL lame_set_preset( lame_global_flags* gfp, int ); int CDECL lame_set_asm_optimizations( lame_global_flags* gfp, int, int ); /******************************************************************** * frame params ***********************************************************************/ /* mark as copyright. default=0 */ int CDECL lame_set_copyright(lame_global_flags *, int); int CDECL lame_get_copyright(const lame_global_flags *); /* mark as original. default=1 */ int CDECL lame_set_original(lame_global_flags *, int); int CDECL lame_get_original(const lame_global_flags *); /* error_protection. Use 2 bytes from each frame for CRC checksum. default=0 */ int CDECL lame_set_error_protection(lame_global_flags *, int); int CDECL lame_get_error_protection(const lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* padding_type. 0=pad no frames 1=pad all frames 2=adjust padding(default) */ int CDECL lame_set_padding_type(lame_global_flags *, Padding_type); Padding_type CDECL lame_get_padding_type(const lame_global_flags *); #endif /* MP3 'private extension' bit Meaningless. default=0 */ int CDECL lame_set_extension(lame_global_flags *, int); int CDECL lame_get_extension(const lame_global_flags *); /* enforce strict ISO compliance. default=0 */ int CDECL lame_set_strict_ISO(lame_global_flags *, int); int CDECL lame_get_strict_ISO(const lame_global_flags *); /******************************************************************** * quantization/noise shaping ***********************************************************************/ /* disable the bit reservoir. For testing only. default=0 */ int CDECL lame_set_disable_reservoir(lame_global_flags *, int); int CDECL lame_get_disable_reservoir(const lame_global_flags *); /* select a different "best quantization" function. default=0 */ int CDECL lame_set_quant_comp(lame_global_flags *, int); int CDECL lame_get_quant_comp(const lame_global_flags *); int CDECL lame_set_quant_comp_short(lame_global_flags *, int); int CDECL lame_get_quant_comp_short(const lame_global_flags *); int CDECL lame_set_experimentalX(lame_global_flags *, int); /* compatibility*/ int CDECL lame_get_experimentalX(const lame_global_flags *); /* another experimental option. for testing only */ int CDECL lame_set_experimentalY(lame_global_flags *, int); int CDECL lame_get_experimentalY(const lame_global_flags *); /* another experimental option. for testing only */ int CDECL lame_set_experimentalZ(lame_global_flags *, int); int CDECL lame_get_experimentalZ(const lame_global_flags *); /* Naoki's psycho acoustic model. default=0 */ int CDECL lame_set_exp_nspsytune(lame_global_flags *, int); int CDECL lame_get_exp_nspsytune(const lame_global_flags *); void CDECL lame_set_msfix(lame_global_flags *, double); float CDECL lame_get_msfix(const lame_global_flags *); /******************************************************************** * VBR control ***********************************************************************/ /* Types of VBR. default = vbr_off = CBR */ int CDECL lame_set_VBR(lame_global_flags *, vbr_mode); vbr_mode CDECL lame_get_VBR(const lame_global_flags *); /* VBR quality level. 0=highest 9=lowest */ int CDECL lame_set_VBR_q(lame_global_flags *, int); int CDECL lame_get_VBR_q(const lame_global_flags *); /* VBR quality level. 0=highest 9=lowest, Range [0,...,10[ */ int CDECL lame_set_VBR_quality(lame_global_flags *, float); float CDECL lame_get_VBR_quality(const lame_global_flags *); /* Ignored except for VBR=vbr_abr (ABR mode) */ int CDECL lame_set_VBR_mean_bitrate_kbps(lame_global_flags *, int); int CDECL lame_get_VBR_mean_bitrate_kbps(const lame_global_flags *); int CDECL lame_set_VBR_min_bitrate_kbps(lame_global_flags *, int); int CDECL lame_get_VBR_min_bitrate_kbps(const lame_global_flags *); int CDECL lame_set_VBR_max_bitrate_kbps(lame_global_flags *, int); int CDECL lame_get_VBR_max_bitrate_kbps(const lame_global_flags *); /* 1=strictly enforce VBR_min_bitrate. Normally it will be violated for analog silence */ int CDECL lame_set_VBR_hard_min(lame_global_flags *, int); int CDECL lame_get_VBR_hard_min(const lame_global_flags *); /* for preset */ #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else int CDECL lame_set_preset_expopts(lame_global_flags *, int); #endif /******************************************************************** * Filtering control ***********************************************************************/ /* freq in Hz to apply lowpass. Default = 0 = lame chooses. -1 = disabled */ int CDECL lame_set_lowpassfreq(lame_global_flags *, int); int CDECL lame_get_lowpassfreq(const lame_global_flags *); /* width of transition band, in Hz. Default = one polyphase filter band */ int CDECL lame_set_lowpasswidth(lame_global_flags *, int); int CDECL lame_get_lowpasswidth(const lame_global_flags *); /* freq in Hz to apply highpass. Default = 0 = lame chooses. -1 = disabled */ int CDECL lame_set_highpassfreq(lame_global_flags *, int); int CDECL lame_get_highpassfreq(const lame_global_flags *); /* width of transition band, in Hz. Default = one polyphase filter band */ int CDECL lame_set_highpasswidth(lame_global_flags *, int); int CDECL lame_get_highpasswidth(const lame_global_flags *); /******************************************************************** * psycho acoustics and other arguments which you should not change * unless you know what you are doing ***********************************************************************/ /* only use ATH for masking */ int CDECL lame_set_ATHonly(lame_global_flags *, int); int CDECL lame_get_ATHonly(const lame_global_flags *); /* only use ATH for short blocks */ int CDECL lame_set_ATHshort(lame_global_flags *, int); int CDECL lame_get_ATHshort(const lame_global_flags *); /* disable ATH */ int CDECL lame_set_noATH(lame_global_flags *, int); int CDECL lame_get_noATH(const lame_global_flags *); /* select ATH formula */ int CDECL lame_set_ATHtype(lame_global_flags *, int); int CDECL lame_get_ATHtype(const lame_global_flags *); /* lower ATH by this many db */ int CDECL lame_set_ATHlower(lame_global_flags *, float); float CDECL lame_get_ATHlower(const lame_global_flags *); /* select ATH adaptive adjustment type */ int CDECL lame_set_athaa_type( lame_global_flags *, int); int CDECL lame_get_athaa_type( const lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* select the loudness approximation used by the ATH adaptive auto-leveling */ int CDECL lame_set_athaa_loudapprox( lame_global_flags *, int); int CDECL lame_get_athaa_loudapprox( const lame_global_flags *); #endif /* adjust (in dB) the point below which adaptive ATH level adjustment occurs */ int CDECL lame_set_athaa_sensitivity( lame_global_flags *, float); float CDECL lame_get_athaa_sensitivity( const lame_global_flags* ); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* OBSOLETE: predictability limit (ISO tonality formula) */ int CDECL lame_set_cwlimit(lame_global_flags *, int); int CDECL lame_get_cwlimit(const lame_global_flags *); #endif /* allow blocktypes to differ between channels? default: 0 for jstereo, 1 for stereo */ int CDECL lame_set_allow_diff_short(lame_global_flags *, int); int CDECL lame_get_allow_diff_short(const lame_global_flags *); /* use temporal masking effect (default = 1) */ int CDECL lame_set_useTemporal(lame_global_flags *, int); int CDECL lame_get_useTemporal(const lame_global_flags *); /* use temporal masking effect (default = 1) */ int CDECL lame_set_interChRatio(lame_global_flags *, float); float CDECL lame_get_interChRatio(const lame_global_flags *); /* disable short blocks */ int CDECL lame_set_no_short_blocks(lame_global_flags *, int); int CDECL lame_get_no_short_blocks(const lame_global_flags *); /* force short blocks */ int CDECL lame_set_force_short_blocks(lame_global_flags *, int); int CDECL lame_get_force_short_blocks(const lame_global_flags *); /* Input PCM is emphased PCM (for instance from one of the rarely emphased CDs), it is STRONGLY not recommended to use this, because psycho does not take it into account, and last but not least many decoders ignore these bits */ int CDECL lame_set_emphasis(lame_global_flags *, int); int CDECL lame_get_emphasis(const lame_global_flags *); /************************************************************************/ /* internal variables, cannot be set... */ /* provided because they may be of use to calling application */ /************************************************************************/ /* version 0=MPEG-2 1=MPEG-1 (2=MPEG-2.5) */ int CDECL lame_get_version(const lame_global_flags *); /* encoder delay */ int CDECL lame_get_encoder_delay(const lame_global_flags *); /* padding appended to the input to make sure decoder can fully decode all input. Note that this value can only be calculated during the call to lame_encoder_flush(). Before lame_encoder_flush() has been called, the value of encoder_padding = 0. */ int CDECL lame_get_encoder_padding(const lame_global_flags *); /* size of MPEG frame */ int CDECL lame_get_framesize(const lame_global_flags *); /* number of PCM samples buffered, but not yet encoded to mp3 data. */ int CDECL lame_get_mf_samples_to_encode( const lame_global_flags* gfp ); /* size (bytes) of mp3 data buffered, but not yet encoded. this is the number of bytes which would be output by a call to lame_encode_flush_nogap. NOTE: lame_encode_flush() will return more bytes than this because it will encode the reamining buffered PCM samples before flushing the mp3 buffers. */ int CDECL lame_get_size_mp3buffer( const lame_global_flags* gfp ); /* number of frames encoded so far */ int CDECL lame_get_frameNum(const lame_global_flags *); /* lame's estimate of the total number of frames to be encoded only valid if calling program set num_samples */ int CDECL lame_get_totalframes(const lame_global_flags *); /* RadioGain value. Multiplied by 10 and rounded to the nearest. */ int CDECL lame_get_RadioGain(const lame_global_flags *); /* AudiophileGain value. Multipled by 10 and rounded to the nearest. */ int CDECL lame_get_AudiophileGain(const lame_global_flags *); /* the peak sample */ float CDECL lame_get_PeakSample(const lame_global_flags *); /* Gain change required for preventing clipping. The value is correct only if peak sample searching was enabled. If negative then the waveform already does not clip. The value is multiplied by 10 and rounded up. */ int CDECL lame_get_noclipGainChange(const lame_global_flags *); /* user-specified scale factor required for preventing clipping. Value is correct only if peak sample searching was enabled and no user-specified scaling was performed. If negative then either the waveform already does not clip or the value cannot be determined */ float CDECL lame_get_noclipScale(const lame_global_flags *); /* returns the limit of PCM samples, which one can pass in an encode call under the constrain of a provided buffer of size buffer_size */ int CDECL lame_get_maximum_number_of_samples(lame_t gfp, size_t buffer_size); /* * REQUIRED: * sets more internal configuration based on data provided above. * returns -1 if something failed. */ int CDECL lame_init_params(lame_global_flags *); /* * OPTIONAL: * get the version number, in a string. of the form: * "3.63 (beta)" or just "3.63". */ const char* CDECL get_lame_version ( void ); const char* CDECL get_lame_short_version ( void ); const char* CDECL get_lame_very_short_version ( void ); const char* CDECL get_psy_version ( void ); const char* CDECL get_lame_url ( void ); const char* CDECL get_lame_os_bitness ( void ); /* * OPTIONAL: * get the version numbers in numerical form. */ typedef struct { /* generic LAME version */ int major; int minor; int alpha; /* 0 if not an alpha version */ int beta; /* 0 if not a beta version */ /* version of the psy model */ int psy_major; int psy_minor; int psy_alpha; /* 0 if not an alpha version */ int psy_beta; /* 0 if not a beta version */ /* compile time features */ const char *features; /* Don't make assumptions about the contents! */ } lame_version_t; void CDECL get_lame_version_numerical(lame_version_t *); /* * OPTIONAL: * print internal lame configuration to message handler */ void CDECL lame_print_config(const lame_global_flags* gfp); void CDECL lame_print_internals( const lame_global_flags *gfp); /* * input pcm data, output (maybe) mp3 frames. * This routine handles all buffering, resampling and filtering for you. * * return code number of bytes output in mp3buf. Can be 0 * -1: mp3buf was too small * -2: malloc() problem * -3: lame_init_params() not called * -4: psycho acoustic problems * * The required mp3buf_size can be computed from num_samples, * samplerate and encoding rate, but here is a worst case estimate: * * mp3buf_size in bytes = 1.25*num_samples + 7200 * * I think a tighter bound could be: (mt, March 2000) * MPEG1: * num_samples*(bitrate/8)/samplerate + 4*1152*(bitrate/8)/samplerate + 512 * MPEG2: * num_samples*(bitrate/8)/samplerate + 4*576*(bitrate/8)/samplerate + 256 * * but test first if you use that! * * set mp3buf_size = 0 and LAME will not check if mp3buf_size is * large enough. * * NOTE: * if gfp->num_channels=2, but gfp->mode = 3 (mono), the L & R channels * will be averaged into the L channel before encoding only the L channel * This will overwrite the data in buffer_l[] and buffer_r[]. * */ int CDECL lame_encode_buffer ( lame_global_flags* gfp, /* global context handle */ const short int buffer_l [], /* PCM data for left channel */ const short int buffer_r [], /* PCM data for right channel */ const int nsamples, /* number of samples per channel */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* * as above, but input has L & R channel data interleaved. * NOTE: * num_samples = number of samples in the L (or R) * channel, not the total number of samples in pcm[] */ int CDECL lame_encode_buffer_interleaved( lame_global_flags* gfp, /* global context handlei */ short int pcm[], /* PCM data for left and right channel, interleaved */ int num_samples, /* number of samples per channel, _not_ number of samples in pcm[] */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ int mp3buf_size ); /* number of valid octets in this stream */ /* as lame_encode_buffer, but for 'float's. * !! NOTE: !! data must still be scaled to be in the same range as * short int, +/- 32768 */ int CDECL lame_encode_buffer_float( lame_global_flags* gfp, /* global context handle */ const float pcm_l [], /* PCM data for left channel */ const float pcm_r [], /* PCM data for right channel */ const int nsamples, /* number of samples per channel */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* as lame_encode_buffer, but for 'float's. * !! NOTE: !! data must be scaled to +/- 1 full scale */ int CDECL lame_encode_buffer_ieee_float( lame_t gfp, const float pcm_l [], /* PCM data for left channel */ const float pcm_r [], /* PCM data for right channel */ const int nsamples, unsigned char * mp3buf, const int mp3buf_size); int CDECL lame_encode_buffer_interleaved_ieee_float( lame_t gfp, const float pcm[], /* PCM data for left and right channel, interleaved */ const int nsamples, unsigned char * mp3buf, const int mp3buf_size); /* as lame_encode_buffer, but for 'double's. * !! NOTE: !! data must be scaled to +/- 1 full scale */ int CDECL lame_encode_buffer_ieee_double( lame_t gfp, const double pcm_l [], /* PCM data for left channel */ const double pcm_r [], /* PCM data for right channel */ const int nsamples, unsigned char * mp3buf, const int mp3buf_size); int CDECL lame_encode_buffer_interleaved_ieee_double( lame_t gfp, const double pcm[], /* PCM data for left and right channel, interleaved */ const int nsamples, unsigned char * mp3buf, const int mp3buf_size); /* as lame_encode_buffer, but for long's * !! NOTE: !! data must still be scaled to be in the same range as * short int, +/- 32768 * * This scaling was a mistake (doesn't allow one to exploit full * precision of type 'long'. Use lame_encode_buffer_long2() instead. * */ int CDECL lame_encode_buffer_long( lame_global_flags* gfp, /* global context handle */ const long buffer_l [], /* PCM data for left channel */ const long buffer_r [], /* PCM data for right channel */ const int nsamples, /* number of samples per channel */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* Same as lame_encode_buffer_long(), but with correct scaling. * !! NOTE: !! data must still be scaled to be in the same range as * type 'long'. Data should be in the range: +/- 2^(8*size(long)-1) * */ int CDECL lame_encode_buffer_long2( lame_global_flags* gfp, /* global context handle */ const long buffer_l [], /* PCM data for left channel */ const long buffer_r [], /* PCM data for right channel */ const int nsamples, /* number of samples per channel */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* as lame_encode_buffer, but for int's * !! NOTE: !! input should be scaled to the maximum range of 'int' * If int is 4 bytes, then the values should range from * +/- 2147483648. * * This routine does not (and cannot, without loosing precision) use * the same scaling as the rest of the lame_encode_buffer() routines. * */ int CDECL lame_encode_buffer_int( lame_global_flags* gfp, /* global context handle */ const int buffer_l [], /* PCM data for left channel */ const int buffer_r [], /* PCM data for right channel */ const int nsamples, /* number of samples per channel */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* * as above, but for interleaved data. * !! NOTE: !! data must still be scaled to be in the same range as * type 'int32_t'. Data should be in the range: +/- 2^(8*size(int32_t)-1) * NOTE: * num_samples = number of samples in the L (or R) * channel, not the total number of samples in pcm[] */ int lame_encode_buffer_interleaved_int( lame_t gfp, const int pcm [], /* PCM data for left and right channel, interleaved */ const int nsamples, /* number of samples per channel, _not_ number of samples in pcm[] */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ const int mp3buf_size ); /* number of valid octets in this stream */ /* * REQUIRED: * lame_encode_flush will flush the intenal PCM buffers, padding with * 0's to make sure the final frame is complete, and then flush * the internal MP3 buffers, and thus may return a * final few mp3 frames. 'mp3buf' should be at least 7200 bytes long * to hold all possible emitted data. * * will also write id3v1 tags (if any) into the bitstream * * return code = number of bytes output to mp3buf. Can be 0 */ int CDECL lame_encode_flush( lame_global_flags * gfp, /* global context handle */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ int size); /* number of valid octets in this stream */ /* * OPTIONAL: * lame_encode_flush_nogap will flush the internal mp3 buffers and pad * the last frame with ancillary data so it is a complete mp3 frame. * * 'mp3buf' should be at least 7200 bytes long * to hold all possible emitted data. * * After a call to this routine, the outputed mp3 data is complete, but * you may continue to encode new PCM samples and write future mp3 data * to a different file. The two mp3 files will play back with no gaps * if they are concatenated together. * * This routine will NOT write id3v1 tags into the bitstream. * * return code = number of bytes output to mp3buf. Can be 0 */ int CDECL lame_encode_flush_nogap( lame_global_flags * gfp, /* global context handle */ unsigned char* mp3buf, /* pointer to encoded MP3 stream */ int size); /* number of valid octets in this stream */ /* * OPTIONAL: * Normally, this is called by lame_init_params(). It writes id3v2 and * Xing headers into the front of the bitstream, and sets frame counters * and bitrate histogram data to 0. You can also call this after * lame_encode_flush_nogap(). */ int CDECL lame_init_bitstream( lame_global_flags * gfp); /* global context handle */ /* * OPTIONAL: some simple statistics * a bitrate histogram to visualize the distribution of used frame sizes * a stereo mode histogram to visualize the distribution of used stereo * modes, useful in joint-stereo mode only * 0: LR left-right encoded * 1: LR-I left-right and intensity encoded (currently not supported) * 2: MS mid-side encoded * 3: MS-I mid-side and intensity encoded (currently not supported) * * attention: don't call them after lame_encode_finish * suggested: lame_encode_flush -> lame_*_hist -> lame_close */ void CDECL lame_bitrate_hist( const lame_global_flags * gfp, int bitrate_count[14] ); void CDECL lame_bitrate_kbps( const lame_global_flags * gfp, int bitrate_kbps [14] ); void CDECL lame_stereo_mode_hist( const lame_global_flags * gfp, int stereo_mode_count[4] ); void CDECL lame_bitrate_stereo_mode_hist ( const lame_global_flags * gfp, int bitrate_stmode_count[14][4] ); void CDECL lame_block_type_hist ( const lame_global_flags * gfp, int btype_count[6] ); void CDECL lame_bitrate_block_type_hist ( const lame_global_flags * gfp, int bitrate_btype_count[14][6] ); #if (DEPRECATED_OR_OBSOLETE_CODE_REMOVED && 0) #else /* * OPTIONAL: * lame_mp3_tags_fid will rewrite a Xing VBR tag to the mp3 file with file * pointer fid. These calls perform forward and backwards seeks, so make * sure fid is a real file. Make sure lame_encode_flush has been called, * and all mp3 data has been written to the file before calling this * function. * NOTE: * if VBR tags are turned off by the user, or turned off by LAME because * the output is not a regular file, this call does nothing * NOTE: * LAME wants to read from the file to skip an optional ID3v2 tag, so * make sure you opened the file for writing and reading. * NOTE: * You can call lame_get_lametag_frame instead, if you want to insert * the lametag yourself. */ void CDECL lame_mp3_tags_fid(lame_global_flags *, FILE* fid); #endif /* * OPTIONAL: * lame_get_lametag_frame copies the final LAME-tag into 'buffer'. * The function returns the number of bytes copied into buffer, or * the required buffer size, if the provided buffer is too small. * Function failed, if the return value is larger than 'size'! * Make sure lame_encode flush has been called before calling this function. * NOTE: * if VBR tags are turned off by the user, or turned off by LAME, * this call does nothing and returns 0. * NOTE: * LAME inserted an empty frame in the beginning of mp3 audio data, * which you have to replace by the final LAME-tag frame after encoding. * In case there is no ID3v2 tag, usually this frame will be the very first * data in your mp3 file. If you put some other leading data into your * file, you'll have to do some bookkeeping about where to write this buffer. */ size_t CDECL lame_get_lametag_frame( const lame_global_flags *, unsigned char* buffer, size_t size); /* * REQUIRED: * final call to free all remaining buffers */ int CDECL lame_close (lame_global_flags *); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* * OBSOLETE: * lame_encode_finish combines lame_encode_flush() and lame_close() in * one call. However, once this call is made, the statistics routines * will no longer work because the data will have been cleared, and * lame_mp3_tags_fid() cannot be called to add data to the VBR header */ int CDECL lame_encode_finish( lame_global_flags* gfp, unsigned char* mp3buf, int size ); #endif /********************************************************************* * * decoding * * a simple interface to mpglib, part of mpg123, is also included if * libmp3lame is compiled with HAVE_MPGLIB * *********************************************************************/ struct hip_global_struct; typedef struct hip_global_struct hip_global_flags; typedef hip_global_flags *hip_t; typedef struct { int header_parsed; /* 1 if header was parsed and following data was computed */ int stereo; /* number of channels */ int samplerate; /* sample rate */ int bitrate; /* bitrate */ int mode; /* mp3 frame type */ int mode_ext; /* mp3 frame type */ int framesize; /* number of samples per mp3 frame */ /* this data is only computed if mpglib detects a Xing VBR header */ unsigned long nsamp; /* number of samples in mp3 file. */ int totalframes; /* total number of frames in mp3 file */ /* this data is not currently computed by the mpglib routines */ int framenum; /* frames decoded counter */ } mp3data_struct; /* required call to initialize decoder */ hip_t CDECL hip_decode_init(void); /* cleanup call to exit decoder */ int CDECL hip_decode_exit(hip_t gfp); /* HIP reporting functions */ void CDECL hip_set_errorf(hip_t gfp, lame_report_function f); void CDECL hip_set_debugf(hip_t gfp, lame_report_function f); void CDECL hip_set_msgf (hip_t gfp, lame_report_function f); /********************************************************************* * input 1 mp3 frame, output (maybe) pcm data. * * nout = hip_decode(hip, mp3buf,len,pcm_l,pcm_r); * * input: * len : number of bytes of mp3 data in mp3buf * mp3buf[len] : mp3 data to be decoded * * output: * nout: -1 : decoding error * 0 : need more data before we can complete the decode * >0 : returned 'nout' samples worth of data in pcm_l,pcm_r * pcm_l[nout] : left channel data * pcm_r[nout] : right channel data * *********************************************************************/ int CDECL hip_decode( hip_t gfp , unsigned char * mp3buf , size_t len , short pcm_l[] , short pcm_r[] ); /* same as hip_decode, and also returns mp3 header data */ int CDECL hip_decode_headers( hip_t gfp , unsigned char* mp3buf , size_t len , short pcm_l[] , short pcm_r[] , mp3data_struct* mp3data ); /* same as hip_decode, but returns at most one frame */ int CDECL hip_decode1( hip_t gfp , unsigned char* mp3buf , size_t len , short pcm_l[] , short pcm_r[] ); /* same as hip_decode1, but returns at most one frame and mp3 header data */ int CDECL hip_decode1_headers( hip_t gfp , unsigned char* mp3buf , size_t len , short pcm_l[] , short pcm_r[] , mp3data_struct* mp3data ); /* same as hip_decode1_headers, but also returns enc_delay and enc_padding from VBR Info tag, (-1 if no info tag was found) */ int CDECL hip_decode1_headersB( hip_t gfp , unsigned char* mp3buf , size_t len , short pcm_l[] , short pcm_r[] , mp3data_struct* mp3data , int *enc_delay , int *enc_padding ); /* OBSOLETE: * lame_decode... functions are there to keep old code working * but it is strongly recommended to replace calls by hip_decode... * function calls, see above. */ #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else int CDECL lame_decode_init(void); int CDECL lame_decode( unsigned char * mp3buf, int len, short pcm_l[], short pcm_r[] ); int CDECL lame_decode_headers( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data ); int CDECL lame_decode1( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[] ); int CDECL lame_decode1_headers( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data ); int CDECL lame_decode1_headersB( unsigned char* mp3buf, int len, short pcm_l[], short pcm_r[], mp3data_struct* mp3data, int *enc_delay, int *enc_padding ); int CDECL lame_decode_exit(void); #endif /* obsolete lame_decode API calls */ /********************************************************************* * * id3tag stuff * *********************************************************************/ /* * id3tag.h -- Interface to write ID3 version 1 and 2 tags. * * Copyright (C) 2000 Don Melton. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ /* utility to obtain alphabetically sorted list of genre names with numbers */ void CDECL id3tag_genre_list( void (*handler)(int, const char *, void *), void* cookie); void CDECL id3tag_init (lame_t gfp); /* force addition of version 2 tag */ void CDECL id3tag_add_v2 (lame_t gfp); /* add only a version 1 tag */ void CDECL id3tag_v1_only (lame_t gfp); /* add only a version 2 tag */ void CDECL id3tag_v2_only (lame_t gfp); /* pad version 1 tag with spaces instead of nulls */ void CDECL id3tag_space_v1 (lame_t gfp); /* pad version 2 tag with extra 128 bytes */ void CDECL id3tag_pad_v2 (lame_t gfp); /* pad version 2 tag with extra n bytes */ void CDECL id3tag_set_pad (lame_t gfp, size_t n); void CDECL id3tag_set_title(lame_t gfp, const char* title); void CDECL id3tag_set_artist(lame_t gfp, const char* artist); void CDECL id3tag_set_album(lame_t gfp, const char* album); void CDECL id3tag_set_year(lame_t gfp, const char* year); void CDECL id3tag_set_comment(lame_t gfp, const char* comment); /* return -1 result if track number is out of ID3v1 range and ignored for ID3v1 */ int CDECL id3tag_set_track(lame_t gfp, const char* track); /* return non-zero result if genre name or number is invalid result 0: OK result -1: genre number out of range result -2: no valid ID3v1 genre name, mapped to ID3v1 'Other' but taken as-is for ID3v2 genre tag */ int CDECL id3tag_set_genre(lame_t gfp, const char* genre); /* return non-zero result if field name is invalid */ int CDECL id3tag_set_fieldvalue(lame_t gfp, const char* fieldvalue); /* return non-zero result if image type is invalid */ int CDECL id3tag_set_albumart(lame_t gfp, const char* image, size_t size); /* lame_get_id3v1_tag copies ID3v1 tag into buffer. * Function returns number of bytes copied into buffer, or number * of bytes rquired if buffer 'size' is too small. * Function fails, if returned value is larger than 'size'. * NOTE: * This functions does nothing, if user/LAME disabled ID3v1 tag. */ size_t CDECL lame_get_id3v1_tag(lame_t gfp, unsigned char* buffer, size_t size); /* lame_get_id3v2_tag copies ID3v2 tag into buffer. * Function returns number of bytes copied into buffer, or number * of bytes rquired if buffer 'size' is too small. * Function fails, if returned value is larger than 'size'. * NOTE: * This functions does nothing, if user/LAME disabled ID3v2 tag. */ size_t CDECL lame_get_id3v2_tag(lame_t gfp, unsigned char* buffer, size_t size); /* normaly lame_init_param writes ID3v2 tags into the audio stream * Call lame_set_write_id3tag_automatic(gfp, 0) before lame_init_param * to turn off this behaviour and get ID3v2 tag with above function * write it yourself into your file. */ void CDECL lame_set_write_id3tag_automatic(lame_global_flags * gfp, int); int CDECL lame_get_write_id3tag_automatic(lame_global_flags const* gfp); /* experimental */ int CDECL id3tag_set_textinfo_latin1(lame_t gfp, char const *id, char const *text); /* experimental */ int CDECL id3tag_set_comment_latin1(lame_t gfp, char const *lang, char const *desc, char const *text); #if DEPRECATED_OR_OBSOLETE_CODE_REMOVED #else /* experimental */ int CDECL id3tag_set_textinfo_ucs2(lame_t gfp, char const *id, unsigned short const *text); /* experimental */ int CDECL id3tag_set_comment_ucs2(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text); /* experimental */ int CDECL id3tag_set_fieldvalue_ucs2(lame_t gfp, const unsigned short *fieldvalue); #endif /* experimental */ int CDECL id3tag_set_fieldvalue_utf16(lame_t gfp, const unsigned short *fieldvalue); /* experimental */ int CDECL id3tag_set_textinfo_utf16(lame_t gfp, char const *id, unsigned short const *text); /* experimental */ int CDECL id3tag_set_comment_utf16(lame_t gfp, char const *lang, unsigned short const *desc, unsigned short const *text); /*********************************************************************** * * list of valid bitrates [kbps] & sample frequencies [Hz]. * first index: 0: MPEG-2 values (sample frequencies 16...24 kHz) * 1: MPEG-1 values (sample frequencies 32...48 kHz) * 2: MPEG-2.5 values (sample frequencies 8...12 kHz) ***********************************************************************/ extern const int bitrate_table [3][16]; extern const int samplerate_table [3][ 4]; /* access functions for use in DLL, global vars are not exported */ int CDECL lame_get_bitrate(int mpeg_version, int table_index); int CDECL lame_get_samplerate(int mpeg_version, int table_index); /* maximum size of albumart image (128KB), which affects LAME_MAXMP3BUFFER as well since lame_encode_buffer() also returns ID3v2 tag data */ #define LAME_MAXALBUMART (128 * 1024) /* maximum size of mp3buffer needed if you encode at most 1152 samples for each call to lame_encode_buffer. see lame_encode_buffer() below (LAME_MAXMP3BUFFER is now obsolete) */ #define LAME_MAXMP3BUFFER (16384 + LAME_MAXALBUMART) typedef enum { LAME_OKAY = 0, LAME_NOERROR = 0, LAME_GENERICERROR = -1, LAME_NOMEM = -10, LAME_BADBITRATE = -11, LAME_BADSAMPFREQ = -12, LAME_INTERNALERROR = -13, FRONTEND_READERROR = -80, FRONTEND_WRITEERROR = -81, FRONTEND_FILETOOLARGE = -82 } lame_errorcodes_t; #if defined(__cplusplus) } #endif #endif /* LAME_LAME_H */ ���������������������������������������������������������������������������������������������������������������������������lame-3.100/include/Makefile.in����������������������������������������������������������������������000644 �001751 �001751 �00000041732 13170220146 017556� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign pkginclude_HEADERS = lame.h EXTRA_DIST = lame.def libmp3lame.sym all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgincludeHEADERS install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������lame-3.100/ACM/ACMStream.h��������������������������������������������������������������������������000644 �001751 �001751 �00000004545 10544042236 016420� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: ACMStream.h,v 1.5 2006/12/25 21:37:34 robert Exp $ */ #if !defined(_ACMSTREAM_H__INCLUDED_) #define _ACMSTREAM_H__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include <mmreg.h> #include <msacm.h> #include <msacmdrv.h> #include "ADbg/ADbg.h" #include "AEncodeProperties.h" typedef enum vbr_mode_e vbr_mode; typedef struct lame_global_struct lame_global_flags; class ACMStream { public: ACMStream( ); virtual ~ACMStream( ); static ACMStream * Create(); static const bool Erase(const ACMStream * a_ACMStream); bool init(const int nSamplesPerSec, const int nOutputSamplesPerSec, const int nChannels, const int nAvgBytesPerSec, const vbr_mode mode); bool open(const AEncodeProperties & the_Properties); bool close(LPBYTE pOutputBuffer, DWORD *pOutputSize); DWORD GetOutputSizeForInput(const DWORD the_SrcLength) const; bool ConvertBuffer(LPACMDRVSTREAMHEADER a_StreamHeader); static unsigned int GetOutputSampleRate(int samples_per_sec, int bitrate, int channels); protected: lame_global_flags * gfp; ADbg * my_debug; int my_SamplesPerSec; int my_Channels; int my_AvgBytesPerSec; int my_OutBytesPerSec; vbr_mode my_VBRMode; DWORD my_SamplesPerBlock; unsigned int m_WorkingBufferUseSize; char m_WorkingBuffer[2304*2]; // should be at least twice my_SamplesPerBlock inline int GetBytesPerBlock(DWORD bytes_per_sec, DWORD samples_per_sec, int BlockAlign) const; }; #endif // !defined(_ACMSTREAM_H__INCLUDED_) �����������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/lameACM.def��������������������������������������������������������������������������000644 �001751 �001751 �00000001700 07423340476 016411� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows ; ; Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> ; ; 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA LIBRARY lameACM DESCRIPTION 'lameACM.acm: MP3 Lame ACM Codec' EXPORTS DriverProc ; EOF ����������������������������������������������������������������lame-3.100/ACM/DecodeStream.h�����������������������������������������������������������������������000644 �001751 �001751 �00000004342 10544042236 017176� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: DecodeStream.h,v 1.2 2006/12/25 21:37:34 robert Exp $ */ #if !defined(_DECODESTREAM_H__INCLUDED_) #define _DECODESTREAM_H__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include <mmreg.h> #include <msacm.h> #include <msacmdrv.h> #include "ADbg/ADbg.h" struct lame_global_flags; class DecodeStream { public: DecodeStream( ); virtual ~DecodeStream( ); static DecodeStream * Create(); static const bool Erase(const DecodeStream * a_ACMStream); bool init(const int nSamplesPerSec, const int nChannels, const int nAvgBytesPerSec, const int nSourceBitrate); bool open(); bool close(LPBYTE pOutputBuffer, DWORD *pOutputSize); DWORD GetOutputSizeForInput(const DWORD the_SrcLength) const; bool ConvertBuffer(LPACMDRVSTREAMHEADER a_StreamHeader); static unsigned int GetOutputSampleRate(int samples_per_sec, int bitrate, int channels); protected: lame_global_flags * gfp; ADbg * my_debug; int my_SamplesPerSec; int my_Channels; int my_AvgBytesPerSec; DWORD my_SamplesPerBlock; int my_SourceBitrate; MPSTR my_DecodeData; unsigned int m_WorkingBufferUseSize; char m_WorkingBuffer[2304*2]; // should be at least twice my_SamplesPerBlock inline int GetBytesPerBlock(DWORD bytes_per_sec, DWORD samples_per_sec, int BlockAlign) const; }; #endif // !defined(_DECODESTREAM_H__INCLUDED_) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/TODO���������������������������������������������������������������������������������000644 �001751 �001751 �00000000577 10001515602 015152� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������- known bug : when recording, converting, and recording a lame_close() call fail - allow decompression the same way as in the command-line - allow VBR mode - allow channel resampling (mono to stereo / stereo to mono) - allow internal resampling (difference in the format suggestion) - use global pointers for string - use the bitrate/freq tables from LAME / add the decoding engine ���������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/main.cpp�����������������������������������������������������������������������������000644 �001751 �001751 �00000011231 10544042236 016111� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: main.cpp,v 1.5 2006/12/25 21:37:34 robert Exp $ */ #if !defined(STRICT) #define STRICT #endif // STRICT #include <windows.h> /// The ACM is considered as a driver and run in Kernel-Mode /// So the new/delete operators have to be overriden in order to use memory /// readable out of the calling process void * operator new( unsigned int cb ) { return LocalAlloc(LPTR, cb); // VirtualAlloc } void operator delete(void *block) { LocalFree(block); } extern "C" { void *acm_Calloc( size_t num, size_t size ) { return LocalAlloc(LPTR, num * size); // VirtualAlloc } void *acm_Malloc( size_t size ) { return LocalAlloc(LPTR, size); // VirtualAlloc } void acm_Free( void * mem) { LocalFree(mem); } }; ////// End of memory instrumentation #include <mmreg.h> #include <msacm.h> #include <msacmdrv.h> #include <assert.h> #include "AEncodeProperties.h" #include "ACM.h" #include "resource.h" #include "adebug.h" ADbg * debug = NULL; LONG WINAPI DriverProc(DWORD dwDriverId, HDRVR hdrvr, UINT msg, LONG lParam1, LONG lParam2) { switch (msg) { case DRV_OPEN: // acmDriverOpen { if (debug == NULL) { debug = new ADbg(DEBUG_LEVEL_CREATION); debug->setPrefix("LAMEdrv"); } if (debug != NULL) { // Sent when the driver is opened. if (lParam2 != NULL) debug->OutPut(DEBUG_LEVEL_MSG, "DRV_OPEN (ID 0x%08X), pDesc = 0x%08X",dwDriverId,lParam2); else debug->OutPut(DEBUG_LEVEL_MSG, "DRV_OPEN (ID 0x%08X), pDesc = NULL",dwDriverId); } if (lParam2 != NULL) { LPACMDRVOPENDESC pDesc = (LPACMDRVOPENDESC)lParam2; if (pDesc->fccType != ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC) { if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "wrong pDesc->fccType (0x%08X)",pDesc->fccType); } return NULL; } } else { if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "pDesc == NULL"); } } ACM * ThisACM = new ACM(GetDriverModuleHandle(hdrvr)); if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "OPENED instance 0x%08X",ThisACM); } return (LONG)ThisACM;// returns 0L to fail // value subsequently used // for dwDriverId. } break; case DRV_CLOSE: // acmDriverClose { if (debug != NULL) { // Sent when the driver is closed. Drivers are // unloaded when the open count reaches zero. debug->OutPut(DEBUG_LEVEL_MSG, "DRV_CLOSE"); } ACM * ThisACM = (ACM *)dwDriverId; delete ThisACM; if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "CLOSED instance 0x%08X",ThisACM); delete debug; debug = NULL; } return 1L; // returns 0L to fail } break; case DRV_LOAD: { // nothing to do if (debug != NULL) { // debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, version %s %s %s", ACM_VERSION, __DATE__, __TIME__); debug->OutPut(DEBUG_LEVEL_MSG, "DRV_LOAD, %s %s", __DATE__, __TIME__); } return 1L; } break; case DRV_ENABLE: { // nothing to do if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_MSG, "DRV_ENABLE"); } return 1L; } break; case DRV_DISABLE: { // nothing to do if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_MSG, "DRV_DISABLE"); } return 1L; } break; case DRV_FREE: { if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_MSG, "DRV_FREE"); } return 1L; } break; default: { ACM * ThisACM = (ACM *)dwDriverId; if (ThisACM != NULL) return ThisACM->DriverProcedure(hdrvr, msg, lParam1, lParam2); else { if (debug != NULL) { debug->OutPut(DEBUG_LEVEL_MSG, "Driver not opened, unknown message (0x%08X), lParam1 = 0x%08X, lParam2 = 0x%08X", msg, lParam1, lParam2); } return DefDriverProc (dwDriverId, hdrvr, msg, lParam1, lParam2); } } break; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/�����������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 016166� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/lame.ico�����������������������������������������������������������������������������000644 �001751 �001751 �00000001576 13144574734 016122� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������h�����(������ ���������@��������������ûþüûþüûþüûþüûþüûþüûþüÖöìÖöìÖöìÖöìÖöìÖöìÖöìÖöìÖöìûþüïüôûþüûþüÖöìãÄ_Ü´TÚ¬TÚ¬TÚ¬TÚ¬TÚ¬TÚ¬TÚ¬HÖ©lÞ´ûþüûþüïüôãÄ<Õ¤<Õ¤HÖ©HÖ©HÖ©HÖ©HÖ©HÖ©HÖ©LÚ¬<Õ¤_Ü´ïüôûþüãÄ<Õ¤TÚ¬TÚ¬HÖ©LÚ¬LÚ¬LÚ¬LÚ¬LÚ¬LÚ¬HÖ©HÖ©_Ü´ûþü£êÓ<Õ¤TÚ¬HÖ©HÖ©HÖ©TÚ¬HÖ©TÚ¬HÖ©TÚ¬HÖ©TÚ¬HÖ©_Ü´ïüô_Ü´HÖ©HÖ©HÖ©TÚ¬HÖ©HÖ©HÖ©<Õ¤<Õ¤<Õ¤<Õ¤<Õ¤<Õ¤TÚ¬£êÓTÚ¬HÖ©LÚ¬LÚ¬HÖ©HÖ©sà¼æÌ£êÓ£êÓ£êÓ£êÓ£êÓ£êÓ²îÜsà¼LÚ¬HÖ©HÖ©HÖ©HÖ©sà¼ûþüûþüûþü²îÜsà¼ãÄãÄãÄãÄ_Ü´TÚ¬HÖ©TÚ¬LÚ¬<Õ¤²îÜûþüïüôûþü¿òß<Õ¤<Õ¤<Õ¤<Õ¤<Õ¤sà¼LÚ¬HÖ©HÖ©TÚ¬<Õ¤ãÄûþüûþüûþüæÌ<Õ¤TÚ¬TÚ¬HÖ©TÚ¬£êÓTÚ¬HÖ©LÚ¬HÖ©HÖ©HÖ©ãÄ¿òßæÌHÖ©HÖ©HÖ©HÖ©HÖ©_Ü´ûþü_Ü´HÖ©HÖ©TÚ¬HÖ©TÚ¬<Õ¤<Õ¤<Õ¤HÖ©TÚ¬HÖ©TÚ¬<Õ¤sà¼ûþü²îÜ<Õ¤TÚ¬HÖ©LÚ¬HÖ©TÚ¬HÖ©_Ü´HÖ©HÖ©TÚ¬HÖ©<Õ¤²îÜûþüûþüãÄ<Õ¤HÖ©TÚ¬LÚ¬HÖ©LÚ¬HÖ©HÖ©TÚ¬HÖ©<Õ¤æÌûþüûþüûþüûþüæÌ<Õ¤HÖ©HÖ©HÖ©HÖ©HÖ©LÚ¬HÖ©<Õ¤æÌûþüûþüûþüïüôïüôûþü¿òßsà¼_Ü´_Ü´TÚ¬TÚ¬_Ü´s༿òßûþüûþüûþü��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ADbg/��������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 015257� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/adebug.h�����������������������������������������������������������������������������000644 �001751 �001751 �00000002344 07423340476 016077� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: adebug.h,v 1.2 2002/01/22 19:45:02 robux4 Exp $ */ #if !defined(_DEBUG_H__INCLUDED_) #define _DEBUG_H__INCLUDED_ #define DEBUG_LEVEL_CREATION 0 #define DEBUG_LEVEL_MSG 0 #define DEBUG_LEVEL_FUNC_START 1 #define DEBUG_LEVEL_FUNC_DEBUG 2 #define DEBUG_LEVEL_FUNC_CODE 3 #endif /* !defined(_DEBUG_H__INCLUDED_) */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/DecodeStream.cpp���������������������������������������������������������������������000644 �001751 �001751 �00000013714 07424315456 017546� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: DecodeStream.cpp,v 1.3 2002/01/25 17:51:42 robux4 Exp $ */ #if !defined(STRICT) #define STRICT #endif // STRICT #include <assert.h> #include <windows.h> #ifdef ENABLE_DECODING #include "adebug.h" #include "DecodeStream.h" // static methods DecodeStream * DecodeStream::Create() { DecodeStream * Result; Result = new DecodeStream; return Result; } const bool DecodeStream::Erase(const DecodeStream * a_ACMStream) { delete a_ACMStream; return true; } // class methods DecodeStream::DecodeStream() : m_WorkingBufferUseSize(0), gfp(NULL) { /// \todo get the debug level from the registry my_debug = new ADbg(DEBUG_LEVEL_CREATION); if (my_debug != NULL) { unsigned char DebugFileName[512]; my_debug->setPrefix("MPG123stream"); /// \todo get it from the registry my_debug->setIncludeTime(true); /// \todo get it from the registry // Check in the registry if we have to Output Debug information DebugFileName[0] = '\0'; HKEY OssKey; if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\MUKOLI", 0, KEY_READ , &OssKey ) == ERROR_SUCCESS) { DWORD DataType; DWORD DebugFileNameSize = 512; if (RegQueryValueEx( OssKey, "DebugFile", NULL, &DataType, DebugFileName, &DebugFileNameSize ) == ERROR_SUCCESS) { if (DataType == REG_SZ) { my_debug->setUseFile(true); my_debug->setDebugFile((char *)DebugFileName); my_debug->OutPut("Debug file is %s",(char *)DebugFileName); } } } my_debug->OutPut(DEBUG_LEVEL_FUNC_START, "DecodeStream Creation (0X%08X)",this); } else { ADbg debug; debug.OutPut("DecodeStream::ACMACMStream : Impossible to create my_debug"); } } DecodeStream::~DecodeStream() { // lame_close( gfp ); if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_START, "DecodeStream Deletion (0X%08X)",this); delete my_debug; } } bool DecodeStream::init(const int nSamplesPerSec, const int nChannels, const int nAvgBytesPerSec, const int nSourceBitrate) { bool bResult = false; my_SamplesPerSec = nSamplesPerSec; my_Channels = nChannels; my_AvgBytesPerSec = nAvgBytesPerSec; my_SourceBitrate = nSourceBitrate; bResult = true; return bResult; } bool DecodeStream::open() { bool bResult = false; bResult = bool(InitMP3(&my_DecodeData) != 0); return bResult; } bool DecodeStream::close(LPBYTE pOutputBuffer, DWORD *pOutputSize) { bool bResult = false; /* int nOutputSamples = 0; nOutputSamples = lame_encode_flush( gfp, pOutputBuffer, 0 ); if ( nOutputSamples < 0 ) { // BUFFER_TOO_SMALL *pOutputSize = 0; } else { *pOutputSize = nOutputSamples; bResult = true; } /* // lame will be close in VbrWriteTag function if ( !lame_get_bWriteVbrTag( gfp ) ) { // clean up of allocated memory lame_close( gfp ); } */ ExitMP3(&my_DecodeData); bResult = true; return bResult; } DWORD DecodeStream::GetOutputSizeForInput(const DWORD the_SrcLength) const { DWORD Result; double OutputInputRatio = double(my_SamplesPerSec * 2 * my_Channels) / double(my_SourceBitrate); OutputInputRatio *= 1.15; // allow 15% more Result = DWORD(double(the_SrcLength) * OutputInputRatio); my_debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "Result = %d (OutputInputRatio = %f)",Result,OutputInputRatio); return Result; } bool DecodeStream::ConvertBuffer(LPACMDRVSTREAMHEADER a_StreamHeader) { bool result = false; if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "enter DecodeStream::ConvertBuffer"); } int ProcessedBytes; int ret = decodeMP3(&my_DecodeData, a_StreamHeader->pbSrc, a_StreamHeader->cbSrcLength, (char *)a_StreamHeader->pbDst, a_StreamHeader->cbDstLength, &ProcessedBytes); switch (ret) { case MP3_OK: a_StreamHeader->cbSrcLengthUsed = a_StreamHeader->cbSrcLength; a_StreamHeader->cbDstLengthUsed = ProcessedBytes; result = true; break; case MP3_NEED_MORE: a_StreamHeader->cbSrcLengthUsed = 0; a_StreamHeader->cbDstLengthUsed = 0; break; case MP3_ERR: break; } /* DWORD InSize = a_StreamHeader->cbSrcLength / 2, OutSize = a_StreamHeader->cbDstLength; // 2 for 8<->16 bits // Encode it int dwSamples; int nOutputSamples = 0; dwSamples = InSize / lame_get_num_channels( gfp ); if ( 1 == lame_get_num_channels( gfp ) ) { nOutputSamples = lame_encode_buffer(gfp,(PSHORT)a_StreamHeader->pbSrc,(PSHORT)a_StreamHeader->pbSrc,dwSamples,a_StreamHeader->pbDst,a_StreamHeader->cbDstLength); } else { nOutputSamples = lame_encode_buffer_interleaved(gfp,(PSHORT)a_StreamHeader->pbSrc,dwSamples,a_StreamHeader->pbDst,a_StreamHeader->cbDstLength); } a_StreamHeader->cbSrcLengthUsed = a_StreamHeader->cbSrcLength; a_StreamHeader->cbDstLengthUsed = nOutputSamples; result = a_StreamHeader->cbDstLengthUsed <= a_StreamHeader->cbDstLength; */ my_debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "UsedSize = %d / EncodedSize = %d, result = %d, ret = %s", a_StreamHeader->cbSrcLengthUsed, a_StreamHeader->cbDstLengthUsed, result, (ret == MP3_OK)?"MP3_OK":(ret == MP3_NEED_MORE)?"MP3_NEED_MORE":"error"); if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "DecodeStream::ConvertBuffer result = %d",result); } return result; } #endif // ENABLE_DECODING ����������������������������������������������������lame-3.100/ACM/AEncodeProperties.h������������������������������������������������������������������000644 �001751 �001751 �00000032551 07454045067 020230� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: AEncodeProperties.h,v 1.5 2002/04/07 13:31:35 robux4 Exp $ */ #if !defined(_AENCODEPROPERTIES_H__INCLUDED_) #define _AENCODEPROPERTIES_H__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <windows.h> #include <string> #include "ADbg/ADbg.h" //#include "BladeMP3EncDLL.h" #include "tinyxml/tinyxml.h" //#include "AParameters/AParameters.h" typedef const struct { UINT id; const char *tip; } ToolTipItem; /** \class AEncodeProperties \brief the AEncodeProperties class is responsible for handling all the encoding properties */ class AEncodeProperties { public: /** \brief default constructor \param the windows module with which you can retrieve many informations */ AEncodeProperties(HMODULE hModule); /** \brief default destructor */ virtual ~AEncodeProperties() {} /** \enum BRMode \brief A bitrate mode (CBR, VBR, ABR) */ enum BRMode { BR_CBR, BR_VBR, BR_ABR }; /** \brief Handle all the commands that occur in the Config dialog box */ bool HandleDialogCommand(const HWND parentWnd, const WPARAM wParam, const LPARAM lParam); /** \brief check wether 2 instances are equal, ie have the same encoding parameters */ bool operator != (const AEncodeProperties & the_instance) const; /** \brief Check wether the Encode process should use the Copyright bit */ inline const bool GetCopyrightMode() const { return bCopyright; } /** \brief Check wether the Encode process should use the CRC bit */ inline const bool GetCRCMode() const { return bCRC; } /** \brief Check wether the Encode process should use the Original bit */ inline const bool GetOriginalMode() const { return bOriginal; } /** \brief Check wether the Encode process should use the Private bit */ inline const bool GetPrivateMode() const { return bPrivate; } /** \brief Check wether the Encode process should use the Smart Bitrate output */ inline const bool GetSmartOutputMode() const { return bSmartOutput; } /** \brief Check wether the Encode process should allow Average Bitrate output */ inline const bool GetAbrOutputMode() const { return bAbrOutput; } /** \brief Check wether the Encode process shouldn't use the Bit Reservoir */ inline const bool GetNoBiResMode() const { return bNoBitRes; } /** \brief Check wether the Encode process should force the channel mode (stereo or mono resampling) */ inline const bool GetForceChannelMode() const { return bForceChannel; } /** \brief Check wether the Encode process should use the VBR mode */ inline const BRMode GetVBRUseMode() const { return mBRmode; } /** \brief Check wether the Encode process should use the Xing frame in the VBR mode \note the Xing frame is a silent frame at the beginning that contain VBR statistics about the file. */ inline const bool GetXingFrameMode() const { return bXingFrame; } /** \brief Check wether the Encode process should resample before encoding */ inline const bool GetResampleMode() const { return bResample; } /** \brief Set wether the Encode process should use the Copyright bit */ inline void SetCopyrightMode(const bool bMode) { bCopyright = bMode; } /** \brief Set wether the Encode process should use the CRC bit */ inline void SetCRCMode(const bool bMode) { bCRC = bMode; } /** \brief Set wether the Encode process should use the Original bit */ inline void SetOriginalMode(const bool bMode) { bOriginal = bMode; } /** \brief Set wether the Encode process should use the Private bit */ inline void SetPrivateMode(const bool bMode) { bPrivate = bMode; } /** \brief Set wether the Encode process should use the Smart Bitrate output */ inline void SetSmartOutputMode(const bool bMode) { bSmartOutput = bMode; } /** \brief Set wether the Encode process should use the Average Bitrate output */ inline void SetAbrOutputMode(const bool bMode) { bAbrOutput = bMode; } /** \brief Set wether the Encode process shouldn't use the Bit Reservoir */ inline void SetNoBiResMode(const bool bMode) { bNoBitRes = bMode; } /** \brief Set wether the Encode process should force the channel mode (stereo or mono resampling) */ inline void SetForceChannelMode(const bool bMode) { bForceChannel = bMode; } /** \brief Set wether the Encode process should use the VBR mode */ inline void SetVBRUseMode(const BRMode mode) { mBRmode = mode; } /** \brief Set wether the Encode process should use the Xing frame in the VBR mode \note the Xing frame is a silent frame at the beginning that contain VBR statistics about the file. */ inline void SetXingFrameMode(const bool bMode) { bXingFrame = bMode; } /** \brief CBR : Get the bitrate to use / VBR : Get the minimum bitrate value */ const unsigned int GetBitrateValue() const; /** \brief Get the current (VBR:min) bitrate for the specified MPEG version \param bitrate the data that will be filled with the bitrate \param MPEG_Version The MPEG version (MPEG1 or MPEG2) \return 0 if the bitrate is not found, 1 if the bitrate is found */ const int GetBitrateValue(DWORD & bitrate, const DWORD MPEG_Version) const; /** \brief Get the current (VBR:min) bitrate for MPEG I \param bitrate the data that will be filled with the bitrate \return 0 if the bitrate is not found, 1 if the bitrate is found */ const int GetBitrateValueMPEG1(DWORD & bitrate) const; /** \brief Get the current (VBR:min) bitrate for MPEG II \param bitrate the data that will be filled with the bitrate \return 0 if the bitrate is not found, 1 if the bitrate is found */ const int GetBitrateValueMPEG2(DWORD & bitrate) const; /** \brief Get the current (VBR:min) bitrate in the form of a string \param string the string that will be filled \param string_size the size of the string \return -1 if the bitrate is not found, and the number of char copied otherwise */ inline const int GetBitrateString(char * string, int string_size) const {return GetBitrateString(string,string_size,nMinBitrateIndex); } /** \brief Get the (VBR:min) bitrate corresponding to the specified index in the form of a string \param string the string that will be filled \param string_size the size of the string \param a_bitrateID the index in the Bitrate table \return -1 if the bitrate is not found, and the number of char copied otherwise */ const int GetBitrateString(char * string, int string_size, int a_bitrateID) const; /** \brief Get the number of possible bitrates */ inline const int GetBitrateLentgh() const { return sizeof(the_Bitrates) / sizeof(unsigned int); } /** \brief Get the number of possible sampling frequencies */ inline const unsigned int GetResampleFreq() const { return the_SamplingFreqs[nSamplingFreqIndex]; } /** \brief Get the max compression ratio allowed (1:15 default) */ inline double GetSmartRatio() const { return SmartRatioMax;} /** \brief Get the min ABR bitrate possible */ inline unsigned int GetAbrBitrateMin() const { return AverageBitrate_Min;} /** \brief Get the max ABR bitrate possible */ inline unsigned int GetAbrBitrateMax() const { return AverageBitrate_Max;} /** \brief Get the step between ABR bitrates */ inline unsigned int GetAbrBitrateStep() const { return AverageBitrate_Step;} /** \brief Get the VBR attributes for a specified MPEG version \param MaxBitrate receive the maximum bitrate possible in the VBR mode \param Quality receive the quality value (0 to 9 see Lame doc for more info) \param VBRHeader receive the value that indicates wether the VBR/Xing header should be filled \param MPEG_Version The MPEG version (MPEG1 or MPEG2) \return the VBR mode (Old, New, ABR, MTRH, Default or None) */ // VBRMETHOD GetVBRValue(DWORD & MaxBitrate, int & Quality, DWORD & AbrBitrate, BOOL & VBRHeader, const DWORD MPEG_Version) const; /** \brief Get the Lame DLL Location */ // const char * GetDllLocation() const { return DllLocation.c_str(); } /** \brief Set the Lame DLL Location */ // void SetDllLocation( const char * the_string ) { DllLocation = the_string; } /** \brief Get the output directory for encoding */ // const char * GetOutputDirectory() const { return OutputDir.c_str(); } /** \brief Set the output directory for encoding */ // void SetOutputDirectory( const char * the_string ) { OutputDir = the_string; } /** \brief Get the current channel mode to use */ const unsigned int GetChannelModeValue() const; /** \brief Get the current channel mode in the form of a string */ inline const char * GetChannelModeString() const {return GetChannelModeString(nChannelIndex); } /** \brief Get the channel mode in the form of a string for the specified Channel mode index \param a_channelID the Channel mode index (see GetChannelLentgh()) */ const char * GetChannelModeString(const int a_channelID) const; /** \brief Get the number of possible channel mode */ inline const int GetChannelLentgh() const { return 3; } /** \brief Get the current preset to use, see lame documentation/code for more info on the possible presets */ // const LAME_QUALTIY_PRESET GetPresetModeValue() const; /** \brief Get the preset in the form of a string for the specified Channel mode index \param a_presetID the preset index (see GetPresetLentgh()) */ const char * GetPresetModeString(const int a_presetID) const; /** \brief Get the number of possible presets */ // inline const int GetPresetLentgh() const { return sizeof(the_Presets) / sizeof(LAME_QUALTIY_PRESET); } /** \brief Start the user configuration process (called by AOut::config()) */ bool Config(const HINSTANCE hInstance, const HWND HwndParent); /** \brief Init the config dialog box with the right texts and choices */ bool InitConfigDlg(HWND hDialog); /** \brief Update the instance parameters from the config dialog box */ bool UpdateValueFromDlg(HWND hDialog); /** \brief Update the config dialog box from the instance parameters */ bool UpdateDlgFromValue(HWND hDialog); /** \brief Update the config dialog box with the BitRate mode */ static void DisplayVbrOptions(const HWND hDialog, const BRMode the_mode); /** \brief Handle the saving of parameters when something has changed in the config dialog box */ void SaveParams(const HWND hDialog); /** \brief Save the current parameters (current config in use) */ void ParamsSave(void); /** \brief Load the parameters (current config in use) */ void ParamsRestore(void); /** \brief Select the specified config name as the new default one */ void SelectSavedParams(const std::string config_name); /** \brief Save the current parameters to the specified config name */ void SaveValuesToStringKey(const std::string & config_name); /** \brief Rename the current config name to something else */ bool RenameCurrentTo(const std::string & new_config_name); /** \brief Delete the config name from the saved configs */ bool DeleteConfig(const std::string & config_name); ADbg my_debug; /** \brief Update the slides value (on scroll) */ void UpdateDlgFromSlides(HWND parent_window) const; static ToolTipItem Tooltips[13]; private: bool bCopyright; bool bCRC; bool bOriginal; bool bPrivate; bool bNoBitRes; BRMode mBRmode; bool bXingFrame; bool bForceChannel; bool bResample; bool bSmartOutput; bool bAbrOutput; int VbrQuality; unsigned int AverageBitrate_Min; unsigned int AverageBitrate_Max; unsigned int AverageBitrate_Step; double SmartRatioMax; static const unsigned int the_ChannelModes[3]; int nChannelIndex; static const unsigned int the_Bitrates[18]; static const unsigned int the_MPEG1_Bitrates[14]; static const unsigned int the_MPEG2_Bitrates[14]; int nMinBitrateIndex; // CBR and VBR int nMaxBitrateIndex; // only used in VBR mode static const unsigned int the_SamplingFreqs[9]; int nSamplingFreqIndex; // static const LAME_QUALTIY_PRESET the_Presets[17]; int nPresetIndex; // char DllLocation[512]; // std::string DllLocation; // char OutputDir[MAX_PATH]; // std::string OutputDir; // AParameters my_base_parameters; TiXmlDocument my_stored_data; std::string my_store_location; std::string my_current_config; // HINSTANCE hDllInstance; void SaveValuesToElement(TiXmlElement * the_element) const; inline void SetAttributeBool(TiXmlElement * the_elt,const std::string & the_string, const bool the_value) const; void UpdateConfigs(const HWND HwndDlg); void EnableAbrOptions(HWND hDialog, bool enable); HMODULE my_hModule; /** \brief \param config_name \param parentNode */ void GetValuesFromKey(const std::string & config_name, const TiXmlNode & parentNode); }; #endif // !defined(_AENCODEPROPERTIES_H__INCLUDED_) �������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ddk/���������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170221265 015224� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/Makefile.am��������������������������������������������������������������������������000644 �001751 �001751 �00000000636 11105565230 016522� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.7 2008/11/09 13:50:16 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global SUBDIRS = ADbg ddk tinyxml EXTRA_DIST = \ ACM.cpp \ ACM.h \ ACMStream.cpp \ ACMStream.h \ AEncodeProperties.cpp \ AEncodeProperties.h \ DecodeStream.cpp \ DecodeStream.h \ LameACM.inf \ TODO \ acm.rc \ adebug.h \ lame.ico \ lameACM.def \ lame_acm.xml \ main.cpp \ readme.txt \ resource.h ��������������������������������������������������������������������������������������������������lame-3.100/ACM/readme.txt���������������������������������������������������������������������������000644 �001751 �001751 �00000001524 07761332250 016470� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������In order to build this codec, you need the Windows98 DDK from Microsoft. It can also work with the Windows2000/ME/XP/2003 DDK: http://www.microsoft.com/ddk/ Alternatively, the required headers are also available in CYGWIN+w32api, MINGW32 or Wine : http://www.cygwin.com/ http://www.mingw.org/ http://www.winehq.com/ If you do not have a ddk, you should be able to use the alternative msacmdrv.h provided with this ACM codec. It is not used by default because it would probably broke any real DDK already installed. --------------- Define ENABLE_DECODING if you want to use the decoding (alpha state, doesn't decode at the moment, so use it only if you plan to develop) --------------- To release this codec you will need : - lameACM.acm (result of the build process) - lameACM.inf - lame_acm.xml (where the initial configuration is stored) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ACM.h��������������������������������������������������������������������������������000644 �001751 �001751 �00000006550 10544042236 015242� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: ACM.h,v 1.8 2006/12/25 21:37:34 robert Exp $ */ #if !defined(_ACM_H__INCLUDED_) #define _ACM_H__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include <vector> #include <windows.h> #include <mmsystem.h> #include <mmreg.h> #include <msacm.h> #include <msacmdrv.h> #include "ADbg/ADbg.h" class AEncodeProperties; typedef enum vbr_mode_e vbr_mode; class bitrate_item { public: unsigned int frequency; unsigned int bitrate; unsigned int channels; vbr_mode mode; bool operator<(const bitrate_item & bitrate) const; }; class ACM { public: ACM( HMODULE hModule ); virtual ~ACM(); LONG DriverProcedure(const HDRVR hdrvr, const UINT msg, LONG lParam1, LONG lParam2); static const char * GetVersionString(void) {return VersionString;} protected: // inline DWORD Configure( HWND hParentWindow, LPDRVCONFIGINFO pConfig ); inline DWORD About( HWND hParentWindow ); inline DWORD OnDriverDetails(const HDRVR hdrvr, LPACMDRIVERDETAILS a_DriverDetail); inline DWORD OnFormatTagDetails(LPACMFORMATTAGDETAILS a_FormatTagDetails, const LPARAM a_Query); inline DWORD OnFormatDetails(LPACMFORMATDETAILS a_FormatDetails, const LPARAM a_Query); inline DWORD OnFormatSuggest(LPACMDRVFORMATSUGGEST a_FormatSuggest); inline DWORD OnStreamOpen(LPACMDRVSTREAMINSTANCE a_StreamInstance); inline DWORD OnStreamClose(LPACMDRVSTREAMINSTANCE a_StreamInstance); inline DWORD OnStreamSize(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMDRVSTREAMSIZE the_StreamSize); inline DWORD OnStreamPrepareHeader(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMSTREAMHEADER a_StreamHeader); inline DWORD OnStreamUnPrepareHeader(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMSTREAMHEADER a_StreamHeader); inline DWORD OnStreamConvert(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMDRVSTREAMHEADER a_StreamHeader); void GetMP3FormatForIndex(const DWORD the_Index, WAVEFORMATEX & the_Format, unsigned short the_String[ACMFORMATDETAILS_FORMAT_CHARS]) const; void GetPCMFormatForIndex(const DWORD the_Index, WAVEFORMATEX & the_Format, unsigned short the_String[ACMFORMATDETAILS_FORMAT_CHARS]) const; DWORD GetNumberEncodingFormats() const; bool IsSmartOutput(const int frequency, const int bitrate, const int channels) const; void BuildBitrateTable(); HMODULE my_hModule; HICON my_hIcon; ADbg my_debug; AEncodeProperties my_EncodingProperties; std::vector<bitrate_item> bitrate_table; static char VersionString[120]; }; #endif // !defined(_ACM_H__INCLUDED_) ��������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ACMStream.cpp������������������������������������������������������������������������000644 �001751 �001751 �00000030432 10734547730 016757� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: ACMStream.cpp,v 1.12 2007/12/26 22:04:08 robert Exp $ */ #if !defined(STRICT) #define STRICT #endif // STRICT #include <assert.h> #include <windows.h> #include "adebug.h" #include "ACMStream.h" #include <lame.h> // static methods ACMStream * ACMStream::Create() { ACMStream * Result; Result = new ACMStream; return Result; } const bool ACMStream::Erase(const ACMStream * a_ACMStream) { delete a_ACMStream; return true; } // class methods ACMStream::ACMStream() : m_WorkingBufferUseSize(0), gfp(NULL) { /// \todo get the debug level from the registry my_debug = new ADbg(DEBUG_LEVEL_CREATION); if (my_debug != NULL) { unsigned char DebugFileName[512]; my_debug->setPrefix("LAMEstream"); /// \todo get it from the registry my_debug->setIncludeTime(true); /// \todo get it from the registry // Check in the registry if we have to Output Debug information DebugFileName[0] = '\0'; HKEY OssKey; if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\MUKOLI", 0, KEY_READ , &OssKey ) == ERROR_SUCCESS) { DWORD DataType; DWORD DebugFileNameSize = 512; if (RegQueryValueEx( OssKey, "DebugFile", NULL, &DataType, DebugFileName, &DebugFileNameSize ) == ERROR_SUCCESS) { if (DataType == REG_SZ) { my_debug->setUseFile(true); my_debug->setDebugFile((char *)DebugFileName); my_debug->OutPut("Debug file is %s",(char *)DebugFileName); } } } my_debug->OutPut(DEBUG_LEVEL_FUNC_START, "ACMStream Creation (0X%08X)",this); } else { ADbg debug; debug.OutPut("ACMStream::ACMACMStream : Impossible to create my_debug"); } } ACMStream::~ACMStream() { // release memory - encoding is finished if (gfp) lame_close( gfp ); if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_START, "ACMStream Deletion (0X%08X)",this); delete my_debug; } } bool ACMStream::init(const int nSamplesPerSec, const int nOutputSamplesPerSec, const int nChannels, const int nAvgBytesPerSec, const vbr_mode mode) { bool bResult = false; my_SamplesPerSec = nSamplesPerSec; my_OutBytesPerSec = nOutputSamplesPerSec; my_Channels = nChannels; my_AvgBytesPerSec = nAvgBytesPerSec; my_VBRMode = mode; bResult = true; return bResult; } bool ACMStream::open(const AEncodeProperties & the_Properties) { bool bResult = false; // Init the MP3 Stream // Init the global flags structure gfp = lame_init(); // Set input sample frequency lame_set_in_samplerate( gfp, my_SamplesPerSec ); // Set output sample frequency lame_set_out_samplerate( gfp, my_OutBytesPerSec ); lame_set_num_channels( gfp, my_Channels ); if (my_Channels == 1) lame_set_mode( gfp, MONO ); else lame_set_mode( gfp, (MPEG_mode_e)the_Properties.GetChannelModeValue()) ; /// \todo Get the mode from the default configuration // lame_set_VBR( gfp, vbr_off ); /// \note VBR not supported for the moment lame_set_VBR( gfp, my_VBRMode ); /// \note VBR not supported for the moment if (my_VBRMode == vbr_abr) { lame_set_VBR_q( gfp, 1 ); lame_set_VBR_mean_bitrate_kbps( gfp, (my_AvgBytesPerSec * 8 + 500) / 1000 ); if (24000 > lame_get_in_samplerate( gfp )) { // For MPEG-II lame_set_VBR_min_bitrate_kbps( gfp, 8); lame_set_VBR_max_bitrate_kbps( gfp, 160); } else { // For MPEG-I lame_set_VBR_min_bitrate_kbps( gfp, 32); lame_set_VBR_max_bitrate_kbps( gfp, 320); } } // Set bitrate lame_set_brate( gfp, my_AvgBytesPerSec * 8 / 1000 ); /// \todo Get the mode from the default configuration // Set copyright flag? lame_set_copyright( gfp, the_Properties.GetCopyrightMode()?1:0 ); // Do we have to tag it as non original lame_set_original( gfp, the_Properties.GetOriginalMode()?1:0 ); // Add CRC? lame_set_error_protection( gfp, the_Properties.GetCRCMode()?1:0 ); // Set private bit? lame_set_extension( gfp, the_Properties.GetPrivateMode()?1:0 ); // INFO tag support not possible in ACM - it requires rewinding // output stream to the beginning after encoding is finished. lame_set_bWriteVbrTag( gfp, 0 ); if (0 == lame_init_params( gfp )) { //LAME encoding call will accept any number of samples. if ( 0 == lame_get_version( gfp ) ) { // For MPEG-II, only 576 samples per frame per channel my_SamplesPerBlock = 576 * lame_get_num_channels( gfp ); } else { // For MPEG-I, 1152 samples per frame per channel my_SamplesPerBlock = 1152 * lame_get_num_channels( gfp ); } } my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "version =%d",lame_get_version( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Layer =3"); switch ( lame_get_mode( gfp ) ) { case STEREO: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "mode =Stereo" ); break; case JOINT_STEREO: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "mode =Joint-Stereo" ); break; case DUAL_CHANNEL: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "mode =Forced Stereo" ); break; case MONO: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "mode =Mono" ); break; case NOT_SET: /* FALLTROUGH */ default: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "mode =Error (unknown)" ); break; } my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "sampling frequency =%.1f kHz", lame_get_in_samplerate( gfp ) /1000.0 ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "bitrate =%d kbps", lame_get_brate( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Vbr Min bitrate =%d kbps", lame_get_VBR_min_bitrate_kbps( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Vbr Max bitrate =%d kbps", lame_get_VBR_max_bitrate_kbps( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Quality Setting =%d", lame_get_quality( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Low pass frequency =%d", lame_get_lowpassfreq( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Low pass width =%d", lame_get_lowpasswidth( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "High pass frequency =%d", lame_get_highpassfreq( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "High pass width =%d", lame_get_highpasswidth( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "No Short Blocks =%d", lame_get_no_short_blocks( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "de-emphasis =%d", lame_get_emphasis( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "private flag =%d", lame_get_extension( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "copyright flag =%d", lame_get_copyright( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "original flag =%d", lame_get_original( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "CRC =%s", lame_get_error_protection( gfp ) ? "on" : "off" ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Fast mode =%s", ( lame_get_quality( gfp ) )? "enabled" : "disabled" ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Force mid/side stereo =%s", ( lame_get_force_ms( gfp ) )?"enabled":"disabled" ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Disable Resorvoir =%d", lame_get_disable_reservoir( gfp ) ); my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "VBR =%s, VBR_q =%d, VBR method =", ( lame_get_VBR( gfp ) !=vbr_off ) ? "enabled": "disabled", lame_get_VBR_q( gfp ) ); switch ( lame_get_VBR( gfp ) ) { case vbr_off: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "vbr_off" ); break; case vbr_mt : my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "vbr_mt" ); break; case vbr_rh : my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "vbr_rh" ); break; case vbr_mtrh: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "vbr_mtrh" ); break; case vbr_abr: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "vbr_abr (average bitrate %d kbps)", lame_get_VBR_mean_bitrate_kbps( gfp ) ); break; default: my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "error, unknown VBR setting"); break; } my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "Write VBR Header =%s\n", ( lame_get_bWriteVbrTag( gfp ) ) ?"Yes":"No"); #ifdef FROM_DLL beConfig.format.LHV1.dwReSampleRate = my_OutBytesPerSec; // force the user resampling #endif // FROM_DLL bResult = true; return bResult; } bool ACMStream::close(LPBYTE pOutputBuffer, DWORD *pOutputSize) { bool bResult = false; int nOutputSamples = 0; nOutputSamples = lame_encode_flush( gfp, pOutputBuffer, 0 ); if ( nOutputSamples < 0 ) { // BUFFER_TOO_SMALL *pOutputSize = 0; } else { *pOutputSize = nOutputSamples; bResult = true; } // lame will be closed in destructor //lame_close( gfp ); return bResult; } DWORD ACMStream::GetOutputSizeForInput(const DWORD the_SrcLength) const { /* double OutputInputRatio; if (my_VBRMode == vbr_off) OutputInputRatio = double(my_AvgBytesPerSec) / double(my_OutBytesPerSec * 2); else // reserve the space for 320 kbps OutputInputRatio = 40000.0 / double(my_OutBytesPerSec * 2); OutputInputRatio *= 1.15; // allow 15% more*/ DWORD Result; // Result = DWORD(double(the_SrcLength) * OutputInputRatio); Result = DWORD(1.25*the_SrcLength + 7200); my_debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "Result = %d",Result); return Result; } bool ACMStream::ConvertBuffer(LPACMDRVSTREAMHEADER a_StreamHeader) { bool result; if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "enter ACMStream::ConvertBuffer"); } DWORD InSize = a_StreamHeader->cbSrcLength / 2, OutSize = a_StreamHeader->cbDstLength; // 2 for 8<->16 bits // Encode it int dwSamples; int nOutputSamples = 0; dwSamples = InSize / lame_get_num_channels( gfp ); if ( 1 == lame_get_num_channels( gfp ) ) { nOutputSamples = lame_encode_buffer(gfp,(PSHORT)a_StreamHeader->pbSrc,(PSHORT)a_StreamHeader->pbSrc,dwSamples,a_StreamHeader->pbDst,a_StreamHeader->cbDstLength); } else { nOutputSamples = lame_encode_buffer_interleaved(gfp,(PSHORT)a_StreamHeader->pbSrc,dwSamples,a_StreamHeader->pbDst,a_StreamHeader->cbDstLength); } a_StreamHeader->cbSrcLengthUsed = a_StreamHeader->cbSrcLength; a_StreamHeader->cbDstLengthUsed = nOutputSamples; result = a_StreamHeader->cbDstLengthUsed <= a_StreamHeader->cbDstLength; my_debug->OutPut(DEBUG_LEVEL_FUNC_CODE, "UsedSize = %d / EncodedSize = %d, result = %d (%d <= %d)", InSize, OutSize, result, a_StreamHeader->cbDstLengthUsed, a_StreamHeader->cbDstLength); if (my_debug != NULL) { my_debug->OutPut(DEBUG_LEVEL_FUNC_DEBUG, "ACMStream::ConvertBuffer result = %d (0x%02X 0x%02X)",result,a_StreamHeader->pbDst[0],a_StreamHeader->pbDst[1]); } return result; } /* map frequency to a valid MP3 sample frequency * * Robert Hegemann 2000-07-01 */ static int map2MP3Frequency(int freq) { if (freq <= 8000) return 8000; if (freq <= 11025) return 11025; if (freq <= 12000) return 12000; if (freq <= 16000) return 16000; if (freq <= 22050) return 22050; if (freq <= 24000) return 24000; if (freq <= 32000) return 32000; if (freq <= 44100) return 44100; return 48000; } unsigned int ACMStream::GetOutputSampleRate(int samples_per_sec, int bitrate, int channels) { if (bitrate==0) bitrate = (64000*channels)/8; /// \todo pass through the same LAME routine unsigned int OutputFrequency; double compression_ratio = double(samples_per_sec * 16 * channels / (bitrate * 8)); if (compression_ratio > 13.) OutputFrequency = map2MP3Frequency( (10. * bitrate * 8) / (16 * channels)); else OutputFrequency = map2MP3Frequency( 0.97 * samples_per_sec ); return OutputFrequency; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/AEncodeProperties.cpp����������������������������������������������������������������000644 �001751 �001751 �00000162066 10544042236 020555� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: AEncodeProperties.cpp,v 1.9 2006/12/25 21:37:34 robert Exp $ */ #if !defined(STRICT) #define STRICT #endif // !defined(STRICT) #include <windows.h> #include <windowsx.h> #include <shlobj.h> #include <assert.h> #ifdef _MSC_VER // no problem with unknown pragmas #pragma warning(disable: 4068) #endif #include "resource.h" #include <lame.h> #include "adebug.h" #include "AEncodeProperties.h" #include "ACM.h" //#include "AParameters/AParameters.h" #ifndef TTS_BALLOON #define TTS_BALLOON 0x40 #endif // TTS_BALLOON const unsigned int AEncodeProperties::the_Bitrates[18] = {320, 256, 224, 192, 160, 144, 128, 112, 96, 80, 64, 56, 48, 40, 32, 24, 16, 8 }; const unsigned int AEncodeProperties::the_MPEG1_Bitrates[14] = {320, 256, 224, 192, 160, 128, 112, 96, 80, 64, 56, 48, 40, 32 }; const unsigned int AEncodeProperties::the_MPEG2_Bitrates[14] = {160, 144, 128, 112, 96, 80, 64, 56, 48, 40, 32, 24, 16, 8}; const unsigned int AEncodeProperties::the_ChannelModes[3] = { STEREO, JOINT_STEREO, DUAL_CHANNEL }; //const char AEncodeProperties::the_Presets[][13] = {"None", "CD", "Studio", "Hi-Fi", "Phone", "Voice", "Radio", "Tape", "FM", "AM", "SW"}; //const LAME_QUALTIY_PRESET AEncodeProperties::the_Presets[] = {LQP_NOPRESET, LQP_R3MIX_QUALITY, LQP_NORMAL_QUALITY, LQP_LOW_QUALITY, LQP_HIGH_QUALITY, LQP_VERYHIGH_QUALITY, LQP_VOICE_QUALITY, LQP_PHONE, LQP_SW, LQP_AM, LQP_FM, LQP_VOICE, LQP_RADIO, LQP_TAPE, LQP_HIFI, LQP_CD, LQP_STUDIO}; //const unsigned int AEncodeProperties::the_SamplingFreqs[9] = { 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000 }; ToolTipItem AEncodeProperties::Tooltips[13]={ { IDC_CHECK_ENC_ABR, "Allow encoding with an average bitrate\r\ninstead of a constant one.\r\n\r\nIt can improve the quality for the same bitrate." }, { IDC_CHECK_COPYRIGHT, "Mark the encoded data as copyrighted." }, { IDC_CHECK_CHECKSUM, "Put a checksum in the encoded data.\r\n\r\nThis can make the file less sensitive to data loss." }, { IDC_CHECK_ORIGINAL, "Mark the encoded data as an original file." }, { IDC_CHECK_PRIVATE, "Mark the encoded data as private." }, { IDC_COMBO_ENC_STEREO, "Select the type of stereo mode used for encoding:\r\n\r\n- Stereo : the usual one\r\n- Joint-Stereo : mix both channel to achieve better compression\r\n- Dual Channel : treat both channel as separate" }, { IDC_STATIC_DECODING, "Decoding not supported for the moment by the codec." }, { IDC_CHECK_ENC_SMART, "Disable bitrate when there is too much compression.\r\n(default 1:15 ratio)" }, { IDC_STATIC_CONFIG_VERSION, "Version of this codec.\r\n\r\nvX.X.X is the version of the codec interface.\r\nX.XX is the version of the encoding engine." }, { IDC_SLIDER_AVERAGE_MIN, "Select the minimum Average Bitrate allowed." }, { IDC_SLIDER_AVERAGE_MAX, "Select the maximum Average Bitrate allowed." }, { IDC_SLIDER_AVERAGE_STEP, "Select the step of Average Bitrate between the min and max.\r\n\r\nA step of 5 between 152 and 165 means you have :\r\n165, 160 and 155" }, { IDC_SLIDER_AVERAGE_SAMPLE, "Check the resulting values of the (min,max,step) combination.\r\n\r\nUse the keyboard to navigate (right -> left)." }, }; //int AEncodeProperties::tst = 0; /* #pragma argsused static UINT CALLBACK DLLFindCallback( HWND hdlg, // handle to child dialog box UINT uiMsg, // message identifier WPARAM wParam, // message parameter LPARAM lParam // message parameter ) { UINT result = 0; switch (uiMsg) { case WM_NOTIFY: OFNOTIFY * info = (OFNOTIFY *)lParam; if (info->hdr.code == CDN_FILEOK) { result = 1; // by default we don't accept the file // Check if the selected file is a valid DLL with all the required functions ALameDLL * tstFile = new ALameDLL; if (tstFile != NULL) { if (tstFile->Load(info->lpOFN->lpstrFile)) { result = 0; } delete tstFile; } if (result == 1) { TCHAR output[250]; ::LoadString(AOut::GetInstance(),IDS_STRING_DLL_UNRECOGNIZED,output,250); AOut::MyMessageBox( output, MB_OK|MB_ICONEXCLAMATION, hdlg); SetWindowLong(hdlg, DWL_MSGRESULT , -100); } } } return result; } #pragma argsused static int CALLBACK BrowseFolderCallbackroc( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData ) { AEncodeProperties * the_prop; the_prop = (AEncodeProperties *) lpData; if (uMsg == BFFM_INITIALIZED) { // char FolderName[MAX_PATH]; // SHGetPathFromIDList((LPITEMIDLIST) lParam,FolderName); //ADbg tst; //tst.OutPut("init folder to %s ",the_prop->GetOutputDirectory()); // CreateFile(); ::SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)the_prop->GetOutputDirectory()); }/* else if (uMsg == BFFM_SELCHANGED) { // verify that the folder is writable // ::SendMessage(hwnd, BFFM_ENABLEOK, 0, (LPARAM)0); // disable char FolderName[MAX_PATH]; SHGetPathFromIDList((LPITEMIDLIST) lParam, FolderName); // if (CreateFile(FolderName,STANDARD_RIGHTS_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL) == INVALID_HANDLE_VALUE) if ((GetFileAttributes(FolderName) & FILE_ATTRIBUTE_DIRECTORY) != 0) ::SendMessage(hwnd, BFFM_ENABLEOK, 0, (LPARAM)1); // enable else ::SendMessage(hwnd, BFFM_ENABLEOK, 0, (LPARAM)0); // disable //ADbg tst; //tst.OutPut("change folder to %s ",FolderName); }* / return 0; } */ #pragma argsused static BOOL CALLBACK ConfigProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { BOOL bResult; AEncodeProperties * the_prop; the_prop = (AEncodeProperties *) GetProp(hwndDlg, "AEncodeProperties-Config"); switch (uMsg) { case WM_COMMAND: if (the_prop != NULL) { bResult = the_prop->HandleDialogCommand( hwndDlg, wParam, lParam); } break; case WM_INITDIALOG: assert(the_prop == NULL); the_prop = (AEncodeProperties *) lParam; the_prop->my_debug.OutPut("there hwnd = 0x%08X",hwndDlg); assert(the_prop != NULL); SetProp(hwndDlg, "AEncodeProperties-Config", the_prop); the_prop->InitConfigDlg(hwndDlg); bResult = TRUE; break; case WM_HSCROLL: // check if it's the ABR sliders if ((HWND)lParam == GetDlgItem(hwndDlg,IDC_SLIDER_AVERAGE_MIN)) { the_prop->UpdateDlgFromSlides(hwndDlg); } else if ((HWND)lParam == GetDlgItem(hwndDlg,IDC_SLIDER_AVERAGE_MAX)) { the_prop->UpdateDlgFromSlides(hwndDlg); } else if ((HWND)lParam == GetDlgItem(hwndDlg,IDC_SLIDER_AVERAGE_STEP)) { the_prop->UpdateDlgFromSlides(hwndDlg); } else if ((HWND)lParam == GetDlgItem(hwndDlg,IDC_SLIDER_AVERAGE_SAMPLE)) { the_prop->UpdateDlgFromSlides(hwndDlg); } break; case WM_NOTIFY: if (TTN_GETDISPINFO == ((LPNMHDR)lParam)->code) { NMTTDISPINFO *lphdr = (NMTTDISPINFO *)lParam; UINT id = (lphdr->uFlags & TTF_IDISHWND) ? GetWindowLong((HWND)lphdr->hdr.idFrom, GWL_ID) : lphdr->hdr.idFrom; *lphdr->lpszText = 0; SendMessage(lphdr->hdr.hwndFrom, TTM_SETMAXTIPWIDTH, 0, 5000); for(int i=0; i<sizeof AEncodeProperties::Tooltips/sizeof AEncodeProperties::Tooltips[0]; ++i) { if (id == AEncodeProperties::Tooltips[i].id) lphdr->lpszText = const_cast<char *>(AEncodeProperties::Tooltips[i].tip); } return TRUE; } break; default: bResult = FALSE; // will be treated by DefWindowProc } return bResult; } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// /** \class AEncodeProperties */ const char * AEncodeProperties::GetChannelModeString(int a_channelID) const { assert(a_channelID < sizeof(the_ChannelModes)); switch (a_channelID) { case 0: return "Stereo"; case 1: return "Joint-stereo"; case 2: return "Dual Channel"; default: assert(a_channelID); return NULL; } } const int AEncodeProperties::GetBitrateString(char * string, int string_size, int a_bitrateID) const { assert(a_bitrateID < sizeof(the_Bitrates)); assert(string != NULL); if (string_size >= 4) return wsprintf(string,"%d",the_Bitrates[a_bitrateID]); else return -1; } const unsigned int AEncodeProperties::GetChannelModeValue() const { assert(nChannelIndex < sizeof(the_ChannelModes)); return the_ChannelModes[nChannelIndex]; } const unsigned int AEncodeProperties::GetBitrateValue() const { assert(nMinBitrateIndex < sizeof(the_Bitrates)); return the_Bitrates[nMinBitrateIndex]; } inline const int AEncodeProperties::GetBitrateValueMPEG2(DWORD & bitrate) const { int i; for (i=0;i<sizeof(the_MPEG2_Bitrates)/sizeof(unsigned int);i++) { if (the_MPEG2_Bitrates[i] == the_Bitrates[nMinBitrateIndex]) { bitrate = the_MPEG2_Bitrates[i]; return 0; } else if (the_MPEG2_Bitrates[i] < the_Bitrates[nMinBitrateIndex]) { bitrate = the_MPEG2_Bitrates[i]; return -1; } } bitrate = 160; return -1; } inline const int AEncodeProperties::GetBitrateValueMPEG1(DWORD & bitrate) const { int i; for (i=sizeof(the_MPEG1_Bitrates)/sizeof(unsigned int)-1;i>=0;i--) { if (the_MPEG1_Bitrates[i] == the_Bitrates[nMinBitrateIndex]) { bitrate = the_MPEG1_Bitrates[i]; return 0; } else if (the_MPEG1_Bitrates[i] > the_Bitrates[nMinBitrateIndex]) { bitrate = the_MPEG1_Bitrates[i]; return 1; } } bitrate = 32; return 1; } /* const int AEncodeProperties::GetBitrateValue(DWORD & bitrate, const DWORD MPEG_Version) const { assert((MPEG_Version == MPEG1) || (MPEG_Version == MPEG2)); assert(nMinBitrateIndex < sizeof(the_Bitrates)); if (MPEG_Version == MPEG2) return GetBitrateValueMPEG2(bitrate); else return GetBitrateValueMPEG1(bitrate); } /* const char * AEncodeProperties::GetPresetModeString(const int a_presetID) const { assert(a_presetID < sizeof(the_Presets)); switch (a_presetID) { case 1: return "r3mix"; case 2: return "Normal"; case 3: return "Low"; case 4: return "High"; case 5: return "Very High"; case 6: return "Voice"; case 7: return "Phone"; case 8: return "SW"; case 9: return "AM"; case 10: return "FM"; case 11: return "Voice"; case 12: return "Radio"; case 13: return "Tape"; case 14: return "Hi-Fi"; case 15: return "CD"; case 16: return "Studio"; default: return "None"; } } const LAME_QUALTIY_PRESET AEncodeProperties::GetPresetModeValue() const { assert(nPresetIndex < sizeof(the_Presets)); return the_Presets[nPresetIndex]; } */ bool AEncodeProperties::Config(const HINSTANCE Hinstance, const HWND HwndParent) { //WM_INITDIALOG ? // remember the instance to retreive strings // hDllInstance = Hinstance; my_debug.OutPut("here"); int ret = ::DialogBoxParam(Hinstance, MAKEINTRESOURCE(IDD_CONFIG), HwndParent, ::ConfigProc, (LPARAM) this); /* if (ret == -1) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf. // ... // Display the string. AOut::MyMessageBox( (LPCTSTR)lpMsgBuf, MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); return false; } */ return true; } bool AEncodeProperties::InitConfigDlg(HWND HwndDlg) { // get all the required strings // TCHAR Version[5]; // LoadString(hDllInstance, IDS_STRING_VERSION, Version, 5); int i; // Add required channel modes SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_ENC_STEREO), CB_RESETCONTENT , NULL, NULL); for (i=0;i<GetChannelLentgh();i++) SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_ENC_STEREO), CB_ADDSTRING, NULL, (LPARAM) GetChannelModeString(i)); char tmp[20]; wsprintf(tmp, "v%s",ACM::GetVersionString()); SetWindowText( GetDlgItem( HwndDlg, IDC_STATIC_CONFIG_VERSION), tmp); // Add all possible re-sampling freq /* SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SAMPLEFREQ), CB_RESETCONTENT , NULL, NULL); char tmp[10]; for (i=0;i<sizeof(the_SamplingFreqs)/sizeof(unsigned int);i++) { wsprintf(tmp, "%d", the_SamplingFreqs[i]); SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SAMPLEFREQ), CB_ADDSTRING, NULL, (LPARAM) tmp ); } */ // Add required bitrates /* SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_BITRATE), CB_RESETCONTENT , NULL, NULL); for (i=0;i<GetBitrateLentgh();i++) { GetBitrateString(tmp, 5, i); SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_BITRATE), CB_ADDSTRING, NULL, (LPARAM) tmp ); } // Add bitrates to the VBR combo box too SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_MAXBITRATE), CB_RESETCONTENT , NULL, NULL); for (i=0;i<GetBitrateLentgh();i++) { GetBitrateString(tmp, 5, i); SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_MAXBITRATE), CB_ADDSTRING, NULL, (LPARAM) tmp ); } // Add VBR Quality Slider SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_QUALITY), TBM_SETRANGE, TRUE, MAKELONG(0,9)); // Add presets SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_PRESET), CB_RESETCONTENT , NULL, NULL); for (i=0;i<GetPresetLentgh();i++) SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_PRESET), CB_ADDSTRING, NULL, (LPARAM) GetPresetModeString(i)); */ // Add ABR Sliders SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MIN), TBM_SETRANGE, TRUE, MAKELONG(8,320)); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MAX), TBM_SETRANGE, TRUE, MAKELONG(8,320)); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_STEP), TBM_SETRANGE, TRUE, MAKELONG(1,16)); // Tool-Tip initialiasiation TOOLINFO ti; HWND ToolTipWnd; char DisplayStr[30] = "test tooltip"; ToolTipWnd = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP|TTS_BALLOON , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HwndDlg, NULL, NULL, NULL ); SetWindowPos(ToolTipWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); /* INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE */ ti.cbSize = sizeof(TOOLINFO); ti.uFlags = TTF_SUBCLASS | TTF_IDISHWND; ti.hwnd = HwndDlg; ti.lpszText = LPSTR_TEXTCALLBACK; /* SEND AN ADDTOOL MESSAGE TO THE TOOLTIP CONTROL WINDOW */ for(i=0; i<sizeof Tooltips/sizeof Tooltips[0]; ++i) { ti.uId = (WPARAM)GetDlgItem(HwndDlg, Tooltips[i].id); if (ti.uId) SendMessage(ToolTipWnd, TTM_ADDTOOL, 0, (LPARAM)&ti); } my_debug.OutPut("call UpdateConfigs"); UpdateConfigs(HwndDlg); my_debug.OutPut("call UpdateDlgFromValue"); UpdateDlgFromValue(HwndDlg); my_debug.OutPut("finished InitConfigDlg"); return true; } bool AEncodeProperties::UpdateDlgFromValue(HWND HwndDlg) { // get all the required strings // TCHAR Version[5]; // LoadString(hDllInstance, IDS_STRING_VERSION, Version, 5); int i; // Check boxes if required ::CheckDlgButton( HwndDlg, IDC_CHECK_CHECKSUM, GetCRCMode() ?BST_CHECKED:BST_UNCHECKED ); ::CheckDlgButton( HwndDlg, IDC_CHECK_ORIGINAL, GetOriginalMode() ?BST_CHECKED:BST_UNCHECKED ); ::CheckDlgButton( HwndDlg, IDC_CHECK_PRIVATE, GetPrivateMode() ?BST_CHECKED:BST_UNCHECKED ); ::CheckDlgButton( HwndDlg, IDC_CHECK_COPYRIGHT, GetCopyrightMode() ?BST_CHECKED:BST_UNCHECKED ); ::CheckDlgButton( HwndDlg, IDC_CHECK_ENC_SMART, GetSmartOutputMode()?BST_CHECKED:BST_UNCHECKED ); ::CheckDlgButton( HwndDlg, IDC_CHECK_ENC_ABR, GetAbrOutputMode() ?BST_CHECKED:BST_UNCHECKED ); // ::CheckDlgButton( HwndDlg, IDC_CHECK_RESERVOIR, !GetNoBiResMode() ?BST_CHECKED:BST_UNCHECKED ); // ::CheckDlgButton( HwndDlg, IDC_CHECK_XINGVBR, GetXingFrameMode()?BST_CHECKED:BST_UNCHECKED ); // ::CheckDlgButton( HwndDlg, IDC_CHECK_RESAMPLE, GetResampleMode() ?BST_CHECKED:BST_UNCHECKED ); // ::CheckDlgButton( HwndDlg, IDC_CHECK_CHANNELFORCE, bForceChannel ?BST_CHECKED:BST_UNCHECKED ); // Add required channel modes for (i=0;i<GetChannelLentgh();i++) { if (i == nChannelIndex) { SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_ENC_STEREO), CB_SETCURSEL, i, NULL); break; } } // Add VBR Quality SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MIN), TBM_SETPOS, TRUE, AverageBitrate_Min); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MAX), TBM_SETPOS, TRUE, AverageBitrate_Max); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_STEP), TBM_SETPOS, TRUE, AverageBitrate_Step); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETPOS, TRUE, AverageBitrate_Max); UpdateDlgFromSlides(HwndDlg); EnableAbrOptions(HwndDlg, GetAbrOutputMode()); // UpdateAbrSteps(AverageBitrate_Min, AverageBitrate_Max, AverageBitrate_Step); // Add all possible re-sampling freq /* SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SAMPLEFREQ), CB_SETCURSEL, nSamplingFreqIndex, NULL); // Add required bitrates for (i=0;i<GetBitrateLentgh();i++) { if (i == nMinBitrateIndex) { SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_BITRATE), CB_SETCURSEL, i, NULL); break; } } // Add bitrates to the VBR combo box too for (i=0;i<GetBitrateLentgh();i++) { if (i == nMaxBitrateIndex) { SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_MAXBITRATE), CB_SETCURSEL, i, NULL); break; } } // SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_QUALITY), TBM_SETRANGE, TRUE, MAKELONG(0,9)); char tmp[3]; wsprintf(tmp,"%d",VbrQuality); SetWindowText(GetDlgItem( HwndDlg, IDC_CONFIG_QUALITY), tmp); SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_QUALITY), TBM_SETPOS, TRUE, VbrQuality); wsprintf(tmp,"%d",AverageBitrate); SetWindowText(GetDlgItem( HwndDlg, IDC_EDIT_AVERAGE), tmp); // Display VBR settings if needed AEncodeProperties::DisplayVbrOptions(HwndDlg, mBRmode); // Display Resample settings if needed if (GetResampleMode()) { ::EnableWindow(::GetDlgItem(HwndDlg,IDC_COMBO_SAMPLEFREQ), TRUE); } else { ::EnableWindow(::GetDlgItem(HwndDlg,IDC_COMBO_SAMPLEFREQ), FALSE); } // Add presets for (i=0;i<GetPresetLentgh();i++) { if (i == nPresetIndex) { SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_PRESET), CB_SETCURSEL, i, NULL); break; } } // Add User configs // SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SETTINGS), CB_RESETCONTENT , NULL, NULL); ::SetWindowText(::GetDlgItem( HwndDlg, IDC_EDIT_OUTPUTDIR), OutputDir.c_str()); */ /** \todo Select the right saved config */ return true; } bool AEncodeProperties::UpdateValueFromDlg(HWND HwndDlg) { nChannelIndex = SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_ENC_STEREO), CB_GETCURSEL, NULL, NULL); // nMinBitrateIndex = SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_BITRATE), CB_GETCURSEL, NULL, NULL); // nMaxBitrateIndex = SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_MAXBITRATE), CB_GETCURSEL, NULL, NULL); // nPresetIndex = SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_PRESET), CB_GETCURSEL, NULL, NULL); // VbrQuality = SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_QUALITY), TBM_GETPOS , NULL, NULL); // nSamplingFreqIndex = SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SAMPLEFREQ), CB_GETCURSEL, NULL, NULL); bCRC = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_CHECKSUM) == BST_CHECKED); bCopyright = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_COPYRIGHT) == BST_CHECKED); bOriginal = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_ORIGINAL) == BST_CHECKED); bPrivate = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_PRIVATE) == BST_CHECKED); bSmartOutput = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_ENC_SMART) == BST_CHECKED); bAbrOutput = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_ENC_ABR) == BST_CHECKED); // bNoBitRes =!(::IsDlgButtonChecked( HwndDlg, IDC_CHECK_RESERVOIR) == BST_CHECKED); // bXingFrame = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_XINGVBR) == BST_CHECKED); // bResample = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_RESAMPLE) == BST_CHECKED); // bForceChannel = (::IsDlgButtonChecked( HwndDlg, IDC_CHECK_CHANNELFORCE) == BST_CHECKED); AverageBitrate_Min = SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MIN), TBM_GETPOS , NULL, NULL); AverageBitrate_Max = SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_MAX), TBM_GETPOS , NULL, NULL); AverageBitrate_Step = SendMessage(GetDlgItem( HwndDlg, IDC_SLIDER_AVERAGE_STEP), TBM_GETPOS , NULL, NULL); EnableAbrOptions(HwndDlg, bAbrOutput); my_debug.OutPut("nChannelIndex %d, bCRC %d, bCopyright %d, bOriginal %d, bPrivate %d",nChannelIndex, bCRC, bCopyright, bOriginal, bPrivate); /* char tmpPath[MAX_PATH]; ::GetWindowText( ::GetDlgItem( HwndDlg, IDC_EDIT_OUTPUTDIR), tmpPath, MAX_PATH); OutputDir = tmpPath; if (::IsDlgButtonChecked(HwndDlg, IDC_RADIO_BITRATE_CBR) == BST_CHECKED) mBRmode = BR_CBR; else if (::IsDlgButtonChecked(HwndDlg, IDC_RADIO_BITRATE_VBR) == BST_CHECKED) mBRmode = BR_VBR; else mBRmode = BR_ABR; ::GetWindowText( ::GetDlgItem( HwndDlg, IDC_EDIT_AVERAGE), tmpPath, MAX_PATH); AverageBitrate = atoi(tmpPath); if (AverageBitrate < 8) AverageBitrate = 8; if (AverageBitrate > 320) AverageBitrate = 320; */ return true; } /* VBRMETHOD AEncodeProperties::GetVBRValue(DWORD & MaxBitrate, int & Quality, DWORD & AbrBitrate, BOOL & VBRHeader, const DWORD MPEG_Version) const { assert((MPEG_Version == MPEG1) || (MPEG_Version == MPEG2)); assert(nMaxBitrateIndex < sizeof(the_Bitrates)); if (mBRmode == BR_VBR) { MaxBitrate = the_Bitrates[nMaxBitrateIndex]; if (MPEG_Version == MPEG1) MaxBitrate = MaxBitrate>the_MPEG1_Bitrates[sizeof(the_MPEG1_Bitrates)/sizeof(unsigned int)-1]?MaxBitrate:the_MPEG1_Bitrates[sizeof(the_MPEG1_Bitrates)/sizeof(unsigned int)-1]; else MaxBitrate = MaxBitrate<the_MPEG2_Bitrates[0]?MaxBitrate:the_MPEG2_Bitrates[0]; VBRHeader = bXingFrame; Quality = VbrQuality; AbrBitrate = 0; return VBR_METHOD_DEFAULT; // for the moment } else if (mBRmode == BR_ABR) { MaxBitrate = the_Bitrates[nMaxBitrateIndex]; if (MPEG_Version == MPEG1) MaxBitrate = MaxBitrate>the_MPEG1_Bitrates[sizeof(the_MPEG1_Bitrates)/sizeof(unsigned int)-1]?MaxBitrate:the_MPEG1_Bitrates[sizeof(the_MPEG1_Bitrates)/sizeof(unsigned int)-1]; else MaxBitrate = MaxBitrate<the_MPEG2_Bitrates[0]?MaxBitrate:the_MPEG2_Bitrates[0]; VBRHeader = bXingFrame; Quality = 0; AbrBitrate = AverageBitrate*1000; return VBR_METHOD_ABR; } else { return VBR_METHOD_NONE; } } */ void AEncodeProperties::ParamsRestore() { // use these default parameters in case one is not found bCopyright = true; bCRC = true; bOriginal = true; bPrivate = true; bNoBitRes = false; // enable bit reservoir bXingFrame = true; bResample = false; bForceChannel = false; bSmartOutput = true; bAbrOutput = true; AverageBitrate_Min = 80; // a bit lame AverageBitrate_Max = 160; // a bit lame AverageBitrate_Step = 8; // a bit lame SmartRatioMax = 15.0; nChannelIndex = 2; // joint-stereo mBRmode = BR_CBR; nMinBitrateIndex = 6; // 128 kbps (works for both MPEGI and II) nMaxBitrateIndex = 4; // 160 kbps (works for both MPEGI and II) nPresetIndex = 0; // None VbrQuality = 1; // Quite High // AverageBitrate = 128; // a bit lame nSamplingFreqIndex = 1; // 44100 // OutputDir = "c:\\"; // DllLocation = "plugins\\lame_enc.dll"; // get the values from the saved file if possible if (my_stored_data.LoadFile(my_store_location)) { TiXmlNode* node; node = my_stored_data.FirstChild("lame_acm"); TiXmlElement* CurrentNode = node->FirstChildElement("encodings"); std::string CurrentConfig = ""; if (CurrentNode->Attribute("default") != NULL) { CurrentConfig = *CurrentNode->Attribute("default"); } /* // output parameters TiXmlElement* iterateElmt = node->FirstChildElement("DLL"); if (iterateElmt != NULL) { const std::string * tmpname = iterateElmt->Attribute("location"); if (tmpname != NULL) { DllLocation = *tmpname; } } */ GetValuesFromKey(CurrentConfig, *CurrentNode); } else { /** \todo save the data in the file ! */ } } void AEncodeProperties::ParamsSave() { /* save the current parameters in the corresponding subkey HKEY OssKey; if (RegCreateKeyEx ( HKEY_LOCAL_MACHINE, "SOFTWARE\\MUKOLI\\out_lame", 0, "", REG_OPTION_NON_VOLATILE, KEY_WRITE , NULL, &OssKey, NULL ) == ERROR_SUCCESS) { if (RegSetValueEx(OssKey, "DLL Location", 0, REG_EXPAND_SZ, (CONST BYTE *)DllLocation, strlen(DllLocation)+1 ) != ERROR_SUCCESS) return; RegCloseKey(OssKey); } */ } /* void AEncodeProperties::DisplayVbrOptions(const HWND hDialog, const BRMode the_mode) { bool bVBR = false; bool bABR = false; switch ( the_mode ) { case BR_CBR: ::CheckRadioButton(hDialog, IDC_RADIO_BITRATE_CBR, IDC_RADIO_BITRATE_ABR, IDC_RADIO_BITRATE_CBR); break; case BR_VBR: ::CheckRadioButton(hDialog, IDC_RADIO_BITRATE_CBR, IDC_RADIO_BITRATE_ABR, IDC_RADIO_BITRATE_VBR); bVBR = true; break; case BR_ABR: ::CheckRadioButton(hDialog, IDC_RADIO_BITRATE_CBR, IDC_RADIO_BITRATE_ABR, IDC_RADIO_BITRATE_ABR); bABR = true; break; } if(bVBR|bABR) { ::SetWindowText(::GetDlgItem(hDialog,IDC_STATIC_MINBITRATE), "Min Bitrate"); } else { ::SetWindowText(::GetDlgItem(hDialog,IDC_STATIC_MINBITRATE), "Bitrate"); } ::EnableWindow(::GetDlgItem( hDialog, IDC_CHECK_XINGVBR), bVBR|bABR); ::EnableWindow(::GetDlgItem( hDialog, IDC_COMBO_MAXBITRATE), bVBR|bABR); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_MAXBITRATE), bVBR|bABR); ::EnableWindow(::GetDlgItem( hDialog, IDC_SLIDER_QUALITY), bVBR); ::EnableWindow(::GetDlgItem( hDialog, IDC_CONFIG_QUALITY), bVBR); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_VBRQUALITY), bVBR); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_VBRQUALITY_LOW), bVBR); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_VBRQUALITY_HIGH), bVBR); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_ABR), bABR); ::EnableWindow(::GetDlgItem( hDialog, IDC_EDIT_AVERAGE), bABR); } */ AEncodeProperties::AEncodeProperties(HMODULE hModule) :my_debug(ADbg(DEBUG_LEVEL_CREATION)), my_hModule(hModule) { std::string path = ""; // HMODULE htmp = LoadLibrary("out_lame.dll"); if (hModule != NULL) { char output[MAX_PATH]; ::GetModuleFileName(hModule, output, MAX_PATH); // ::FreeLibrary(htmp); path = output; } my_store_location = path.substr(0,path.find_last_of('\\')+1); my_store_location += "lame_acm.xml"; my_debug.OutPut("store path = %s",my_store_location.c_str()); //#ifdef OLD // ::OutputDebugString(my_store_location.c_str()); // make sure the XML file is present HANDLE hFile = ::CreateFile(my_store_location.c_str(), 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, NULL ); ::CloseHandle(hFile); //#endif // OLD my_debug.OutPut("AEncodeProperties creation completed (0x%08X)",this); } // Save the values to the right XML saved config void AEncodeProperties::SaveValuesToStringKey(const std::string & config_name) { // get the current data in the file to keep them if (my_stored_data.LoadFile(my_store_location)) { // check if the Node corresponding to the config_name already exist. TiXmlNode* node = my_stored_data.FirstChild("lame_acm"); if (node != NULL) { TiXmlElement* ConfigNode = node->FirstChildElement("encodings"); if (ConfigNode != NULL) { // look all the <config> tags TiXmlElement* tmpNode = ConfigNode->FirstChildElement("config"); while (tmpNode != NULL) { const std::string * tmpname = tmpNode->Attribute("name"); if (tmpname->compare(config_name) == 0) { break; } tmpNode = tmpNode->NextSiblingElement("config"); } if (tmpNode == NULL) { // Create the node tmpNode = new TiXmlElement("config"); tmpNode->SetAttribute("name",config_name); // save data in the node SaveValuesToElement(tmpNode); ConfigNode->InsertEndChild(*tmpNode); } else { // save data in the node SaveValuesToElement(tmpNode); } // and save the file my_stored_data.SaveFile(my_store_location); } } } } void AEncodeProperties::GetValuesFromKey(const std::string & config_name, const TiXmlNode & parentNode) { TiXmlElement* tmpElt; TiXmlElement* iterateElmt; // find the config that correspond to CurrentConfig iterateElmt = parentNode.FirstChildElement("config"); while (iterateElmt != NULL) { const std::string * tmpname = iterateElmt->Attribute("name"); if ((tmpname != NULL) && (tmpname->compare(config_name) == 0)) { break; } iterateElmt = iterateElmt->NextSiblingElement("config"); } if (iterateElmt != NULL) { // get all the parameters saved in this Element const std::string * tmpname; // Smart output parameter tmpElt = iterateElmt->FirstChildElement("Smart"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bSmartOutput = (tmpname->compare("true") == 0); tmpname = tmpElt->Attribute("ratio"); if (tmpname != NULL) SmartRatioMax = atof(tmpname->c_str()); } // Smart output parameter tmpElt = iterateElmt->FirstChildElement("ABR"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bAbrOutput = (tmpname->compare("true") == 0); tmpname = tmpElt->Attribute("min"); if (tmpname != NULL) AverageBitrate_Min = atoi(tmpname->c_str()); tmpname = tmpElt->Attribute("max"); if (tmpname != NULL) AverageBitrate_Max = atoi(tmpname->c_str()); tmpname = tmpElt->Attribute("step"); if (tmpname != NULL) AverageBitrate_Step = atoi(tmpname->c_str()); } // Copyright parameter tmpElt = iterateElmt->FirstChildElement("Copyright"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bCopyright = (tmpname->compare("true") == 0); } // Copyright parameter tmpElt = iterateElmt->FirstChildElement("CRC"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bCRC = (tmpname->compare("true") == 0); } // Copyright parameter tmpElt = iterateElmt->FirstChildElement("Original"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bOriginal = (tmpname->compare("true") == 0); } // Copyright parameter tmpElt = iterateElmt->FirstChildElement("Private"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bPrivate = (tmpname->compare("true") == 0); } /* // Copyright parameter tmpElt = iterateElmt->FirstChildElement("Bit_reservoir"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bNoBitRes = !(tmpname->compare("true") == 0); } // bitrates tmpElt = iterateElmt->FirstChildElement("bitrate"); tmpname = tmpElt->Attribute("min"); if (tmpname != NULL) { unsigned int uitmp = atoi(tmpname->c_str()); for (int i=0;i<sizeof(the_Bitrates)/sizeof(unsigned int);i++) { if (the_Bitrates[i] == uitmp) { nMinBitrateIndex = i; break; } } } tmpname = tmpElt->Attribute("max"); if (tmpname != NULL) { unsigned int uitmp = atoi(tmpname->c_str()); for (int i=0;i<sizeof(the_Bitrates)/sizeof(unsigned int);i++) { if (the_Bitrates[i] == uitmp) { nMaxBitrateIndex = i; break; } } } */ /* // resampling parameters tmpElt = iterateElmt->FirstChildElement("resampling"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) bResample = (tmpname->compare("true") == 0); unsigned int uitmp = atoi(tmpElt->Attribute("freq")->c_str()); for (int i=0;i<sizeof(the_SamplingFreqs)/sizeof(unsigned int);i++) { if (the_SamplingFreqs[i] == uitmp) { nSamplingFreqIndex = i; break; } } } // VBR parameters tmpElt = iterateElmt->FirstChildElement("VBR"); if (tmpElt != NULL) { tmpname = tmpElt->Attribute("use"); if (tmpname != NULL) { if (tmpname->compare("ABR") == 0) mBRmode = BR_ABR; else if (tmpname->compare("true") == 0) mBRmode = BR_VBR; else mBRmode = BR_CBR; } tmpname = tmpElt->Attribute("header"); if (tmpname != NULL) bXingFrame = (tmpname->compare("true") == 0); tmpname = tmpElt->Attribute("quality"); if (tmpname != NULL) { VbrQuality = atoi(tmpname->c_str()); } tmpname = tmpElt->Attribute("average"); if (tmpname != NULL) { AverageBitrate = atoi(tmpname->c_str()); } else { } } // output parameters tmpElt = iterateElmt->FirstChildElement("output"); if (tmpElt != NULL) { OutputDir = *tmpElt->Attribute("path"); } */ //#ifdef OLD // Channel mode parameter tmpElt = iterateElmt->FirstChildElement("Channel"); if (tmpElt != NULL) { const std::string * tmpStr = tmpElt->Attribute("mode"); if (tmpStr != NULL) { for (int i=0;i<GetChannelLentgh();i++) { if (tmpStr->compare(GetChannelModeString(i)) == 0) { nChannelIndex = i; break; } } } /* tmpname = tmpElt->Attribute("force"); if (tmpname != NULL) bForceChannel = (tmpname->compare("true") == 0); */ } //#endif // OLD // Preset parameter /* tmpElt = iterateElmt->FirstChildElement("Preset"); if (tmpElt != NULL) { const std::string * tmpStr = tmpElt->Attribute("type"); for (int i=0;i<GetPresetLentgh();i++) { if (tmpStr->compare(GetPresetModeString(i)) == 0) { nPresetIndex = i; break; } } } */ } } /** \todo save the parameters * / void AEncodeProperties::SaveParams(const HWND hParentWnd) { char string[MAX_PATH]; /* int nIdx = SendMessage(::GetDlgItem( hParentWnd ,IDC_COMBO_SETTINGS ), CB_GETCURSEL, NULL, NULL); ::SendMessage(::GetDlgItem( hParentWnd ,IDC_COMBO_SETTINGS ), CB_GETLBTEXT , nIdx, (LPARAM) string); * / }*/ bool AEncodeProperties::operator !=(const AEncodeProperties & the_instance) const { /* ::OutputDebugString(bCopyright != the_instance.bCopyright?"1":"-"); ::OutputDebugString(bCRC != the_instance.bCRC ?"2":"-"); ::OutputDebugString(bOriginal != the_instance.bOriginal ?"3":"-"); ::OutputDebugString(bPrivate != the_instance.bPrivate ?"4":"-"); ::OutputDebugString(bNoBitRes != the_instance.bNoBitRes ?"5":"-"); ::OutputDebugString(mBRmode != the_instance.mBRmode ?"6":"-"); ::OutputDebugString(bXingFrame != the_instance.bXingFrame?"7":"-"); ::OutputDebugString(bForceChannel != the_instance.bForceChannel?"8":"-"); ::OutputDebugString(bResample != the_instance.bResample ?"9":"-"); ::OutputDebugString(nChannelIndex != the_instance.nChannelIndex?"10":"-"); ::OutputDebugString(nMinBitrateIndex != the_instance.nMinBitrateIndex?"11":"-"); ::OutputDebugString(nMaxBitrateIndex != the_instance.nMaxBitrateIndex?"12":"-"); ::OutputDebugString(nPresetIndex != the_instance.nPresetIndex?"13":"-"); ::OutputDebugString(VbrQuality != the_instance.VbrQuality?"14":"-"); ::OutputDebugString(AverageBitrate != the_instance.AverageBitrate?"15":"-"); ::OutputDebugString(nSamplingFreqIndex != the_instance.nSamplingFreqIndex?"16":"-"); ::OutputDebugString(OutputDir.compare(the_instance.OutputDir) != 0?"17":"-"); std::string tmp = ""; char tmpI[10]; _itoa(AverageBitrate,tmpI,10); tmp += tmpI; tmp += " != "; _itoa(the_instance.AverageBitrate,tmpI,10); tmp += tmpI; ::OutputDebugString(tmp.c_str()); */ return ((bCopyright != the_instance.bCopyright) || (bCRC != the_instance.bCRC) || (bOriginal != the_instance.bOriginal) || (bPrivate != the_instance.bPrivate) || (bSmartOutput != the_instance.bSmartOutput) || (SmartRatioMax != the_instance.SmartRatioMax) || (bAbrOutput != the_instance.bAbrOutput) || (AverageBitrate_Min != the_instance.AverageBitrate_Min) || (AverageBitrate_Max != the_instance.AverageBitrate_Max) || (AverageBitrate_Step != the_instance.AverageBitrate_Step) || (bNoBitRes != the_instance.bNoBitRes) || (mBRmode != the_instance.mBRmode) || (bXingFrame != the_instance.bXingFrame) || (bForceChannel != the_instance.bForceChannel) || (bResample != the_instance.bResample) || (nChannelIndex != the_instance.nChannelIndex) || (nMinBitrateIndex != the_instance.nMinBitrateIndex) || (nMaxBitrateIndex != the_instance.nMaxBitrateIndex) || (nPresetIndex != the_instance.nPresetIndex) || (VbrQuality != the_instance.VbrQuality) // || (AverageBitrate != the_instance.AverageBitrate) || (nSamplingFreqIndex != the_instance.nSamplingFreqIndex) // || (OutputDir.compare(the_instance.OutputDir) != 0) ); } void AEncodeProperties::SelectSavedParams(const std::string the_string) { // get the values from the saved file if possible if (my_stored_data.LoadFile(my_store_location)) { TiXmlNode* node; node = my_stored_data.FirstChild("lame_acm"); TiXmlElement* CurrentNode = node->FirstChildElement("encodings"); if (CurrentNode != NULL) { CurrentNode->SetAttribute("default",the_string); GetValuesFromKey(the_string, *CurrentNode); my_stored_data.SaveFile(my_store_location); } } } inline void AEncodeProperties::SetAttributeBool(TiXmlElement * the_elt,const std::string & the_string, const bool the_value) const { if (the_value == false) the_elt->SetAttribute(the_string, "false"); else the_elt->SetAttribute(the_string, "true"); } void AEncodeProperties::SaveValuesToElement(TiXmlElement * the_element) const { // get all the parameters saved in this Element TiXmlElement * tmpElt; // Bit Reservoir parameter /* tmpElt = the_element->FirstChildElement("Bit_reservoir"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Bit_reservoir"); SetAttributeBool(tmpElt, "use", !bNoBitRes); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool(tmpElt, "use", !bNoBitRes); } */ // Copyright parameter tmpElt = the_element->FirstChildElement("Copyright"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Copyright"); SetAttributeBool( tmpElt, "use", bCopyright); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bCopyright); } // Smart Output parameter tmpElt = the_element->FirstChildElement("Smart"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Smart"); SetAttributeBool( tmpElt, "use", bSmartOutput); tmpElt->SetAttribute("ratio", SmartRatioMax); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bSmartOutput); tmpElt->SetAttribute("ratio", SmartRatioMax); } // Smart Output parameter tmpElt = the_element->FirstChildElement("ABR"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("ABR"); SetAttributeBool( tmpElt, "use", bAbrOutput); tmpElt->SetAttribute("min", AverageBitrate_Min); tmpElt->SetAttribute("max", AverageBitrate_Max); tmpElt->SetAttribute("step", AverageBitrate_Step); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bAbrOutput); tmpElt->SetAttribute("min", AverageBitrate_Min); tmpElt->SetAttribute("max", AverageBitrate_Max); tmpElt->SetAttribute("step", AverageBitrate_Step); } // CRC parameter tmpElt = the_element->FirstChildElement("CRC"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("CRC"); SetAttributeBool( tmpElt, "use", bCRC); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bCRC); } // Original parameter tmpElt = the_element->FirstChildElement("Original"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Original"); SetAttributeBool( tmpElt, "use", bOriginal); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bOriginal); } // Private parameter tmpElt = the_element->FirstChildElement("Private"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Private"); SetAttributeBool( tmpElt, "use", bPrivate); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bPrivate); } // Channel Mode parameter tmpElt = the_element->FirstChildElement("Channel"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Channel"); tmpElt->SetAttribute("mode", GetChannelModeString(nChannelIndex)); // SetAttributeBool( tmpElt, "force", bForceChannel); the_element->InsertEndChild(*tmpElt); } else { tmpElt->SetAttribute("mode", GetChannelModeString(nChannelIndex)); // SetAttributeBool( tmpElt, "force", bForceChannel); } /* // Preset parameter tmpElt = the_element->FirstChildElement("Preset"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("Preset"); tmpElt->SetAttribute("type", GetPresetModeString(nPresetIndex)); the_element->InsertEndChild(*tmpElt); } else { tmpElt->SetAttribute("type", GetPresetModeString(nPresetIndex)); } // Bitrate parameter tmpElt = the_element->FirstChildElement("bitrate"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("bitrate"); tmpElt->SetAttribute("min", the_Bitrates[nMinBitrateIndex]); tmpElt->SetAttribute("max", the_Bitrates[nMaxBitrateIndex]); the_element->InsertEndChild(*tmpElt); } else { tmpElt->SetAttribute("min", the_Bitrates[nMinBitrateIndex]); tmpElt->SetAttribute("max", the_Bitrates[nMaxBitrateIndex]); } // Output Directory parameter tmpElt = the_element->FirstChildElement("output"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("output"); tmpElt->SetAttribute("path", OutputDir); the_element->InsertEndChild(*tmpElt); } else { tmpElt->SetAttribute("path", OutputDir); } */ /* // Resampling parameter tmpElt = the_element->FirstChildElement("resampling"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("resampling"); SetAttributeBool( tmpElt, "use", bResample); tmpElt->SetAttribute("freq", the_SamplingFreqs[nSamplingFreqIndex]); the_element->InsertEndChild(*tmpElt); } else { SetAttributeBool( tmpElt, "use", bResample); tmpElt->SetAttribute("freq", the_SamplingFreqs[nSamplingFreqIndex]); } // VBR parameter tmpElt = the_element->FirstChildElement("VBR"); if (tmpElt == NULL) { tmpElt = new TiXmlElement("VBR"); if (mBRmode == BR_ABR) tmpElt->SetAttribute("use", "ABR"); else SetAttributeBool( tmpElt, "use", (mBRmode != BR_CBR)); SetAttributeBool( tmpElt, "header", bXingFrame); tmpElt->SetAttribute("quality", VbrQuality); tmpElt->SetAttribute("average", AverageBitrate); the_element->InsertEndChild(*tmpElt); } else { if (mBRmode == BR_ABR) tmpElt->SetAttribute("use", "ABR"); else SetAttributeBool( tmpElt, "use", (mBRmode != BR_CBR)); SetAttributeBool( tmpElt, "header", bXingFrame); tmpElt->SetAttribute("quality", VbrQuality); tmpElt->SetAttribute("average", AverageBitrate); } */ } bool AEncodeProperties::HandleDialogCommand(const HWND parentWnd, const WPARAM wParam, const LPARAM lParam) { UINT command; command = GET_WM_COMMAND_ID(wParam, lParam); switch (command) { case IDOK : { bool bShouldEnd = true; // save parameters char string[MAX_PATH]; // ::GetWindowText(::GetDlgItem( parentWnd, IDC_COMBO_SETTINGS), string, MAX_PATH); wsprintf(string,"Current"); // only the Current config is supported at the moment my_debug.OutPut("my_hModule = 0x%08X",my_hModule); /* AEncodeProperties tmpDlgProps(my_hModule); AEncodeProperties tmpSavedProps(my_hModule); //#ifdef OLD tmpDlgProps.UpdateValueFromDlg(parentWnd); tmpSavedProps.SelectSavedParams(string); tmpSavedProps.ParamsRestore(); // check if the values from the DLG are the same as the one saved in the config file // if yes, just do nothing /* if (tmpDlgProps != tmpSavedProps) { int save; if (strcmp(string,"Current") == 0) { // otherwise, prompt the user if he wants to overwrite the settings TCHAR tmpStr[250]; ::LoadString(AOut::GetInstance(),IDS_STRING_PROMPT_REPLACE_CURRENT,tmpStr,250); save = AOut::MyMessageBox( tmpStr, MB_OKCANCEL|MB_ICONQUESTION, parentWnd); } else { // otherwise, prompt the user if he wants to overwrite the settings TCHAR tmpStr[250]; ::LoadString(AOut::GetInstance(),IDS_STRING_PROMPT_REPLACE_SETING,tmpStr,250); TCHAR tmpDsp[500]; wsprintf(tmpDsp,tmpStr,string); save = AOut::MyMessageBox( tmpDsp, MB_YESNOCANCEL|MB_ICONQUESTION, parentWnd); } if (save == IDCANCEL) bShouldEnd = false; else if (save == IDNO) { // save the values in 'current' UpdateValueFromDlg(parentWnd); SaveValuesToStringKey("Current"); SelectSavedParams("Current"); } else { // do so and save in XML UpdateValueFromDlg(parentWnd); SaveValuesToStringKey(string); } } */ //#endif // OLD my_debug.OutPut("before : nChannelIndex %d, bCRC %d, bCopyright %d, bOriginal %d, bPrivate %d",nChannelIndex, bCRC, bCopyright, bOriginal, bPrivate); my_debug.OutPut("call UpdateValueFromDlg"); UpdateValueFromDlg(parentWnd); my_debug.OutPut("call SaveValuesToStringKey"); SaveValuesToStringKey("Current"); // only Current config is supported now // SaveParams(parentWnd); //my_debug.OutPut("call SelectSavedParams"); // SelectSavedParams(string); // UpdateDlgFromValue(parentWnd); my_debug.OutPut("finished saving"); if (bShouldEnd) { RemoveProp(parentWnd, "AEncodeProperties-Config"); EndDialog(parentWnd, true); } } break; case IDCANCEL: RemoveProp(parentWnd, "AEncodeProperties-Config"); EndDialog(parentWnd, false); break; /* case IDC_FIND_DLL: { OPENFILENAME file; char DllLocation[512]; wsprintf(DllLocation,"%s",GetDllLocation()); memset(&file, 0, sizeof(file)); file.lStructSize = sizeof(file); file.hwndOwner = parentWnd; file.Flags = OFN_FILEMUSTEXIST | OFN_NODEREFERENCELINKS | OFN_ENABLEHOOK | OFN_EXPLORER ; /// file.lpstrFile = AOut::the_AOut->DllLocation; file.lpstrFile = DllLocation; file.lpstrFilter = "Lame DLL (lame_enc.dll)\0LAME_ENC.DLL\0DLL (*.dll)\0*.DLL\0All (*.*)\0*.*\0"; file.nFilterIndex = 1; file.nMaxFile = sizeof(DllLocation); file.lpfnHook = DLLFindCallback; // use to validate the DLL chosen GetOpenFileName(&file); SetDllLocation(DllLocation); // use this filename if necessary } break; */ /* case IDC_BUTTON_OUTPUT: { #ifndef SIMPLE_FOLDER BROWSEINFO info; memset(&info,0,sizeof(info)); char FolderName[MAX_PATH]; info.hwndOwner = parentWnd; info.pszDisplayName = FolderName; info.lpfn = BrowseFolderCallbackroc; info.lParam = (LPARAM) this; // get the localised window title TCHAR output[250]; ::LoadString(AOut::GetInstance(),IDS_STRING_DIR_SELECT,output,250); info.lpszTitle = output; #ifdef BIF_EDITBOX info.ulFlags |= BIF_EDITBOX; #else // BIF_EDITBOX info.ulFlags |= 0x0010; #endif // BIF_EDITBOX #ifdef BIF_VALIDATE info.ulFlags |= BIF_VALIDATE; #else // BIF_VALIDATE info.ulFlags |= 0x0020; #endif // BIF_VALIDATE #ifdef BIF_NEWDIALOGSTYLE info.ulFlags |= BIF_NEWDIALOGSTYLE; #else // BIF_NEWDIALOGSTYLE info.ulFlags |= 0x0040; #endif // BIF_NEWDIALOGSTYLE ITEMIDLIST *item = SHBrowseForFolder(&info); if (item != NULL) { char tmpOutputDir[MAX_PATH]; wsprintf(tmpOutputDir,"%s",GetOutputDirectory()); SHGetPathFromIDList( item,tmpOutputDir ); SetOutputDirectory( tmpOutputDir ); ::SetWindowText(GetDlgItem( parentWnd, IDC_EDIT_OUTPUTDIR), tmpOutputDir); // wsprintf(OutputDir,FolderName); } #else // SIMPLE_FOLDER OPENFILENAME file; memset(&file, 0, sizeof(file)); file.lStructSize = sizeof(file); file.hwndOwner = parentWnd; file.Flags = OFN_FILEMUSTEXIST | OFN_NODEREFERENCELINKS | OFN_ENABLEHOOK | OFN_EXPLORER ; // file.lpstrFile = GetDllLocation(); // file.lpstrFile = GetOutputDirectory(); file.lpstrInitialDir = GetOutputDirectory(); file.lpstrFilter = "A Directory\0.*\0"; // file.nFilterIndex = 1; file.nMaxFile = MAX_PATH; // file.lpfnHook = DLLFindCallback; // use to validate the DLL chosen // file.Flags = OFN_ENABLESIZING | OFN_NOREADONLYRETURN | OFN_HIDEREADONLY; file.Flags = OFN_NOREADONLYRETURN | OFN_HIDEREADONLY | OFN_EXPLORER; TCHAR output[250]; ::LoadString(AOut::GetInstance(),IDS_STRING_DIR_SELECT,output,250); file.lpstrTitle = output; GetSaveFileName(&file); #endif // SIMPLE_FOLDER } break; */ case IDC_CHECK_ENC_ABR: EnableAbrOptions(parentWnd, ::IsDlgButtonChecked( parentWnd, IDC_CHECK_ENC_ABR) == BST_CHECKED); break; /* case IDC_RADIO_BITRATE_CBR: AEncodeProperties::DisplayVbrOptions(parentWnd, AEncodeProperties::BR_CBR); break; case IDC_RADIO_BITRATE_VBR: AEncodeProperties::DisplayVbrOptions(parentWnd, AEncodeProperties::BR_VBR); break; case IDC_RADIO_BITRATE_ABR: AEncodeProperties::DisplayVbrOptions(parentWnd, AEncodeProperties::BR_ABR); break; case IDC_CHECK_RESAMPLE: { bool tmp_bResampleUsed = (::IsDlgButtonChecked( parentWnd, IDC_CHECK_RESAMPLE) == BST_CHECKED); if (tmp_bResampleUsed) { ::EnableWindow(::GetDlgItem(parentWnd,IDC_COMBO_SAMPLEFREQ), TRUE); } else { ::EnableWindow(::GetDlgItem(parentWnd,IDC_COMBO_SAMPLEFREQ), FALSE); } } break; */ /* case IDC_COMBO_SETTINGS: // if (CBN_SELCHANGE == GET_WM_COMMAND_CMD(wParam, lParam)) if (CBN_SELENDOK == GET_WM_COMMAND_CMD(wParam, lParam)) { char string[MAX_PATH]; int nIdx = SendMessage(HWND(lParam), CB_GETCURSEL, NULL, NULL); SendMessage(HWND(lParam), CB_GETLBTEXT , nIdx, (LPARAM) string); // get the info corresponding to the new selected item SelectSavedParams(string); UpdateDlgFromValue(parentWnd); } break; */ /* case IDC_BUTTON_CONFIG_SAVE: { // save the data in the current config char string[MAX_PATH]; ::GetWindowText(::GetDlgItem( parentWnd, IDC_COMBO_SETTINGS), string, MAX_PATH); UpdateValueFromDlg(parentWnd); SaveValuesToStringKey(string); SelectSavedParams(string); UpdateConfigs(parentWnd); UpdateDlgFromValue(parentWnd); } break; case IDC_BUTTON_CONFIG_RENAME: { char string[MAX_PATH]; ::GetWindowText(::GetDlgItem( parentWnd, IDC_COMBO_SETTINGS), string, MAX_PATH); if (RenameCurrentTo(string)) { // Update the names displayed UpdateConfigs(parentWnd); } } break; case IDC_BUTTON_CONFIG_DELETE: { char string[MAX_PATH]; ::GetWindowText(::GetDlgItem( parentWnd, IDC_COMBO_SETTINGS), string, MAX_PATH); if (DeleteConfig(string)) { // Update the names displayed UpdateConfigs(parentWnd); UpdateDlgFromValue(parentWnd); } } break; */ } return FALSE; } bool AEncodeProperties::RenameCurrentTo(const std::string & new_config_name) { bool bResult = false; // display all the names of the saved configs // get the values from the saved file if possible if (my_stored_data.LoadFile(my_store_location)) { TiXmlNode* node; node = my_stored_data.FirstChild("lame_acm"); TiXmlElement* CurrentNode = node->FirstChildElement("encodings"); if (CurrentNode->Attribute("default") != NULL) { std::string CurrentConfigName = *CurrentNode->Attribute("default"); // no rename possible for Current if (CurrentConfigName == "") { bResult = true; } else if (CurrentConfigName != "Current") { // find the config that correspond to CurrentConfig TiXmlElement* iterateElmt = CurrentNode->FirstChildElement("config"); // int Idx = 0; while (iterateElmt != NULL) { const std::string * tmpname = iterateElmt->Attribute("name"); /** \todo support language names */ if (tmpname != NULL) { if (tmpname->compare(CurrentConfigName) == 0) { iterateElmt->SetAttribute("name",new_config_name); bResult = true; break; } } // Idx++; iterateElmt = iterateElmt->NextSiblingElement("config"); } } if (bResult) { CurrentNode->SetAttribute("default",new_config_name); my_stored_data.SaveFile(my_store_location); } } } return bResult; } bool AEncodeProperties::DeleteConfig(const std::string & config_name) { bool bResult = false; if (config_name != "Current") { // display all the names of the saved configs // get the values from the saved file if possible if (my_stored_data.LoadFile(my_store_location)) { TiXmlNode* node; node = my_stored_data.FirstChild("lame_acm"); TiXmlElement* CurrentNode = node->FirstChildElement("encodings"); TiXmlElement* iterateElmt = CurrentNode->FirstChildElement("config"); // int Idx = 0; while (iterateElmt != NULL) { const std::string * tmpname = iterateElmt->Attribute("name"); /** \todo support language names */ if (tmpname != NULL) { if (tmpname->compare(config_name) == 0) { CurrentNode->RemoveChild(iterateElmt); bResult = true; break; } } // Idx++; iterateElmt = iterateElmt->NextSiblingElement("config"); } } if (bResult) { my_stored_data.SaveFile(my_store_location); // select a new default config : "Current" SelectSavedParams("Current"); } } return bResult; } void AEncodeProperties::UpdateConfigs(const HWND HwndDlg) { // Add User configs // SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SETTINGS), CB_RESETCONTENT , NULL, NULL); // display all the names of the saved configs // get the values from the saved file if possible if (my_stored_data.LoadFile(my_store_location)) { TiXmlNode* node; node = my_stored_data.FirstChild("lame_acm"); TiXmlElement* CurrentNode = node->FirstChildElement("encodings"); std::string CurrentConfig = ""; if (CurrentNode->Attribute("default") != NULL) { CurrentConfig = *CurrentNode->Attribute("default"); } TiXmlElement* iterateElmt; my_debug.OutPut("are we here ?"); // find the config that correspond to CurrentConfig iterateElmt = CurrentNode->FirstChildElement("config"); int Idx = 0; while (iterateElmt != NULL) { const std::string * tmpname = iterateElmt->Attribute("name"); /** \todo support language names */ if (tmpname != NULL) { // SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SETTINGS), CB_ADDSTRING, NULL, (LPARAM) tmpname->c_str()); if (tmpname->compare(CurrentConfig) == 0) { // SendMessage(GetDlgItem( HwndDlg, IDC_COMBO_SETTINGS), CB_SETCURSEL, Idx, NULL); SelectSavedParams(*tmpname); UpdateDlgFromValue(HwndDlg); } } my_debug.OutPut("Idx = %d",Idx); Idx++; // only Current config supported now // iterateElmt = iterateElmt->NextSiblingElement("config"); iterateElmt = NULL; my_debug.OutPut("iterateElmt = 0x%08X",iterateElmt); } } } /* void AEncodeProperties::UpdateAbrSteps(unsigned int min, unsigned int max, unsigned int step) const { } */ void AEncodeProperties::UpdateDlgFromSlides(HWND hwndDlg) const { UINT value_min, value_max, value_step, value; char tmp[4]; value_min = SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_MIN), TBM_GETPOS, NULL, NULL); value_max = SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_MAX), TBM_GETPOS, NULL, NULL); if (value_min>value_max) { SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_MIN), TBM_SETPOS, TRUE, value_max); UpdateDlgFromSlides(hwndDlg); return; } if (value_max<value_min) { SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_MAX), TBM_SETPOS, TRUE, value_min); UpdateDlgFromSlides(hwndDlg); return; } wsprintf(tmp,"%3d",value_min); ::SetWindowText(GetDlgItem( hwndDlg, IDC_STATIC_AVERAGE_MIN_VALUE), tmp); SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETRANGEMIN, TRUE, value_min); wsprintf(tmp,"%3d",value_max); ::SetWindowText(GetDlgItem( hwndDlg, IDC_STATIC_AVERAGE_MAX_VALUE), tmp); SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETRANGEMAX, TRUE, value_max); value_step = SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_STEP), TBM_GETPOS, NULL, NULL); wsprintf(tmp,"%3d",value_step); ::SetWindowText(GetDlgItem( hwndDlg, IDC_STATIC_AVERAGE_STEP_VALUE), tmp); SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_CLEARTICS, TRUE, 0); for(UINT i=value_max; i>=value_min;i-=value_step) { SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETTIC, 0, i); } SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETLINESIZE, 0, value_step); SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_SETPAGESIZE, 0, value_step); value = SendMessage(GetDlgItem( hwndDlg, IDC_SLIDER_AVERAGE_SAMPLE), TBM_GETPOS, NULL, NULL); wsprintf(tmp,"%3d",value); ::SetWindowText(GetDlgItem( hwndDlg, IDC_STATIC_AVERAGE_SAMPLE_VALUE), tmp); } void AEncodeProperties::EnableAbrOptions(HWND hDialog, bool enable) { ::EnableWindow(::GetDlgItem( hDialog, IDC_SLIDER_AVERAGE_MIN), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_SLIDER_AVERAGE_MAX), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_SLIDER_AVERAGE_STEP), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_SLIDER_AVERAGE_SAMPLE), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_MIN), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_MAX), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_STEP), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_SAMPLE), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_MIN_VALUE), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_MAX_VALUE), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_STEP_VALUE), enable); ::EnableWindow(::GetDlgItem( hDialog, IDC_STATIC_AVERAGE_SAMPLE_VALUE), enable); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/Makefile.in��������������������������������������������������������������������������000644 �001751 �001751 �00000046161 13170220146 016534� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ACM ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global TODO DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign SUBDIRS = ADbg ddk tinyxml EXTRA_DIST = \ ACM.cpp \ ACM.h \ ACMStream.cpp \ ACMStream.h \ AEncodeProperties.cpp \ AEncodeProperties.h \ DecodeStream.cpp \ DecodeStream.h \ LameACM.inf \ TODO \ acm.rc \ adebug.h \ lame.ico \ lameACM.def \ lame_acm.xml \ main.cpp \ readme.txt \ resource.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ACM/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ACM/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ACM.cpp������������������������������������������������������������������������������000644 �001751 �001751 �00000136714 10623153144 015602� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Lame ACM wrapper, encode/decode MP3 based RIFF/AVI files in MS Windows * * Copyright (c) 2002 Steve Lhomme <steve.lhomme at free.fr> * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /*! \author Steve Lhomme \version \$Id: ACM.cpp,v 1.20 2007/05/17 22:25:40 robert Exp $ */ #if !defined(STRICT) #define STRICT #endif // STRICT #include <algorithm> #include <windows.h> #include <windowsx.h> #include <intshcut.h> #include <mmreg.h> #include <msacm.h> #include <msacmdrv.h> #include <assert.h> #include <lame.h> #include "adebug.h" #include "resource.h" #include "ACMStream.h" #ifdef ENABLE_DECODING #include "DecodeStream.h" #endif // ENABLE_DECODING #include "ACM.h" #ifndef IDC_HAND #define IDC_HAND MAKEINTRESOURCE(32649) #endif // IDC_HAND char ACM::VersionString[120]; const char ACM_VERSION[] = "0.9.2"; #ifdef WIN32 // // 32-bit versions // #if (WINVER >= 0x0400) #define VERSION_ACM_DRIVER MAKE_ACM_VERSION(4, 0, 0) #else #define VERSION_ACM_DRIVER MAKE_ACM_VERSION(3, 51, 0) #endif #define VERSION_MSACM MAKE_ACM_VERSION(3, 50, 0) #else // // 16-bit versions // #define VERSION_ACM_DRIVER MAKE_ACM_VERSION(1, 0, 0) #define VERSION_MSACM MAKE_ACM_VERSION(2, 1, 0) #endif #define PERSONAL_FORMAT WAVE_FORMAT_MPEGLAYER3 #define SIZE_FORMAT_STRUCT sizeof(MPEGLAYER3WAVEFORMAT) //#define SIZE_FORMAT_STRUCT 0 //static const char channel_mode[][13] = {"mono","stereo","joint stereo","dual channel"}; static const char channel_mode[][13] = {"mono","stereo"}; static const unsigned int mpeg1_freq[] = {48000,44100,32000}; static const unsigned int mpeg2_freq[] = {24000,22050,16000,12000,11025,8000}; static const unsigned int mpeg1_bitrate[] = {320, 256, 224, 192, 160, 128, 112, 96, 80, 64, 56, 48, 40, 32}; static const unsigned int mpeg2_bitrate[] = {160, 144, 128, 112, 96, 80, 64, 56, 48, 40, 32, 24, 16, 8}; #define SIZE_CHANNEL_MODE (sizeof(channel_mode) / (sizeof(char) * 13)) #define SIZE_FREQ_MPEG1 (sizeof(mpeg1_freq) / sizeof(unsigned int)) #define SIZE_FREQ_MPEG2 (sizeof(mpeg2_freq) / sizeof(unsigned int)) #define SIZE_BITRATE_MPEG1 (sizeof(mpeg1_bitrate) / sizeof(unsigned int)) #define SIZE_BITRATE_MPEG2 (sizeof(mpeg2_bitrate) / sizeof(unsigned int)) static const int FORMAT_TAG_MAX_NB = 2; // PCM and PERSONAL (mandatory to have at least PCM and your format) static const int FILTER_TAG_MAX_NB = 0; // this is a codec, not a filter // number of supported PCM formats static const int FORMAT_MAX_NB_PCM = 2 * // number of PCM channel mode (stereo/mono) (SIZE_FREQ_MPEG1 + // number of MPEG 1 sampling freq SIZE_FREQ_MPEG2); // number of MPEG 2 sampling freq ////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////// bool bitrate_item::operator<(const bitrate_item & other_bitrate) const { return (other_bitrate.frequency < frequency || (other_bitrate.frequency == frequency && (other_bitrate.bitrate < bitrate || (other_bitrate.bitrate == bitrate && (other_bitrate.channels < channels))))); } ////////////////////////////////////////////////////////////////////// // Configuration Dialog ////////////////////////////////////////////////////////////////////// /* static CALLBACK ConfigProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { BOOL bResult; switch (uMsg) { case WM_COMMAND: UINT command; command = GET_WM_COMMAND_ID(wParam, lParam); if (IDOK == command) { EndDialog(hwndDlg, (IDOK == command)); } else if (IDCANCEL == command) { EndDialog(hwndDlg, (IDOK == command)); } bResult = FALSE; break; default: bResult = FALSE; // will be treated by DefWindowProc } return bResult; } inline DWORD ACM::Configure(HWND hParentWindow, LPDRVCONFIGINFO pConfig) { my_debug.OutPut(DEBUG_LEVEL_FUNC_START, "ACM : Configure (Parent Window = 0x%08X)",hParentWindow); DialogBoxParam( my_hModule, MAKEINTRESOURCE(IDD_CONFIG), hParentWindow, ::ConfigProc , (LPARAM)this); return DRVCNF_OK; // Can also return // DRVCNF_CANCEL // and DRVCNF_RESTART } */ ////////////////////////////////////////////////////////////////////// // About Dialog ////////////////////////////////////////////////////////////////////// static BOOL CALLBACK AboutProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { static HBRUSH hBrushStatic = NULL; // static LOGFONT lf; // structure for font information // static HFONT hfnt; static HCURSOR hcOverCursor = NULL; BOOL bResult; switch (uMsg) { case WM_INITDIALOG: char tmp[150]; wsprintf(tmp,"LAME MP3 codec v%s", ACM::GetVersionString()); ::SetWindowText(GetDlgItem( hwndDlg, IDC_STATIC_ABOUT_TITLE), tmp); /* ::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf); lf.lfUnderline = TRUE; hfnt = ::CreateFontIndirect(&lf); ::SendMessage(::GetDlgItem(hwndDlg,IDC_STATIC_ABOUT_URL), WM_SETFONT, (WPARAM) hfnt, TRUE); * / hBrushStatic = ::CreateSolidBrush(::GetSysColor (COLOR_BTNFACE)); */ hcOverCursor = ::LoadCursor(NULL,(LPCTSTR)IDC_HAND); if (hcOverCursor == NULL) hcOverCursor = ::LoadCursor(NULL,(LPCTSTR)IDC_CROSS); bResult = TRUE; break; /* case WM_CTLCOLORSTATIC: /// \todo only if there are URLs if ((HWND)lParam == ::GetDlgItem(hwndDlg,IDC_STATIC_ABOUT_URL)) { ::SetTextColor((HDC)wParam, ::GetSysColor (COLOR_HIGHLIGHT)); ::SetBkColor((HDC)wParam, ::GetSysColor (COLOR_BTNFACE)); return (LRESULT) hBrushStatic; } else return (LRESULT) NULL; */ case WM_MOUSEMOVE: { POINT pnt; ::GetCursorPos(&pnt); RECT rect; ::GetWindowRect( ::GetDlgItem(hwndDlg,IDC_STATIC_ABOUT_URL), &rect); if ( ::PtInRect(&rect,pnt) ) { ::SetCursor(hcOverCursor); } } break; case WM_LBUTTONUP: { POINT pnt; ::GetCursorPos(&pnt); RECT rect; ::GetWindowRect( ::GetDlgItem(hwndDlg,IDC_STATIC_ABOUT_URL), &rect); TCHAR Url[200]; bool bUrl = false; if (::PtInRect(&rect,pnt)) { wsprintf(Url,get_lame_url()); bUrl = true; } if (bUrl) { LPSTR tmpStr; HRESULT hresult = ::TranslateURL(Url, TRANSLATEURL_FL_GUESS_PROTOCOL|TRANSLATEURL_FL_GUESS_PROTOCOL, &tmpStr); if (hresult == S_OK) ::ShellExecute(hwndDlg,"open",tmpStr,NULL,"",SW_SHOWMAXIMIZED ); else if (hresult == S_FALSE) ::ShellExecute(hwndDlg,"open",Url,NULL,"",SW_SHOWMAXIMIZED ); } } break; case WM_COMMAND: UINT command; command = GET_WM_COMMAND_ID(wParam, lParam); if (IDOK == command) { EndDialog(hwndDlg, TRUE); } bResult = FALSE; break; case IDC_STATIC_ABOUT_URL: break; default: bResult = FALSE; // will be treated by DefWindowProc } return bResult; } inline DWORD ACM::About(HWND hParentWindow) { my_debug.OutPut(DEBUG_LEVEL_FUNC_START, "ACM : About (Parent Window = 0x%08X)",hParentWindow); DialogBoxParam( my_hModule, MAKEINTRESOURCE(IDD_ABOUT), hParentWindow, ::AboutProc , (LPARAM)this); return DRVCNF_OK; // Can also return // DRVCNF_CANCEL // and DRVCNF_RESTART } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ACM::ACM( HMODULE hModule ) :my_hModule(hModule), my_hIcon(NULL), my_debug(ADbg(DEBUG_LEVEL_CREATION)), my_EncodingProperties(hModule) { my_EncodingProperties.ParamsRestore(); /// \todo get the debug level from the registry unsigned char DebugFileName[512]; char tmp[128]; wsprintf(tmp,"LAMEacm 0x%08X",this); my_debug.setPrefix(tmp); /// \todo get it from the registry my_debug.setIncludeTime(true); /// \todo get it from the registry // Check in the registry if we have to Output Debug information DebugFileName[0] = '\0'; HKEY OssKey; if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\MUKOLI", 0, KEY_READ , &OssKey ) == ERROR_SUCCESS) { DWORD DataType; DWORD DebugFileNameSize = 512; if (RegQueryValueEx( OssKey, "DebugFile", NULL, &DataType, DebugFileName, &DebugFileNameSize ) == ERROR_SUCCESS) { if (DataType == REG_SZ) { my_debug.setUseFile(true); my_debug.setDebugFile((char *)DebugFileName); my_debug.OutPut("Debug file is %s",(char *)DebugFileName); } } } wsprintf(VersionString,"%s - %s", ACM_VERSION, get_lame_version() ); BuildBitrateTable(); my_debug.OutPut(DEBUG_LEVEL_FUNC_START, "New ACM Creation (0x%08X)",this); } ACM::~ACM() { // not used, it's done automatically when closing the driver if (my_hIcon != NULL) // CloseHandle(my_hIcon); bitrate_table.clear(); my_debug.OutPut(DEBUG_LEVEL_FUNC_START, "ACM Deleted (0x%08X)",this); } ////////////////////////////////////////////////////////////////////// // Main message handler ////////////////////////////////////////////////////////////////////// LONG ACM::DriverProcedure(const HDRVR hdrvr, const UINT msg, LONG lParam1, LONG lParam2) { DWORD dwRes = 0L; //my_debug.OutPut(DEBUG_LEVEL_MSG, "message 0x%08X for ThisACM 0x%08X", msg, this); switch (msg) { case DRV_INSTALL: my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_INSTALL"); // Sent when the driver is installed. dwRes = DRVCNF_OK; // Can also return break; // DRVCNF_CANCEL // and DRV_RESTART case DRV_REMOVE: // Sent when the driver is removed. my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_REMOVE"); dwRes = 1L; // return value ignored break; case DRV_QUERYCONFIGURE: my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_QUERYCONFIGURE"); // Sent to determine if the driver can be // configured. dwRes = 1L; // Zero indicates configuration break; // NOT supported case DRV_CONFIGURE: my_debug.OutPut(DEBUG_LEVEL_MSG, "DRV_CONFIGURE"); // Sent to display the configuration // dialog box for the driver. // dwRes = Configure( (HWND) lParam1, (LPDRVCONFIGINFO) lParam2 ); if (my_EncodingProperties.Config(my_hModule, (HWND) lParam1)) { dwRes = DRVCNF_OK; // Can also return // DRVCNF_CANCEL // and DRVCNF_RESTART } else { dwRes = DRVCNF_CANCEL; } break; /************************************** // ACM additional messages ***************************************/ case ACMDM_DRIVER_ABOUT: my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_DRIVER_ABOUT"); dwRes = About( (HWND) lParam1 ); break; case ACMDM_DRIVER_DETAILS: // acmDriverDetails // Fill-in general informations about the driver/codec my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_DRIVER_DETAILS"); dwRes = OnDriverDetails(hdrvr, (LPACMDRIVERDETAILS) lParam1); break; case ACMDM_FORMATTAG_DETAILS: // acmFormatTagDetails my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMATTAG_DETAILS"); dwRes = OnFormatTagDetails((LPACMFORMATTAGDETAILS) lParam1, lParam2); break; case ACMDM_FORMAT_DETAILS: // acmFormatDetails my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMAT_DETAILS"); dwRes = OnFormatDetails((LPACMFORMATDETAILS) lParam1, lParam2); break; case ACMDM_FORMAT_SUGGEST: // acmFormatSuggest // Sent to determine if the driver can be // configured. my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_FORMAT_SUGGEST"); dwRes = OnFormatSuggest((LPACMDRVFORMATSUGGEST) lParam1); break; /************************************** // ACM stream messages ***************************************/ case ACMDM_STREAM_OPEN: // Sent to determine if the driver can be // configured. my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_OPEN"); dwRes = OnStreamOpen((LPACMDRVSTREAMINSTANCE) lParam1); break; case ACMDM_STREAM_SIZE: // returns a recommended size for a source // or destination buffer on an ACM stream my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_SIZE"); dwRes = OnStreamSize((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMDRVSTREAMSIZE)lParam2); break; case ACMDM_STREAM_PREPARE: // prepares an ACMSTREAMHEADER structure for // an ACM stream conversion my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_PREPARE"); dwRes = OnStreamPrepareHeader((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMSTREAMHEADER) lParam2); break; case ACMDM_STREAM_UNPREPARE: // cleans up the preparation performed by // the ACMDM_STREAM_PREPARE message for an ACM stream my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_UNPREPARE"); dwRes = OnStreamUnPrepareHeader((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMSTREAMHEADER) lParam2); break; case ACMDM_STREAM_CONVERT: // perform a conversion on the specified conversion stream my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_CONVERT"); dwRes = OnStreamConvert((LPACMDRVSTREAMINSTANCE)lParam1, (LPACMDRVSTREAMHEADER) lParam2); break; case ACMDM_STREAM_CLOSE: // closes an ACM conversion stream my_debug.OutPut(DEBUG_LEVEL_MSG, "ACMDM_STREAM_CLOSE"); dwRes = OnStreamClose((LPACMDRVSTREAMINSTANCE)lParam1); break; /************************************** // Unknown message ***************************************/ default: // Process any other messages. my_debug.OutPut(DEBUG_LEVEL_MSG, "ACM::DriverProc unknown message (0x%08X), lParam1 = 0x%08X, lParam2 = 0x%08X", msg, lParam1, lParam2); return DefDriverProc ((DWORD)this, hdrvr, msg, lParam1, lParam2); } return dwRes; } ////////////////////////////////////////////////////////////////////// // Special message handlers ////////////////////////////////////////////////////////////////////// /*! Retreive the config details of this ACM driver The index represent the specified format \param a_FormatDetails will be filled with all the corresponding data */ inline DWORD ACM::OnFormatDetails(LPACMFORMATDETAILS a_FormatDetails, const LPARAM a_Query) { DWORD Result = ACMERR_NOTPOSSIBLE; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACM_FORMATDETAILS a_Query = 0x%08X",a_Query); switch (a_Query & ACM_FORMATDETAILSF_QUERYMASK) { // Fill-in the informations corresponding to the FormatDetails->dwFormatTagIndex case ACM_FORMATDETAILSF_INDEX : my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "enter ACM_FORMATDETAILSF_INDEX for index 0x%04X:%03d",a_FormatDetails->dwFormatTag,a_FormatDetails->dwFormatIndex); if (a_FormatDetails->dwFormatTag == PERSONAL_FORMAT) { if (a_FormatDetails->dwFormatIndex < GetNumberEncodingFormats()) { LPWAVEFORMATEX WaveExt; WaveExt = a_FormatDetails->pwfx; WaveExt->wFormatTag = PERSONAL_FORMAT; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "format in : channels %d, sample rate %d", WaveExt->nChannels, WaveExt->nSamplesPerSec); GetMP3FormatForIndex(a_FormatDetails->dwFormatIndex, *WaveExt, a_FormatDetails->szFormat); my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "format out : channels %d, sample rate %d", WaveExt->nChannels, WaveExt->nSamplesPerSec); Result = MMSYSERR_NOERROR; } else { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACM_FORMATDETAILSF_INDEX unknown index 0x%04X:%03d",a_FormatDetails->dwFormatTag,a_FormatDetails->dwFormatIndex); } } else if (a_FormatDetails->dwFormatTag == WAVE_FORMAT_PCM) { if (a_FormatDetails->dwFormatIndex < FORMAT_MAX_NB_PCM) { LPWAVEFORMATEX WaveExt; WaveExt = a_FormatDetails->pwfx; WaveExt->wFormatTag = WAVE_FORMAT_PCM; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "format in : channels %d, sample rate %d", WaveExt->nChannels, WaveExt->nSamplesPerSec); GetPCMFormatForIndex(a_FormatDetails->dwFormatIndex, *WaveExt, a_FormatDetails->szFormat); my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "format out : channels %d, sample rate %d", WaveExt->nChannels, WaveExt->nSamplesPerSec); Result = MMSYSERR_NOERROR; } else { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACM_FORMATDETAILSF_INDEX unknown index 0x%04X:%03d",a_FormatDetails->dwFormatTag,a_FormatDetails->dwFormatIndex); } } else { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Unknown a_FormatDetails->dwFormatTag = 0x%08X",a_FormatDetails->dwFormatTag); } case ACM_FORMATDETAILSF_FORMAT : /// \todo we may output the corresponding strong (only for personal format) LPWAVEFORMATEX WaveExt; WaveExt = a_FormatDetails->pwfx; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "enter ACM_FORMATDETAILSF_FORMAT : 0x%04X:%03d, format in : channels %d, sample rate %d",a_FormatDetails->dwFormatTag,a_FormatDetails->dwFormatIndex, WaveExt->nChannels, WaveExt->nSamplesPerSec); Result = MMSYSERR_NOERROR; break; default: Result = ACMERR_NOTPOSSIBLE; break; } a_FormatDetails->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC; return Result; } /*! Retreive the details of each known format by this ACM driver The index represent the specified format (0 = MP3 / 1 = PCM) \param a_FormatTagDetails will be filled with all the corresponding data */ inline DWORD ACM::OnFormatTagDetails(LPACMFORMATTAGDETAILS a_FormatTagDetails, const LPARAM a_Query) { DWORD Result; DWORD the_format = WAVE_FORMAT_UNKNOWN; // the format to give details if (a_FormatTagDetails->cbStruct >= sizeof(*a_FormatTagDetails)) { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACMDM_FORMATTAG_DETAILS, a_Query = 0x%08X",a_Query); switch(a_Query & ACM_FORMATTAGDETAILSF_QUERYMASK) { case ACM_FORMATTAGDETAILSF_INDEX: // Fill-in the informations corresponding to the a_FormatDetails->dwFormatTagIndex my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "get ACM_FORMATTAGDETAILSF_INDEX for index %03d",a_FormatTagDetails->dwFormatTagIndex); if (a_FormatTagDetails->dwFormatTagIndex < FORMAT_TAG_MAX_NB) { switch (a_FormatTagDetails->dwFormatTagIndex) { case 0: the_format = PERSONAL_FORMAT; break; default : the_format = WAVE_FORMAT_PCM; break; } } else { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACM_FORMATTAGDETAILSF_INDEX for unsupported index %03d",a_FormatTagDetails->dwFormatTagIndex); Result = ACMERR_NOTPOSSIBLE; } break; case ACM_FORMATTAGDETAILSF_FORMATTAG: // Fill-in the informations corresponding to the a_FormatDetails->dwFormatTagIndex and hdrvr given switch (a_FormatTagDetails->dwFormatTag) { case WAVE_FORMAT_PCM: the_format = WAVE_FORMAT_PCM; break; case PERSONAL_FORMAT: the_format = PERSONAL_FORMAT; break; default: return (ACMERR_NOTPOSSIBLE); } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "get ACM_FORMATTAGDETAILSF_FORMATTAG for index 0x%02X, cStandardFormats = %d",a_FormatTagDetails->dwFormatTagIndex,a_FormatTagDetails->cStandardFormats); break; case ACM_FORMATTAGDETAILSF_LARGESTSIZE: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "ACM_FORMATTAGDETAILSF_LARGESTSIZE not used"); Result = 0L; break; default: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnFormatTagDetails Unknown Format tag query"); Result = MMSYSERR_NOTSUPPORTED; break; } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnFormatTagDetails the_format = 0x%08X",the_format); switch(the_format) { case WAVE_FORMAT_PCM: a_FormatTagDetails->dwFormatTag = WAVE_FORMAT_PCM; a_FormatTagDetails->dwFormatTagIndex = 0; a_FormatTagDetails->cbFormatSize = sizeof(PCMWAVEFORMAT); /// \note 0 may mean we don't know how to decode a_FormatTagDetails->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC; a_FormatTagDetails->cStandardFormats = FORMAT_MAX_NB_PCM; // should be filled by Windows a_FormatTagDetails->szFormatTag[0] = '\0'; Result = MMSYSERR_NOERROR; break; case PERSONAL_FORMAT: a_FormatTagDetails->dwFormatTag = PERSONAL_FORMAT; a_FormatTagDetails->dwFormatTagIndex = 1; a_FormatTagDetails->cbFormatSize = SIZE_FORMAT_STRUCT; a_FormatTagDetails->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC; a_FormatTagDetails->cStandardFormats = GetNumberEncodingFormats(); lstrcpyW( a_FormatTagDetails->szFormatTag, L"Lame MP3" ); Result = MMSYSERR_NOERROR; break; default: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnFormatTagDetails Unknown format 0x%08X",the_format); return (ACMERR_NOTPOSSIBLE); } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnFormatTagDetails %d possibilities for format 0x%08X",a_FormatTagDetails->cStandardFormats,the_format); } else { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "a_FormatTagDetails->cbStruct < sizeof(*a_FormatDetails)"); Result = ACMERR_NOTPOSSIBLE; } return Result; } /*! Retreive the global details of this ACM driver \param a_DriverDetail will be filled with all the corresponding data */ inline DWORD ACM::OnDriverDetails(const HDRVR hdrvr, LPACMDRIVERDETAILS a_DriverDetail) { if (my_hIcon == NULL) my_hIcon = LoadIcon(GetDriverModuleHandle(hdrvr), MAKEINTRESOURCE(IDI_ICON)); a_DriverDetail->hicon = my_hIcon; a_DriverDetail->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; a_DriverDetail->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; /// \note this is an explicit hack of the FhG values /// \note later it could be a new value when the decoding is done a_DriverDetail->wMid = MM_FRAUNHOFER_IIS; a_DriverDetail->wPid = MM_FHGIIS_MPEGLAYER3; a_DriverDetail->vdwACM = VERSION_MSACM; a_DriverDetail->vdwDriver = VERSION_ACM_DRIVER; a_DriverDetail->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC; a_DriverDetail->cFormatTags = FORMAT_TAG_MAX_NB; // 2 : MP3 and PCM // a_DriverDetail->cFormatTags = 1; // 2 : MP3 and PCM a_DriverDetail->cFilterTags = FILTER_TAG_MAX_NB; lstrcpyW( a_DriverDetail->szShortName, L"LAME MP3" ); char tmpStr[128]; wsprintf(tmpStr, "LAME MP3 Codec v%s", GetVersionString()); int u = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, tmpStr, -1, a_DriverDetail->szLongName, 0); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, tmpStr, -1, a_DriverDetail->szLongName, u); lstrcpyW( a_DriverDetail->szCopyright, L"2002 Steve Lhomme" ); lstrcpyW( a_DriverDetail->szLicensing, L"LGPL (see gnu.org)" ); /// \todo update this part when the code changes lstrcpyW( a_DriverDetail->szFeatures , L"only CBR implementation" ); return MMSYSERR_NOERROR; // Can also return DRVCNF_CANCEL } /*! Suggest an output format for the specified input format \param a_FormatSuggest will be filled with all the corresponding data */ inline DWORD ACM::OnFormatSuggest(LPACMDRVFORMATSUGGEST a_FormatSuggest) { DWORD Result = MMSYSERR_NOTSUPPORTED; DWORD fdwSuggest = (ACM_FORMATSUGGESTF_TYPEMASK & a_FormatSuggest->fdwSuggest); my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest %s%s%s%s (0x%08X)", (fdwSuggest & ACM_FORMATSUGGESTF_NCHANNELS) ? "channels, ":"", (fdwSuggest & ACM_FORMATSUGGESTF_NSAMPLESPERSEC) ? "samples/sec, ":"", (fdwSuggest & ACM_FORMATSUGGESTF_WBITSPERSAMPLE) ? "bits/sample, ":"", (fdwSuggest & ACM_FORMATSUGGESTF_WFORMATTAG) ? "format, ":"", fdwSuggest); my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest for source format = 0x%04X, channels = %d, Samples/s = %d, AvgB/s = %d, BlockAlign = %d, b/sample = %d", a_FormatSuggest->pwfxSrc->wFormatTag, a_FormatSuggest->pwfxSrc->nChannels, a_FormatSuggest->pwfxSrc->nSamplesPerSec, a_FormatSuggest->pwfxSrc->nAvgBytesPerSec, a_FormatSuggest->pwfxSrc->nBlockAlign, a_FormatSuggest->pwfxSrc->wBitsPerSample); my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggested destination format = 0x%04X, channels = %d, Samples/s = %d, AvgB/s = %d, BlockAlign = %d, b/sample = %d", a_FormatSuggest->pwfxDst->wFormatTag, a_FormatSuggest->pwfxDst->nChannels, a_FormatSuggest->pwfxDst->nSamplesPerSec, a_FormatSuggest->pwfxDst->nAvgBytesPerSec, a_FormatSuggest->pwfxDst->nBlockAlign, a_FormatSuggest->pwfxDst->wBitsPerSample); switch (a_FormatSuggest->pwfxSrc->wFormatTag) { case WAVE_FORMAT_PCM: /// \todo handle here the decoding ? my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest for PCM source"); // // if the destination format tag is restricted, verify that // it is within our capabilities... // // this driver is able to decode to PCM // if (ACM_FORMATSUGGESTF_WFORMATTAG & fdwSuggest) { if (PERSONAL_FORMAT != a_FormatSuggest->pwfxDst->wFormatTag) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->wFormatTag = PERSONAL_FORMAT; } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest succeed A"); // // if the destination channel count is restricted, verify that // it is within our capabilities... // // this driver is not able to change the number of channels // if (ACM_FORMATSUGGESTF_NCHANNELS & fdwSuggest) { if (a_FormatSuggest->pwfxSrc->nChannels != a_FormatSuggest->pwfxDst->nChannels) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->nChannels = a_FormatSuggest->pwfxSrc->nChannels; } if (a_FormatSuggest->pwfxSrc->nChannels != 1 && a_FormatSuggest->pwfxSrc->nChannels != 2) return MMSYSERR_INVALPARAM; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest succeed B"); // // if the destination samples per second is restricted, verify // that it is within our capabilities... // // this driver is not able to change the sample rate // if (ACM_FORMATSUGGESTF_NSAMPLESPERSEC & fdwSuggest) { if (a_FormatSuggest->pwfxSrc->nSamplesPerSec != a_FormatSuggest->pwfxDst->nSamplesPerSec) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->nSamplesPerSec = a_FormatSuggest->pwfxSrc->nSamplesPerSec; } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest succeed C"); // // if the destination bits per sample is restricted, verify // that it is within our capabilities... // // We prefer decoding to 16-bit PCM. // if (ACM_FORMATSUGGESTF_WBITSPERSAMPLE & fdwSuggest) { if ( (16 != a_FormatSuggest->pwfxDst->wBitsPerSample) && (8 != a_FormatSuggest->pwfxDst->wBitsPerSample) ) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->wBitsPerSample = 16; } // a_FormatSuggest->pwfxDst->nBlockAlign = FORMAT_BLOCK_ALIGN; a_FormatSuggest->pwfxDst->nBlockAlign = a_FormatSuggest->pwfxDst->nChannels * a_FormatSuggest->pwfxDst->wBitsPerSample / 8; a_FormatSuggest->pwfxDst->nAvgBytesPerSec = a_FormatSuggest->pwfxDst->nChannels * 64000 / 8; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest succeed"); Result = MMSYSERR_NOERROR; break; case PERSONAL_FORMAT: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest for PERSONAL source"); // // if the destination format tag is restricted, verify that // it is within our capabilities... // // this driver is able to decode to PCM // if (ACM_FORMATSUGGESTF_WFORMATTAG & fdwSuggest) { if (WAVE_FORMAT_PCM != a_FormatSuggest->pwfxDst->wFormatTag) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->wFormatTag = WAVE_FORMAT_PCM; } // // if the destination channel count is restricted, verify that // it is within our capabilities... // // this driver is not able to change the number of channels // if (ACM_FORMATSUGGESTF_NCHANNELS & fdwSuggest) { if (a_FormatSuggest->pwfxSrc->nChannels != a_FormatSuggest->pwfxDst->nChannels) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->nChannels = a_FormatSuggest->pwfxSrc->nChannels; } // // if the destination samples per second is restricted, verify // that it is within our capabilities... // // this driver is not able to change the sample rate // if (ACM_FORMATSUGGESTF_NSAMPLESPERSEC & fdwSuggest) { if (a_FormatSuggest->pwfxSrc->nSamplesPerSec != a_FormatSuggest->pwfxDst->nSamplesPerSec) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->nSamplesPerSec = a_FormatSuggest->pwfxSrc->nSamplesPerSec; } // // if the destination bits per sample is restricted, verify // that it is within our capabilities... // // We prefer decoding to 16-bit PCM. // if (ACM_FORMATSUGGESTF_WBITSPERSAMPLE & fdwSuggest) { if ( (16 != a_FormatSuggest->pwfxDst->wBitsPerSample) && (8 != a_FormatSuggest->pwfxDst->wBitsPerSample) ) return (ACMERR_NOTPOSSIBLE); } else { a_FormatSuggest->pwfxDst->wBitsPerSample = 16; } // a_FormatSuggest->pwfxDst->nBlockAlign = FORMAT_BLOCK_ALIGN; a_FormatSuggest->pwfxDst->nBlockAlign = a_FormatSuggest->pwfxDst->nChannels * a_FormatSuggest->pwfxDst->wBitsPerSample / 8; /// \todo this value must be a correct one ! a_FormatSuggest->pwfxDst->nAvgBytesPerSec = a_FormatSuggest->pwfxDst->nSamplesPerSec * a_FormatSuggest->pwfxDst->nChannels * a_FormatSuggest->pwfxDst->wBitsPerSample / 8; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggest succeed"); Result = MMSYSERR_NOERROR; break; } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Suggested destination format = 0x%04X, channels = %d, Samples/s = %d, AvgB/s = %d, BlockAlign = %d, b/sample = %d", a_FormatSuggest->pwfxDst->wFormatTag, a_FormatSuggest->pwfxDst->nChannels, a_FormatSuggest->pwfxDst->nSamplesPerSec, a_FormatSuggest->pwfxDst->nAvgBytesPerSec, a_FormatSuggest->pwfxDst->nBlockAlign, a_FormatSuggest->pwfxDst->wBitsPerSample); return Result; } /*! Create a stream instance for decoding/encoding \param a_StreamInstance contain information about the stream desired */ inline DWORD ACM::OnStreamOpen(LPACMDRVSTREAMINSTANCE a_StreamInstance) { DWORD Result = ACMERR_NOTPOSSIBLE; // // the most important condition to check before doing anything else // is that this ACM driver can actually perform the conversion we are // being opened for. this check should fail as quickly as possible // if the conversion is not possible by this driver. // // it is VERY important to fail quickly so the ACM can attempt to // find a driver that is suitable for the conversion. also note that // the ACM may call this driver several times with slightly different // format specifications before giving up. // // this driver first verifies that the source and destination formats // are acceptable... // switch (a_StreamInstance->pwfxSrc->wFormatTag) { case WAVE_FORMAT_PCM: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream for PCM source (%05d samples %d channels %d bits/sample)",a_StreamInstance->pwfxSrc->nSamplesPerSec,a_StreamInstance->pwfxSrc->nChannels,a_StreamInstance->pwfxSrc->wBitsPerSample); if (a_StreamInstance->pwfxDst->wFormatTag == PERSONAL_FORMAT) { unsigned int OutputFrequency; /// \todo Smart mode if (my_EncodingProperties.GetSmartOutputMode()) OutputFrequency = ACMStream::GetOutputSampleRate(a_StreamInstance->pwfxSrc->nSamplesPerSec,a_StreamInstance->pwfxDst->nAvgBytesPerSec,a_StreamInstance->pwfxDst->nChannels); else OutputFrequency = a_StreamInstance->pwfxSrc->nSamplesPerSec; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream for PERSONAL output (%05d samples %d channels %d bits/sample %d kbps)",a_StreamInstance->pwfxDst->nSamplesPerSec,a_StreamInstance->pwfxDst->nChannels,a_StreamInstance->pwfxDst->wBitsPerSample,8 * a_StreamInstance->pwfxDst->nAvgBytesPerSec); /// \todo add the possibility to have channel resampling (mono to stereo / stereo to mono) /// \todo support resampling ? /// \todo only do the test on OutputFrequency in "Smart Output" mode if (a_StreamInstance->pwfxDst->nSamplesPerSec != OutputFrequency || // a_StreamInstance->pwfxSrc->nSamplesPerSec != a_StreamInstance->pwfxDst->nSamplesPerSec || a_StreamInstance->pwfxSrc->nChannels != a_StreamInstance->pwfxDst->nChannels || a_StreamInstance->pwfxSrc->wBitsPerSample != 16) { Result = ACMERR_NOTPOSSIBLE; } else { if ((a_StreamInstance->fdwOpen & ACM_STREAMOPENF_QUERY) == 0) { ACMStream * the_stream = ACMStream::Create(); a_StreamInstance->dwInstance = (DWORD) the_stream; if (the_stream != NULL) { MPEGLAYER3WAVEFORMAT * casted = (MPEGLAYER3WAVEFORMAT *) a_StreamInstance->pwfxDst; vbr_mode a_mode = (casted->fdwFlags-2 == 0)?vbr_abr:vbr_off; if (the_stream->init(a_StreamInstance->pwfxDst->nSamplesPerSec, OutputFrequency, a_StreamInstance->pwfxDst->nChannels, a_StreamInstance->pwfxDst->nAvgBytesPerSec, a_mode)) Result = MMSYSERR_NOERROR; else ACMStream::Erase( the_stream ); } } else { Result = MMSYSERR_NOERROR; } } } break; case PERSONAL_FORMAT: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream for PERSONAL source (%05d samples %d channels %d bits/sample %d kbps)",a_StreamInstance->pwfxSrc->nSamplesPerSec,a_StreamInstance->pwfxSrc->nChannels,a_StreamInstance->pwfxSrc->wBitsPerSample,8 * a_StreamInstance->pwfxSrc->nAvgBytesPerSec); if (a_StreamInstance->pwfxDst->wFormatTag == WAVE_FORMAT_PCM) { #ifdef ENABLE_DECODING if ((a_StreamInstance->fdwOpen & ACM_STREAMOPENF_QUERY) == 0) { /// \todo create the decoding stream my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream for PCM output (%05d samples %d channels %d bits/sample %d B/s)",a_StreamInstance->pwfxDst->nSamplesPerSec,a_StreamInstance->pwfxDst->nChannels,a_StreamInstance->pwfxDst->wBitsPerSample,a_StreamInstance->pwfxDst->nAvgBytesPerSec); DecodeStream * the_stream = DecodeStream::Create(); a_StreamInstance->dwInstance = (DWORD) the_stream; if (the_stream != NULL) { if (the_stream->init(a_StreamInstance->pwfxDst->nSamplesPerSec, a_StreamInstance->pwfxDst->nChannels, a_StreamInstance->pwfxDst->nAvgBytesPerSec, a_StreamInstance->pwfxSrc->nAvgBytesPerSec)) Result = MMSYSERR_NOERROR; else DecodeStream::Erase( the_stream ); } } else { /// \todo decoding verification my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream is valid"); Result = MMSYSERR_NOERROR; } #endif // ENABLE_DECODING } break; } my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Open stream Result = %d",Result); return Result; } inline DWORD ACM::OnStreamSize(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMDRVSTREAMSIZE the_StreamSize) { DWORD Result = ACMERR_NOTPOSSIBLE; switch (ACM_STREAMSIZEF_QUERYMASK & the_StreamSize->fdwSize) { case ACM_STREAMSIZEF_DESTINATION: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Get source buffer size for destination size = %d",the_StreamSize->cbDstLength); break; case ACM_STREAMSIZEF_SOURCE: my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "Get destination buffer size for source size = %d",the_StreamSize->cbSrcLength); if (WAVE_FORMAT_PCM == a_StreamInstance->pwfxSrc->wFormatTag && PERSONAL_FORMAT == a_StreamInstance->pwfxDst->wFormatTag) { ACMStream * the_stream = (ACMStream *) a_StreamInstance->dwInstance; if (the_stream != NULL) { the_StreamSize->cbDstLength = the_stream->GetOutputSizeForInput(the_StreamSize->cbSrcLength); Result = MMSYSERR_NOERROR; } } else if (PERSONAL_FORMAT == a_StreamInstance->pwfxSrc->wFormatTag && WAVE_FORMAT_PCM== a_StreamInstance->pwfxDst->wFormatTag) { #ifdef ENABLE_DECODING DecodeStream * the_stream = (DecodeStream *) a_StreamInstance->dwInstance; if (the_stream != NULL) { the_StreamSize->cbDstLength = the_stream->GetOutputSizeForInput(the_StreamSize->cbSrcLength); Result = MMSYSERR_NOERROR; } #endif // ENABLE_DECODING } break; default: Result = MMSYSERR_INVALFLAG; break; } return Result; } inline DWORD ACM::OnStreamClose(LPACMDRVSTREAMINSTANCE a_StreamInstance) { DWORD Result = ACMERR_NOTPOSSIBLE; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnStreamClose the stream 0x%X",a_StreamInstance->dwInstance); if (WAVE_FORMAT_PCM == a_StreamInstance->pwfxSrc->wFormatTag && PERSONAL_FORMAT == a_StreamInstance->pwfxDst->wFormatTag) { ACMStream::Erase( (ACMStream *) a_StreamInstance->dwInstance ); } else if (PERSONAL_FORMAT == a_StreamInstance->pwfxSrc->wFormatTag && WAVE_FORMAT_PCM== a_StreamInstance->pwfxDst->wFormatTag) { #ifdef ENABLE_DECODING DecodeStream::Erase( (DecodeStream *) a_StreamInstance->dwInstance ); #endif // ENABLE_DECODING } // nothing to do yet Result = MMSYSERR_NOERROR; return Result; } inline DWORD ACM::OnStreamPrepareHeader(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMSTREAMHEADER a_StreamHeader) { DWORD Result = ACMERR_NOTPOSSIBLE; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, " prepare : Src : %d (0x%08X) / %d - Dst : %d (0x%08X) / %d" , a_StreamHeader->cbSrcLength , a_StreamHeader->pbSrc , a_StreamHeader->cbSrcLengthUsed , a_StreamHeader->cbDstLength , a_StreamHeader->pbDst , a_StreamHeader->cbDstLengthUsed ); if (WAVE_FORMAT_PCM == a_StreamInstance->pwfxSrc->wFormatTag && PERSONAL_FORMAT == a_StreamInstance->pwfxDst->wFormatTag) { ACMStream * the_stream = (ACMStream *)a_StreamInstance->dwInstance; if (the_stream->open(my_EncodingProperties)) Result = MMSYSERR_NOERROR; } else if (PERSONAL_FORMAT == a_StreamInstance->pwfxSrc->wFormatTag && WAVE_FORMAT_PCM == a_StreamInstance->pwfxDst->wFormatTag) { #ifdef ENABLE_DECODING DecodeStream * the_stream = (DecodeStream *)a_StreamInstance->dwInstance; if (the_stream->open()) Result = MMSYSERR_NOERROR; #endif // ENABLE_DECODING } return Result; } inline DWORD ACM::OnStreamUnPrepareHeader(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMSTREAMHEADER a_StreamHeader) { DWORD Result = ACMERR_NOTPOSSIBLE; my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "unprepare : Src : %d / %d - Dst : %d / %d" , a_StreamHeader->cbSrcLength , a_StreamHeader->cbSrcLengthUsed , a_StreamHeader->cbDstLength , a_StreamHeader->cbDstLengthUsed ); if (WAVE_FORMAT_PCM == a_StreamInstance->pwfxSrc->wFormatTag && PERSONAL_FORMAT == a_StreamInstance->pwfxDst->wFormatTag) { ACMStream * the_stream = (ACMStream *)a_StreamInstance->dwInstance; DWORD OutputSize = a_StreamHeader->cbDstLength; if (the_stream->close(a_StreamHeader->pbDst, &OutputSize) && (OutputSize <= a_StreamHeader->cbDstLength)) { a_StreamHeader->cbDstLengthUsed = OutputSize; Result = MMSYSERR_NOERROR; } } else if (PERSONAL_FORMAT == a_StreamInstance->pwfxSrc->wFormatTag && WAVE_FORMAT_PCM== a_StreamInstance->pwfxDst->wFormatTag) { #ifdef ENABLE_DECODING DecodeStream * the_stream = (DecodeStream *)a_StreamInstance->dwInstance; DWORD OutputSize = a_StreamHeader->cbDstLength; if (the_stream->close(a_StreamHeader->pbDst, &OutputSize) && (OutputSize <= a_StreamHeader->cbDstLength)) { a_StreamHeader->cbDstLengthUsed = OutputSize; Result = MMSYSERR_NOERROR; } #endif // ENABLE_DECODING } return Result; } inline DWORD ACM::OnStreamConvert(LPACMDRVSTREAMINSTANCE a_StreamInstance, LPACMDRVSTREAMHEADER a_StreamHeader) { DWORD Result = ACMERR_NOTPOSSIBLE; if (WAVE_FORMAT_PCM == a_StreamInstance->pwfxSrc->wFormatTag && PERSONAL_FORMAT == a_StreamInstance->pwfxDst->wFormatTag) { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnStreamConvert SRC = PCM (encode)"); ACMStream * the_stream = (ACMStream *) a_StreamInstance->dwInstance; if (the_stream != NULL) { if (the_stream->ConvertBuffer( a_StreamHeader )) Result = MMSYSERR_NOERROR; } } else if (PERSONAL_FORMAT == a_StreamInstance->pwfxSrc->wFormatTag && WAVE_FORMAT_PCM == a_StreamInstance->pwfxDst->wFormatTag) { my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnStreamConvert SRC = MP3 (decode)"); #ifdef ENABLE_DECODING DecodeStream * the_stream = (DecodeStream *) a_StreamInstance->dwInstance; if (the_stream != NULL) { if (the_stream->ConvertBuffer( a_StreamHeader )) Result = MMSYSERR_NOERROR; } #endif // ENABLE_DECODING } else my_debug.OutPut(DEBUG_LEVEL_FUNC_CODE, "OnStreamConvert unsupported conversion"); return Result; } void ACM::GetMP3FormatForIndex(const DWORD the_Index, WAVEFORMATEX & the_Format, unsigned short the_String[ACMFORMATDETAILS_FORMAT_CHARS]) const { int Block_size; char temp[ACMFORMATDETAILS_FORMAT_CHARS]; if (the_Index < bitrate_table.size()) { // the_Format.wBitsPerSample = 16; the_Format.wBitsPerSample = 0; /// \todo handle more channel modes (mono, stereo, joint-stereo, dual-channel) // the_Format.nChannels = SIZE_CHANNEL_MODE - int(the_Index % SIZE_CHANNEL_MODE); the_Format.nBlockAlign = 1; the_Format.nSamplesPerSec = bitrate_table[the_Index].frequency; the_Format.nAvgBytesPerSec = bitrate_table[the_Index].bitrate * 1000 / 8; if (bitrate_table[the_Index].frequency >= mpeg1_freq[SIZE_FREQ_MPEG1-1]) Block_size = 1152; else Block_size = 576; the_Format.nChannels = bitrate_table[the_Index].channels; the_Format.cbSize = sizeof(MPEGLAYER3WAVEFORMAT) - sizeof(WAVEFORMATEX); MPEGLAYER3WAVEFORMAT * tmpFormat = (MPEGLAYER3WAVEFORMAT *) &the_Format; tmpFormat->wID = 1; // this is the only way I found to know if we do CBR or ABR tmpFormat->fdwFlags = 2 + ((bitrate_table[the_Index].mode == vbr_abr)?0:2); tmpFormat->nBlockSize = Block_size * the_Format.nAvgBytesPerSec / the_Format.nSamplesPerSec; tmpFormat->nFramesPerBlock = 1; tmpFormat->nCodecDelay = 0; // 0x0571 on FHG /// \todo : generate the string with the appropriate stereo mode if (bitrate_table[the_Index].mode == vbr_abr) wsprintfA( temp, "%d Hz, %d kbps ABR, %s", the_Format.nSamplesPerSec, the_Format.nAvgBytesPerSec * 8 / 1000, (the_Format.nChannels == 1)?"Mono":"Stereo"); else wsprintfA( temp, "%d Hz, %d kbps CBR, %s", the_Format.nSamplesPerSec, the_Format.nAvgBytesPerSec * 8 / 1000, (the_Format.nChannels == 1)?"Mono":"Stereo"); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, temp, -1, the_String, ACMFORMATDETAILS_FORMAT_CHARS); } } void ACM::GetPCMFormatForIndex(const DWORD the_Index, WAVEFORMATEX & the_Format, unsigned short the_String[ACMFORMATDETAILS_FORMAT_CHARS]) const { the_Format.nChannels = SIZE_CHANNEL_MODE - int(the_Index % SIZE_CHANNEL_MODE); the_Format.wBitsPerSample = 16; the_Format.nBlockAlign = the_Format.nChannels * the_Format.wBitsPerSample / 8; DWORD a_Channel_Independent = the_Index / SIZE_CHANNEL_MODE; // first MPEG1 frequencies if (a_Channel_Independent < SIZE_FREQ_MPEG1) { the_Format.nSamplesPerSec = mpeg1_freq[a_Channel_Independent]; } else { a_Channel_Independent -= SIZE_FREQ_MPEG1; the_Format.nSamplesPerSec = mpeg2_freq[a_Channel_Independent]; } the_Format.nAvgBytesPerSec = the_Format.nSamplesPerSec * the_Format.nChannels * the_Format.wBitsPerSample / 8; } DWORD ACM::GetNumberEncodingFormats() const { return bitrate_table.size(); } bool ACM::IsSmartOutput(const int frequency, const int bitrate, const int channels) const { double compression_ratio = double(frequency * 2 * channels) / double(bitrate * 100); //my_debug.OutPut(DEBUG_LEVEL_FUNC_DEBUG, "compression_ratio %f, freq %d, bitrate %d, channels %d", compression_ratio, frequency, bitrate, channels); if(my_EncodingProperties.GetSmartOutputMode()) return (compression_ratio <= my_EncodingProperties.GetSmartRatio()); else return true; } void ACM::BuildBitrateTable() { my_debug.OutPut("entering BuildBitrateTable"); // fill the table unsigned int channel,bitrate,freq; bitrate_table.clear(); // CBR bitrates for (channel = 0;channel < SIZE_CHANNEL_MODE;channel++) { // MPEG I for (freq = 0;freq < SIZE_FREQ_MPEG1;freq++) { for (bitrate = 0;bitrate < SIZE_BITRATE_MPEG1;bitrate++) { if (!my_EncodingProperties.GetSmartOutputMode() || IsSmartOutput(mpeg1_freq[freq], mpeg1_bitrate[bitrate], channel+1)) { bitrate_item bitrate_table_tmp; bitrate_table_tmp.frequency = mpeg1_freq[freq]; bitrate_table_tmp.bitrate = mpeg1_bitrate[bitrate]; bitrate_table_tmp.channels = channel+1; bitrate_table_tmp.mode = vbr_off; bitrate_table.push_back(bitrate_table_tmp); } } } // MPEG II / II.5 for (freq = 0;freq < SIZE_FREQ_MPEG2;freq++) { for (bitrate = 0;bitrate < SIZE_BITRATE_MPEG2;bitrate++) { if (!my_EncodingProperties.GetSmartOutputMode() || IsSmartOutput(mpeg2_freq[freq], mpeg2_bitrate[bitrate], channel+1)) { bitrate_item bitrate_table_tmp; bitrate_table_tmp.frequency = mpeg2_freq[freq]; bitrate_table_tmp.bitrate = mpeg2_bitrate[bitrate]; bitrate_table_tmp.channels = channel+1; bitrate_table_tmp.mode = vbr_abr; bitrate_table.push_back(bitrate_table_tmp); } } } } if (my_EncodingProperties.GetAbrOutputMode()) // ABR bitrates { for (channel = 0;channel < SIZE_CHANNEL_MODE;channel++) { // MPEG I for (freq = 0;freq < SIZE_FREQ_MPEG1;freq++) { for (bitrate = my_EncodingProperties.GetAbrBitrateMax(); bitrate >= my_EncodingProperties.GetAbrBitrateMin(); bitrate -= my_EncodingProperties.GetAbrBitrateStep()) { if (bitrate >= mpeg1_bitrate[SIZE_BITRATE_MPEG1-1] && (!my_EncodingProperties.GetSmartOutputMode() || IsSmartOutput(mpeg1_freq[freq], bitrate, channel+1))) { bitrate_item bitrate_table_tmp; bitrate_table_tmp.frequency = mpeg1_freq[freq]; bitrate_table_tmp.bitrate = bitrate; bitrate_table_tmp.channels = channel+1; bitrate_table_tmp.mode = vbr_abr; bitrate_table.push_back(bitrate_table_tmp); } } } // MPEG II / II.5 for (freq = 0;freq < SIZE_FREQ_MPEG2;freq++) { for (bitrate = my_EncodingProperties.GetAbrBitrateMax(); bitrate >= my_EncodingProperties.GetAbrBitrateMin(); bitrate -= my_EncodingProperties.GetAbrBitrateStep()) { if (bitrate >= mpeg2_bitrate[SIZE_BITRATE_MPEG2-1] && (!my_EncodingProperties.GetSmartOutputMode() || IsSmartOutput(mpeg2_freq[freq], bitrate, channel+1))) { bitrate_item bitrate_table_tmp; bitrate_table_tmp.frequency = mpeg2_freq[freq]; bitrate_table_tmp.bitrate = bitrate; bitrate_table_tmp.channels = channel+1; bitrate_table_tmp.mode = vbr_abr; bitrate_table.push_back(bitrate_table_tmp); } } } } } // sorting by frequency/bitrate/channel std::sort(bitrate_table.begin(), bitrate_table.end()); /* { // display test int i=0; for (i=0; i<bitrate_table.size();i++) { my_debug.OutPut("bitrate_table[%d].frequency = %d",i,bitrate_table[i].frequency); my_debug.OutPut("bitrate_table[%d].bitrate = %d",i,bitrate_table[i].bitrate); my_debug.OutPut("bitrate_table[%d].channel = %d",i,bitrate_table[i].channels); my_debug.OutPut("bitrate_table[%d].ABR = %s\n",i,(bitrate_table[i].mode == vbr_abr)?"ABR":"CBR"); } }*/ my_debug.OutPut("leaving BuildBitrateTable"); } ����������������������������������������������������lame-3.100/ACM/acm.rc�������������������������������������������������������������������������������000644 �001751 �001751 �00000015655 10544042236 015565� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������//Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Französisch (Frankreich) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) #ifdef _WIN32 LANGUAGE LANG_FRENCH, SUBLANG_FRENCH #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #ifndef _MAC ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 0,9,1,0 PRODUCTVERSION 0,9,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x3L FILESUBTYPE 0x8L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "This is an ACM driver for Win32 using Lame to encode\0" VALUE "CompanyName", "http://www.mp3dev.org/\0" VALUE "FileDescription", "Lame MP3 codec engine\0" VALUE "FileVersion", "0.9.2\0" VALUE "InternalName", "lameACM\0" VALUE "LegalCopyright", "Copyright © 2002 Steve Lhomme, Copyright © 2002-2007 The LAME Project\0" VALUE "LegalTrademarks", "LGPL (see gnu.org)\0" VALUE "OriginalFilename", "lameACM.acm\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "Lame MP3 codec\0" VALUE "ProductVersion", "0.9.2\0" VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END #endif // !_MAC ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. IDI_ICON ICON DISCARDABLE "lame.ico" ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_CONFIG DIALOGEX 0, 0, 231, 204 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Lame MP3 codec : About" FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN DEFPUSHBUTTON "OK",IDOK,65,183,50,14 PUSHBUTTON "Cancel",IDCANCEL,125,183,50,14 GROUPBOX "Encoding",IDC_STATIC,7,7,142,166 GROUPBOX "Decoding",IDC_STATIC_DECODING,154,7,70,113,WS_DISABLED GROUPBOX "Bits",IDC_STATIC,16,121,124,42 CONTROL "Copyright",IDC_CHECK_COPYRIGHT,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,23,132,45,10 CONTROL "Checksum",IDC_CHECK_CHECKSUM,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,84,132,49,10 CONTROL "Original",IDC_CHECK_ORIGINAL,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,23,148,39,10 CONTROL "Private",IDC_CHECK_PRIVATE,"Button",BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,84,148,38,10 COMBOBOX IDC_COMBO_ENC_STEREO,70,21,60,53,CBS_DROPDOWNLIST | WS_VSCROLL | WS_GROUP | WS_TABSTOP LTEXT "Stereo mode",IDC_STATIC,23,24,41,8 CONTROL "Smart Encode",IDC_CHECK_ENC_SMART,"Button", BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,49,39, 61,10 ICON IDI_ICON,IDC_STATIC_ENC_ICON,179,129,20,20 CTEXT "v0.0.0 - 0.00",IDC_STATIC_CONFIG_VERSION,168,155,43,17 CONTROL "Average BitRate",IDC_CHECK_ENC_ABR,"Button", BS_AUTOCHECKBOX | BS_FLAT | WS_GROUP | WS_TABSTOP,49,53, 68,10 LTEXT "Min",IDC_STATIC_AVERAGE_MIN,19,67,12,8 LTEXT "Max",IDC_STATIC_AVERAGE_MAX,17,79,14,8 LTEXT "Step",IDC_STATIC_AVERAGE_STEP,15,91,16,8 LTEXT "test",IDC_STATIC_AVERAGE_SAMPLE,19,105,12,8 CONTROL "Slider2",IDC_SLIDER_AVERAGE_MIN,"msctls_trackbar32", TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_GROUP | WS_TABSTOP,33,67,92,11 CONTROL "Slider3",IDC_SLIDER_AVERAGE_MAX,"msctls_trackbar32", TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_GROUP | WS_TABSTOP,33,79,92,11 CONTROL "Slider1",IDC_SLIDER_AVERAGE_STEP,"msctls_trackbar32", TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_GROUP | WS_TABSTOP,33,91,92,11 CONTROL "Slider4",IDC_SLIDER_AVERAGE_SAMPLE,"msctls_trackbar32", WS_TABSTOP,33,104,92,12 CTEXT "000",IDC_STATIC_AVERAGE_SAMPLE_VALUE,125,105,15,9,0, WS_EX_STATICEDGE CTEXT "000",IDC_STATIC_AVERAGE_STEP_VALUE,125,92,15,9,0, WS_EX_STATICEDGE CTEXT "000",IDC_STATIC_AVERAGE_MAX_VALUE,125,80,15,9,0, WS_EX_STATICEDGE CTEXT "000",IDC_STATIC_AVERAGE_MIN_VALUE,125,67,15,9,0, WS_EX_STATICEDGE END IDD_ABOUT DIALOG DISCARDABLE 0, 0, 187, 77 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Lame MP3 codec : About" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,130,56,50,14 LTEXT "Steve Lhomme + LAME developers",IDC_STATIC,7,33,112,8 LTEXT "LGPL license",IDC_STATIC,7,20,43,8 ICON IDI_ICON,IDC_STATIC,145,16,20,20 LTEXT "Static",IDC_STATIC_ABOUT_TITLE,7,7,173,8 LTEXT "http://www.mp3dev.org/",IDC_STATIC_ABOUT_URL,7,47,80,8 LTEXT "icon : Lucas Granito",IDC_STATIC,7,61,64,8 END ///////////////////////////////////////////////////////////////////////////// // // DESIGNINFO // #ifdef APSTUDIO_INVOKED GUIDELINES DESIGNINFO DISCARDABLE BEGIN IDD_CONFIG, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 224 TOPMARGIN, 7 BOTTOMMARGIN, 197 END IDD_ABOUT, DIALOG BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 180 TOPMARGIN, 7 BOTTOMMARGIN, 70 END END #endif // APSTUDIO_INVOKED #endif // Französisch (Frankreich) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED �����������������������������������������������������������������������������������lame-3.100/ACM/resource.h���������������������������������������������������������������������������000644 �001751 �001751 �00000003104 07454016301 016461� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by acm.rc // #define IDI_ICON 101 #define IDD_CONFIG 102 #define IDD_ABOUT 103 #define IDC_STATIC_DECODING 1000 #define IDC_CHECK_COPYRIGHT 1001 #define IDC_CHECK_CHECKSUM 1002 #define IDC_CHECK_ORIGINAL 1003 #define IDC_CHECK_PRIVATE 1004 #define IDC_COMBO_ENC_STEREO 1005 #define IDC_CHECK_ENC_SMART 1006 #define IDC_STATIC_ENC_ICON 1007 #define IDC_STATIC_ABOUT_TITLE 1008 #define IDC_STATIC_ABOUT_URL 1009 #define IDC_STATIC_CONFIG_VERSION 1010 #define IDC_CHECK_ENC_ABR 1011 #define IDC_SLIDER_AVERAGE_MIN 1012 #define IDC_SLIDER_AVERAGE_MAX 1013 #define IDC_SLIDER_AVERAGE_STEP 1014 #define IDC_SLIDER_AVERAGE_SAMPLE 1015 #define IDC_STATIC_AVERAGE_MIN 1016 #define IDC_STATIC_AVERAGE_MAX 1017 #define IDC_STATIC_AVERAGE_STEP 1018 #define IDC_STATIC_AVERAGE_SAMPLE 1019 #define IDC_STATIC_AVERAGE_MIN_VALUE 1020 #define IDC_STATIC_AVERAGE_MAX_VALUE 1021 #define IDC_STATIC_AVERAGE_STEP_VALUE 1022 #define IDC_STATIC_AVERAGE_SAMPLE_VALUE 1023 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 105 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1024 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/lame_acm.xml�������������������������������������������������������������������������000644 �001751 �001751 �00000000621 07454016301 016742� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<lame_acm> <encodings default="Current"> <config name="Current"> <Smart use="true" /> <Copyright use="true" /> <CRC use="true" /> <Original use="false" /> <Private use="false" /> <Channel mode="Joint-stereo" /> <ABR use="true" min="88" max="160" step="6" /> </config> </encodings> </lame_acm> ���������������������������������������������������������������������������������������������������������������lame-3.100/ACM/LameACM.inf��������������������������������������������������������������������������000644 �001751 �001751 �00000005742 07423617622 016401� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������; Lame codec ; enable MP3 compression in Windows ; Usage : right-click on this file and choose "Install" in the pop up menu [Version] Signature = "$CHICAGO$" Class = MEDIA [SourceDisksNames] 1="Lame MP3 Install Disk",, 0001 [SourceDisksFiles] LameACM.inf=1 LameACM.acm=1 lame_acm.xml=1 [Installable.Drivers] lameacm = 1:LameACM.acm, "msacm.lameacm", %DisplayNameWin% , , , [DefaultInstall] CopyFiles = LameACM.Copy,LameACM.Copy.Inf Updateinis = LameACM.Updateini ;addreg = LameACM.AddReg,LameACM.AddReg9x,LameACM.DoReg addreg = LameACM.AddReg,LameACM.AddReg9x MediaType = SOFTWARE [DefaultInstall.ntx86] CopyFiles = LameACM.Copy,LameACM.Copy.Inf ;addreg = LameACM.AddReg,LameACM.AddRegNT,LameACM.DoReg addreg = LameACM.AddReg,LameACM.AddRegNT MediaType = SOFTWARE [Remove_LameMP3] ;AddReg = LameACM.Unregister DelReg = LameACM.DelReg DelFiles = LameACM.Copy,LameACM.Copy.Inf UpdateInis = LameACM.UpdateIni [LameACM.Copy] LameACM.acm lame_acm.xml [LameACM.Copy.Inf] LameACM.inf [LameACM.UpdateIni] system.ini, drivers32,,"msacm.lameacm=LameACM.acm" [LameACM.AddReg] HKLM, "Software\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.lameacm",,"LameACM.acm" HKLM, "Software\Microsoft\Windows NT\CurrentVersion\Drivers.desc","LameACM.acm",,%DisplayNameWin% [LameACM.AddReg9x] HKLM,SYSTEM\CurrentControlSet\Control\MediaResources\msacm\msacm.lameacm,Description,,%DisplayNameWin% HKLM,SYSTEM\CurrentControlSet\Control\MediaResources\msacm\msacm.lameacm,Driver,,LameACM.acm HKLM,SYSTEM\CurrentControlSet\Control\MediaResources\msacm\msacm.lameacm,FriendlyName,,%DisplayNameWin% HKLM,%UnInstallPath%,DisplayName,,%DisplayNameWin% HKLM,%UnInstallPath%,UninstallString,,"%10%\rundll.exe setupx.dll,InstallHinfSection Remove_LameMP3 132 %17%\%InfFile%" [LameACM.AddRegNT] HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers32","msacm.lameacm",,"LameACM.acm" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc","LameACM.acm",,%DisplayNameWin% HKLM,%UnInstallPath%,DisplayName,,%DisplayNameWin% HKLM,%UnInstallPath%,UninstallString,,"%11%\rundll32.exe setupapi,InstallHinfSection Remove_LameMP3 132 %17%\%InfFile%" ;[LameACM.DoReg] ;HKLM,Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,"Lame ACM MP3 Codec",,"%11%\regsvr32.exe /s %11%\LameCom.acm" [LameACM.DelReg] HKLM,"SYSTEM\CurrentControlSet\Control\MediaResources\msacm\msacm.lameacm" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc","LameACM.acm",,"" HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers32","msacm.lameacm",,"" HKLM,%UnInstallPath% ;[LameACM.Unregister] ;HKLM,"Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup","Lame ACM MP3 Codec",,"%11%\regsvr32.exe /s /u %11%\LameCom.acm" [DestinationDirs] DefaultDestDir = 11 ; LDID_SYS LameACM.Copy = 11 LameACM.Copy.Inf = 17 [Strings] InfFile="LameACM.inf" DisplayNameWin="Lame ACM MP3 Codec" UnInstallPath="Software\Microsoft\Windows\CurrentVersion\Uninstall\LameACM" MediaClassName="Media Devices" mfgname="Steve Lhomme" ������������������������������lame-3.100/ACM/ddk/msacmdrv.h�����������������������������������������������������������������������000644 �001751 �001751 �00000014430 07761332251 017222� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** * * Alternative msacmdrv.h file, for use in the Lame project. * File from the FFDshow project, released under LGPL by permission * from Milan Cutka. * Modified by Gabriel Bouvigne to allow compilation of Lame. * * Copyright (c) 2003 Milan Cutka * Copyright (c) 2003 Gabriel Bouvigne * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef _MSACMDRV_H_ #define _MSACMDRV_H_ #include <mmreg.h> #include <msacm.h> typedef unsigned long ULONG_PTR, *PULONG_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #undef ACMDRIVERDETAILS #undef PACMDRIVERDETAILS #undef LPACMDRIVERDETAILS #define ACMDRIVERDETAILS ACMDRIVERDETAILSW #define PACMDRIVERDETAILS PACMDRIVERDETAILSW #define LPACMDRIVERDETAILS LPACMDRIVERDETAILSW #undef ACMFORMATTAGDETAILS #undef PACMFORMATTAGDETAILS #undef LPACMFORMATTAGDETAILS #define ACMFORMATTAGDETAILS ACMFORMATTAGDETAILSW #define PACMFORMATTAGDETAILS PACMFORMATTAGDETAILSW #define LPACMFORMATTAGDETAILS LPACMFORMATTAGDETAILSW #undef ACMFORMATDETAILS #undef PACMFORMATDETAILS #undef LPACMFORMATDETAILS #define ACMFORMATDETAILS ACMFORMATDETAILSW #define PACMFORMATDETAILS PACMFORMATDETAILSW #define LPACMFORMATDETAILS LPACMFORMATDETAILSW #define MAKE_ACM_VERSION(mjr, mnr, bld) (((long)(mjr)<<24)| \ ((long)(mnr)<<16)| \ ((long)bld)) #define VERSION_MSACM MAKE_ACM_VERSION(3, 50, 0) #define VERSION_ACM_DRIVER MAKE_ACM_VERSION(4, 0, 0) #define ACMDM_DRIVER_NOTIFY (ACMDM_BASE + 1) #define ACMDM_DRIVER_DETAILS (ACMDM_BASE + 10) #define ACMDM_HARDWARE_WAVE_CAPS_INPUT (ACMDM_BASE + 20) #define ACMDM_HARDWARE_WAVE_CAPS_OUTPUT (ACMDM_BASE + 21) #define ACMDM_FORMATTAG_DETAILS (ACMDM_BASE + 25) #define ACMDM_FORMAT_DETAILS (ACMDM_BASE + 26) #define ACMDM_FORMAT_SUGGEST (ACMDM_BASE + 27) #define ACMDM_FILTERTAG_DETAILS (ACMDM_BASE + 50) #define ACMDM_FILTER_DETAILS (ACMDM_BASE + 51) #define ACMDM_STREAM_OPEN (ACMDM_BASE + 76) #define ACMDM_STREAM_CLOSE (ACMDM_BASE + 77) #define ACMDM_STREAM_SIZE (ACMDM_BASE + 78) #define ACMDM_STREAM_CONVERT (ACMDM_BASE + 79) #define ACMDM_STREAM_RESET (ACMDM_BASE + 80) #define ACMDM_STREAM_PREPARE (ACMDM_BASE + 81) #define ACMDM_STREAM_UNPREPARE (ACMDM_BASE + 82) typedef struct tACMDRVFORMATSUGGEST { DWORD cbStruct; // sizeof(ACMDRVFORMATSUGGEST) DWORD fdwSuggest; // Suggest flags LPWAVEFORMATEX pwfxSrc; // Source Format DWORD cbwfxSrc; // Source Size LPWAVEFORMATEX pwfxDst; // Dest format DWORD cbwfxDst; // Dest Size } ACMDRVFORMATSUGGEST, *PACMDRVFORMATSUGGEST, FAR *LPACMDRVFORMATSUGGEST; typedef struct tACMDRVOPENDESC { DWORD cbStruct; // sizeof(ACMDRVOPENDESC) FOURCC fccType; // 'audc' FOURCC fccComp; // sub-type (not used--must be 0) DWORD dwVersion; // current version of ACM opening you DWORD dwFlags; // DWORD dwError; // result from DRV_OPEN request LPCWSTR pszSectionName; // see DRVCONFIGINFO.lpszDCISectionName LPCWSTR pszAliasName; // see DRVCONFIGINFO.lpszDCIAliasName DWORD dnDevNode; // devnode id for pnp drivers. } ACMDRVOPENDESC, *PACMDRVOPENDESC, FAR *LPACMDRVOPENDESC; typedef struct tACMDRVSTREAMINSTANCE { DWORD cbStruct; LPWAVEFORMATEX pwfxSrc; LPWAVEFORMATEX pwfxDst; LPWAVEFILTER pwfltr; DWORD_PTR dwCallback; DWORD_PTR dwInstance; DWORD fdwOpen; DWORD fdwDriver; DWORD_PTR dwDriver; HACMSTREAM has; } ACMDRVSTREAMINSTANCE, *PACMDRVSTREAMINSTANCE, FAR *LPACMDRVSTREAMINSTANCE; typedef struct tACMDRVSTREAMSIZE { DWORD cbStruct; DWORD fdwSize; DWORD cbSrcLength; DWORD cbDstLength; } ACMDRVSTREAMSIZE, *PACMDRVSTREAMSIZE, FAR *LPACMDRVSTREAMSIZE; typedef struct tACMDRVSTREAMHEADER FAR *LPACMDRVSTREAMHEADER; typedef struct tACMDRVSTREAMHEADER { DWORD cbStruct; DWORD fdwStatus; DWORD_PTR dwUser; LPBYTE pbSrc; DWORD cbSrcLength; DWORD cbSrcLengthUsed; DWORD_PTR dwSrcUser; LPBYTE pbDst; DWORD cbDstLength; DWORD cbDstLengthUsed; DWORD_PTR dwDstUser; DWORD fdwConvert; // flags passed from convert func LPACMDRVSTREAMHEADER padshNext; // for async driver queueing DWORD fdwDriver; // driver instance flags DWORD_PTR dwDriver; // driver instance data // // all remaining fields are used by the ACM for bookkeeping purposes. // an ACM driver should never use these fields (though than can be // helpful for debugging)--note that the meaning of these fields // may change, so do NOT rely on them in shipping code. // DWORD fdwPrepared; DWORD_PTR dwPrepared; LPBYTE pbPreparedSrc; DWORD cbPreparedSrcLength; LPBYTE pbPreparedDst; DWORD cbPreparedDstLength; } ACMDRVSTREAMHEADER, *PACMDRVSTREAMHEADER; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ddk/Makefile.am����������������������������������������������������������������������000644 �001751 �001751 �00000000205 07765367325 017302� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.1 2003/12/09 15:48:37 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ msacmdrv.h �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ddk/Makefile.in����������������������������������������������������������������������000644 �001751 �001751 �00000031164 13170220146 017273� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ACM/ddk ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ msacmdrv.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ACM/ddk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ACM/ddk/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ADbg/Makefile.in���������������������������������������������������������������������000644 �001751 �001751 �00000031177 13170220146 017332� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ACM/ADbg ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ ADbg.cpp \ ADbg.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ACM/ADbg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ACM/ADbg/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ADbg/ADbg.cpp������������������������������������������������������������������������000644 �001751 �001751 �00000010563 07424315050 016566� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************ Project : C++ debugging class File version : 0.4 BSD License post 1999 : Copyright (c) 2001, Steve Lhomme All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ************************************************************************/ #include <stdio.h> #include <stdarg.h> #include <windows.h> #include "ADbg.h" #if !defined(NDEBUG) ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// ADbg::ADbg(int level) :my_level(level) ,my_time_included(false) ,my_use_file(false) ,my_debug_output(true) ,hFile(NULL) { prefix[0] = '\0'; OutPut(-1,"ADbg Creation at debug level = %d (0x%08X)",my_level,this); } ADbg::~ADbg() { unsetDebugFile(); OutPut(-1,"ADbg Deletion (0x%08X)",this); } inline int ADbg::_OutPut(const char * format,va_list params) const { int result; char tst[1000]; char myformat[256]; if (my_time_included) { SYSTEMTIME time; GetSystemTime(&time); if (prefix[0] == '\0') wsprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s\r\n", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds, format); else wsprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s - %s\r\n", time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond, time.wMilliseconds, prefix, format); } else { if (prefix[0] == '\0') wsprintf( myformat, "%s\r\n", format); else wsprintf( myformat, "%s - %s\r\n", prefix, format); } result = vsprintf(tst,myformat,params); if (my_debug_output) OutputDebugString(tst); if (my_use_file && (hFile != NULL)) { SetFilePointer( hFile, 0, 0, FILE_END ); DWORD written; WriteFile( hFile, tst, lstrlen(tst), &written, NULL ); } return result; } int ADbg::OutPut(int forLevel, const char * format,...) const { int result=0; if (forLevel >= my_level) { va_list tstlist; int result; va_start(tstlist, format); result = _OutPut(format,tstlist); } return result; } int ADbg::OutPut(const char * format,...) const { va_list tstlist; va_start(tstlist, format); return _OutPut(format,tstlist); } bool ADbg::setDebugFile(const char * NewFilename) { bool result; result = unsetDebugFile(); if (result) { result = false; hFile = CreateFile(NewFilename, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); if (hFile != INVALID_HANDLE_VALUE) { SetFilePointer( hFile, 0, 0, FILE_END ); result = true; OutPut(-1,"Debug file Opening succeeded"); } else OutPut(-1,"Debug file %s Opening failed",NewFilename); } return result; } bool ADbg::unsetDebugFile() { bool result = (hFile == NULL); if (hFile != NULL) { result = (CloseHandle(hFile) != 0); if (result) { OutPut(-1,"Debug file Closing succeeded"); hFile = NULL; } } return result; } #endif // !defined(NDEBUG) ���������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ADbg/Makefile.am���������������������������������������������������������������������000644 �001751 �001751 �00000000216 11105565230 017311� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.3 2008/11/09 13:50:16 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ ADbg.cpp \ ADbg.h ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/ADbg/ADbg.h��������������������������������������������������������������������������000644 �001751 �001751 �00000006622 07424315050 016234� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************ Project : C++ debugging class File version : 0.4 BSD License post 1999 : Copyright (c) 2001, Steve Lhomme All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ************************************************************************/ #if !defined(_DBG_H__INCLUDED_) #define _DBG_H__INCLUDED_ #include <windows.h> static const int MAX_PREFIX_LENGTH = 128; #if !defined(NDEBUG) // define the working debugging class class ADbg { public: ADbg(int level = 0); virtual ~ADbg(); /// \todo make an inline function to test the level first and the process int OutPut(int level, const char * format,...) const; int OutPut(const char * format,...) const; inline int setLevel(const int level) { return my_level = level; } inline bool setIncludeTime(const bool included = true) { return my_time_included = included; } bool setDebugFile(const char * NewFilename); bool unsetDebugFile(); inline bool setUseFile(const bool usefile = true) { return my_use_file = usefile; } inline const char * setPrefix(const char * string) { return strncpy(prefix, string, MAX_PREFIX_LENGTH); } private: int my_level; bool my_time_included; bool my_use_file; bool my_debug_output; int _OutPut(const char * format,va_list params) const; char prefix[MAX_PREFIX_LENGTH]; HANDLE hFile; }; #else // !defined(NDEBUG) // define a class that does nothing (no output) class ADbg { public: ADbg(int level = 0){} virtual ~ADbg() {} inline int OutPut(int level, const char * format,...) const { return 0; } inline int OutPut(const char * format,...) const { return 0; } inline int setLevel(const int level) { return level; } inline bool setIncludeTime(const bool included = true) { return true; } inline bool setDebugFile(const char * NewFilename) { return true; } inline bool unsetDebugFile() { return true; } inline bool setUseFile(const bool usefile = true) { return true; } inline const char * setPrefix(const char * string) { return string; } }; #endif // !defined(NDEBUG) #endif // !defined(_DBG_H__INCLUDED_) ��������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/makedistlinux����������������������������������������������������������������000644 �001751 �001751 �00000001025 07433512236 020776� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������echo "Making version: " echo $1 echo $2 echo $3 rm ./docs/* doxygen dox rm -rf ./tinyxml/* rm tinyxml_$1_$2_$3.zip rm tinyxml_$1_$2_$3.tar.gz rmdir tinyxml mkdir tinyxml cp readme.txt ./tinyxml cp changes.txt ./tinyxml cp Makefile ./tinyxml cp tinyxml.cpp tinyxml cp tinyxmlerror.cpp tinyxml cp tinyxmlparser.cpp tinyxml cp xmltest.cpp tinyxml cp tinyxml.h tinyxml cp tinyxml.dsp tinyxml mkdir ./tinyxml/docs cp ./docs/* ./tinyxml/docs tar -zcf tinyxml_$1_$2_$3.tar.gz tinyxml zip -r -q -9 tinyxml_$1_$2_$3.zip tinyxml �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/tinyxml.h��������������������������������������������������������������������000644 �001751 �001751 �00000063072 07453556352 020072� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2000 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef TINYXML_INCLUDED #define TINYXML_INCLUDED #pragma warning( disable : 4530 ) #pragma warning( disable : 4786 ) #include <string> #include <stdio.h> #include <assert.h> class TiXmlDocument; class TiXmlElement; class TiXmlComment; class TiXmlUnknown; class TiXmlAttribute; class TiXmlText; class TiXmlDeclaration; // Help out windows: #if defined( _DEBUG ) && !defined( DEBUG ) #define DEBUG #endif #if defined( DEBUG ) && defined( _MSC_VER ) #include <windows.h> #define TIXML_LOG OutputDebugString #else #define TIXML_LOG printf #endif /** TiXmlBase is a base class for every class in TinyXml. It does little except to establish that TinyXml classes can be printed and provide some utility functions. In XML, the document and elements can contain other elements and other types of nodes. @verbatim A Document can contain: Element (container or leaf) Comment (leaf) Unknown (leaf) Declaration( leaf ) An Element can contain: Element (container or leaf) Text (leaf) Attributes (not on tree) Comment (leaf) Unknown (leaf) A Decleration contains: Attributes (not on tree) @endverbatim */ class TiXmlBase { friend class TiXmlNode; friend class TiXmlElement; friend class TiXmlDocument; public: TiXmlBase() {} virtual ~TiXmlBase() {} /** All TinyXml classes can print themselves to a filestream. This is a formatted print, and will insert tabs and newlines. (For an unformatted stream, use the << operator.) */ virtual void Print( FILE* cfile, int depth ) const = 0; // [internal] Underlying implementation of the operator << virtual void StreamOut ( std::ostream* out ) const = 0; /** The world does not agree on whether white space should be kept or not. In order to make everyone happy, these global, static functions are provided to set whether or not TinyXml will condense all white space into a single space or not. The default is to condense. Note changing these values is not thread safe. */ static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } /// Return the current white space setting. static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } protected: static const char* SkipWhiteSpace( const char* ); static bool StreamWhiteSpace( std::istream* in, std::string* tag ); static bool IsWhiteSpace( int c ) { return ( isspace( c ) || c == '\n' || c == '\r' ); } /* Read to the specified character. Returns true if the character found and no error. */ static bool StreamTo( std::istream* in, int character, std::string* tag ); /* Reads an XML name into the string provided. Returns a pointer just past the last character of the name, or 0 if the function has an error. */ static const char* ReadName( const char*, std::string* name ); /* Reads text. Returns a pointer past the given end tag. Wickedly complex options, but it keeps the (sensitive) code in one place. */ static const char* ReadText( const char* in, // where to start std::string* text, // the string read bool ignoreWhiteSpace, // whether to keep the white space const char* endTag, // what ends this text bool ignoreCase ); // whether to ignore case in the end tag virtual const char* Parse( const char* p ) = 0; // If an entity has been found, transform it into a character. static const char* GetEntity( const char* in, char* value ); // Get a character, while interpreting entities. inline static const char* GetChar( const char* p, char* value ) { assert( p ); if ( *p == '&' ) { return GetEntity( p, value ); } else { *value = *p; return p+1; } } // Puts a string to a stream, expanding entities as it goes. // Note this should not contian the '<', '>', etc, or they will be transformed into entities! static void PutString( const std::string& str, std::ostream* stream ); // Return true if the next characters in the stream are any of the endTag sequences. bool static StringEqual( const char* p, const char* endTag, bool ignoreCase ); enum { TIXML_NO_ERROR = 0, TIXML_ERROR, TIXML_ERROR_OPENING_FILE, TIXML_ERROR_OUT_OF_MEMORY, TIXML_ERROR_PARSING_ELEMENT, TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, TIXML_ERROR_READING_ELEMENT_VALUE, TIXML_ERROR_READING_ATTRIBUTES, TIXML_ERROR_PARSING_EMPTY, TIXML_ERROR_READING_END_TAG, TIXML_ERROR_PARSING_UNKNOWN, TIXML_ERROR_PARSING_COMMENT, TIXML_ERROR_PARSING_DECLARATION, TIXML_ERROR_DOCUMENT_EMPTY, TIXML_ERROR_STRING_COUNT }; static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; private: struct Entity { const char* str; unsigned int strLength; int chr; }; enum { NUM_ENTITY = 5, MAX_ENTITY_LENGTH = 6 }; static Entity entity[ NUM_ENTITY ]; static bool condenseWhiteSpace; }; /** The parent class for everything in the Document Object Model. (Except for attributes, which are contained in elements.) Nodes have siblings, a parent, and children. A node can be in a document, or stand on its own. The type of a TiXmlNode can be queried, and it can be cast to its more defined type. */ class TiXmlNode : public TiXmlBase { public: /** An output stream operator, for every class. Note that this outputs without any newlines or formatting, as opposed to Print(), which includes tabs and new lines. The operator<< and operator>> are not completely symmetric. Writing a node to a stream is very well defined. You'll get a nice stream of output, without any extra whitespace or newlines. But reading is not as well defined. (As it always is.) If you create a TiXmlElement (for example) and read that from an input stream, the text needs to define an element or junk will result. This is true of all input streams, but it's worth keeping in mind. A TiXmlDocument will read nodes until it reads a root element. */ friend std::ostream& operator<< ( std::ostream& out, const TiXmlNode& base ) { base.StreamOut( &out ); return out; } /** An input stream operator, for every class. Tolerant of newlines and formatting, but doesn't expect them. */ friend std::istream& operator>> ( std::istream& in, TiXmlNode& base ) { std::string tag; tag.reserve( 8 * 1000 ); base.StreamIn( &in, &tag ); base.Parse( tag.c_str() ); return in; } /** The types of XML nodes supported by TinyXml. (All the unsupported types are picked up by UNKNOWN.) */ enum NodeType { DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, DECLARATION, TYPECOUNT }; virtual ~TiXmlNode(); /** The meaning of 'value' changes for the specific type of TiXmlNode. @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim The subclasses will wrap this function. */ const std::string& Value() const { return value; } /** Changes the value of the node. Defined as: @verbatim Document: filename of the xml file Element: name of the element Comment: the comment text Unknown: the tag contents Text: the text string @endverbatim */ void SetValue( const std::string& _value ) { value = _value; } /// Delete all the children of this node. Does not affect 'this'. void Clear(); /// One step up the DOM. TiXmlNode* Parent() const { return parent; } TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. TiXmlNode* FirstChild( const std::string& value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. TiXmlNode* LastChild( const std::string& value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. /** An alternate way to walk the children of a node. One way to iterate over nodes is: @verbatim for( child = parent->FirstChild(); child; child = child->NextSibling() ) @endverbatim IterateChildren does the same thing with the syntax: @verbatim child = 0; while( child = parent->IterateChildren( child ) ) @endverbatim IterateChildren takes the previous child as input and finds the next one. If the previous child is null, it returns the first. IterateChildren will return null when done. */ TiXmlNode* IterateChildren( TiXmlNode* previous ) const; /// This flavor of IterateChildren searches for children with a particular 'value' TiXmlNode* IterateChildren( const std::string& value, TiXmlNode* previous ) const; /** Add a new node related to this. Adds a child past the LastChild. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child before the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); /** Add a new node related to this. Adds a child after the specified child. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); /** Replace a child of this node. Returns a pointer to the new object or NULL if an error occured. */ TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); /// Delete a child of this node. bool RemoveChild( TiXmlNode* removeThis ); /// Navigate to a sibling node. TiXmlNode* PreviousSibling() const { return prev; } /// Navigate to a sibling node. TiXmlNode* PreviousSibling( const std::string& ) const; /// Navigate to a sibling node. TiXmlNode* NextSibling() const { return next; } /// Navigate to a sibling node with the given 'value'. TiXmlNode* NextSibling( const std::string& ) const; /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ TiXmlElement* NextSiblingElement() const; /** Convenience function to get through elements. Calls NextSibling and ToElement. Will skip all non-Element nodes. Returns 0 if there is not another element. */ TiXmlElement* NextSiblingElement( const std::string& ) const; /// Convenience function to get through elements. TiXmlElement* FirstChildElement() const; /// Convenience function to get through elements. TiXmlElement* FirstChildElement( const std::string& value ) const; /// Query the type (as an enumerated value, above) of this node. virtual int Type() const { return type; } /** Return a pointer to the Document this node lives in. Returns null if not in a document. */ TiXmlDocument* GetDocument() const; /// Returns true if this node has no children. bool NoChildren() const { return !firstChild; } TiXmlDocument* ToDocument() const { return ( this && type == DOCUMENT ) ? (TiXmlDocument*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. TiXmlElement* ToElement() const { return ( this && type == ELEMENT ) ? (TiXmlElement*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. TiXmlComment* ToComment() const { return ( this && type == COMMENT ) ? (TiXmlComment*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. TiXmlUnknown* ToUnknown() const { return ( this && type == UNKNOWN ) ? (TiXmlUnknown*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. TiXmlText* ToText() const { return ( this && type == TEXT ) ? (TiXmlText*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. TiXmlDeclaration* ToDeclaration() const { return ( this && type == DECLARATION ) ? (TiXmlDeclaration*) this : 0; } ///< Cast to a more defined type. Will return null not of the requested type. virtual TiXmlNode* Clone() const = 0; // The real work of the input operator. virtual void StreamIn( std::istream* in, std::string* tag ) = 0; protected: TiXmlNode( NodeType type ); // The node is passed in by ownership. This object will delete it. TiXmlNode* LinkEndChild( TiXmlNode* addThis ); // Figure out what is at *p, and parse it. Returns null if it is not an xml node. TiXmlNode* Identify( const char* start ); void CopyToClone( TiXmlNode* target ) const { target->value = value; } TiXmlNode* parent; NodeType type; TiXmlNode* firstChild; TiXmlNode* lastChild; std::string value; TiXmlNode* prev; TiXmlNode* next; }; /** An attribute is a name-value pair. Elements have an arbitrary number of attributes, each with a unique name. @note The attributes are not TiXmlNodes, since they are not part of the tinyXML document object model. There are other suggested ways to look at this problem. @note Attributes have a parent */ class TiXmlAttribute : public TiXmlBase { friend class TiXmlAttributeSet; public: /// Construct an empty attribute. TiXmlAttribute() : prev( 0 ), next( 0 ) {} /// Construct an attribute with a name and value. TiXmlAttribute( const std::string& _name, const std::string& _value ) : name( _name ), value( _value ), prev( 0 ), next( 0 ) {} const std::string& Name() const { return name; } ///< Return the name of this attribute. const std::string& Value() const { return value; } ///< Return the value of this attribute. const int IntValue() const; ///< Return the value of this attribute, converted to an integer. const double DoubleValue() const; ///< Return the value of this attribute, converted to a double. void SetName( const std::string& _name ) { name = _name; } ///< Set the name of this attribute. void SetValue( const std::string& _value ) { value = _value; } ///< Set the value. void SetIntValue( int value ); ///< Set the value from an integer. void SetDoubleValue( double value ); ///< Set the value from a double. /// Get the next sibling attribute in the DOM. Returns null at end. TiXmlAttribute* Next() const; /// Get the previous sibling attribute in the DOM. Returns null at beginning. TiXmlAttribute* Previous() const; bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } /* [internal use] Attribtue parsing starts: first letter of the name returns: the next char after the value end quote */ virtual const char* Parse( const char* p ); // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut( std::ostream* out ) const; // [internal use] // Set the document pointer so the attribute can report errors. void SetDocument( TiXmlDocument* doc ) { document = doc; } private: TiXmlDocument* document; // A pointer back to a document, for error reporting. std::string name; std::string value; TiXmlAttribute* prev; TiXmlAttribute* next; }; /* A class used to manage a group of attributes. It is only used internally, both by the ELEMENT and the DECLARATION. The set can be changed transparent to the Element and Declaration classes that use it, but NOT transparent to the Attribute which has to implement a next() and previous() method. Which makes it a bit problematic and prevents the use of STL. This version is implemented with circular lists because: - I like circular lists - it demonstrates some independence from the (typical) doubly linked list. */ class TiXmlAttributeSet { public: TiXmlAttributeSet(); ~TiXmlAttributeSet(); void Add( TiXmlAttribute* attribute ); void Remove( TiXmlAttribute* attribute ); TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } TiXmlAttribute* Find( const std::string& name ) const; private: TiXmlAttribute sentinel; }; /** The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes. */ class TiXmlElement : public TiXmlNode { public: /// Construct an element. TiXmlElement( const std::string& value ); virtual ~TiXmlElement(); /** Given an attribute name, attribute returns the value for the attribute of that name, or null if none exists. */ const std::string* Attribute( const std::string& name ) const; /** Given an attribute name, attribute returns the value for the attribute of that name, or null if none exists. */ const std::string* Attribute( const std::string& name, int* i ) const; /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const std::string& name, const std::string& value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ void SetAttribute( const std::string& name, int value ); /** Deletes an attribute with the given name. */ void RemoveAttribute( const std::string& name ); TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. // [internal use] Creates a new Element and returs it. virtual TiXmlNode* Clone() const; // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); protected: /* [internal use] Attribtue parsing starts: next char past '<' returns: next char past '>' */ virtual const char* Parse( const char* p ); /* [internal use] Reads the "value" of the element -- another element, or text. This should terminate with the current end tag. */ const char* ReadValue( const char* in ); bool ReadValue( std::istream* in ); private: TiXmlAttributeSet attributeSet; }; /** An XML comment. */ class TiXmlComment : public TiXmlNode { public: /// Constructs an empty comment. TiXmlComment() : TiXmlNode( TiXmlNode::COMMENT ) {} virtual ~TiXmlComment() {} // [internal use] Creates a new Element and returs it. virtual TiXmlNode* Clone() const; // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); protected: /* [internal use] Attribtue parsing starts: at the ! of the !-- returns: next char past '>' */ virtual const char* Parse( const char* p ); }; /** XML text. Contained in an element. */ class TiXmlText : public TiXmlNode { public: TiXmlText( const std::string& initValue ) : TiXmlNode( TiXmlNode::TEXT ) { SetValue( initValue ); } virtual ~TiXmlText() {} // [internal use] Creates a new Element and returns it. virtual TiXmlNode* Clone() const; // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] bool Blank() const; // returns true if all white space and new lines /* [internal use] Attribtue parsing starts: First char of the text returns: next char past '>' */ virtual const char* Parse( const char* p ); // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); }; /** In correct XML the declaration is the first entry in the file. @verbatim <?xml version="1.0" standalone="yes"?> @endverbatim TinyXml will happily read or write files without a declaration, however. There are 3 possible attributes to the declaration: version, encoding, and standalone. Note: In this version of the code, the attributes are handled as special cases, not generic attributes, simply because there can only be at most 3 and they are always the same. */ class TiXmlDeclaration : public TiXmlNode { public: /// Construct an empty declaration. TiXmlDeclaration() : TiXmlNode( TiXmlNode::DECLARATION ) {} /// Construct. TiXmlDeclaration( const std::string& version, const std::string& encoding, const std::string& standalone ); virtual ~TiXmlDeclaration() {} /// Version. Will return empty if none was found. const std::string& Version() const { return version; } /// Encoding. Will return empty if none was found. const std::string& Encoding() const { return encoding; } /// Is this a standalone document? const std::string& Standalone() const { return standalone; } // [internal use] Creates a new Element and returs it. virtual TiXmlNode* Clone() const; // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); protected: // [internal use] // Attribtue parsing starts: next char past '<' // returns: next char past '>' virtual const char* Parse( const char* p ); private: std::string version; std::string encoding; std::string standalone; }; /** Any tag that tinyXml doesn't recognize is save as an unknown. It is a tag of text, but should not be modified. It will be written back to the XML, unchanged, when the file is saved. */ class TiXmlUnknown : public TiXmlNode { public: TiXmlUnknown() : TiXmlNode( TiXmlNode::UNKNOWN ) {} virtual ~TiXmlUnknown() {} // [internal use] virtual TiXmlNode* Clone() const; // [internal use] virtual void Print( FILE* cfile, int depth ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); protected: /* [internal use] Attribute parsing starts: First char of the text returns: next char past '>' */ virtual const char* Parse( const char* p ); }; /** Always the top level node. A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen. The 'value' of a document node is the xml file name. */ class TiXmlDocument : public TiXmlNode { public: /// Create an empty document, that has no name. TiXmlDocument(); /// Create a document with a name. The name of the document is also the filename of the xml. TiXmlDocument( const std::string& documentName ); virtual ~TiXmlDocument() {} /** Load a file using the current document value. Returns true if successful. Will delete any existing document data before loading. */ bool LoadFile(); /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. bool LoadFile( const std::string& filename ); /// Save a file using the given filename. Returns true if successful. bool SaveFile( const std::string& filename ) const; /// Parse the given null terminated block of xml data. virtual const char* Parse( const char* p ); /** Get the root element -- the only top level element -- of the document. In well formed XML, there should only be one. TinyXml is tolerant of multiple elements at the document level. */ TiXmlElement* RootElement() const { return FirstChildElement(); } /// If, during parsing, a error occurs, Error will be set to true. bool Error() const { return error; } /// Contains a textual (english) description of the error if one occurs. const std::string& ErrorDesc() const { return errorDesc; } /** Generally, you probably want the error string ( ErrorDesc() ). But if you prefer the ErrorId, this function will fetch it. */ const int ErrorId() const { return errorId; } /// If you have handled the error, it can be reset with this call. void ClearError() { error = false; errorId = 0; errorDesc = ""; } /** Dump the document to standard out. */ void Print() const { Print( stdout, 0 ); } // [internal use] virtual void Print( FILE* cfile, int depth = 0 ) const; // [internal use] virtual void StreamOut ( std::ostream* out ) const; // [internal use] virtual TiXmlNode* Clone() const; // [internal use] void SetError( int err ) { assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); error = true; errorId = err; errorDesc = errorString[ errorId ]; } // [internal use] virtual void StreamIn( std::istream* in, std::string* tag ); protected: private: bool error; int errorId; std::string errorDesc; }; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/tinyxmlerror.cpp�������������������������������������������������������������000644 �001751 �001751 �00000001257 07433512236 021463� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "tinyxml.h" // The goal of the seperate error file is to make the first // step towards localization. tinyxml (currently) only supports // latin-1, but at least the error messages could now be translated. // // It also cleans up the code a bit. // const char* TiXmlBase::errorString[ TIXML_ERROR_STRING_COUNT ] = { "No error", "Error", "Failed to open file", "Memory allocation failed.", "Error parsing Element.", "Failed to read Element name", "Error reading Element value.", "Error reading Attributes.", "Error: empty tag.", "Error reading end tag.", "Error parsing Unknown.", "Error parsing Comment.", "Error parsing Declaration.", "Error document empty." }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/xmltest.cpp������������������������������������������������������������������000644 �001751 �001751 �00000023077 07453556352 020422� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include "tinyxml.h" #include <iostream> #include <sstream> #include <strstream> using namespace std; int gPass = 0; int gFail = 0; // Utility functions: template< class T > bool XmlTest( const char* testString, T expected, T found, bool noEcho = false ) { if ( expected == found ) cout << "[pass]"; else cout << "[fail]"; if ( noEcho ) cout << " " << testString; else cout << " " << testString << " [" << expected << "][" << found << "]"; cout << "\n"; bool pass = ( expected == found ); if ( pass ) ++gPass; else ++gFail; return pass; } // // This file demonstrates some basic functionality of TinyXml. // Note that the example is very contrived. It presumes you know // what is in the XML file. But it does test the basic operations, // and show how to add and remove nodes. // int main() { // // We start with the 'demoStart' todo list. Process it. And // should hopefully end up with the todo list as illustrated. // const char* demoStart = "<?xml version=\"1.0\" standalone='no' >\n" "<!-- Our to do list data -->" "<ToDo>\n" "<!-- Do I need a secure PDA? -->\n" "<Item priority=\"1\" distance='close'> Go to the <bold>Toy store!</bold></Item>" "<Item priority=\"2\" distance='none'> Do bills </Item>" "<Item priority=\"2\" distance='far & back'> Look for Evil Dinosaurs! </Item>" "</ToDo>"; /* What the todo list should look like after processing. In stream (no formatting) representation. */ const char* demoEnd = "<?xml version=\"1.0\" standalone=\"no\" ?>" "<!-- Our to do list data -->" "<ToDo>" "<!-- Do I need a secure PDA? -->" "<Item priority=\"2\" distance=\"close\">Go to the" "<bold>Toy store!" "</bold>" "</Item>" "<Item priority=\"1\" distance=\"far\">Talk to:" "<Meeting where=\"School\">" "<Attendee name=\"Marple\" position=\"teacher\" />" "<Attendee name=\"Vo‚\" position=\"counselor\" />" "</Meeting>" "<Meeting where=\"Lunch\" />" "</Item>" "<Item priority=\"2\" distance=\"here\">Do bills" "</Item>" "</ToDo>"; // The example parses from the character string (above): { // Write to a file and read it back, to check file I/O. TiXmlDocument doc( "demotest.xml" ); doc.Parse( demoStart ); if ( doc.Error() ) { printf( "Error in %s: %s\n", doc.Value().c_str(), doc.ErrorDesc().c_str() ); exit( 1 ); } doc.SaveFile(); } TiXmlDocument doc( "demotest.xml" ); bool loadOkay = doc.LoadFile(); if ( !loadOkay ) { printf( "Could not load test file 'demotest.xml'. Error='%s'. Exiting.\n", doc.ErrorDesc().c_str() ); exit( 1 ); } printf( "** Demo doc read from disk: ** \n\n" ); doc.Print( stdout ); TiXmlNode* node = 0; TiXmlElement* todoElement = 0; TiXmlElement* itemElement = 0; // -------------------------------------------------------- // An example of changing existing attributes, and removing // an element from the document. // -------------------------------------------------------- // Get the "ToDo" element. // It is a child of the document, and can be selected by name. node = doc.FirstChild( "ToDo" ); assert( node ); todoElement = node->ToElement(); assert( todoElement ); // Going to the toy store is now our second priority... // So set the "priority" attribute of the first item in the list. node = todoElement->FirstChildElement(); // This skips the "PDA" comment. assert( node ); itemElement = node->ToElement(); assert( itemElement ); itemElement->SetAttribute( "priority", 2 ); // Change the distance to "doing bills" from // "none" to "here". It's the next sibling element. itemElement = itemElement->NextSiblingElement(); assert( itemElement ); itemElement->SetAttribute( "distance", "here" ); // Remove the "Look for Evil Dinosours!" item. // It is 1 more sibling away. We ask the parent to remove // a particular child. itemElement = itemElement->NextSiblingElement(); todoElement->RemoveChild( itemElement ); itemElement = 0; // -------------------------------------------------------- // What follows is an example of created elements and text // nodes and adding them to the document. // -------------------------------------------------------- // Add some meetings. TiXmlElement item( "Item" ); item.SetAttribute( "priority", "1" ); item.SetAttribute( "distance", "far" ); TiXmlText text( "Talk to:" ); TiXmlElement meeting1( "Meeting" ); meeting1.SetAttribute( "where", "School" ); TiXmlElement meeting2( "Meeting" ); meeting2.SetAttribute( "where", "Lunch" ); TiXmlElement attendee1( "Attendee" ); attendee1.SetAttribute( "name", "Marple" ); attendee1.SetAttribute( "position", "teacher" ); TiXmlElement attendee2( "Attendee" ); attendee2.SetAttribute( "name", "Vo‚" ); attendee2.SetAttribute( "position", "counselor" ); // Assemble the nodes we've created: meeting1.InsertEndChild( attendee1 ); meeting1.InsertEndChild( attendee2 ); item.InsertEndChild( text ); item.InsertEndChild( meeting1 ); item.InsertEndChild( meeting2 ); // And add the node to the existing list after the first child. node = todoElement->FirstChild( "Item" ); assert( node ); itemElement = node->ToElement(); assert( itemElement ); todoElement->InsertAfterChild( itemElement, item ); printf( "\n** Demo doc processed: ** \n\n" ); doc.Print( stdout ); printf( "** Demo doc processed to stream: ** \n\n" ); cout << doc << endl << endl; // -------------------------------------------------------- // Different tests...do we have what we expect? // -------------------------------------------------------- int count = 0; TiXmlElement* element; ////////////////////////////////////////////////////// cout << "** Basic structure. **\n"; ostringstream outputStream( ostringstream::out ); outputStream << doc; XmlTest( "Output stream correct.", string( demoEnd ), outputStream.str(), true ); node = doc.RootElement(); XmlTest( "Root element exists.", true, ( node != 0 && node->ToElement() ) ); XmlTest( "Root element value is 'ToDo'.", string( "ToDo" ), node->Value() ); node = node->FirstChild(); XmlTest( "First child exists & is a comment.", true, ( node != 0 && node->ToComment() ) ); node = node->NextSibling(); XmlTest( "Sibling element exists & is an element.", true, ( node != 0 && node->ToElement() ) ); XmlTest( "Value is 'Item'.", string( "Item" ), node->Value() ); node = node->FirstChild(); XmlTest( "First child exists.", true, ( node != 0 && node->ToText() ) ); XmlTest( "Value is 'Go to the'.", string( "Go to the" ), node->Value() ); ////////////////////////////////////////////////////// cout << "\n** Iterators. **" << "\n"; // Walk all the top level nodes of the document. count = 0; for( node = doc.FirstChild(); node; node = node->NextSibling() ) { count++; } XmlTest( "Top level nodes, using First / Next.", 3, count ); count = 0; for( node = doc.LastChild(); node; node = node->PreviousSibling() ) { count++; } XmlTest( "Top level nodes, using Last / Previous.", 3, count ); // Walk all the top level nodes of the document, // using a different sytax. count = 0; for( node = doc.IterateChildren( 0 ); node; node = doc.IterateChildren( node ) ) { count++; } XmlTest( "Top level nodes, using IterateChildren.", 3, count ); // Walk all the elements in a node. count = 0; for( element = todoElement->FirstChildElement(); element; element = element->NextSiblingElement() ) { count++; } XmlTest( "Children of the 'ToDo' element, using First / Next.", 3, count ); // Walk all the elements in a node by value. count = 0; for( node = todoElement->FirstChild( "Item" ); node; node = node->NextSibling( "Item" ) ) { count++; } XmlTest( "'Item' children of the 'ToDo' element, using First/Next.", 3, count ); count = 0; for( node = todoElement->LastChild( "Item" ); node; node = node->PreviousSibling( "Item" ) ) { count++; } XmlTest( "'Item' children of the 'ToDo' element, using Last/Previous.", 3, count ); ////////////////////////////////////////////////////// cout << "\n** Parsing. **\n"; istringstream parse0( "<Element0 attribute0='foo0' attribute1= noquotes attribute2 = '>' />" ); TiXmlElement element0( "default" ); parse0 >> element0; XmlTest( "Element parsed, value is 'Element0'.", string( "Element0" ), element0.Value() ); XmlTest( "Reads attribute 'attribute0=\"foo0\"'.", string( "foo0" ), *( element0.Attribute( "attribute0" ) ) ); XmlTest( "Reads incorrectly formatted 'attribute1=noquotes'.", string( "noquotes" ), *( element0.Attribute( "attribute1" ) ) ); XmlTest( "Read attribute with entity value '>'.", string( ">" ), *( element0.Attribute( "attribute2" ) ) ); ////////////////////////////////////////////////////// cout << "\n** Streaming. **\n"; // Round trip check: stream in, then stream back out to verify. The stream // out has already been checked, above. We use the output istringstream inputStringStream( outputStream.str() ); TiXmlDocument document0; inputStringStream >> document0; ostringstream outputStream0( ostringstream::out ); outputStream0 << document0; XmlTest( "Stream round trip correct.", string( demoEnd ), outputStream0.str(), true ); ////////////////////////////////////////////////////// cout << "\n** Parsing, no Condense Whitespace **\n"; TiXmlBase::SetCondenseWhiteSpace( false ); istringstream parse1( "<start>This is \ntext</start>" ); TiXmlElement text1( "text" ); parse1 >> text1; XmlTest( "Condense white space OFF.", string( "This is \ntext" ), text1.FirstChild()->Value(), true ); cout << endl << "Pass " << gPass << ", Fail " << gFail << endl; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/tinyxmlparser.cpp������������������������������������������������������������000644 �001751 �001751 �00000042552 07453556352 021642� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2000-2002 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include "tinyxml.h" #include <ctype.h> #include <strstream> using namespace std; //#define DEBUG_PARSER TiXmlBase::Entity TiXmlBase::entity[ NUM_ENTITY ] = { { "&", 5, '&' }, { "<", 4, '<' }, { ">", 4, '>' }, { """, 6, '\"' }, { "'", 6, '\'' } }; const char* TiXmlBase::SkipWhiteSpace( const char* p ) { if ( !p || !*p ) { return 0; } while ( p && *p ) { if ( isspace( *p ) || *p == '\n' || *p =='\r' ) // Still using old rules for white space. ++p; else break; } return p; } /*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream* in, std::string* tag ) { for( ;; ) { if ( !in->good() ) return false; int c = in->peek(); if ( !IsWhiteSpace( c ) ) return true; *tag += in->get(); } } /*static*/ bool TiXmlBase::StreamTo( std::istream* in, int character, std::string* tag ) { while ( in->good() ) { int c = in->peek(); if ( c == character ) return true; in->get(); *tag += c; } return false; } const char* TiXmlBase::ReadName( const char* p, string* name ) { *name = ""; assert( p ); // Names start with letters or underscores. // After that, they can be letters, underscores, numbers, // hyphens, or colons. (Colons are valid ony for namespaces, // but tinyxml can't tell namespaces from names.) if ( p && *p && ( isalpha( (unsigned char) *p ) || *p == '_' ) ) { while( p && *p && ( isalnum( (unsigned char ) *p ) || *p == '_' || *p == '-' || *p == ':' ) ) { (*name) += *p; ++p; } return p; } return 0; } const char* TiXmlBase::GetEntity( const char* p, char* value ) { // Presume an entity, and pull it out. string ent; int i; // Ignore the &#x entities. if ( strncmp( "&#x", p, 3 ) == 0 ) { *value = *p; return p+1; } // Now try to match it. for( i=0; i<NUM_ENTITY; ++i ) { if ( strncmp( entity[i].str, p, entity[i].strLength ) == 0 ) { assert( strlen( entity[i].str ) == entity[i].strLength ); *value = entity[i].chr; return ( p + entity[i].strLength ); } } // So it wasn't an entity, its unrecognized, or something like that. *value = *p; // Don't put back the last one, since we return it! return p+1; } bool TiXmlBase::StringEqual( const char* p, const char* tag, bool ignoreCase ) { assert( p ); if ( !p || !*p ) { assert( 0 ); return false; } if ( tolower( *p ) == tolower( *tag ) ) { const char* q = p; if (ignoreCase) { while ( *q && *tag && *q == *tag ) { ++q; ++tag; } if ( *tag == 0 ) // Have we found the end of the tag, and everything equal? { return true; } } else { while ( *q && *tag && tolower( *q ) == tolower( *tag ) ) { ++q; ++tag; } if ( *tag == 0 ) { return true; } } } return false; } const char* TiXmlBase::ReadText( const char* p, string* text, bool trimWhiteSpace, const char* endTag, bool caseInsensitive ) { *text = ""; if ( !trimWhiteSpace // certain tags always keep whitespace || !condenseWhiteSpace ) // if true, whitespace is always kept { // Keep all the white space. while ( p && *p && !StringEqual( p, endTag, caseInsensitive ) ) { char c; p = GetChar( p, &c ); text->append( &c, 1 ); } } else { bool whitespace = false; // Remove leading white space: p = SkipWhiteSpace( p ); while ( p && *p && !StringEqual( p, endTag, caseInsensitive ) ) { if ( *p == '\r' || *p == '\n' ) { whitespace = true; ++p; } else if ( isspace( *p ) ) { whitespace = true; ++p; } else { // If we've found whitespace, add it before the // new character. Any whitespace just becomes a space. if ( whitespace ) { text->append( " ", 1 ); whitespace = false; } char c; p = GetChar( p, &c ); text->append( &c, 1 ); } } } return p + strlen( endTag ); } void TiXmlDocument::StreamIn( std::istream* in, std::string* tag ) { // The basic issue with a document is that we don't know what we're // streaming. Read something presumed to be a tag (and hope), then // identify it, and call the appropriate stream method on the tag. // // This "pre-streaming" will never read the closing ">" so the // sub-tag can orient itself. if ( !StreamTo( in, '<', tag ) ) { SetError( TIXML_ERROR_PARSING_EMPTY ); return; } while ( in->good() ) { int tagIndex = tag->length(); while ( in->good() && in->peek() != '>' ) { int c = in->get(); (*tag) += (char) c; } if ( in->good() ) { // We now have something we presume to be a node of // some sort. Identify it, and call the node to // continue streaming. TiXmlNode* node = Identify( tag->c_str() + tagIndex ); if ( node ) { node->StreamIn( in, tag ); bool isElement = node->ToElement() != 0; delete node; node = 0; // If this is the root element, we're done. Parsing will be // done by the >> operator. if ( isElement ) { return; } } else { SetError( TIXML_ERROR ); return; } } } // We should have returned sooner. SetError( TIXML_ERROR ); } const char* TiXmlDocument::Parse( const char* p ) { // Parse away, at the document level. Since a document // contains nothing but other tags, most of what happens // here is skipping white space. // // In this variant (as opposed to stream and Parse) we // read everything we can. if ( !p || !*p || !( p = SkipWhiteSpace( p ) ) ) { SetError( TIXML_ERROR_DOCUMENT_EMPTY ); return false; } while ( p && *p ) { TiXmlNode* node = Identify( p ); if ( node ) { p = node->Parse( p ); LinkEndChild( node ); } else { break; } p = SkipWhiteSpace( p ); } // All is well. return p; } TiXmlNode* TiXmlNode::Identify( const char* p ) { TiXmlNode* returnNode = 0; p = SkipWhiteSpace( p ); if( !p || !*p || *p != '<' ) { return 0; } TiXmlDocument* doc = GetDocument(); p = SkipWhiteSpace( p ); if ( !p || !*p ) { return 0; } // What is this thing? // - Elements start with a letter or underscore, but xml is reserved. // - Comments: <!-- // - Decleration: <?xml // - Everthing else is unknown to tinyxml. // const char* xmlHeader = { "<?xml" }; const char* commentHeader = { "<!--" }; if ( StringEqual( p, xmlHeader, true ) ) { #ifdef DEBUG_PARSER TIXML_LOG( "XML parsing Declaration\n" ); #endif returnNode = new TiXmlDeclaration(); } else if ( isalpha( *(p+1) ) || *(p+1) == '_' ) { #ifdef DEBUG_PARSER TIXML_LOG( "XML parsing Element\n" ); #endif returnNode = new TiXmlElement( "" ); } else if ( StringEqual( p, commentHeader, false ) ) { #ifdef DEBUG_PARSER TIXML_LOG( "XML parsing Comment\n" ); #endif returnNode = new TiXmlComment(); } else { #ifdef DEBUG_PARSER TIXML_LOG( "XML parsing Unknown\n" ); #endif returnNode = new TiXmlUnknown(); } if ( returnNode ) { // Set the parent, so it can report errors returnNode->parent = this; //p = returnNode->Parse( p ); } else { if ( doc ) doc->SetError( TIXML_ERROR_OUT_OF_MEMORY ); } return returnNode; } void TiXmlElement::StreamIn( std::istream* in, std::string* tag ) { // We're called with some amount of pre-parsing. That is, some of "this" // element is in "tag". Go ahead and stream to the closing ">" while( in->good() ) { int c = in->get(); (*tag) += (char) c ; if ( c == '>' ) break; } if ( tag->length() < 3 ) return; // Okay...if we are a "/>" tag, then we're done. We've read a complete tag. // If not, identify and stream. if ( tag->at( tag->length() - 1 ) == '>' && tag->at( tag->length() - 2 ) == '/' ) { // All good! return; } else if ( tag->at( tag->length() - 1 ) == '>' ) { // There is more. Could be: // text // closing tag // another node. for ( ;; ) { StreamWhiteSpace( in, tag ); // Do we have text? if ( in->peek() != '<' ) { // Yep, text. TiXmlText text( "" ); text.StreamIn( in, tag ); // What follows text is a closing tag or another node. // Go around again and figure it out. continue; } // We now have either a closing tag...or another node. // We should be at a "<", regardless. if ( !in->good() ) return; assert( in->peek() == '<' ); int tagIndex = tag->length(); bool closingTag = false; bool firstCharFound = false; for( ;; ) { if ( !in->good() ) return; int c = in->peek(); if ( c == '>' ) break; *tag += c; in->get(); if ( !firstCharFound && c != '<' && !IsWhiteSpace( c ) ) { firstCharFound = true; if ( c == '/' ) closingTag = true; } } // If it was a closing tag, then read in the closing '>' to clean up the input stream. // If it was not, the streaming will be done by the tag. if ( closingTag ) { int c = in->get(); assert( c == '>' ); *tag += c; // We are done, once we've found our closing tag. return; } else { // If not a closing tag, id it, and stream. const char* tagloc = tag->c_str() + tagIndex; TiXmlNode* node = Identify( tagloc ); if ( !node ) return; node->StreamIn( in, tag ); delete node; node = 0; // No return: go around from the beginning: text, closing tag, or node. } } } } const char* TiXmlElement::Parse( const char* p ) { p = SkipWhiteSpace( p ); TiXmlDocument* document = GetDocument(); if ( !p || !*p || *p != '<' ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT ); return false; } p = SkipWhiteSpace( p+1 ); // Read the name. p = ReadName( p, &value ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME ); return false; } string endTag = "</"; endTag += value; endTag += ">"; // Check for and read attributes. Also look for an empty // tag or an end tag. while ( p && *p ) { p = SkipWhiteSpace( p ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES ); return 0; } if ( *p == '/' ) { ++p; // Empty tag. if ( *p != '>' ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_EMPTY ); return 0; } return (p+1); } else if ( *p == '>' ) { // Done with attributes (if there were any.) // Read the value -- which can include other // elements -- read the end tag, and return. ++p; p = ReadValue( p ); // Note this is an Element method, and will set the error if one happens. if ( !p || !*p ) return 0; // We should find the end tag now if ( StringEqual( p, endTag.c_str(), false ) ) { p += endTag.length(); return p; } else { if ( document ) document->SetError( TIXML_ERROR_READING_END_TAG ); return 0; } } else { // Try to read an element: TiXmlAttribute attrib; attrib.SetDocument( document ); p = attrib.Parse( p ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_ELEMENT ); return 0; } SetAttribute( attrib.Name(), attrib.Value() ); } } return p; } const char* TiXmlElement::ReadValue( const char* p ) { TiXmlDocument* document = GetDocument(); // Read in text and elements in any order. p = SkipWhiteSpace( p ); while ( p && *p ) { // string text; // while ( p && *p && *p != '<' ) // { // text += (*p); // ++p; // } // // p = SkipWhiteSpace( p ); if ( *p != '<' ) { // Take what we have, make a text element. TiXmlText* textNode = new TiXmlText( "" ); if ( !textNode ) { if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY ); return 0; } p = textNode->Parse( p ); if ( !textNode->Blank() ) LinkEndChild( textNode ); else delete textNode; } else { // We hit a '<' // Have we hit a new element or an end tag? if ( StringEqual( p, "</", false ) ) { return p; } else { TiXmlNode* node = Identify( p ); if ( node ) { p = node->Parse( p ); LinkEndChild( node ); } else { return 0; } } } p = SkipWhiteSpace( p ); } if ( !p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ELEMENT_VALUE ); } return p; } void TiXmlUnknown::StreamIn( std::istream* in, std::string* tag ) { while ( in->good() ) { int c = in->get(); (*tag) += c; if ( c == '>' ) { // All is well. return; } } } const char* TiXmlUnknown::Parse( const char* p ) { TiXmlDocument* document = GetDocument(); p = SkipWhiteSpace( p ); if ( !p || !*p || *p != '<' ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN ); return 0; } ++p; value = ""; while ( p && *p && *p != '>' ) { value += *p; ++p; } if ( !p ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_UNKNOWN ); } if ( *p == '>' ) return p+1; return p; } void TiXmlComment::StreamIn( std::istream* in, std::string* tag ) { while ( in->good() ) { int c = in->get(); (*tag) += c; if ( c == '>' && tag->at( tag->length() - 2 ) == '-' && tag->at( tag->length() - 3 ) == '-' ) { // All is well. return; } } } const char* TiXmlComment::Parse( const char* p ) { TiXmlDocument* document = GetDocument(); value = ""; p = SkipWhiteSpace( p ); const char* startTag = "<!--"; const char* endTag = "-->"; if ( !StringEqual( p, startTag, false ) ) { document->SetError( TIXML_ERROR_PARSING_COMMENT ); return 0; } p += strlen( startTag ); p = ReadText( p, &value, false, endTag, false ); return p; } const char* TiXmlAttribute::Parse( const char* p ) { p = SkipWhiteSpace( p ); if ( !p || !*p ) return 0; // Read the name, the '=' and the value. p = ReadName( p, &name ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES ); return 0; } p = SkipWhiteSpace( p ); if ( !p || !*p || *p != '=' ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES ); return 0; } ++p; // skip '=' p = SkipWhiteSpace( p ); if ( !p || !*p ) { if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES ); return 0; } const char* end; if ( *p == '\'' ) { ++p; end = "\'"; p = ReadText( p, &value, false, end, false ); } else if ( *p == '"' ) { ++p; end = "\""; p = ReadText( p, &value, false, end, false ); } else { // All attribute values should be in single or double quotes. // But this is such a common error that the parser will try // its best, even without them. value = ""; while ( p && *p // existence && !isspace( *p ) && *p != '\n' && *p != '\r' // whitespace && *p != '/' && *p != '>' ) // tag end { value += *p; ++p; } } return p; } void TiXmlText::StreamIn( std::istream* in, std::string* tag ) { while ( in->good() ) { int c = in->peek(); if ( c == '<' ) return; (*tag) += c; in->get(); } } const char* TiXmlText::Parse( const char* p ) { value = ""; //TiXmlDocument* doc = GetDocument(); bool ignoreWhite = true; // if ( doc && !doc->IgnoreWhiteSpace() ) ignoreWhite = false; const char* end = "<"; p = ReadText( p, &value, ignoreWhite, end, false ); if ( p ) return p-1; // don't truncate the '<' return 0; } void TiXmlDeclaration::StreamIn( std::istream* in, std::string* tag ) { while ( in->good() ) { int c = in->get(); (*tag) += c; if ( c == '>' ) { // All is well. return; } } } const char* TiXmlDeclaration::Parse( const char* p ) { p = SkipWhiteSpace( p ); // Find the beginning, find the end, and look for // the stuff in-between. TiXmlDocument* document = GetDocument(); if ( !p || !*p || !StringEqual( p, "<?xml", true ) ) { if ( document ) document->SetError( TIXML_ERROR_PARSING_DECLARATION ); return 0; } p += 5; // const char* start = p+5; // const char* end = strstr( start, "?>" ); version = ""; encoding = ""; standalone = ""; while ( p && *p ) { if ( *p == '>' ) { ++p; return p; } p = SkipWhiteSpace( p ); if ( StringEqual( p, "version", true ) ) { // p += 7; TiXmlAttribute attrib; p = attrib.Parse( p ); version = attrib.Value(); } else if ( StringEqual( p, "encoding", true ) ) { // p += 8; TiXmlAttribute attrib; p = attrib.Parse( p ); encoding = attrib.Value(); } else if ( StringEqual( p, "standalone", true ) ) { // p += 10; TiXmlAttribute attrib; p = attrib.Parse( p ); standalone = attrib.Value(); } else { // Read over whatever it is. while( p && *p && *p != '>' && !isspace( *p ) ) ++p; } } return 0; } bool TiXmlText::Blank() const { for ( unsigned i=0; i<value.size(); i++ ) if ( !isspace( value[i] ) ) return false; return true; } ������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/makedistwin.bat��������������������������������������������������������������000755 �001751 �001751 �00000000513 07433512236 021205� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������del .\tinyxml_win\*.* del .\docs\*.* doxygen dox mkdir tinyxml_win copy readme.txt tinyxml_win copy changes.txt tinyxml_win copy *.cpp tinyxml_win copy *.h tinyxml_win copy *.dsp tinyxml_win copy test0.xml tinyxml_win copy test1.xml tinyxml_win copy test2.xml tinyxml_win mkdir .\tinyxml_win\docs copy docs .\tinyxml_win\docs �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/readme.txt�������������������������������������������������������������������000644 �001751 �001751 �00000024020 07453556352 020201� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @mainpage <h1> TinyXml </h1> TinyXml is a simple, small, C++ XML parser that can be easily integrating into other programs. <h2> What it does. </h2> In brief, TinyXml parses an XML document, and builds from that a Document Object Model that can be read, modified, and saved. XML stands for "eXtensible Markup Language." It allows you to create your own document markups. Where HTML does a very good job of marking documents for browsers, XML allows you to define any kind of document markup, for example a document that describes a "to do" list for an organizer application. XML is a very structured and convenient format. All those random file formats created to store application data can all be replaced with XML. One parser for everything. There are different ways to access and interact with XML data. TinyXml uses a Document Object Model, meaning the XML data is parsed into a tree objects that can be browsed and manipulated, and then written back to disk. You can also construct an XML document from scratch with C++ objects and write this to disk. TinyXml is designed to be easy and fast. It is one header and three cpp files. Simply add these to your project and off you go. There is an example to get you started. It is released under the ZLib license, so you can use it in open source or commercial code. It attempts to be a flexible parser, but with truly correct and compliant XML output (with the exception of the character set, below.) TinyXml should compile on any reasonably C++ system. It does not rely on exceptions or RTTI, and only uses the STL string class. <h2> What it doesn't do. </h2> It doesn’t parse or use DTDs (Document Type Definitions) or XSL’s (eXtensible Stylesheet Language.) It is limited to the ASCII character set. There are other parsers out there (check out www.sourceforge.org, search for XML) that are much more fully featured. But they are also much bigger, take longer to set up in your project, have a higher learning curve, and often have a more restrictive license. If you are working with browsers or have more complete XML needs, TinyXml is not the parser for you. <h2> Code Status. </h2> Currently in use, TinyXml is looking pretty stable. If you find bugs, send them in and we'll get them straightened out as soon as possible. There are some areas of improvement; please check sourceforge if you are interested in working on TinxXml. <h2> Changes between version 1 and 2 </h2> <h3> Entities </h3> TinyXml recognizes the pre-defined "entity references", meaning special characters. Namely: @verbatim & & < < > > " " ' ‘ @endverbatim These are recognized when the XML document is read, and translated to there ASCII equivalents. For instance, text with the XML of: @verbatim Far & Away @endverbatim will have the Value() of "Far & Away" when queried from the TiXmlText object, but will be written back to the XML stream/file as an entitity. TiXml will ignore unknown entities and the @verbatim "&#x" @endverbatim entities, and leave them unprocessed. <h3> Streams </h3> TiXml has been modified to support both C (FILE) and C++ (operator <<,>>) streams. There are some differences that you may need to be aware of. C style output: - based on FILE* - the Print() and SaveFile() methods Generates formatted output, with plenty of white space, intended to be as human-readable as possible. They are very fast, and tolerant of ill formed XML documents. For example, an XML document that contains 2 root elements and 2 declarations, will print. C style input: - based on FILE* - the Parse() and LoadFile() methods A fast, tolerant read. Use whenever you don't need the C++ streams. C++ style ouput: - based on std::ostream - operator<< Generates condensed output, intended for network transmission rather than readability. Depending on your system's implementation of the ostream class, these may be somewhat slower. (Or may not.) Not tolerant of ill formed XML: a document should contain the correct one root element. Additional root level elements will not be streamed out. C++ style input: - based on std::istream - operator>> Reads XML from a stream, making it useful for network transmission. The tricky part is knowing when the XML document is complete, since there will almost certainly be other data in the stream. TinyXml will assume the XML data is complete after it reads the root element. Also not that operator>> is somewhat slower than Parse, due to both implementation of the STL and limitations of TinyXml. <h3> White space </h3> The world simply does not agree on whether white space should be kept, or condensed. For example, pretend the '_' is a space, and look at "Hello____world". HTML, and at least some XML parsers, will interpret this as "Hello_world". They condense white space. Some XML parsers do not, and will leave it as "Hello____world". (Remember to keep pretending the _ is a space.) It's an issue that hasn't been resolved to my satisfaction. TinyXml supports both motifs. Call TiXmlBase::SetCondenseWhiteSpace( bool ) to set the desired behavior. The default is to condense white space. If you change the default, you should call TiXmlBase::SetCondenseWhiteSpace( bool ) before making any calls to Parse XML data, and I don't recommend changing it after it has been set. <h2> Using and Installing </h2> To Compile and Run xmltest: A Linux Makefile and a Windows Visual C++ .dsp file is provided. Simply compile and run. It will write the file demotest.xml to your disk and generate output on the screen. It also tests walking the DOM by printing out the number of nodes found using different techniques. The Linux makefile is very generic and will probably run on other systems, but is only tested on Linux. You no longer need to run 'make depend'. The dependecies have been hard coded. To Use in an Application: Add tinyxml.cpp, tinyxml.h, tinyxmlerror.cpp, and tinyxmlparser.cpp to your project or make file. That's it! It should compile on any reasonably compliant C++ system. You do not need to enable exceptions or RTTI for TinyXml. <h2> Where it may go. </h2> At this point, I'm focusing on tightening up remaining issues. Bug fixes (though comfortably rare) and minor interface corrections. There are some "it would be nice if..." items. I'll keep those posted as tasks on SourceForge. (www.sourceforge.net/projects/tinyxml) <h2> How TinyXml works. </h2> An example is probably the best way to go. Take: @verbatim <?xml version="1.0" standalone=‘no’> <?-- Our to do list data --> <ToDo> <Item priority="1"> Go to the <bold>Toy store!</bold></Item> <Item priority="2"> Do bills</Item> </ToDo> @endverbatim It’s not much of a To Do list, but it will do. To read this file (say "demo.xml") you would create a document, and parse it in: @verbatim TiXmlDocument doc( "demo.xml" ); doc.LoadFile(); @endverbatim And it’s ready to go. Now let’s look at some lines and how they relate to the DOM. <?xml version="1.0" standalone=‘no’> The first line is a declaration, and gets turned into the TiXmlDeclaration class. It will be the first child of the document node. This is the only directive/special tag parsed by by TinyXml. Generally directive targs are stored in TiXmlUnknown so the commands won’t be lost when it is saved back to disk. <?-- Our to do list data --> A comment. Will become a TiXmlComment object. <ToDo> The ToDo tag defines a TiXmlElement object. This one does not have any attributes, but will contain 2 other elements, both of which are items. <Item priority="1"> Creates another TiXmlElement which is a child of the "ToDo" element. This element has 1 attribute, with the name ‘priority’ and the value ‘1’. Go to the A TiXmlText. This is a leaf node and cannot contain other nodes. It is a child of the ‘Item" Element. <bold> Another TiXmlElement, this one a child of the "Item" element. Etc. Looking at the entire object tree, you end up with: @verbatim TiXmlDocument "demo.xml" TiXmlDeclaration "version='1.0'" "standalone=‘no’" TiXmlComment " Our to do list data" TiXmlElement "ToDo" TiXmlElement "Item" Attribtutes: priority = 1 TiXmlText "Go to the " TiXmlElement "bold" TiXmlText "Toy store!" TiXmlElement "Item" Attributes: priority=2 TiXmlText "bills" @endverbatim <h2> Contributors </h2> Thanks very much to everyone who sends suggestions, bugs, ideas, and encouragement. It all helps, and makes this project fun. A special thanks to the contributors on the web pages that keep it lively. So many people have sent in bugs and ideas, that rather than list here I try to give credit due in the "changes.txt" file. <h2> Documentation </h2> The documentation is build with Doxygen, using the 'dox' configuration file. <h2> License </h2> TinyXml is released under the zlib license: This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. <h2> References </h2> The World Wide Web Consortium is the definitive standard body for XML, and there web pages contain huge amounts of information. I also recommend "XML Pocket Reference" by Robert Eckstein and published by O’Reilly. <h2> Contact Me: </h2> I’d appreciates your suggestions, and would love to know if you use TinyXml. I hope you enjoy it and find it useful. Please post questions, comments, file bugs, or contact me at: www.sourceforge.net/projects/tinyxml Lee Thomason */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/Makefile.in������������������������������������������������������������������000644 �001751 �001751 �00000031442 13170220146 020234� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ACM/tinyxml ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ Makefile.tinyxml \ changes.txt \ dox \ makedistlinux \ makedistwin.bat \ readme.txt \ tinyxml.cpp \ tinyxml.h \ tinyxmlerror.cpp \ tinyxmlparser.cpp \ xmltest.cpp all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ACM/tinyxml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ACM/tinyxml/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/changes.txt������������������������������������������������������������������000644 �001751 �001751 �00000006430 07433512236 020350� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Changes in version 1.0.1: - Fixed comment tags which were outputing as '<?--' instead of the correct '<!--'. - Implemented the Next and Prev methods of the TiXmlAttribute class. - Renamed 'LastAttribtute' to 'LastAttribute' - Fixed bad pointer to 'isspace' that could occur while parsing text. - Errors finding beginning and end of tags no longer throw it into an infinite loop. (Hopefully.) Changes in version 1.0.2 - Minor documentation fixes. Changes in version 1.0.3 - After nodes are added to a document, they return a pointer to the new node instead of a bool for success. - Elements can be constructed with a value, which is the element name. Every element must have a value or it will be invalid, but the code changes to enforce this are not fully in place. Changes in version 1.1.0 - Added the TiXmlAttributeSet class to pull the attributes into a seperate container. - Moved the doubly liked list out of XmlBase. Now XmlBase only requires the Print() function and defines some utility functions. - Moved errors into a seperate file. (With the idea of internationalization to the other latin-1 languages.) - Added the "NodeType" - Fixed white space parsing in text to conform with the standard. Basically, all white space becomes just one space. - Added the TiXmlDeclaration class to read xml declarations. Changes in version 1.2.0 - Removed the factory. The factory was not really in the spirit of small and simple, confused the code, and was of limited value. - Added FirstChildElement and NextSiblingElement, because they are such common functions. - Re-wrote the example to test and demonstrate more functionality. Changes in version 1.2.1 - Fixed a bug where comments couldn't be inside elements. - Loading now clears out existing XML rather than appending. - Added the "Clear" method on a node to delete all its children. Changes in version 1.2.2 - Fixed TiXmlAttribute::Previous actually returning "next." Thanks to Rickard Troedsson for the bug fix. Changes in version 1.2.3 - Added the TIXML prefix to the error strings to resolve conflicts with #defines in OS headers. Thanks to Steve Lhomme. - Fixed a delete buf that should be a delete [] buf. Thanks to Ephi Sinowitz. Changes in version 1.2.4 - ReplaceChild() was almost guarenteed to fail. Should be fixed, thanks to Joe Smith. Joe also pointed out that the Print() functions should take stream references: I agree, and would like to overload the Print() method to take either format, but I don't want to do this in a dot release. - Some compilers seem to need an extra <ctype.h> include. Thanks to Steve Lhomme for that. Changes in version 2.0.0 - Made the ToXXX() casts safe if 'this' is null. When "LoadFile" is called with a filename, the value will correctly get set. Thanks to Brian Yoder. - Fixed bug where isalpha() and isalnum() would get called with a negative value for high ascii numbers. Thanks to Alesky Aksenov. - Fixed some errors codes that were not getting set. - Made methods "const" that were not. - Added a switch to enable or disable the ignoring of white space. ( TiXmlDocument::SetIgnoreWhiteSpace() ) - Greater standardization and code re-use in the parser. - Added a stream out operator. - Added a stream in operator. - Entity support. TODO CDATA. Support for "generic entity" #xxx thing. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/tinyxml.cpp������������������������������������������������������������������000644 �001751 �001751 �00000044042 07453556352 020421� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (c) 2000 Lee Thomason (www.grinninglizard.com) This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #include <iostream> #include <sstream> #include <fstream> #include "tinyxml.h" using namespace std; bool TiXmlBase::condenseWhiteSpace = true; void TiXmlBase::PutString( const std::string& str, std::ostream* stream ) { // Scan for the all important '&' unsigned int i=0, j=0; while ( i < str.length() ) { unsigned next = str.find( '&', i ); if ( next == string::npos ) { stream->write( &str.at( i ), str.length() - i ); return; } // We found an entity. if ( next - i > 0 ) stream->write( &str.at( i ), next - i ); i = next; // Check for the special "&#x" entitity if ( i < str.length() - 2 && str[i] == '&' && str[i+1] == '#' && str[i+2] == 'x' ) { stream->put( str[i] ); } else { for ( j=0; j<NUM_ENTITY; ++j ) { if ( str[i] == entity[j].chr ) { stream->write( entity[j].str, entity[j].strLength ); break; } } if ( j == NUM_ENTITY ) { stream->put( str[i] ); } } ++i; } } TiXmlNode::TiXmlNode( NodeType _type ) { parent = 0; type = _type; firstChild = 0; lastChild = 0; prev = 0; next = 0; } TiXmlNode::~TiXmlNode() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } } void TiXmlNode::Clear() { TiXmlNode* node = firstChild; TiXmlNode* temp = 0; while ( node ) { temp = node; node = node->next; delete temp; } firstChild = 0; lastChild = 0; } TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) { node->parent = this; node->prev = lastChild; node->next = 0; if ( lastChild ) lastChild->next = node; else firstChild = node; // it was an empty list. lastChild = node; return node; } TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) { TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; return LinkEndChild( node ); } TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) { if ( beforeThis->parent != this ) return 0; TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->next = beforeThis; node->prev = beforeThis->prev; beforeThis->prev->next = node; beforeThis->prev = node; return node; } TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) { if ( afterThis->parent != this ) return 0; TiXmlNode* node = addThis.Clone(); if ( !node ) return 0; node->parent = this; node->prev = afterThis; node->next = afterThis->next; afterThis->next->prev = node; afterThis->next = node; return node; } TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) { if ( replaceThis->parent != this ) return 0; TiXmlNode* node = withThis.Clone(); if ( !node ) return 0; node->next = replaceThis->next; node->prev = replaceThis->prev; if ( replaceThis->next ) replaceThis->next->prev = node; else lastChild = node; if ( replaceThis->prev ) replaceThis->prev->next = node; else firstChild = node; delete replaceThis; node->parent = this; return node; } bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) { if ( removeThis->parent != this ) { assert( 0 ); return false; } if ( removeThis->next ) removeThis->next->prev = removeThis->prev; else lastChild = removeThis->prev; if ( removeThis->prev ) removeThis->prev->next = removeThis->next; else firstChild = removeThis->next; delete removeThis; return true; } TiXmlNode* TiXmlNode::FirstChild( const std::string& value ) const { TiXmlNode* node; for ( node = firstChild; node; node = node->next ) { if ( node->Value() == value ) return node; } return 0; } TiXmlNode* TiXmlNode::LastChild( const std::string& value ) const { TiXmlNode* node; for ( node = lastChild; node; node = node->prev ) { if ( node->Value() == value ) return node; } return 0; } TiXmlNode* TiXmlNode::IterateChildren( TiXmlNode* previous ) const { if ( !previous ) { return FirstChild(); } else { assert( previous->parent == this ); return previous->NextSibling(); } } TiXmlNode* TiXmlNode::IterateChildren( const std::string& val, TiXmlNode* previous ) const { if ( !previous ) { return FirstChild( val ); } else { assert( previous->parent == this ); return previous->NextSibling( val ); } } TiXmlNode* TiXmlNode::NextSibling( const std::string& value ) const { TiXmlNode* node; for ( node = next; node; node = node->next ) { if ( node->Value() == value ) return node; } return 0; } TiXmlNode* TiXmlNode::PreviousSibling( const std::string& value ) const { TiXmlNode* node; for ( node = prev; node; node = node->prev ) { if ( node->Value() == value ) return node; } return 0; } void TiXmlElement::RemoveAttribute( const std::string& name ) { TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) { attributeSet.Remove( node ); delete node; } } TiXmlElement* TiXmlNode::FirstChildElement() const { TiXmlNode* node; for ( node = FirstChild(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } TiXmlElement* TiXmlNode::FirstChildElement( const std::string& value ) const { TiXmlNode* node; for ( node = FirstChild( value ); node; node = node->NextSibling( value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } TiXmlElement* TiXmlNode::NextSiblingElement() const { TiXmlNode* node; for ( node = NextSibling(); node; node = node->NextSibling() ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } TiXmlElement* TiXmlNode::NextSiblingElement( const std::string& value ) const { TiXmlNode* node; for ( node = NextSibling( value ); node; node = node->NextSibling( value ) ) { if ( node->ToElement() ) return node->ToElement(); } return 0; } TiXmlDocument* TiXmlNode::GetDocument() const { const TiXmlNode* node; for( node = this; node; node = node->parent ) { if ( node->ToDocument() ) return node->ToDocument(); } return 0; } // TiXmlElement::TiXmlElement() // : TiXmlNode( TiXmlNode::ELEMENT ) // { // } TiXmlElement::TiXmlElement( const std::string& _value ) : TiXmlNode( TiXmlNode::ELEMENT ) { firstChild = lastChild = 0; value = _value; } TiXmlElement::~TiXmlElement() { while( attributeSet.First() ) { TiXmlAttribute* node = attributeSet.First(); attributeSet.Remove( node ); delete node; } } const std::string* TiXmlElement::Attribute( const std::string& name ) const { TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) return &(node->Value() ); return 0; } const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const { const std::string* s = Attribute( name ); if ( s ) *i = atoi( s->c_str() ); else *i = 0; return s; } void TiXmlElement::SetAttribute( const std::string& name, int val ) { char buf[64]; sprintf( buf, "%d", val ); std::string v = buf; SetAttribute( name, v ); } void TiXmlElement::SetAttribute( const std::string& name, const std::string& value ) { TiXmlAttribute* node = attributeSet.Find( name ); if ( node ) { node->SetValue( value ); return; } TiXmlAttribute* attrib = new TiXmlAttribute( name, value ); if ( attrib ) { attributeSet.Add( attrib ); } else { TiXmlDocument* document = GetDocument(); if ( document ) document->SetError( TIXML_ERROR_OUT_OF_MEMORY ); } } void TiXmlElement::Print( FILE* cfile, int depth ) const { int i; for ( i=0; i<depth; i++ ) { fprintf( cfile, " " ); } fprintf( cfile, "<%s", value.c_str() ); TiXmlAttribute* attrib; for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() ) { fprintf( cfile, " " ); attrib->Print( cfile, depth ); } // There are 3 different formatting approaches: // 1) An element without children is printed as a <foo /> node // 2) An element with only a text child is printed as <foo> text </foo> // 3) An element with children is printed on multiple lines. TiXmlNode* node; if ( !firstChild ) { fprintf( cfile, " />" ); } else if ( firstChild == lastChild && firstChild->ToText() ) { fprintf( cfile, ">" ); firstChild->Print( cfile, depth + 1 ); fprintf( cfile, "</%s>", value.c_str() ); } else { fprintf( cfile, ">" ); for ( node = firstChild; node; node=node->NextSibling() ) { if ( !node->ToText() ) { fprintf( cfile, "\n" ); } node->Print( cfile, depth+1 ); } fprintf( cfile, "\n" ); for( i=0; i<depth; ++i ) fprintf( cfile, " " ); fprintf( cfile, "</%s>", value.c_str() ); } } void TiXmlElement::StreamOut( std::ostream* stream ) const { (*stream) << "<" << value; TiXmlAttribute* attrib; for ( attrib = attributeSet.First(); attrib; attrib = attrib->Next() ) { (*stream) << " "; attrib->StreamOut( stream ); } // If this node has children, give it a closing tag. Else // make it an empty tag. TiXmlNode* node; if ( firstChild ) { (*stream) << ">"; for ( node = firstChild; node; node=node->NextSibling() ) { node->StreamOut( stream ); } (*stream) << "</" << value << ">"; } else { (*stream) << " />"; } } TiXmlNode* TiXmlElement::Clone() const { TiXmlElement* clone = new TiXmlElement( Value() ); if ( !clone ) return 0; CopyToClone( clone ); // Clone the attributes, then clone the children. TiXmlAttribute* attribute = 0; for( attribute = attributeSet.First(); attribute; attribute = attribute->Next() ) { clone->SetAttribute( attribute->Name(), attribute->Value() ); } TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { clone->LinkEndChild( node->Clone() ); } return clone; } TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::DOCUMENT ) { error = false; // ignoreWhiteSpace = true; } TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::DOCUMENT ) { // ignoreWhiteSpace = true; value = documentName; error = false; } bool TiXmlDocument::LoadFile() { return LoadFile( value ); } bool TiXmlDocument::SaveFile() const { return SaveFile( value ); } bool TiXmlDocument::LoadFile( const std::string& filename ) { // Delete the existing data: Clear(); value = filename; FILE* file = fopen( filename.c_str(), "r" ); if ( file ) { // Get the file size, so we can pre-allocate the string. HUGE speed impact. long length = 0; fseek( file, 0, SEEK_END ); length = ftell( file ); fseek( file, 0, SEEK_SET ); // If we have a file, assume it is all one big XML file, and read it in. // The document parser may decide the document ends sooner than the entire file, however. std::string data; data.reserve( length ); const int BUF_SIZE = 2048; char buf[BUF_SIZE]; while( fgets( buf, BUF_SIZE, file ) ) { data += buf; } fclose( file ); Parse( data.c_str() ); if ( !Error() ) { return true; } } SetError( TIXML_ERROR_OPENING_FILE ); return false; } bool TiXmlDocument::SaveFile( const std::string& filename ) const { // The old c stuff lives on... FILE* fp = fopen( filename.c_str(), "w" ); if ( fp ) { Print( fp, 0 ); fclose( fp ); return true; } return false; } TiXmlNode* TiXmlDocument::Clone() const { TiXmlDocument* clone = new TiXmlDocument(); if ( !clone ) return 0; CopyToClone( clone ); clone->error = error; clone->errorDesc = errorDesc; TiXmlNode* node = 0; for ( node = firstChild; node; node = node->NextSibling() ) { clone->LinkEndChild( node->Clone() ); } return clone; } void TiXmlDocument::Print( FILE* cfile, int depth ) const { TiXmlNode* node; for ( node=FirstChild(); node; node=node->NextSibling() ) { node->Print( cfile, depth ); fprintf( cfile, "\n" ); } } void TiXmlDocument::StreamOut( std::ostream* out ) const { TiXmlNode* node; for ( node=FirstChild(); node; node=node->NextSibling() ) { node->StreamOut( out ); // Special rule for streams: stop after the root element. // The stream in code will only read one element, so don't // write more than one. if ( node->ToElement() ) break; } } TiXmlAttribute* TiXmlAttribute::Next() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( next->value.empty() && next->name.empty() ) return 0; return next; } TiXmlAttribute* TiXmlAttribute::Previous() const { // We are using knowledge of the sentinel. The sentinel // have a value or name. if ( prev->value.empty() && prev->name.empty() ) return 0; return prev; } void TiXmlAttribute::Print( FILE* cfile, int /*depth*/ ) const { ostringstream stream( ostringstream::out ); stream.str().reserve( 500 ); StreamOut( &stream ); fprintf( cfile, "%s", stream.str().c_str() ); } void TiXmlAttribute::StreamOut( std::ostream* stream ) const { if ( value.find( '\"' ) != std::string::npos ) { PutString( name, stream ); (*stream) << "=" << "'"; PutString( value, stream ); (*stream) << "'"; } else { PutString( name, stream ); (*stream) << "=" << "\""; PutString( value, stream ); (*stream) << "\""; } } void TiXmlAttribute::SetIntValue( int value ) { std::string s; std::ostringstream stream( s ); stream << value; SetValue( stream.str() ); } void TiXmlAttribute::SetDoubleValue( double value ) { std::string s; std::ostringstream stream( s ); stream << value; SetValue( stream.str() ); } const int TiXmlAttribute::IntValue() const { int v; std::istringstream string( value ); string >> v; return v; } const double TiXmlAttribute::DoubleValue() const { double v; std::istringstream string( value ); string >> v; return v; } void TiXmlComment::Print( FILE* cfile, int depth ) const { ostringstream stream( ostringstream::out ); stream.str().reserve( 1000 ); for ( int i=0; i<depth; i++ ) { fprintf( cfile, " " ); } StreamOut( &stream ); fprintf( cfile, "%s", stream.str().c_str() ); } void TiXmlComment::StreamOut( std::ostream* stream ) const { (*stream) << "<!--"; PutString( value, stream ); (*stream) << "-->"; } TiXmlNode* TiXmlComment::Clone() const { TiXmlComment* clone = new TiXmlComment(); if ( !clone ) return 0; CopyToClone( clone ); return clone; } void TiXmlText::Print( FILE* cfile, int depth ) const { ostringstream stream( ostringstream::out ); stream.str().reserve( 1000 ); StreamOut( &stream ); fprintf( cfile, "%s", stream.str().c_str() ); } void TiXmlText::StreamOut( std::ostream* stream ) const { PutString( value, stream ); } TiXmlNode* TiXmlText::Clone() const { TiXmlText* clone = 0; clone = new TiXmlText( "" ); if ( !clone ) return 0; CopyToClone( clone ); return clone; } TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, const std::string& _encoding, const std::string& _standalone ) : TiXmlNode( TiXmlNode::DECLARATION ) { version = _version; encoding = _encoding; standalone = _standalone; } void TiXmlDeclaration::Print( FILE* cfile, int depth ) const { ostringstream stream( ostringstream::out ); stream.str().reserve( 200 ); StreamOut( &stream ); fprintf( cfile, "%s", stream.str().c_str() ); } void TiXmlDeclaration::StreamOut( std::ostream* stream ) const { (*stream) << "<?xml "; if ( !version.empty() ) { (*stream) << "version=\""; PutString( version, stream ); (*stream) << "\" "; } if ( !encoding.empty() ) { (*stream) << "encoding=\""; PutString( encoding, stream ); (*stream ) << "\" "; } if ( !standalone.empty() ) { (*stream) << "standalone=\""; PutString( standalone, stream ); (*stream) << "\" "; } (*stream) << "?>"; } TiXmlNode* TiXmlDeclaration::Clone() const { TiXmlDeclaration* clone = new TiXmlDeclaration(); if ( !clone ) return 0; CopyToClone( clone ); clone->version = version; clone->encoding = encoding; clone->standalone = standalone; return clone; } void TiXmlUnknown::Print( FILE* cfile, int depth ) const { ostringstream stream( ostringstream::out ); stream.str().reserve( 200 ); StreamOut( &stream ); for ( int i=0; i<depth; i++ ) fprintf( cfile, " " ); fprintf( cfile, "%s", stream.str().c_str() ); } void TiXmlUnknown::StreamOut( std::ostream* stream ) const { (*stream) << "<" << value << ">"; // Don't use entities hear! It is unknown. } TiXmlNode* TiXmlUnknown::Clone() const { TiXmlUnknown* clone = new TiXmlUnknown(); if ( !clone ) return 0; CopyToClone( clone ); return clone; } TiXmlAttributeSet::TiXmlAttributeSet() { sentinel.next = &sentinel; sentinel.prev = &sentinel; } TiXmlAttributeSet::~TiXmlAttributeSet() { assert( sentinel.next == &sentinel ); assert( sentinel.prev == &sentinel ); } void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) { assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. addMe->next = &sentinel; addMe->prev = sentinel.prev; sentinel.prev->next = addMe; sentinel.prev = addMe; } void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) { TiXmlAttribute* node; for( node = sentinel.next; node != &sentinel; node = node->next ) { if ( node == removeMe ) { node->prev->next = node->next; node->next->prev = node->prev; node->next = 0; node->prev = 0; return; } } assert( 0 ); // we tried to remove a non-linked attribute. } TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const { TiXmlAttribute* node; for( node = sentinel.next; node != &sentinel; node = node->next ) { if ( node->Name() == name ) return node; } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/Makefile.am������������������������������������������������������������������000644 �001751 �001751 �00000000447 11105565230 020226� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.3 2008/11/09 13:50:16 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ Makefile.tinyxml \ changes.txt \ dox \ makedistlinux \ makedistwin.bat \ readme.txt \ tinyxml.cpp \ tinyxml.h \ tinyxmlerror.cpp \ tinyxmlparser.cpp \ xmltest.cpp �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/dox��������������������������������������������������������������������������000644 �001751 �001751 �00000066661 07433512236 016730� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Doxyfile 1.2.2 # This file describes the settings to be used by doxygen for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = TinyXml # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./docs # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Dutch, French, Italian, Czech, Swedish, German, Finnish, Japanese, # Korean, Hungarian, Spanish, Romanian, Russian, Croatian, Polish, and # Portuguese. OUTPUT_LANGUAGE = English # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these class will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. STRIP_FROM_PATH = # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a class diagram (in Html and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. CLASS_DIAGRAMS = YES # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower case letters. If set to YES upper case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # users are adviced to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES (the default) then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the Javadoc-style will # behave just like the Qt-style comments. JAVADOC_AUTOBRIEF = YES # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # reimplements. INHERIT_DOCS = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # The ENABLE_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. WARN_FORMAT = "$file:$line: $text" #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = . "readme.txt" # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command <filter> <input-file>, where <filter> # is the value of the INPUT_FILTER tag, and <input-file> is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = . # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimised for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using a WORD or other. # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assigments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. Warning: This feature # is still experimental and very incomplete. GENERATE_XML = NO #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = #--------------------------------------------------------------------------- # Configuration::addtions related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the ENABLE_PREPROCESSING, INCLUDE_GRAPH, and HAVE_DOT tags are set to # YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other # documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, INCLUDED_BY_GRAPH, and HAVE_DOT tags are set to # YES then doxygen will generate a graph for each documented header file showing # the documented files that directly or indirectly include this file INCLUDED_BY_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found on the path. DOT_PATH = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 #--------------------------------------------------------------------------- # Configuration::addtions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = �������������������������������������������������������������������������������lame-3.100/ACM/tinyxml/Makefile.tinyxml�������������������������������������������������������������000644 �001751 �001751 �00000011757 07433512233 021347� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#**************************************************************************** # # Makefil for TinyXml test. # Lee Thomason # www.grinninglizard.com # # This is a GNU make (gmake) makefile #**************************************************************************** # DEBUG can be set to YES to include debugging info, or NO otherwise DEBUG := YES # PROFILE can be set to YES to include profiling info, or NO otherwise PROFILE := NO #**************************************************************************** CC := gcc CXX := g++ LD := g++ AR := ar rc RANLIB := ranlib DEBUG_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -g -DDEBUG RELEASE_CFLAGS := -Wall -Wno-unknown-pragmas -Wno-format -O2 LIBS := DEBUG_CXXFLAGS := ${DEBUG_CFLAGS} RELEASE_CXXFLAGS := ${RELEASE_CFLAGS} DEBUG_LDFLAGS := -g RELEASE_LDFLAGS := ifeq (YES, ${DEBUG}) CFLAGS := ${DEBUG_CFLAGS} CXXFLAGS := ${DEBUG_CXXFLAGS} LDFLAGS := ${DEBUG_LDFLAGS} else CFLAGS := ${RELEASE_CFLAGS} CXXFLAGS := ${RELEASE_CXXFLAGS} LDFLAGS := ${RELEASE_LDFLAGS} endif ifeq (YES, ${PROFILE}) CFLAGS := ${CFLAGS} -pg CXXFLAGS := ${CXXFLAGS} -pg LDFLAGS := ${LDFLAGS} -pg endif #**************************************************************************** # Preprocessor directives #**************************************************************************** ifeq (YES, ${PROFILE}) DEFS := else DEFS := endif #**************************************************************************** # Include paths #**************************************************************************** #INCS := -I/usr/include/g++-2 -I/usr/local/include INCS := #**************************************************************************** # Makefile code common to all platforms #**************************************************************************** CFLAGS := ${CFLAGS} ${DEFS} CXXFLAGS := ${CXXFLAGS} ${DEFS} #**************************************************************************** # Targets of the build #**************************************************************************** OUTPUT := xmltest all: ${OUTPUT} #**************************************************************************** # Source files #**************************************************************************** SRCS := tinyxml.cpp tinyxmlparser.cpp xmltest.cpp tinyxmlerror.cpp # Add on the sources for libraries SRCS := ${SRCS} OBJS := $(addsuffix .o,$(basename ${SRCS})) #**************************************************************************** # Output #**************************************************************************** ${OUTPUT}: ${OBJS} ${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS} #**************************************************************************** # common rules #**************************************************************************** # Rules for compiling source files to object files %.o : %.cpp ${CXX} -c ${CXXFLAGS} ${INCS} $< -o $@ %.o : %.c ${CC} -c ${CFLAGS} ${INCS} $< -o $@ clean: -rm -f core ${OBJS} ${OUTPUT} depend: makedepend ${INCS} ${SRCS} # DO NOT DELETE tinyxml.o: tinyxml.h /usr/include/stdio.h /usr/include/features.h tinyxml.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h tinyxml.o: /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h tinyxml.o: /usr/include/bits/sched.h /usr/include/libio.h tinyxml.o: /usr/include/_G_config.h /usr/include/wchar.h tinyxml.o: /usr/include/bits/wchar.h /usr/include/gconv.h tinyxml.o: /usr/include/bits/stdio_lim.h /usr/include/assert.h tinyxmlparser.o: tinyxml.h /usr/include/stdio.h /usr/include/features.h tinyxmlparser.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h tinyxmlparser.o: /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h tinyxmlparser.o: /usr/include/bits/sched.h /usr/include/libio.h tinyxmlparser.o: /usr/include/_G_config.h /usr/include/wchar.h tinyxmlparser.o: /usr/include/bits/wchar.h /usr/include/gconv.h tinyxmlparser.o: /usr/include/bits/stdio_lim.h /usr/include/assert.h tinyxmlparser.o: /usr/include/ctype.h /usr/include/endian.h tinyxmlparser.o: /usr/include/bits/endian.h xmltest.o: tinyxml.h /usr/include/stdio.h /usr/include/features.h xmltest.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h xmltest.o: /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h xmltest.o: /usr/include/bits/sched.h /usr/include/libio.h xmltest.o: /usr/include/_G_config.h /usr/include/wchar.h xmltest.o: /usr/include/bits/wchar.h /usr/include/gconv.h xmltest.o: /usr/include/bits/stdio_lim.h /usr/include/assert.h tinyxmlerror.o: tinyxml.h /usr/include/stdio.h /usr/include/features.h tinyxmlerror.o: /usr/include/sys/cdefs.h /usr/include/gnu/stubs.h tinyxmlerror.o: /usr/include/bits/types.h /usr/include/bits/pthreadtypes.h tinyxmlerror.o: /usr/include/bits/sched.h /usr/include/libio.h tinyxmlerror.o: /usr/include/_G_config.h /usr/include/wchar.h tinyxmlerror.o: /usr/include/bits/wchar.h /usr/include/gconv.h tinyxmlerror.o: /usr/include/bits/stdio_lim.h /usr/include/assert.h �����������������lame-3.100/debian/rules�����������������������������������������������������������������������������000644 �001751 �001751 �00000000531 11533472313 016363� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/make -f %: dh $@ --parallel CFLAGS += -g -Wall -Wextra LDFLAGS += -Wl,-O1 -Wl,-z,defs -Wl,--as-needed override_dh_auto_configure: dh_auto_configure -- \ --with-fileio=sndfile \ --enable-nasm \ --with-pic \ --disable-mp3x \ --disable-mp3rtp \ --disable-gtktest \ --enable-dynamic-frontends \ --enable-expopt=full �����������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/copyright�������������������������������������������������������������������������000644 �001751 �001751 �00000004377 11561266675 017272� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������This package was originally made by Stefan Karrmann <S.Karrmann@gmx.net> on Thu, 31 Aug 2000 22:15:07 +0200. The current maintainer is Rogério Brito <rbrito@users.sf.net>. It was downloaded from the CVS repository at <http://sf.net/projects/lame>. Upstream Authors: The LAME team <lame-dev@lists.sf.net>. Copyright © 1999-2009 The LAME team <lame-dev@lists.sf.net> and contributors. LAME is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. LAME 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 Library General Public License for more details. You should have received a copy of the GNU Library 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. Additionally, the original software's LICENCE file contains the following: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Can I use LAME in my commercial program? Yes, you can, under the restrictions of the LGPL. The easiest way to do this is to: 1. Link to LAME as separate library (libmp3lame.a on unix or lame_enc.dll on windows) 2. Fully acknowledge that you are using LAME, and give a link to our web site, www.mp3dev.org 3. If you make modifications to LAME, you *must* release these these modifications back to the LAME project, under the LGPL. *** IMPORTANT NOTE *** The decoding functions provided in LAME use the mpglib decoding engine which is under the GPL. They may not be used by any program not released under the GPL unless you obtain such permission from the MPG123 project (www.mpg123.de). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - On Debian systems, the complete text of the GNU Library General Public License can be found in `/usr/share/common-licenses/LGPL-2'. The Debian packaging is © 2005-2009, Rogério Brito <rbrito@users.sf.net> and is licensed under the GPL, see above. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/libmp3lame-dev.install������������������������������������������������������������000644 �001751 �001751 �00000000100 11177047070 021471� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������usr/include/lame/lame.h usr/lib/*.{a,la} usr/lib/libmp3lame*.so ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/compat����������������������������������������������������������������������������000644 �001751 �001751 �00000000002 11177047070 016507� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������7 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/lame.install����������������������������������������������������������������������000644 �001751 �001751 �00000000054 11177047070 017616� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������usr/bin/lame usr/share/doc/lame/html/*.html ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/changelog�������������������������������������������������������������������������000644 �001751 �001751 �00000024055 11533473276 017200� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame (3.99~cvs20110302) UNRELEASED; urgency=low * New update of the debian infra-structure. * debian/rules: + Transition to the short debhelper 7 format. + Use the --parallel flag so that building in parallel is supported. * debian/control: + Rewrap the Build-Depends field for legibility. + Change B-D on nasm to allow any i386 platform (no amd64, though). + Update the B-D on debhelper to >= 7.0.50~, as we use overrides in debian/rules. + Fix lintian's debhelper-but-no-misc-depends from the binary packages. + Remove unused Conflicts: and Replaces: fields. + Verified that the packaging conforms to the Policy version 3.9.1. * debian/changelog: + Put my SF email or we get warnings from lintian. -- Rogério Brito <rbrito@users.sf.net> Wed, 02 Mar 2011 13:31:29 -0300 lame (3.99~cvs20091122) unstable; urgency=low * Update based on many suggestions by Fabian Greffrath. * debian/compat: update to 7. * debian/control: + remame libmp3lame0-dev to libmp3lame-dev. + remove dependency on libc6-dev from libmp3lame-dev. + bump dependency on debhelper to 7. + bump Standards-Version to 3.8.0. * debian/libmp3lame0-dev.files: rename to libmp3lame-dev.files. * debian/*.files: rename to *.install. * debian/rules: + replace obsolete dh_clean -k with dh_prep. + substitute the use of dh_movefiles with dh_install. + changed the *FLAGS variables to use appends, not attributions. + include options -O1, -z,defs for the linker. + no need to pass options to dh_installman. + no need to pass options to dh_installchangelogs. * Initial transition to source format "3.0 (quilt)". -- Rogério Brito <rbrito@users.sf.net> Sun, 22 Nov 2009 19:19:39 -0200 lame (3.99~cvs20090419) unstable; urgency=low * Updating the packaging of lame. * debian/control: include autotools-dev as a build dependency. * debian/rules: + made use of autotools-dev. + remove switch --without-vorbis. + substituted `pwd` by $(CURDIR). * debian/watch: also consider versions with a letter in them. -- Rogério Brito <rbrito@users.sf.net> Sun, 19 Apr 2009 20:20:27 -0300 lame (3.99~cvs20081106) unstable; urgency=low * changes are now (mostly) committed to changelog. * debian/rules: include -Wl,--as-needed for the loader at compile time. * debian/rules: remove (not needed) hack for rpath (Tks Fabian Greffrath). * debian/control: depend libsndfile1-dev (Tks Fabian Greffrath). * debian/control: get rid of transitional liblame0. -- Rogério Brito <rbrito@users.sf.net> Sat, 12 Jul 2008 09:14:54 -0300 lame (3.98) unstable; urgency=low * Preparation for the final release. -- Rogério Brito <rbrito@users.sf.net> Sun, 29 Jun 2008 18:29:09 -0300 lame (3.98~beta8+cvs20080624) unstable; urgency=low * Preparation for the new upstream release (lame 3.98 final). * debian/control: eliminate build dependency on gtk1.2-dev. * debian/rules: include -Wextra in the CFLAGS variable. * debian/rules: explicitly disable some features from the build. -- Rogério Brito <rbrito@users.sf.net> Tue, 24 Jun 2008 15:16:22 -0300 lame (3.98~beta8+cvs20080514) unstable; urgency=low * Fixing debian packaging details. * debian/rules: put detection of architectures for cross-compilation. * debian/rules: included support for noopt option. * debian/rules: take more care of building everything under debian/tmp. * debian/control: updated to Standards-Version 3.7.3 (no changes). * debian/control: put correctly Conflicts: and Replaces in libmp3lame0{,-dev}. * debian/lame.docs: remove TODO and sort by name. * debian/libmp3lame0-dev.docs: include TODO. * debian/libmp3lame0-dev: include liblame0.so in the package. * debian/watch: include watchfile. -- Rogério Brito <rbrito@users.sf.net> Wed, 14 May 2008 01:44:46 -0300 lame (3.98~alpha1) unstable; urgency=low * New upstream release with various improvements; * Use libsndfile for input files; * Remove the parts that depend on gtk-1.2; * debian/rules: remove the DH_COMPAT variable; * debian/control: use ${binary:Version} to be up-to-date; * debian/control: use debhelper version >= 5; -- Rogério Brito <rbrito@users.sf.net> Wed, 09 Jan 2008 17:12:19 -0200 lame (3.98~alpha0) unstable; urgency=low * debian/copyright: updated FSF real address; * debian/rules: small fixes; * doc/man/lame.1: used accented characters in troff format. -- Rogério Brito <rbrito@users.sf.net> Mon, 10 Oct 2005 03:33:31 -0300 lame (3.97-8) unstable; urgency=low * debian/rules: enable full optimization, now that it works with GCC 4. -- Rogério Brito <rbrito@users.sf.net> Mon, 5 Sep 2005 01:24:44 -0300 lame (3.97-7) unstable; urgency=low * debian/control: make libmp3lame0 provide and replace liblame0. -- Rogério Brito <rbrito@users.sf.net> Tue, 16 Aug 2005 04:36:46 -0300 lame (3.97-6) unstable; urgency=low * debian/control: make libmp3lame0 provide liblame0 for legacy apps; * debian/control: fix typo in description of libmp3lame0-dev; * debian/libmp3lame0-dev.files: don't ship shared libraries. -- Rogério Brito <rbrito@users.sf.net> Tue, 16 Aug 2005 04:03:42 -0300 lame (3.97-5) unstable; urgency=low * debian/control: fix use of SONAME in the package; * debian/liblame0.*: renamed to libmp3lame0.* as per above; * debian/liblame-dev: idem; * debian/rules: incorporate some changes by Christian Marillat. -- Rogério Brito <rbrito@users.sf.net> Mon, 15 Aug 2005 00:47:25 -0300 lame (3.97-4) unstable; urgency=low * debian/control: exclude libsndfile0-dev as a build dependency. * debian/control: include libgtk1.2-dev as a build dependency. * debian/rules: s/--with-fileio=sndfile/--with-fileio=lame/, since grabbing input from stdin is a very important feature. -- Rogério Brito <rbrito@users.sf.net> Fri, 5 Aug 2005 02:01:40 -0300 lame (3.97-3) unstable; urgency=low * doc/man/lame.1: document the --{un,}signed options. * doc/man/lame.1: document the --{big,little}-endian options. * debian/control: include libsndfile0-dev as a build dependency. * debian/rules: s/--with-fileio=lame/--with-fileio=sndfile/ . -- Rogério Brito <rbrito@users.sf.net> Wed, 3 Aug 2005 21:35:17 -0300 lame (3.97-2) unstable; urgency=low * debian/rules: use dh_installman instead of dh_installmanpages. * doc/man/lame.1: escape minus signals with backslash. -- Rogério Brito <rbrito@users.sf.net> Wed, 27 Jul 2005 04:58:39 -0300 lame (3.97-1) unstable; urgency=low * Preparation for the beta release of lame 3.97. * Still more improvements to come. -- Rogério Brito <rbrito@users.sf.net> Tue, 26 Jul 2005 18:16:34 -0300 lame (3.97-0.2) unstable; urgency=low * Fixed debian/control according to the Debian Library Packaging Guide -- Jack Bates <ms419@freezone.co.uk> Thu, 12 May 2005 13:41:28 -0700 lame (3.97-0.1) unstable; urgency=low * Preparation for new upstream release. * debian/control: modified short descriptions to be lower case. -- Rogério Brito <rbrito@users.sf.net> Fri, 18 Mar 2005 01:18:42 -0300 lame (3.96-0.1) unstable; urgency=low * Update debian packaging for lame 3.96 -- Geoffrey T. Dairiki <dairiki@dairiki.org> Fri, 9 Apr 2004 10:28:12 -0700 lame (3.94-0.1) unstable; urgency=low * Update packaging for lame 3.94 alpha 14; * Made progress to make the package as lintian-clean as possible: * debian/copyright: removed the traces of the skeleton file; * debian/rules: avoid using --host, as per warning of ./configure; * debian/rules: use trick to avoind generating a library with rpath; * debian/lame.docs: avoid generating duplicate html documentation; * debian/control: added dependency on debhelper >= 3; * still more work left, but progressing anyway (i.e., changes listed in /usr/share/doc/debian-policy/upgrading-checklist.txt.gz should be applied). -- Rogério Brito <rbrito@users.sf.net> Tue, 15 Jul 2003 19:30:42 -0300 lame (3.93-0.1) unstable; urgency=low * Prevent lame 3.93 shipping and still building a 3.92 debian package; * Use --enable-nasm, as is shouldn't break compilation on non-x86; * Use --enable-expopt, to get a bit more of speed. -- Rogério Brito <rbrito@users.sf.net> Sun, 25 Aug 2002 18:58:16 -0300 lame (3.92-1) unstable; urgency=low * New upstream release. * Closes: #578135. -- Rogério Brito <linuxsup@ig.com.br> Sun, 28 Jul 2002 03:08:04 -0300 lame (3.91-1) unstable; urgency=low * New upstream release. -- Rogerio Brito <linuxsup@ig.com.br> Sun, 20 Jan 2002 20:50:19 -0200 lame (3.90.1-0) unstable; urgency=low * New upstream release. * debian/control: nasm is only a build-dependency on x86; * debian/control: added debhelper to build-dependency list; * debian/control: changed description of the binary packages; * debian/rules: enabled experimental/agressive optimizations; * debian/rules: effectively spread the installed files in binary packages; * debian/rules: now dh_makeshlibs creates good postinst and prerm scripts; * Changed the lame-dev package to liblame0-dev; * Removed references to lame-extras, since it doesn't exist anymore; * Added LICENCE to copyright and excluded it from the binary package; * Removed INSTALL from the binary package; * lame is now almost lintian clean (the only problem remaining is an rpath in liblame build process). -- Rogerio Brito <linuxsup@ig.com.br> Fri, 28 Dec 2001 04:08:57 -0200 lame (3.90-1) unstable; urgency=low * New upstream release. -- Viral <viral@debian.org> Tue, 21 Aug 2001 13:50:14 +0530 lame (3.89-1) unstable; urgency=low * New upstream version. * Added --host=$$(dpkg-architecture -qDEB_HOST_GNU_TYPE) to configure. * Added liblame0 package. * Added doc-base entry. * Actual ChangeLog is installed now instead of history.html -- Viral <viral@debian.org> Sun, 22 Jul 2001 03:07:30 +0530 lame (3.88-0) unstable; urgency=low * Updated debian/ directory to use configure. -- Ingo Saitz <Ingo.Saitz@stud.uni-hannover.de> Mon, 11 Dec 2000 08:43:26 +0100 lame (3.86-1) unstable; urgency=low * Initial Release. -- Stefan Karrmann <S.Karrmann@gmx.net> Thu, 31 Aug 2000 22:15:07 +0200 Local variables: mode: debian-changelog End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/CVS/������������������������������������������������������������������������������000755 �001751 �001751 �00000000000 13170220560 015734� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/Makefile.in�����������������������������������������������������������������������000644 �001751 �001751 �00000024720 11646314455 017370� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global subdir = debian ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ U = @U@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.11 foreign $(top_srcdir)/ansi2knr EXTRA_DIST = \ changelog \ compat \ control \ copyright \ libmp3lame-dev.install \ libmp3lame0.install \ lame.docs \ lame.install \ lame.manpages \ rules \ watch all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign debian/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign debian/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ dist-hook distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am # end global section dist-hook: chmod +x $(distdir)/rules # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������lame-3.100/debian/control���������������������������������������������������������������������������000644 �001751 �001751 �00000003315 11533473127 016720� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Source: lame Section: sound Priority: optional Maintainer: Rogério Brito <rbrito@users.sf.net> Bugs: mailto:lame-dev@lists.sourceforge.net Homepage: http://lame.sourceforge.net/ Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, nasm [any-i386], libsndfile1-dev, autotools-dev Standards-Version: 3.9.1 Package: lame Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: open source MP3 encoder Lame is a program which can be used to create compressed audio files. (Lame aint MP3 encoder). These audio files can be played back by popular mp3 players such as mpg123. To read from stdin, use "-" for <infile>. To write to stdout, use a "-" for <outfile>. . This package contains the frontend encoder binary. Package: libmp3lame0 Architecture: any Section: libs Depends: ${shlibs:Depends}, ${misc:Depends} Description: shared libraries for MP3 encoding Lame is a program which can be used to create compressed audio files. (Lame aint MP3 encoder). These audio files can be played back by popular mp3 players such as mpg123. To read from stdin, use "-" for <infile>. To write to stdout, use a "-" for <outfile>. . This package contains the dynamic library. Package: libmp3lame-dev Architecture: any Section: libdevel Depends: libmp3lame0 (= ${binary:Version}), ${misc:Depends} Description: development files for lame Lame is a program which can be used to create compressed audio files. (Lame aint MP3 encoder). These audio files can be played back by popular mp3 players such as mpg123. To read from stdin, use "-" for <infile>. To write to stdout, use a "-" for <outfile>. . This package contains the static library and header files for development with lame. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/watch�����������������������������������������������������������������������������000644 �001751 �001751 �00000000056 11173005240 016330� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������version=3 http://sf.net/lame/lame-(.*).tar.gz ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/lame.docs�������������������������������������������������������������������������000644 �001751 �001751 �00000000006 11012513714 017064� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������USAGE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/���������������������������������������������������������������������������000755 �001751 �001751 �00000000000 12652740417 016615� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/.cvsignore������������������������������������������������������������������������000644 �001751 �001751 �00000000011 07417031426 017301� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Makefile �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/lame.doc-base���������������������������������������������������������������������000644 �001751 �001751 �00000000426 11302333237 017621� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������Document: lame Abstract: This manual describes the LAME MP3 encoder and concepts behind audio compression. Author: The LAME Development Team Section: Sound Title: LAME MP3 encoder manual Format: HTML Index: /usr/share/doc/lame/html/index.html Files: /usr/share/doc/lame/html/* ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/Makefile.am�����������������������������������������������������������������������000644 �001751 �001751 �00000000473 11646314455 017356� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.8 2011/10/15 14:31:09 robert Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ changelog \ compat \ control \ copyright \ libmp3lame-dev.install \ libmp3lame0.install \ lame.docs \ lame.install \ lame.manpages \ rules \ watch dist-hook: chmod +x $(distdir)/rules �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/lame.manpages���������������������������������������������������������������������000644 �001751 �001751 �00000000017 10271644426 017744� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������doc/man/lame.1 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/libmp3lame0.install���������������������������������������������������������������000644 �001751 �001751 �00000000030 11177047070 020777� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������usr/lib/libmp3lame.so.* ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/format���������������������������������������������������������������������000644 �001751 �001751 �00000000014 11302325237 020011� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0 (quilt) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/CVS/�����������������������������������������������������������������������000755 �001751 �001751 �00000000000 12652740417 017250� 5����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/CVS/Repository�������������������������������������������������������������000644 �001751 �001751 �00000000023 12652740417 021345� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame/debian/source �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/CVS/Root�������������������������������������������������������������������000644 �001751 �001751 �00000000067 12652740417 020121� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������:ext:aleidinger@lame.cvs.sourceforge.net:/cvsroot/lame �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/source/CVS/Entries����������������������������������������������������������������000644 �001751 �001751 �00000000051 12652740417 020600� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/format/1.1/Sun Nov 22 21:18:23 2009// D ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/CVS/Root��������������������������������������������������������������������������000644 �001751 �001751 �00000000067 12652740417 016621� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������:ext:aleidinger@lame.cvs.sourceforge.net:/cvsroot/lame �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/CVS/Repository��������������������������������������������������������������������000644 �001751 �001751 �00000000014 12652740417 020045� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame/debian ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/debian/CVS/Entries�����������������������������������������������������������������������000644 �001751 �001751 �00000001241 13170220560 017266� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������/.cvsignore/1.1/Wed Jan 9 12:09:58 2002// /Makefile.am/1.8/Sat Oct 15 14:31:09 2011// /Makefile.in/1.27/Sat Oct 15 14:31:09 2011// /changelog/1.31/Wed Mar 2 16:56:30 2011// /compat/1.2/Sat May 2 13:44:24 2009// /control/1.28/Wed Mar 2 16:54:47 2011// /copyright/1.9/Sat May 7 16:05:17 2011// /lame.doc-base/1.3/Sun Nov 22 22:09:35 2009// /lame.docs/1.6/Wed May 14 07:42:04 2008// /lame.install/1.1/Sat May 2 13:44:24 2009// /lame.manpages/1.1/Wed Jul 27 08:43:02 2005// /libmp3lame-dev.install/1.1/Sat May 2 13:44:24 2009// /libmp3lame0.install/1.1/Sat May 2 13:44:24 2009// /rules/1.24/Wed Mar 2 16:48:11 2011// /watch/1.2/Mon Apr 20 05:39:44 2009// D/source//// ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_acm_tinyxml.vcproj��������������������������������������������������000644 �001751 �001751 �00000011037 11103144103 023745� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="ACM tinyxml" ProjectGUID="{30219289-3B7F-4E02-BC34-C1DBD08CD848}" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Release|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" StringPooling="true" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(IntDir)\$(ProjectName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(IntDir)\$(ProjectName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <File RelativePath="..\ACM\tinyxml\changes.txt" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\ACM\tinyxml\readme.txt" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\ACM\tinyxml\tinyxml.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\tinyxml\tinyxml.h" > </File> <File RelativePath="..\ACM\tinyxml\tinyxmlerror.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\tinyxml\tinyxmlparser.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Files> <Globals> </Globals> </VisualStudioProject> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/Makefile.in������������������������������������������������������������������000644 �001751 �001751 �00000032123 13170220147 020472� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # global section for every Makefile.am VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = vc_solution ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/Makefile.am.global DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_DEFS = @CONFIG_DEFS@ CONFIG_MATH_LIB = @CONFIG_MATH_LIB@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPUCCODE = @CPUCCODE@ CPUTYPE = @CPUTYPE@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FRONTEND_CFLAGS = @FRONTEND_CFLAGS@ FRONTEND_LDADD = @FRONTEND_LDADD@ FRONTEND_LDFLAGS = @FRONTEND_LDFLAGS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ INCLUDES = @INCLUDES@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDADD = @LDADD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOL_DEPS = @LIBTOOL_DEPS@ LIB_MAJOR_VERSION = @LIB_MAJOR_VERSION@ LIB_MINOR_VERSION = @LIB_MINOR_VERSION@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAINT = @MAINT@ MAKEDEP = @MAKEDEP@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NASM = @NASM@ NASM_FORMAT = @NASM_FORMAT@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ RM_F = @RM_F@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ WITH_FRONTEND = @WITH_FRONTEND@ WITH_MP3RTP = @WITH_MP3RTP@ WITH_MP3X = @WITH_MP3X@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.15 foreign EXTRA_DIST = \ arch_nasm.vsprops \ arch_sse2.vsprops \ arch_x87.vsprops \ vc9_lame_acm_adbg.vcproj \ vc9_lame_acm_tinyxml.vcproj \ vc9_lame_acm.vcproj \ vc9_lame_clients.sln \ vc9_lame_config.vsprops \ vc9_lame_dll_example.vcproj \ vc9_lame_dll.vcproj \ vc9_lame_dshow.vcproj \ vc9_lame_lame.vcproj \ vc9_lame_mp3rtp.vcproj \ vc9_lame_mp3x.vcproj \ vc9_lame_test.vcproj \ vc9_lame.sln \ vc9_libmp3lame_dll.vcproj \ vc9_libmp3lame.vcproj \ vc9_mpglib.vcproj \ vc9_nasm.rules all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.global $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign vc_solution/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign vc_solution/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Makefile.am.global $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # end global section # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_dll.vcproj����������������������������������������������������������000644 �001751 �001751 �00000011615 11103144103 022176� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="lame_enc_dll" ProjectGUID="{0E4820D3-DBE3-477A-910B-7C020D6066D1}" RootNamespace="lame_enc_dll" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Debug|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" TypeLibraryName="..\output\Debug/LameDll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../include" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LAMEMP3ENCDLL_EXPORTS" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="libmp3lame.lib odbc32.lib odbccp32.lib" OutputFile="..\output\Debug\lame_enc.dll" AdditionalLibraryDirectories="" GenerateDebugInformation="true" ImportLibrary="$(OutDir)/lame_enc.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" TypeLibraryName="..\output\Release/LameDll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="2" AdditionalIncludeDirectories="../include" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LAMEMP3ENCDLL_EXPORTS" StringPooling="true" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="libmp3lame.lib" OutputFile="..\output\Release\lame_enc.dll" LinkIncremental="1" AdditionalLibraryDirectories="" ImportLibrary="$(OutDir)/lame_enc.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > <File RelativePath="..\Dll\BladeMP3EncDLL.c" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\Dll\BladeMP3EncDLL.def" > <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl" > <File RelativePath="..\Dll\BladeMP3EncDLL.h" > </File> </Filter> <Filter Name="Resource Files" Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" > </Filter> </Files> <Globals> </Globals> </VisualStudioProject> �������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_clients.sln���������������������������������������������������������000644 �001751 �001751 �00000016114 11340050741 022363� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ACM ADbg", "vc9_lame_acm_adbg.vcproj", "{0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ACM tinyxml", "vc9_lame_acm_tinyxml.vcproj", "{30219289-3B7F-4E02-BC34-C1DBD08CD848}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ACM", "vc9_lame_acm.vcproj", "{FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}" ProjectSection(ProjectDependencies) = postProject {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA} = {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA} {30219289-3B7F-4E02-BC34-C1DBD08CD848} = {30219289-3B7F-4E02-BC34-C1DBD08CD848} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DShow", "vc9_lame_dshow.vcproj", "{6D348A4E-8B40-4FB0-BB57-C982D51FFA01}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lame_enc_dll", "vc9_lame_dll.vcproj", "{0E4820D3-DBE3-477A-910B-7C020D6066D1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lame_enc_dll_example", "vc9_lame_dll_example.vcproj", "{D169F06E-6607-4A9F-A075-2335717B9AB5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lame_test", "vc9_lame_test.vcproj", "{2FE9808B-2B03-48D9-94FC-6C907D39E2AC}" ProjectSection(ProjectDependencies) = postProject {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2} = {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmp3lameDLL", "vc9_libmp3lame_dll.vcproj", "{92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 ReleaseNASM|Win32 = ReleaseNASM|Win32 ReleaseSSE2|Win32 = ReleaseSSE2|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.Debug|Win32.ActiveCfg = Debug|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.Debug|Win32.Build.0 = Debug|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.Release|Win32.ActiveCfg = Release|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.Release|Win32.Build.0 = Release|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.ReleaseNASM|Win32.Build.0 = Release|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.Debug|Win32.ActiveCfg = Debug|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.Debug|Win32.Build.0 = Debug|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.Release|Win32.ActiveCfg = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.Release|Win32.Build.0 = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.ReleaseNASM|Win32.Build.0 = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {30219289-3B7F-4E02-BC34-C1DBD08CD848}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.Debug|Win32.ActiveCfg = Debug|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.Debug|Win32.Build.0 = Debug|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.Release|Win32.ActiveCfg = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.Release|Win32.Build.0 = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.ReleaseNASM|Win32.Build.0 = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.Debug|Win32.ActiveCfg = Debug|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.Debug|Win32.Build.0 = Debug|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.Release|Win32.ActiveCfg = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.Release|Win32.Build.0 = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.ReleaseNASM|Win32.Build.0 = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {6D348A4E-8B40-4FB0-BB57-C982D51FFA01}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.Debug|Win32.ActiveCfg = Debug|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.Debug|Win32.Build.0 = Debug|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.Release|Win32.ActiveCfg = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.Release|Win32.Build.0 = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.ReleaseNASM|Win32.Build.0 = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {0E4820D3-DBE3-477A-910B-7C020D6066D1}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.Debug|Win32.ActiveCfg = Debug|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.Debug|Win32.Build.0 = Debug|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.Release|Win32.ActiveCfg = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.Release|Win32.Build.0 = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.ReleaseNASM|Win32.Build.0 = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {D169F06E-6607-4A9F-A075-2335717B9AB5}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.Debug|Win32.ActiveCfg = Debug|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.Debug|Win32.Build.0 = Debug|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.Release|Win32.ActiveCfg = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.Release|Win32.Build.0 = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.ReleaseNASM|Win32.ActiveCfg = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.ReleaseNASM|Win32.Build.0 = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.ReleaseSSE2|Win32.ActiveCfg = Release|Win32 {2FE9808B-2B03-48D9-94FC-6C907D39E2AC}.ReleaseSSE2|Win32.Build.0 = Release|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Debug|Win32.ActiveCfg = Debug|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Debug|Win32.Build.0 = Debug|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Release|Win32.ActiveCfg = Release|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Release|Win32.Build.0 = Release|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/arch_x87.vsprops�������������������������������������������������������������000644 �001751 �001751 �00000000373 11142701175 021512� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visual C++" Version="8.00" Name="arch_x87" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="TAKEHIRO_IEEE754_HACK" /> </VisualStudioPropertySheet> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_test.vcproj���������������������������������������������������������000644 �001751 �001751 �00000006526 11340050741 022416� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="lame_test" ProjectGUID="{2FE9808B-2B03-48D9-94FC-6C907D39E2AC}" RootNamespace="lame_test" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Release|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="2" AdditionalIncludeDirectories="..\include" PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="true" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalLibraryDirectories="" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\include" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalLibraryDirectories="" GenerateDebugInformation="true" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <File RelativePath="..\test\lame_test.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Files> <Globals> </Globals> </VisualStudioProject> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/Makefile.am������������������������������������������������������������������000644 �001751 �001751 �00000001131 13170220131 020445� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������## $Id: Makefile.am,v 1.3 2017/10/13 20:21:45 aleidinger Exp $ include $(top_srcdir)/Makefile.am.global EXTRA_DIST = \ arch_nasm.vsprops \ arch_sse2.vsprops \ arch_x87.vsprops \ vc9_lame_acm_adbg.vcproj \ vc9_lame_acm_tinyxml.vcproj \ vc9_lame_acm.vcproj \ vc9_lame_clients.sln \ vc9_lame_config.vsprops \ vc9_lame_dll_example.vcproj \ vc9_lame_dll.vcproj \ vc9_lame_dshow.vcproj \ vc9_lame_lame.vcproj \ vc9_lame_mp3rtp.vcproj \ vc9_lame_mp3x.vcproj \ vc9_lame_test.vcproj \ vc9_lame.sln \ vc9_libmp3lame_dll.vcproj \ vc9_libmp3lame.vcproj \ vc9_mpglib.vcproj \ vc9_nasm.rules ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_mp3rtp.vcproj�������������������������������������������������������000644 �001751 �001751 �00000017333 11642115664 022675� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="app mp3rtp" ProjectGUID="{C04BA4EA-F719-456D-A332-6C3AF92D7BEA}" RootNamespace="mp3rtp" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\ReleaseNASM/mp3rtp.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H;HAVE_NASM;MMX_choose_table" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="wsock32.lib" OutputFile="$(OutDir)\mp3rtp.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Debug/mp3rtp.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../,../mpglib,../libmp3lame,../include" PreprocessorDefinitions="_DEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" RuntimeLibrary="1" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="wsock32.lib" OutputFile="$(OutDir)\mp3rtp.exe" GenerateDebugInformation="true" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/mp3rtp.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="wsock32.lib" OutputFile="$(OutDir)\mp3rtp.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/mp3rtp.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="wsock32.lib" OutputFile="$(OutDir)\mp3rtp.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > <File RelativePath="..\frontend\brhist.c" > </File> <File RelativePath="..\frontend\console.c" > </File> <File RelativePath="..\frontend\get_audio.c" > </File> <File RelativePath="..\frontend\lametime.c" > </File> <File RelativePath="..\frontend\main.c" > </File> <File RelativePath="..\frontend\mp3rtp.c" > </File> <File RelativePath="..\frontend\parse.c" > </File> <File RelativePath="..\frontend\rtp.c" > </File> <File RelativePath="..\frontend\timestatus.c" > </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl" > <File RelativePath="..\frontend\brhist.h" > </File> <File RelativePath="..\frontend\console.h" > </File> <File RelativePath="..\frontend\get_audio.h" > </File> <File RelativePath="..\frontend\lametime.h" > </File> <File RelativePath="..\frontend\main.h" > </File> <File RelativePath="..\frontend\parse.h" > </File> <File RelativePath="..\frontend\rtp.h" > </File> <File RelativePath="..\frontend\timestatus.h" > </File> </Filter> <File RelativePath="..\libmp3lame\lame.rc" > </File> </Files> <Globals> </Globals> </VisualStudioProject> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_acm_adbg.vcproj�����������������������������������������������������000644 �001751 �001751 �00000006164 11103144103 023143� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="ACM ADbg" ProjectGUID="{0D7CAB1B-AE57-4BA1-BDBF-D7391AAA81AA}" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Debug|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(IntDir)\$(ProjectName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS" StringPooling="true" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1036" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(IntDir)\$(ProjectName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Sources" Filter="cpp" > <File RelativePath="..\ACM\ADbg\ADbg.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Filter> <Filter Name="Headers" Filter="h" > <File RelativePath="..\ACM\ADbg\ADbg.h" > </File> </Filter> </Files> <Globals> </Globals> </VisualStudioProject> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_dll_example.vcproj��������������������������������������������������000644 �001751 �001751 �00000006665 11103144103 023722� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="lame_enc_dll_example" ProjectGUID="{D169F06E-6607-4A9F-A075-2335717B9AB5}" RootNamespace="lame_enc_dll_example" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Release|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\obj\Release\LameMp3EncDll/Example.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="2" PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" StringPooling="true" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalLibraryDirectories="" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\obj\Debug\LameMp3EncDll/Example.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalLibraryDirectories="" GenerateDebugInformation="true" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <File RelativePath="..\Dll\Example.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Files> <Globals> </Globals> </VisualStudioProject> ���������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_config.vsprops������������������������������������������������������000644 �001751 �001751 �00000001541 11173166617 023123� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visual C++" Version="8.00" Name="vc9_lame_config" OutputDirectory="$(SolutionDir)..\output\$(ConfigurationName)" IntermediateDirectory="$(SolutionDir)..\obj\$(ConfigurationName)\$(ProjectName)" > <Tool Name="VCBscMakeTool" OutputFile="$(IntDir)/$(ProjectName).bsc" /> <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATED" StringPooling="true" EnableFunctionLevelLinking="true" AssemblerListingLocation="$(IntDir)\" BrowseInformation="1" WarningLevel="4" DisableSpecificWarnings="4995;4996" /> <Tool Name="VCLinkerTool" LinkIncremental="1" AdditionalLibraryDirectories="$(OutDir)" ProgramDatabaseFile="$(OutDir)/$(TargetName).pdb" OptimizeReferences="2" /> </VisualStudioPropertySheet> ���������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_nasm.rules���������������������������������������������������������������000644 �001751 �001751 �00000002123 10765010536 021223� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <VisualStudioToolFile Name="NASM " Version="8,00" > <Rules> <CustomBuildRule Name="NASM" DisplayName="NASM" CommandLine="nasmw [BinFormat] [IncludeDir] [Defines] -o [OutFile] $(InputPath)" Outputs="[OutFile]" FileExtensions="*.nas" ExecutionDescription="Assembling $(InputName)..." ShowOnlyRuleProperties="false" > <Properties> <StringProperty Name="OutFile" DisplayName="output file path" Switch="[value]" DefaultValue="$(IntDir)\$(InputName).obj" /> <StringProperty Name="BinFormat" DisplayName="Binary format" Switch="-f [value]" DefaultValue="win32" /> <StringProperty Name="IncludeDir" DisplayName="Additional include directories" Switch="-i [value]" DefaultValue="$(InputDir)" Delimited="true" /> <StringProperty Name="Defines" DisplayName="Defines" Switch="-D[value]" DefaultValue="WIN32" Delimited="true" Delimiters=" ;," /> </Properties> </CustomBuildRule> </Rules> </VisualStudioToolFile> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_lame.vcproj���������������������������������������������������������000644 �001751 �001751 �00000016650 11642115664 022367� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="app lame" ProjectGUID="{EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}" RootNamespace="lame" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\ReleaseNASM/lame.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H;HAVE_NASM;MMX_choose_table" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" OutputFile="$(OutDir)\lame.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Debug/lame.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../,../mpglib,../libmp3lame,../include" PreprocessorDefinitions="_DEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" RuntimeLibrary="1" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" OutputFile="$(OutDir)\lame.exe" GenerateDebugInformation="true" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/lame.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" OutputFile="$(OutDir)\lame.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/lame.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="..,../mpglib,../libmp3lame,../include,../" PreprocessorDefinitions="NDEBUG;WIN32;_WIN32;_CONSOLE;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" OutputFile="$(OutDir)\lame.exe" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" > <File RelativePath="..\frontend\brhist.c" > </File> <File RelativePath="..\frontend\console.c" > </File> <File RelativePath="..\frontend\get_audio.c" > </File> <File RelativePath="..\frontend\lame_main.c" > </File> <File RelativePath="..\frontend\lametime.c" > </File> <File RelativePath="..\frontend\main.c" > </File> <File RelativePath="..\frontend\parse.c" > </File> <File RelativePath="..\frontend\timestatus.c" > </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl" > <File RelativePath="..\frontend\brhist.h" > </File> <File RelativePath="..\frontend\console.h" > </File> <File RelativePath="..\frontend\get_audio.h" > </File> <File RelativePath="..\frontend\lametime.h" > </File> <File RelativePath="..\frontend\main.h" > </File> <File RelativePath="..\frontend\parse.h" > </File> <File RelativePath="..\frontend\timestatus.h" > </File> </Filter> <File RelativePath="..\libmp3lame\lame.rc" > </File> </Files> <Globals> </Globals> </VisualStudioProject> ����������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame.sln�����������������������������������������������������������������000644 �001751 �001751 �00000013731 11640670520 020652� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Microsoft Visual Studio Solution File, Format Version 10.00 # Visual C++ Express 2008 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "app lame", "vc9_lame_lame.vcproj", "{EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}" ProjectSection(ProjectDependencies) = postProject {20536101-3B0E-43EF-94F9-080D595DAC57} = {20536101-3B0E-43EF-94F9-080D595DAC57} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib encoder LAME", "vc9_libmp3lame.vcproj", "{20536101-3B0E-43EF-94F9-080D595DAC57}" ProjectSection(ProjectDependencies) = postProject {E2DAB91A-8248-4625-8A85-2C2C2A390DD8} = {E2DAB91A-8248-4625-8A85-2C2C2A390DD8} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dll lame", "vc9_libmp3lame_dll.vcproj", "{92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}" ProjectSection(ProjectDependencies) = postProject {20536101-3B0E-43EF-94F9-080D595DAC57} = {20536101-3B0E-43EF-94F9-080D595DAC57} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib decoder HIP", "vc9_mpglib.vcproj", "{E2DAB91A-8248-4625-8A85-2C2C2A390DD8}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "app mp3rtp", "vc9_lame_mp3rtp.vcproj", "{C04BA4EA-F719-456D-A332-6C3AF92D7BEA}" ProjectSection(ProjectDependencies) = postProject {20536101-3B0E-43EF-94F9-080D595DAC57} = {20536101-3B0E-43EF-94F9-080D595DAC57} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "app mp3x", "vc9_lame_mp3x.vcproj", "{E745EB1A-070A-45ED-B8BD-D9F794E23CFA}" ProjectSection(ProjectDependencies) = postProject {20536101-3B0E-43EF-94F9-080D595DAC57} = {20536101-3B0E-43EF-94F9-080D595DAC57} EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 ReleaseNASM|Win32 = ReleaseNASM|Win32 ReleaseSSE2|Win32 = ReleaseSSE2|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.Debug|Win32.ActiveCfg = Debug|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.Debug|Win32.Build.0 = Debug|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.Release|Win32.ActiveCfg = Release|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.Release|Win32.Build.0 = Release|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {EEF5B49E-DBD1-4E1B-8B86-C5D64FCBAD38}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.Debug|Win32.ActiveCfg = Debug|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.Debug|Win32.Build.0 = Debug|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.Release|Win32.ActiveCfg = Release|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.Release|Win32.Build.0 = Release|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {20536101-3B0E-43EF-94F9-080D595DAC57}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Debug|Win32.ActiveCfg = Debug|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Debug|Win32.Build.0 = Debug|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Release|Win32.ActiveCfg = Release|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.Release|Win32.Build.0 = Release|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.Debug|Win32.ActiveCfg = Debug|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.Debug|Win32.Build.0 = Debug|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.Release|Win32.ActiveCfg = Release|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.Release|Win32.Build.0 = Release|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {E2DAB91A-8248-4625-8A85-2C2C2A390DD8}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.Debug|Win32.ActiveCfg = Debug|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.Debug|Win32.Build.0 = Debug|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.Release|Win32.ActiveCfg = Release|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.Release|Win32.Build.0 = Release|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {C04BA4EA-F719-456D-A332-6C3AF92D7BEA}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.Debug|Win32.ActiveCfg = Debug|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.Debug|Win32.Build.0 = Debug|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.Release|Win32.ActiveCfg = Release|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.Release|Win32.Build.0 = Release|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.ReleaseNASM|Win32.ActiveCfg = ReleaseNASM|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.ReleaseNASM|Win32.Build.0 = ReleaseNASM|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.ReleaseSSE2|Win32.ActiveCfg = ReleaseSSE2|Win32 {E745EB1A-070A-45ED-B8BD-D9F794E23CFA}.ReleaseSSE2|Win32.Build.0 = ReleaseSSE2|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ���������������������������������������lame-3.100/vc_solution/vc9_libmp3lame_dll.vcproj����������������������������������������������������000644 �001751 �001751 �00000017233 11640670520 023324� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="libmp3lame" ProjectGUID="{92BD50AA-04D6-4FBF-ACE1-468FAF6778F2}" RootNamespace="libmp3lameDLL" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> <ToolFile RelativePath=".\vc9_nasm.rules" /> </ToolFiles> <Configurations> <Configuration Name="Release|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/libmp3lame_dll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../,../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_VC80_UPGRADE=0x0600;_DLL=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" UseLibraryDependencyInputs="false" OutputFile="$(OutDir)/libmp3lame.dll" ModuleDefinitionFile="..\include\lame.def" ImportLibrary="$(OutDir)/libmp3lame.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\ReleaseNASM/libmp3lame_dll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../,../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;HAVE_CONFIG_H;WIN32;_CRT_SECURE_NO_DEPRECATE" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_VC80_UPGRADE=0x0600;_DLL=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" UseLibraryDependencyInputs="false" OutputFile="$(OutDir)/libmp3lame.dll" ModuleDefinitionFile="..\include\lame.def" ImportLibrary="$(OutDir)/libmp3lame.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Debug/libmp3lame_dll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../libmp3lame,../,../mpglib,../include,.." PreprocessorDefinitions="_DEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" RuntimeLibrary="3" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_VC80_UPGRADE=0x0600;_DLL=$(TargetFileName);_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" UseLibraryDependencyInputs="false" OutputFile="$(OutDir)/libmp3lame.dll" ModuleDefinitionFile="..\include\lame.def" GenerateDebugInformation="true" ImportLibrary="$(OutDir)/libmp3lame.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/libmp3lame_dll.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../,../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" RuntimeLibrary="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_VC80_UPGRADE=0x0600;_DLL=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" OutputFile="$(OutDir)/libmp3lame.dll" ModuleDefinitionFile="..\include\lame.def" ImportLibrary="$(OutDir)/libmp3lame.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <File RelativePath="..\libmp3lame\..\include\lame.def" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="ReleaseNASM|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\lame.rc" > </File> </Files> <Globals> </Globals> </VisualStudioProject> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_mpglib.vcproj������������������������������������������������������������000644 �001751 �001751 �00000032250 11640670520 021712� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="libmpghip-static" ProjectGUID="{E2DAB91A-8248-4625-8A85-2C2C2A390DD8}" RootNamespace="libmpghip" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../include,.." PreprocessorDefinitions="NDEBUG;HAVE_MPGLIB;_WINDOWS;USE_LAYER_2;WIN32;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmpghip-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../include,.." PreprocessorDefinitions="NDEBUG;HAVE_MPGLIB;_WINDOWS;USE_LAYER_2;WIN32;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmpghip-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../libmp3lame,../include,.." PreprocessorDefinitions="_DEBUG;_WINDOWS;USE_LAYER_2;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" RuntimeLibrary="1" ProgramDataBaseFileName="$(OutDir)\$(TargetName).pdb" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmpghip-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../libmp3lame,../include,.." PreprocessorDefinitions="NDEBUG;HAVE_MPGLIB;_WINDOWS;USE_LAYER_2;WIN32;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmpghip-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source" Filter="c" > <File RelativePath="..\mpglib\common.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\dct64_i386.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\decode_i386.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\interface.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\layer1.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\layer2.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\layer3.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\tabinit.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> </Filter> <Filter Name="Include" Filter="h" > <File RelativePath="..\mpglib\common.h" > </File> <File RelativePath="..\mpglib\..\configMS.h" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> </File> <File RelativePath="..\mpglib\dct64_i386.h" > </File> <File RelativePath="..\mpglib\decode_i386.h" > </File> <File RelativePath="..\mpglib\huffman.h" > </File> <File RelativePath="..\mpglib\interface.h" > </File> <File RelativePath="..\mpglib\l2tables.h" > </File> <File RelativePath="..\mpglib\layer1.h" > </File> <File RelativePath="..\mpglib\layer2.h" > </File> <File RelativePath="..\mpglib\layer3.h" > </File> <File RelativePath="..\mpglib\mpg123.h" > </File> <File RelativePath="..\mpglib\mpglib.h" > </File> <File RelativePath="..\mpglib\tabinit.h" > </File> </Filter> </Files> <Globals> </Globals> </VisualStudioProject> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_mp3x.vcproj���������������������������������������������������������000644 �001751 �001751 �00000022061 11642115664 022331� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="app mp3x" ProjectGUID="{E745EB1A-070A-45ED-B8BD-D9F794E23CFA}" RootNamespace="mp3x" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\ReleaseNASM/mp3x.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="./WinGTK/gtk-plus,./WinGTK/glib-1.2,./WinGtk/src/gtk+,./WinGtk/src/glib,./WinGtk/src/gtk+/gdk,../include,../libmp3lame,../mp3x,../frontend,.." PreprocessorDefinitions="NDEBUG;LAMEPARSE;WIN32;_CONSOLE;HAVE_MPGLIB;LAMESNDFILE;BRHIST;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG;_APP=$(TargetFileName)" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="odbc32.lib odbccp32.lib gdk-1.3.lib gtk-1.3.lib glib-1.3.lib" OutputFile="$(OutDir)\mp3x.exe" AdditionalLibraryDirectories="./WinGtk/src/gtk+/gtk,./WinGtk/src/gtk+/gdk,./WinGtk/src/glib" GenerateMapFile="true" MapFileName="..\obj\ReleaseNASM\frontend/mp3x.map" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Debug/mp3x.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="./WinGtk/src/gtk+,./WinGtk/src/glib,./WinGtk/src/gtk+/gdk,../include,../libmp3lame,../mp3x,../frontend,.." PreprocessorDefinitions="LAMESNDFILE;BRHIST;_DEBUG;WIN32;_CONSOLE;HAVE_MPGLIB;HAVE_CONFIG_H" RuntimeLibrary="1" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="odbc32.lib odbccp32.lib gdk-1.3.lib gtk-1.3.lib glib-1.3.lib" OutputFile="$(OutDir)\mp3x.exe" AdditionalLibraryDirectories="./WinGtk/src/gtk+/gtk,./WinGtk/src/gtk+/gdk,./WinGtk/src/glib" GenerateDebugInformation="true" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\Release/mp3x.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="./WinGTK/gtk-plus,./WinGTK/glib-1.2,./WinGtk/src/gtk+,./WinGtk/src/glib,./WinGtk/src/gtk+/gdk,../include,../libmp3lame,../mp3x,../frontend,.." PreprocessorDefinitions="NDEBUG;LAMEPARSE;WIN32;_CONSOLE;HAVE_MPGLIB;LAMESNDFILE;BRHIST;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="odbc32.lib odbccp32.lib gdk-1.3.lib gtk-1.3.lib glib-1.3.lib" OutputFile="$(OutDir)\mp3x.exe" AdditionalLibraryDirectories="./WinGtk/src/gtk+/gtk,./WinGtk/src/gtk+/gdk,./WinGtk/src/glib" GenerateMapFile="true" MapFileName="..\obj\Release\frontend/mp3x.map" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="1" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" TypeLibraryName="..\output\ReleaseSSE2/mp3x.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="./WinGTK/gtk-plus,./WinGTK/glib-1.2,./WinGtk/src/gtk+,./WinGtk/src/glib,./WinGtk/src/gtk+/gdk,../include,../libmp3lame,../mp3x,../frontend,.." PreprocessorDefinitions="NDEBUG;LAMEPARSE;WIN32;_CONSOLE;HAVE_MPGLIB;LAMESNDFILE;BRHIST;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" AdditionalDependencies="odbc32.lib odbccp32.lib gdk-1.3.lib gtk-1.3.lib glib-1.3.lib" OutputFile="$(OutDir)\mp3x.exe" AdditionalLibraryDirectories="./WinGtk/src/gtk+/gtk,./WinGtk/src/gtk+/gdk,./WinGtk/src/glib" GenerateMapFile="true" MapFileName="..\obj\ReleaseSSE2\frontend/mp3x.map" SubSystem="1" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source" Filter="c" > <File RelativePath="..\frontend\brhist.c" > </File> <File RelativePath="..\frontend\console.c" > </File> <File RelativePath="..\frontend\get_audio.c" > </File> <File RelativePath="..\frontend\gpkplotting.c" > </File> <File RelativePath="..\frontend\gtkanal.c" > </File> <File RelativePath="..\frontend\lametime.c" > </File> <File RelativePath="..\frontend\main.c" > </File> <File RelativePath="..\frontend\mp3x.c" > </File> <File RelativePath="..\frontend\parse.c" > </File> <File RelativePath="..\frontend\timestatus.c" > </File> </Filter> <Filter Name="Include" Filter="h" > <File RelativePath="..\frontend\brhist.h" > </File> <File RelativePath="..\frontend\..\configMS.h" > </File> <File RelativePath="..\frontend\console.h" > </File> <File RelativePath="..\frontend\get_audio.h" > </File> <File RelativePath="..\frontend\gpkplotting.h" > </File> <File RelativePath="..\frontend\lametime.h" > </File> <File RelativePath="..\frontend\main.h" > </File> <File RelativePath="..\frontend\parse.h" > </File> <File RelativePath="..\frontend\timestatus.h" > </File> </Filter> <File RelativePath="..\libmp3lame\lame.rc" > </File> <File RelativePath="..\frontend\..\README.WINGTK" > </File> </Files> <Globals> </Globals> </VisualStudioProject> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_acm.vcproj����������������������������������������������������������000644 �001751 �001751 �00000021453 11103144103 022164� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="ACM" ProjectGUID="{FC3D65E7-B7CB-406E-B6C9-0B26E30FE7F4}" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Release|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" TypeLibraryName=".\..\output\Release/lameACM.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" InlineFunctionExpansion="2" AdditionalIncludeDirectories="../include,../mpglib,../ACM,../ACM/ddk" PreprocessorDefinitions="NDEBUG;_BLADEDLL;_WINDOWS;WIN32;LAME_ACM" StringPooling="true" RuntimeLibrary="2" StructMemberAlignment="2" TreatWChar_tAsBuiltInType="false" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" IgnoreImportLibrary="true" AdditionalDependencies="libmp3lame.lib url.lib winmm.lib" OutputFile="..\output\Release\lameACM.acm" LinkIncremental="1" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="false" ModuleDefinitionFile="..\ACM\lameACM.def" SubSystem="2" ImportLibrary="$(IntDir)/$(TargetName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" Description="ACM config files" CommandLine="copy ..\ACM\lameacm.inf $(TargetDir)*.* copy ..\ACM\lame_acm.xml $(TargetDir)*.* " /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" TypeLibraryName="..\output\Debug\lameACM.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../include,../mpglib,../ACM,../ACM/ddk" PreprocessorDefinitions="_DEBUG;_BLADEDLL;_WINDOWS;WIN32;LAME_ACM" StringPooling="true" RuntimeLibrary="3" StructMemberAlignment="2" TreatWChar_tAsBuiltInType="false" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" IgnoreImportLibrary="true" AdditionalDependencies="libmp3lame.lib url.lib winmm.lib" OutputFile="..\output\Debug\lameACM.acm" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="false" ModuleDefinitionFile="..\ACM\lameACM.def" GenerateDebugInformation="true" SubSystem="2" ImportLibrary="$(IntDir)/$(TargetName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" Description="ACM config files" CommandLine="copy ..\ACM\lameacm.inf $(TargetDir)*.* copy ..\ACM\lame_acm.xml $(TargetDir)*.* " /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source" Filter="c;cpp" > <File RelativePath="..\ACM\ACM.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\ACMStream.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\AEncodeProperties.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\DecodeStream.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\lameACM.def" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\ACM\main.cpp" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Filter> <Filter Name="Include" Filter="h" > <File RelativePath="..\ACM\ACM.h" > </File> <File RelativePath="..\ACM\ACMStream.h" > </File> <File RelativePath="..\ACM\adebug.h" > </File> <File RelativePath="..\ACM\AEncodeProperties.h" > </File> <File RelativePath="..\ACM\DecodeStream.h" > </File> </Filter> <Filter Name="Resource" Filter="rc" > <File RelativePath="..\ACM\acm.rc" > <FileConfiguration Name="Release|Win32" > <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\ACM\lame.ico" > </File> </Filter> <Filter Name="Install" Filter="inf;acm" > <File RelativePath="..\ACM\LameACM.inf" > </File> </Filter> <File RelativePath="..\ACM\readme.txt" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\ACM\TODO" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> </Files> <Globals> </Globals> </VisualStudioProject> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/arch_nasm.vsprops������������������������������������������������������������000644 �001751 �001751 �00000000427 11142701175 022022� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visual C++" Version="8.00" Name="arch_nasm" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="TAKEHIRO_IEEE754_HACK;HAVE_NASM;MMX_choose_table" /> </VisualStudioPropertySheet> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_libmp3lame.vcproj��������������������������������������������������������000644 �001751 �001751 �00000071075 11640670520 022475� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="libmp3lame-static" ProjectGUID="{20536101-3B0E-43EF-94F9-080D595DAC57}" RootNamespace="libmp3lame" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> <ToolFile RelativePath=".\vc9_nasm.rules" /> </ToolFiles> <Configurations> <Configuration Name="ReleaseNASM|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_nasm.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H;HAVE_NASM;MMX_choose_table;_CRT_SECURE_NO_DEPRECATE" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmp3lame-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmp3lame-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Debug|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_x87.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="../mpglib,../include,.." PreprocessorDefinitions="_DEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" RuntimeLibrary="1" ProgramDataBaseFileName="$(OutDir)\$(TargetName).pdb" DebugInformationFormat="3" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmp3lame-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="ReleaseSSE2|Win32" ConfigurationType="4" InheritedPropertySheets=".\vc9_lame_config.vsprops;.\arch_sse2.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="NASM" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" /> <Tool Name="VCCLCompilerTool" Optimization="3" InlineFunctionExpansion="2" EnableIntrinsicFunctions="true" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="../mpglib,../include,.." PreprocessorDefinitions="NDEBUG;_WINDOWS;HAVE_MPGLIB;WIN32;HAVE_CONFIG_H" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLibrarianTool" OutputFile="$(OutDir)/libmp3lame-static.lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source" Filter="c" > <File RelativePath="..\libmp3lame\bitstream.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\encoder.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\fft.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\gain_analysis.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\id3tag.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\lame.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\mpglib_interface.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\newmdct.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\presets.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\psymodel.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\quantize.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\quantize_pvt.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\reservoir.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\set_get.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\tables.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" WarningLevel="1" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" WarningLevel="1" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" WarningLevel="1" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" WarningLevel="1" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\takehiro.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\util.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\vbrquantize.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\VbrTag.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\version.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\.\vector\xmm_quantize_sub.c" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="../libmp3lame" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="../libmp3lame" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="../libmp3lame" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="../libmp3lame" /> </FileConfiguration> </File> </Filter> <Filter Name="Include" Filter="h" > <File RelativePath="..\libmp3lame\bitstream.h" > </File> <File RelativePath="..\libmp3lame\..\configMS.h" > <FileConfiguration Name="ReleaseNASM|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" > <Tool Name="VCCustomBuildTool" Description="Performing Custom Build Step on $(InputName)" CommandLine="copy ..\configMS.h ..\config.h " Outputs="..\config.h" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\encoder.h" > </File> <File RelativePath="..\libmp3lame\fft.h" > </File> <File RelativePath="..\libmp3lame\gain_analysis.h" > </File> <File RelativePath="..\libmp3lame\id3tag.h" > </File> <File RelativePath="..\libmp3lame\l3side.h" > </File> <File RelativePath="..\libmp3lame\lame-analysis.h" > </File> <File RelativePath="..\libmp3lame\lame_global_flags.h" > </File> <File RelativePath="..\libmp3lame\.\vector\lame_intrin.h" > </File> <File RelativePath="..\libmp3lame\lameerror.h" > </File> <File RelativePath="..\libmp3lame\machine.h" > </File> <File RelativePath="..\libmp3lame\newmdct.h" > </File> <File RelativePath="..\libmp3lame\psymodel.h" > </File> <File RelativePath="..\libmp3lame\quantize.h" > </File> <File RelativePath="..\libmp3lame\quantize_pvt.h" > </File> <File RelativePath="..\libmp3lame\reservoir.h" > </File> <File RelativePath="..\libmp3lame\set_get.h" > </File> <File RelativePath="..\libmp3lame\tables.h" > </File> <File RelativePath="..\libmp3lame\util.h" > </File> <File RelativePath="..\libmp3lame\vbrquantize.h" > </File> <File RelativePath="..\libmp3lame\VbrTag.h" > </File> <File RelativePath="..\libmp3lame\version.h" > </File> </Filter> <Filter Name="Asm" Filter=".nas" > <File RelativePath="..\libmp3lame\i386\choose_table.nas" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\cpu_feat.nas" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\fft.nas" > <FileConfiguration Name="ReleaseNASM|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\fft3dn.nas" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\fftfpu.nas" > <FileConfiguration Name="ReleaseNASM|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\fftsse.nas" > <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\ffttbl.nas" > <FileConfiguration Name="ReleaseNASM|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> <File RelativePath="..\libmp3lame\i386\scalar.nas" > <FileConfiguration Name="ReleaseNASM|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> <FileConfiguration Name="ReleaseSSE2|Win32" ExcludedFromBuild="true" > <Tool Name="NASM" /> </FileConfiguration> </File> </Filter> <File RelativePath="..\include\lame.h" > </File> </Files> <Globals> </Globals> </VisualStudioProject> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/arch_sse2.vsprops������������������������������������������������������������000644 �001751 �001751 �00000000500 11145166537 021742� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visual C++" Version="8.00" Name="arch_sse2" > <Tool Name="VCCLCompilerTool" PreprocessorDefinitions="HAVE_XMMINTRIN_H;MIN_ARCH_SSE" EnableEnhancedInstructionSet="2" FloatingPointModel="2" /> </VisualStudioPropertySheet> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lame-3.100/vc_solution/vc9_lame_dshow.vcproj��������������������������������������������������������000644 �001751 �001751 �00000023637 11103144103 022556� 0����������������������������������������������������������������������������������������������������ustar�00netchild������������������������netchild������������������������000000 �000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="Windows-1252"?> <VisualStudioProject ProjectType="Visual C++" Version="9,00" Name="DShow" ProjectGUID="{6D348A4E-8B40-4FB0-BB57-C982D51FFA01}" TargetFrameworkVersion="0" > <Platforms> <Platform Name="Win32" /> </Platforms> <ToolFiles> </ToolFiles> <Configurations> <Configuration Name="Debug|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="1" TypeLibraryName="..\obj\Debug/dshow.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\include,..\DShow" PreprocessorDefinitions="DEBUG;INC_OLE2;WINVER=0x0400;_X86_=1;STRICT;_WINDOWS;WIN32;STDC_HEADERS" StringPooling="true" RuntimeLibrary="3" DebugInformationFormat="3" CallingConvention="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" IgnoreImportLibrary="true" AdditionalDependencies="libmp3lame.lib ..\DShow\strmbasD.lib vfw32.lib winmm.lib version.lib Comdlg32.lib comctl32.lib quartz.lib msvcrtd.lib" OutputFile="..\output\Debug\lame.ax" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="true" ModuleDefinitionFile="..\DShow\Mpegac.def" GenerateDebugInformation="true" SubSystem="2" EntryPointSymbol="DllEntryPoint@12" BaseAddress="0x1c400000" RandomizedBaseAddress="1" ImportLibrary="$(IntDir)/$(TargetName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> <Configuration Name="Release|Win32" ConfigurationType="2" InheritedPropertySheets=".\vc9_lame_config.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" > <Tool Name="VCPreBuildEventTool" /> <Tool Name="VCCustomBuildTool" /> <Tool Name="VCXMLDataGeneratorTool" /> <Tool Name="VCWebServiceProxyGeneratorTool" /> <Tool Name="VCMIDLTool" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" TargetEnvironment="1" TypeLibraryName="..\obj\Release/dshow.tlb" HeaderFileName="" /> <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="../include,../DShow" PreprocessorDefinitions="NDEBUG;INC_OLE2;STRICT;WINVER=0x0400;_X86_=1;_WINDOWS;WIN32;STDC_HEADERS" StringPooling="true" RuntimeLibrary="2" CallingConvention="2" /> <Tool Name="VCManagedResourceCompilerTool" /> <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" /> <Tool Name="VCPreLinkEventTool" /> <Tool Name="VCLinkerTool" IgnoreImportLibrary="true" AdditionalDependencies="libmp3lame.lib ..\DShow\strmbase.lib vfw32.lib winmm.lib version.lib Comdlg32.lib comctl32.lib quartz.lib msvcrt.lib" OutputFile="..\output\Release\lame.ax" Version="0.3" LinkIncremental="1" AdditionalLibraryDirectories="" IgnoreAllDefaultLibraries="true" ModuleDefinitionFile="..\DShow\Mpegac.def" SubSystem="2" EntryPointSymbol="DllEntryPoint@12" BaseAddress="0x1c400000" RandomizedBaseAddress="1" ImportLibrary="$(IntDir)/$(TargetName).lib" /> <Tool Name="VCALinkTool" /> <Tool Name="VCManifestTool" /> <Tool Name="VCXDCMakeTool" /> <Tool Name="VCBscMakeTool" /> <Tool Name="VCFxCopTool" /> <Tool Name="VCAppVerifierTool" /> <Tool Name="VCPostBuildEventTool" /> </Configuration> </Configurations> <References> </References> <Files> <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90" > <File RelativePath="..\DShow\aboutprp.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\Encoder.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\Mpegac.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\Mpegac.def" > </File> <File RelativePath="..\DShow\Property.rc" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\PropPage.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\PropPage_adv.cpp" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> <File RelativePath="..\DShow\REG.CPP" > <FileConfiguration Name="Debug|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" > <Tool Name="VCCLCompilerTool" AdditionalIncludeDirectories="" PreprocessorDefinitions="" /> </FileConfiguration> </File> </Filter> <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;fi;fd" > <File RelativePath="..\DShow\aboutprp.h" > </File> <File RelativePath="..\DShow\Encoder.h" > </File> <File RelativePath="..\DShow\iaudioprops.h" > </File> <File RelativePath="..\DShow\Mpegac.h" > </File> <File RelativePath="..\DShow\PropPage.h" > </File> <File RelativePath="..\DShow\PropPage_adv.h" > </File> <File RelativePath="..\DShow\reg.h" > </File> <File RelativePath="..\DShow\resource.h" > </File> <File RelativePath="..\DShow\uids.h" > </File> </Filter> <Filter Name="Resource Files" Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe" > <File RelativePath="..\DShow\elogo.ico" > </File> </Filter> <File RelativePath="..\include\lame.h" > <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\output\libmp3lame-dynamic.lib" > <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\DShow\README" > <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> <File RelativePath="..\DShow\STRMBASE.lib" > <FileConfiguration Name="Debug|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> <FileConfiguration Name="Release|Win32" ExcludedFromBuild="true" > <Tool Name="VCCustomBuildTool" /> </FileConfiguration> </File> </Files> <Globals> </Globals> </VisualStudioProject> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������