From: Christophe Massiot Date: Tue, 4 Dec 2001 13:47:46 +0000 (+0000) Subject: libmad plug-in, courtesy of Jean-Paul Saman . X-Git-Tag: 0.3.0~349 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=63e5cfb09bd5db7dd9675c61dde210421543a5c7;p=vlc libmad plug-in, courtesy of Jean-Paul Saman . --- diff --git a/AUTHORS b/AUTHORS index 4e430f818c..39d9574b14 100644 --- a/AUTHORS +++ b/AUTHORS @@ -209,6 +209,11 @@ N: Olivier Pomel E: pomel@via.ecp.fr C: pomel +N: Jean-Paul Saman +E: jpsaman@wxs.nl +D: libmad plug-in +D: iPAQ port + N: Steven M. Schultz E: sms@TO.GD-ES.COM D: BSD/OS port diff --git a/ChangeLog b/ChangeLog index 0c1668bcf8..0a3904b3ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ HEAD + * New libmad plug-in, courtesy of Jean-Paul Saman. We now have sound on + iPAQ Familiar Linux. * Borrowed MPlayer's fast memcpy() routines. Best is autodetected, choose "--memcpy " to choose one from c, mmx, mmxext or 3dn. * Added versioned build-dep to libasound2-dev (Closes Debian bug #121057). diff --git a/Makefile b/Makefile index fbac4a235a..e7be454dbb 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ PLUGINS_DIR := ac3_adec \ kde \ lpcm_adec \ macosx \ + mad_adec \ memcpy \ mga \ motion \ @@ -79,6 +80,7 @@ PLUGINS_TARGETS := ac3_adec/ac3_adec \ kde/kde \ lpcm_adec/lpcm_adec \ macosx/macosx \ + mad_adec/mad_adec \ memcpy/memcpy \ memcpy/memcpymmx \ memcpy/memcpymmxext \ diff --git a/Makefile.opts.in b/Makefile.opts.in index 0f4ffad75d..843a223e3d 100644 --- a/Makefile.opts.in +++ b/Makefile.opts.in @@ -83,6 +83,7 @@ LIB_GTK = @LIB_GTK@ LIB_KDE = @LIB_KDE@ LIB_LIBDVDCSS = @LIB_LIBDVDCSS@ LIB_MACOSX = @LIB_MACOSX@ +LIB_MAD_ADEC = @LIB_MAD_ADEC@ LIB_NCURSES = @LIB_NCURSES@ LIB_QNX = @LIB_QNX@ LIB_QT = @LIB_QT@ @@ -104,6 +105,7 @@ CFLAGS_ESD = @CFLAGS_ESD@ CFLAGS_LIBDVDCSS = @CFLAGS_LIBDVDCSS@ CFLAGS_ESD = @CFLAGS_ESD@ CFLAGS_GTK = @CFLAGS_GTK@ +CFLAGS_MAD_ADEC = @CFLAGS_MAD_ADEC@ CFLAGS_SDL = @CFLAGS_SDL@ CFLAGS_X11 = @CFLAGS_X11@ diff --git a/configure b/configure index 552328176e..979184a70f 100755 --- a/configure +++ b/configure @@ -49,6 +49,8 @@ ac_help="$ac_help --disable-null Null module (default enabled)" ac_help="$ac_help --disable-rc rc module (default enabled)" +ac_help="$ac_help + --with-libmad[=PATH] libmad module (default disabled)" ac_help="$ac_help --disable-dsp Linux /dev/dsp support (default enabled)" ac_help="$ac_help @@ -653,7 +655,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:657: checking host system type" >&5 +echo "configure:659: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -674,7 +676,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 -echo "configure:678: checking target system type" >&5 +echo "configure:680: checking target system type" >&5 target_alias=$target case "$target_alias" in @@ -692,7 +694,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:696: checking build system type" >&5 +echo "configure:698: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -741,7 +743,7 @@ save_CFLAGS="${CFLAGS}" save_LDFLAGS="${LDFLAGS}" echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:745: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:747: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -770,7 +772,7 @@ fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:774: checking for $ac_word" >&5 +echo "configure:776: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -800,7 +802,7 @@ 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:804: checking for $ac_word" >&5 +echo "configure:806: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -851,7 +853,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:855: checking for $ac_word" >&5 +echo "configure:857: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -883,7 +885,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:887: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:889: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -894,12 +896,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 898 "configure" +#line 900 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -925,12 +927,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:929: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:934: checking whether we are using GNU C" >&5 +echo "configure:936: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -939,7 +941,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:943: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:945: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -958,7 +960,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:962: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:964: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -990,7 +992,7 @@ else fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:994: checking how to run the C preprocessor" >&5 +echo "configure:996: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1005,13 +1007,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1022,13 +1024,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1032: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1039,13 +1041,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1051: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1078,7 +1080,7 @@ fi # 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 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1082: checking for $ac_word" >&5 +echo "configure:1084: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1110,7 +1112,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1114: checking for $ac_word" >&5 +echo "configure:1116: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1155,7 +1157,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1159: checking for a BSD compatible install" >&5 +echo "configure:1161: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1210,14 +1212,14 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test x${cross_compiling} != xyes; then echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:1214: checking whether byte ordering is bigendian" >&5 +echo "configure:1216: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -1228,11 +1230,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:1232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -1243,7 +1245,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:1247: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -1263,7 +1265,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1282: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -1316,7 +1318,7 @@ fi *) ac_cv_c_bigendian=unknown echo $ac_n "checking what the byte order looks to be""... $ac_c" 1>&6 -echo "configure:1320: checking what the byte order looks to be" >&5 +echo "configure:1322: checking what the byte order looks to be" >&5 cat >conftest.c <&6 -echo "configure:1365: checking for $ac_func" >&5 +echo "configure:1367: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1416,12 +1418,12 @@ done for ac_func in setenv putenv do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1420: checking for $ac_func" >&5 +echo "configure:1422: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1450: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1469,12 +1471,12 @@ fi done echo $ac_n "checking for connect""... $ac_c" 1>&6 -echo "configure:1473: checking for connect" >&5 +echo "configure:1475: checking for connect" >&5 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_connect=yes" else @@ -1516,7 +1518,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 -echo "configure:1520: checking for connect in -lsocket" >&5 +echo "configure:1522: checking for connect in -lsocket" >&5 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1524,7 +1526,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1559,12 +1561,12 @@ fi fi echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 -echo "configure:1563: checking for gethostbyname" >&5 +echo "configure:1565: checking for gethostbyname" >&5 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_gethostbyname=yes" else @@ -1606,7 +1608,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 -echo "configure:1610: checking for gethostbyname in -lnsl" >&5 +echo "configure:1612: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1614,7 +1616,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1649,12 +1651,12 @@ fi fi echo $ac_n "checking for nanosleep""... $ac_c" 1>&6 -echo "configure:1653: checking for nanosleep" >&5 +echo "configure:1655: checking for nanosleep" >&5 if eval "test \"`echo '$''{'ac_cv_func_nanosleep'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_nanosleep=yes" else @@ -1696,7 +1698,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for nanosleep in -lrt""... $ac_c" 1>&6 -echo "configure:1700: checking for nanosleep in -lrt" >&5 +echo "configure:1702: checking for nanosleep in -lrt" >&5 ac_lib_var=`echo rt'_'nanosleep | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1704,7 +1706,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lrt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1735,7 +1737,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for nanosleep in -lposix4""... $ac_c" 1>&6 -echo "configure:1739: checking for nanosleep in -lposix4" >&5 +echo "configure:1741: checking for nanosleep in -lposix4" >&5 ac_lib_var=`echo posix4'_'nanosleep | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1743,7 +1745,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lposix4 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1783,12 +1785,12 @@ fi for ac_func in usleep do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1787: checking for $ac_func" >&5 +echo "configure:1789: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1836,12 +1838,12 @@ fi done echo $ac_n "checking for inet_aton""... $ac_c" 1>&6 -echo "configure:1840: checking for inet_aton" >&5 +echo "configure:1842: checking for inet_aton" >&5 if eval "test \"`echo '$''{'ac_cv_func_inet_aton'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_inet_aton=yes" else @@ -1883,7 +1885,7 @@ else echo "$ac_t""no" 1>&6 echo $ac_n "checking for inet_aton in -lresolv""... $ac_c" 1>&6 -echo "configure:1887: checking for inet_aton in -lresolv" >&5 +echo "configure:1889: checking for inet_aton in -lresolv" >&5 ac_lib_var=`echo resolv'_'inet_aton | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1891,7 +1893,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lresolv $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1928,12 +1930,12 @@ fi for ac_func in vasprintf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1932: checking for $ac_func" >&5 +echo "configure:1934: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1983,12 +1985,12 @@ done for ac_func in swab do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1987: checking for $ac_func" >&5 +echo "configure:1989: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2038,12 +2040,12 @@ done for ac_func in memalign valloc do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2042: checking for $ac_func" >&5 +echo "configure:2044: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2094,12 +2096,12 @@ done for ac_func in sigrelse do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2098: checking for $ac_func" >&5 +echo "configure:2100: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2149,12 +2151,12 @@ done NEED_GETOPT=0 echo $ac_n "checking for getopt_long""... $ac_c" 1>&6 -echo "configure:2153: checking for getopt_long" >&5 +echo "configure:2155: checking for getopt_long" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_getopt_long=yes" else @@ -2199,7 +2201,7 @@ else echo "$ac_t""no" 1>&6 # FreeBSD has a gnugetopt library for this: echo $ac_n "checking for getopt_long in -lgnugetopt""... $ac_c" 1>&6 -echo "configure:2203: checking for getopt_long in -lgnugetopt" >&5 +echo "configure:2205: checking for getopt_long in -lgnugetopt" >&5 ac_lib_var=`echo gnugetopt'_'getopt_long | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2207,7 +2209,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lgnugetopt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2249,17 +2251,17 @@ for ac_hdr in unistd.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2253: checking for $ac_hdr" >&5 +echo "configure:2255: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2263: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2265: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2288,12 +2290,12 @@ done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2292: checking for $ac_func" >&5 +echo "configure:2294: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2341,7 +2343,7 @@ fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 -echo "configure:2345: checking for working mmap" >&5 +echo "configure:2347: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2349,7 +2351,7 @@ else ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else @@ -2515,12 +2517,12 @@ EOF fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2519: checking return type of signal handlers" >&5 +echo "configure:2521: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2537,7 +2539,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:2541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2543: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2556,7 +2558,7 @@ EOF echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:2560: checking for dlopen in -ldl" >&5 +echo "configure:2562: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2564,7 +2566,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2596,7 +2598,7 @@ else fi echo $ac_n "checking for pow in -lm""... $ac_c" 1>&6 -echo "configure:2600: checking for pow in -lm" >&5 +echo "configure:2602: checking for pow in -lm" >&5 ac_lib_var=`echo m'_'pow | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2604,7 +2606,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2639,7 +2641,7 @@ fi THREAD_LIB=error if test "x${THREAD_LIB}" = xerror; then echo $ac_n "checking for pthread_attr_init in -lpthread""... $ac_c" 1>&6 -echo "configure:2643: checking for pthread_attr_init in -lpthread" >&5 +echo "configure:2645: checking for pthread_attr_init in -lpthread" >&5 ac_lib_var=`echo pthread'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2647,7 +2649,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthread $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2681,7 +2683,7 @@ fi fi if test "x${THREAD_LIB}" = xerror; then echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6 -echo "configure:2685: checking for pthread_attr_init in -lpthreads" >&5 +echo "configure:2687: checking for pthread_attr_init in -lpthreads" >&5 ac_lib_var=`echo pthreads'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2689,7 +2691,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpthreads $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2723,7 +2725,7 @@ fi fi if test "x${THREAD_LIB}" = xerror; then echo $ac_n "checking for pthread_attr_init in -lc_r""... $ac_c" 1>&6 -echo "configure:2727: checking for pthread_attr_init in -lc_r" >&5 +echo "configure:2729: checking for pthread_attr_init in -lc_r" >&5 ac_lib_var=`echo c_r'_'pthread_attr_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2731,7 +2733,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lc_r $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2765,12 +2767,12 @@ fi fi if test "x${THREAD_LIB}" = xerror; then echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6 -echo "configure:2769: checking for pthread_attr_init" >&5 +echo "configure:2771: checking for pthread_attr_init" >&5 if eval "test \"`echo '$''{'ac_cv_func_pthread_attr_init'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_pthread_attr_init=yes" else @@ -2816,7 +2818,7 @@ fi fi echo $ac_n "checking for cthread_fork in -lthreads""... $ac_c" 1>&6 -echo "configure:2820: checking for cthread_fork in -lthreads" >&5 +echo "configure:2822: checking for cthread_fork in -lthreads" >&5 ac_lib_var=`echo threads'_'cthread_fork | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2824,7 +2826,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lthreads $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2857,7 +2859,7 @@ fi cat > conftest.$ac_ext < EOF @@ -2873,7 +2875,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -2893,17 +2895,17 @@ for ac_hdr in stddef.h getopt.h strings.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2897: checking for $ac_hdr" >&5 +echo "configure:2899: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2907: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2909: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2933,17 +2935,17 @@ for ac_hdr in sys/sockio.h fcntl.h sys/time.h sys/times.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2937: checking for $ac_hdr" >&5 +echo "configure:2939: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2947: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2949: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2973,17 +2975,17 @@ for ac_hdr in sys/soundcard.h machine/soundcard.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2977: checking for $ac_hdr" >&5 +echo "configure:2979: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2987: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3013,17 +3015,17 @@ for ac_hdr in dlfcn.h image.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3017: checking for $ac_hdr" >&5 +echo "configure:3019: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3027: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3029: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3053,17 +3055,17 @@ for ac_hdr in arpa/inet.h net/if.h netinet/in.h sys/socket.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3057: checking for $ac_hdr" >&5 +echo "configure:3059: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3093,17 +3095,17 @@ for ac_hdr in machine/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3097: checking for $ac_hdr" >&5 +echo "configure:3099: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3134,17 +3136,17 @@ for ac_hdr in cthreads.h pthread.h kernel/scheduler.h kernel/OS.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:3138: checking for $ac_hdr" >&5 +echo "configure:3140: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3150: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3172,20 +3174,20 @@ done echo $ac_n "checking for ntohl in sys/param.h""... $ac_c" 1>&6 -echo "configure:3176: checking for ntohl in sys/param.h" >&5 +echo "configure:3178: checking for ntohl in sys/param.h" >&5 if eval "test \"`echo '$''{'ac_cv_c_ntohl_sys_param_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else CFLAGS="${save_CFLAGS} -Wall -Werror" cat > conftest.$ac_ext < int main() { void foo() { int meuh; ntohl(meuh); } ; return 0; } EOF -if { (eval echo configure:3189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3191: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_ntohl_sys_param_h=yes else @@ -3206,20 +3208,20 @@ EOF fi echo $ac_n "checking if \$CC accepts -finline-limit""... $ac_c" 1>&6 -echo "configure:3210: checking if \$CC accepts -finline-limit" >&5 +echo "configure:3212: checking if \$CC accepts -finline-limit" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline_limit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else CFLAGS="${save_CFLAGS} -finline-limit-30000" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3225: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline_limit=yes else @@ -3237,20 +3239,20 @@ if test x"$ac_cv_c_inline_limit" != x"no"; then fi echo $ac_n "checking if \$CC accepts -bundle -undefined error""... $ac_c" 1>&6 -echo "configure:3241: checking if \$CC accepts -bundle -undefined error" >&5 +echo "configure:3243: checking if \$CC accepts -bundle -undefined error" >&5 if eval "test \"`echo '$''{'ac_cv_ld_darwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else CFLAGS="${save_CFLAGS} -bundle -undefined error" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ld_darwin=yes else @@ -3268,20 +3270,20 @@ if test x"$ac_cv_ld_darwin" != x"no"; then fi echo $ac_n "checking if \$CC accepts -shared""... $ac_c" 1>&6 -echo "configure:3272: checking if \$CC accepts -shared" >&5 +echo "configure:3274: checking if \$CC accepts -shared" >&5 if eval "test \"`echo '$''{'ac_cv_ld_plugins'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else CFLAGS="${save_CFLAGS} -shared" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ld_plugins=yes else @@ -3300,7 +3302,7 @@ fi if test x"${SOFLAGS}" = x; then echo $ac_n "checking for soname setting""... $ac_c" 1>&6 -echo "configure:3304: checking for soname setting" >&5 +echo "configure:3306: checking for soname setting" >&5 if eval "test \"`echo '$''{'ac_cv_ld_soname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3309,14 +3311,14 @@ else try_SOFLAGS="-Wl,-soname -Wl," LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_ld_soname="${try_SOFLAGS}" else @@ -3328,14 +3330,14 @@ else try_SOFLAGS="-Wl,-h -Wl," LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_ld_soname="${try_SOFLAGS}" else @@ -3364,7 +3366,7 @@ have problems using libdvdcss. fi echo $ac_n "checking __attribute__ ((aligned ())) support""... $ac_c" 1>&6 -echo "configure:3368: checking __attribute__ ((aligned ())) support" >&5 +echo "configure:3370: checking __attribute__ ((aligned ())) support" >&5 if eval "test \"`echo '$''{'ac_cv_c_attribute_aligned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3372,14 +3374,14 @@ else CFLAGS="${save_CFLAGS} -Werror" for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3385: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_attribute_aligned=$ac_cv_c_attr_align_try else @@ -3402,19 +3404,19 @@ CFLAGS="${save_CFLAGS}" LDFLAGS="${save_LDFLAGS}" echo $ac_n "checking for boolean_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:3406: checking for boolean_t in sys/types.h" >&5 +echo "configure:3408: checking for boolean_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_sys_types_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { boolean_t foo; ; return 0; } EOF -if { (eval echo configure:3418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_boolean_t_sys_types_h=yes else @@ -3435,19 +3437,19 @@ EOF fi echo $ac_n "checking for boolean_t in pthread.h""... $ac_c" 1>&6 -echo "configure:3439: checking for boolean_t in pthread.h" >&5 +echo "configure:3441: checking for boolean_t in pthread.h" >&5 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_pthread_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { boolean_t foo; ; return 0; } EOF -if { (eval echo configure:3451: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3453: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_boolean_t_pthread_h=yes else @@ -3468,19 +3470,19 @@ EOF fi echo $ac_n "checking for boolean_t in cthreads.h""... $ac_c" 1>&6 -echo "configure:3472: checking for boolean_t in cthreads.h" >&5 +echo "configure:3474: checking for boolean_t in cthreads.h" >&5 if eval "test \"`echo '$''{'ac_cv_c_boolean_t_cthreads_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { boolean_t foo; ; return 0; } EOF -if { (eval echo configure:3484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3486: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_boolean_t_cthreads_h=yes else @@ -3501,12 +3503,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3505: checking for working const" >&5 +echo "configure:3507: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3561: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3576,12 +3578,12 @@ EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:3580: checking for ANSI C header files" >&5 +echo "configure:3582: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3589,7 +3591,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:3593: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:3595: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -3606,7 +3608,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3624,7 +3626,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -3645,7 +3647,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3656,7 +3658,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:3660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -3680,12 +3682,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3684: checking for size_t" >&5 +echo "configure:3686: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -3713,12 +3715,12 @@ EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 -echo "configure:3717: checking whether time.h and sys/time.h may both be included" >&5 +echo "configure:3719: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3727,7 +3729,7 @@ int main() { struct tm *tp; ; return 0; } EOF -if { (eval echo configure:3731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -3761,19 +3763,19 @@ SSE_MODULES="imdctsse downmixsse" ALTIVEC_MODULES="idctaltivec motionaltivec" echo $ac_n "checking if \$CC groks MMX inline assembly""... $ac_c" 1>&6 -echo "configure:3765: checking if \$CC groks MMX inline assembly" >&5 +echo "configure:3767: checking if \$CC groks MMX inline assembly" >&5 if eval "test \"`echo '$''{'ac_cv_mmx_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mmx_inline=yes else @@ -3791,19 +3793,19 @@ if test x"$ac_cv_mmx_inline" != x"no"; then fi echo $ac_n "checking if \$CC groks MMX EXT inline assembly""... $ac_c" 1>&6 -echo "configure:3795: checking if \$CC groks MMX EXT inline assembly" >&5 +echo "configure:3797: checking if \$CC groks MMX EXT inline assembly" >&5 if eval "test \"`echo '$''{'ac_cv_mmxext_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3809: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mmxext_inline=yes else @@ -3821,19 +3823,19 @@ if test x"$ac_cv_mmxext_inline" != x"no"; then fi echo $ac_n "checking if \$CC groks 3D Now! inline assembly""... $ac_c" 1>&6 -echo "configure:3825: checking if \$CC groks 3D Now! inline assembly" >&5 +echo "configure:3827: checking if \$CC groks 3D Now! inline assembly" >&5 if eval "test \"`echo '$''{'ac_cv_3dnow_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3839: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_3dnow_inline=yes else @@ -3855,19 +3857,19 @@ EOF fi echo $ac_n "checking if \$CC groks SSE inline assembly""... $ac_c" 1>&6 -echo "configure:3859: checking if \$CC groks SSE inline assembly" >&5 +echo "configure:3861: checking if \$CC groks SSE inline assembly" >&5 if eval "test \"`echo '$''{'ac_cv_sse_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3873: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sse_inline=yes else @@ -3889,19 +3891,19 @@ EOF fi echo $ac_n "checking if \$CC groks Altivec inline assembly""... $ac_c" 1>&6 -echo "configure:3893: checking if \$CC groks Altivec inline assembly" >&5 +echo "configure:3895: checking if \$CC groks Altivec inline assembly" >&5 if eval "test \"`echo '$''{'ac_cv_altivec_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3907: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_altivec_inline=yes else @@ -3911,14 +3913,14 @@ else save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -Wa,-m7400" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_altivec_inline=yes; CFLAGS_ALTIVEC="-Wa,-m7400" else @@ -3944,7 +3946,7 @@ EOF fi echo $ac_n "checking if \$CC groks Altivec C extensions""... $ac_c" 1>&6 -echo "configure:3948: checking if \$CC groks Altivec C extensions" >&5 +echo "configure:3950: checking if \$CC groks Altivec C extensions" >&5 if eval "test \"`echo '$''{'ac_cv_c_altivec'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3952,14 +3954,14 @@ else CFLAGS="$CFLAGS -faltivec" # Darwin test cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_altivec=-faltivec else @@ -3970,14 +3972,14 @@ else # Linux/PPC test CFLAGS="$save_CFLAGS $CFLAGS_ALTIVEC -fvec" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_altivec="-fvec" else @@ -4005,21 +4007,21 @@ EOF fi echo $ac_n "checking if linker needs -framework vecLib""... $ac_c" 1>&6 -echo "configure:4009: checking if linker needs -framework vecLib" >&5 +echo "configure:4011: checking if linker needs -framework vecLib" >&5 if eval "test \"`echo '$''{'ac_cv_ld_altivec'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -framework vecLib" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_ld_altivec=yes else @@ -4060,7 +4062,7 @@ if test $SYS = mingw32; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4064: checking for $ac_word" >&5 +echo "configure:4066: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4092,7 +4094,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4096: checking for $ac_word" >&5 +echo "configure:4098: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4135,17 +4137,17 @@ for ac_hdr in winioctl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4139: checking for $ac_hdr" >&5 +echo "configure:4141: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4151: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4178,17 +4180,17 @@ for ac_hdr in sys/ioctl.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4182: checking for $ac_hdr" >&5 +echo "configure:4184: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4192: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4214,17 +4216,17 @@ EOF do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4218: checking for $ac_hdr" >&5 +echo "configure:4220: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4228: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4254,7 +4256,7 @@ done LINUX_DVD_STRUCT=0 OPENBSD_DVD_STRUCT=0 cat > conftest.$ac_ext < EOF @@ -4267,7 +4269,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | EOF cat > conftest.$ac_ext < EOF @@ -4287,7 +4289,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -4300,7 +4302,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | EOF cat > conftest.$ac_ext < EOF @@ -4320,7 +4322,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -4339,7 +4341,7 @@ rm -f conftest* NEED_BSDI_LIBDVD=0 cat > conftest.$ac_ext < EOF @@ -4361,17 +4363,17 @@ else do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4365: checking for $ac_hdr" >&5 +echo "configure:4367: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4375: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4411,17 +4413,17 @@ rm -f conftest* ac_safe=`echo "sys/scsi/scsi_types.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/scsi/scsi_types.h""... $ac_c" 1>&6 -echo "configure:4415: checking for sys/scsi/scsi_types.h" >&5 +echo "configure:4417: checking for sys/scsi/scsi_types.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4425: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4427: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4440,17 +4442,17 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then ac_safe=`echo "sys/scsi/impl/uscsi.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/scsi/impl/uscsi.h""... $ac_c" 1>&6 -echo "configure:4444: checking for sys/scsi/impl/uscsi.h" >&5 +echo "configure:4446: checking for sys/scsi/impl/uscsi.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4454: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:4456: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -4605,7 +4607,7 @@ if test "${enable_pth+set}" = set; then enableval="$enable_pth" if test x$enableval = xyes; then echo $ac_n "checking for pth_init in -lpth""... $ac_c" 1>&6 -echo "configure:4609: checking for pth_init in -lpth" >&5 +echo "configure:4611: checking for pth_init in -lpth" >&5 ac_lib_var=`echo pth'_'pth_init | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4613,7 +4615,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lpth $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4652,7 +4654,7 @@ else fi cat > conftest.$ac_ext < EOF @@ -4773,7 +4775,7 @@ fi if test x$enable_vcd != xno then cat > conftest.$ac_ext < EOF @@ -4823,12 +4825,125 @@ if test "${enable_rc+set}" = set; then : fi - if test x$enable_rc != xno then BUILTINS="${BUILTINS} rc" fi +# Check whether --with-libmad or --without-libmad was given. +if test "${with_libmad+set}" = set; then + withval="$with_libmad" + if test "x$with_val" != "xno"; then + if test -n $with_val; then + CFLAGS_MAD_ADEC="-I$with_val/include" + LIB_MAD_ADEC="-L$with_val/lib -lmad" + else + LIB_MAD_ADEC="-lmad" + fi + save_CFLAGS=$CFLAGS + save_LDFLAGS=$LDFLAGS + CFLAGS="$CFLAGS $CFLAGS_MAD_ADEC" + LDFLAGS="$LDFLAGS $LIB_MAD_ADEC" + for ac_hdr in mad.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:4852: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:4862: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +echo "Cannot find development headers for libmad..." + exit 1 + +fi +done + + echo $ac_n "checking for mad_bit_init in -lmad""... $ac_c" 1>&6 +echo "configure:4892: checking for mad_bit_init in -lmad" >&5 +ac_lib_var=`echo mad'_'mad_bit_init | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lmad $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo mad | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 + echo "Cannot find libmad library..." + exit 1 + +fi + + CFLAGS=$save_CFLAGS + LDFLAGS=$save_LDFLAGS + PLUGINS="${PLUGINS} mad_adec" + fi +fi + + if test x$SYS = xbeos then BUILTINS="${BUILTINS} beos" @@ -4861,7 +4976,7 @@ if test "${enable_esd+set}" = set; then # Extract the first word of "esd-config", so it can be a program name with args. set dummy esd-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4865: checking for $ac_word" >&5 +echo "configure:4980: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ESD_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4912,7 +5027,7 @@ if test "${enable_arts+set}" = set; then # Extract the first word of "artsc-config", so it can be a program name with args. set dummy artsc-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:4916: checking for $ac_word" >&5 +echo "configure:5031: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ARTS_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4969,17 +5084,17 @@ else do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:4973: checking for $ac_hdr" >&5 +echo "configure:5088: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:4983: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5098: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5023,17 +5138,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5027: checking for $ac_hdr" >&5 +echo "configure:5142: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5037: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5111,7 +5226,7 @@ fi # Extract the first word of "sdl12-config", so it can be a program name with args. set dummy sdl12-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5115: checking for $ac_word" >&5 +echo "configure:5230: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_SDL12_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5151,7 +5266,7 @@ fi # Extract the first word of "sdl11-config", so it can be a program name with args. set dummy sdl11-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5155: checking for $ac_word" >&5 +echo "configure:5270: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_SDL11_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5192,7 +5307,7 @@ fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5196: checking for $ac_word" >&5 +echo "configure:5311: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_SDL_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5238,17 +5353,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5242: checking for $ac_hdr" >&5 +echo "configure:5357: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5252: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5367: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5318,17 +5433,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5322: checking for $ac_hdr" >&5 +echo "configure:5437: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5332: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5447: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5357,7 +5472,7 @@ done else echo $ac_n "checking for directX headers in ${withval}""... $ac_c" 1>&6 -echo "configure:5361: checking for directX headers in ${withval}" >&5 +echo "configure:5476: checking for directX headers in ${withval}" >&5 if test -f ${withval}/include/directx.h then PLUGINS="${PLUGINS} directx" @@ -5440,7 +5555,7 @@ if test "${enable_gnome+set}" = set; then # Extract the first word of "gnome-config", so it can be a program name with args. set dummy gnome-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5444: checking for $ac_word" >&5 +echo "configure:5559: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GNOME_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5485,17 +5600,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5489: checking for $ac_hdr" >&5 +echo "configure:5604: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5499: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5614: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5555,7 +5670,7 @@ fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:5559: checking for $ac_word" >&5 +echo "configure:5674: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5601,17 +5716,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5605: checking for $ac_hdr" >&5 +echo "configure:5720: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5615: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5667,17 +5782,17 @@ if test x$enable_x11 != xno && do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5671: checking for $ac_hdr" >&5 +echo "configure:5786: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5681: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5730,17 +5845,17 @@ if test x$enable_xvideo != xno && do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5734: checking for $ac_hdr" >&5 +echo "configure:5849: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5859: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5780,17 +5895,17 @@ if test "${enable_alsa+set}" = set; then then ac_safe=`echo "alsa/asoundlib.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for alsa/asoundlib.h""... $ac_c" 1>&6 -echo "configure:5784: checking for alsa/asoundlib.h" >&5 +echo "configure:5899: checking for alsa/asoundlib.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5909: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5807,7 +5922,7 @@ fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for main in -lasound""... $ac_c" 1>&6 -echo "configure:5811: checking for main in -lasound" >&5 +echo "configure:5926: checking for main in -lasound" >&5 ac_lib_var=`echo asound'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -5815,14 +5930,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lasound $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:5941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -5936,6 +6051,8 @@ fi + + @@ -6144,6 +6261,7 @@ s%@LIB_GTK@%$LIB_GTK%g s%@LIB_KDE@%$LIB_KDE%g s%@LIB_LIBDVDCSS@%$LIB_LIBDVDCSS%g s%@LIB_MACOSX@%$LIB_MACOSX%g +s%@LIB_MAD_ADEC@%$LIB_MAD_ADEC%g s%@LIB_NCURSES@%$LIB_NCURSES%g s%@LIB_QNX@%$LIB_QNX%g s%@LIB_QT@%$LIB_QT%g @@ -6161,6 +6279,7 @@ s%@CFLAGS_LIBDVDCSS@%$CFLAGS_LIBDVDCSS%g s%@CFLAGS_ARTS@%$CFLAGS_ARTS%g s%@CFLAGS_ESD@%$CFLAGS_ESD%g s%@CFLAGS_GTK@%$CFLAGS_GTK%g +s%@CFLAGS_MAD_ADEC@%$CFLAGS_MAD_ADEC%g s%@CFLAGS_SDL@%$CFLAGS_SDL%g s%@CFLAGS_X11@%$CFLAGS_X11%g s%@OBJ_DVD@%$OBJ_DVD%g diff --git a/configure.in b/configure.in index ba34bfce91..4f23710c5d 100644 --- a/configure.in +++ b/configure.in @@ -747,12 +747,40 @@ dnl rc plugin dnl AC_ARG_ENABLE(rc, [ --disable-rc rc module (default enabled)]) - if test x$enable_rc != xno then BUILTINS="${BUILTINS} rc" fi +dnl +dnl libmad plugin +dnl +AC_ARG_WITH(libmad, + [ --with-libmad[=PATH] libmad module (default disabled)], + [ if test "x$with_val" != "xno"; then + if test -n $with_val; then + CFLAGS_MAD_ADEC="-I$with_val/include" + LIB_MAD_ADEC="-L$with_val/lib -lmad" + else + LIB_MAD_ADEC="-lmad" + fi + save_CFLAGS=$CFLAGS + save_LDFLAGS=$LDFLAGS + CFLAGS="$CFLAGS $CFLAGS_MAD_ADEC" + LDFLAGS="$LDFLAGS $LIB_MAD_ADEC" + AC_CHECK_HEADERS(mad.h, , + [ echo "Cannot find development headers for libmad..." + exit 1 + ]) + AC_CHECK_LIB(mad, mad_bit_init, , + [ echo "Cannot find libmad library..." + exit 1 + ]) + CFLAGS=$save_CFLAGS + LDFLAGS=$save_LDFLAGS + PLUGINS="${PLUGINS} mad_adec" + fi ]) + dnl special case for BeOS if test x$SYS = xbeos then @@ -1203,6 +1231,7 @@ AC_SUBST(LIB_GTK) AC_SUBST(LIB_KDE) AC_SUBST(LIB_LIBDVDCSS) AC_SUBST(LIB_MACOSX) +AC_SUBST(LIB_MAD_ADEC) AC_SUBST(LIB_NCURSES) AC_SUBST(LIB_QNX) AC_SUBST(LIB_QT) @@ -1221,6 +1250,7 @@ AC_SUBST(CFLAGS_LIBDVDCSS) AC_SUBST(CFLAGS_ARTS) AC_SUBST(CFLAGS_ESD) AC_SUBST(CFLAGS_GTK) +AC_SUBST(CFLAGS_MAD_ADEC) AC_SUBST(CFLAGS_SDL) AC_SUBST(CFLAGS_X11) diff --git a/include/config.h.in b/include/config.h.in index 7bd2a9cd3f..83ad356569 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -175,22 +175,23 @@ #define INPUT_NETWORK_PROTOCOL_VAR "vlc_network_protocol" #define INPUT_NETWORK_PROTOCOL_DEFAULT "ts" -/* Default remote server */ -#define INPUT_SERVER_VAR "vlc_server" -#define INPUT_SERVER_DEFAULT "138.195.143.220" - /* Default input port */ #define INPUT_PORT_VAR "vlc_server_port" #define INPUT_PORT_DEFAULT 1234 -/* Default broadcast address */ -#define INPUT_BCAST_ADDR_VAR "vlc_broadcast_addr" -#define INPUT_BCAST_ADDR_DEFAULT "138.195.143.255" +/* FIXME : Delete those ! */ +/* Default remote server */ +#define INPUT_SERVER_VAR "vlc_server" +#define INPUT_SERVER_DEFAULT "138.195.143.220" /* Broadcast mode */ #define INPUT_BROADCAST_VAR "vlc_broadcast" #define INPUT_BROADCAST_DEFAULT 0 +/* Default broadcast address */ +#define INPUT_BCAST_ADDR_VAR "vlc_broadcast_addr" +#define INPUT_BCAST_ADDR_DEFAULT "138.195.143.255" + /* Channels mode */ #define INPUT_NETWORK_CHANNEL_VAR "vlc_channel" #define INPUT_NETWORK_CHANNEL_DEFAULT 0 @@ -299,6 +300,9 @@ * - long, in order to perform the buffer calculations as few as possible */ #define AOUT_BUFFER_DURATION 100000 +/* Environment variable for MPEG audio decoder */ +#define ADEC_MPEG_VAR "vlc_mpeg_adec" + /***************************************************************************** * Video configuration *****************************************************************************/ @@ -334,8 +338,6 @@ #define VOUT_HEIGHT_DEFAULT 576 #define VOUT_DEPTH_VAR "vlc_depth" #define VOUT_DEPTH_DEFAULT 15 -#define VOUT_FULLSCREEN_DEPTH_VAR "vlc_fullscreen_depth" -#define VOUT_FULLSCREEN_DEPTH_DEFAULT 32 /* Maximum width of a scaled source picture - this should be relatively high, * since higher stream values will result in no display at all. */ diff --git a/include/tests.h b/include/tests.h index 8e545e18c9..de18afa9ba 100644 --- a/include/tests.h +++ b/include/tests.h @@ -2,7 +2,7 @@ * tests.h: several test functions needed by the plugins ***************************************************************************** * Copyright (C) 1996, 1997, 1998, 1999, 2000 VideoLAN - * $Id: tests.h,v 1.11 2001/05/30 17:03:11 sam Exp $ + * $Id: tests.h,v 1.12 2001/12/04 13:47:46 massiot Exp $ * * Authors: Samuel Hocevar * @@ -30,6 +30,7 @@ #define CPU_CAPABILITY_MMXEXT 1<<5 #define CPU_CAPABILITY_SSE 1<<6 #define CPU_CAPABILITY_ALTIVEC 1<<16 +#define CPU_CAPABILITY_FPU 1<<31 /***************************************************************************** * TestVersion: tests if the given string equals the current version diff --git a/ipkg/patch b/ipkg/patch new file mode 100644 index 0000000000..262f599808 --- /dev/null +++ b/ipkg/patch @@ -0,0 +1,20 @@ +--- plugins/sdl/vout_sdl.c 2001/12/03 16:18:37 1.66 ++++ plugins/sdl/vout_sdl.c 2001/12/04 13:29:29 +@@ -329,12 +329,16 @@ + break; + + case SDL_MOUSEBUTTONUP: ++#if 0 + switch( event.button.button ) + { + case SDL_BUTTON_RIGHT: + p_main->p_intf->b_menu_change = 1; + break; + } ++#else ++ intf_ProcessKey( p_main->p_intf, SDLK_q ); ++#endif + break; + + case SDL_MOUSEBUTTONDOWN: + diff --git a/ipkg/rules b/ipkg/rules index d4c059526d..d6b3044b46 100755 --- a/ipkg/rules +++ b/ipkg/rules @@ -7,7 +7,7 @@ export CC=arm-linux-gcc export LD=arm-linux-ld export STRIP=arm-linux-strip -export CONFIG_FLAGS="--enable-release --prefix=/usr --disable-gtk --enable-fb --enable-sdl --disable-xvideo --disable-plugins --with-tuning=strongarm1100 --x-includes=/skiff/local/arm-linux/include --x-libraries=/skiff/local/arm-linux/lib/X11 --with-sdl-config-path=/skiff/local/bin" +export CONFIG_FLAGS="--enable-release --prefix=/usr --disable-gtk --enable-fb --enable-sdl --disable-xvideo --disable-plugins --with-tuning=strongarm1100 --x-includes=/skiff/local/arm-linux/include --x-libraries=/skiff/local/arm-linux/lib/X11 --with-sdl-config-path=/skiff/local/bin --with-libmad=/skiff/local/arm-linux" export LIBDVDCSS_FLAGS="--with-dvdcss=local-static" export VIDDIR="usr/share/videolan" export PIXDIR="usr/share/pixmaps" @@ -19,6 +19,9 @@ build-stamp: --infodir=$${prefix}/share/info \ $(shell echo $(CONFIG_FLAGS)) $(shell echo $(LIBDVDCSS_FLAGS)) +# This is ugly -- I know + patch -p 0 < ipkg/patch + $(MAKE) touch build-stamp diff --git a/plugins/mad_adec/.cvsignore b/plugins/mad_adec/.cvsignore new file mode 100644 index 0000000000..63e7180a26 --- /dev/null +++ b/plugins/mad_adec/.cvsignore @@ -0,0 +1 @@ +.dep diff --git a/plugins/mad_adec/API b/plugins/mad_adec/API new file mode 100644 index 0000000000..83a8731cf5 --- /dev/null +++ b/plugins/mad_adec/API @@ -0,0 +1,262 @@ +MAD API documentation collected from e-mails of Joe Drew and Rob Leslie. +The original e-mails can be found in the docs directory. They contain the +same information as is presented below. + +INDEX +====== +1. I/O Synchronous Mode +2. Low-level API + + + +1. I/O SYNCHRONOUS MODE (extract from Joe Drew) +=============================================== +MAD operates with callbacks for functions. Each of these functions is +expected to return type enum mad_flow; this allows you to control the +decoding process. + +MAD always outputs 32-bit (well, mad_fixed_t) little-endian data. Take +this into account when outputting samples to the sound card. +Related to the above, since MAD outputs type mad_fixed_t, unless you can +output with 32-bit accuracy (most sound cards can't), you will have to +quantize, round, dither, etc these samples to 16-bit (or whatever you +need.) While there is a sample routine in minimad.c, if you want good +quality you'll either want to roll your own or take a look in madplay's +sources. + +Integral to understanding MAD: MAD is a decoding library only. You +handle input and output; you're responsible for fast-forwarding and +rewinding, if you want that type of functionality. All that MAD will do +is take input from you, decode the MPEG frames, give you some +information about them, and give you the decoded PCM data. + +Now, the nitty-gritty information. + +First, you need a mad_decoder struct. This holds all information about +how you want your stream decoded, such as input/output functions, error +handling functions, etc. + +mad_decoder_init() sets this structure up for you. + +struct mad_decoder decoder; +struct my_playbuf playbuf; + +mad_decoder_init(&decoder, &playbuf, input_func, header_func, /*filter*/ +0, output_func, /*error*/ 0, /* message */ 0); + +In this example, the function called to get more data is set to +input_func, the function called after MPEG headers have been decoded is +header_func, the function called after all sound data has been decoded +to PCM (for output) is output_func, and the filter, error, and message +functions are unset. + +Now, MAD runs in a constant decoding loop. It runs something along the +following lines: + +if I'm out of data + call input_func +if input_func says there's no more data, + quit +decode the header and call header_func +decode the mpeg audio data +call the filter function +call the output function +loop + +Now, this is an oversimplification obviously. The important thing to +realise is that at every step of the process you can tell MAD what to +do. + +Since all of these functions return enum mad_flow, you can tell MAD to +do any of the following: + +enum mad_flow { + MAD_FLOW_CONTINUE = 0x0000, /* Keep decoding this stream */ + MAD_FLOW_STOP = 0x0010, /* Stop decoding this stream, but exit + normally */ + MAD_FLOW_BREAK = 0x0011, /* Stop decoding this stream, and exit + with an error */ + MAD_FLOW_IGNORE = 0x0020 /* Don't decode this frame, + but continue afterwards */ +}; + +Most of the time you'll probably want to return MAD_FLOW_CONTINUE. In +every case, you'll have to return one of these values from the functions +you define. + +This is the definition of each of the functions: + +enum mad_flow (*input_func)(void *, struct mad_stream *); +enum mad_flow (*header_func)(void *, struct mad_header const *); +enum mad_flow (*filter_func)(void *, struct mad_stream const *, struct +mad_frame *); +enum mad_flow (*output_func)(void *, struct mad_header const *, struct +mad_pcm *); +enum mad_flow (*error_func)(void *, struct mad_stream *, struct +mad_frame *); +enum mad_flow (*message_func)(void *, void *, unsigned int *); + +In each of these functions the void* pointer passed to the function is +your "playbuf" structure. This can hold whatever you want - for example, +song title, length, number of frames - just remember to re-cast it to +the type you've defined. + +input_func takes a mad_stream pointer. Most of the time what you'll want +to do is something along the lines of the following: + +if (more_data_available) + buffer = refill_buffer(); + mad_stream_buffer(stream, buffer, length_of_buffer); + return MAD_FLOW_CONTINUE; +else + return MAD_FLOW_STOP; + +(On many systems you'll want to use mmap() for this.) + +header_func takes a mad_header pointer. This contains most of the +important information about a given frame; in constant bitrate files, it +can contain most of the important information about the stream. It will +give you the length of that frame, using mad_timer_t; the audio layer; +extension; bitrate... the list is long. Read frame.h or mad.h in the +frame.h area for more information. +Again, return MAD_FLOW_{CONTINUE,STOP,BREAK} depending on outside +conditions. + +The only other function I have firsthand information on is output_func; +in this case, you are given a pointer to struct mad_pcm. This gives you +the sampling rate, number of channels, and number of samples per +channel; doing something like the following should work: + +mad_fixed_t *left_channel = pcm->samples[0], *right_channel = +pcm->samples[1]; +int nsamples = pcm->length; +signed int sample; +unsigned char * buffer = some_buffer; +unsigned char * ptr = buffer; + +while (nsamples--) +{ + sample = (signed int) do_downsample(*left_ch++) + + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); + + sample = (signed int) do_downsample(*right_ch++) + + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); +} + +output buffer to device. + +Be sure to handle the big-endian case (autoconf can test for this), and +also the mono (1 channel) case. See mad.c in mpg321, at the end of the +file, for an example. + +Information on the other (error, filter, message) functions would be +appreciated, though I think in knowing this information anyone should be +able to puzzle it out. + +Now that the decoder is set up with all these callback functions, you +call + +mad_decoder_run(&decoder, MAD_DECODER_MODE_SYNC); + +and then + +mad_decoder_finish(&decoder); + +Once you've called mad_decoder_finish, you can re-use the decoder +struct, if you're, for example, within a playlist. Incidentally, all MAD +structures have similar mad_(whatever)_init and mad_(whatever)_finish +functions. + +I hope this helps people get their feet wet with MAD. Read the source, +and particularly mad.h - there are a lot of things there you might not +expect. Rob has done a good job in making MAD a complete solution. :) + + +2. LOW-LEVEL API (extract from Rob Leslie) +========================================== + +By way of clarification, MAD also has a low-level API which does not use +callbacks. You can control the entire decoding process yourself more or less +as follows: + + /* load buffer with your MPEG audio data */ + + mad_stream_buffer(&stream, buffer, buflen); + + while (1) { + mad_frame_decode(&frame, &stream); + mad_synth_frame(&synth, &frame); + + /* output PCM samples in synth.pcm */ + } + +This is vastly simplified, but it shows the general idea. mad_frame_decode() +decodes the next frame's header and subband samples. mad_synth_frame() takes +those subband samples and synthesizes PCM samples. + +It is also possible to call mad_header_decode() before mad_frame_decode(). +This just gives you the frame's header info, in case that's all you want, or +perhaps to help you decide whether you want to decode the rest of the frame. + +As Joe mentions, each of the stream, frame, and synth structs needs to be +initialized and "finished" before and after use: + + struct mad_stream stream; + struct mad_frame frame; + struct mad_synth synth; + + mad_stream_init(&stream); + mad_frame_init(&frame); + mad_synth_init(&synth); + + /* ... */ + + mad_synth_finish(&synth); + mad_frame_finish(&frame); + mad_stream_finish(&stream); + +You can work with just a struct mad_header instead of a struct mad_frame if +you only want to decode frame headers. + +Joe writes: +> MAD always outputs 32-bit (well, mad_fixed_t) little-endian data. Take +> this into account when outputting samples to the sound card. + +This isn't quite right: the mad_fixed_t type is not necessarily little-endian. +It's the same endianness as the native integer types. Also, it's only +guaranteed to be *at least* 32 bits wide. + +The fixed-point sample format is important to understand, and I recommend +reading the comments in libmad/fixed.h. The thing to remember when converting +MAD's fixed-point integer samples to 16-bit PCM (or whatever) is that MAD +encodes samples as numbers in the full-scale range [-1.0, +1.0) where the +binary point is placed 28 (MAD_F_FRACBITS) bits to the left of the integer. +However, you need to be prepared to handle clipping as some numbers may be +less than -1.0 (-MAD_F_ONE) or greater than or equal to +1.0 (MAD_F_ONE, aka +1 << MAD_F_FRACBITS). + +> Information on the other (error, filter, message) functions would be +> appreciated, though I think in knowing this information anyone should be +> able to puzzle it out. + +In the high-level API, the error callback function is called whenever a +decoding error occurs. The error number is in stream->error. + +The filter callback function is called after decoding a frame, but before +synthesis. Here it is possible to modify the frame's subband samples, for +example to perform a uniform attenuation/amplification, or to do other special +processing in the frequency domain. + +The message callback function is only used with MAD_DECODER_MODE_ASYNC, and is +called whenever the parent process sends a message via mad_decoder_message(). +This callback can generate a reply by overwriting the message buffer that is +passed to it. (The size of the reply must be the same or smaller than the +message.) + + + + diff --git a/plugins/mad_adec/BUGS b/plugins/mad_adec/BUGS new file mode 100644 index 0000000000..d16e71de28 --- /dev/null +++ b/plugins/mad_adec/BUGS @@ -0,0 +1,20 @@ +bug #09/11/2001-1: (FIXED 20/11/2001, by JP Saman) + Makefile.opts.in and Makefile.opts static libmad.a library is not filled in automatically by configure. + It should say in Makefile.opts LIB_MAD_ADEC=lib/libmad.a + +bug #09/11/2001-2: + libmad/mad.h is not created automatically. Fix compile step and dependencies for mad_adec to automatically + configure and or build libmad when not build yet. This means integration of configure.in scripts. + +bug #12/11/2001-1 (WORKING, by JP Saman) + smoothen out audio in libmad_output callback function, by optimizing conversion routines. After investigation + and experimenting I found out that my input routine and output routine were not balanced correctly with + respect to buffer sizes. A lot of data got lost. I fixed that, but still need a bater scaling/smoothing routine + for the audio. + +bug #20/11/2001-1 (FIXED 25/11/2001, by JP Saman) + synchronization between audio and video output is lost. In libmad_output a timestamp is set on the audio data, but + it points to a later video frame, then when the audio data was read. How can I set the correct timestamp on the + audio fifo at the time it was read from the bitstream, so that it matches the video frame it belongs to? + Solution: Do it in two steps, in the input function save i_pts of fifo and in output function pass saved i_pts to + aout_fifo. \ No newline at end of file diff --git a/plugins/mad_adec/DESIGN b/plugins/mad_adec/DESIGN new file mode 100644 index 0000000000..d9327c4b93 --- /dev/null +++ b/plugins/mad_adec/DESIGN @@ -0,0 +1,61 @@ +File: Plugin mad for vlc is based upon libmad from the mad distribution. +Author: Jean-Paul Saman + +Directories: +============ +vlc/ : adapted config.in and Makefile + : added libtool, ltmain.sh and ltconfig +vlc/extras/libmad : libmad from the original mad distribution +vlc/plugins/mad_adec : mad audio decoder plugin for vlc + +Interface functions to implement in mad plugin are: +========= +adec_mad_Probe +adec_mad_Run +adec_mad_Init +adec_mad_ErrorThread +adec_mad_EndThread + +libmad_input +libmad_output +libmad_header +libmad_messages + +Design: (ASCII art) +======= +It represents the function call flow viewed from the vlc main program. The main program is in charge of allocating decoders, +initializing, starting and stopping them. + + --------------- + | | + | libmad | + --------------- + ^ + | + --------------- + | | + | mad_adec | + _______________ + ^ + | + ________________________ + | | + | vlc plugin interface | + ________________________ + + +Interface view: +=============== + [mad_adec decoder plugin] + ---------------------- + vlc decoder interface -> | mad_adec mad_libmad | -> libmad + ----------------------- + +Rationel: +Keeping libmad as a separate library, either dynamic or statically linked in, makes maintenance so much simpeler. +Merging with a new libmad version should be straight forward as long as the interface stays stable. +There is another benefit: Disk (actually flash ROM) resources and memory are very limited on a iPaq. +Other programs or utilities like madplay and BBplay can make use of the same libmad version we do. In this way +limiting the needed storage place on disk (flash ROM). Also this is only possible when the interface stays the same. + + diff --git a/plugins/mad_adec/Makefile b/plugins/mad_adec/Makefile new file mode 100644 index 0000000000..e1ca10a0fe --- /dev/null +++ b/plugins/mad_adec/Makefile @@ -0,0 +1,37 @@ +############################################################################### +# vlc (VideoLAN Client) MAD audio decoder module makefile +# (c)2001 VideoLAN +############################################################################### + +# +# Objects +# +PLUGIN_MAD = mad_adec.o mad_libmad.o +BUILTIN_MAD = $(PLUGIN_MAD:%.o=BUILTIN_%.o) + +ALL_OBJ = $(PLUGIN_MAD) $(BUILTIN_MAD) +# +# Virtual targets +# + +include ../../Makefile.modules + +$(PLUGIN_MAD): %.o: .dep/%.d +$(PLUGIN_MAD): %.o: %.c + $(CC) $(CFLAGS) $(PCFLAGS) $(CFLAGS_MAD_ADEC) -DPLUGIN -c -o $@ $< + +$(BUILTIN_MAD): BUILTIN_%.o: .dep/%.d +$(BUILTIN_MAD): BUILTIN_%.o: %.c + $(CC) $(CFLAGS) $(CFLAGS_MAD_ADEC) -DBUILTIN -c -o $@ $< + +# +# Real targets +# + +../mad_adec.so: $(PLUGIN_MAD) + $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_MAD_ADEC) + +../mad_adec.a: $(BUILTIN_MAD) + ar r $@ $^ + $(RANLIB) $@ + diff --git a/plugins/mad_adec/TODO b/plugins/mad_adec/TODO new file mode 100644 index 0000000000..a5869714fe --- /dev/null +++ b/plugins/mad_adec/TODO @@ -0,0 +1,47 @@ +TODO: (Jean-Paul Saman ) + +[1 - 30 October 2001, done] +introduce libmad in vlc-dev code tree, this includes: + configure from top level of source tree + compilable from top level of source tree + +[2 - 25 November 2001, done] +creating basic mad plugin in vlc-dev code tree, this include: + writing most simple vlc-plugin (no fancy stuf) + configurable from top level of source tree + compilable from top level of source tree + +[3 - 25 November 2001, done] +test basic mad plugin + native Intel + native iPaq + +[4 - 26 November 2001, working] +commit to current vlc-dev tree in CVS at VideoLan + fix broken things and conflicts + run tests again (see [3]) + +[5 - all ready done by Christophe Massiot] +make cross-compile possible for vlc without interface. With interface it is to damn difficult to do cross-compilation. + +[6 - ] +extending mad plugin with more features + do fancy stuff (enable MP3 decoding) + +[7 - ] +test extended plugin + native Intel + native iPaq + cross-compile iPaq + +[8 - ] +commit to current vlc-dev tree in CVS at Videolan + fix broken things and conflicts + run tests again (see [7]) + +[9 - ] +incorporate new libmad version if possible + see 1 + see 7 + see 8 + diff --git a/plugins/mad_adec/docs/joe_drew.txt b/plugins/mad_adec/docs/joe_drew.txt new file mode 100644 index 0000000000..97dbab90d0 --- /dev/null +++ b/plugins/mad_adec/docs/joe_drew.txt @@ -0,0 +1,174 @@ +Subject: [mad-dev] Some information about programming with MAD (in synchronous mode) + +As the author of mpg321, I too faced the problem of MAD not being +documented. However, in looking at minimad.c, and re-writing mpg321 to +use MAD, I came to understand it better. Here's some information which +will help anybody start out with MAD: + +First, some basic information. +MAD operates with callbacks for functions. Each of these functions is +expected to return type enum mad_flow; this allows you to control the +decoding process. +MAD always outputs 32-bit (well, mad_fixed_t) little-endian data. Take +this into account when outputting samples to the sound card. +Related to the above, since MAD outputs type mad_fixed_t, unless you can +output with 32-bit accuracy (most sound cards can't), you will have to +quantize, round, dither, etc these samples to 16-bit (or whatever you +need.) While there is a sample routine in minimad.c, if you want good +quality you'll either want to roll your own or take a look in madplay's +sources. +Integral to understanding MAD: MAD is a decoding library only. You +handle input and output; you're responsible for fast-forwarding and +rewinding, if you want that type of functionality. All that MAD will do +is take input from you, decode the MPEG frames, give you some +information about them, and give you the decoded PCM data. + +Now, the nitty-gritty information. + +First, you need a mad_decoder struct. This holds all information about +how you want your stream decoded, such as input/output functions, error +handling functions, etc. + +mad_decoder_init() sets this structure up for you. + +struct mad_decoder decoder; +struct my_playbuf playbuf; + +mad_decoder_init(&decoder, &playbuf, input_func, header_func, /*filter*/ +0, output_func, /*error*/ 0, /* message */ 0); + +In this example, the function called to get more data is set to +input_func, the function called after MPEG headers have been decoded is +header_func, the function called after all sound data has been decoded +to PCM (for output) is output_func, and the filter, error, and message +functions are unset. + +Now, MAD runs in a constant decoding loop. It runs something along the +following lines: + +if I'm out of data + call input_func +if input_func says there's no more data, + quit +decode the header and call header_func +decode the mpeg audio data +call the filter function +call the output function +loop + +Now, this is an oversimplification obviously. The important thing to +realise is that at every step of the process you can tell MAD what to +do. + +Since all of these functions return enum mad_flow, you can tell MAD to +do any of the following: + +enum mad_flow { + MAD_FLOW_CONTINUE = 0x0000, /* Keep decoding this stream */ + MAD_FLOW_STOP = 0x0010, /* Stop decoding this stream, but exit + normally */ + MAD_FLOW_BREAK = 0x0011, /* Stop decoding this stream, and exit + with an error */ + MAD_FLOW_IGNORE = 0x0020 /* Don't decode this frame, + but continue afterwards */ +}; + +Most of the time you'll probably want to return MAD_FLOW_CONTINUE. In +every case, you'll have to return one of these values from the functions +you define. + +This is the definition of each of the functions: + +enum mad_flow (*input_func)(void *, struct mad_stream *); +enum mad_flow (*header_func)(void *, struct mad_header const *); +enum mad_flow (*filter_func)(void *, struct mad_stream const *, struct +mad_frame *); +enum mad_flow (*output_func)(void *, struct mad_header const *, struct +mad_pcm *); +enum mad_flow (*error_func)(void *, struct mad_stream *, struct +mad_frame *); +enum mad_flow (*message_func)(void *, void *, unsigned int *); + +In each of these functions the void* pointer passed to the function is +your "playbuf" structure. This can hold whatever you want - for example, +song title, length, number of frames - just remember to re-cast it to +the type you've defined. + +input_func takes a mad_stream pointer. Most of the time what you'll want +to do is something along the lines of the following: + +if (more_data_available) + buffer = refill_buffer(); + mad_stream_buffer(stream, buffer, length_of_buffer); + return MAD_FLOW_CONTINUE; +else + return MAD_FLOW_STOP; + +(On many systems you'll want to use mmap() for this.) + +header_func takes a mad_header pointer. This contains most of the +important information about a given frame; in constant bitrate files, it +can contain most of the important information about the stream. It will +give you the length of that frame, using mad_timer_t; the audio layer; +extension; bitrate... the list is long. Read frame.h or mad.h in the +frame.h area for more information. +Again, return MAD_FLOW_{CONTINUE,STOP,BREAK} depending on outside +conditions. + +The only other function I have firsthand information on is output_func; +in this case, you are given a pointer to struct mad_pcm. This gives you +the sampling rate, number of channels, and number of samples per +channel; doing something like the following should work: + +mad_fixed_t *left_channel = pcm->samples[0], *right_channel = +pcm->samples[1]; +int nsamples = pcm->length; +signed int sample; +unsigned char * buffer = some_buffer; +unsigned char * ptr = buffer; + +while (nsamples--) +{ + sample = (signed int) do_downsample(*left_ch++) + + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); + + sample = (signed int) do_downsample(*right_ch++) + + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); +} + +output buffer to device. + +Be sure to handle the big-endian case (autoconf can test for this), and +also the mono (1 channel) case. See mad.c in mpg321, at the end of the +file, for an example. + +Information on the other (error, filter, message) functions would be +appreciated, though I think in knowing this information anyone should be +able to puzzle it out. + +Now that the decoder is set up with all these callback functions, you +call + +mad_decoder_run(&decoder, MAD_DECODER_MODE_SYNC); + +and then + +mad_decoder_finish(&decoder); + +Once you've called mad_decoder_finish, you can re-use the decoder +struct, if you're, for example, within a playlist. Incidentally, all MAD +structures have similar mad_(whatever)_init and mad_(whatever)_finish +functions. + +I hope this helps people get their feet wet with MAD. Read the source, +and particularly mad.h - there are a lot of things there you might not +expect. Rob has done a good job in making MAD a complete solution. :) + +-- +Joe Drew + +Please encrypt email sent to me. diff --git a/plugins/mad_adec/docs/rob_leslie.txt b/plugins/mad_adec/docs/rob_leslie.txt new file mode 100644 index 0000000000..fbe49e4848 --- /dev/null +++ b/plugins/mad_adec/docs/rob_leslie.txt @@ -0,0 +1,124 @@ +From - Mon Nov 5 09:19:09 2001 +Return-Path: +Received: from smtp01.wxs.nl ([195.121.5.15]) by po05.wxs.nl + (Netscape Messaging Server 4.15) with ESMTP id GLLMFJ00.3DF for + ; Mon, 22 Oct 2001 10:33:19 +0200 +Received: from surveyor.mars.org ([216.98.134.66]) by + smtp01.wxs.nl (Netscape Messaging Server 4.15) with ESMTP id + GLLMFZ00.C2Z for ; Mon, 22 Oct 2001 10:33:35 +0200 +Received: from surveyor.mars.org (localhost [127.0.0.1]) + by surveyor.mars.org (8.9.3/8.9.3/Debian 8.9.3-21) with ESMTP id BAA07654; + Mon, 22 Oct 2001 01:32:07 -0700 +Received: from mars.org (localhost [127.0.0.1]) + by surveyor.mars.org (8.9.3/8.9.3/Debian 8.9.3-21) with ESMTP id BAA07629 + for ; Mon, 22 Oct 2001 01:31:30 -0700 +Message-Id: <200110220831.BAA07629@surveyor.mars.org> +X-Authentication-Warning: surveyor.mars.org: Host localhost [127.0.0.1] claimed to be mars.org +From: Rob Leslie +To: mad-dev@lists.mars.org +Subject: Re: [mad-dev] Some information about programming with MAD (in synchronous mode) +In-reply-to: Your message of "21 Oct 2001 16:13:19 EDT." + <1003695199.24019.56.camel@pisces> +Mime-Version: 1.0 (generated by tm-edit 7.106) +Content-Type: text/plain; charset=US-ASCII +Sender: mad-dev-admin@lists.mars.org +Errors-To: mad-dev-admin@lists.mars.org +X-BeenThere: mad-dev@lists.mars.org +X-Mailman-Version: 2.0.1 +Precedence: bulk +List-Help: +List-Post: +List-Subscribe: , + +List-Id: MAD developer's mailing list +List-Unsubscribe: , + +List-Archive: +Date: Mon, 22 Oct 2001 01:31:30 -0700 +X-Mozilla-Status: 8011 +X-Mozilla-Status2: 00000000 +X-UIDL: 1879-1001307689 + +Joe Drew wrote some good info on the MAD high-level API that I hope will be +helpful to others. + +By way of clarification, MAD also has a low-level API which does not use +callbacks. You can control the entire decoding process yourself more or less +as follows: + + /* load buffer with your MPEG audio data */ + + mad_stream_buffer(&stream, buffer, buflen); + + while (1) { + mad_frame_decode(&frame, &stream); + mad_synth_frame(&synth, &frame); + + /* output PCM samples in synth.pcm */ + } + +This is vastly simplified, but it shows the general idea. mad_frame_decode() +decodes the next frame's header and subband samples. mad_synth_frame() takes +those subband samples and synthesizes PCM samples. + +It is also possible to call mad_header_decode() before mad_frame_decode(). +This just gives you the frame's header info, in case that's all you want, or +perhaps to help you decide whether you want to decode the rest of the frame. + +As Joe mentions, each of the stream, frame, and synth structs needs to be +initialized and "finished" before and after use: + + struct mad_stream stream; + struct mad_frame frame; + struct mad_synth synth; + + mad_stream_init(&stream); + mad_frame_init(&frame); + mad_synth_init(&synth); + + /* ... */ + + mad_synth_finish(&synth); + mad_frame_finish(&frame); + mad_stream_finish(&stream); + +You can work with just a struct mad_header instead of a struct mad_frame if +you only want to decode frame headers. + +Joe writes: +> MAD always outputs 32-bit (well, mad_fixed_t) little-endian data. Take +> this into account when outputting samples to the sound card. + +This isn't quite right: the mad_fixed_t type is not necessarily little-endian. +It's the same endianness as the native integer types. Also, it's only +guaranteed to be *at least* 32 bits wide. + +The fixed-point sample format is important to understand, and I recommend +reading the comments in libmad/fixed.h. The thing to remember when converting +MAD's fixed-point integer samples to 16-bit PCM (or whatever) is that MAD +encodes samples as numbers in the full-scale range [-1.0, +1.0) where the +binary point is placed 28 (MAD_F_FRACBITS) bits to the left of the integer. +However, you need to be prepared to handle clipping as some numbers may be +less than -1.0 (-MAD_F_ONE) or greater than or equal to +1.0 (MAD_F_ONE, aka +1 << MAD_F_FRACBITS). + +> Information on the other (error, filter, message) functions would be +> appreciated, though I think in knowing this information anyone should be +> able to puzzle it out. + +In the high-level API, the error callback function is called whenever a +decoding error occurs. The error number is in stream->error. + +The filter callback function is called after decoding a frame, but before +synthesis. Here it is possible to modify the frame's subband samples, for +example to perform a uniform attenuation/amplification, or to do other special +processing in the frequency domain. + +The message callback function is only used with MAD_DECODER_MODE_ASYNC, and is +called whenever the parent process sends a message via mad_decoder_message(). +This callback can generate a reply by overwriting the message buffer that is +passed to it. (The size of the reply must be the same or smaller than the +message.) + +Cheers, + -rob diff --git a/plugins/mad_adec/mad_adec.c b/plugins/mad_adec/mad_adec.c new file mode 100644 index 0000000000..ab8a9ca794 --- /dev/null +++ b/plugins/mad_adec/mad_adec.c @@ -0,0 +1,285 @@ +/*************************************************************************** + mad_adec.c - description + ------------------- + Plugin Module definition for using libmad audio decoder in vlc. The + libmad codec uses integer arithmic only. This makes it suitable for using + it on architectures without a hardware FPU unit, such as the StrongArm + CPU. + + begin : Mon Nov 5 2001 + copyright : (C) 2001 by Jean-Paul Saman + email : jpsaman@wxs.nl + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#define MODULE_NAME mad_adec +#include "modules_inner.h" + +/***************************************************************************** + * Preamble + *****************************************************************************/ +#include "defs.h" + +#include /* malloc(), free() */ +#include /* strdup() */ + +#include "config.h" +#include "common.h" /* boolean_t, byte_t */ +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" + +#include "audio_output.h" + +#include "modules.h" +#include "modules_export.h" + +#include "stream_control.h" +#include "input_ext-dec.h" + +#include "debug.h" + +/***************************************************************************** + * Libmad include files * + *****************************************************************************/ +#include +#include "mad_adec.h" +#include "mad_libmad.h" + +/***************************************************************************** + * Local prototypes + *****************************************************************************/ +static int mad_adec_Probe ( probedata_t * ); +static int mad_adec_Run ( decoder_config_t * ); +static int mad_adec_Init (mad_adec_thread_t * p_mad_adec); +static void mad_adec_ErrorThread (mad_adec_thread_t * p_mad_adec); +static void mad_adec_EndThread (mad_adec_thread_t * p_mad_adec); + +/***************************************************************************** + * Capabilities + *****************************************************************************/ +void _M( adec_getfunctions )( function_list_t * p_function_list ) +{ + p_function_list->pf_probe = mad_adec_Probe; + p_function_list->functions.dec.pf_run = mad_adec_Run; +} + +/***************************************************************************** + * Build configuration tree. + *****************************************************************************/ +MODULE_CONFIG_START +ADD_WINDOW( "Configuration for mad_adec module" ) + ADD_COMMENT( "No device to configure." ) +MODULE_CONFIG_STOP + +MODULE_INIT_START + p_module->i_capabilities = MODULE_CAPABILITY_DEC; + p_module->psz_longname = "Libmad MPEG 1/2/3 audio decoder library"; +MODULE_INIT_STOP + +MODULE_ACTIVATE_START + _M( adec_getfunctions )( &p_module->p_functions->dec ); +MODULE_ACTIVATE_STOP + +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP + +/***************************************************************************** + * mad_adec_Probe: probe the decoder and return score + ***************************************************************************** + * Tries to launch a decoder and return score so that the interface is able + * to chose. + *****************************************************************************/ +static int mad_adec_Probe( probedata_t *p_data ) +{ + if( p_data->i_type == MPEG1_AUDIO_ES || p_data->i_type == MPEG2_AUDIO_ES ) + { + if( TestMethod( ADEC_MPEG_VAR, "mad" ) ) + { + return( 999 ); + } + return( 50 ); + } + else + { + return( 0 ); + } +} + +/***************************************************************************** + * mad_adec_Run: this function is called just after the thread is created + *****************************************************************************/ +static int mad_adec_Run ( decoder_config_t * p_config ) +{ + mad_adec_thread_t * p_mad_adec; + + intf_ErrMsg( "mad_adec debug: mad_adec thread launched, initializing" ); + + /* Allocate the memory needed to store the thread's structure */ + p_mad_adec = (mad_adec_thread_t *) malloc(sizeof(mad_adec_thread_t)); + + if (p_mad_adec == NULL) + { + intf_ErrMsg ( "mad_adec error: not enough memory " + "for mad_adec_Run() to allocate p_mad_adec" ); + return( -1 ); + } + + /* + * Initialize the thread properties + */ + p_mad_adec->p_config = p_config; + p_mad_adec->p_fifo = p_mad_adec->p_config->p_decoder_fifo; + if( mad_adec_Init( p_mad_adec ) ) + { + intf_ErrMsg( "mad_adec error: could not initialize thread" ); + return( -1 ); + } + + /* mad decoder thread's main loop */ + while ((!p_mad_adec->p_fifo->b_die) && (!p_mad_adec->p_fifo->b_error)) + { + intf_ErrMsg( "mad_adec: starting libmad decoder" ); + if (mad_decoder_run(p_mad_adec->libmad_decoder, MAD_DECODER_MODE_SYNC)==-1) + { + intf_ErrMsg( "mad_adec error: libmad decoder returns abnormally"); + mad_adec_EndThread(p_mad_adec); + return( -1 ); + } + } + + /* If b_error is set, the mad decoder thread enters the error loop */ + if (p_mad_adec->p_fifo->b_error) + { + mad_adec_ErrorThread (p_mad_adec); + } + + /* End of the ac3 decoder thread */ + mad_adec_EndThread (p_mad_adec); + + return( 0 ); +} + +/***************************************************************************** + * mad_adec_Init: initialize data before entering main loop + *****************************************************************************/ +static int mad_adec_Init( mad_adec_thread_t * p_mad_adec ) +{ + /* + * Properties of audio for libmad + */ + + /* Initialize the libmad decoder structures */ + p_mad_adec->libmad_decoder = (struct mad_decoder*) malloc(sizeof(struct mad_decoder)); + + /* + * Initialize bit stream + */ + p_mad_adec->p_config->pf_init_bit_stream( &p_mad_adec->bit_stream, + p_mad_adec->p_config->p_decoder_fifo, + NULL, /* pf_bitstream_callback */ + NULL ); /* void **/ + + RealignBits( &p_mad_adec->bit_stream ); + + mad_decoder_init( p_mad_adec->libmad_decoder, + p_mad_adec, /* vlc's thread structure and p_fifo playbuffer */ + libmad_input, /* input_func */ + libmad_header, /* header_func */ + 0, /* filter */ + libmad_output, /* output_func */ + 0, /* error */ + 0); /* message */ + + mad_decoder_options(p_mad_adec->libmad_decoder, MAD_OPTION_IGNORECRC); + + /* + * Initialize the output properties + */ + + /* Creating the audio output fifo */ + p_mad_adec->p_aout_fifo = aout_CreateFifo( AOUT_ADEC_STEREO_FIFO, /* fifo type */ + 2, /* nr. of channels */ + 48000, /* frame rate in Hz ?*/ + 0, /* units */ + ADEC_FRAME_SIZE/2, /* frame size */ + NULL ); /* buffer */ + + if ( p_mad_adec->p_aout_fifo == NULL ) + { + return( -1 ); + } + + intf_ErrMsg("mad_adec debug: mad decoder thread %p initialized", p_mad_adec); + + return( 0 ); +} + + +/***************************************************************************** + * mad_adec_ErrorThread : mad decoder's RunThread() error loop + *****************************************************************************/ +static void mad_adec_ErrorThread (mad_adec_thread_t * p_mad_adec) +{ + /* We take the lock, because we are going to read/write the start/end + * indexes of the decoder fifo */ + vlc_mutex_lock (&p_mad_adec->p_fifo->data_lock); + + /* Wait until a `die' order is sent */ + while (!p_mad_adec->p_fifo->b_die) + { + /* Trash all received PES packets */ + while (!DECODER_FIFO_ISEMPTY(*p_mad_adec->p_fifo)) + { + p_mad_adec->p_fifo->pf_delete_pes( + p_mad_adec->p_fifo->p_packets_mgt, + DECODER_FIFO_START(*p_mad_adec->p_fifo)); + DECODER_FIFO_INCSTART (*p_mad_adec->p_fifo); + } + + /* Waiting for the input thread to put new PES packets in the fifo */ + vlc_cond_wait (&p_mad_adec->p_fifo->data_wait, + &p_mad_adec->p_fifo->data_lock); + } + + /* We can release the lock before leaving */ + vlc_mutex_unlock (&p_mad_adec->p_fifo->data_lock); +} + +/***************************************************************************** + * mad_adec_EndThread : libmad decoder thread destruction + *****************************************************************************/ +static void mad_adec_EndThread (mad_adec_thread_t * p_mad_adec) +{ + intf_ErrMsg ("mad_adec debug: destroying mad decoder thread %p", p_mad_adec); + + /* If the audio output fifo was created, we destroy it */ + if (p_mad_adec->p_aout_fifo != NULL) + { + aout_DestroyFifo (p_mad_adec->p_aout_fifo); + + /* Make sure the output thread leaves the NextFrame() function */ + vlc_mutex_lock (&(p_mad_adec->p_aout_fifo->data_lock)); + vlc_cond_signal (&(p_mad_adec->p_aout_fifo->data_wait)); + vlc_mutex_unlock (&(p_mad_adec->p_aout_fifo->data_lock)); + } + + /* mad_decoder_finish releases the memory allocated inside the struct */ + mad_decoder_finish( p_mad_adec->libmad_decoder ); + + /* Unlock the modules */ + free( p_mad_adec->libmad_decoder ); +// free( p_mad_adec->p_config ); /* for now a reminder until integration with cvs */ + free( p_mad_adec ); + + intf_ErrMsg ("mad_adec debug: mad decoder thread %p destroyed", p_mad_adec); +} + diff --git a/plugins/mad_adec/mad_adec.h b/plugins/mad_adec/mad_adec.h new file mode 100644 index 0000000000..b1639b86a2 --- /dev/null +++ b/plugins/mad_adec/mad_adec.h @@ -0,0 +1,61 @@ +/*************************************************************************** + mad_adec.h - description + ------------------- + begin : Mon Nov 5 2001 + copyright : (C) 2001 by Jean-Paul Saman + email : jpsaman@wxs.nl + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef _VLC_MAD_ADEC_H_ +#define _VLC_MAD_ADEC_H_ +/***************************************************************************** + * mad_adec_thread_t : mad decoder thread descriptor + *****************************************************************************/ + +// FIXME: Ugly define inside a decoder +#define ADEC_FRAME_SIZE (4*1152) + +typedef struct mad_adec_thread_s +{ + /* + * Decoder properties + */ + struct mad_decoder *libmad_decoder; + + /* + * Thread properties + */ + vlc_thread_t thread_id; /* id for thread functions */ + + /* + * Input properties + */ + decoder_fifo_t * p_fifo; /* stores the PES stream data */ + /* The bit stream structure handles the PES stream at the bit level */ + bit_stream_t bit_stream; + decoder_config_t * p_config; + /* Store i_pts for syncing audio frames */ + mtime_t i_pts_save; + + /* + * Output properties + */ + aout_fifo_t * p_aout_fifo; /* stores the decompressed audio frames */ + +} mad_adec_thread_t; + +/***************************************************************************** + * Prototypes + *****************************************************************************/ +vlc_thread_t mad_adec_CreateThread( decoder_config_t * p_config ); + +#endif diff --git a/plugins/mad_adec/mad_libmad.c b/plugins/mad_adec/mad_libmad.c new file mode 100644 index 0000000000..30eb99d825 --- /dev/null +++ b/plugins/mad_adec/mad_libmad.c @@ -0,0 +1,393 @@ +/*************************************************************************** + mad_libmad.c - description + ------------------- + Functions that are called by libmad to communicate with vlc decoder + infrastructure. + + begin : Mon Nov 5 2001 + copyright : (C) 2001 by Jean-Paul Saman + email : jpsaman@wxs.nl + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +/***************************************************************************** + * Preamble + *****************************************************************************/ + +#include "defs.h" + +#include /* malloc(), free() */ +#include /* strdup() */ + +#include "config.h" +#include "common.h" /* boolean_t, byte_t */ +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" +#include "intf_msg.h" + +#include "audio_output.h" + +#include "modules.h" +#include "modules_export.h" + +#include "stream_control.h" +#include "input_ext-dec.h" + +#include "debug.h" + +/***************************************************************************** + * Libmad includes files + *****************************************************************************/ + +#include +#include "mad_adec.h" +#include "mad_libmad.h" + +/***************************************************************************** + * libmad_input: this function is called by libmad when the input buffer needs + * to be filled. + *****************************************************************************/ +enum mad_flow libmad_input(void *data, struct mad_stream *p_libmad_stream) +{ + mad_adec_thread_t *p_mad_adec = (mad_adec_thread_t *) data; + byte_t buffer[ADEC_FRAME_SIZE]; + + /* Store time stamp of current frame */ + if ( DECODER_FIFO_START(*p_mad_adec->p_fifo)->i_pts ) { + p_mad_adec->i_pts_save = DECODER_FIFO_START(*p_mad_adec->p_fifo)->i_pts; + DECODER_FIFO_START(*p_mad_adec->p_fifo)->i_pts = 0; + } + else { + p_mad_adec->i_pts_save = LAST_MDATE; + } + + GetChunk( &p_mad_adec->bit_stream, buffer, ADEC_FRAME_SIZE ); + + if ( p_mad_adec->p_fifo->b_die == 1 ) { + intf_ErrMsg( "mad_adec error: libmad_input stopping libmad decoder" ); + return MAD_FLOW_STOP; + } + + if ( p_mad_adec->p_fifo->b_error == 1 ) { + intf_ErrMsg( "mad_adec error: libmad_input ignoring current audio frame" ); + return MAD_FLOW_IGNORE; + } + + /* the length meant to be in bytes */ + mad_stream_buffer(p_libmad_stream, (unsigned char*) &buffer, ADEC_FRAME_SIZE ); + + return MAD_FLOW_CONTINUE; +} + +/***************************************************************************** + * libmad_header: this function is called just after the header of a frame is + * decoded + *****************************************************************************/ +enum mad_flow libmad_header(void *data, struct mad_header const *p_libmad_header) +{ + mad_adec_thread_t *p_mad_adec = (mad_adec_thread_t *) data; + + vlc_mutex_lock (&p_mad_adec->p_aout_fifo->data_lock); +/* + intf_ErrMsg( "mad_adec: libmad_header samplerate %d", p_libmad_header->samplerate); + intf_DbgMsg( "mad_adec: libmad_header bitrate %d", p_libmad_header->bitrate); +*/ + p_mad_adec->p_aout_fifo->l_rate = p_libmad_header->samplerate; + vlc_cond_signal (&p_mad_adec->p_aout_fifo->data_wait); + vlc_mutex_unlock (&p_mad_adec->p_aout_fifo->data_lock); + + return MAD_FLOW_CONTINUE; +} + +/***************************************************************************** + * lib_mad_filter: this function is called to filter data of a frame + *****************************************************************************/ +/* enum mad_flow libmad_filter(void *data, struct mad_stream const *p_libmad_stream, struct mad_frame *p_libmad_frame) + * { + * return MAD_FLOW_CONTINUE; + * } + */ + +/***************************************************************************** + * support routines borrowed from mpg321 (file: mad.c), which is distributed + * under GPL license + * + * mpg321 was written by Joe Drew , and based upon 'plaympeg' + * from the smpeg sources, which was written by various people from Loki Software + * (http://www.lokigames.com). + * + * It also incorporates some source from mad, written by Robert Leslie + *****************************************************************************/ + +/* The following two routines and data structure are from the ever-brilliant + Rob Leslie. +*/ + +struct audio_dither { + mad_fixed_t error[3]; + mad_fixed_t random; +}; + +/* +* NAME: prng() +* DESCRIPTION: 32-bit pseudo-random number generator +*/ +static __inline__ unsigned long prng(unsigned long state) +{ + return (state * 0x0019660dL + 0x3c6ef35fL) & 0xffffffffL; +} + +/* +* NAME: audio_linear_dither() +* DESCRIPTION: generic linear sample quantize and dither routine +*/ +static __inline__ signed long audio_linear_dither(unsigned int bits, mad_fixed_t sample, + struct audio_dither *dither) +{ + unsigned int scalebits; + mad_fixed_t output, mask, random; + + enum { + MIN = -MAD_F_ONE, + MAX = MAD_F_ONE - 1 + }; + + /* noise shape */ + sample += dither->error[0] - dither->error[1] + dither->error[2]; + + dither->error[2] = dither->error[1]; + dither->error[1] = dither->error[0] / 2; + + /* bias */ + output = sample + (1L << (MAD_F_FRACBITS + 1 - bits - 1)); + + scalebits = MAD_F_FRACBITS + 1 - bits; + mask = (1L << scalebits) - 1; + + /* dither */ + random = prng(dither->random); + output += (random & mask) - (dither->random & mask); + + dither->random = random; + + /* clip */ + if (output > MAX) { + output = MAX; + + if (sample > MAX) + sample = MAX; + } + else if (output < MIN) { + output = MIN; + + if (sample < MIN) + sample = MIN; + } + + /* quantize */ + output &= ~mask; + + /* error feedback */ + dither->error[0] = sample - output; + + /* scale */ + return output >> scalebits; +} + +/***************************************************************************** + * libmad_ouput: this function is called just after the frame is decoded + *****************************************************************************/ +enum mad_flow libmad_output(void *data, struct mad_header const *p_libmad_header, struct mad_pcm *p_libmad_pcm) +{ + mad_adec_thread_t *p_mad_adec= (mad_adec_thread_t *) data; + byte_t *buffer=NULL; + + mad_fixed_t const *left_ch = p_libmad_pcm->samples[0], *right_ch = p_libmad_pcm->samples[1]; + /* + * 1152 because that's what mad has as a max; *4 because + * there are 4 distinct bytes per sample (in 2 channel case) + */ + static unsigned char stream[ADEC_FRAME_SIZE]; + register int nsamples = p_libmad_pcm->length; + static struct audio_dither dither; + + register char * ptr = stream; + register signed int sample; + + /* Set timestamp to synchronize audio and video decoder fifo's */ + vlc_mutex_lock (&p_mad_adec->p_aout_fifo->data_lock); + p_mad_adec->p_aout_fifo->date[p_mad_adec->p_aout_fifo->l_end_frame] = p_mad_adec->i_pts_save; + + buffer = ((byte_t *)p_mad_adec->p_aout_fifo->buffer) + (p_mad_adec->p_aout_fifo->l_end_frame * ADEC_FRAME_SIZE); + + if (p_libmad_pcm->channels == 2) + { + while (nsamples--) + { + sample = (signed int) audio_linear_dither(16, *left_ch++, &dither); +#ifndef WORDS_BIGENDIAN + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); +#else + *ptr++ = (unsigned char) (sample >> 8); + *ptr++ = (unsigned char) (sample >> 0); +#endif + + sample = (signed int) audio_linear_dither(16, *right_ch++, &dither); +#ifndef WORDS_BIGENDIAN + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); +#else + *ptr++ = (unsigned char) (sample >> 8); + *ptr++ = (unsigned char) (sample >> 0); +#endif + } + buffer = memcpy(buffer,stream,p_libmad_pcm->length*4); + vlc_cond_signal (&p_mad_adec->p_aout_fifo->data_wait); + } + else + { + while (nsamples--) + { + sample = (signed int) audio_linear_dither(16, *left_ch++, &dither); + +#ifndef WORDS_BIGENDIAN + *ptr++ = (unsigned char) (sample >> 0); + *ptr++ = (unsigned char) (sample >> 8); +#else + *ptr++ = (unsigned char) (sample >> 8); + *ptr++ = (unsigned char) (sample >> 0); +#endif + } + buffer = memcpy(buffer,stream,p_libmad_pcm->length*2); + vlc_cond_signal (&p_mad_adec->p_aout_fifo->data_wait); + } + vlc_mutex_unlock (&p_mad_adec->p_aout_fifo->data_lock); + + vlc_mutex_lock (&p_mad_adec->p_aout_fifo->data_lock); + p_mad_adec->p_aout_fifo->l_end_frame = (p_mad_adec->p_aout_fifo->l_end_frame + 1) & AOUT_FIFO_SIZE; + vlc_cond_signal (&p_mad_adec->p_aout_fifo->data_wait); + vlc_mutex_unlock (&p_mad_adec->p_aout_fifo->data_lock); + + return MAD_FLOW_CONTINUE; +} + +/***************************************************************************** + * libmad_error: this function is called when an error occurs during decoding + *****************************************************************************/ +enum mad_flow libmad_error(void *data, struct mad_stream *p_libmad_stream, struct mad_frame *p_libmad_frame) +{ + enum mad_flow result = MAD_FLOW_CONTINUE; + + switch (p_libmad_stream->error) + { + case MAD_ERROR_BUFLEN: /* input buffer too small (or EOF) */ + intf_ErrMsg("libmad error: input buffer too small (or EOF)"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BUFPTR: /* invalid (null) buffer pointer */ + intf_ErrMsg("libmad error: invalid (null) buffer pointer"); + result = MAD_FLOW_STOP; + break; + case MAD_ERROR_NOMEM: /* not enough memory */ + intf_ErrMsg("libmad error: invalid (null) buffer pointer"); + result = MAD_FLOW_STOP; + break; + case MAD_ERROR_LOSTSYNC: /* lost synchronization */ + intf_ErrMsg("libmad error: lost synchronization"); + mad_stream_sync(p_libmad_stream); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADLAYER: /* reserved header layer value */ + intf_ErrMsg("libmad error: reserved header layer value"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADBITRATE: /* forbidden bitrate value */ + intf_ErrMsg("libmad error: forbidden bitrate value"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADSAMPLERATE: /* reserved sample frequency value */ + intf_ErrMsg("libmad error: reserved sample frequency value"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADEMPHASIS: /* reserved emphasis value */ + intf_ErrMsg("libmad error: reserverd emphasis value"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADCRC: /* CRC check failed */ + intf_ErrMsg("libmad error: CRC check failed"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADBITALLOC: /* forbidden bit allocation value */ + intf_ErrMsg("libmad error: forbidden bit allocation value"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADSCALEFACTOR:/* bad scalefactor index */ + intf_ErrMsg("libmad error: bad scalefactor index"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADFRAMELEN: /* bad frame length */ + intf_ErrMsg("libmad error: bad frame length"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADBIGVALUES: /* bad big_values count */ + intf_ErrMsg("libmad error: bad big values count"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADBLOCKTYPE: /* reserved block_type */ + intf_ErrMsg("libmad error: reserverd block_type"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADSCFSI: /* bad scalefactor selection info */ + intf_ErrMsg("libmad error: bad scalefactor selection info"); + result = MAD_FLOW_CONTINUE; + break; + case MAD_ERROR_BADDATAPTR: /* bad main_data_begin pointer */ + intf_ErrMsg("libmad error: bad main_data_begin pointer"); + result = MAD_FLOW_STOP; + break; + case MAD_ERROR_BADPART3LEN: /* bad audio data length */ + intf_ErrMsg("libmad error: bad audio data length"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADHUFFTABLE: /* bad Huffman table select */ + intf_ErrMsg("libmad error: bad Huffman table select"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADHUFFDATA: /* Huffman data overrun */ + intf_ErrMsg("libmad error: Huffman data overrun"); + result = MAD_FLOW_IGNORE; + break; + case MAD_ERROR_BADSTEREO: /* incompatible block_type for JS */ + intf_ErrMsg("libmad error: incompatible block_type for JS"); + result = MAD_FLOW_IGNORE; + break; + default: + intf_ErrMsg("libmad error: unknown error occured stopping decoder"); + result = MAD_FLOW_STOP; + break; + } + + //return (MAD_RECOVERABLE(p_libmad_stream->error)? result: MAD_FLOW_STOP); + return (MAD_FLOW_CONTINUE); +} + +/***************************************************************************** + * libmad_message: this function is called to send a message + *****************************************************************************/ +/* enum mad_flow libmad_message(void *, void*, unsigned int*) + * { + * return MAD_FLOW_CONTINUE; + * } + */ + + diff --git a/plugins/mad_adec/mad_libmad.h b/plugins/mad_adec/mad_libmad.h new file mode 100644 index 0000000000..676fd4573c --- /dev/null +++ b/plugins/mad_adec/mad_libmad.h @@ -0,0 +1,52 @@ +/*************************************************************************** + mad_libmad.h - description + ------------------- + begin : Mon Nov 5 2001 + copyright : (C) 2001 by Jean-Paul Saman + email : jpsaman@wxs.nl + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef _VLC_MAD_LIBMAD_H_ +#define _VLC_MAD_LIBMAD_H_ + +/* + * Function prototypes for libmad callback functions. + */ + +/* + * Each of the following functions will return one of: + * MAD_FLOW_CONTINUE = continue normally + * MAD_FLOW_STOP = stop decoding normally + * MAD_FLOW_BREAK = stop decoding and signal an error + * MAD_FLOW_IGNORE = ignore the current frame + */ + +/* enum mad_flow (*input_func)(void *, struct mad_stream *);*/ +enum mad_flow libmad_input(void *data, struct mad_stream *p_libmad_stream); + +/* enum mad_flow (*header_func)(void *, struct mad_header const *);*/ +enum mad_flow libmad_header(void *data, struct mad_header const *p_libmad_header); + +/* enum mad_flow (*filter_func)(void *, struct mad_stream const *, struct mad_frame *); */ +// enum mad_flow libmad_filter(void *data, struct mad_stream const *p_libmad_stream, struct mad_frame *p_libmad_frame); + +/* enum mad_flow (*output_func)(void *, struct mad_header const *, struct mad_pcm *); */ +enum mad_flow libmad_output(void *data, struct mad_header const *p_libmad_header, struct mad_pcm *p_libmad_pcm); +enum mad_flow libmad_output2(void *data, struct mad_header const *p_libmad_header, struct mad_pcm *p_libmad_pcm); + +/* enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *); */ +enum mad_flow libmad_error(void *data, struct mad_stream *p_libmad_stream, struct mad_frame *p_libmad_frame); + +/* enum mad_flow (*message_func)(void *, void *, unsigned int *); */ +/* enum mad_flow libmad_message(void *, void*, unsigned int*); */ + +#endif diff --git a/plugins/mpeg_adec/mpeg_adec.c b/plugins/mpeg_adec/mpeg_adec.c index 3f19e15bb4..e20835d282 100644 --- a/plugins/mpeg_adec/mpeg_adec.c +++ b/plugins/mpeg_adec/mpeg_adec.c @@ -2,7 +2,7 @@ * mpeg_adec.c: MPEG audio decoder thread ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: mpeg_adec.c,v 1.4 2001/12/03 16:18:37 sam Exp $ + * $Id: mpeg_adec.c,v 1.5 2001/12/04 13:47:46 massiot Exp $ * * Authors: Michel Kaempf * Michel Lespinasse @@ -39,6 +39,7 @@ #include "intf_msg.h" #include "threads.h" #include "mtime.h" +#include "tests.h" #include "audio_output.h" /* aout_fifo_t (for audio_decoder.h) */ @@ -98,9 +99,19 @@ MODULE_DEACTIVATE_STOP static int adec_Probe( probedata_t *p_data ) { if( p_data->i_type == MPEG1_AUDIO_ES || p_data->i_type == MPEG2_AUDIO_ES ) + { + if( !TestCPU( CPU_CAPABILITY_FPU ) ) + { + /* This can work but we'd really prefer libmad to take over. */ + return( 1 ); + } + if( TestMethod( ADEC_MPEG_VAR, "builtin" ) ) + { + return( 999 ); + } return( 100 ); - else - return( 0 ); + } + return( 0 ); } /***************************************************************************** diff --git a/src/interface/main.c b/src/interface/main.c index bb24a2885d..2ba4a59e50 100644 --- a/src/interface/main.c +++ b/src/interface/main.c @@ -4,7 +4,7 @@ * and spawn threads. ***************************************************************************** * Copyright (C) 1998-2001 VideoLAN - * $Id: main.c,v 1.128 2001/12/03 16:18:37 sam Exp $ + * $Id: main.c,v 1.129 2001/12/04 13:47:46 massiot Exp $ * * Authors: Vincent Seguin * Samuel Hocevar @@ -145,6 +145,8 @@ #define OPT_STDOUT 193 #define OPT_STATS 194 +#define OPT_MPEG_ADEC 200 + /* Usage fashion */ #define USAGE 0 #define SHORT_HELP 1 @@ -220,6 +222,10 @@ static const struct option longopts[] = /* Misc options */ { "synchro", 1, 0, OPT_SYNCHRO }, { "memcpy", 1, 0, OPT_MEMCPY }, + + /* Decoder options */ + { "mpeg_adec", 1, 0, OPT_MPEG_ADEC }, + { 0, 0, 0, 0 } }; @@ -823,6 +829,11 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) main_PutPszVariable( MEMCPY_METHOD_VAR, optarg ); break; + /* Decoder options */ + case OPT_MPEG_ADEC: + main_PutPszVariable( ADEC_MPEG_VAR, optarg ); + break; + /* Internal error: unknown option */ case '?': default: @@ -933,6 +944,8 @@ static void Usage( int i_fashion ) "\n --channels \tenable channels" "\n --channelserver \tchannel server address" "\n" + "\n --mpeg_adec \tchoose audio decoder" + "\n" "\n -h, --help \tprint help and exit" "\n -H, --longhelp \tprint long help and exit" "\n --version \toutput version information and exit" ); @@ -992,6 +1005,9 @@ static void Usage( int i_fashion ) "\n " INPUT_CHANNEL_SERVER_VAR "= \tchannel server" "\n " INPUT_CHANNEL_PORT_VAR "= \tchannel server port" ); + /* Decoder parameters */ + intf_MsgImm( "\nDecoder parameters:" + "\n " ADEC_MPEG_VAR "= \taudio decoder" ); } /***************************************************************************** @@ -1099,7 +1115,8 @@ static int CPUCapabilities( void ) volatile int i_capabilities = CPU_CAPABILITY_NONE; #if defined( SYS_BEOS ) - i_capabilities |= CPU_CAPABILITY_486 + i_capabilities |= CPU_CAPABILITY_FPU + | CPU_CAPABILITY_486 | CPU_CAPABILITY_586 | CPU_CAPABILITY_MMX; @@ -1113,6 +1130,8 @@ static int CPUCapabilities( void ) int i_size; char *psz_name, *psz_subname; + i_capabilities |= CPU_CAPABILITY_FPU; + /* Should 'never' fail? */ host = mach_host_self(); @@ -1139,6 +1158,8 @@ static int CPUCapabilities( void ) volatile unsigned int i_eax, i_ebx, i_ecx, i_edx; volatile boolean_t b_amd; + i_capabilities |= CPU_CAPABILITY_FPU; + signal( SIGILL, InstructionSignalHandler ); /* test for a 486 CPU */ @@ -1258,6 +1279,8 @@ static int CPUCapabilities( void ) #elif defined( __powerpc__ ) + i_capabilities |= CPU_CAPABILITY_FPU; + /* Test for Altivec */ signal( SIGILL, InstructionSignalHandler );