From 95a333bf0a6feece289b2fb08518e34e2bd99110 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Mon, 3 Dec 2001 16:18:37 +0000 Subject: [PATCH] * Borrowed MPlayer's fast memcpy() routines. Best is autodetected, choose "--memcpy " to choose one from c, mmx, mmxext or 3dn. Please test! Especially Athlon users. * Added versioned build-dep to libasound2-dev (Closes Debian bug #121057). * Updated Gtk/GNOME interfaces to use "udpstream" instead of "ts". * Unrolled ChangeLog. --- ChangeLog | 73 ++++++ ChangeLog.libdvdcss | 5 +- Makefile | 5 + configure | 411 +++++++++++++++---------------- configure.in | 18 +- debian/changelog | 1 + debian/control | 2 +- debian/libdvdcss1.dirs | 2 +- debian/rules | 3 +- doc/developer/decoders.xml | 4 +- doc/vlc.1 | 3 + include/common.h | 6 +- include/config.h.in | 10 +- include/defs.h.in | 14 +- include/input_ext-dec.h | 8 +- include/main.h | 5 +- include/modules.h | 12 +- include/modules_export.h | 3 + plugins/ac3_adec/ac3_adec.c | 4 +- plugins/ac3_spdif/ac3_spdif.c | 4 +- plugins/alsa/aout_alsa.c | 4 +- plugins/gtk/gtk_open.c | 4 +- plugins/lpcm_adec/lpcm_adec.c | 4 +- plugins/memcpy/.cvsignore | 1 + plugins/memcpy/Makefile | 61 +++++ plugins/memcpy/fastmemcpy.h | 384 +++++++++++++++++++++++++++++ plugins/memcpy/memcpy.c | 100 ++++++++ plugins/memcpy/memcpy3dn.c | 114 +++++++++ plugins/memcpy/memcpymmx.c | 114 +++++++++ plugins/memcpy/memcpymmxext.c | 114 +++++++++ plugins/mpeg/input_ts.h | 4 +- plugins/mpeg_adec/mpeg_adec.c | 4 +- plugins/mpeg_vdec/video_parser.c | 4 +- plugins/sdl/vout_sdl.c | 26 +- plugins/spu_dec/spu_decoder.c | 4 +- plugins/vcd/input_vcd.c | 4 +- plugins/x11/vout_xvideo.c | 14 +- src/input/input_dec.c | 4 +- src/interface/main.c | 52 +++- 39 files changed, 1315 insertions(+), 294 deletions(-) create mode 100644 plugins/memcpy/.cvsignore create mode 100644 plugins/memcpy/Makefile create mode 100644 plugins/memcpy/fastmemcpy.h create mode 100644 plugins/memcpy/memcpy.c create mode 100644 plugins/memcpy/memcpy3dn.c create mode 100644 plugins/memcpy/memcpymmx.c create mode 100644 plugins/memcpy/memcpymmxext.c diff --git a/ChangeLog b/ChangeLog index 1bce17c045..0c1668bcf8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,79 @@ HEAD + * 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). + * Updated Gtk/GNOME interfaces to use "udpstream" instead of "ts". + * More checks for GTK headers. + * Fixed a crash when pausing. + * Fixed numerous bugs in ES selection. + * Fixed stupid bug in vout_Manage. It sometimes called SetDSequenceMatrix + when there was no valid sequence. + * Hopeless fix for the input netlist corruption bug. + * Implemented simple BDirectWindow (DMA) support. + * DeleteDecoderConfig wasn't freeing (anymore) the packets left in the + decoder fifo. This bug was creating an io_vec starving on title change + when playing DVDs. + * Removed a bug in the Makefile that made the CVS-snapshots building fail. + * Added "#include " to include/threads.h. + * Removed the mutex the vout and intf thread (were supposed to use) + for syncronizing acces to the p_vout->p_sys structure. + * Added error checking in pthread wrapper; as a result, intf_msg.h must + now be included *before* threads.h. + * Changed all files to include intf_msg.h before threads.h; while I was + at it, I update the copyright notices. + * Removed the obsolete darwin plug-in. + * Fixed a deadlock (bug reported by marcari). + * Various (sometimes hopeless) fixes to try to improve xvideo stability. + * Documentation updates. + * Updated man page. + * dvd:[@] to avoid device namespace collision under + win32. + * Fixed a compilation issue under Win32. + * Fixed a potential packet corruption in the DVD input. + * Changed the protocol version for communication between vlc and vlcs + from 12 to 13 (due to change from ts:// to udpstream://) + * Big clean-up to allow compiling every module as plugins. + * Added bytes_swap.h to provide ntoh() and htol() on Win32. With this + change we don't have to link winsock2 with every plugin anymore. This + should also give us a slight speed increase. + * Added #define WIN32_LEAN_AND_MEAN in threads.h to speed-up compilation + on Win32. + * Modified ac_downmix_3dn and sse so they compile with the latest gcc for + Win32. + * Support for libdvdread. + * Added "Video" menu hint to debian/*menu (Closes Debian bug #121036). + * Major rewrite of the network layer. only supported syntax is: + udp[stream]:[//][serveraddr:[serverport]][@[bindaddr][:bindport]] + * Don`t use long long, use u64/s64 (int_types.h). + * Fixed a stale pointer in mpeg_vdec_Run(). + * (Hopefully) fixed the network connect() bug under UNIX. + * aRts audio output courtesy of Emmanuel Blindauer . + * Fix to the esd plugin when esd-config --cflags is nonempty. + * --channels puts gtk/gnome in multi-channel network mode. + * The network window of the interface reports the values of the environment + variables. + * Channels mode excludes vls configuration. + * The vlc does not try to bind vls.via.ecp.fr by default when you select + channels mode. + * Fixed MacOS X 10.1 network input, thanks to Mathias Kretschmer + . + * Fixed a few crashes due to race conditions in the decoder spawning. + * Removed unused code here and there. + * Fixed a bug in altivec detection on MacOS X. + * It seems that the 'focus' bug under WinME is solved. + * Updated the INSTALL-win32.txt file. + * The ./configure script is more friendly for Win32 users. + * Moved warning message to debug message in spdif pass-through plugin. + * Changed a bit the wait time. It works better here, please test. + * The default file-translation mode was not being set under win32. + * Fixed heap corruption issues in ac3dec (thanks reno). + * Fixed a crash when using `--input dvd /dev/dvd' instead of `dvd:/dev/dvd'. + * configure should no longer assume AltiVec is supported when it actually + isn't with buggy compilers and/or pre-set $CFLAGS. + * Commited my little release-howto (only useful to core vlc developers). + * Closing Debian bug #119369 which was fixed a while ago. * Decoder modularization. 0.2.91 diff --git a/ChangeLog.libdvdcss b/ChangeLog.libdvdcss index dd0f330b11..8d0e0d98ad 100644 --- a/ChangeLog.libdvdcss +++ b/ChangeLog.libdvdcss @@ -4,7 +4,10 @@ HEAD - * Nothing yet. + * Update for libdvdcss documentation. + * Reworked Keith Packard's raw device patch. The name of the raw device + is in the environment variable DVDCSS_RAW_DEVICE. + * Fixed a bug in libdvdcss: the key wasn't searched when it had to. 1.0.0 Mon, 12 Nov 2001 17:14:29 +0100 diff --git a/Makefile b/Makefile index 28590b92b5..fbac4a235a 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,7 @@ PLUGINS_DIR := ac3_adec \ kde \ lpcm_adec \ macosx \ + memcpy \ mga \ motion \ mpeg \ @@ -78,6 +79,10 @@ PLUGINS_TARGETS := ac3_adec/ac3_adec \ kde/kde \ lpcm_adec/lpcm_adec \ macosx/macosx \ + memcpy/memcpy \ + memcpy/memcpymmx \ + memcpy/memcpymmxext \ + memcpy/memcpy3dn \ mga/mga \ motion/motion \ motion/motionmmx \ diff --git a/configure b/configure index 1e912d7c7c..39ba5538ab 100755 --- a/configure +++ b/configure @@ -2376,15 +2376,12 @@ else #include #include #include -#include -#include - -#ifdef HAVE_UNISTD_H -# include -#endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include +# endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H @@ -2439,7 +2436,7 @@ main() /* * First, make a file with some known garbage in it. */ - data = (char*)malloc(pagesize); + data = malloc(pagesize); if (!data) exit(1); for (i = 0; i < pagesize; ++i) @@ -2460,7 +2457,7 @@ main() fd = open("conftestmmap", O_RDWR); if (fd < 0) exit(1); - data2 = (char*)malloc(2 * pagesize); + data2 = malloc(2 * pagesize); if (!data2) exit(1); data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); @@ -2478,7 +2475,7 @@ main() */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; - data3 = (char*)malloc(pagesize); + data3 = malloc(pagesize); if (!data3) exit(1); if (read(fd, data3, pagesize) != pagesize) @@ -2492,7 +2489,7 @@ main() } EOF -if { (eval echo configure:2496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2493: \"$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 +2512,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:2516: 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 +2534,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:2538: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2556,7 +2553,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:2557: 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 +2561,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:2576: \"$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 +2593,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:2597: 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 +2601,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:2616: \"$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 +2636,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:2640: 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 +2644,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:2659: \"$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 +2678,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:2682: 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 +2686,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:2701: \"$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 +2720,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:2724: 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 +2728,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:2743: \"$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 +2762,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:2766: 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:2794: \"$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 +2813,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:2817: 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 +2821,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:2836: \"$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 +2854,7 @@ fi cat > conftest.$ac_ext < EOF @@ -2873,7 +2870,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -2893,17 +2890,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:2894: 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:2904: \"$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 +2930,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:2934: 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:2944: \"$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 +2970,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:2974: 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:2984: \"$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 +3010,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:3014: 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:3024: \"$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 +3050,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:3054: 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:3064: \"$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 +3090,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:3094: 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:3104: \"$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 +3131,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:3135: 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:3145: \"$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 +3169,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:3173: 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:3186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_ntohl_sys_param_h=yes else @@ -3206,20 +3203,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:3207: 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:3220: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline_limit=yes else @@ -3237,20 +3234,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:3238: 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:3251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ld_darwin=yes else @@ -3268,20 +3265,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:3269: 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:3282: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_ld_plugins=yes else @@ -3300,7 +3297,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:3301: 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 +3306,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:3317: \"$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 +3325,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:3336: \"$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 +3361,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:3365: 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 +3369,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:3380: \"$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 +3399,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:3403: 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:3415: \"$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 +3432,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:3436: 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:3448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_boolean_t_pthread_h=yes else @@ -3468,19 +3465,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:3469: 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:3481: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_boolean_t_cthreads_h=yes else @@ -3501,18 +3498,18 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3505: checking for working const" >&5 +echo "configure:3502: 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:3556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3576,12 +3573,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:3577: 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 +3586,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:3590: \"$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 +3603,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 +3621,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 +3642,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -3656,7 +3653,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:3657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -3680,12 +3677,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:3684: checking for size_t" >&5 +echo "configure:3681: 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 +3710,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:3714: 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 +3724,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:3728: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else @@ -3751,29 +3748,29 @@ fi ARCH=${target_cpu} -BUILTINS="${BUILTINS} es ps ts yuv idct idctclassic motion imdct downmix mpeg_adec lpcm_adec ac3_adec mpeg_vdec" +BUILTINS="${BUILTINS} es ps ts memcpy yuv idct idctclassic motion imdct downmix mpeg_adec lpcm_adec ac3_adec mpeg_vdec" PLUGINS="${PLUGINS} ac3_spdif spu_dec" -MMX_MODULES="yuvmmx idctmmx motionmmx" -MMXEXT_MODULES="idctmmxext motionmmxext" -THREEDNOW_MODULES="imdct3dn downmix3dn" +MMX_MODULES="memcpymmx yuvmmx idctmmx motionmmx" +MMXEXT_MODULES="memcpymmxext idctmmxext motionmmxext" +THREEDNOW_MODULES="memcpy3dn imdct3dn downmix3dn" 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:3762: 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:3774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mmx_inline=yes else @@ -3791,19 +3788,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:3792: 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:3804: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mmxext_inline=yes else @@ -3821,19 +3818,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:3822: 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:3834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_3dnow_inline=yes else @@ -3848,26 +3845,26 @@ fi echo "$ac_t""$ac_cv_3dnow_inline" 1>&6 if test x"$ac_cv_3dnow_inline" != x"no"; then cat >> confdefs.h <<\EOF -#define HAVE_3DNOW 1 +#define CAN_COMPILE_3DNOW 1 EOF ACCEL_MODULES="${ACCEL_MODULES} ${THREEDNOW_MODULES}" 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:3856: 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:3868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sse_inline=yes else @@ -3882,26 +3879,26 @@ fi echo "$ac_t""$ac_cv_sse_inline" 1>&6 if test x"$ac_cv_sse_inline" != x"no"; then cat >> confdefs.h <<\EOF -#define HAVE_SSE 1 +#define CAN_COMPILE_SSE 1 EOF ACCEL_MODULES="${ACCEL_MODULES} ${SSE_MODULES}" 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:3890: 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:3902: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_altivec_inline=yes else @@ -3911,14 +3908,14 @@ else save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -Wa,-m7400" cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_altivec_inline=yes; CFLAGS_ALTIVEC="-Wa,-m7400" else @@ -3937,14 +3934,14 @@ fi echo "$ac_t""$ac_cv_altivec_inline" 1>&6 if test x"$ac_cv_altivec_inline" != x"no"; then cat >> confdefs.h <<\EOF -#define HAVE_ALTIVEC 1 +#define CAN_COMPILE_ALTIVEC 1 EOF ACCEL_MODULES="${ACCEL_MODULES} ${ALTIVEC_MODULES}" 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:3945: 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 +3949,14 @@ else CFLAGS="$CFLAGS -faltivec" # Darwin test cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_altivec=-faltivec else @@ -3970,14 +3967,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:3978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_altivec="-fvec" else @@ -3997,7 +3994,7 @@ fi echo "$ac_t""$ac_cv_c_altivec" 1>&6 if test x"$ac_cv_c_altivec" != x"no"; then cat >> confdefs.h <<\EOF -#define HAVE_C_ALTIVEC 1 +#define CAN_COMPILE_C_ALTIVEC 1 EOF CFLAGS_ALTIVEC="$CFLAGS_ALTIVEC $ac_cv_c_altivec" @@ -4005,21 +4002,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:4006: 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:4020: \"$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 +4057,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:4061: 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 +4089,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:4093: 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 +4132,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:4136: 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:4146: \"$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 +4175,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:4179: 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:4189: \"$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 +4211,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:4215: 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:4225: \"$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 +4251,7 @@ done LINUX_DVD_STRUCT=0 OPENBSD_DVD_STRUCT=0 cat > conftest.$ac_ext < EOF @@ -4267,7 +4264,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | EOF cat > conftest.$ac_ext < EOF @@ -4287,7 +4284,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -4300,7 +4297,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | EOF cat > conftest.$ac_ext < EOF @@ -4320,7 +4317,7 @@ fi rm -f conftest* cat > conftest.$ac_ext < EOF @@ -4339,7 +4336,7 @@ rm -f conftest* NEED_BSDI_LIBDVD=0 cat > conftest.$ac_ext < EOF @@ -4361,17 +4358,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:4362: 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:4372: \"$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 +4408,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:4412: 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:4422: \"$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 +4437,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:4441: 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:4451: \"$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 +4602,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:4606: 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 +4610,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:4625: \"$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 +4649,7 @@ else fi cat > conftest.$ac_ext < EOF @@ -4773,7 +4770,7 @@ fi if test x$enable_vcd != xno then cat > conftest.$ac_ext < EOF @@ -4861,7 +4858,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:4862: 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 +4909,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:4913: 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 +4966,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:4970: 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:4980: \"$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 +5020,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:5024: 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:5034: \"$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 +5108,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:5112: 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 +5148,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:5152: 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 +5189,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:5193: 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 +5235,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:5239: 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:5249: \"$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 +5315,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:5319: 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:5329: \"$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 +5354,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:5358: checking for directX headers in ${withval}" >&5 if test -f ${withval}/include/directx.h then PLUGINS="${PLUGINS} directx" @@ -5440,7 +5437,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:5441: 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 +5482,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:5486: 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:5496: \"$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 +5552,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:5556: 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 @@ -5600,17 +5597,17 @@ fi do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:5604: checking for $ac_hdr" >&5 +echo "configure:5601: 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:5614: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5611: \"$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* @@ -5662,17 +5659,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:5666: checking for $ac_hdr" >&5 +echo "configure:5663: 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:5676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5673: \"$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* @@ -5725,17 +5722,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:5729: checking for $ac_hdr" >&5 +echo "configure:5726: 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:5739: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5736: \"$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* @@ -5773,19 +5770,19 @@ if test "${enable_alsa+set}" = set; then enableval="$enable_alsa" if test x$enable_alsa = xyes then - ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6 -echo "configure:5779: checking for sys/asoundlib.h" >&5 + ac_safe=`echo "alsa/asoundlib.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for alsa/asoundlib.h""... $ac_c" 1>&6 +echo "configure:5776: 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 < +#include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5789: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5786: \"$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* @@ -5802,7 +5799,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:5806: checking for main in -lasound" >&5 +echo "configure:5803: 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 @@ -5810,14 +5807,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:5818: \"$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 diff --git a/configure.in b/configure.in index 9385cc6a01..94c4c2462d 100644 --- a/configure.in +++ b/configure.in @@ -295,15 +295,15 @@ ARCH=${target_cpu} dnl dnl default modules dnl -BUILTINS="${BUILTINS} es ps ts yuv idct idctclassic motion imdct downmix mpeg_adec lpcm_adec ac3_adec mpeg_vdec" +BUILTINS="${BUILTINS} es ps ts memcpy yuv idct idctclassic motion imdct downmix mpeg_adec lpcm_adec ac3_adec mpeg_vdec" PLUGINS="${PLUGINS} ac3_spdif spu_dec" dnl dnl Accelerated modules dnl -MMX_MODULES="yuvmmx idctmmx motionmmx" -MMXEXT_MODULES="idctmmxext motionmmxext" -THREEDNOW_MODULES="imdct3dn downmix3dn" +MMX_MODULES="memcpymmx yuvmmx idctmmx motionmmx" +MMXEXT_MODULES="memcpymmxext idctmmxext motionmmxext" +THREEDNOW_MODULES="memcpy3dn imdct3dn downmix3dn" SSE_MODULES="imdctsse downmixsse" ALTIVEC_MODULES="idctaltivec motionaltivec" @@ -328,7 +328,7 @@ AC_CACHE_CHECK([if \$CC groks 3D Now! inline assembly], [AC_TRY_COMPILE(,[void *p;asm volatile("pfadd %%mm1,%%mm2"::"r"(p));], ac_cv_3dnow_inline=yes, ac_cv_3dnow_inline=no)]) if test x"$ac_cv_3dnow_inline" != x"no"; then - AC_DEFINE(HAVE_3DNOW, 1, Define if \$CC groks 3D Now! inline assembly.) + AC_DEFINE(CAN_COMPILE_3DNOW, 1, Define if \$CC groks 3D Now! inline assembly.) ACCEL_MODULES="${ACCEL_MODULES} ${THREEDNOW_MODULES}" fi @@ -337,7 +337,7 @@ AC_CACHE_CHECK([if \$CC groks SSE inline assembly], [AC_TRY_COMPILE(,[void *p;asm volatile("xorps %%xmm1,%%xmm2"::"r"(p));], ac_cv_sse_inline=yes, ac_cv_sse_inline=no)]) if test x"$ac_cv_sse_inline" != x"no"; then - AC_DEFINE(HAVE_SSE, 1, Define if \$CC groks SSE inline assembly.) + AC_DEFINE(CAN_COMPILE_SSE, 1, Define if \$CC groks SSE inline assembly.) ACCEL_MODULES="${ACCEL_MODULES} ${SSE_MODULES}" fi @@ -353,7 +353,7 @@ AC_CACHE_CHECK([if \$CC groks Altivec inline assembly], CFLAGS=$save_CFLAGS ])]) if test x"$ac_cv_altivec_inline" != x"no"; then - AC_DEFINE(HAVE_ALTIVEC, 1, Define if \$CC groks ALTIVEC inline assembly.) + AC_DEFINE(CAN_COMPILE_ALTIVEC, 1, Define if \$CC groks ALTIVEC inline assembly.) ACCEL_MODULES="${ACCEL_MODULES} ${ALTIVEC_MODULES}" fi @@ -372,7 +372,7 @@ AC_CACHE_CHECK([if \$CC groks Altivec C extensions], CFLAGS=$save_CFLAGS ]) if test x"$ac_cv_c_altivec" != x"no"; then - AC_DEFINE(HAVE_C_ALTIVEC, 1, Define if your compiler groks C altivec extensions.) + AC_DEFINE(CAN_COMPILE_C_ALTIVEC, 1, Define if your compiler groks C altivec extensions.) CFLAGS_ALTIVEC="$CFLAGS_ALTIVEC $ac_cv_c_altivec" ACCEL_MODULES="${ACCEL_MODULES} ${ALTIVEC_MODULES}" fi @@ -1129,7 +1129,7 @@ AC_ARG_ENABLE(alsa, (default disabled)], [if test x$enable_alsa = xyes then - AC_CHECK_HEADER(sys/asoundlib.h, AC_CHECK_LIB(asound, main, have_alsa="true", have_alsa="false"),have_alsa="false") + AC_CHECK_HEADER(alsa/asoundlib.h, AC_CHECK_LIB(asound, main, have_alsa="true", have_alsa="false"),have_alsa="false") if test x$have_alsa = xtrue then PLUGINS="${PLUGINS} alsa" diff --git a/debian/changelog b/debian/changelog index b8d4e0c2b2..d8343762b7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ vlc (0.2.91-2) unstable; urgency=low + * Added versioned build-dep to libasound2-dev (Closes: #121057). * Added "Video" menu hints (Closes: #121036). -- Samuel Hocevar Sun, 25 Nov 2001 02:25:34 +0100 diff --git a/debian/control b/debian/control index 1372f8009a..e31cf438c7 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: vlc Section: graphics Priority: optional Maintainer: Samuel Hocevar -Build-Depends: debhelper (>=2.2.0), xlibs-dev, libgnome-dev, libggi2-dev, libglide2-dev [i386], libesd0-dev, libsdl1.2-dev, libqt-dev, libasound2-dev [alpha i386 ia64 m68k powerpc] +Build-Depends: debhelper (>=2.2.0), xlibs-dev, libgnome-dev, libggi2-dev, libglide2-dev [i386], libesd0-dev, libsdl1.2-dev, libqt-dev, libasound2-dev [alpha i386 ia64 m68k powerpc] (>=0.9.0beta7) Standards-Version: 3.0.1 Package: vlc diff --git a/debian/libdvdcss1.dirs b/debian/libdvdcss1.dirs index 2ee6b7499d..fe6300ca38 100644 --- a/debian/libdvdcss1.dirs +++ b/debian/libdvdcss1.dirs @@ -1,2 +1,2 @@ usr/lib -usr/share/doc/libdvdcss0 +usr/share/doc/libdvdcss1 diff --git a/debian/rules b/debian/rules index da9721c3b2..6eced2e1f3 100755 --- a/debian/rules +++ b/debian/rules @@ -94,8 +94,7 @@ install: build # libdvdcss start mv debian/vlc/usr/include/videolan/dvdcss.h \ debian/libdvdcss$(major)-dev/usr/include/videolan - rmdir debian/vlc/usr/include/videolan - rmdir debian/vlc/usr/include + rm -Rf debian/vlc/usr/include mv debian/vlc/usr/lib/*.a debian/libdvdcss$(major)-dev/usr/lib mv debian/vlc/usr/lib/*.so debian/libdvdcss$(major)-dev/usr/lib mv debian/vlc/usr/lib/*.so.* debian/libdvdcss$(major)/usr/lib diff --git a/doc/developer/decoders.xml b/doc/developer/decoders.xml index 157bb0aaa0..82fc7482f0 100644 --- a/doc/developer/decoders.xml +++ b/doc/developer/decoders.xml @@ -27,8 +27,8 @@ The input thread spawns the appropriate decoder modules from src/input/input_dec.c. The Dec_CreateThread function selects the more accurate decoder module. Each decoder module looks at decoder_config.i_type and returns a score [ see the modules -section ]. It then launches module.pf_RunThread(), -with an decoder_config_t, described in +section ]. It then launches module.pf_run(), +with a decoder_config_t, described in include/input_ext-dec.h. diff --git a/doc/vlc.1 b/doc/vlc.1 index a7d56f19c7..8e3d54de80 100644 --- a/doc/vlc.1 +++ b/doc/vlc.1 @@ -66,6 +66,9 @@ Set .B vlc verbosity. This command is cumulative, you can use "-vv" or "-vvvv" for increased verbosity. .TP +.B \-\-memcpy +Specify a module for performing heavy memory copies: "memcpy", "sse" for instance. +.TP .B \-\-noaudio Disable audio output. .TP diff --git a/include/common.h b/include/common.h index 5064b4d183..ee18c48819 100644 --- a/include/common.h +++ b/include/common.h @@ -3,7 +3,7 @@ * Collection of useful common types and macros definitions ***************************************************************************** * Copyright (C) 1998, 1999, 2000 VideoLAN - * $Id: common.h,v 1.51 2001/11/28 15:08:04 massiot Exp $ + * $Id: common.h,v 1.52 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * Vincent Seguin @@ -237,6 +237,8 @@ struct decoder_fifo_s; #define I64C(x) x##LL +/* Pointer to the fast memcpy plugin function */ +extern void* ( * pf_fast_memcpy ) ( void *, const void *, size_t ); /* The win32 specific stuff was getting really big so it has been moved */ #if defined( WIN32 ) @@ -282,6 +284,8 @@ typedef struct module_symbols_s void ( * intf_PlaylistJumpto ) ( struct playlist_s *, int ); void ( * intf_UrlDecode ) ( char * ); + void* ( * pf_fast_memcpy ) ( void *, const void *, size_t ); + void ( * msleep ) ( mtime_t ); mtime_t ( * mdate ) ( void ); diff --git a/include/config.h.in b/include/config.h.in index 9ad4c778df..7bd2a9cd3f 100644 --- a/include/config.h.in +++ b/include/config.h.in @@ -90,6 +90,9 @@ * outputting an error message (in second) */ #define THREAD_COND_TIMEOUT 5 +/* Environment variable containing the memcpy method */ +#define MEMCPY_METHOD_VAR "vlc_memcpy" + /* * Decoders FIFO configuration */ @@ -326,16 +329,11 @@ /* Default dimensions for display window - these dimensions are enough for the * standard width and height broadcasted MPEG-2 streams or DVDs */ #define VOUT_WIDTH_VAR "vlc_width" -#define VOUT_HEIGHT_VAR "vlc_height" #define VOUT_WIDTH_DEFAULT 720 +#define VOUT_HEIGHT_VAR "vlc_height" #define VOUT_HEIGHT_DEFAULT 576 - #define VOUT_DEPTH_VAR "vlc_depth" #define VOUT_DEPTH_DEFAULT 15 - -#define VOUT_FULLSCREEN_VAR "vlc_fullscreen" -#define VOUT_FULLSCREEN_DEFAULT 0 - #define VOUT_FULLSCREEN_DEPTH_VAR "vlc_fullscreen_depth" #define VOUT_FULLSCREEN_DEPTH_DEFAULT 32 diff --git a/include/defs.h.in b/include/defs.h.in index 58810afd13..f4ba358059 100644 --- a/include/defs.h.in +++ b/include/defs.h.in @@ -97,9 +97,15 @@ /* Define if you have the header file. */ #undef HAVE_FCNTL_H +/* Define if you have the header file. */ +#undef HAVE_GDK_GDK_H + /* Define if you have the header file. */ #undef HAVE_GETOPT_H +/* Define if you have the header file. */ +#undef HAVE_GLIB_H + /* Define if you have the header file. */ #undef HAVE_GNOME_H @@ -203,16 +209,16 @@ #undef BOOLEAN_T_IN_CTHREADS_H /* Define if $CC groks 3D Now! inline assembly. */ -#undef HAVE_3DNOW +#undef CAN_COMPILE_3DNOW /* Define if $CC groks SSE inline assembly. */ -#undef HAVE_SSE +#undef CAN_COMPILE_SSE /* Define if $CC groks ALTIVEC inline assembly. */ -#undef HAVE_ALTIVEC +#undef CAN_COMPILE_ALTIVEC /* Define if your compiler groks C altivec extensions. */ -#undef HAVE_C_ALTIVEC +#undef CAN_COMPILE_C_ALTIVEC /* Define if defines dvd_struct. */ #undef DVD_STRUCT_IN_SYS_CDIO_H diff --git a/include/input_ext-dec.h b/include/input_ext-dec.h index eea1a0ebc1..a16260c4c3 100644 --- a/include/input_ext-dec.h +++ b/include/input_ext-dec.h @@ -2,7 +2,7 @@ * input_ext-dec.h: structures exported to the VideoLAN decoders ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN - * $Id: input_ext-dec.h,v 1.39 2001/11/15 17:39:12 sam Exp $ + * $Id: input_ext-dec.h,v 1.40 2001/12/03 16:18:37 sam Exp $ * * Authors: Christophe Massiot * Michel Kaempf @@ -479,14 +479,14 @@ static __inline__ void GetChunk( bit_stream_t * p_bit_stream, if( (i_available = p_bit_stream->p_end - p_bit_stream->p_byte) >= i_buf_len ) { - memcpy( p_buffer, p_bit_stream->p_byte, i_buf_len ); + pf_fast_memcpy( p_buffer, p_bit_stream->p_byte, i_buf_len ); p_bit_stream->p_byte += i_buf_len; } else { do { - memcpy( p_buffer, p_bit_stream->p_byte, i_available ); + pf_fast_memcpy( p_buffer, p_bit_stream->p_byte, i_available ); p_bit_stream->p_byte = p_bit_stream->p_end; p_buffer += i_available; i_buf_len -= i_available; @@ -497,7 +497,7 @@ static __inline__ void GetChunk( bit_stream_t * p_bit_stream, if( i_buf_len ) { - memcpy( p_buffer, p_bit_stream->p_byte, i_buf_len ); + pf_fast_memcpy( p_buffer, p_bit_stream->p_byte, i_buf_len ); p_bit_stream->p_byte += i_buf_len; } } diff --git a/include/main.h b/include/main.h index bca8c2c3f4..4451efd1e6 100644 --- a/include/main.h +++ b/include/main.h @@ -3,7 +3,7 @@ * Declaration and extern access to global program object. ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN - * $Id: main.h,v 1.22 2001/10/01 16:18:48 massiot Exp $ + * $Id: main.h,v 1.23 2001/12/03 16:18:37 sam Exp $ * * Authors: Vincent Seguin * @@ -50,6 +50,9 @@ typedef struct main_s boolean_t b_video; /* is video output allowed ? */ boolean_t b_ac3; + /* memcpy plugin used */ + struct module_s * p_memcpy_module; + /* Unique threads */ p_intf_thread_t p_intf; /* main interface thread */ diff --git a/include/modules.h b/include/modules.h index c44e3d3152..c45654e2b3 100644 --- a/include/modules.h +++ b/include/modules.h @@ -2,7 +2,7 @@ * modules.h : Module management functions. ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: modules.h,v 1.32 2001/11/13 18:10:38 sam Exp $ + * $Id: modules.h,v 1.33 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * @@ -67,6 +67,7 @@ typedef void * module_handle_t; #define MODULE_CAPABILITY_YUV 1 << 9 /* YUV colorspace conversion */ #define MODULE_CAPABILITY_IMDCT 1 << 10 /* IMDCT transformation */ #define MODULE_CAPABILITY_DOWNMIX 1 << 11 /* AC3 downmix */ +#define MODULE_CAPABILITY_MEMCPY 1 << 12 /* memcpy */ /* FIXME: kludge */ struct input_area_s; @@ -219,9 +220,15 @@ typedef struct function_list_s /* Decoder plugins */ struct { - int ( * pf_RunThread ) ( struct decoder_config_s * p_config ); + int ( * pf_run ) ( struct decoder_config_s * p_config ); } dec; + /* memcpy plugins */ + struct + { + void* ( * pf_fast_memcpy ) ( void *, const void *, size_t ); + } memcpy; + } functions; } function_list_t; @@ -241,6 +248,7 @@ typedef struct module_functions_s function_list_t yuv; function_list_t imdct; function_list_t downmix; + function_list_t memcpy; } module_functions_t; diff --git a/include/modules_export.h b/include/modules_export.h index 4317a3215f..08cd54e191 100644 --- a/include/modules_export.h +++ b/include/modules_export.h @@ -45,6 +45,7 @@ (p_symbols)->intf_PlaylistDestroy = intf_PlaylistDestroy; \ (p_symbols)->intf_PlaylistJumpto = intf_PlaylistJumpto; \ (p_symbols)->intf_UrlDecode = intf_UrlDecode; \ + (p_symbols)->pf_fast_memcpy = pf_fast_memcpy; \ (p_symbols)->msleep = msleep; \ (p_symbols)->mdate = mdate; \ (p_symbols)->network_ChannelCreate = network_ChannelCreate; \ @@ -149,6 +150,8 @@ # define intf_PlaylistJumpto(a,b) p_symbols->intf_PlaylistJumpto(a,b) # define intf_UrlDecode(a) p_symbols->intf_UrlDecode(a) +# define pf_fast_memcpy p_symbols->pf_fast_memcpy + # define msleep(a) p_symbols->msleep(a) # define mdate() p_symbols->mdate() diff --git a/plugins/ac3_adec/ac3_adec.c b/plugins/ac3_adec/ac3_adec.c index 81dcf87009..0633e76232 100644 --- a/plugins/ac3_adec/ac3_adec.c +++ b/plugins/ac3_adec/ac3_adec.c @@ -2,7 +2,7 @@ * ac3_adec.c: ac3 decoder module main file ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: ac3_adec.c,v 1.4 2001/11/28 15:08:04 massiot Exp $ + * $Id: ac3_adec.c,v 1.5 2001/12/03 16:18:37 sam Exp $ * * Authors: Michel Lespinasse * @@ -75,7 +75,7 @@ static void BitstreamCallback ( bit_stream_t *p_bit_stream, void _M( adec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = ac3_adec_Probe; - p_function_list->functions.dec.pf_RunThread = ac3_adec_Run; + p_function_list->functions.dec.pf_run = ac3_adec_Run; } /***************************************************************************** diff --git a/plugins/ac3_spdif/ac3_spdif.c b/plugins/ac3_spdif/ac3_spdif.c index 466803f419..b6e98bead4 100644 --- a/plugins/ac3_spdif/ac3_spdif.c +++ b/plugins/ac3_spdif/ac3_spdif.c @@ -2,7 +2,7 @@ * ac3_spdif.c: ac3 pass-through to external decoder with enabled soundcard ***************************************************************************** * Copyright (C) 2001 VideoLAN - * $Id: ac3_spdif.c,v 1.4 2001/11/28 15:08:05 massiot Exp $ + * $Id: ac3_spdif.c,v 1.5 2001/12/03 16:18:37 sam Exp $ * * Authors: Stéphane Borel * Juha Yrjola @@ -75,7 +75,7 @@ static void BitstreamCallback( bit_stream_t *, boolean_t ); void _M( adec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = ac3_spdif_Probe; - p_function_list->functions.dec.pf_RunThread = ac3_spdif_Run; + p_function_list->functions.dec.pf_run = ac3_spdif_Run; } /***************************************************************************** diff --git a/plugins/alsa/aout_alsa.c b/plugins/alsa/aout_alsa.c index 25253fea92..9b7eecac0a 100644 --- a/plugins/alsa/aout_alsa.c +++ b/plugins/alsa/aout_alsa.c @@ -2,7 +2,7 @@ * aout_alsa.c : Alsa functions library ***************************************************************************** * Copyright (C) 2000-2001 VideoLAN - * $Id: aout_alsa.c,v 1.20 2001/11/28 15:08:05 massiot Exp $ + * $Id: aout_alsa.c,v 1.21 2001/12/03 16:18:37 sam Exp $ * * Authors: Henri Fallon - Original Author * Jeffrey Baker - Port to ALSA 1.0 API @@ -36,7 +36,7 @@ #include /* "intf_msg.h" */ #include /* calloc(), malloc(), free() */ -#include +#include #include "config.h" #include "common.h" /* boolean_t, byte_t */ diff --git a/plugins/gtk/gtk_open.c b/plugins/gtk/gtk_open.c index bbe7cf2485..9815c28fd3 100644 --- a/plugins/gtk/gtk_open.c +++ b/plugins/gtk/gtk_open.c @@ -2,7 +2,7 @@ * gtk_open.c : functions to handle file/disc/network open widgets. ***************************************************************************** * Copyright (C) 2000, 2001 VideoLAN - * $Id: gtk_open.c,v 1.9 2001/11/28 15:08:05 massiot Exp $ + * $Id: gtk_open.c,v 1.10 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * Stéphane Borel @@ -336,7 +336,7 @@ void GtkNetworkOpenOk( GtkButton *button, gpointer user_data ) if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button), "network_ts" ) )->active ) { - psz_protocol = "ts"; + psz_protocol = "udpstream"; } else if( GTK_TOGGLE_BUTTON( lookup_widget( GTK_WIDGET(button), "network_rtp" ) )->active ) diff --git a/plugins/lpcm_adec/lpcm_adec.c b/plugins/lpcm_adec/lpcm_adec.c index 3d4afa928a..4fb641b091 100644 --- a/plugins/lpcm_adec/lpcm_adec.c +++ b/plugins/lpcm_adec/lpcm_adec.c @@ -2,7 +2,7 @@ * lpcm_decoder_thread.c: lpcm decoder thread ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: lpcm_adec.c,v 1.2 2001/11/28 15:08:05 massiot Exp $ + * $Id: lpcm_adec.c,v 1.3 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * Henri Fallon @@ -71,7 +71,7 @@ static void lpcm_adec_EndThread ( lpcmdec_thread_t * ); void _M( adec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = lpcm_adec_Probe; - p_function_list->functions.dec.pf_RunThread = lpcm_adec_Run; + p_function_list->functions.dec.pf_run = lpcm_adec_Run; } /***************************************************************************** diff --git a/plugins/memcpy/.cvsignore b/plugins/memcpy/.cvsignore new file mode 100644 index 0000000000..63e7180a26 --- /dev/null +++ b/plugins/memcpy/.cvsignore @@ -0,0 +1 @@ +.dep diff --git a/plugins/memcpy/Makefile b/plugins/memcpy/Makefile new file mode 100644 index 0000000000..c100890268 --- /dev/null +++ b/plugins/memcpy/Makefile @@ -0,0 +1,61 @@ +############################################################################### +# vlc (VideoLAN Client) memcpy module makefile +# (c)2001 VideoLAN +############################################################################### + +# +# Objects +# + +PLUGIN_MEMCPY = memcpy.o +PLUGIN_MEMCPYMMX = memcpymmx.o +PLUGIN_MEMCPYMMXEXT = memcpymmxext.o +PLUGIN_MEMCPY3DN = memcpy3dn.o + +BUILTIN_MEMCPY = $(PLUGIN_MEMCPY:%.o=BUILTIN_%.o) +BUILTIN_MEMCPYMMX = $(PLUGIN_MEMCPYMMX:%.o=BUILTIN_%.o) +BUILTIN_MEMCPYMMXEXT = $(PLUGIN_MEMCPYMMXEXT:%.o=BUILTIN_%.o) +BUILTIN_MEMCPY3DN = $(PLUGIN_MEMCPY3DN:%.o=BUILTIN_%.o) + +PLUGIN_C = $(PLUGIN_MEMCPY) $(PLUGIN_MEMCPYMMX) $(PLUGIN_MEMCPYMMXEXT) $(PLUGIN_MEMCPY3DN) +BUILTIN_C = $(BUILTIN_MEMCPY) $(BUILTIN_MEMCPYMMX) $(BUILTIN_MEMCPYMMXEXT) $(BUILTIN_MEMCPY3DN) +ALL_OBJ = $(PLUGIN_C) $(BUILTIN_C) + +# +# Virtual targets +# + +include ../../Makefile.modules + +# +# Real targets +# + +../memcpy.so: $(PLUGIN_MEMCPY) + $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) + +../memcpy.a: $(BUILTIN_MEMCPY) + ar r $@ $^ + $(RANLIB) $@ + +../memcpymmx.so: $(PLUGIN_MEMCPYMMX) + $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) + +../memcpymmx.a: $(BUILTIN_MEMCPYMMX) + ar r $@ $^ + $(RANLIB) $@ + +../memcpymmxext.so: $(PLUGIN_MEMCPYMMXEXT) + $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) + +../memcpymmxext.a: $(BUILTIN_MEMCPYMMXEXT) + ar r $@ $^ + $(RANLIB) $@ + +../memcpy3dn.so: $(PLUGIN_MEMCPY3DN) + $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) + +../memcpy3dn.a: $(BUILTIN_MEMCPY3DN) + ar r $@ $^ + $(RANLIB) $@ + diff --git a/plugins/memcpy/fastmemcpy.h b/plugins/memcpy/fastmemcpy.h new file mode 100644 index 0000000000..2243720cc5 --- /dev/null +++ b/plugins/memcpy/fastmemcpy.h @@ -0,0 +1,384 @@ +/***************************************************************************** + * fastmemcpy.h : fast memcpy routines + ***************************************************************************** + * $Id: fastmemcpy.h,v 1.1 2001/12/03 16:18:37 sam Exp $ + * + * Authors: various Linux kernel hackers + * various MPlayer hackers + * Nick Kurshev + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +/* + aclib - advanced C library ;) + This file contains functions which improve and expand standard C-library +*/ + +#define BLOCK_SIZE 4096 +#define CONFUSION_FACTOR 0 +//Feel free to fine-tune the above 2, it might be possible to get some speedup with them :) + +//#define STATISTICS + +#ifndef HAVE_SSE2 +/* + P3 processor has only one SSE decoder so can execute only 1 sse insn per + cpu clock, but it has 3 mmx decoders (include load/store unit) + and executes 3 mmx insns per cpu clock. + P4 processor has some chances, but after reading: + http://www.emulators.com/pentium4.htm + I have doubts. Anyway SSE2 version of this code can be written better. +*/ +#undef HAVE_SSE +#endif + + +/* + This part of code was taken by me from Linux-2.4.3 and slightly modified +for MMX, MMX2, SSE instruction set. I have done it since linux uses page aligned +blocks but mplayer uses weakly ordered data and original sources can not +speedup them. Only using PREFETCHNTA and MOVNTQ together have effect! + +>From IA-32 Intel Architecture Software Developer's Manual Volume 1, + +Order Number 245470: +"10.4.6. Cacheability Control, Prefetch, and Memory Ordering Instructions" + +Data referenced by a program can be temporal (data will be used again) or +non-temporal (data will be referenced once and not reused in the immediate +future). To make efficient use of the processor's caches, it is generally +desirable to cache temporal data and not cache non-temporal data. Overloading +the processor's caches with non-temporal data is sometimes referred to as +"polluting the caches". +The non-temporal data is written to memory with Write-Combining semantics. + +The PREFETCHh instructions permits a program to load data into the processor +at a suggested cache level, so that it is closer to the processors load and +store unit when it is needed. If the data is already present in a level of +the cache hierarchy that is closer to the processor, the PREFETCHh instruction +will not result in any data movement. +But we should you PREFETCHNTA: Non-temporal data fetch data into location +close to the processor, minimizing cache pollution. + +The MOVNTQ (store quadword using non-temporal hint) instruction stores +packed integer data from an MMX register to memory, using a non-temporal hint. +The MOVNTPS (store packed single-precision floating-point values using +non-temporal hint) instruction stores packed floating-point data from an +XMM register to memory, using a non-temporal hint. + +The SFENCE (Store Fence) instruction controls write ordering by creating a +fence for memory store operations. This instruction guarantees that the results +of every store instruction that precedes the store fence in program order is +globally visible before any store instruction that follows the fence. The +SFENCE instruction provides an efficient way of ensuring ordering between +procedures that produce weakly-ordered data and procedures that consume that +data. + +If you have questions please contact with me: Nick Kurshev: nickols_k@mail.ru. +*/ + +// 3dnow memcpy support from kernel 2.4.2 +// by Pontscho/fresh!mindworkz + +#if defined( HAVE_MMX2 ) || defined( HAVE_3DNOW ) || defined( HAVE_MMX ) + +#undef HAVE_MMX1 +#if defined(HAVE_MMX) && !defined(HAVE_MMX2) && !defined(HAVE_3DNOW) && !defined(HAVE_SSE) +/* means: mmx v.1. Note: Since we added alignment of destinition it speedups + of memory copying on PentMMX, Celeron-1 and P2 upto 12% versus + standard (non MMX-optimized) version. + Note: on K6-2+ it speedups memory copying upto 25% and + on K7 and P3 about 500% (5 times). */ +#define HAVE_MMX1 +#endif + + +#undef HAVE_K6_2PLUS +#if !defined( HAVE_MMX2) && defined( HAVE_3DNOW) +#define HAVE_K6_2PLUS +#endif + +/* for small memory blocks (<256 bytes) this version is faster */ +#define small_memcpy(to,from,n)\ +{\ +register unsigned long int dummy;\ +__asm__ __volatile__(\ + "rep; movsb"\ + :"=&D"(to), "=&S"(from), "=&c"(dummy)\ +/* It's most portable way to notify compiler */\ +/* that edi, esi and ecx are clobbered in asm block. */\ +/* Thanks to A'rpi for hint!!! */\ + :"0" (to), "1" (from),"2" (n)\ + : "memory");\ +} + +#ifdef HAVE_SSE +#define MMREG_SIZE 16 +#else +#define MMREG_SIZE 64 //8 +#endif + +/* Small defines (for readability only) ;) */ +#ifdef HAVE_K6_2PLUS +#define PREFETCH "prefetch" +/* On K6 femms is faster of emms. On K7 femms is directly mapped on emms. */ +#define EMMS "femms" +#else +#define PREFETCH "prefetchnta" +#define EMMS "emms" +#endif + +#ifdef HAVE_MMX2 +#define MOVNTQ "movntq" +#else +#define MOVNTQ "movq" +#endif + +#ifdef HAVE_MMX1 +#define MIN_LEN 0x800 /* 2K blocks */ +#else +#define MIN_LEN 0x40 /* 64-byte blocks */ +#endif + +void * _M( fast_memcpy )(void * to, const void * from, size_t len) +{ + void *retval; + size_t i; + retval = to; +#ifdef STATISTICS + { + static int freq[33]; + static int t=0; + int i; + for(i=0; len>(1<= MIN_LEN) + { + register unsigned long int delta; + /* Align destinition to MMREG_SIZE -boundary */ + delta = ((unsigned long int)to)&(MMREG_SIZE-1); + if(delta) + { + delta=MMREG_SIZE-delta; + len -= delta; + small_memcpy(to, from, delta); + } + i = len >> 6; /* len/64 */ + len&=63; + /* + This algorithm is top effective when the code consequently + reads and writes blocks which have size of cache line. + Size of cache line is processor-dependent. + It will, however, be a minimum of 32 bytes on any processors. + It would be better to have a number of instructions which + perform reading and writing to be multiple to a number of + processor's decoders, but it's not always possible. + */ +#ifdef HAVE_SSE /* Only P3 (may be Cyrix3) */ + if(((unsigned long)from) & 15) + /* if SRC is misaligned */ + for(; i>0; i--) + { + __asm__ __volatile__ ( + PREFETCH" 320(%0)\n" + "movups (%0), %%xmm0\n" + "movups 16(%0), %%xmm1\n" + "movups 32(%0), %%xmm2\n" + "movups 48(%0), %%xmm3\n" + "movntps %%xmm0, (%1)\n" + "movntps %%xmm1, 16(%1)\n" + "movntps %%xmm2, 32(%1)\n" + "movntps %%xmm3, 48(%1)\n" + :: "r" (from), "r" (to) : "memory"); + ((const unsigned char *)from)+=64; + ((unsigned char *)to)+=64; + } + else + /* + Only if SRC is aligned on 16-byte boundary. + It allows to use movaps instead of movups, which required data + to be aligned or a general-protection exception (#GP) is generated. + */ + for(; i>0; i--) + { + __asm__ __volatile__ ( + PREFETCH" 320(%0)\n" + "movaps (%0), %%xmm0\n" + "movaps 16(%0), %%xmm1\n" + "movaps 32(%0), %%xmm2\n" + "movaps 48(%0), %%xmm3\n" + "movntps %%xmm0, (%1)\n" + "movntps %%xmm1, 16(%1)\n" + "movntps %%xmm2, 32(%1)\n" + "movntps %%xmm3, 48(%1)\n" + :: "r" (from), "r" (to) : "memory"); + ((const unsigned char *)from)+=64; + ((unsigned char *)to)+=64; + } +#else + // Align destination at BLOCK_SIZE boundary + for(; ((int)to & (BLOCK_SIZE-1)) && i>0; i--) + { + __asm__ __volatile__ ( +#ifndef HAVE_MMX1 + PREFETCH" 320(%0)\n" +#endif + "movq (%0), %%mm0\n" + "movq 8(%0), %%mm1\n" + "movq 16(%0), %%mm2\n" + "movq 24(%0), %%mm3\n" + "movq 32(%0), %%mm4\n" + "movq 40(%0), %%mm5\n" + "movq 48(%0), %%mm6\n" + "movq 56(%0), %%mm7\n" + MOVNTQ" %%mm0, (%1)\n" + MOVNTQ" %%mm1, 8(%1)\n" + MOVNTQ" %%mm2, 16(%1)\n" + MOVNTQ" %%mm3, 24(%1)\n" + MOVNTQ" %%mm4, 32(%1)\n" + MOVNTQ" %%mm5, 40(%1)\n" + MOVNTQ" %%mm6, 48(%1)\n" + MOVNTQ" %%mm7, 56(%1)\n" + :: "r" (from), "r" (to) : "memory"); + ((const unsigned char *)from)+=64; + ((unsigned char *)to)+=64; + } + +// printf(" %d %d\n", (int)from&1023, (int)to&1023); + // Pure Assembly cuz gcc is a bit unpredictable ;) + if(i>=BLOCK_SIZE/64) + asm volatile( + "xorl %%eax, %%eax \n\t" + ".balign 16 \n\t" + "1: \n\t" + "movl (%0, %%eax), %%ebx \n\t" + "movl 32(%0, %%eax), %%ebx \n\t" + "movl 64(%0, %%eax), %%ebx \n\t" + "movl 96(%0, %%eax), %%ebx \n\t" + "addl $128, %%eax \n\t" + "cmpl %3, %%eax \n\t" + " jb 1b \n\t" + + "xorl %%eax, %%eax \n\t" + + ".balign 16 \n\t" + "2: \n\t" + "movq (%0, %%eax), %%mm0\n" + "movq 8(%0, %%eax), %%mm1\n" + "movq 16(%0, %%eax), %%mm2\n" + "movq 24(%0, %%eax), %%mm3\n" + "movq 32(%0, %%eax), %%mm4\n" + "movq 40(%0, %%eax), %%mm5\n" + "movq 48(%0, %%eax), %%mm6\n" + "movq 56(%0, %%eax), %%mm7\n" + MOVNTQ" %%mm0, (%1, %%eax)\n" + MOVNTQ" %%mm1, 8(%1, %%eax)\n" + MOVNTQ" %%mm2, 16(%1, %%eax)\n" + MOVNTQ" %%mm3, 24(%1, %%eax)\n" + MOVNTQ" %%mm4, 32(%1, %%eax)\n" + MOVNTQ" %%mm5, 40(%1, %%eax)\n" + MOVNTQ" %%mm6, 48(%1, %%eax)\n" + MOVNTQ" %%mm7, 56(%1, %%eax)\n" + "addl $64, %%eax \n\t" + "cmpl %3, %%eax \n\t" + "jb 2b \n\t" + +#if CONFUSION_FACTOR > 0 + // a few percent speedup on out of order executing CPUs + "movl %5, %%eax \n\t" + "2: \n\t" + "movl (%0), %%ebx \n\t" + "movl (%0), %%ebx \n\t" + "movl (%0), %%ebx \n\t" + "movl (%0), %%ebx \n\t" + "decl %%eax \n\t" + " jnz 2b \n\t" +#endif + + "xorl %%eax, %%eax \n\t" + "addl %3, %0 \n\t" + "addl %3, %1 \n\t" + "subl %4, %2 \n\t" + "cmpl %4, %2 \n\t" + " jae 1b \n\t" + : "+r" (from), "+r" (to), "+r" (i) + : "r" (BLOCK_SIZE), "i" (BLOCK_SIZE/64), "i" (CONFUSION_FACTOR) + : "%eax", "%ebx" + ); + + for(; i>0; i--) + { + __asm__ __volatile__ ( +#ifndef HAVE_MMX1 + PREFETCH" 320(%0)\n" +#endif + "movq (%0), %%mm0\n" + "movq 8(%0), %%mm1\n" + "movq 16(%0), %%mm2\n" + "movq 24(%0), %%mm3\n" + "movq 32(%0), %%mm4\n" + "movq 40(%0), %%mm5\n" + "movq 48(%0), %%mm6\n" + "movq 56(%0), %%mm7\n" + MOVNTQ" %%mm0, (%1)\n" + MOVNTQ" %%mm1, 8(%1)\n" + MOVNTQ" %%mm2, 16(%1)\n" + MOVNTQ" %%mm3, 24(%1)\n" + MOVNTQ" %%mm4, 32(%1)\n" + MOVNTQ" %%mm5, 40(%1)\n" + MOVNTQ" %%mm6, 48(%1)\n" + MOVNTQ" %%mm7, 56(%1)\n" + :: "r" (from), "r" (to) : "memory"); + ((const unsigned char *)from)+=64; + ((unsigned char *)to)+=64; + } + +#endif /* Have SSE */ +#ifdef HAVE_MMX2 + /* since movntq is weakly-ordered, a "sfence" + * is needed to become ordered again. */ + __asm__ __volatile__ ("sfence":::"memory"); +#endif +#ifndef HAVE_SSE + /* enables to use FPU */ + __asm__ __volatile__ (EMMS:::"memory"); +#endif + } + /* + * Now do the tail of the block + */ + if(len) small_memcpy(to, from, len); + return retval; +} + + +#endif /* #if defined( HAVE_MMX2 ) || defined( HAVE_3DNOW ) || defined( HAVE_MMX ) */ diff --git a/plugins/memcpy/memcpy.c b/plugins/memcpy/memcpy.c new file mode 100644 index 0000000000..3fe9d92b00 --- /dev/null +++ b/plugins/memcpy/memcpy.c @@ -0,0 +1,100 @@ +/***************************************************************************** + * memcpy.c : classic memcpy module + ***************************************************************************** + * Copyright (C) 2001 VideoLAN + * $Id: memcpy.c,v 1.1 2001/12/03 16:18:37 sam Exp $ + * + * Authors: Samuel Hocevar + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#define MODULE_NAME memcpy +#include "modules_inner.h" + +/***************************************************************************** + * Preamble + *****************************************************************************/ +#include "defs.h" + +#include +#include + +#include "config.h" +#include "common.h" +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" +#include "tests.h" + +#include "modules.h" +#include "modules_export.h" + +/***************************************************************************** + * Local and extern prototypes. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ); +static int memcpy_Probe ( probedata_t *p_data ); + +/***************************************************************************** + * Build configuration tree. + *****************************************************************************/ +MODULE_CONFIG_START +ADD_WINDOW( "Configuration for C memcpy module" ) + ADD_COMMENT( "Ha, ha -- nothing to configure yet" ) +MODULE_CONFIG_STOP + +MODULE_INIT_START + p_module->i_capabilities = MODULE_CAPABILITY_NULL + | MODULE_CAPABILITY_MEMCPY; + p_module->psz_longname = "libc memcpy module"; +MODULE_INIT_STOP + +MODULE_ACTIVATE_START + memcpy_getfunctions( &p_module->p_functions->memcpy ); +MODULE_ACTIVATE_STOP + +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP + +/* Following functions are local */ + +/***************************************************************************** + * Functions exported as capabilities. They are declared as static so that + * we don't pollute the namespace too much. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ) +{ + p_function_list->pf_probe = memcpy_Probe; +#define F p_function_list->functions.memcpy + F.pf_fast_memcpy = memcpy; +#undef F +} + +/***************************************************************************** + * memcpy_Probe: returns a preference score + *****************************************************************************/ +static int memcpy_Probe( probedata_t *p_data ) +{ + if( TestMethod( MEMCPY_METHOD_VAR, "memcpy" ) + || TestMethod( MEMCPY_METHOD_VAR, "c" ) ) + { + return( 999 ); + } + + /* This plugin always works */ + return( 50 ); +} + diff --git a/plugins/memcpy/memcpy3dn.c b/plugins/memcpy/memcpy3dn.c new file mode 100644 index 0000000000..d691a9ec09 --- /dev/null +++ b/plugins/memcpy/memcpy3dn.c @@ -0,0 +1,114 @@ +/***************************************************************************** + * memcpy3dn.c : 3D Now! memcpy module + ***************************************************************************** + * Copyright (C) 2001 VideoLAN + * $Id: memcpy3dn.c,v 1.1 2001/12/03 16:18:37 sam Exp $ + * + * Authors: Samuel Hocevar + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#define MODULE_NAME memcpy3dn +#include "modules_inner.h" + +/***************************************************************************** + * Preamble + *****************************************************************************/ +#include "defs.h" + +#include +#include + +#include "config.h" +#include "common.h" +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" +#include "tests.h" + +#include "modules.h" +#include "modules_export.h" + +/***************************************************************************** + * Local and extern prototypes. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ); +static int memcpy_Probe ( probedata_t *p_data ); +void * _M( fast_memcpy ) ( void * to, const void * from, size_t len ); + +#undef HAVE_MMX +#undef HAVE_MMX2 +#undef HAVE_SSE +#undef HAVE_SSE2 +#define HAVE_3DNOW +#include "fastmemcpy.h" + +/***************************************************************************** + * Build configuration tree. + *****************************************************************************/ +MODULE_CONFIG_START +ADD_WINDOW( "Configuration for 3D Now! memcpy module" ) + ADD_COMMENT( "Ha, ha -- nothing to configure yet" ) +MODULE_CONFIG_STOP + +MODULE_INIT_START + p_module->i_capabilities = MODULE_CAPABILITY_NULL + | MODULE_CAPABILITY_MEMCPY; + p_module->psz_longname = "3D Now! memcpy module"; +MODULE_INIT_STOP + +MODULE_ACTIVATE_START + memcpy_getfunctions( &p_module->p_functions->memcpy ); +MODULE_ACTIVATE_STOP + +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP + +/* Following functions are local */ + +/***************************************************************************** + * Functions exported as capabilities. They are declared as static so that + * we don't pollute the namespace too much. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ) +{ + p_function_list->pf_probe = memcpy_Probe; +#define F p_function_list->functions.memcpy + F.pf_fast_memcpy = _M( fast_memcpy ); +#undef F +} + +/***************************************************************************** + * memcpy_Probe: returns a preference score + *****************************************************************************/ +static int memcpy_Probe( probedata_t *p_data ) +{ + /* Test for 3D Now! support in the CPU */ + if( !TestCPU( CPU_CAPABILITY_3DNOW ) ) + { + return( 0 ); + } + + if( TestMethod( MEMCPY_METHOD_VAR, "memcpy3dn" ) + || TestMethod( MEMCPY_METHOD_VAR, "3dn" ) ) + { + return( 999 ); + } + + /* This plugin always works */ + return( 100 ); +} + diff --git a/plugins/memcpy/memcpymmx.c b/plugins/memcpy/memcpymmx.c new file mode 100644 index 0000000000..67fbba95d7 --- /dev/null +++ b/plugins/memcpy/memcpymmx.c @@ -0,0 +1,114 @@ +/***************************************************************************** + * memcpymmx.c : MMX memcpy module + ***************************************************************************** + * Copyright (C) 2001 VideoLAN + * $Id: memcpymmx.c,v 1.1 2001/12/03 16:18:37 sam Exp $ + * + * Authors: Samuel Hocevar + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#define MODULE_NAME memcpymmx +#include "modules_inner.h" + +/***************************************************************************** + * Preamble + *****************************************************************************/ +#include "defs.h" + +#include +#include + +#include "config.h" +#include "common.h" +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" +#include "tests.h" + +#include "modules.h" +#include "modules_export.h" + +/***************************************************************************** + * Local and extern prototypes. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ); +static int memcpy_Probe ( probedata_t *p_data ); +void * _M( fast_memcpy ) ( void * to, const void * from, size_t len ); + +#define HAVE_MMX +#undef HAVE_MMX2 +#undef HAVE_SSE +#undef HAVE_SSE2 +#undef HAVE_3DNOW +#include "fastmemcpy.h" + +/***************************************************************************** + * Build configuration tree. + *****************************************************************************/ +MODULE_CONFIG_START +ADD_WINDOW( "Configuration for MMX memcpy module" ) + ADD_COMMENT( "Ha, ha -- nothing to configure yet" ) +MODULE_CONFIG_STOP + +MODULE_INIT_START + p_module->i_capabilities = MODULE_CAPABILITY_NULL + | MODULE_CAPABILITY_MEMCPY; + p_module->psz_longname = "MMX memcpy module"; +MODULE_INIT_STOP + +MODULE_ACTIVATE_START + memcpy_getfunctions( &p_module->p_functions->memcpy ); +MODULE_ACTIVATE_STOP + +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP + +/* Following functions are local */ + +/***************************************************************************** + * Functions exported as capabilities. They are declared as static so that + * we don't pollute the namespace too much. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ) +{ + p_function_list->pf_probe = memcpy_Probe; +#define F p_function_list->functions.memcpy + F.pf_fast_memcpy = _M( fast_memcpy ); +#undef F +} + +/***************************************************************************** + * memcpy_Probe: returns a preference score + *****************************************************************************/ +static int memcpy_Probe( probedata_t *p_data ) +{ + /* Test for MMX support in the CPU */ + if( !TestCPU( CPU_CAPABILITY_MMX ) ) + { + return( 0 ); + } + + if( TestMethod( MEMCPY_METHOD_VAR, "memcpymmx" ) + || TestMethod( MEMCPY_METHOD_VAR, "mmx" ) ) + { + return( 999 ); + } + + /* This plugin always works */ + return( 100 ); +} + diff --git a/plugins/memcpy/memcpymmxext.c b/plugins/memcpy/memcpymmxext.c new file mode 100644 index 0000000000..6eb1ed5ac0 --- /dev/null +++ b/plugins/memcpy/memcpymmxext.c @@ -0,0 +1,114 @@ +/***************************************************************************** + * memcpymmxext.c : MMX EXT memcpy module + ***************************************************************************** + * Copyright (C) 2001 VideoLAN + * $Id: memcpymmxext.c,v 1.1 2001/12/03 16:18:37 sam Exp $ + * + * Authors: Samuel Hocevar + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +#define MODULE_NAME memcpymmxext +#include "modules_inner.h" + +/***************************************************************************** + * Preamble + *****************************************************************************/ +#include "defs.h" + +#include +#include + +#include "config.h" +#include "common.h" +#include "intf_msg.h" +#include "threads.h" +#include "mtime.h" +#include "tests.h" + +#include "modules.h" +#include "modules_export.h" + +/***************************************************************************** + * Local and extern prototypes. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ); +static int memcpy_Probe ( probedata_t *p_data ); +void * _M( fast_memcpy ) ( void * to, const void * from, size_t len ); + +#undef HAVE_MMX +#define HAVE_MMX2 +#undef HAVE_SSE +#undef HAVE_SSE2 +#undef HAVE_3DNOW +#include "fastmemcpy.h" + +/***************************************************************************** + * Build configuration tree. + *****************************************************************************/ +MODULE_CONFIG_START +ADD_WINDOW( "Configuration for MMX EXT memcpy module" ) + ADD_COMMENT( "Ha, ha -- nothing to configure yet" ) +MODULE_CONFIG_STOP + +MODULE_INIT_START + p_module->i_capabilities = MODULE_CAPABILITY_NULL + | MODULE_CAPABILITY_MEMCPY; + p_module->psz_longname = "MMX EXT memcpy module"; +MODULE_INIT_STOP + +MODULE_ACTIVATE_START + memcpy_getfunctions( &p_module->p_functions->memcpy ); +MODULE_ACTIVATE_STOP + +MODULE_DEACTIVATE_START +MODULE_DEACTIVATE_STOP + +/* Following functions are local */ + +/***************************************************************************** + * Functions exported as capabilities. They are declared as static so that + * we don't pollute the namespace too much. + *****************************************************************************/ +static void memcpy_getfunctions( function_list_t * p_function_list ) +{ + p_function_list->pf_probe = memcpy_Probe; +#define F p_function_list->functions.memcpy + F.pf_fast_memcpy = _M( fast_memcpy ); +#undef F +} + +/***************************************************************************** + * memcpy_Probe: returns a preference score + *****************************************************************************/ +static int memcpy_Probe( probedata_t *p_data ) +{ + /* Test for MMX EXT support in the CPU */ + if( !TestCPU( CPU_CAPABILITY_MMXEXT ) ) + { + return( 0 ); + } + + if( TestMethod( MEMCPY_METHOD_VAR, "memcpymmxext" ) + || TestMethod( MEMCPY_METHOD_VAR, "mmxext" ) ) + { + return( 999 ); + } + + /* This plugin always works */ + return( 200 ); +} + diff --git a/plugins/mpeg/input_ts.h b/plugins/mpeg/input_ts.h index 0bd8def0be..d58a4eade1 100644 --- a/plugins/mpeg/input_ts.h +++ b/plugins/mpeg/input_ts.h @@ -2,7 +2,7 @@ * input_ts.h: structures of the input not exported to other modules ***************************************************************************** * Copyright (C) 1999, 2000 VideoLAN - * $Id: input_ts.h,v 1.10 2001/07/12 23:06:54 gbazin Exp $ + * $Id: input_ts.h,v 1.11 2001/12/03 16:18:37 sam Exp $ * * Authors: Henri Fallon * Boris Dorès @@ -71,7 +71,7 @@ static __inline__ int read_network( int i_fd, char * p_base, i_bytes = p_sys->i_length - p_sys->i_offset; } - memcpy( p_base, p_sys->p_buffer + p_sys->i_offset, i_bytes ); + pf_fast_memcpy( p_base, p_sys->p_buffer + p_sys->i_offset, i_bytes ); p_sys->i_offset += i_bytes; return i_bytes; diff --git a/plugins/mpeg_adec/mpeg_adec.c b/plugins/mpeg_adec/mpeg_adec.c index f530cecdc3..3f19e15bb4 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.3 2001/11/28 15:08:05 massiot Exp $ + * $Id: mpeg_adec.c,v 1.4 2001/12/03 16:18:37 sam Exp $ * * Authors: Michel Kaempf * Michel Lespinasse @@ -69,7 +69,7 @@ static void adec_Decode( adec_thread_t * ); void _M( adec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = adec_Probe; - p_function_list->functions.dec.pf_RunThread = adec_RunThread; + p_function_list->functions.dec.pf_run = adec_RunThread; } /***************************************************************************** diff --git a/plugins/mpeg_vdec/video_parser.c b/plugins/mpeg_vdec/video_parser.c index 1c3d22839a..33277f8285 100644 --- a/plugins/mpeg_vdec/video_parser.c +++ b/plugins/mpeg_vdec/video_parser.c @@ -2,7 +2,7 @@ * video_parser.c : video parser thread ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: video_parser.c,v 1.4 2001/11/28 15:08:05 massiot Exp $ + * $Id: video_parser.c,v 1.5 2001/12/03 16:18:37 sam Exp $ * * Authors: Christophe Massiot * Samuel Hocevar @@ -80,7 +80,7 @@ static void BitstreamCallback ( bit_stream_t *, boolean_t ); void _M( vdec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = mpeg_vdec_Probe; - p_function_list->functions.dec.pf_RunThread = mpeg_vdec_Run; + p_function_list->functions.dec.pf_run = mpeg_vdec_Run; } /***************************************************************************** diff --git a/plugins/sdl/vout_sdl.c b/plugins/sdl/vout_sdl.c index b1e80cd60d..a509d23786 100644 --- a/plugins/sdl/vout_sdl.c +++ b/plugins/sdl/vout_sdl.c @@ -2,7 +2,7 @@ * vout_sdl.c: SDL video output display method ***************************************************************************** * Copyright (C) 1998-2001 VideoLAN - * $Id: vout_sdl.c,v 1.65 2001/11/28 15:08:05 massiot Exp $ + * $Id: vout_sdl.c,v 1.66 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * Pierre Baillet @@ -594,20 +594,20 @@ static void vout_Display( vout_thread_t *p_vout ) SDL_LockYUVOverlay( p_vout->p_sys->p_overlay ); /* copy the data into video buffers */ /* Y first */ - memcpy( p_vout->p_sys->p_overlay->pixels[0], - p_vout->p_rendered_pic->p_y, - p_vout->p_sys->p_overlay->h * - p_vout->p_sys->p_overlay->pitches[0] ); + pf_fast_memcpy( p_vout->p_sys->p_overlay->pixels[0], + p_vout->p_rendered_pic->p_y, + p_vout->p_sys->p_overlay->h * + p_vout->p_sys->p_overlay->pitches[0] ); /* then V */ - memcpy( p_vout->p_sys->p_overlay->pixels[1], - p_vout->p_rendered_pic->p_v, - p_vout->p_sys->p_overlay->h * - p_vout->p_sys->p_overlay->pitches[1] / 2 ); + pf_fast_memcpy( p_vout->p_sys->p_overlay->pixels[1], + p_vout->p_rendered_pic->p_v, + p_vout->p_sys->p_overlay->h * + p_vout->p_sys->p_overlay->pitches[1] / 2 ); /* and U */ - memcpy( p_vout->p_sys->p_overlay->pixels[2], - p_vout->p_rendered_pic->p_u, - p_vout->p_sys->p_overlay->h * - p_vout->p_sys->p_overlay->pitches[2] / 2 ); + pf_fast_memcpy( p_vout->p_sys->p_overlay->pixels[2], + p_vout->p_rendered_pic->p_u, + p_vout->p_sys->p_overlay->h * + p_vout->p_sys->p_overlay->pitches[2] / 2 ); OutputCoords( p_vout->p_rendered_pic, 1, p_vout->p_sys->i_width, diff --git a/plugins/spu_dec/spu_decoder.c b/plugins/spu_dec/spu_decoder.c index 395017447c..8fbafb6282 100644 --- a/plugins/spu_dec/spu_decoder.c +++ b/plugins/spu_dec/spu_decoder.c @@ -2,7 +2,7 @@ * spu_decoder.c : spu decoder thread ***************************************************************************** * Copyright (C) 2000-2001 VideoLAN - * $Id: spu_decoder.c,v 1.4 2001/11/28 15:08:06 massiot Exp $ + * $Id: spu_decoder.c,v 1.5 2001/12/03 16:18:37 sam Exp $ * * Authors: Samuel Hocevar * @@ -76,7 +76,7 @@ static int ParseRLE ( spudec_thread_t *, subpicture_t *, u8 * ); void _M( spu_dec_getfunctions )( function_list_t * p_function_list ) { p_function_list->pf_probe = spu_dec_Probe; - p_function_list->functions.dec.pf_RunThread = spu_dec_Run; + p_function_list->functions.dec.pf_run = spu_dec_Run; } /***************************************************************************** diff --git a/plugins/vcd/input_vcd.c b/plugins/vcd/input_vcd.c index ad5d1813e1..404674ec01 100644 --- a/plugins/vcd/input_vcd.c +++ b/plugins/vcd/input_vcd.c @@ -585,8 +585,8 @@ static int VCDRead( input_thread_t * p_input, if( U32_AT(p_buffer) != 0x1B9 ) { - memcpy( p_data->p_buffer, p_buffer + i_index, - 6 + i_packet_size ); + pf_fast_memcpy( p_data->p_buffer, p_buffer + i_index, + 6 + i_packet_size ); i_index += ( 6 + i_packet_size ); } diff --git a/plugins/x11/vout_xvideo.c b/plugins/x11/vout_xvideo.c index a3be45230f..dc90fd3f4d 100644 --- a/plugins/x11/vout_xvideo.c +++ b/plugins/x11/vout_xvideo.c @@ -2,7 +2,7 @@ * vout_xvideo.c: Xvideo video output display method ***************************************************************************** * Copyright (C) 1998-2001 VideoLAN - * $Id: vout_xvideo.c,v 1.33 2001/12/03 13:58:59 massiot Exp $ + * $Id: vout_xvideo.c,v 1.34 2001/12/03 16:18:37 sam Exp $ * * Authors: Shane Harper * Vincent Seguin @@ -677,12 +677,12 @@ static void vout_Display( vout_thread_t *p_vout ) break; case YUV_420_PICTURE: - memcpy( p_vout->p_sys->p_xvimage->data, - p_vout->p_rendered_pic->p_y, i_size ); - memcpy( p_vout->p_sys->p_xvimage->data + ( i_size ), - p_vout->p_rendered_pic->p_v, i_size / 4 ); - memcpy( p_vout->p_sys->p_xvimage->data + ( i_size ) + ( i_size / 4 ), - p_vout->p_rendered_pic->p_u, i_size / 4 ); + pf_fast_memcpy( p_vout->p_sys->p_xvimage->data, + p_vout->p_rendered_pic->p_y, i_size ); + pf_fast_memcpy( p_vout->p_sys->p_xvimage->data + ( i_size ), + p_vout->p_rendered_pic->p_v, i_size / 4 ); + pf_fast_memcpy( p_vout->p_sys->p_xvimage->data + ( i_size ) + ( i_size / 4 ), + p_vout->p_rendered_pic->p_u, i_size / 4 ); break; } diff --git a/src/input/input_dec.c b/src/input/input_dec.c index c983ea57a7..c8307c98f1 100644 --- a/src/input/input_dec.c +++ b/src/input/input_dec.c @@ -2,7 +2,7 @@ * input_dec.c: Functions for the management of decoders ***************************************************************************** * Copyright (C) 1999-2001 VideoLAN - * $Id: input_dec.c,v 1.18 2001/11/30 22:52:40 gbazin Exp $ + * $Id: input_dec.c,v 1.19 2001/12/03 16:18:37 sam Exp $ * * Authors: Christophe Massiot * @@ -80,7 +80,7 @@ vlc_thread_t input_RunDecoder( input_thread_t * p_input, /* Spawn the decoder thread */ if ( vlc_thread_create( &thread_id, "decoder", (vlc_thread_func_t)p_es->p_module-> - p_functions->dec.functions.dec.pf_RunThread, + p_functions->dec.functions.dec.pf_run, (void *)p_es->p_config) ) { intf_ErrMsg( "input error: can't spawn decoder thread \"%s\"", diff --git a/src/interface/main.c b/src/interface/main.c index e5edc8ed1f..bb24a2885d 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.127 2001/11/28 15:08:06 massiot Exp $ + * $Id: main.c,v 1.128 2001/12/03 16:18:37 sam Exp $ * * Authors: Vincent Seguin * Samuel Hocevar @@ -135,8 +135,9 @@ #define OPT_YUV 183 #define OPT_DOWNMIX 184 #define OPT_IMDCT 185 -#define OPT_DVDCSS_METHOD 186 -#define OPT_DVDCSS_VERBOSE 187 +#define OPT_MEMCPY 186 +#define OPT_DVDCSS_METHOD 187 +#define OPT_DVDCSS_VERBOSE 188 #define OPT_SYNCHRO 190 #define OPT_WARNING 191 @@ -216,8 +217,9 @@ static const struct option longopts[] = { "channels", 0, 0, OPT_CHANNELS }, { "channelserver", 1, 0, OPT_CHANNELSERVER }, - /* Synchro options */ + /* Misc options */ { "synchro", 1, 0, OPT_SYNCHRO }, + { "memcpy", 1, 0, OPT_MEMCPY }, { 0, 0, 0, 0 } }; @@ -225,13 +227,13 @@ static const struct option longopts[] = static const char *psz_shortopts = "hHvgt:T:u:a:s:c:I:A:V:"; /***************************************************************************** - * Global variable program_data - these are the only ones, see main.h and - * modules.h + * Global variables - these are the only ones, see main.h and modules.h *****************************************************************************/ main_t *p_main; module_bank_t *p_module_bank; aout_bank_t *p_aout_bank; vout_bank_t *p_vout_bank; +void* ( *pf_fast_memcpy ) ( void *, const void *, size_t ); /***************************************************************************** * Local prototypes @@ -375,6 +377,24 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) aout_InitBank(); vout_InitBank(); + /* + * Choose the best memcpy module + */ + p_main->p_memcpy_module = module_Need( MODULE_CAPABILITY_MEMCPY, NULL ); + + if( p_main->p_memcpy_module == NULL ) + { + intf_ErrMsg( "intf error: no suitable memcpy module, " + "using libc default" ); + pf_fast_memcpy = memcpy; + } + else + { +#define f p_main->p_memcpy_module->p_functions->memcpy.functions.memcpy + pf_fast_memcpy = f.pf_fast_memcpy; +#undef f + } + /* * Initialize shared resources and libraries */ @@ -423,6 +443,11 @@ int main( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) } } + /* + * Free memcpy module + */ + module_Unneed( p_main->p_memcpy_module ); + /* * Free module, aout and vout banks */ @@ -790,10 +815,13 @@ static int GetConfiguration( int *pi_argc, char *ppsz_argv[], char *ppsz_env[] ) main_PutPszVariable( INPUT_CHANNEL_SERVER_VAR, optarg ); break; - /* Synchro options */ + /* Misc options */ case OPT_SYNCHRO: main_PutPszVariable( VPAR_SYNCHRO_VAR, optarg ); break; + case OPT_MEMCPY: + main_PutPszVariable( MEMCPY_METHOD_VAR, optarg ); + break; /* Internal error: unknown option */ case '?': @@ -867,6 +895,7 @@ static void Usage( int i_fashion ) "\n -I, --intf \tinterface method" "\n -v, --verbose \tverbose mode (cumulative)" "\n --stdout \tredirect console stdout" + "\n --memcpy \tmemcpy method" "\n" "\n --noaudio \tdisable audio" "\n -A, --aout \taudio output method" @@ -916,7 +945,8 @@ static void Usage( int i_fashion ) "\n " INTF_METHOD_VAR "= \tinterface method" "\n " INTF_INIT_SCRIPT_VAR "= \tinitialization script" "\n " INTF_CHANNELS_VAR "= \tchannels list" - "\n " INTF_STDOUT_VAR "= \tredirect console stdout" ); + "\n " INTF_STDOUT_VAR "= \tredirect console stdout" + "\n " MEMCPY_METHOD_VAR "= \tmemcpy method" ); /* Audio parameters */ intf_MsgImm( "\nAudio parameters:" @@ -1164,7 +1194,7 @@ static int CPUCapabilities( void ) { i_capabilities |= CPU_CAPABILITY_MMXEXT; -#ifdef HAVE_SSE +#ifdef CAN_COMPILE_SSE /* We test if OS support the SSE instructions */ i_illegal = 0; if( setjmp( env ) == 0 ) @@ -1201,7 +1231,7 @@ static int CPUCapabilities( void ) /* list these additional capabilities */ cpuid( 0x80000001 ); -#ifdef HAVE_3DNOW +#ifdef CAN_COMPILE_3DNOW if( i_edx & 0x80000000 ) { i_illegal = 0; @@ -1231,7 +1261,7 @@ static int CPUCapabilities( void ) /* Test for Altivec */ signal( SIGILL, InstructionSignalHandler ); -#ifdef HAVE_ALTIVEC +#ifdef CAN_COMPILE_ALTIVEC i_illegal = 0; if( setjmp( env ) == 0 ) { -- 2.39.2