D: MPEG audio decoder
D: MPEG video decoder
+N: Paul Mackerras
+E: paulus@linuxcare.com.au
+D: Altivec IDCT and motion
+
N: Wade Majors
E: guru@startrek.com
D: BeOS testing, icon integration, debugging and fixes
LIB_GLIDE = @LIB_GLIDE@
LIB_GNOME = @LIB_GNOME@
LIB_GTK = @LIB_GTK@
-LIB_IDCTALTIVEC = @LIB_IDCTALTIVEC@
+LIB_ALTIVEC = @LIB_ALTIVEC@
LIB_LIBDVDCSS = @LIB_LIBDVDCSS@
LIB_KDE = @LIB_KDE@
LIB_MACOSX = @LIB_MACOSX@
ac_help="$ac_help
--disable-mmx Disable MMX optimizations (default enabled for x86)"
ac_help="$ac_help
- --enable-altivec Enable altivec optimizations (default disabled since it is broken)"
+ --disable-altivec Disable altivec optimizations (default enabled on PPC)"
ac_help="$ac_help
--enable-debug Enable debug mode (default disabled)"
ac_help="$ac_help
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
-# ifdef HAVE_UNISTD_H
-# include <unistd.h>
-# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
/*
* First, make a file with some known garbage in it.
*/
- data = malloc(pagesize);
+ data = (char*)malloc(pagesize);
if (!data)
exit(1);
for (i = 0; i < pagesize; ++i)
fd = open("conftestmmap", O_RDWR);
if (fd < 0)
exit(1);
- data2 = malloc(2 * pagesize);
+ data2 = (char*)malloc(2 * pagesize);
if (!data2)
exit(1);
data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
*/
for (i = 0; i < pagesize; ++i)
*(data2 + i) = *(data2 + i) + 1;
- data3 = malloc(pagesize);
+ data3 = (char*)malloc(pagesize);
if (!data3)
exit(1);
if (read(fd, data3, pagesize) != pagesize)
}
EOF
-if { (eval echo configure:2253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2256: \"$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
fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:2276: checking return type of signal handlers" >&5
+echo "configure:2279: 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 <<EOF
-#line 2281 "configure"
+#line 2284 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
int i;
; return 0; }
EOF
-if { (eval echo configure:2298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2301: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:2317: checking for dlopen in -ldl" >&5
+echo "configure:2320: 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
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2325 "configure"
+#line 2328 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dlopen()
; return 0; }
EOF
-if { (eval echo configure:2336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2339: \"$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
fi
echo $ac_n "checking for pow in -lm""... $ac_c" 1>&6
-echo "configure:2357: checking for pow in -lm" >&5
+echo "configure:2360: 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
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2365 "configure"
+#line 2368 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pow()
; return 0; }
EOF
-if { (eval echo configure:2376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2379: \"$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
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:2400: checking for pthread_attr_init in -lpthread" >&5
+echo "configure:2403: 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
ac_save_LIBS="$LIBS"
LIBS="-lpthread $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2408 "configure"
+#line 2411 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:2419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2422: \"$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
fi
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init in -lpthreads""... $ac_c" 1>&6
-echo "configure:2442: checking for pthread_attr_init in -lpthreads" >&5
+echo "configure:2445: 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
ac_save_LIBS="$LIBS"
LIBS="-lpthreads $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2450 "configure"
+#line 2453 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:2461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2464: \"$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
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:2484: checking for pthread_attr_init in -lc_r" >&5
+echo "configure:2487: 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
ac_save_LIBS="$LIBS"
LIBS="-lc_r $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2492 "configure"
+#line 2495 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pthread_attr_init()
; return 0; }
EOF
-if { (eval echo configure:2503: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2506: \"$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
fi
if test "x${THREAD_LIB}" = xerror; then
echo $ac_n "checking for pthread_attr_init""... $ac_c" 1>&6
-echo "configure:2526: checking for pthread_attr_init" >&5
+echo "configure:2529: 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 <<EOF
-#line 2531 "configure"
+#line 2534 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char pthread_attr_init(); below. */
; return 0; }
EOF
-if { (eval echo configure:2554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2557: \"$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
fi
echo $ac_n "checking for cthread_fork in -lthreads""... $ac_c" 1>&6
-echo "configure:2577: checking for cthread_fork in -lthreads" >&5
+echo "configure:2580: 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
ac_save_LIBS="$LIBS"
LIBS="-lthreads $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2585 "configure"
+#line 2588 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
cthread_fork()
; return 0; }
EOF
-if { (eval echo configure:2596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2599: \"$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
cat > conftest.$ac_ext <<EOF
-#line 2618 "configure"
+#line 2621 "configure"
#include "confdefs.h"
#include <pthread.h>
EOF
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 2634 "configure"
+#line 2637 "configure"
#include "confdefs.h"
#include <strings.h>
EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2654: checking for $ac_hdr" >&5
+echo "configure:2657: 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
-#line 2659 "configure"
+#line 2662 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2664: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2667: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2694: checking for $ac_hdr" >&5
+echo "configure:2697: 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
-#line 2699 "configure"
+#line 2702 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2704: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2707: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2734: checking for $ac_hdr" >&5
+echo "configure:2737: 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
-#line 2739 "configure"
+#line 2742 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2747: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2774: checking for $ac_hdr" >&5
+echo "configure:2777: 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
-#line 2779 "configure"
+#line 2782 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2784: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2787: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2814: checking for $ac_hdr" >&5
+echo "configure:2817: 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
-#line 2819 "configure"
+#line 2822 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2827: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2854: checking for $ac_hdr" >&5
+echo "configure:2857: 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
-#line 2859 "configure"
+#line 2862 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2867: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2895: checking for $ac_hdr" >&5
+echo "configure:2898: 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
-#line 2900 "configure"
+#line 2903 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2905: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2908: \"$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*
CFLAGS="${save_CFLAGS} -Wall -Werror"
echo $ac_n "checking for ntohl in sys/param.h""... $ac_c" 1>&6
-echo "configure:2934: checking for ntohl in sys/param.h" >&5
+echo "configure:2937: checking for ntohl in sys/param.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 2936 "configure"
+#line 2939 "configure"
#include "confdefs.h"
#include <sys/param.h>
void foo() { int meuh; ntohl(meuh); }
; return 0; }
EOF
-if { (eval echo configure:2944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define NTOHL_IN_SYS_PARAM_H 1
CFLAGS="${save_CFLAGS} -finline-limit-20000"
echo $ac_n "checking if \$CC accepts -finline-limit""... $ac_c" 1>&6
-echo "configure:2961: checking if \$CC accepts -finline-limit" >&5
+echo "configure:2964: checking if \$CC accepts -finline-limit" >&5
cat > conftest.$ac_ext <<EOF
-#line 2963 "configure"
+#line 2966 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
save_CFLAGS="${save_CFLAGS} -finline-limit-20000"; echo "$ac_t""yes" 1>&6
else
CFLAGS="${save_CFLAGS} -bundle -undefined suppress"
echo $ac_n "checking if \$CC accepts -bundle -undefined suppress""... $ac_c" 1>&6
-echo "configure:2983: checking if \$CC accepts -bundle -undefined suppress" >&5
+echo "configure:2986: checking if \$CC accepts -bundle -undefined suppress" >&5
cat > conftest.$ac_ext <<EOF
-#line 2985 "configure"
+#line 2988 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
PLCFLAGS="${PLCFLAGS} -bundle -undefined suppress"; echo "$ac_t""yes" 1>&6
else
CFLAGS="${save_CFLAGS} -shared"
echo $ac_n "checking if \$CC accepts -shared""... $ac_c" 1>&6
-echo "configure:3005: checking if \$CC accepts -shared" >&5
+echo "configure:3008: checking if \$CC accepts -shared" >&5
cat > conftest.$ac_ext <<EOF
-#line 3007 "configure"
+#line 3010 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
PLCFLAGS="${PLCFLAGS} -shared"; echo "$ac_t""yes" 1>&6
else
try_SOFLAGS="-Wl,-soname -Wl,"
LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0"
echo $ac_n "checking if linker accepts ${try_SOFLAGS}foo.so.0""... $ac_c" 1>&6
-echo "configure:3029: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
+echo "configure:3032: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
cat > conftest.$ac_ext <<EOF
-#line 3031 "configure"
+#line 3034 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3038: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
SOFLAGS="${try_SOFLAGS}"; echo "$ac_t""yes" 1>&6
else
try_SOFLAGS="-Wl,-h -Wl,"
LDFLAGS="${save_LDFLAGS} ${try_SOFLAGS}foo.so.0"
echo $ac_n "checking if linker accepts ${try_SOFLAGS}foo.so.0""... $ac_c" 1>&6
-echo "configure:3054: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
+echo "configure:3057: checking if linker accepts ${try_SOFLAGS}foo.so.0" >&5
cat > conftest.$ac_ext <<EOF
-#line 3056 "configure"
+#line 3059 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3063: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
SOFLAGS="${try_SOFLAGS}"; echo "$ac_t""yes" 1>&6
else
LDFLAGS="${save_LDFLAGS}"
echo $ac_n "checking for boolean_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3079: checking for boolean_t in sys/types.h" >&5
+echo "configure:3082: checking for boolean_t in sys/types.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3081 "configure"
+#line 3084 "configure"
#include "confdefs.h"
#include <sys/types.h>
void quux() { boolean_t foo; }
; return 0; }
EOF
-if { (eval echo configure:3089: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3092: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_SYS_TYPES_H 1
fi
rm -f conftest*
echo $ac_n "checking for boolean_t in pthread.h""... $ac_c" 1>&6
-echo "configure:3104: checking for boolean_t in pthread.h" >&5
+echo "configure:3107: checking for boolean_t in pthread.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3106 "configure"
+#line 3109 "configure"
#include "confdefs.h"
#include <pthread.h>
void quux() { boolean_t foo; }
; return 0; }
EOF
-if { (eval echo configure:3114: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_PTHREAD_H 1
fi
rm -f conftest*
echo $ac_n "checking for boolean_t in cthreads.h""... $ac_c" 1>&6
-echo "configure:3129: checking for boolean_t in cthreads.h" >&5
+echo "configure:3132: checking for boolean_t in cthreads.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 3131 "configure"
+#line 3134 "configure"
#include "confdefs.h"
#include <cthreads.h>
void quux() { boolean_t foo; }
; return 0; }
EOF
-if { (eval echo configure:3139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3142: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define BOOLEAN_T_IN_CTHREADS_H 1
rm -f conftest*
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3155: checking for working const" >&5
+echo "configure:3158: 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 <<EOF
-#line 3160 "configure"
+#line 3163 "configure"
#include "confdefs.h"
int main() {
/* Ultrix mips cc rejects this. */
-typedef int charset[2]; const charset x;
+typedef int charset[2]; const charset x = {0,0};
/* SunOS 4.1.1 cc rejects this. */
char const *const *ccp;
char **p;
; return 0; }
EOF
-if { (eval echo configure:3209: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3212: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3230: checking for ANSI C header files" >&5
+echo "configure:3233: 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 <<EOF
-#line 3235 "configure"
+#line 3238 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3246: \"$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*
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
-#line 3260 "configure"
+#line 3263 "configure"
#include "confdefs.h"
#include <string.h>
EOF
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
-#line 3278 "configure"
+#line 3281 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 3299 "configure"
+#line 3302 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
exit (0); }
EOF
-if { (eval echo configure:3310: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3313: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3334: checking for size_t" >&5
+echo "configure:3337: 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 <<EOF
-#line 3339 "configure"
+#line 3342 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3367: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3370: 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 <<EOF
-#line 3372 "configure"
+#line 3375 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:3381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3384: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
echo $ac_n "checking __attribute__ ((aligned ())) support""... $ac_c" 1>&6
-echo "configure:3403: checking __attribute__ ((aligned ())) support" >&5
+echo "configure:3406: 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
ac_cv_c_attribute_aligned=0
for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do
cat > conftest.$ac_ext <<EOF
-#line 3410 "configure"
+#line 3413 "configure"
#include "confdefs.h"
int main() {
static char c __attribute__ ((aligned($ac_cv_c_attr_align_try))) = 0; return c;
; return 0; }
EOF
-if { (eval echo configure:3417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3420: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_attribute_aligned=$ac_cv_c_attr_align_try
else
SSE_MODULES="imdctsse downmixsse"
echo $ac_n "checking if \$CC groks MMX inline assembly""... $ac_c" 1>&6
-echo "configure:3449: checking if \$CC groks MMX inline assembly" >&5
+echo "configure:3452: checking if \$CC groks MMX inline assembly" >&5
cat > conftest.$ac_ext <<EOF
-#line 3451 "configure"
+#line 3454 "configure"
#include "confdefs.h"
void quux(){void *p;asm("packuswb %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
-if { (eval echo configure:3458: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3461: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ACCEL_MODULES="${ACCEL_MODULES} ${MMX_MODULES}"
echo "$ac_t""yes" 1>&6
rm -f conftest*
echo $ac_n "checking if \$CC groks MMX EXT inline assembly""... $ac_c" 1>&6
-echo "configure:3471: checking if \$CC groks MMX EXT inline assembly" >&5
+echo "configure:3474: checking if \$CC groks MMX EXT inline assembly" >&5
cat > conftest.$ac_ext <<EOF
-#line 3473 "configure"
+#line 3476 "configure"
#include "confdefs.h"
void quux(){void *p;asm("maskmovq %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
-if { (eval echo configure:3480: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ACCEL_MODULES="${ACCEL_MODULES} ${MMXEXT_MODULES}"
echo "$ac_t""yes" 1>&6
rm -f conftest*
echo $ac_n "checking if \$CC groks 3D Now! inline assembly""... $ac_c" 1>&6
-echo "configure:3493: checking if \$CC groks 3D Now! inline assembly" >&5
+echo "configure:3496: checking if \$CC groks 3D Now! inline assembly" >&5
cat > conftest.$ac_ext <<EOF
-#line 3495 "configure"
+#line 3498 "configure"
#include "confdefs.h"
void quux(){void *p;asm("pfadd %%mm1,%%mm2"::"r"(p));}
int main() {
; return 0; }
EOF
-if { (eval echo configure:3502: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3505: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ACCEL_MODULES="${ACCEL_MODULES} ${THREEDNOW_MODULES}"
echo "$ac_t""yes" 1>&6
rm -f conftest*
echo $ac_n "checking if \$CC groks SSE inline assembly""... $ac_c" 1>&6
-echo "configure:3515: checking if \$CC groks SSE inline assembly" >&5
+echo "configure:3518: checking if \$CC groks SSE inline assembly" >&5
cat > conftest.$ac_ext <<EOF
-#line 3517 "configure"
+#line 3520 "configure"
#include "confdefs.h"
void quux(){void *p;asm("xorps %%xmm1,%%xmm2"::"r"(p));}
int main() {
; return 0; }
EOF
-if { (eval echo configure:3524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3527: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ACCEL_MODULES="${ACCEL_MODULES} ${SSE_MODULES}"
echo "$ac_t""yes" 1>&6
fi
rm -f conftest*
+echo $ac_n "checking if \$CC groks Altivec inline assembly""... $ac_c" 1>&6
+echo "configure:3540: checking if \$CC groks Altivec inline assembly" >&5
+cat > conftest.$ac_ext <<EOF
+#line 3542 "configure"
+#include "confdefs.h"
+void quux(){void *p;asm("mtspr 256,%0"::"r"(-1));}
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:3549: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ACCEL_MODULES="${ACCEL_MODULES} ${ALTIVEC_MODULES}"
+ echo "$ac_t""yes" 1>&6
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ echo "$ac_t""no" 1>&6
+fi
+rm -f conftest*
+
CAN_BUILD_LIBDVDCSS=0
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3543: checking for $ac_hdr" >&5
+echo "configure:3568: 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
-#line 3548 "configure"
+#line 3573 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3553: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3578: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3586: checking for $ac_hdr" >&5
+echo "configure:3611: 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
-#line 3591 "configure"
+#line 3616 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3596: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3621: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3622: checking for $ac_hdr" >&5
+echo "configure:3647: 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
-#line 3627 "configure"
+#line 3652 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3657: \"$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*
BSD_DVD_STRUCT=0
LINUX_DVD_STRUCT=0
cat > conftest.$ac_ext <<EOF
-#line 3661 "configure"
+#line 3686 "configure"
#include "confdefs.h"
#include <sys/dvdio.h>
EOF
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3679 "configure"
+#line 3704 "configure"
#include "confdefs.h"
#include <sys/cdio.h>
EOF
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3697 "configure"
+#line 3722 "configure"
#include "confdefs.h"
#include <linux/cdrom.h>
EOF
NEED_BSDI_LIBDVD=0
cat > conftest.$ac_ext <<EOF
-#line 3716 "configure"
+#line 3741 "configure"
#include "confdefs.h"
#include <dvd.h>
EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3738: checking for $ac_hdr" >&5
+echo "configure:3763: 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
-#line 3743 "configure"
+#line 3768 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3773: \"$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*
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:3788: checking for sys/scsi/scsi_types.h" >&5
+echo "configure:3813: 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
-#line 3793 "configure"
+#line 3818 "configure"
#include "confdefs.h"
#include <sys/scsi/scsi_types.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3823: \"$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*
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:3817: checking for sys/scsi/impl/uscsi.h" >&5
+echo "configure:3842: 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
-#line 3822 "configure"
+#line 3847 "configure"
#include "confdefs.h"
#include <sys/scsi/impl/uscsi.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3852: \"$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*
if test "${enable_mmx+set}" = set; then
enableval="$enable_mmx"
if test x$enableval = xyes; then ARCH="${ARCH} mmx";
- BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
else
if test x${host_cpu} = xi686 -o x${host_cpu} = xi586 -o x${host_cpu} = xx86 -o x${host_cpu} = xi386; then ARCH="${ARCH} mmx";
- BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
fi
# Check whether --enable-altivec or --disable-altivec was given.
if test "${enable_altivec+set}" = set; then
enableval="$enable_altivec"
- if test x$enableval = xyes; then ARCH="${ARCH} altivec"
- BUILTINS="${BUILTINS} idctaltivec"
- LIB_IDCTALTIVEC="-framework vecLib"
- fi
+ if test x$enableval = xyes; then ARCH="${ARCH} altivec";
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
+else
+ if test x${host_cpu} = xpowerpc; then ARCH="${ARCH} altivec";
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi
fi
-#[ if test -d /System/Library/Frameworks/vecLib.framework; then ARCH="${ARCH} altivec"; PLUGINS="${PLUGINS} idctaltivec"; fi ])
DEBUG=0
# Check whether --enable-debug or --disable-debug was given.
enableval="$enable_pth"
if test x$enableval = xyes; then
echo $ac_n "checking for pth_init in -lpth""... $ac_c" 1>&6
-echo "configure:3981: checking for pth_init in -lpth" >&5
+echo "configure:4006: 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
ac_save_LIBS="$LIBS"
LIBS="-lpth $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3989 "configure"
+#line 4014 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
pth_init()
; return 0; }
EOF
-if { (eval echo configure:4000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
cat > conftest.$ac_ext <<EOF
-#line 4028 "configure"
+#line 4053 "configure"
#include "confdefs.h"
#include <pth.h>
EOF
# 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:4192: checking for $ac_word" >&5
+echo "configure:4217: 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
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
+ LIB_ALTIVEC="-framework vecLib"
fi
else
for ac_hdr in Carbon/Carbon.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4259: checking for $ac_hdr" >&5
+echo "configure:4285: 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
-#line 4264 "configure"
+#line 4290 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4269: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4295: \"$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*
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
+ LIB_ALTIVEC="-framework vecLib"
else
echo "$ac_t""no" 1>&6
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4314: checking for $ac_hdr" >&5
+echo "configure:4341: 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
-#line 4319 "configure"
+#line 4346 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4324: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4351: \"$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*
# 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:4402: checking for $ac_word" >&5
+echo "configure:4429: 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
# 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:4442: checking for $ac_word" >&5
+echo "configure:4469: 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
# 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:4483: checking for $ac_word" >&5
+echo "configure:4510: 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
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4529: checking for $ac_hdr" >&5
+echo "configure:4556: 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
-#line 4534 "configure"
+#line 4561 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4539: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4566: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4602: checking for $ac_hdr" >&5
+echo "configure:4629: 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
-#line 4607 "configure"
+#line 4634 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4612: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4639: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4650: checking for $ac_hdr" >&5
+echo "configure:4677: 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
-#line 4655 "configure"
+#line 4682 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4660: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4687: \"$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*
# 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:4772: checking for $ac_word" >&5
+echo "configure:4799: 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
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4817: checking for $ac_hdr" >&5
+echo "configure:4844: 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
-#line 4822 "configure"
+#line 4849 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4854: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4878: checking for $ac_hdr" >&5
+echo "configure:4905: 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
-#line 4883 "configure"
+#line 4910 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4915: \"$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*
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4940: checking for $ac_hdr" >&5
+echo "configure:4967: 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
-#line 4945 "configure"
+#line 4972 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4977: \"$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*
then
ac_safe=`echo "sys/asoundlib.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for sys/asoundlib.h""... $ac_c" 1>&6
-echo "configure:4990: checking for sys/asoundlib.h" >&5
+echo "configure:5017: checking for sys/asoundlib.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4995 "configure"
+#line 5022 "configure"
#include "confdefs.h"
#include <sys/asoundlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5000: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5027: \"$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*
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:5017: checking for main in -lasound" >&5
+echo "configure:5044: 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
ac_save_LIBS="$LIBS"
LIBS="-lasound $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5025 "configure"
+#line 5052 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5059: \"$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
s%@LIB_GLIDE@%$LIB_GLIDE%g
s%@LIB_GNOME@%$LIB_GNOME%g
s%@LIB_GTK@%$LIB_GTK%g
-s%@LIB_IDCTALTIVEC@%$LIB_IDCTALTIVEC%g
+s%@LIB_ALTIVEC@%$LIB_ALTIVEC%g
s%@LIB_LIBDVDCSS@%$LIB_LIBDVDCSS%g
s%@LIB_KDE@%$LIB_KDE%g
s%@LIB_MACOSX@%$LIB_MACOSX%g
ACCEL_MODULES="${ACCEL_MODULES} ${SSE_MODULES}"
AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
+AC_MSG_CHECKING([if \$CC groks Altivec inline assembly])
+AC_TRY_COMPILE([void quux(){void *p;asm("mtspr 256,%0"::"r"(-1));}],,
+ ACCEL_MODULES="${ACCEL_MODULES} ${ALTIVEC_MODULES}"
+ AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
+
dnl
dnl libdvdcss: check for DVD ioctls
dnl
AC_ARG_ENABLE(mmx,
[ --disable-mmx Disable MMX optimizations (default enabled for x86)],
[ if test x$enableval = xyes; then ARCH="${ARCH} mmx";
- BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ],
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ],
[ if test x${host_cpu} = xi686 -o x${host_cpu} = xi586 -o x${host_cpu} = xx86 -o x${host_cpu} = xi386; then ARCH="${ARCH} mmx";
- BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ])
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ])
dnl
dnl AltiVec acceleration
dnl
AC_ARG_ENABLE(altivec,
-[ --enable-altivec Enable altivec optimizations (default disabled since it is broken)],
-[ if test x$enableval = xyes; then ARCH="${ARCH} altivec"
- BUILTINS="${BUILTINS} idctaltivec"
- LIB_IDCTALTIVEC="-framework vecLib"
- fi ])
-#[ if test -d /System/Library/Frameworks/vecLib.framework; then ARCH="${ARCH} altivec"; PLUGINS="${PLUGINS} idctaltivec"; fi ])
+[ --disable-altivec Disable altivec optimizations (default enabled on PPC)],
+[ if test x$enableval = xyes; then ARCH="${ARCH} altivec";
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ],
+[ if test x${host_cpu} = xpowerpc; then ARCH="${ARCH} altivec";
+ BUILTINS="${BUILTINS} ${ACCEL_MODULES}"; fi ])
dnl
dnl Debugging mode
[ if test x$enableval = xyes; then TRACE=1; fi ])
dnl
-dnl Trace mode
+dnl Profiling
dnl
GPROF=0
AC_ARG_ENABLE(gprof,
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
+ LIB_ALTIVEC="-framework vecLib"
fi],
[AC_CHECK_HEADERS(Carbon/Carbon.h,
BUILTINS="${BUILTINS} macosx"
LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
+ LIB_ALTIVEC="-framework vecLib"
)])
dnl
AC_SUBST(LIB_GLIDE)
AC_SUBST(LIB_GNOME)
AC_SUBST(LIB_GTK)
-AC_SUBST(LIB_IDCTALTIVEC)
+AC_SUBST(LIB_ALTIVEC)
AC_SUBST(LIB_LIBDVDCSS)
AC_SUBST(LIB_KDE)
AC_SUBST(LIB_MACOSX)
* control the pace of reading.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: input_ext-intf.h,v 1.41 2001/07/18 14:21:00 massiot Exp $
+ * $Id: input_ext-intf.h,v 1.42 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
mtime_t cr_ref, sysdate_ref;
mtime_t last_cr; /* reference to detect unexpected stream
* discontinuities */
- mtime_t last_syscr;
count_t c_average_count;
/* counter used to compute dynamic average values */
int i_synchro_state;
* modules.h : Module management functions.
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: modules.h,v 1.28 2001/08/22 17:21:45 massiot Exp $
+ * $Id: modules.h,v 1.29 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Samuel Hocevar <sam@zoy.org>
*
struct
{
void ( * pf_idct_init ) ( void ** );
- void ( * pf_sparse_idct ) ( void *, dctelem_t *, int );
- void ( * pf_idct ) ( void *, dctelem_t *, int );
+ void ( * pf_sparse_idct_add )( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_idct_add ) ( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_sparse_idct_copy )( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_idct_copy ) ( dctelem_t *, yuv_data_t *, int,
+ void *, int );
void ( * pf_norm_scan ) ( u8 ppi_scan[2][64] );
-
- void ( * pf_decode_init ) ( );
- void ( * pf_addblock ) ( dctelem_t *, yuv_data_t *, int );
- void ( * pf_copyblock ) ( dctelem_t *, yuv_data_t *, int );
} idct;
/* YUV transformation plugin */
* vdec_ext-plugins.h : structures from the video decoder exported to plug-ins
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vdec_ext-plugins.h,v 1.3 2001/08/22 17:21:45 massiot Exp $
+ * $Id: vdec_ext-plugins.h,v 1.4 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
typedef struct idct_inner_s
{
dctelem_t pi_block[64]; /* block */
- void ( * pf_idct ) ( void *, dctelem_t*, int );
- /* sparse IDCT or not ? */
+ void ( * pf_idct ) ( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ /* sparse IDCT or not, add or copy ? */
int i_sparse_pos; /* position of the
* non-NULL coeff */
yuv_data_t * p_dct_data; /* pointer to the position
PLUGIN_IDCTMMX = idctmmx.o
PLUGIN_IDCTMMXEXT = idctmmxext.o
PLUGIN_IDCTALTIVEC = idctaltivec.o
-PLUGIN_IDCTCOMMON = vdec_idct.o
-PLUGIN_VDECBLOCK_C = vdec_block_c.o
-PLUGIN_VDECBLOCK_MMX = vdec_block_mmx.o
-
-BUILTIN_IDCT = $(PLUGIN_IDCT:%.o=BUILTIN_IDCT_%.o) \
- $(PLUGIN_IDCTCOMMON:%.o=BUILTIN_IDCT_%.o) \
- $(PLUGIN_VDECBLOCK_C:%.o=BUILTIN_IDCT_%.o)
-BUILTIN_IDCTCLASSIC = $(PLUGIN_IDCTCLASSIC:%.o=BUILTIN_IDCTCLASSIC_%.o) \
- $(PLUGIN_IDCTCOMMON:%.o=BUILTIN_IDCTCLASSIC_%.o) \
- $(PLUGIN_VDECBLOCK_C:%.o=BUILTIN_IDCTCLASSIC_%.o)
-BUILTIN_IDCTMMX = $(PLUGIN_IDCTMMX:%.o=BUILTIN_IDCTMMX_%.o) \
- $(PLUGIN_IDCTCOMMON:%.o=BUILTIN_IDCTMMX_%.o) \
- $(PLUGIN_VDECBLOCK_MMX:%.o=BUILTIN_IDCTMMX_%.o)
-BUILTIN_IDCTMMXEXT = $(PLUGIN_IDCTMMXEXT:%.o=BUILTIN_IDCTMMXEXT_%.o) \
- $(PLUGIN_IDCTCOMMON:%.o=BUILTIN_IDCTMMXEXT_%.o) \
- $(PLUGIN_VDECBLOCK_MMX:%.o=BUILTIN_IDCTMMXEXT_%.o)
-BUILTIN_IDCTALTIVEC = $(PLUGIN_IDCTALTIVEC:%.o=BUILTIN_IDCTALTIVEC_%.o) \
- $(PLUGIN_IDCTCOMMON:%.o=BUILTIN_IDCTALTIVEC_%.o) \
- $(PLUGIN_VDECBLOCK_C:%.o=BUILTIN_IDCTALTIVEC_%.o)
-
-PLUGIN_C = $(PLUGIN_IDCT) $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTMMXEXT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C) $(PLUGIN_VDECBLOCK_MMX)
+
+BUILTIN_IDCT = $(PLUGIN_IDCT:%.o=BUILTIN_IDCT_%.o)
+BUILTIN_IDCTCLASSIC = $(PLUGIN_IDCTCLASSIC:%.o=BUILTIN_IDCTCLASSIC_%.o)
+BUILTIN_IDCTMMX = $(PLUGIN_IDCTMMX:%.o=BUILTIN_IDCTMMX_%.o)
+BUILTIN_IDCTMMXEXT = $(PLUGIN_IDCTMMXEXT:%.o=BUILTIN_IDCTMMXEXT_%.o)
+BUILTIN_IDCTALTIVEC = $(PLUGIN_IDCTALTIVEC:%.o=BUILTIN_IDCTALTIVEC_%.o)
+
+PLUGIN_C = $(PLUGIN_IDCT) $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTMMXEXT)
ALL_OBJ = $(PLUGIN_C) $(PLUGIN_IDCTALTIVEC) $(BUILTIN_IDCT) $(BUILTIN_IDCTCLASSIC) $(BUILTIN_IDCTMMX) $(BUILTIN_IDCTMMXEXT) $(BUILTIN_IDCTALTIVEC)
#
# Real targets
#
-../idct.so: $(PLUGIN_IDCT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
+../idct.so: $(PLUGIN_IDCT)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../idct.a: $(BUILTIN_IDCT)
ar r $@ $^
$(RANLIB) $@
-../idctclassic.so: $(PLUGIN_IDCTCLASSIC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
+../idctclassic.so: $(PLUGIN_IDCTCLASSIC)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../idctclassic.a: $(BUILTIN_IDCTCLASSIC)
ar r $@ $^
$(RANLIB) $@
-../idctmmx.so: $(PLUGIN_IDCTMMX) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
+../idctmmx.so: $(PLUGIN_IDCTMMX)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../idctmmx.a: $(BUILTIN_IDCTMMX)
ar r $@ $^
$(RANLIB) $@
-../idctmmxext.so: $(PLUGIN_IDCTMMXEXT) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_MMX)
+../idctmmxext.so: $(PLUGIN_IDCTMMXEXT)
$(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS)
../idctmmxext.a: $(BUILTIN_IDCTMMXEXT)
ar r $@ $^
$(RANLIB) $@
-../idctaltivec.so: $(PLUGIN_IDCTALTIVEC) $(PLUGIN_IDCTCOMMON) $(PLUGIN_VDECBLOCK_C)
- $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_IDCTALTIVEC)
+../idctaltivec.so: $(PLUGIN_IDCTALTIVEC)
+ $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ALTIVEC)
../idctaltivec.a: $(BUILTIN_IDCTALTIVEC)
ar r $@ $^
/*****************************************************************************
- * vdec_block_c.c: Macroblock copy functions in C
+ * block_c.h: Macroblock copy functions in C
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: vdec_block_c.c,v 1.6 2001/08/22 17:21:45 massiot Exp $
+ * $Id: block_c.h,v 1.1 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/* MODULE_NAME defined in Makefile together with -DBUILTIN */
-#ifdef BUILTIN
-# include "modules_inner.h"
-#else
-# define _M( foo ) foo
-#endif
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "defs.h"
-
-#include <string.h>
-
-#include "config.h"
-#include "common.h"
-#include "threads.h"
-#include "mtime.h"
-
-#include "intf_msg.h"
-
-#include "vdec_idct.h"
-
-#include "modules.h"
-#include "modules_export.h"
-
/*****************************************************************************
* Static variables
*****************************************************************************
static u8 *pi_crop;
/*****************************************************************************
- * vdec_InitDecode: initialize video decoder thread
+ * InitBlock: initialize the crop table
*****************************************************************************/
-void _M( vdec_InitDecode ) ( )
+static void InitBlock ( )
{
int i_dummy;
}
/*****************************************************************************
- * vdec_AddBlock : add a block
+ * AddBlock: add a block
*****************************************************************************/
-void _M( vdec_AddBlock ) ( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr )
+static __inline__ void AddBlock( dctelem_t * p_block, yuv_data_t * p_data,
+ int i_incr )
{
int i = 8;
}
/*****************************************************************************
- * vdec_CopyBlock : copy a block
+ * CopyBlock: copy a block
*****************************************************************************/
-void _M( vdec_CopyBlock )( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr )
+static __inline__ void CopyBlock( dctelem_t * p_block, yuv_data_t * p_data,
+ int i_incr )
{
int i = 8;
/*****************************************************************************
- * vdec_block_mmx.c: Macroblock copy functions in MMX assembly
+ * block_mmx.h: Macroblock copy functions in MMX assembly
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: vdec_block_mmx.c,v 1.6 2001/08/22 17:21:45 massiot Exp $
+ * $Id: block_mmx.h,v 1.1 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Michel Lespinasse <walken@zoy.org>
* Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/* MODULE_NAME defined in Makefile together with -DBUILTIN */
-#ifdef BUILTIN
-# include "modules_inner.h"
-#else
-# define _M( foo ) foo
-#endif
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "defs.h"
-
-#include <string.h>
-
-#include "config.h"
-#include "common.h"
-#include "threads.h"
-#include "mtime.h"
-
-#include "intf_msg.h"
-
-#include "input_ext-dec.h"
-
-#include "video.h"
-#include "video_output.h"
-
-#include "vdec_idct.h"
-
-#include "modules.h"
-#include "modules_export.h"
-
-#include "mmx.h"
-
/*****************************************************************************
- * vdec_InitDecode: initialize video decoder thread
+ * InitBlock: placeholder because we don't need a crop table, MMX does it for us
*****************************************************************************/
-void _M( vdec_InitDecode ) ( )
+static __inline__ void InitBlock( )
{
;
}
/*****************************************************************************
- * vdec_AddBlock : add a block
+ * AddBlock: add a block
*****************************************************************************/
#define ADD_MMX(offset,r1,r2,r3,r4) \
movq_m2r (*(p_data+2*i_incr), r1); \
punpckhbw_r2r (mm0, r2); \
paddsw_m2r (*(p_block+offset+4), r2);
-void _M( vdec_AddBlock ) ( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr )
+static __inline__ void AddBlock( dctelem_t * p_block, yuv_data_t * p_data,
+ int i_incr )
{
movq_m2r (*p_data, mm1);
pxor_r2r (mm0, mm0);
}
/*****************************************************************************
- * vdec_CopyBlock : copy a block
+ * CopyBlock: copy a block
*****************************************************************************/
#define COPY_MMX(offset,r0,r1,r2) \
movq_m2r (*(p_block+offset), r0); \
movq_r2m (r2, *p_data); \
packuswb_r2r (r1, r0);
-void _M( vdec_CopyBlock ) ( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr )
+static __inline__ void CopyBlock( dctelem_t * p_block, yuv_data_t * p_data,
+ int i_incr )
{
movq_m2r (*(p_block+0*8), mm0);
movq_m2r (*(p_block+0*8+4), mm1);
/*****************************************************************************
- * idct.c : IDCT module
+ * idct.c : C IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idct.c,v 1.14 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idct.c,v 1.15 2001/09/05 16:07:49 massiot Exp $
*
- * Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
+ * Author: Gaël Hendryckx <jimmy@via.ecp.fr>
*
* 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
#include "mtime.h"
#include "tests.h"
-#include "vdec_idct.h"
+#include "idct.h"
+#include "block_c.h"
#include "modules.h"
#include "modules_export.h"
* Local and extern prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
-static int idct_Probe ( probedata_t *p_data );
-static void vdec_NormScan ( u8 ppi_scan[2][64] );
/*****************************************************************************
* Build configuration tree.
/* 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 idct_getfunctions( function_list_t * p_function_list )
-{
- p_function_list->pf_probe = idct_Probe;
-#define F p_function_list->functions.idct
- F.pf_idct_init = _M( vdec_InitIDCT );
- F.pf_sparse_idct = _M( vdec_SparseIDCT );
- F.pf_idct = _M( vdec_IDCT );
- F.pf_norm_scan = vdec_NormScan;
- F.pf_decode_init = _M( vdec_InitDecode );
- F.pf_addblock = _M( vdec_AddBlock );
- F.pf_copyblock = _M( vdec_CopyBlock );
-#undef F
-}
-
/*****************************************************************************
* idct_Probe: returns a preference score
*****************************************************************************/
}
/*****************************************************************************
- * vdec_NormScan : Unused in this IDCT
+ * NormScan : Unused in this IDCT
*****************************************************************************/
-static void vdec_NormScan( u8 ppi_scan[2][64] )
+static void NormScan( u8 ppi_scan[2][64] )
{
}
/*****************************************************************************
- * vdec_IDCT : IDCT function for normal matrices
+ * IDCT : IDCT function for normal matrices
*****************************************************************************/
-void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block,
- int i_idontcare )
+static __inline__ void IDCT( dctelem_t * p_block )
{
s32 tmp0, tmp1, tmp2, tmp3;
s32 tmp10, tmp11, tmp12, tmp13;
}
}
+#include "idct_sparse.h"
+#include "idct_decl.h"
/*****************************************************************************
- * vdec_idct.h : macros for the inverse discrete cosine transform
+ * idct.h : macros for the inverse discrete cosine transform
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vdec_idct.h,v 1.3 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idct.h,v 1.5 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
* Christophe Massiot <massiot@via.ecp.fr>
#define MULTIPLY(var,const) ((var) * (const))
#endif
-/*****************************************************************************
- * Protoypes
- *****************************************************************************/
-void _M( vdec_SparseIDCT ) ( void *, dctelem_t * p_block, int i_sparse_pos );
-void _M( vdec_InitIDCT ) ( void ** );
-void _M( vdec_IDCT ) ( void *, dctelem_t * p_block, int i_idontcare );
-void _M( vdec_InitDecode ) ( );
-void _M( vdec_AddBlock ) ( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr );
-void _M( vdec_CopyBlock ) ( dctelem_t * p_block, yuv_data_t * p_data,
- int i_incr );
--- /dev/null
+/*****************************************************************************
+ * idct_decl.h : common declarations, must be included at the very end
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: idct_decl.h,v 1.1 2001/09/05 16:07:49 massiot Exp $
+ *
+ * Author: Christophe Massiot <massiot@via.ecp.fr>
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Final declarations
+ *****************************************************************************/
+static void IDCTCopy( dctelem_t * p_block, yuv_data_t * p_dest,
+ int i_stride, void * p_unused, int i_unused )
+{
+ IDCT( p_block );
+ CopyBlock( p_block, p_dest, i_stride );
+}
+
+static void IDCTAdd( dctelem_t * p_block, yuv_data_t * p_dest,
+ int i_stride, void * p_unused, int i_unused )
+{
+ IDCT( p_block );
+ AddBlock( p_block, p_dest, i_stride );
+}
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+static void idct_getfunctions( function_list_t * p_function_list )
+{
+ p_function_list->pf_probe = idct_Probe;
+#define F p_function_list->functions.idct
+ F.pf_idct_init = InitIDCT;
+ F.pf_norm_scan = NormScan;
+ F.pf_sparse_idct_add = SparseIDCTAdd;
+ F.pf_sparse_idct_copy = SparseIDCTCopy;
+ F.pf_idct_add = IDCTAdd;
+ F.pf_idct_copy = IDCTCopy;
+#undef F
+}
+
/*****************************************************************************
- * vdec_idct.c : common IDCT functions
+ * idct_sparse.h : Sparse IDCT functions (must be include at the end)
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vdec_idct.c,v 1.4 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idct_sparse.h,v 1.1 2001/09/05 16:07:49 massiot Exp $
*
- * Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
+ * Author: Gaël Hendryckx <jimmy@via.ecp.fr>
*
* 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
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
-/* MODULE_NAME defined in Makefile together with -DBUILTIN */
-#ifdef BUILTIN
-# include "modules_inner.h"
-#else
-# define _M( foo ) foo
-#endif
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "defs.h"
-
-#include <stdlib.h> /* malloc() */
-#include <string.h> /* memcpy(), memset() */
-
-#include "config.h"
-#include "common.h"
-#include "threads.h"
-#include "mtime.h"
-
-#include "video.h"
-#include "video_output.h"
-
-#include "modules.h"
-
-#include "vdec_idct.h"
-
/*****************************************************************************
- * vdec_InitIDCT : initialize datas for vdec_SparseIDCT
+ * InitIDCT : initialize data for SparseIDCT
*****************************************************************************/
-void _M( vdec_InitIDCT ) ( void ** pp_idct_data )
+static void InitIDCT ( void ** pp_idct_data )
{
int i;
dctelem_t * p_pre;
for( i = 0 ; i < 64 ; i++ )
{
p_pre[i*64+i] = 1 << SPARSE_SCALE_FACTOR;
- _M( vdec_IDCT )( NULL, &p_pre[i*64], 0) ;
+ IDCT( &p_pre[i*64] ) ;
}
- return;
+
+ InitBlock();
}
/*****************************************************************************
- * vdec_SparseIDCT : IDCT function for sparse matrices
+ * SparseIDCT : IDCT function for sparse matrices
*****************************************************************************/
-void _M( vdec_SparseIDCT ) ( void * p_idct_data,
- dctelem_t * p_block, int i_sparse_pos )
+static __inline__ void SparseIDCT( dctelem_t * p_block, void * p_idct_data,
+ int i_sparse_pos )
{
short int val;
int * dp;
p_dest += 16;
p_source += 16;
}
- return;
}
+/*****************************************************************************
+ * Final declarations
+ *****************************************************************************/
+static void SparseIDCTCopy( dctelem_t * p_block, yuv_data_t * p_dest,
+ int i_stride, void * p_idct_data, int i_sparse_pos )
+{
+ SparseIDCT( p_block, p_idct_data, i_sparse_pos );
+ CopyBlock( p_block, p_dest, i_stride );
+}
+
+static void SparseIDCTAdd( dctelem_t * p_block, yuv_data_t * p_dest,
+ int i_stride, void * p_idct_data, int i_sparse_pos )
+{
+ SparseIDCT( p_block, p_idct_data, i_sparse_pos );
+ AddBlock( p_block, p_dest, i_stride );
+}
--- /dev/null
+#*****************************************************************************
+# idctaltivec.S : Altivec IDCT code
+#*****************************************************************************
+# Copyright (C) 1999, 2001 VideoLAN
+# $Id: idctaltivec.S,v 1.1 2001/09/05 16:07:49 massiot Exp $
+#
+# Author: Paul Mackerras <paulus@linuxcare.com>
+#
+# 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.
+#*****************************************************************************/
+
+ .data
+ .align 4
+wvec: .long 0x3f0a8bd4
+ .long 0x3e8d42af
+ .long 0x3f3504f3
+ .long 0x3f968317
+ .long 0x3f8e39da
+ .long 0x3fd4db31
+ .long 0x3ec7c5c2
+ .long 0x3ffb14be
+ .long 0x3f43ef15
+ .long 0x3fec835e
+ .long 0
+ .long 0
+
+d: .long 0,0,0,0
+
+ .text
+ .globl idct_block_copy_altivec
+idct_block_copy_altivec:
+ li 6,0
+ b idct_asm_altivec
+
+ .global idct_block_add_altivec
+idct_block_add_altivec:
+ li 6,1
+
+ .globl idct_asm_altivec
+idct_asm_altivec:
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 0,20,3 # x00 = vec_ctf(i0, 3);
+ vcfsx 10,21,3 # x01 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 1,20,3 # x10 = vec_ctf(i0, 3);
+ vcfsx 11,21,3 # x11 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 2,20,3 # x20 = vec_ctf(i0, 3);
+ vcfsx 12,21,3 # x21 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 3,20,3 # x30 = vec_ctf(i0, 3);
+ vcfsx 13,21,3 # x31 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 4,20,3 # x40 = vec_ctf(i0, 3);
+ vcfsx 14,21,3 # x41 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 5,20,3 # x50 = vec_ctf(i0, 3);
+ vcfsx 15,21,3 # x51 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ addi 3,3,16 # p += 8;
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 6,20,3 # x60 = vec_ctf(i0, 3);
+ vcfsx 16,21,3 # x61 = vec_ctf(i1, 3);
+ lvx 22,0,3 # ih = *(vector signed short *)(p);
+ vupkhsh 20,22 # i0 = vec_unpackh(ih);
+ vupklsh 21,22 # i1 = vec_unpackl(ih);
+ vcfsx 7,20,3 # x70 = vec_ctf(i0, 3);
+ vcfsx 17,21,3 # x71 = vec_ctf(i1, 3);
+
+ vmrghw 8,0,2 # x80 = vec_mergeh(x00, x20);
+ vmrghw 9,1,3 # x90 = vec_mergeh(x10, x30);
+ vmrglw 18,0,2 # x81 = vec_mergel(x00, x20);
+ vmrglw 19,1,3 # x91 = vec_mergel(x10, x30);
+ vmrghw 0,8,9 # x00 = vec_mergeh(x80, x90);
+ vmrglw 1,8,9 # x10 = vec_mergel(x80, x90);
+ vmrghw 2,18,19 # x20 = vec_mergeh(x81, x91);
+ vmrglw 3,18,19 # x30 = vec_mergel(x81, x91);
+
+ vmrghw 8,10,12 # x80 = vec_mergeh(x01, x21);
+ vmrghw 9,11,13 # x90 = vec_mergeh(x11, x31);
+ vmrglw 18,10,12 # x81 = vec_mergel(x01, x21);
+ vmrglw 19,11,13 # x91 = vec_mergel(x11, x31);
+ vmrghw 20,4,6 # y80 = vec_mergeh(x40, x60);
+ vmrghw 22,5,7 # y90 = vec_mergeh(x50, x70);
+ vmrglw 21,4,6 # y81 = vec_mergel(x40, x60);
+ vmrglw 23,5,7 # y91 = vec_mergel(x50, x70);
+ vmrghw 4,8,9 # x40 = vec_mergeh(x80, x90);
+ vmrglw 5,8,9 # x50 = vec_mergel(x80, x90);
+ vmrghw 6,18,19 # x60 = vec_mergeh(x81, x91);
+ vmrglw 7,18,19 # x70 = vec_mergel(x81, x91);
+ vmrghw 10,20,22 # x01 = vec_mergeh(y80, y90);
+ vmrglw 11,20,22 # x11 = vec_mergel(y80, y90);
+ vmrghw 12,21,23 # x21 = vec_mergeh(y81, y91);
+ vmrglw 13,21,23 # x31 = vec_mergel(y81, y91);
+
+ vmrghw 20,14,16 # y80 = vec_mergeh(x41, x61);
+ vmrghw 22,15,17 # y90 = vec_mergeh(x51, x71);
+ vmrglw 21,14,16 # y81 = vec_mergel(x41, x61);
+ vmrglw 23,15,17 # y91 = vec_mergel(x51, x71);
+ vmrghw 14,20,22 # x41 = vec_mergeh(y80, y90);
+ vmrglw 15,20,22 # x51 = vec_mergel(y80, y90);
+ vmrghw 16,21,23 # x61 = vec_mergeh(y81, y91);
+ vmrglw 17,21,23 # x71 = vec_mergel(y81, y91);
+
+ lis 7,wvec@ha
+ addi 7,7,wvec@l
+ addi 8,7,16
+ addi 9,7,32
+ lvx 28,0,7 # *(vector float *)wvec2;
+ lvx 29,0,8 # *(vector float *)wvec3;
+ lvx 30,0,9 # *(vector float *)wvec4;
+
+ vspltw 20,28,3 # W3 = vec_splat(wvec2, 3);
+ vspltw 21,28,1 # W7 = vec_splat(wvec2, 1);
+ vspltw 22,29,0 # W1_W7 = vec_splat(wvec3, 0);
+ vspltw 23,29,1 # W1pW7 = vec_splat(wvec3, 1);
+ vspltw 24,29,2 # W3_W5 = vec_splat(wvec3, 2);
+ vspltw 25,29,3 # W3pW5 = vec_splat(wvec3, 3);
+ vspltisw 31,0 # z = (vector float)(0);
+
+ # /* first stage */
+ vaddfp 26,1,7
+ vmaddfp 8,21,26,31 # x80 = vec_madd(W7, vec_add(x10, x70), z);
+ vaddfp 27,11,17
+ vmaddfp 18,21,27,31 # x81 = vec_madd(W7, vec_add(x11, x71), z);
+ vmaddfp 1,22,1,8 # x10 = vec_madd(W1_W7, x10, x80);
+ vmaddfp 11,22,11,18 # x11 = vec_madd(W1_W7, x11, x81);
+ vnmsubfp 7,23,7,8 # x70 = vec_nmsub(W1pW7, x70, x80);
+ vnmsubfp 17,23,17,18 # x71 = vec_nmsub(W1pW7, x71, x81);
+ vaddfp 26,5,3
+ vmaddfp 8,20,26,31 # x80 = vec_madd(W3, vec_add(x50, x30), z);
+ vaddfp 27,15,13
+ vmaddfp 18,20,27,31 # x81 = vec_madd(W3, vec_add(x51, x31), z);
+ vnmsubfp 5,24,5,8 # x50 = vec_nmsub(W3_W5, x50, x80);
+ vnmsubfp 15,24,15,18 # x51 = vec_nmsub(W3_W5, x51, x81);
+ vnmsubfp 3,25,3,8 # x30 = vec_nmsub(W3pW5, x30, x80);
+ vnmsubfp 13,25,13,18 # x31 = vec_nmsub(W3pW5, x31, x81);
+
+ vspltw 20,28,0 # W6 = vec_splat(wvec2, 0);
+ vspltw 21,30,0 # W2_W6 = vec_splat(wvec4, 0);
+ vspltw 22,30,1 # W2pW6 = vec_splat(wvec4, 1);
+ vspltw 23,28,2 # SQRT0_5 = vec_splat(wvec2, 2);
+
+ # /* second stage */
+ vaddfp 8,0,4 # x80 = vec_add(x00, x40);
+ vaddfp 18,10,14 # x81 = vec_add(x01, x41);
+ vsubfp 0,0,4 # x00 = vec_sub(x00, x40);
+ vsubfp 10,10,14 # x01 = vec_sub(x01, x41);
+ vaddfp 26,2,6
+ vmaddfp 4,20,26,31 # x40 = vec_madd(W6, vec_add(x20, x60), z);
+ vaddfp 27,12,16
+ vmaddfp 14,20,27,31 # x41 = vec_madd(W6, vec_add(x21, x61), z);
+ vnmsubfp 6,22,6,4 # x60 = vec_nmsub(W2pW6, x60, x40);
+ vnmsubfp 16,22,16,14 # x61 = vec_nmsub(W2pW6, x61, x41);
+ vmaddfp 2,21,2,4 # x20 = vec_madd(W2_W6, x20, x40);
+ vmaddfp 12,21,12,14 # x21 = vec_madd(W2_W6, x21, x41);
+ vaddfp 4,1,5 # x40 = vec_add(x10, x50);
+ vaddfp 14,11,15 # x41 = vec_add(x11, x51);
+ vsubfp 1,1,5 # x10 = vec_sub(x10, x50);
+ vsubfp 11,11,15 # x11 = vec_sub(x11, x51);
+ vaddfp 5,7,3 # x50 = vec_add(x70, x30);
+ vaddfp 15,17,13 # x51 = vec_add(x71, x31);
+ vsubfp 7,7,3 # x70 = vec_sub(x70, x30);
+ vsubfp 17,17,13 # x71 = vec_sub(x71, x31);
+
+ # /* third stage */
+ vaddfp 3,8,2 # x30 = vec_add(x80, x20);
+ vaddfp 13,18,12 # x31 = vec_add(x81, x21);
+ vsubfp 8,8,2 # x80 = vec_sub(x80, x20);
+ vsubfp 18,18,12 # x81 = vec_sub(x81, x21);
+ vaddfp 2,0,6 # x20 = vec_add(x00, x60);
+ vaddfp 12,10,16 # x21 = vec_add(x01, x61);
+ vsubfp 0,0,6 # x00 = vec_sub(x00, x60);
+ vsubfp 10,10,16 # x01 = vec_sub(x01, x61);
+ vaddfp 24,1,7
+ vmaddfp 6,23,24,31 # x60 = vec_madd(SQRT0_5, vec_add(x10, x70), z);
+ vaddfp 25,11,17
+ vmaddfp 16,23,25,31 # x61 = vec_madd(SQRT0_5, vec_add(x11, x71), z);
+ vsubfp 26,1,7
+ vmaddfp 1,23,26,31 # x10 = vec_madd(SQRT0_5, vec_sub(x10, x70), z);
+ vsubfp 27,11,17
+ vmaddfp 11,23,27,31 # x11 = vec_madd(SQRT0_5, vec_sub(x11, x71), z);
+
+ # /* fourth stage */
+ vsubfp 7,3,4 # x70 = vec_sub(x30, x40);
+ vsubfp 17,13,14 # x71 = vec_sub(x31, x41);
+ vaddfp 9,3,4 # x90 = vec_add(x30, x40);
+ vaddfp 19,13,14 # x91 = vec_add(x31, x41);
+ vaddfp 3,8,5 # x30 = vec_add(x80, x50);
+ vaddfp 13,18,15 # x31 = vec_add(x81, x51);
+ vsubfp 4,8,5 # x40 = vec_sub(x80, x50);
+ vsubfp 14,18,15 # x41 = vec_sub(x81, x51);
+ vsubfp 5,0,1 # x50 = vec_sub(x00, x10);
+ vsubfp 15,10,11 # x51 = vec_sub(x01, x11);
+ vaddfp 8,0,1 # x80 = vec_add(x00, x10);
+ vaddfp 18,10,11 # x81 = vec_add(x01, x11);
+ vaddfp 1,2,6 # x10 = vec_add(x20, x60);
+ vaddfp 11,12,16 # x11 = vec_add(x21, x61);
+ vsubfp 6,2,6 # x60 = vec_sub(x20, x60);
+ vsubfp 16,12,16 # x61 = vec_sub(x21, x61);
+ # /* x0* is now in x9*, x2* is in x8* */
+
+ vmrghw 20,9,8 # y80 = vec_mergeh(x90, x80);
+ vmrghw 22,1,3 # y90 = vec_mergeh(x10, x30);
+ vmrglw 21,9,8 # y81 = vec_mergel(x90, x80);
+ vmrglw 23,1,3 # y91 = vec_mergel(x10, x30);
+ vmrghw 0,20,22 # x00 = vec_mergeh(y80, y90);
+ vmrglw 1,20,22 # x10 = vec_mergel(y80, y90);
+ vmrghw 2,21,23 # x20 = vec_mergeh(y81, y91);
+ vmrglw 3,21,23 # x30 = vec_mergel(y81, y91);
+
+ vmrghw 8,19,18 # x80 = vec_mergeh(x91, x81);
+ vmrghw 9,11,13 # x90 = vec_mergeh(x11, x31);
+ vmrglw 18,19,18 # x81 = vec_mergel(x91, x81);
+ vmrglw 19,11,13 # x91 = vec_mergel(x11, x31);
+ vmrghw 20,4,6 # y80 = vec_mergeh(x40, x60);
+ vmrghw 22,5,7 # y90 = vec_mergeh(x50, x70);
+ vmrglw 21,4,6 # y81 = vec_mergel(x40, x60);
+ vmrglw 23,5,7 # y91 = vec_mergel(x50, x70);
+ vmrghw 4,8,9 # x40 = vec_mergeh(x80, x90);
+ vmrglw 5,8,9 # x50 = vec_mergel(x80, x90);
+ vmrghw 6,18,19 # x60 = vec_mergeh(x81, x91);
+ vmrglw 7,18,19 # x70 = vec_mergel(x81, x91);
+ vmrghw 10,20,22 # x01 = vec_mergeh(y80, y90);
+ vmrglw 11,20,22 # x11 = vec_mergel(y80, y90);
+ vmrghw 12,21,23 # x21 = vec_mergeh(y81, y91);
+ vmrglw 13,21,23 # x31 = vec_mergel(y81, y91);
+
+ vmrghw 20,14,16 # y80 = vec_mergeh(x41, x61);
+ vmrghw 22,15,17 # y90 = vec_mergeh(x51, x71);
+ vmrglw 21,14,16 # y81 = vec_mergel(x41, x61);
+ vmrglw 23,15,17 # y91 = vec_mergel(x51, x71);
+ vmrghw 14,20,22 # x41 = vec_mergeh(y80, y90);
+ vmrglw 15,20,22 # x51 = vec_mergel(y80, y90);
+ vmrghw 16,21,23 # x61 = vec_mergeh(y81, y91);
+ vmrglw 17,21,23 # x71 = vec_mergel(y81, y91);
+
+ vspltw 20,28,3 # W3 = vec_splat(wvec2, 3);
+ vspltw 21,28,1 # W7 = vec_splat(wvec2, 1);
+ vspltw 22,29,0 # W1_W7 = vec_splat(wvec3, 0);
+ vspltw 23,29,1 # W1pW7 = vec_splat(wvec3, 1);
+ vspltw 24,29,2 # W3_W5 = vec_splat(wvec3, 2);
+ vspltw 25,29,3 # W3pW5 = vec_splat(wvec3, 3);
+
+ # /* first stage */
+ vaddfp 26,1,7
+ vmaddfp 8,21,26,31 # x80 = vec_madd(W7, vec_add(x10, x70), z);
+ vaddfp 27,11,17
+ vmaddfp 18,21,27,31 # x81 = vec_madd(W7, vec_add(x11, x71), z);
+ vmaddfp 1,22,1,8 # x10 = vec_madd(W1_W7, x10, x80);
+ vmaddfp 11,22,11,18 # x11 = vec_madd(W1_W7, x11, x81);
+ vnmsubfp 7,23,7,8 # x70 = vec_nmsub(W1pW7, x70, x80);
+ vnmsubfp 17,23,17,18 # x71 = vec_nmsub(W1pW7, x71, x81);
+ vaddfp 26,5,3
+ vmaddfp 8,20,26,31 # x80 = vec_madd(W3, vec_add(x50, x30), z);
+ vaddfp 27,15,13
+ vmaddfp 18,20,27,31 # x81 = vec_madd(W3, vec_add(x51, x31), z);
+ vnmsubfp 5,24,5,8 # x50 = vec_nmsub(W3_W5, x50, x80);
+ vnmsubfp 15,24,15,18 # x51 = vec_nmsub(W3_W5, x51, x81);
+ vnmsubfp 3,25,3,8 # x30 = vec_nmsub(W3pW5, x30, x80);
+ vnmsubfp 13,25,13,18 # x31 = vec_nmsub(W3pW5, x31, x81);
+
+ vspltw 20,28,0 # W6 = vec_splat(wvec2, 0);
+ vspltw 21,30,0 # W2_W6 = vec_splat(wvec4, 0);
+ vspltw 22,30,1 # W2pW6 = vec_splat(wvec4, 1);
+ vspltw 23,28,2 # SQRT0_5 = vec_splat(wvec2, 2);
+
+ # /* second stage */
+ vaddfp 8,0,4 # x80 = vec_add(x00, x40);
+ vaddfp 18,10,14 # x81 = vec_add(x01, x41);
+ vsubfp 0,0,4 # x00 = vec_sub(x00, x40);
+ vsubfp 10,10,14 # x01 = vec_sub(x01, x41);
+ vaddfp 26,2,6
+ vmaddfp 4,20,26,31 # x40 = vec_madd(W6, vec_add(x20, x60), z);
+ vaddfp 27,12,16
+ vmaddfp 14,20,27,31 # x41 = vec_madd(W6, vec_add(x21, x61), z);
+ vnmsubfp 6,22,6,4 # x60 = vec_nmsub(W2pW6, x60, x40);
+ vnmsubfp 16,22,16,14 # x61 = vec_nmsub(W2pW6, x61, x41);
+ vmaddfp 2,21,2,4 # x20 = vec_madd(W2_W6, x20, x40);
+ vmaddfp 12,21,12,14 # x21 = vec_madd(W2_W6, x21, x41);
+ vaddfp 4,1,5 # x40 = vec_add(x10, x50);
+ vaddfp 14,11,15 # x41 = vec_add(x11, x51);
+ vsubfp 1,1,5 # x10 = vec_sub(x10, x50);
+ vsubfp 11,11,15 # x11 = vec_sub(x11, x51);
+ vaddfp 5,7,3 # x50 = vec_add(x70, x30);
+ vaddfp 15,17,13 # x51 = vec_add(x71, x31);
+ vsubfp 7,7,3 # x70 = vec_sub(x70, x30);
+ vsubfp 17,17,13 # x71 = vec_sub(x71, x31);
+
+ # /* third stage */
+ vaddfp 3,8,2 # x30 = vec_add(x80, x20);
+ vaddfp 13,18,12 # x31 = vec_add(x81, x21);
+ vsubfp 8,8,2 # x80 = vec_sub(x80, x20);
+ vsubfp 18,18,12 # x81 = vec_sub(x81, x21);
+ vaddfp 2,0,6 # x20 = vec_add(x00, x60);
+ vaddfp 12,10,16 # x21 = vec_add(x01, x61);
+ vsubfp 0,0,6 # x00 = vec_sub(x00, x60);
+ vsubfp 10,10,16 # x01 = vec_sub(x01, x61);
+ vaddfp 24,1,7
+ vmaddfp 6,23,24,31 # x60 = vec_madd(SQRT0_5, vec_add(x10, x70), z);
+ vaddfp 25,11,17
+ vmaddfp 16,23,25,31 # x61 = vec_madd(SQRT0_5, vec_add(x11, x71), z);
+ vsubfp 26,1,7
+ vmaddfp 1,23,26,31 # x10 = vec_madd(SQRT0_5, vec_sub(x10, x70), z);
+ vsubfp 27,11,17
+ vmaddfp 11,23,27,31 # x11 = vec_madd(SQRT0_5, vec_sub(x11, x71), z);
+
+ # /* fourth stage */
+ vsubfp 7,3,4 # x70 = vec_sub(x30, x40);
+ vsubfp 17,13,14 # x71 = vec_sub(x31, x41);
+ vaddfp 9,3,4 # x90 = vec_add(x30, x40);
+ vaddfp 19,13,14 # x91 = vec_add(x31, x41);
+ vaddfp 3,8,5 # x30 = vec_add(x80, x50);
+ vaddfp 13,18,15 # x31 = vec_add(x81, x51);
+ vsubfp 4,8,5 # x40 = vec_sub(x80, x50);
+ vsubfp 14,18,15 # x41 = vec_sub(x81, x51);
+ vsubfp 5,0,1 # x50 = vec_sub(x00, x10);
+ vsubfp 15,10,11 # x51 = vec_sub(x01, x11);
+ vaddfp 8,0,1 # x80 = vec_add(x00, x10);
+ vaddfp 18,10,11 # x81 = vec_add(x01, x11);
+ vaddfp 1,2,6 # x10 = vec_add(x20, x60);
+ vaddfp 11,12,16 # x11 = vec_add(x21, x61);
+ vsubfp 6,2,6 # x60 = vec_sub(x20, x60);
+ vsubfp 16,12,16 # x61 = vec_sub(x21, x61);
+ # /* x0* is now in x9*, x2* is in x8* */
+
+ cmpwi 6,0
+ lis 6,d@ha
+ addi 6,6,d@l
+ vctsxs 20,9,0 # i0 = vec_cts(x90, 0);
+ vctsxs 21,19,0 # i1 = vec_cts(x91, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,1,0 # i0 = vec_cts(x10, 0);
+ vctsxs 21,11,0 # i1 = vec_cts(x11, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,8,0 # i0 = vec_cts(x80, 0);
+ vctsxs 21,18,0 # i1 = vec_cts(x81, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,3,0 # i0 = vec_cts(x30, 0);
+ vctsxs 21,13,0 # i1 = vec_cts(x31, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,4,0 # i0 = vec_cts(x40, 0);
+ vctsxs 21,14,0 # i1 = vec_cts(x41, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,5,0 # i0 = vec_cts(x50, 0);
+ vctsxs 21,15,0 # i1 = vec_cts(x51, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,6,0 # i0 = vec_cts(x60, 0);
+ vctsxs 21,16,0 # i1 = vec_cts(x61, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+ add 4,4,5 # dest += stride;
+ vctsxs 20,7,0 # i0 = vec_cts(x70, 0);
+ vctsxs 21,17,0 # i1 = vec_cts(x71, 0);
+ vpkswss 22,20,21 # ih = vec_packs(i0, i1);
+ beq 1f # if (accum) {
+ lfd 0,0(4)
+ stfd 0,0(6) # *(long long *)&d = *(long long *)dest;
+ lvx 24,0,6
+ vmrghb 23,31,24 # dh = (vector signed short) vec_mergeh(zb, d);
+ vaddshs 22,23,22 # ih = vec_adds(dh, ih);
+1: # }
+ vpkshus 24,22,31
+ stvx 24,0,6 # d = vec_packsu(ih, zh);
+ lfd 0,0(6)
+ stfd 0,0(4) # *(long long *)dest = *(long long *)&d;
+
+ blr
* idctaltivec.c : Altivec IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctaltivec.c,v 1.11 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idctaltivec.c,v 1.12 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
#include "mtime.h"
#include "tests.h" /* TestCPU() */
-#include "vdec_idct.h"
-
-#include "idctaltivec.h"
+#include "idct.h"
#include "modules.h"
#include "modules_export.h"
* Local prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
-static int idct_Probe ( probedata_t *p_data );
-static void vdec_NormScan ( u8 ppi_scan[2][64] );
+void idct_block_copy_altivec( dctelem_t *, yuv_data_t *, int, void *, int );
+void idct_block_add_altivec( dctelem_t *, yuv_data_t *, int, void *, int );
/*****************************************************************************
* Build configuration tree.
/* Following functions are local */
-/*****************************************************************************
- * Functions exported as capabilities.
- *****************************************************************************/
-static void idct_getfunctions( function_list_t * p_function_list )
-{
- p_function_list->pf_probe = idct_Probe;
-#define F p_function_list->functions.idct
- F.pf_idct_init = _M( vdec_InitIDCT );
- F.pf_sparse_idct = _M( vdec_SparseIDCT );
- F.pf_idct = _M( vdec_IDCT );
- F.pf_norm_scan = vdec_NormScan;
- F.pf_decode_init = _M( vdec_InitDecode );
- F.pf_addblock = _M( vdec_AddBlock );
- F.pf_copyblock = _M( vdec_CopyBlock );
-#undef F
-}
-
/*****************************************************************************
* idct_Probe: return a preference score
*****************************************************************************/
return( 999 );
}
- /* The Altivec iDCT is deactivated until it really works */
- return( 0 /* 200 */ );
+ return( 200 );
}
/*****************************************************************************
- * vdec_NormScan : Soon, transpose
+ * Placeholders for unused functions
*****************************************************************************/
-static void vdec_NormScan( u8 ppi_scan[2][64] )
+static void NormScan( u8 ppi_scan[2][64] )
{
}
+static void InitIDCT( void * p_idct_data )
+{
+}
+
+
/*****************************************************************************
- * vdec_IDCT :
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
*****************************************************************************/
-void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block,
- int i_idontcare )
+static void idct_getfunctions( function_list_t * p_function_list )
{
- IDCT( p_block, p_block );
+ p_function_list->pf_probe = idct_Probe;
+#define F p_function_list->functions.idct
+ F.pf_idct_init = InitIDCT;
+ F.pf_norm_scan = NormScan;
+ /* FIXME : it would be a nice idea to use sparse IDCT functions */
+ F.pf_sparse_idct_add = idct_block_add_altivec;
+ F.pf_sparse_idct_copy = idct_block_copy_altivec;
+ F.pf_idct_add = idct_block_add_altivec;
+ F.pf_idct_copy = idct_block_copy_altivec;
+#undef F
}
+++ /dev/null
-/***************************************************************
- *
- * Copyright: (c) Copyright Motorola Inc. 1998
- *
- * Date: April 17, 1998
- *
- * Function: Matrix_Transpose
- *
- * Description: The following Matrix Transpose is adapted
- * from an algorithm developed by Brett Olsson
- * from IBM. It performs a 8x8 16-bit element
- * full matrix transpose.
- *
- * Inputs: array elements stored in input
- * input[0] = [ 00 01 02 03 04 05 06 07 ]
- * input[1] = [ 10 11 12 13 14 15 16 17 ]
- * input[2] = [ 20 21 22 23 24 25 26 27 ]
- * input[3] = [ 30 31 32 33 34 35 36 37 ]
- * input[4] = [ 40 41 42 43 44 45 46 47 ]
- * input[5] = [ 50 51 52 53 54 55 56 57 ]
- * input[6] = [ 60 61 62 63 64 65 66 67 ]
- * input[7] = [ 70 71 72 73 74 75 76 77 ]
- *
- * Outputs: transposed elements in output
- *
- **************************************************************/
-
-static __inline__ void Matrix_Transpose ( vector signed short *input,
- vector signed short *output )
-{
- vector signed short a0, a1, a2, a3, a4, a5, a6, a7;
- vector signed short b0, b1, b2, b3, b4, b5, b6, b7;
-
- b0 = vec_mergeh( input[0], input[4] ); /* [ 00 40 01 41 02 42 03 43 ]*/
- b1 = vec_mergel( input[0], input[4] ); /* [ 04 44 05 45 06 46 07 47 ]*/
- b2 = vec_mergeh( input[1], input[5] ); /* [ 10 50 11 51 12 52 13 53 ]*/
- b3 = vec_mergel( input[1], input[5] ); /* [ 14 54 15 55 16 56 17 57 ]*/
- b4 = vec_mergeh( input[2], input[6] ); /* [ 20 60 21 61 22 62 23 63 ]*/
- b5 = vec_mergel( input[2], input[6] ); /* [ 24 64 25 65 26 66 27 67 ]*/
- b6 = vec_mergeh( input[3], input[7] ); /* [ 30 70 31 71 32 72 33 73 ]*/
- b7 = vec_mergel( input[3], input[7] ); /* [ 34 74 35 75 36 76 37 77 ]*/
-
- a0 = vec_mergeh( b0, b4 ); /* [ 00 20 40 60 01 21 41 61 ]*/
- a1 = vec_mergel( b0, b4 ); /* [ 02 22 42 62 03 23 43 63 ]*/
- a2 = vec_mergeh( b1, b5 ); /* [ 04 24 44 64 05 25 45 65 ]*/
- a3 = vec_mergel( b1, b5 ); /* [ 06 26 46 66 07 27 47 67 ]*/
- a4 = vec_mergeh( b2, b6 ); /* [ 10 30 50 70 11 31 51 71 ]*/
- a5 = vec_mergel( b2, b6 ); /* [ 12 32 52 72 13 33 53 73 ]*/
- a6 = vec_mergeh( b3, b7 ); /* [ 14 34 54 74 15 35 55 75 ]*/
- a7 = vec_mergel( b3, b7 ); /* [ 16 36 56 76 17 37 57 77 ]*/
-
- output[0] = vec_mergeh( a0, a4 ); /* [ 00 10 20 30 40 50 60 70 ]*/
- output[1] = vec_mergel( a0, a4 ); /* [ 01 11 21 31 41 51 61 71 ]*/
- output[2] = vec_mergeh( a1, a5 ); /* [ 02 12 22 32 42 52 62 72 ]*/
- output[3] = vec_mergel( a1, a5 ); /* [ 03 13 23 33 43 53 63 73 ]*/
- output[4] = vec_mergeh( a2, a6 ); /* [ 04 14 24 34 44 54 64 74 ]*/
- output[5] = vec_mergel( a2, a6 ); /* [ 05 15 25 35 45 55 65 75 ]*/
- output[6] = vec_mergeh( a3, a7 ); /* [ 06 16 26 36 46 56 66 76 ]*/
- output[7] = vec_mergel( a3, a7 ); /* [ 07 17 27 37 47 57 67 77 ]*/
-
-}
-
-
-/***************************************************************
- *
- * Copyright: (c) Copyright Motorola Inc. 1998
- *
- * Date: April 20, 1998
- *
- * Macro: IDCT_Transform
- *
- * Description: Discrete Cosign Transform implemented by the
- * Scaled Chen (III) Algorithm developed by Haifa
- * Research Lab. The major difference between this
- * algorithm and the Scaled Chen (I) is that
- * certain multiply-subtracts are replaced by
- * multiply adds. A full description of the
- * Scaled Chen (I) algorithm can be found in:
- * W.C.Chen, C.H.Smith and S.C.Fralick, "A Fast
- * Computational Algorithm for the Discrete Cosine
- * Transform", IEEE Transactions on Commnuications,
- * Vol. COM-25, No. 9, pp 1004-1009, Sept. 1997.
- *
- * Inputs: vx : array of vector short
- * t1-t10 : temporary vector variables set up by caller
- * c4 : cos(4*pi/16)
- * mc4 : -c4
- * a0 : c6/c2
- * a1 : c7/c1
- * a2 : c5/c3
- * ma2 : -a2
- * zero : an array of zero elements
- *
- * Outputs: vy : array of vector short
- *
- **************************************************************/
-
-#define IDCT_Transform(vx,vy) \
- \
- /* 1st stage. */ \
- t9 = vec_mradds( a1, vx[1], zero ); /* t8 = (a1) * x1 - x7 */ \
- t8 = vec_subs( t9, vx[7]); \
- t1 = vec_mradds( a1, vx[7], vx[1] ); /* t1 = (a1) * x7 + x1 */ \
- t7 = vec_mradds( a2, vx[5], vx[3] ); /* t7 = (a2) * x5 + x3 */ \
- t3 = vec_mradds( ma2, vx[3], vx[5] );/* t3 = (-a2) * x5 + x3 */ \
- \
- /* 2nd stage */ \
- t5 = vec_adds( vx[0], vx[4] ); /* t5 = x0 + x4 */ \
- t0 = vec_subs( vx[0], vx[4] ); /* t0 = x0 - x4 */ \
- t9 = vec_mradds( a0, vx[2], zero ); /* t4 = (a0) * x2 - x6 */ \
- t4 = vec_subs( t9, vx[6] ); \
- t2 = vec_mradds( a0, vx[6], vx[2] ); /* t2 = (a0) * x6 + x2 */ \
- \
- t6 = vec_adds( t8, t3 ); /* t6 = t8 + t3 */ \
- t3 = vec_subs( t8, t3 ); /* t3 = t8 - t3 */ \
- t8 = vec_subs( t1, t7 ); /* t8 = t1 - t7 */ \
- t1 = vec_adds( t1, t7 ); /* t1 = t1 + t7 */ \
- \
- /* 3rd stage. */ \
- t7 = vec_adds( t5, t2 ); /* t7 = t5 + t2 */ \
- t2 = vec_subs( t5, t2 ); /* t2 = t5 - t2 */ \
- t5 = vec_adds( t0, t4 ); /* t5 = t0 + t4 */ \
- t0 = vec_subs( t0, t4 ); /* t0 = t0 - t4 */ \
- \
- t4 = vec_subs( t8, t3 ); /* t4 = t8 - t3 */ \
- t3 = vec_adds( t8, t3 ); /* t3 = t8 + t3 */ \
- \
- /* 4th stage. */ \
- vy[0] = vec_adds( t7, t1 ); /* y0 = t7 + t1 */ \
- vy[7] = vec_subs( t7, t1 ); /* y7 = t7 - t1 */ \
- vy[1] = vec_mradds( c4, t3, t5 ); /* y1 = (c4) * t3 + t5 */ \
- vy[6] = vec_mradds( mc4, t3, t5 ); /* y6 = (-c4) * t3 + t5 */ \
- vy[2] = vec_mradds( c4, t4, t0 ); /* y2 = (c4) * t4 + t0 */ \
- vy[5] = vec_mradds( mc4, t4, t0 ); /* y5 = (-c4) * t4 + t0 */ \
- vy[3] = vec_adds( t2, t6 ); /* y3 = t2 + t6 */ \
- vy[4] = vec_subs( t2, t6 ); /* y4 = t2 - t6 */
-
-
-/* Pre-Scaling matrix -- scaled by 1 */
-static vector signed short PreScale[8] = {
- (vector signed short)( 4095, 5681, 5351, 4816, 4095, 4816, 5351, 5681 ),
- (vector signed short)( 5681, 7880, 7422, 6680, 5681, 6680, 7422, 7880 ),
- (vector signed short)( 5351, 7422, 6992, 6292, 5351, 6292, 6992, 7422 ),
- (vector signed short)( 4816, 6680, 6292, 5663, 4816, 5663, 6292, 6680 ),
- (vector signed short)( 4095, 5681, 5351, 4816, 4095, 4816, 5351, 5681 ),
- (vector signed short)( 4816, 6680, 6292, 5663, 4816, 5663, 6292, 6680 ),
- (vector signed short)( 5351, 7422, 6992, 6292, 5351, 6292, 6992, 7422 ),
- (vector signed short)( 5681, 7880, 7422, 6680, 5681, 6680, 7422, 7880 )
-};
-
-/***************************************************************
- *
- * Copyright: (c) Copyright Motorola Inc. 1998
- *
- * Date: April 17, 1998
- *
- * Function: IDCT
- *
- * Description: Scaled Chen (III) algorithm for IDCT
- * Arithmetic is 16-bit fixed point.
- *
- * Inputs: input - Pointer to input data (short), which
- * must be between -2048 to +2047.
- * It is assumed that the allocated array
- * has been 128-bit aligned and contains
- * 8x8 short elements.
- *
- * Outputs: output - Pointer to output area for the transfored
- * data. The output values are between -255
- * and 255 . It is assumed that a 128-bit
- * aligned 8x8 array of short has been
- * pre-allocated.
- *
- * Return: None
- *
- ***************************************************************/
-
-static __inline__ void IDCT(short *input, short *output) {
-
- vector signed short t0, t1, t2, t3, t4, t5, t6, t7, t8, t9;
- vector signed short a0, a1, a2, ma2, c4, mc4, zero;
- vector signed short vx[8], vy[8];
- vector signed short *vec_ptr; /* used for conversion between
- arrays of short and vector
- signed short array. */
-
-
- /* Load the multiplication constants. Note: these constants
- * could all be loaded directly ( like zero case ), but using the
- * SpecialConstants approach causes vsplth instructions to be
- * generated instead of lvx which is more efficient given the remainder
- * of the instruction mix.
- */
- vector signed short SpecialConstants =
- (vector signed short)( 23170, 13573, 6518, 21895, -23170, -21895, 0 , 0
-);
-
- c4 = vec_splat( SpecialConstants, 0 ); /* c4 = cos(4*pi/16) */
- a0 = vec_splat( SpecialConstants, 1 ); /* a0 = c6/c2 */
- a1 = vec_splat( SpecialConstants, 2 ); /* a1 = c7/c1 */
- a2 = vec_splat( SpecialConstants, 3 ); /* a2 = c5/c3 */
- mc4 = vec_splat( SpecialConstants, 4 ); /* -c4 */
- ma2 = vec_splat( SpecialConstants, 5 ); /* -a2 */
- zero = (vector signed short)(0);
-
- /* Load the rows of input data and Pre-Scale them. */
- vec_ptr = ( vector signed short * ) input;
- vx[0] = vec_mradds( vec_ptr[0], PreScale[0], zero );
- vx[1] = vec_mradds( vec_ptr[1], PreScale[1], zero );
- vx[2] = vec_mradds( vec_ptr[2], PreScale[2], zero );
- vx[3] = vec_mradds( vec_ptr[3], PreScale[3], zero );
- vx[4] = vec_mradds( vec_ptr[4], PreScale[4], zero );
- vx[5] = vec_mradds( vec_ptr[5], PreScale[5], zero );
- vx[6] = vec_mradds( vec_ptr[6], PreScale[6], zero );
- vx[7] = vec_mradds( vec_ptr[7], PreScale[7], zero );
-
- /* Perform IDCT first on the 8 columns */
- IDCT_Transform( vx, vy );
-
- /* Transpose matrix to work on rows */
- Matrix_Transpose( vy, vx );
-
- /* Perform IDCT next on the 8 rows */
- IDCT_Transform( vx, vy );
-
- /* Post-scale and store result. */
- vec_ptr = (vector signed short *) output;
- vec_ptr[0] = vy[0];
- vec_ptr[1] = vy[1];
- vec_ptr[2] = vy[2];
- vec_ptr[3] = vy[3];
- vec_ptr[4] = vy[4];
- vec_ptr[5] = vy[5];
- vec_ptr[6] = vy[6];
- vec_ptr[7] = vy[7];
-
-}
-
* idctclassic.c : Classic IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctclassic.c,v 1.14 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idctclassic.c,v 1.15 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Gaël Hendryckx <jimmy@via.ecp.fr>
*
#include "mtime.h"
#include "tests.h"
-#include "vdec_idct.h"
+#include "idct.h"
+#include "block_c.h"
#include "modules.h"
#include "modules_export.h"
* Local and extern prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
-static int idct_Probe ( probedata_t *p_data );
-static void vdec_NormScan ( u8 ppi_scan[2][64] );
-
/*****************************************************************************
* Build configuration tree.
/* 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 idct_getfunctions( function_list_t * p_function_list )
-{
- p_function_list->pf_probe = idct_Probe;
-#define F p_function_list->functions.idct
- F.pf_idct_init = _M( vdec_InitIDCT );
- F.pf_sparse_idct = _M( vdec_SparseIDCT );
- F.pf_idct = _M( vdec_IDCT );
- F.pf_norm_scan = vdec_NormScan;
- F.pf_decode_init = _M( vdec_InitDecode );
- F.pf_addblock = _M( vdec_AddBlock );
- F.pf_copyblock = _M( vdec_CopyBlock );
-#undef F
-}
-
/*****************************************************************************
* idct_Probe: returns a preference score
*****************************************************************************/
}
/*****************************************************************************
- * vdec_NormScan : Unused in this IDCT
+ * NormScan : Unused in this IDCT
*****************************************************************************/
-static void vdec_NormScan( u8 ppi_scan[2][64] )
+static void NormScan( u8 ppi_scan[2][64] )
{
}
/*****************************************************************************
- * vdec_IDCT : IDCT function for normal matrices
+ * IDCT : IDCT function for normal matrices
*****************************************************************************/
-void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block,
- int i_idontcare )
+static __inline__ void IDCT( dctelem_t * p_block )
{
- /* dct classique: pour tester la meilleure entre la classique et la */
- /* no classique */
s32 tmp0, tmp1, tmp2, tmp3;
s32 tmp10, tmp11, tmp12, tmp13;
s32 z1, z2, z3, z4, z5;
}
}
+#include "idct_sparse.h"
+#include "idct_decl.h"
+
* idctmmx.c : MMX IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctmmx.c,v 1.16 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idctmmx.c,v 1.17 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Michel Lespinasse <walken@zoy.org>
#include "mtime.h"
#include "tests.h" /* TestCPU() */
-#include "vdec_idct.h"
-
#include "mmx.h"
+#include "idct.h"
+#include "block_mmx.h"
+
#include "modules.h"
#include "modules_export.h"
* Local prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
-static int idct_Probe ( probedata_t *p_data );
-static void vdec_NormScan ( u8 ppi_scan[2][64] );
/*****************************************************************************
* Build configuration tree.
/* Following functions are local */
-/*****************************************************************************
- * Functions exported as capabilities.
- *****************************************************************************/
-static void idct_getfunctions( function_list_t * p_function_list )
-{
- p_function_list->pf_probe = idct_Probe;
-#define F p_function_list->functions.idct
- F.pf_idct_init = _M( vdec_InitIDCT );
- F.pf_sparse_idct = _M( vdec_SparseIDCT );
- F.pf_idct = _M( vdec_IDCT );
- F.pf_norm_scan = vdec_NormScan;
- F.pf_decode_init = _M( vdec_InitDecode );
- F.pf_addblock = _M( vdec_AddBlock );
- F.pf_copyblock = _M( vdec_CopyBlock );
-#undef F
-}
-
/*****************************************************************************
* idct_Probe: return a preference score
*****************************************************************************/
}
/*****************************************************************************
- * vdec_NormScan : This IDCT uses reordered coeffs, so we patch the scan table
+ * NormScan : This IDCT uses reordered coeffs, so we patch the scan table
*****************************************************************************/
-static void vdec_NormScan( u8 ppi_scan[2][64] )
+static void NormScan( u8 ppi_scan[2][64] )
{
int i, j;
}
/*****************************************************************************
- * vdec_IDCT :
+ * IDCT :
*****************************************************************************/
#define ROW_SHIFT 11
#define COL_SHIFT 6
static s32 rounder5[] ATTR_ALIGN(8) =
rounder (-0.441341716183); // C3*(-C5/C4+C5-C3)/2
-void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block,
- int i_idontcare )
+static __inline__ void IDCT( dctelem_t * p_block )
{
static dctelem_t table04[] ATTR_ALIGN(16) =
table (22725, 21407, 19266, 16384, 12873, 8867, 4520);
Col( p_block, 4 );
}
+#include "idct_sparse.h"
+#include "idct_decl.h"
* idctmmxext.c : MMX EXT IDCT module
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: idctmmxext.c,v 1.13 2001/08/22 17:21:45 massiot Exp $
+ * $Id: idctmmxext.c,v 1.14 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Michel Lespinasse <walken@zoy.org>
#include "mtime.h"
#include "tests.h" /* TestCPU() */
-#include "vdec_idct.h"
-
#include "mmx.h"
+#include "idct.h"
+#include "block_mmx.h"
+
#include "modules.h"
#include "modules_export.h"
* Local prototypes.
*****************************************************************************/
static void idct_getfunctions( function_list_t * p_function_list );
-static int idct_Probe ( probedata_t *p_data );
-static void vdec_NormScan ( u8 ppi_scan[2][64] );
/*****************************************************************************
* Build configuration tree.
/* Following functions are local */
-/*****************************************************************************
- * Functions exported as capabilities.
- *****************************************************************************/
-static void idct_getfunctions( function_list_t * p_function_list )
-{
- p_function_list->pf_probe = idct_Probe;
-#define F p_function_list->functions.idct
- F.pf_idct_init = _M( vdec_InitIDCT );
- F.pf_sparse_idct = _M( vdec_SparseIDCT );
- F.pf_idct = _M( vdec_IDCT );
- F.pf_norm_scan = vdec_NormScan;
- F.pf_decode_init = _M( vdec_InitDecode );
- F.pf_addblock = _M( vdec_AddBlock );
- F.pf_copyblock = _M( vdec_CopyBlock );
-#undef F
-}
-
/*****************************************************************************
* idct_Probe: return a preference score
*****************************************************************************/
}
/*****************************************************************************
- * vdec_NormScan : This IDCT uses reordered coeffs, so we patch the scan table
+ * NormScan : This IDCT uses reordered coeffs, so we patch the scan table
*****************************************************************************/
-static void vdec_NormScan( u8 ppi_scan[2][64] )
+static void NormScan( u8 ppi_scan[2][64] )
{
int i, j;
}
/*****************************************************************************
- * vdec_IDCT :
+ * IDCT :
*****************************************************************************/
#define ROW_SHIFT 11
#define COL_SHIFT 6
static s32 rounder5[] ATTR_ALIGN(8) =
rounder (-0.441341716183); // C3*(-C5/C4+C5-C3)/2
-void _M( vdec_IDCT )( void * p_unused_data, dctelem_t * p_block,
- int i_idontcare )
+static __inline__ void IDCT( dctelem_t * p_block )
{
static dctelem_t table04[] ATTR_ALIGN(16) =
table (22725, 21407, 19266, 16384, 12873, 8867, 4520);
Col( p_block, 4 );
}
+#include "idct_sparse.h"
+#include "idct_decl.h"
PLUGIN_MOTIONMMX = motionmmx.o
PLUGIN_MOTIONMMXEXT = motionmmxext.o
PLUGIN_MOTION3DNOW = motion3dnow.o
+PLUGIN_MOTIONALTIVEC = motionaltivec.o
BUILTIN_MOTION = $(PLUGIN_MOTION:%.o=BUILTIN_MOTION_%.o)
BUILTIN_MOTIONMMX = $(PLUGIN_MOTIONMMX:%.o=BUILTIN_MOTIONMMX_%.o)
BUILTIN_MOTIONMMXEXT = $(PLUGIN_MOTIONMMXEXT:%.o=BUILTIN_MOTIONMMXEXT_%.o)
BUILTIN_MOTION3DNOW = $(PLUGIN_MOTION3DNOW:%.o=BUILTIN_MOTION3DNOW_%.o)
+BUILTIN_MOTIONALTIVEC = $(PLUGIN_MOTIONALTIVEC:%.o=BUILTIN_MOTIONALTIVEC_%.o)
PLUGIN_C = $(PLUGIN_MOTION) $(PLUGIN_MOTIONMMX) $(PLUGIN_MOTIONMMXEXT) $(PLUGIN_MOTION3DNOW)
-ALL_OBJ = $(PLUGIN_C) $(BUILTIN_MOTION) $(BUILTIN_MOTIONMMX) $(BUILTIN_MOTIONMMXEXT) $(BUILTIN_MOTION3DNOW)
+ALL_OBJ = $(PLUGIN_C) $(PLUGIN_MOTIONALTIVEC) $(BUILTIN_MOTION) $(BUILTIN_MOTIONMMX) $(BUILTIN_MOTIONMMXEXT) $(BUILTIN_MOTION3DNOW)
#
# Virtual targets
include ../../Makefile.modules
+$(PLUGIN_MOTIONALTIVEC): %.o: .dep/%.d
+$(PLUGIN_MOTIONALTIVEC): %.o: %.c
+ $(CC) $(CFLAGS) -DPLUGIN $(PCFLAGS) -faltivec -c -o $@ $<
+
$(BUILTIN_MOTION): BUILTIN_MOTION_%.o: .dep/%.d
$(BUILTIN_MOTION): BUILTIN_MOTION_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=motion -c -o $@ $<
$(BUILTIN_MOTION3DNOW): BUILTIN_MOTION3DNOW_%.o: %.c
$(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=motion3dnow -c -o $@ $<
+$(BUILTIN_MOTIONALTIVEC): BUILTIN_MOTIONALTIVEC_%.o: .dep/%.d
+$(BUILTIN_MOTIONALTIVEC): BUILTIN_MOTIONALTIVEC_%.o: %.c
+ $(CC) $(CFLAGS) -DBUILTIN -DMODULE_NAME=motionaltivec -c -o $@ $<
+
#
# Real targets
#
ar r $@ $^
$(RANLIB) $@
+../motionaltivec.so: $(PLUGIN_MOTIONALTIVEC)
+ $(CC) $(PCFLAGS) -o $@ $^ $(PLCFLAGS) $(LIB_ALTIVEC)
+
+../motionaltivec.a: $(BUILTIN_MOTIONALTIVEC)
+ ar r $@ $^
+ $(RANLIB) $@
* motion3dnow.c : 3DNow! motion compensation module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
- * $Id: motion3dnow.c,v 1.1 2001/08/22 17:21:45 massiot Exp $
+ * $Id: motion3dnow.c,v 1.2 2001/09/05 16:07:49 massiot Exp $
*
* Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
* Michel Lespinasse <walken@zoy.org>
return( 999 );
}
- return( 200 );
+ return( 250 );
}
/*****************************************************************************
--- /dev/null
+/*****************************************************************************
+ * motionaltivec.c : Altivec motion compensation module for vlc
+ *****************************************************************************
+ * Copyright (C) 2001 VideoLAN
+ * $Id: motionaltivec.c,v 1.1 2001/09/05 16:07:49 massiot Exp $
+ *
+ * Authors: Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
+ * Paul Mackerras <paulus@linuxcare.com.au>
+ *
+ * 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 motionaltivec
+#include "modules_inner.h"
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include "defs.h"
+
+#include <stdlib.h> /* malloc(), free() */
+
+#include "config.h"
+#include "common.h" /* boolean_t, byte_t */
+#include "threads.h"
+#include "mtime.h"
+#include "tests.h"
+
+#include "modules.h"
+#include "modules_export.h"
+
+/*****************************************************************************
+ * Local and extern prototypes.
+ *****************************************************************************/
+static void motion_getfunctions( function_list_t * p_function_list );
+
+/*****************************************************************************
+ * Build configuration tree.
+ *****************************************************************************/
+MODULE_CONFIG_START
+ADD_WINDOW( "Configuration for Altivec motion compensation module" )
+ ADD_COMMENT( "Ha, ha -- nothing to configure yet" )
+MODULE_CONFIG_STOP
+
+MODULE_INIT_START
+ p_module->i_capabilities = MODULE_CAPABILITY_NULL
+ | MODULE_CAPABILITY_MOTION;
+ p_module->psz_longname = "MMX motion compensation module";
+MODULE_INIT_STOP
+
+MODULE_ACTIVATE_START
+ motion_getfunctions( &p_module->p_functions->motion );
+MODULE_ACTIVATE_STOP
+
+MODULE_DEACTIVATE_START
+MODULE_DEACTIVATE_STOP
+
+/*****************************************************************************
+ * motion_Probe: tests probe the CPU and return a score
+ *****************************************************************************/
+static int motion_Probe( probedata_t *p_data )
+{
+ if( !TestCPU( CPU_CAPABILITY_ALTIVEC ) )
+ {
+ return( 0 );
+ }
+
+ if( TestMethod( MOTION_METHOD_VAR, "motionaltivec" )
+ || TestMethod( MOTION_METHOD_VAR, "altivec" ) )
+ {
+ return( 999 );
+ }
+
+ return( 150 );
+}
+
+/*****************************************************************************
+ * Motion compensation in Altivec
+ *****************************************************************************/
+
+#define COPY_8(d, s) (*(long long *)(d) = *(long long *)(s))
+#define COPY_16(d, s) (((long long *)(d))[0] = ((long long *)(s))[0], \
+ ((long long *)(d))[1] = ((long long *)(s))[1])
+
+void
+MC_put_16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1, d;
+
+ do {
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ d = vec_perm(refw0, refw1, rshift);
+ if ((unsigned long)dest & 15) {
+ /* unaligned store, yuck */
+ vector unsigned char x = d;
+ COPY_16(dest, &x);
+ } else
+ vec_st(d, 0, dest);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r, d;
+
+ do {
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r = vec_perm(refw0, refw1, rshift);
+ if ((unsigned long)dest & 15) {
+ /* unaligned load/store, yuck */
+ vector unsigned char dw0, dw1, dshift, mask;
+
+ dshift = vec_lvsr(0, dest);
+ dw0 = vec_ld(0, dest);
+ dw1 = vec_ld(16, dest);
+ d = vec_perm(r, r, dshift);
+ mask = vec_perm((vector unsigned char)(0),
+ (vector unsigned char)(255), dshift);
+ dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
+ dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
+ vec_st(dw0, 0, dest);
+ vec_st(dw1, 16, dest);
+ } else {
+ d = vec_ld(0, dest);
+ d = vec_avg(d, r);
+ vec_st(d, 0, dest);
+ }
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_x16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, d, one;
+
+ one = (vector unsigned char)(1);
+ do {
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ d = vec_avg(t0, t1);
+ if ((unsigned long)dest & 15) {
+ /* unaligned store, yuck */
+ vector unsigned char x = d;
+ COPY_16(dest, &x);
+ } else
+ vec_st(d, 0, dest);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_x16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r, d, one;
+
+ one = (vector unsigned char)(1);
+ do {
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r = vec_avg(t0, t1);
+ if ((unsigned long)dest & 15) {
+ /* unaligned load/store, yuck */
+ vector unsigned char dw0, dw1, dshift, mask;
+
+ dshift = vec_lvsr(0, dest);
+ dw0 = vec_ld(0, dest);
+ dw1 = vec_ld(16, dest);
+ d = vec_perm(r, r, dshift);
+ mask = vec_perm((vector unsigned char)(0),
+ (vector unsigned char)(255), dshift);
+ dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
+ dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
+ vec_st(dw0, 0, dest);
+ vec_st(dw1, 16, dest);
+ } else {
+ d = vec_ld(0, dest);
+ d = vec_avg(d, r);
+ vec_st(d, 0, dest);
+ }
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_y16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r0, r1, d;
+
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r0 = vec_perm(refw0, refw1, rshift);
+ do {
+ ref += stride;
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r1 = vec_perm(refw0, refw1, rshift);
+ d = vec_avg(r0, r1);
+ r0 = r1;
+ if ((unsigned long)dest & 15) {
+ /* unaligned store, yuck */
+ vector unsigned char x = d;
+ COPY_16(dest, &x);
+ } else
+ vec_st(d, 0, dest);
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_y16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r0, r1, r, d;
+
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r0 = vec_perm(refw0, refw1, rshift);
+ do {
+ ref += stride;
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r1 = vec_perm(refw0, refw1, rshift);
+ r = vec_avg(r0, r1);
+ r0 = r1;
+ if ((unsigned long)dest & 15) {
+ /* unaligned load/store, yuck */
+ vector unsigned char dw0, dw1, dshift, mask;
+
+ dshift = vec_lvsr(0, dest);
+ dw0 = vec_ld(0, dest);
+ dw1 = vec_ld(16, dest);
+ d = vec_perm(r, r, dshift);
+ mask = vec_perm((vector unsigned char)(0),
+ (vector unsigned char)(255), dshift);
+ dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
+ dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
+ vec_st(dw0, 0, dest);
+ vec_st(dw1, 16, dest);
+ } else {
+ d = vec_ld(0, dest);
+ d = vec_avg(d, r);
+ vec_st(d, 0, dest);
+ }
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_xy16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r0, r1, d, one;
+
+ rshift0 = vec_lvsl(0, ref);
+ one = (vector unsigned char)(1);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r0 = vec_avg(t0, t1);
+ do {
+ ref += stride;
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r1 = vec_avg(t0, t1);
+ d = vec_avg(r0, r1);
+ r0 = r1;
+ if ((unsigned long)dest & 15) {
+ /* unaligned store, yuck */
+ vector unsigned char x = d;
+ COPY_16(dest, &x);
+ } else
+ vec_st(d, 0, dest);
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_xy16_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r0, r1, r, d, one;
+
+ rshift0 = vec_lvsl(0, ref);
+ one = (vector unsigned char)(1);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r0 = vec_avg(t0, t1);
+ do {
+ ref += stride;
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r1 = vec_avg(t0, t1);
+ r = vec_avg(r0, r1);
+ r0 = r1;
+ if ((unsigned long)dest & 15) {
+ /* unaligned load/store, yuck */
+ vector unsigned char dw0, dw1, dshift, mask;
+
+ dshift = vec_lvsr(0, dest);
+ dw0 = vec_ld(0, dest);
+ dw1 = vec_ld(16, dest);
+ d = vec_perm(r, r, dshift);
+ mask = vec_perm((vector unsigned char)(0),
+ (vector unsigned char)(255), dshift);
+ dw0 = vec_sel(dw0, vec_avg(dw0, d), mask);
+ dw1 = vec_sel(vec_avg(dw1, d), dw1, mask);
+ vec_st(dw0, 0, dest);
+ vec_st(dw1, 16, dest);
+ } else {
+ d = vec_ld(0, dest);
+ d = vec_avg(d, r);
+ vec_st(d, 0, dest);
+ }
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1, d;
+
+ do {
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ d = vec_perm(refw0, refw1, rshift);
+ COPY_8(dest, &d);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r, d;
+
+ do {
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r = vec_perm(refw0, refw1, rshift);
+ COPY_8(&d, dest);
+ d = vec_avg(d, r);
+ COPY_8(dest, &d);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_x8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, d, one;
+
+ one = (vector unsigned char)(1);
+ do {
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ d = vec_avg(t0, t1);
+ COPY_8(dest, &d);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_x8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r, d, one;
+
+ one = (vector unsigned char)(1);
+ do {
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r = vec_avg(t0, t1);
+ COPY_8(&d, dest);
+ d = vec_avg(d, r);
+ COPY_8(dest, &d);
+ ref += stride;
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_y8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r0, r1, d;
+
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r0 = vec_perm(refw0, refw1, rshift);
+ do {
+ ref += stride;
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r1 = vec_perm(refw0, refw1, rshift);
+ d = vec_avg(r0, r1);
+ r0 = r1;
+ COPY_8(dest, &d);
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_y8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift, refw0, refw1;
+ vector unsigned char r0, r1, r, d;
+
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r0 = vec_perm(refw0, refw1, rshift);
+ do {
+ ref += stride;
+ rshift = vec_lvsl(0, ref);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ r1 = vec_perm(refw0, refw1, rshift);
+ r = vec_avg(r0, r1);
+ r0 = r1;
+ COPY_8(&d, dest);
+ d = vec_avg(d, r);
+ COPY_8(dest, &d);
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_put_xy8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r0, r1, d, one;
+
+ rshift0 = vec_lvsl(0, ref);
+ one = (vector unsigned char)(1);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r0 = vec_avg(t0, t1);
+ do {
+ ref += stride;
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r1 = vec_avg(t0, t1);
+ d = vec_avg(r0, r1);
+ r0 = r1;
+ COPY_8(dest, &d);
+ dest += stride;
+ } while (--height);
+}
+
+void
+MC_avg_xy8_altivec(uint8_t * dest, uint8_t * ref, int stride, int height)
+{
+ vector unsigned char rshift0, rshift1, refw0, refw1;
+ vector unsigned char t0, t1, r0, r1, r, d, one;
+
+ rshift0 = vec_lvsl(0, ref);
+ one = (vector unsigned char)(1);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r0 = vec_avg(t0, t1);
+ do {
+ ref += stride;
+ rshift0 = vec_lvsl(0, ref);
+ rshift1 = vec_add(rshift0, one);
+ refw0 = vec_ld(0, ref);
+ refw1 = vec_ld(16, ref);
+ t0 = vec_perm(refw0, refw1, rshift0);
+ t1 = vec_perm(refw0, refw1, rshift1);
+ r1 = vec_avg(t0, t1);
+ r = vec_avg(r0, r1);
+ r0 = r1;
+ COPY_8(&d, dest);
+ d = vec_avg(d, r);
+ COPY_8(dest, &d);
+ dest += stride;
+ } while (--height);
+}
+
+/*****************************************************************************
+ * Functions exported as capabilities. They are declared as static so that
+ * we don't pollute the namespace too much.
+ *****************************************************************************/
+static void motion_getfunctions( function_list_t * p_function_list )
+{
+ static void (* ppppf_motion[2][2][4])( yuv_data_t *, yuv_data_t *,
+ int, int ) =
+ {
+ {
+ /* Copying functions */
+ {
+ /* Width == 16 */
+ MC_put_16_altivec, MC_put_x16_altivec, MC_put_y16_altivec, MC_put_xy16_altivec
+ },
+ {
+ /* Width == 8 */
+ MC_put_8_altivec, MC_put_x8_altivec, MC_put_y8_altivec, MC_put_xy8_altivec
+ }
+ },
+ {
+ /* Averaging functions */
+ {
+ /* Width == 16 */
+ MC_avg_16_altivec, MC_avg_x16_altivec, MC_avg_y16_altivec, MC_avg_xy16_altivec
+ },
+ {
+ /* Width == 8 */
+ MC_avg_8_altivec, MC_avg_x8_altivec, MC_avg_y8_altivec, MC_avg_xy8_altivec
+ }
+ }
+ };
+
+ p_function_list->pf_probe = motion_Probe;
+
+#define list p_function_list->functions.motion
+ memcpy( list.ppppf_motion, ppppf_motion, sizeof( void * ) * 16 );
+#undef list
+
+ return;
+}
* input_clock.c: Clock/System date convertions, stream management
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: input_clock.c,v 1.21 2001/07/20 16:20:25 massiot Exp $
+ * $Id: input_clock.c,v 1.22 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
/*****************************************************************************
* ClockToSysdate: converts a movie clock to system date
*****************************************************************************/
+static void ClockNewRef( input_thread_t * p_input, pgrm_descriptor_t * p_pgrm,
+ mtime_t i_clock, mtime_t i_sysdate );
static mtime_t ClockToSysdate( input_thread_t * p_input,
pgrm_descriptor_t * p_pgrm, mtime_t i_clock )
{
{
i_sysdate = (mtime_t)(i_clock - p_pgrm->cr_ref)
* (mtime_t)p_input->stream.control.i_rate
- * (mtime_t)300
- / (mtime_t)27
- / (mtime_t)DEFAULT_RATE
- + (mtime_t)p_pgrm->sysdate_ref;
+ * (mtime_t)300;
+ i_sysdate /= 27;
+ i_sysdate /= 1000;
+ i_sysdate += (mtime_t)p_pgrm->sysdate_ref;
}
return( i_sysdate );
mtime_t i_clock, mtime_t i_sysdate )
{
p_pgrm->cr_ref = i_clock;
- p_pgrm->sysdate_ref = p_pgrm->last_syscr ? p_pgrm->last_syscr : i_sysdate;
+ p_pgrm->sysdate_ref = i_sysdate;
}
/*****************************************************************************
void input_ClockInit( pgrm_descriptor_t * p_pgrm )
{
p_pgrm->last_cr = 0;
- p_pgrm->last_syscr = 0;
p_pgrm->cr_ref = 0;
p_pgrm->sysdate_ref = 0;
p_pgrm->delta_cr = 0;
p_input->stream.control.i_status = PAUSE_S;
vlc_cond_wait( &p_input->stream.stream_wait,
&p_input->stream.stream_lock );
- p_pgrm->last_syscr = 0;
ClockNewRef( p_input, p_pgrm, i_clock, mdate() );
if( p_input->stream.i_new_status == PAUSE_S )
else
{
p_pgrm->last_cr = 0;
- p_pgrm->last_syscr = 0;
p_pgrm->delta_cr = 0;
p_pgrm->c_average_count = 0;
}
/* Wait a while before delivering the packets to the decoder.
* In case of multiple programs, we arbitrarily follow the
* clock of the first program. */
- p_pgrm->last_syscr = ClockToSysdate( p_input, p_pgrm, i_clock );
- mwait( p_pgrm->last_syscr );
+ mwait( ClockToSysdate( p_input, p_pgrm, i_clock ) );
/* Now take into account interface changes. */
input_ClockManageControl( p_input, p_pgrm, i_clock );
* and spawn threads.
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: main.c,v 1.112 2001/08/22 14:23:57 sam Exp $
+ * $Id: main.c,v 1.113 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Vincent Seguin <seguin@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
slot_name( hi.cpu_type, hi.cpu_subtype, &psz_name, &psz_subname );
/* FIXME: need better way to detect newer proccessors.
* could do strncmp(a,b,5), but that's real ugly */
- if( strcmp(psz_name, "ppc7400") || strcmp(psz_name, "ppc7450") )
+ if( !strcmp(psz_name, "ppc7400") || !strcmp(psz_name, "ppc7450") )
{
i_capabilities |= CPU_CAPABILITY_ALTIVEC;
}
signal( SIGILL, NULL );
return( i_capabilities );
+#elif defined( __powerpc__ )
+# if defined( vector )
+ /* Test for Altivec */
+ signal( SIGILL, InstructionSignalHandler );
+
+ i_illegal = 0;
+ if( setjmp( env ) == 0 )
+ {
+ /* Set VSCR to 0 */
+ vec_mtvscr( (vector unsigned int)(0) );
+ /* Set the VRSAVE register in case the kernel looks at it */
+ asm volatile ("mtspr 256,%0" : : "r" (-1));
+ }
+
+ if( i_illegal == 0 )
+ {
+ i_capabilities |= CPU_CAPABILITY_ALTIVEC;
+ }
+
+ signal( SIGILL, NULL );
+# endif
+
+ return( i_capabilities );
+
#else
/* default behaviour */
return( i_capabilities );
* video_decoder.c : video decoder thread
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_decoder.c,v 1.57 2001/08/22 17:21:45 massiot Exp $
+ * $Id: video_decoder.c,v 1.58 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Michel Lespinasse <walken@zoy.org>
p_vdec->p_idct_data = NULL;
- p_vdec->p_pool->pf_decode_init( p_vdec );
p_vdec->p_pool->pf_idct_init( &p_vdec->p_idct_data );
/* Mark thread as running and return */
if( p_mb->i_coded_block_pattern & (1 << (5 - i)) ) \
{ \
/* \
- * Inverse DCT (ISO/IEC 13818-2 section Annex A) \
- */ \
- p_idct->pf_idct( p_vdec->p_idct_data, p_idct->pi_block, \
- p_idct->i_sparse_pos ); \
- \
- /* \
- * Adding prediction and coefficient data (ISO/IEC \
+ * Inverse DCT (ISO/IEC 13818-2 section Annex A) and \
+ * adding prediction and coefficient data (ISO/IEC \
* 13818-2 section 7.6.8) \
*/ \
- p_pool->pf_addblock( p_idct->pi_block, p_idct->p_dct_data, \
- i < 4 ? p_mb->i_lum_dct_stride : \
- p_mb->i_chrom_dct_stride ); \
+ p_idct->pf_idct( p_idct->pi_block, p_idct->p_dct_data, \
+ i < 4 ? p_mb->i_lum_dct_stride : \
+ p_mb->i_chrom_dct_stride, \
+ p_vdec->p_idct_data, \
+ p_idct->i_sparse_pos ); \
} \
} \
} \
for( i = 0, p_idct = p_mb->p_idcts; i < 4 + 2 * B_COLOR; \
i++, p_idct++ ) \
{ \
- p_idct->pf_idct( p_vdec->p_idct_data, p_idct->pi_block, \
+ p_idct->pf_idct( p_idct->pi_block, p_idct->p_dct_data, \
+ i < 4 ? p_mb->i_lum_dct_stride : \
+ p_mb->i_chrom_dct_stride, \
+ p_vdec->p_idct_data, \
p_idct->i_sparse_pos ); \
- p_pool->pf_copyblock( p_idct->pi_block, p_idct->p_dct_data, \
- i < 4 ? p_mb->i_lum_dct_stride : \
- p_mb->i_chrom_dct_stride ); \
} \
} \
}
* video_parser.c : video parser thread
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_parser.c,v 1.4 2001/08/22 17:21:45 massiot Exp $
+ * $Id: video_parser.c,v 1.5 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
#define f p_vpar->p_idct_module->p_functions->idct.functions.idct
p_vpar->pool.pf_idct_init = f.pf_idct_init;
- p_vpar->pf_sparse_idct = f.pf_sparse_idct;
- p_vpar->pf_idct = f.pf_idct;
+ p_vpar->pf_sparse_idct_add = f.pf_sparse_idct_add;
+ p_vpar->pf_idct_add = f.pf_idct_add;
+ p_vpar->pf_sparse_idct_copy = f.pf_sparse_idct_copy;
+ p_vpar->pf_idct_copy = f.pf_idct_copy;
p_vpar->pf_norm_scan = f.pf_norm_scan;
- p_vpar->pool.pf_decode_init = f.pf_decode_init;
- p_vpar->pool.pf_addblock = f.pf_addblock;
- p_vpar->pool.pf_copyblock = f.pf_copyblock;
#undef f
/* Initialize input bitstream */
* video_parser.h : video parser thread
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: video_parser.h,v 1.12 2001/08/22 17:21:45 massiot Exp $
+ * $Id: video_parser.h,v 1.13 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Jean-Marc Dressler <polux@via.ecp.fr>
/* Motion compensation plug-in used and shortcuts */
struct module_s * p_motion_module;
- /* IDCT plugin used and shortcuts */
+ /* IDCT plug-in used and shortcuts */
struct module_s * p_idct_module;
- void ( * pf_sparse_idct ) ( void *, dctelem_t*, int );
- void ( * pf_idct ) ( void *, dctelem_t*, int );
- void ( * pf_norm_scan ) ( u8 ppi_scan[2][64] );
+ void ( * pf_sparse_idct_add )( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_idct_add ) ( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_sparse_idct_copy )( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+ void ( * pf_idct_copy ) ( dctelem_t *, yuv_data_t *, int,
+ void *, int );
+
+ void ( * pf_norm_scan ) ( u8 ppi_scan[2][64] );
#ifdef STATS
/* Statistics */
* vpar_blocks.c : blocks parsing
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vpar_blocks.c,v 1.8 2001/09/04 23:21:34 jlj Exp $
+ * $Id: vpar_blocks.c,v 1.9 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Michel Lespinasse <walken@zoy.org>
* Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
{
if( i_nc == 0 )
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_copy;
p_idct->i_sparse_pos = 63;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_copy;
}
}
else
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_copy;
p_idct->i_sparse_pos = i_coeff - p_tab->i_run;
}
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_copy;
}
}
{
if( i_nc == 0 )
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_copy;
p_idct->i_sparse_pos = 63;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_copy;
}
}
else
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_copy;
p_idct->i_sparse_pos = i_coeff - p_tab->i_run;
}
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_copy;
}
}
{
if( i_nc == 0 )
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_add;
p_idct->i_sparse_pos = 63;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_add;
}
}
else
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_add;
if( i_nc == 0 )
{
p_idct->i_sparse_pos = 0;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_add;
}
}
if( i_nc <= 1 )
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_copy;
p_idct->i_sparse_pos = i_coeff - p_tab->i_run;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_copy;
}
}
if( i_nc <= 1 )
{
- p_idct->pf_idct = p_vpar->pf_sparse_idct;
+ p_idct->pf_idct = p_vpar->pf_sparse_idct_add;
if( i_nc == 0 )
{
p_idct->i_sparse_pos = 0;
}
else
{
- p_idct->pf_idct = p_vpar->pf_idct;
+ p_idct->pf_idct = p_vpar->pf_idct_add;
}
}
* vpar_pool.h : video parser/video decoders communication
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
- * $Id: vpar_pool.h,v 1.2 2001/08/22 17:21:46 massiot Exp $
+ * $Id: vpar_pool.h,v 1.3 2001/09/05 16:07:50 massiot Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
/* Access to the plug-ins needed by the video decoder thread */
void ( * pf_idct_init ) ( void ** );
- void ( * pf_decode_init ) ( );
- void ( * pf_addblock ) ( dctelem_t *, yuv_data_t *, int );
- void ( * pf_copyblock ) ( dctelem_t *, yuv_data_t *, int );
-
void ( * ppppf_motion[2][2][4] ) ( yuv_data_t *, yuv_data_t *,
int, int );
} vdec_pool_t;