diff options
author | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
---|---|---|
committer | Denys Dmytriyenko <denis@denix.org> | 2009-03-17 14:32:59 -0400 |
commit | 709c4d66e0b107ca606941b988bad717c0b45d9b (patch) | |
tree | 37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/mythtv | |
parent | fa6cd5a3b993f16c27de4ff82b42684516d433ba (diff) |
rename packages/ to recipes/ per earlier agreement
See links below for more details:
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326
http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816
Signed-off-by: Denys Dmytriyenko <denis@denix.org>
Acked-by: Mike Westerhof <mwester@dls.net>
Acked-by: Philip Balister <philip@balister.org>
Acked-by: Khem Raj <raj.khem@gmail.com>
Acked-by: Marcin Juszkiewicz <hrw@openembedded.org>
Acked-by: Koen Kooi <koen@openembedded.org>
Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/mythtv')
25 files changed, 2904 insertions, 0 deletions
diff --git a/recipes/mythtv/files/armv5te/configh b/recipes/mythtv/files/armv5te/configh new file mode 100644 index 0000000000..46c647e2d5 --- /dev/null +++ b/recipes/mythtv/files/armv5te/configh @@ -0,0 +1,6 @@ +#define HAVE_LLRINT 1 +#define HAVE_ROUNDF 1 +#define ARCH_ARMV4L 1 +#define ENABLE_ARMV4L 1 +#define HAVE_ARMV5TE 1 +#define ENABLE_ARMV5TE 1 diff --git a/recipes/mythtv/files/armv5te/configmak b/recipes/mythtv/files/armv5te/configmak new file mode 100644 index 0000000000..aa9978515d --- /dev/null +++ b/recipes/mythtv/files/armv5te/configmak @@ -0,0 +1,3 @@ +ARCH_ARMV4L=yes +HAVE_ARMV5TE=yes + diff --git a/recipes/mythtv/files/armv6/configh b/recipes/mythtv/files/armv6/configh new file mode 100644 index 0000000000..2301e723d6 --- /dev/null +++ b/recipes/mythtv/files/armv6/configh @@ -0,0 +1,8 @@ +#define HAVE_LLRINT 1 +#define HAVE_ROUNDF 1 +#define ARCH_ARMV4L 1 +#define ENABLE_ARMV4L 1 +#define HAVE_ARMV5TE 1 +#define ENABLE_ARMV5TE 1 +#define HAVE_ARMV6 1 +#define ENABLE_ARMV6 1 diff --git a/recipes/mythtv/files/armv6/configmak b/recipes/mythtv/files/armv6/configmak new file mode 100644 index 0000000000..4db5dc0dfd --- /dev/null +++ b/recipes/mythtv/files/armv6/configmak @@ -0,0 +1,3 @@ +ARCH_ARMV4L=yes +HAVE_ARMV5TE=yes +HAVE_ARMV6=yes diff --git a/recipes/mythtv/files/armv7a/configh b/recipes/mythtv/files/armv7a/configh new file mode 100644 index 0000000000..245e40f56a --- /dev/null +++ b/recipes/mythtv/files/armv7a/configh @@ -0,0 +1,14 @@ +#define HAVE_LLRINT 1 +#define HAVE_ROUNDF 1 +#define ARCH_ARMV4L 1 +#define ENABLE_ARMV4L 1 +#define HAVE_ARMV5TE 1 +#define ENABLE_ARMV5TE 1 +#define HAVE_ARMV6 1 +#define ENABLE_ARMV6 1 +#define HAVE_ARMV6T2 1 +#define ENABLE_ARMV6T2 1 +#define HAVE_ARMVFP 1 +#define ENABLE_ARMVFP 1 +#define HAVE_NEON 1 +#define ENABLE_NEON 1 diff --git a/recipes/mythtv/files/armv7a/configmak b/recipes/mythtv/files/armv7a/configmak new file mode 100644 index 0000000000..50d549f794 --- /dev/null +++ b/recipes/mythtv/files/armv7a/configmak @@ -0,0 +1,6 @@ +ARCH_ARMV4L=yes +HAVE_ARMV5TE=yes +HAVE_ARMV6=yes +HAVE_ARMV6T2=yes +HAVE_ARMVFP=yes +HAVE_NEON=yes diff --git a/recipes/mythtv/files/configh b/recipes/mythtv/files/configh new file mode 100644 index 0000000000..2fe7658383 --- /dev/null +++ b/recipes/mythtv/files/configh @@ -0,0 +1,2 @@ +#define HAVE_LLRINT 1 +#define HAVE_ROUNDF 1 diff --git a/recipes/mythtv/files/configmak b/recipes/mythtv/files/configmak new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/recipes/mythtv/files/configmak diff --git a/recipes/mythtv/files/prefix-etc.patch b/recipes/mythtv/files/prefix-etc.patch new file mode 100644 index 0000000000..fd6aaf9179 --- /dev/null +++ b/recipes/mythtv/files/prefix-etc.patch @@ -0,0 +1,11 @@ +--- mythtv/libs/libmyth/oldsettings.cpp.old 2004-09-24 22:09:11.000000000 +0100 ++++ mythtv/libs/libmyth/oldsettings.cpp 2004-09-24 22:09:38.000000000 +0100 +@@ -116,7 +116,7 @@ + if (ReadSettings(setname)) + result = true; + +- setname = prefix + "/etc/mythtv/" + filename; ++ setname = "/etc/mythtv/" + filename; + if (ReadSettings(setname)) + result = true; + diff --git a/recipes/mythtv/files/settings.pro b/recipes/mythtv/files/settings.pro new file mode 100644 index 0000000000..816fd06887 --- /dev/null +++ b/recipes/mythtv/files/settings.pro @@ -0,0 +1,119 @@ +#CONFIG += debug +CONFIG += release + +PREFIX = /usr + +LIBVERSION = 0.16 + +INCLUDEPATH += $${PREFIX}/include +INCLUDEPATH *= /usr/local/include + +DEFINES += _GNU_SOURCE +DEFINES += _FILE_OFFSET_BITS=64 +DEFINES += PREFIX=\"$${PREFIX}\" + +release { + DEFINES += MMX + QMAKE_CXXFLAGS_RELEASE = -O3 -march=i586 -fomit-frame-pointer + macx { + DEFINES -= MMX + # Don't use -O3, it causes some Qt moc methods to go missing + QMAKE_CXXFLAGS_RELEASE = -O2 + } + QMAKE_CFLAGS_RELEASE = $${QMAKE_CXXFLAGS_RELEASE} +} + +EXTRA_LIBS = -lfreetype -lmp3lame + +unix:linux*: { + CONFIG += linux backend + DEFINES += CONFIG_VIDEO4LINUX +} +unix:freebsd*: { + CONFIG += freebsd backend + DEFINES += CONFIG_VIDEO4LINUX +} + +# X11 support +CONFIG += using_x11 + +# Default Xv support +CONFIG += using_xv +EXTRA_LIBS += -lXinerama -lXv -lX11 -lXext -lXxf86vm + +# IVTV (PVR-x50) support. Disable if building on Windows. +CONFIG += using_ivtv +DEFINES += USING_IVTV + +# LCDProc support +#DEFINES += LCD_DEVICE + +# Default audio output, OSS +CONFIG += using_oss +DEFINES += USING_OSS + +# Native ALSA support +#CONFIG += using_alsa +#ALSA_LIBS = -lasound + +# Native ARTS support +#CONFIG += using_arts +#ARTS_LIBS = -L/opt/kde3/lib -ldl -lartsc -lpthread +#EXTRA_LIBS += -L/opt/kde3/lib -ldl -lartsc -lpthread +#INCLUDEPATH += /opt/kde3/include +# For Mandrake, use the following: +#ARTS_LIBS = -ldl -lartsc -lpthread +#EXTRA_LIBS += -ldl -lartsc -lpthread +#INCLUDEPATH += /usr/include/artsc + +# DVB support +CONFIG += using_dvb +DEFINES += USING_DVB +# Note: INCLUDEPATH should point to the directory with +# 'linux/dvb/frontend.h', not the directory with frontend.h +#INCLUDEPATH += /usr/src/linuxtv-dvb-1.0.1/include + +# Native lirc support +CONFIG += using_lirc +LIRC_LIBS = -llirc_client + +# XvMC support, modify as necessary. +#CONFIG += using_xvmc +#DEFINES += USING_XVMC +#EXTRA_LIBS += -lXvMCNVIDIA -lXvMC + +# XvMC_VLD support, modify as necessary. Incompatible with normal XvMC support. +CONFIG += using_xvmc using_xvmc_vld +DEFINES += USING_XVMC USING_XVMC_VLD +EXTRA_LIBS += -lviaXvMC -lXvMC + +# DirectFB support +#CONFIG += using_directfb +#EXTRA_LIBS += `directfb-config --libs` +#QMAKE_CXXFLAGS += `directfb-config --cflags` + +# Windows support +#CONFIG += win32 +#DEFINES += _WIN32 + +# Mac OS X support +macx { + # For source that uses Qt, Q_OS_MACX is defined. + # For source that uses config.h, CONFIG_DARWIN is defined. + # For other source (e.g. libmythtv), we define this + DEFINES += CONFIG_DARWIN +} + +# DirectX support +#CONFIG += using_directx +#DEFINES += USING_DIRECTX + +# OpenGL support for vertical retrace sync +#DEFINES += USING_OPENGL_VSYNC +#EXTRA_LIBS += -lGL -lGLU +#CONFIG += using_opengl + +# Allow use of XrandR to change display resolutions +#CONFIG += using_xrandr +#DEFINES += USING_XRANDR + diff --git a/recipes/mythtv/gmyth-upnp_0.7.0.bb b/recipes/mythtv/gmyth-upnp_0.7.0.bb new file mode 100644 index 0000000000..84657de93e --- /dev/null +++ b/recipes/mythtv/gmyth-upnp_0.7.0.bb @@ -0,0 +1,31 @@ +DESCRIPTION = "GMyth is a library to access MythTV backend services." +LICENSE = "LGPLv2"" +HOMEPAGE = "http://gmyth.sourceforge.net/wiki/index.php/Main_Page" + +PR = "r3" + +DEPENDS = "glib-2.0 mysql gmyth libupnp" + +SRC_URI = "${SOURCEFORGE_MIRROR}/gmyth/${PN}_0.7-indt1.tar.gz" +S = "${WORKDIR}/${PN}" + +inherit autotools + +AUTOTOOLS_STAGE_PKGCONFIG = "1" + +do_compile_append() { + sed -i -e s:${STAGING_DIR_TARGET}::g \ + -e s,Version:,Version:\ 0\.7\.0,g \ + -e s:/${TARGET_SYS}::g \ + -e s:clinkc::g \ + gmyth-upnp.pc +} + +do_install_append() { + mv ${D}/${bindir}/test ${D}/${bindir}/gmyth-upnp-test +} + +do_stage() { + autotools_stage_all +} + diff --git a/recipes/mythtv/gmyth_0.7.1.bb b/recipes/mythtv/gmyth_0.7.1.bb new file mode 100644 index 0000000000..71c5ddb143 --- /dev/null +++ b/recipes/mythtv/gmyth_0.7.1.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "GMyth is a library to access MythTV backend services." +LICENSE = "LGPLv2"" +HOMEPAGE = "http://gmyth.sourceforge.net/wiki/index.php/Main_Page" +DEPENDS = "mythtv curl libxml2 glib-2.0" + +PR = "r2" + +SRC_URI = "${SOURCEFORGE_MIRROR}/gmyth/${PN}-${PV}.tar.gz" + +inherit autotools + +AUTOTOOLS_STAGE_PKGCONFIG = "1" + +do_compile_append() { + sed -i -e s:${STAGING_DIR_TARGET}::g \ + -e s:/${TARGET_SYS}::g \ + gmyth.pc +} + +do_stage() { + autotools_stage_all +} + diff --git a/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch b/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch new file mode 100644 index 0000000000..a73ca9950e --- /dev/null +++ b/recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch @@ -0,0 +1,85 @@ +--- mythtv-0.18.1/libs/libavcodec/msmpeg4.c.old 2005-06-03 21:31:43.000000000 +0100 ++++ mythtv-0.18.1/libs/libavcodec/msmpeg4.c 2005-06-03 21:31:51.000000000 +0100 +@@ -723,7 +723,7 @@ + necessitate to modify mpegvideo.c. The problem comes from the + fact they decided to store the quantized DC (which would lead + to problems if Q could vary !) */ +-#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined PIC ++#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined __PIC__ + asm volatile( + "movl %3, %%eax \n\t" + "shrl $1, %%eax \n\t" +--- mythtv-0.18.1/libs/libavcodec/i386/dsputil_mmx_avg.h.old 2005-06-03 21:38:57.000000000 +0100 ++++ mythtv-0.18.1/libs/libavcodec/i386/dsputil_mmx_avg.h 2005-06-03 21:39:02.000000000 +0100 +@@ -90,7 +90,7 @@ + "add $16, %2 \n\t" + "subl $4, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -137,7 +137,7 @@ + "add $32, %2 \n\t" + "subl $4, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -207,7 +207,7 @@ + "add $32, %2 \n\t" + "subl $4, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -262,7 +262,7 @@ + "add $16, %2 \n\t" + "subl $4, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -314,7 +314,7 @@ + "add $32, %2 \n\t" + "subl $4, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -402,7 +402,7 @@ + "add $32, %2 \n\t" + "subl $2, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -456,7 +456,7 @@ + "add $32, %2 \n\t" + "subl $2, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) +@@ -529,7 +529,7 @@ + "add $32, %2 \n\t" + "subl $2, %0 \n\t" + "jnz 1b \n\t" +-#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used ++#ifdef __PIC__ //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used + :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst) + #else + :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst) diff --git a/recipes/mythtv/mythtv-0.20/configure.patch b/recipes/mythtv/mythtv-0.20/configure.patch new file mode 100644 index 0000000000..03281eb7e5 --- /dev/null +++ b/recipes/mythtv/mythtv-0.20/configure.patch @@ -0,0 +1,90 @@ +--- mythtv-0.20/configure 2006-08-28 17:18:08.000000000 +0100 ++++ mythtv-0.20/configure 2007-01-16 14:42:18.000000000 +0000 +@@ -1225,49 +1225,50 @@ + + has_library() + { +- if test -f /etc/ld.so.conf ; then +- LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"` ++ lib=`echo $1 | sed 's/^lib//'` ++ tmpfile=/tmp/conftest.$$ ++ rm -f $tmpfile $tmpfile.c ++ cat >$tmpfile.c <<EOF ++int main() { return 0; } ++EOF ++ echo "cc=$cc $LDFLAGS" ++ echo -n "checking for lib$lib... " ++ if $cc $LDFLAGS -o $tmpfile $tmpfile.c -l$lib; then ++ echo "yes" ++ result=0 + else +- LIBPATHS='' ++ echo "no" ++ result=1 + fi +- LIBPATHS="$LIBPATHS `echo $LD_LIBRARY_PATH | sed s/':'/' '/g` " +- # Mac OS X has a different variable for this: +- LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` " +- +- # recurse down just one level, should be enough in most cases +- if test -f /etc/ld.so.conf ; then +- INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"` +- SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'` +- for x in $SRCH ; do +- LP_APPEND=`cat $x | grep -v "#" | grep -v "^include"` +- LIBPATHS="$LIBPATHS $LP_APPEND" +- done +- fi +- +- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` " +- +- HAS_IT="no" +- for LIBPATH in $LIBPATHS ; do +- if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then +- HAS_IT="yes" +- fi +- done +- expr $HAS_IT : "yes" > /dev/null ++ rm -f $tmpfile $tmpfile.c ++ return $result + } + + has_header() + { +- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include" +- INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g` +- HPATHS="$HPATHS `echo $INCL | sed s/$libdir_name/include/g` " +- +- HAS_IT="no" +- for HPATH in $HPATHS ; do +- if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then +- HAS_IT="yes" +- fi +- done +- expr $HAS_IT : "yes" > /dev/null ++ header=$1 ++ tmpfile=/tmp/conftest.$$ ++ rm -f $tmpfile.o $tmpfile.c ++ case $header in ++ X11/*) extra_incs="#include <X11/Xlib.h>" ;; ++ *) extra_incs="" ;; ++ esac ++ cat >$tmpfile.c <<EOF ++$extra_incs ++#include <$header> ++int main() { return 0; } ++EOF ++ echo "cc=$cc $CPPFLAGS $CFLAGS" ++ echo -n "checking for <$header>... " ++ if $cc $CPPFLAGS $CFLAGS -c -o $tmpfile.o $tmpfile.c; then ++ echo "yes" ++ result=0 ++ else ++ echo "no" ++ result=1 ++ fi ++ rm -f $tmpfile.o $tmpfile.c ++ return $result + } + + CCONFIG="$CCONFIG $compile_type" diff --git a/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch b/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch new file mode 100644 index 0000000000..0ecfddcb53 --- /dev/null +++ b/recipes/mythtv/mythtv-0.20/libmyth-libdir.patch @@ -0,0 +1,11 @@ +--- mythtv-0.20/libs/libmyth/libmyth.pro 2006-08-20 07:45:34.000000000 +0100 ++++ mythtv-0.20/libs/libmyth/libmyth.pro 2007-01-16 14:54:59.000000000 +0000 +@@ -33,6 +33,8 @@ + SOURCES += DisplayResScreen.cpp util-x11.cpp qmdcodec.cpp + SOURCES += virtualkeyboard.cpp mythobservable.cpp mythsocket.cpp + ++DEFINES += LIBDIR=\"$${LIBDIR}\" ++ + INCLUDEPATH += ../libmythsamplerate ../libmythsoundtouch ../.. ../ + DEPENDPATH += ../libmythsamplerate ../libmythsoundtouch ../ ../libmythui + diff --git a/recipes/mythtv/mythtv-0.21/configure.patch b/recipes/mythtv/mythtv-0.21/configure.patch new file mode 100644 index 0000000000..3b0b9a313a --- /dev/null +++ b/recipes/mythtv/mythtv-0.21/configure.patch @@ -0,0 +1,183 @@ +--- /tmp/configure 2008-06-30 08:40:35.000000000 +0200 ++++ mythtv/configure 2008-07-23 09:51:41.000000000 +0200 +@@ -475,12 +475,13 @@ + } + + check_cmd(){ +- log "$@" ++ echo "Checking $@" ++ log "$@" + "$@" >>$logfile 2>&1 + } + + check_cc(){ +- log check_cc "$@" ++ log check_cc "$@" + cat >$TMPC + log_file $TMPC + check_cmd $cc $CFLAGS $ECFLAGS $OPTFLAGS "$@" -c -o $TMPO $TMPC +@@ -1115,11 +1116,11 @@ + fi + + # machine +-arch=`uname -m` ++disabled cross_compile && arch=`uname -m` + arch_raw="$arch" + cpu="generic" + cpu_override="no" +-processor=`uname -p 2>/dev/null` ++disabled cross_compile && processor=`uname -p 2>/dev/null` + processor_flags="" + tune="generic" + +@@ -1183,7 +1184,7 @@ + lamemp3="yes" + lirc="yes" + mac_bundle="no" +-opengl="yes" ++opengl="no" + v4l="yes" + x11="yes" + x11_include_path="/usr/X11R6/include" +@@ -1212,7 +1213,7 @@ + # build settings + SHFLAGS='-shared -Wl,-soname,$@' + VHOOKSHFLAGS='$(SHFLAGS)' +-LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' ++#LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' + FFSERVERLDFLAGS=-Wl,-E + LDCONFIG="ldconfig" + LIBPREF="lib" +@@ -1707,7 +1708,7 @@ + + has_library() + { +- if test -f /etc/ld.so.conf ; then ++ if test -f /etc/ld.so.conf && disabled cross_compile ; then + LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"` + else + LIBPATHS='' +@@ -1718,7 +1719,7 @@ + LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` " + + # recurse down just one level, should be enough in most cases +- if test -f /etc/ld.so.conf ; then ++ if test -f /etc/ld.so.conf && disabled cross_compile ; then + INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"` + SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'` + for x in $SRCH ; do +@@ -1727,9 +1728,9 @@ + done + fi + +- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` " ++ enabled cross_compile || LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` " + +- HAS_IT="no" ++ HAS_IT="yes" + for LIBPATH in $LIBPATHS ; do + if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then + echo "$1 IS at $LIBPATH" +@@ -1745,17 +1746,18 @@ + + has_header() + { +- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include" ++ enabled cross_compile || HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include" + INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g` + HPATHS="$HPATHS "$(echo $INCL | sed "s/$libdir_name/include/g") + +- HAS_IT="no" ++ HAS_IT="yes" + for HPATH in $HPATHS ; do + if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then + HAS_IT="yes" + fi + done +- expr $HAS_IT : "yes" > /dev/null ++ echo "$1: $HAS_IT" ++ expr $HAS_IT : "yes" > /dev/null + } + + append CCONFIG "$compile_type" +@@ -1861,13 +1863,15 @@ + if test x"$cmov" = x"default"; then + disable cmov + if enabled cpu_override; then +- is_x86_cmov_cpu "$cpu" && enable cmov ++ disabled cross_compile && is_x86_cmov_cpu "$cpu" && enable cmov + disabled cmov || is_x86_slow_cmov_cpu "$cpu" || enable fast_cmov + elif expr "$processor_flags" : ".*cmov" > /dev/null ; then +- enable cmov ++ disabled cross_compile && enable cmov + fi + fi + ++enabled cross_compile && disable cmov ++ + # use different default ARCHFLAGS for CPU missing cmov (Via C3 ...) + if test x"$arch" = x"x86_32" && disabled cmov && disabled cpu_override; then + ARCHFLAGS="-march=i586" +@@ -2239,7 +2243,7 @@ + EOF + + if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then +-$TMPE && cpuclipspositive="yes" ++enabled cross_compile || $TMPE && cpuclipspositive="yes" + fi + + # test negative wrap +@@ -2254,7 +2258,7 @@ + EOF + + if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then +-$TMPE && cpuclipsnegative="yes" ++enabled cross_compile || $TMPE && cpuclipsnegative="yes" + fi + + # test for distcc +@@ -2607,33 +2611,9 @@ + check_ldflags -Wl,--warn-common + check_ldflags $LDLATEFLAGS + +-# GCC version +-cat > $TMPC << EOF +-int main(int argc, char **argv) +-{ +- int ret = 0; +- if (argc == 1) +- { +- #if defined(__GNUC__) +- ret = __GNUC__; +- #endif +- } +- else +- { +- #if defined(__GNUC_MINOR__) +- ret = __GNUC_MINOR__; +- #endif +- } +- return ret; +-} +-EOF +- +-if $cc $CFLAGS $TMPC -o $TMPE ; then +- $TMPE +- GCC_MAJOR=$? +- $TMPE "minor" +- GCC_MINOR=$? +-fi ++gcc_version=$($cc -v 2>&1 | grep version | cut -s -d' ' -f 3) ++GCC_MAJOR=$(echo ${gcc_version} | cut -s -d'.' -f1) ++GCC_MINOR=$(echo ${gcc_version} | cut -s -d'.' -f2) + + if enabled symbol_visibility; then + if test x"$GCC_MAJOR" = x"4" ; then +@@ -2727,6 +2707,7 @@ + + check_header GL/gl.h + has_library libGL || has_library libopengl32 || disable opengl ++enabled cross_compile && disable opengl + + VENDOR_XVMC_LIBS="" + check_header X11/extensions/XvMClib.h diff --git a/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff b/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff new file mode 100644 index 0000000000..d0e32eb512 --- /dev/null +++ b/recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff @@ -0,0 +1,1669 @@ +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_arm.c mythtv/libs/libavcodec/armv4l/dsputil_arm.c +--- mythtv.orig/libs/libavcodec/armv4l/dsputil_arm.c 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/dsputil_arm.c 2008-07-24 19:54:00.753198000 +0200 +@@ -19,12 +19,14 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dsputil.h" ++#include "libavcodec/dsputil.h" + #ifdef HAVE_IPP +-#include "ipp.h" ++#include <ipp.h> + #endif + + extern void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx); ++extern void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx); ++extern void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx); + + extern void j_rev_dct_ARM(DCTELEM *data); + extern void simple_idct_ARM(DCTELEM *data); +@@ -41,6 +43,12 @@ + extern void ff_simple_idct_add_armv6(uint8_t *dest, int line_size, + DCTELEM *data); + ++extern void ff_simple_idct_neon(DCTELEM *data); ++extern void ff_simple_idct_put_neon(uint8_t *dest, int line_size, ++ DCTELEM *data); ++extern void ff_simple_idct_add_neon(uint8_t *dest, int line_size, ++ DCTELEM *data); ++ + /* XXX: local hack */ + static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); + static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); +@@ -202,6 +210,24 @@ + } + #endif + ++#ifdef HAVE_ARMV5TE ++static void prefetch_arm(void *mem, int stride, int h) ++{ ++ asm volatile( ++ "1: \n\t" ++ "subs %0, %0, #1 \n\t" ++ "pld [%1] \n\t" ++ "add %1, %1, %2 \n\t" ++ "bgt 1b \n\t" ++ : "+r"(h), "+r"(mem) : "r"(stride)); ++} ++#endif ++ ++int mm_support(void) ++{ ++ return ENABLE_IWMMXT * MM_IWMMXT; ++} ++ + void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx) + { + int idct_algo= avctx->idct_algo; +@@ -209,49 +235,60 @@ + ff_put_pixels_clamped = c->put_pixels_clamped; + ff_add_pixels_clamped = c->add_pixels_clamped; + +- if(idct_algo == FF_IDCT_AUTO){ ++ if (avctx->lowres == 0) { ++ if(idct_algo == FF_IDCT_AUTO){ + #if defined(HAVE_IPP) +- idct_algo = FF_IDCT_IPP; ++ idct_algo = FF_IDCT_IPP; ++#elif defined(HAVE_NEON) ++ idct_algo = FF_IDCT_SIMPLENEON; + #elif defined(HAVE_ARMV6) +- idct_algo = FF_IDCT_SIMPLEARMV6; ++ idct_algo = FF_IDCT_SIMPLEARMV6; + #elif defined(HAVE_ARMV5TE) +- idct_algo = FF_IDCT_SIMPLEARMV5TE; ++ idct_algo = FF_IDCT_SIMPLEARMV5TE; + #else +- idct_algo = FF_IDCT_ARM; ++ idct_algo = FF_IDCT_ARM; + #endif +- } ++ } + +- if(idct_algo==FF_IDCT_ARM){ +- c->idct_put= j_rev_dct_ARM_put; +- c->idct_add= j_rev_dct_ARM_add; +- c->idct = j_rev_dct_ARM; +- c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */ +- } else if (idct_algo==FF_IDCT_SIMPLEARM){ +- c->idct_put= simple_idct_ARM_put; +- c->idct_add= simple_idct_ARM_add; +- c->idct = simple_idct_ARM; +- c->idct_permutation_type= FF_NO_IDCT_PERM; ++ if(idct_algo==FF_IDCT_ARM){ ++ c->idct_put= j_rev_dct_ARM_put; ++ c->idct_add= j_rev_dct_ARM_add; ++ c->idct = j_rev_dct_ARM; ++ c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */ ++ } else if (idct_algo==FF_IDCT_SIMPLEARM){ ++ c->idct_put= simple_idct_ARM_put; ++ c->idct_add= simple_idct_ARM_add; ++ c->idct = simple_idct_ARM; ++ c->idct_permutation_type= FF_NO_IDCT_PERM; + #ifdef HAVE_ARMV6 +- } else if (idct_algo==FF_IDCT_SIMPLEARMV6){ +- c->idct_put= ff_simple_idct_put_armv6; +- c->idct_add= ff_simple_idct_add_armv6; +- c->idct = ff_simple_idct_armv6; +- c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM; ++ } else if (idct_algo==FF_IDCT_SIMPLEARMV6){ ++ c->idct_put= ff_simple_idct_put_armv6; ++ c->idct_add= ff_simple_idct_add_armv6; ++ c->idct = ff_simple_idct_armv6; ++ c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM; + #endif + #ifdef HAVE_ARMV5TE +- } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){ +- c->idct_put= simple_idct_put_armv5te; +- c->idct_add= simple_idct_add_armv5te; +- c->idct = simple_idct_armv5te; +- c->idct_permutation_type = FF_NO_IDCT_PERM; ++ } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){ ++ c->idct_put= simple_idct_put_armv5te; ++ c->idct_add= simple_idct_add_armv5te; ++ c->idct = simple_idct_armv5te; ++ c->idct_permutation_type = FF_NO_IDCT_PERM; + #endif + #ifdef HAVE_IPP +- } else if (idct_algo==FF_IDCT_IPP){ +- c->idct_put= simple_idct_ipp_put; +- c->idct_add= simple_idct_ipp_add; +- c->idct = simple_idct_ipp; +- c->idct_permutation_type= FF_NO_IDCT_PERM; ++ } else if (idct_algo==FF_IDCT_IPP){ ++ c->idct_put= simple_idct_ipp_put; ++ c->idct_add= simple_idct_ipp_add; ++ c->idct = simple_idct_ipp; ++ c->idct_permutation_type= FF_NO_IDCT_PERM; ++#endif ++#ifdef HAVE_NEON ++ } else if (idct_algo==FF_IDCT_SIMPLENEON){ ++ c->idct_put= ff_simple_idct_put_neon; ++ c->idct_add= ff_simple_idct_add_neon; ++ c->idct = ff_simple_idct_neon; ++ c->idct_permutation_type = FF_NO_IDCT_PERM; + #endif ++ } + } + + c->put_pixels_tab[0][0] = put_pixels16_arm; +@@ -271,7 +308,17 @@ + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK + c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm; + ++#ifdef HAVE_ARMV5TE ++ c->prefetch = prefetch_arm; ++#endif ++ + #ifdef HAVE_IWMMXT + dsputil_init_iwmmxt(c, avctx); + #endif ++#ifdef HAVE_ARMVFP ++ ff_float_init_arm_vfp(c, avctx); ++#endif ++#ifdef HAVE_NEON ++ ff_dsputil_init_neon(c, avctx); ++#endif + } +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_arm_s.S mythtv/libs/libavcodec/armv4l/dsputil_arm_s.S +--- mythtv.orig/libs/libavcodec/armv4l/dsputil_arm_s.S 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/dsputil_arm_s.S 2008-07-24 19:54:00.753198000 +0200 +@@ -19,6 +19,13 @@ + @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + @ + ++#include "config.h" ++ ++#ifndef HAVE_PLD ++.macro pld reg ++.endm ++#endif ++ + .macro ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4 + mov \Rd0, \Rn0, lsr #(\shift * 8) + mov \Rd1, \Rn1, lsr #(\shift * 8) +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt.c mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt.c +--- mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt.c 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt.c 2008-07-24 19:54:00.753198000 +0200 +@@ -19,10 +19,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dsputil.h" ++#include "libavcodec/dsputil.h" + + #define DEF(x, y) x ## _no_rnd_ ## y ##_iwmmxt +-#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12"); ++#define SET_RND(regd) asm volatile ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12"); + #define WAVG2B "wavg2b" + #include "dsputil_iwmmxt_rnd.h" + #undef DEF +@@ -30,7 +30,7 @@ + #undef WAVG2B + + #define DEF(x, y) x ## _ ## y ##_iwmmxt +-#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12"); ++#define SET_RND(regd) asm volatile ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12"); + #define WAVG2B "wavg2br" + #include "dsputil_iwmmxt_rnd.h" + #undef DEF +@@ -89,7 +89,7 @@ + { + uint8_t *pixels2 = pixels + line_size; + +- __asm__ __volatile__ ( ++ asm volatile ( + "mov r12, #4 \n\t" + "1: \n\t" + "pld [%[pixels], %[line_size2]] \n\t" +@@ -125,7 +125,7 @@ + + static void clear_blocks_iwmmxt(DCTELEM *blocks) + { +- __asm __volatile( ++ asm volatile( + "wzero wr0 \n\t" + "mov r1, #(128 * 6 / 32) \n\t" + "1: \n\t" +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h +--- mythtv.orig/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/dsputil_iwmmxt_rnd.h 2008-07-24 19:54:01.023198000 +0200 +@@ -19,13 +19,14 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#ifndef FFMPEG_DSPUTIL_IWMMXT_RND_H +-#define FFMPEG_DSPUTIL_IWMMXT_RND_H ++/* This header intentionally has no multiple inclusion guards. It is meant to ++ * be included multiple times and generates different code depending on the ++ * value of certain #defines. */ + + void DEF(put, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) + { + int stride = line_size; +- __asm__ __volatile__ ( ++ asm volatile ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" +@@ -59,7 +60,7 @@ + void DEF(avg, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) + { + int stride = line_size; +- __asm__ __volatile__ ( ++ asm volatile ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" +@@ -101,7 +102,7 @@ + void DEF(put, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) + { + int stride = line_size; +- __asm__ __volatile__ ( ++ asm volatile ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" +@@ -141,7 +142,7 @@ + void DEF(avg, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) + { + int stride = line_size; +- __asm__ __volatile__ ( ++ asm volatile ( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" +@@ -200,7 +201,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" +@@ -249,7 +250,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" +@@ -310,7 +311,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" +@@ -371,7 +372,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" +@@ -447,7 +448,7 @@ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" +@@ -501,7 +502,7 @@ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" +@@ -558,7 +559,7 @@ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" +@@ -626,7 +627,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" +@@ -720,7 +721,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" +@@ -862,7 +863,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "pld [%[pixels]] \n\t" +@@ -966,7 +967,7 @@ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version +- __asm__ __volatile__( ++ asm volatile( + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "pld [%[pixels]] \n\t" +@@ -1115,5 +1116,3 @@ + : [line_size]"r"(line_size) + : "r12", "memory"); + } +- +-#endif /* FFMPEG_DSPUTIL_IWMMXT_RND_H */ +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/dsputil_neon.c mythtv/libs/libavcodec/armv4l/dsputil_neon.c +--- mythtv.orig/libs/libavcodec/armv4l/dsputil_neon.c 1970-01-01 01:00:00.000000000 +0100 ++++ mythtv/libs/libavcodec/armv4l/dsputil_neon.c 2008-07-24 19:54:01.023198000 +0200 +@@ -0,0 +1,397 @@ ++/* ++ * ARM NEON optimised DSP functions ++ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include <stdint.h> ++ ++#include "libavcodec/avcodec.h" ++#include "libavcodec/dsputil.h" ++ ++extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, ++ int h, int x, int y); ++ ++#define PUT_PIXELS_16_X2(vhadd) \ ++ "1: \n\t" \ ++ "vld1.64 {d0,d1,d2}, [%[p]], %[line_size] \n\t" \ ++ "vld1.64 {d4,d5,d6}, [%[p]], %[line_size] \n\t" \ ++ "pld [%[p]] \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ "vext.8 q1, q0, q1, #1 \n\t" \ ++ "vext.8 q3, q2, q3, #1 \n\t" \ ++ vhadd".u8 q0, q0, q1 \n\t" \ ++ vhadd".u8 q2, q2, q3 \n\t" \ ++ "vst1.64 {d0,d1}, [%[b],:64], %[line_size] \n\t" \ ++ "vst1.64 {d4,d5}, [%[b],:64], %[line_size] \n\t" \ ++ "bne 1b \n\t" ++ ++#define PUT_PIXELS_16_Y2(vhadd) \ ++ "add %[p1], %[p0], %[line_size] \n\t" \ ++ "lsl %[l2], %[line_size], #1 \n\t" \ ++ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ ++ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \ ++ "1: \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ vhadd".u8 q2, q0, q1 \n\t" \ ++ "vst1.64 {d4,d5}, [%[b],:128], %[line_size] \n\t" \ ++ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ ++ vhadd".u8 q2, q0, q1 \n\t" \ ++ "vst1.64 {d4,d5}, [%[b],:128], %[line_size] \n\t" \ ++ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \ ++ "bne 1b \n\t" ++ ++#define PUT_PIXELS_16_XY2(vshrn, no_rnd) \ ++ "lsl %[l2], %[line_size], #1 \n\t" \ ++ "add %[p1], %[p0], %[line_size] \n\t" \ ++ "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \ ++ "vld1.64 {d4,d5,d6}, [%[p1]], %[l2] \n\t" \ ++ "pld [%[p0]] \n\t" \ ++ "pld [%[p1]] \n\t" \ ++ "vext.8 q1, q0, q1, #1 \n\t" \ ++ "vext.8 q3, q2, q3, #1 \n\t" \ ++ "vaddl.u8 q8, d0, d2 \n\t" \ ++ "vaddl.u8 q10, d1, d3 \n\t" \ ++ "vaddl.u8 q9, d4, d6 \n\t" \ ++ "vaddl.u8 q11, d5, d7 \n\t" \ ++ "1: \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \ ++ "vadd.u16 q12, q8, q9 \n\t" \ ++ "pld [%[p0]] \n\t" \ ++ no_rnd "vadd.u16 q12, q12, q13 \n\t" \ ++ "vext.8 q15, q0, q1, #1 \n\t" \ ++ "vadd.u16 q1, q10, q11 \n\t" \ ++ vshrn".u16 d28, q12, #2 \n\t" \ ++ no_rnd "vadd.u16 q1, q1, q13 \n\t" \ ++ vshrn".u16 d29, q1, #2 \n\t" \ ++ "vaddl.u8 q8, d0, d30 \n\t" \ ++ "vld1.64 {d2,d3,d4}, [%[p1]], %[l2] \n\t" \ ++ "vaddl.u8 q10, d1, d31 \n\t" \ ++ "vst1.64 {d28,d29}, [%[b],:128], %[line_size] \n\t" \ ++ "vadd.u16 q12, q8, q9 \n\t" \ ++ "pld [%[p1]] \n\t" \ ++ no_rnd "vadd.u16 q12, q12, q13 \n\t" \ ++ "vext.8 q2, q1, q2, #1 \n\t" \ ++ "vadd.u16 q0, q10, q11 \n\t" \ ++ vshrn".u16 d30, q12, #2 \n\t" \ ++ no_rnd "vadd.u16 q0, q0, q13 \n\t" \ ++ vshrn".u16 d31, q0, #2 \n\t" \ ++ "vaddl.u8 q9, d2, d4 \n\t" \ ++ "vst1.64 {d30,d31}, [%[b],:128], %[line_size] \n\t" \ ++ "vaddl.u8 q11, d3, d5 \n\t" \ ++ "bgt 1b \n\t" ++ ++#define PUT_PIXELS_8_X2(vhadd) \ ++ "1: \n\t" \ ++ "vld1.64 {d0,d1}, [%[p]], %[line_size] \n\t" \ ++ "vld1.64 {d2,d3}, [%[p]], %[line_size] \n\t" \ ++ "pld [%[p]] \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ "vext.8 d1, d0, d1, #1 \n\t" \ ++ "vext.8 d3, d2, d3, #1 \n\t" \ ++ "vswp d1, d2 \n\t" \ ++ vhadd".u8 q0, q0, q1 \n\t" \ ++ "vst1.64 {d0}, [%[b],:64], %[line_size] \n\t" \ ++ "vst1.64 {d1}, [%[b],:64], %[line_size] \n\t" \ ++ "bne 1b \n\t" ++ ++#define PUT_PIXELS_8_Y2(vhadd) \ ++ "add %[p1], %[p0], %[line_size] \n\t" \ ++ "lsl %[l2], %[line_size], #1 \n\t" \ ++ "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \ ++ "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \ ++ "1: \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ vhadd".u8 d4, d0, d1 \n\t" \ ++ "vst1.64 {d4}, [%[b],:64], %[line_size] \n\t" \ ++ "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \ ++ vhadd".u8 d4, d0, d1 \n\t" \ ++ "vst1.64 {d4}, [%[b],:64], %[line_size] \n\t" \ ++ "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \ ++ "bne 1b \n\t" ++ ++#define PUT_PIXELS8_XY2(vshrn, no_rnd) \ ++ "lsl %[l2], %[line_size], #1 \n\t" \ ++ "add %[p1], %[p0], %[line_size] \n\t" \ ++ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ ++ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \ ++ "pld [%[p0]] \n\t" \ ++ "pld [%[p1]] \n\t" \ ++ "vext.8 d4, d0, d1, #1 \n\t" \ ++ "vext.8 d6, d2, d3, #1 \n\t" \ ++ "vaddl.u8 q8, d0, d4 \n\t" \ ++ "vaddl.u8 q9, d2, d6 \n\t" \ ++ "1: \n\t" \ ++ "subs %[h], %[h], #2 \n\t" \ ++ "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ ++ "pld [%[p0]] \n\t" \ ++ "vadd.u16 q10, q8, q9 \n\t" \ ++ "vext.8 d4, d0, d1, #1 \n\t" \ ++ no_rnd "vadd.u16 q10, q10, q11 \n\t" \ ++ "vaddl.u8 q8, d0, d4 \n\t" \ ++ vshrn".u16 d5, q10, #2 \n\t" \ ++ "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \ ++ "vadd.u16 q10, q8, q9 \n\t" \ ++ "pld [%[p1]] \n\t" \ ++ no_rnd "vadd.u16 q10, q10, q11 \n\t" \ ++ "vst1.64 {d5}, [%[b],:64], %[line_size] \n\t" \ ++ vshrn".u16 d7, q10, #2 \n\t" \ ++ "vext.8 d6, d2, d3, #1 \n\t" \ ++ "vaddl.u8 q9, d2, d6 \n\t" \ ++ "vst1.64 {d7}, [%[b],:64], %[line_size] \n\t" \ ++ "bgt 1b \n\t" ++ ++static void put_pixels16_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ "1: \n\t" ++ "vld1.64 {d0,d1}, [%[pixels]], %[line_size] \n\t" ++ "vld1.64 {d2,d3}, [%[pixels]], %[line_size] \n\t" ++ "vld1.64 {d4,d5}, [%[pixels]], %[line_size] \n\t" ++ "vld1.64 {d6,d7}, [%[pixels]], %[line_size] \n\t" ++ "pld [%[pixels]] \n\t" ++ "subs %[h], %[h], #4 \n\t" ++ "vst1.64 {d0,d1}, [%[block],:128], %[line_size] \n\t" ++ "vst1.64 {d2,d3}, [%[block],:128], %[line_size] \n\t" ++ "vst1.64 {d4,d5}, [%[block],:128], %[line_size] \n\t" ++ "vst1.64 {d6,d7}, [%[block],:128], %[line_size] \n\t" ++ "bne 1b \n\t" ++ : [block]"+r"(block), [pixels]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "memory"); ++} ++ ++static void put_pixels16_x2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ PUT_PIXELS_16_X2("vrhadd") ++ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "memory"); ++} ++ ++static void put_pixels16_y2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS_16_Y2("vrhadd") ++ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "memory"); ++} ++ ++static void put_pixels16_xy2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS_16_XY2("vrshrn", "@") ++ : [b]"+r"(block), ++ [p0]"+r"(pixels), ++ [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", ++ "d28", "d29", "d30", "d31", ++ "q8", "q9", "q10", "q11", "q12", "memory"); ++} ++ ++static void put_pixels8_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ "1: \n\t" ++ "vld1.64 {d0}, [%[p]], %[line_size] \n\t" ++ "vld1.64 {d1}, [%[p]], %[line_size] \n\t" ++ "vld1.64 {d2}, [%[p]], %[line_size] \n\t" ++ "vld1.64 {d3}, [%[p]], %[line_size] \n\t" ++ "subs %[h], %[h], #4 \n\t" ++ "vst1.64 {d0}, [%[b],:64], %[line_size] \n\t" ++ "vst1.64 {d1}, [%[b],:64], %[line_size] \n\t" ++ "vst1.64 {d2}, [%[b],:64], %[line_size] \n\t" ++ "vst1.64 {d3}, [%[b],:64], %[line_size] \n\t" ++ "bne 1b \n\t" ++ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "memory"); ++} ++ ++static void put_pixels8_x2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ PUT_PIXELS_8_X2("vrhadd") ++ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "memory"); ++} ++ ++static void put_pixels8_y2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS_8_Y2("vrhadd") ++ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d4", "memory"); ++} ++ ++static void put_pixels8_xy2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS8_XY2("vrshrn", "@") ++ : [b]"+r"(block), ++ [p0]"+r"(pixels), ++ [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d6", "d7", ++ "q8", "q9", "q10", "memory"); ++} ++ ++static void put_no_rnd_pixels16_x2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ PUT_PIXELS_16_X2("vhadd") ++ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "memory"); ++} ++ ++static void put_no_rnd_pixels16_y2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS_16_Y2("vhadd") ++ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "memory"); ++} ++ ++static void put_no_rnd_pixels16_xy2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ "vmov.i16 q13, #1 \n\t" ++ PUT_PIXELS_16_XY2("vshrn", "") ++ : [b]"+r"(block), ++ [p0]"+r"(pixels), ++ [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", ++ "d28", "d29", "d30", "d31", ++ "q8", "q9", "q10", "q11", "q12", "q13", "memory"); ++} ++ ++static void put_no_rnd_pixels8_x2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ asm volatile( ++ PUT_PIXELS_8_X2("vhadd") ++ : [b]"+r"(block), [p]"+r"(pixels), [h]"+r"(h) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "memory"); ++} ++ ++static void put_no_rnd_pixels8_y2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ PUT_PIXELS_8_Y2("vhadd") ++ : [b]"+r"(block), [p0]"+r"(pixels), [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d4", "memory"); ++} ++ ++static void put_no_rnd_pixels8_xy2_neon(uint8_t *block, const uint8_t *pixels, ++ int line_size, int h) ++{ ++ const uint8_t *p1; ++ int l2; ++ ++ asm volatile( ++ "vmov.i16 q11, #1 \n\t" ++ PUT_PIXELS8_XY2("vshrn", "") ++ : [b]"+r"(block), ++ [p0]"+r"(pixels), ++ [p1]"=&r"(p1), [h]"+r"(h), ++ [l2]"=&r"(l2) ++ : [line_size]"r"(line_size) ++ : "d0", "d1", "d2", "d3", "d4", "d6", "d7", ++ "q8", "q9", "q10", "q11", "memory"); ++} ++ ++static void put_h264_qpel16_mc00_neon(uint8_t *dst, uint8_t *src, int stride) ++{ ++ put_pixels16_neon(dst, src, stride, 16); ++} ++ ++void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx) ++{ ++ c->put_pixels_tab[0][0] = put_pixels16_neon; ++ c->put_pixels_tab[0][1] = put_pixels16_x2_neon; ++ c->put_pixels_tab[0][2] = put_pixels16_y2_neon; ++ c->put_pixels_tab[0][3] = put_pixels16_xy2_neon; ++ c->put_pixels_tab[1][0] = put_pixels8_neon; ++ c->put_pixels_tab[1][1] = put_pixels8_x2_neon; ++ c->put_pixels_tab[1][2] = put_pixels8_y2_neon; ++ c->put_pixels_tab[1][3] = put_pixels8_xy2_neon; ++ ++ c->put_no_rnd_pixels_tab[0][0] = put_pixels16_neon; ++ c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_neon; ++ c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_neon; ++ c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_neon; ++ c->put_no_rnd_pixels_tab[1][0] = put_pixels8_neon; ++ c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_neon; ++ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_neon; ++ c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_neon; ++ ++ c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_neon; ++ ++ c->put_h264_qpel_pixels_tab[0][0] = put_h264_qpel16_mc00_neon; ++} +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/float_arm_vfp.c mythtv/libs/libavcodec/armv4l/float_arm_vfp.c +--- mythtv.orig/libs/libavcodec/armv4l/float_arm_vfp.c 1970-01-01 01:00:00.000000000 +0100 ++++ mythtv/libs/libavcodec/armv4l/float_arm_vfp.c 2008-07-24 19:54:01.023198000 +0200 +@@ -0,0 +1,208 @@ ++/* ++ * Copyright (c) 2008 Siarhei Siamashka <ssvb@users.sourceforge.net> ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include "libavcodec/dsputil.h" ++ ++/* ++ * VFP is a floating point coprocessor used in some ARM cores. VFP11 has 1 cycle ++ * throughput for almost all the instructions (except for double precision ++ * arithmetics), but rather high latency. Latency is 4 cycles for loads and 8 cycles ++ * for arithmetic operations. Scheduling code to avoid pipeline stalls is very ++ * important for performance. One more interesting feature is that VFP has ++ * independent load/store and arithmetics pipelines, so it is possible to make ++ * them work simultaneously and get more than 1 operation per cycle. Load/store ++ * pipeline can process 2 single precision floating point values per cycle and ++ * supports bulk loads and stores for large sets of registers. Arithmetic operations ++ * can be done on vectors, which allows to keep the arithmetics pipeline busy, ++ * while the processor may issue and execute other instructions. Detailed ++ * optimization manuals can be found at http://www.arm.com ++ */ ++ ++/** ++ * ARM VFP optimized implementation of 'vector_fmul_c' function. ++ * Assume that len is a positive number and is multiple of 8 ++ */ ++static void vector_fmul_vfp(float *dst, const float *src, int len) ++{ ++ int tmp; ++ asm volatile( ++ "fmrx %[tmp], fpscr\n\t" ++ "orr %[tmp], %[tmp], #(3 << 16)\n\t" /* set vector size to 4 */ ++ "fmxr fpscr, %[tmp]\n\t" ++ ++ "fldmias %[dst_r]!, {s0-s3}\n\t" ++ "fldmias %[src]!, {s8-s11}\n\t" ++ "fldmias %[dst_r]!, {s4-s7}\n\t" ++ "fldmias %[src]!, {s12-s15}\n\t" ++ "fmuls s8, s0, s8\n\t" ++ "1:\n\t" ++ "subs %[len], %[len], #16\n\t" ++ "fmuls s12, s4, s12\n\t" ++ "fldmiasge %[dst_r]!, {s16-s19}\n\t" ++ "fldmiasge %[src]!, {s24-s27}\n\t" ++ "fldmiasge %[dst_r]!, {s20-s23}\n\t" ++ "fldmiasge %[src]!, {s28-s31}\n\t" ++ "fmulsge s24, s16, s24\n\t" ++ "fstmias %[dst_w]!, {s8-s11}\n\t" ++ "fstmias %[dst_w]!, {s12-s15}\n\t" ++ "fmulsge s28, s20, s28\n\t" ++ "fldmiasgt %[dst_r]!, {s0-s3}\n\t" ++ "fldmiasgt %[src]!, {s8-s11}\n\t" ++ "fldmiasgt %[dst_r]!, {s4-s7}\n\t" ++ "fldmiasgt %[src]!, {s12-s15}\n\t" ++ "fmulsge s8, s0, s8\n\t" ++ "fstmiasge %[dst_w]!, {s24-s27}\n\t" ++ "fstmiasge %[dst_w]!, {s28-s31}\n\t" ++ "bgt 1b\n\t" ++ ++ "bic %[tmp], %[tmp], #(7 << 16)\n\t" /* set vector size back to 1 */ ++ "fmxr fpscr, %[tmp]\n\t" ++ : [dst_w] "+&r" (dst), [dst_r] "+&r" (dst), [src] "+&r" (src), [len] "+&r" (len), [tmp] "=&r" (tmp) ++ : ++ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", ++ "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15", ++ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23", ++ "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31", ++ "cc", "memory"); ++} ++ ++/** ++ * ARM VFP optimized implementation of 'vector_fmul_reverse_c' function. ++ * Assume that len is a positive number and is multiple of 8 ++ */ ++static void vector_fmul_reverse_vfp(float *dst, const float *src0, const float *src1, int len) ++{ ++ src1 += len; ++ asm volatile( ++ "fldmdbs %[src1]!, {s0-s3}\n\t" ++ "fldmias %[src0]!, {s8-s11}\n\t" ++ "fldmdbs %[src1]!, {s4-s7}\n\t" ++ "fldmias %[src0]!, {s12-s15}\n\t" ++ "fmuls s8, s3, s8\n\t" ++ "fmuls s9, s2, s9\n\t" ++ "fmuls s10, s1, s10\n\t" ++ "fmuls s11, s0, s11\n\t" ++ "1:\n\t" ++ "subs %[len], %[len], #16\n\t" ++ "fldmdbsge %[src1]!, {s16-s19}\n\t" ++ "fmuls s12, s7, s12\n\t" ++ "fldmiasge %[src0]!, {s24-s27}\n\t" ++ "fmuls s13, s6, s13\n\t" ++ "fldmdbsge %[src1]!, {s20-s23}\n\t" ++ "fmuls s14, s5, s14\n\t" ++ "fldmiasge %[src0]!, {s28-s31}\n\t" ++ "fmuls s15, s4, s15\n\t" ++ "fmulsge s24, s19, s24\n\t" ++ "fldmdbsgt %[src1]!, {s0-s3}\n\t" ++ "fmulsge s25, s18, s25\n\t" ++ "fstmias %[dst]!, {s8-s13}\n\t" ++ "fmulsge s26, s17, s26\n\t" ++ "fldmiasgt %[src0]!, {s8-s11}\n\t" ++ "fmulsge s27, s16, s27\n\t" ++ "fmulsge s28, s23, s28\n\t" ++ "fldmdbsgt %[src1]!, {s4-s7}\n\t" ++ "fmulsge s29, s22, s29\n\t" ++ "fstmias %[dst]!, {s14-s15}\n\t" ++ "fmulsge s30, s21, s30\n\t" ++ "fmulsge s31, s20, s31\n\t" ++ "fmulsge s8, s3, s8\n\t" ++ "fldmiasgt %[src0]!, {s12-s15}\n\t" ++ "fmulsge s9, s2, s9\n\t" ++ "fmulsge s10, s1, s10\n\t" ++ "fstmiasge %[dst]!, {s24-s27}\n\t" ++ "fmulsge s11, s0, s11\n\t" ++ "fstmiasge %[dst]!, {s28-s31}\n\t" ++ "bgt 1b\n\t" ++ ++ : [dst] "+&r" (dst), [src0] "+&r" (src0), [src1] "+&r" (src1), [len] "+&r" (len) ++ : ++ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", ++ "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15", ++ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23", ++ "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31", ++ "cc", "memory"); ++} ++ ++#ifdef HAVE_ARMV6 ++/** ++ * ARM VFP optimized float to int16 conversion. ++ * Assume that len is a positive number and is multiple of 8, destination ++ * buffer is at least 4 bytes aligned (8 bytes alignment is better for ++ * performance), little endian byte sex ++ */ ++void float_to_int16_vfp(int16_t *dst, const float *src, int len) ++{ ++ asm volatile( ++ "fldmias %[src]!, {s16-s23}\n\t" ++ "ftosis s0, s16\n\t" ++ "ftosis s1, s17\n\t" ++ "ftosis s2, s18\n\t" ++ "ftosis s3, s19\n\t" ++ "ftosis s4, s20\n\t" ++ "ftosis s5, s21\n\t" ++ "ftosis s6, s22\n\t" ++ "ftosis s7, s23\n\t" ++ "1:\n\t" ++ "subs %[len], %[len], #8\n\t" ++ "fmrrs r3, r4, {s0, s1}\n\t" ++ "fmrrs r5, r6, {s2, s3}\n\t" ++ "fmrrs r7, r8, {s4, s5}\n\t" ++ "fmrrs ip, lr, {s6, s7}\n\t" ++ "fldmiasgt %[src]!, {s16-s23}\n\t" ++ "ssat r4, #16, r4\n\t" ++ "ssat r3, #16, r3\n\t" ++ "ssat r6, #16, r6\n\t" ++ "ssat r5, #16, r5\n\t" ++ "pkhbt r3, r3, r4, lsl #16\n\t" ++ "pkhbt r4, r5, r6, lsl #16\n\t" ++ "ftosisgt s0, s16\n\t" ++ "ftosisgt s1, s17\n\t" ++ "ftosisgt s2, s18\n\t" ++ "ftosisgt s3, s19\n\t" ++ "ftosisgt s4, s20\n\t" ++ "ftosisgt s5, s21\n\t" ++ "ftosisgt s6, s22\n\t" ++ "ftosisgt s7, s23\n\t" ++ "ssat r8, #16, r8\n\t" ++ "ssat r7, #16, r7\n\t" ++ "ssat lr, #16, lr\n\t" ++ "ssat ip, #16, ip\n\t" ++ "pkhbt r5, r7, r8, lsl #16\n\t" ++ "pkhbt r6, ip, lr, lsl #16\n\t" ++ "stmia %[dst]!, {r3-r6}\n\t" ++ "bgt 1b\n\t" ++ ++ : [dst] "+&r" (dst), [src] "+&r" (src), [len] "+&r" (len) ++ : ++ : "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", ++ "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23", ++ "r3", "r4", "r5", "r6", "r7", "r8", "ip", "lr", ++ "cc", "memory"); ++} ++#endif ++ ++void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx) ++{ ++ c->vector_fmul = vector_fmul_vfp; ++ c->vector_fmul_reverse = vector_fmul_reverse_vfp; ++#ifdef HAVE_ARMV6 ++ c->float_to_int16 = float_to_int16_vfp; ++#endif ++} +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/h264dsp_neon.S mythtv/libs/libavcodec/armv4l/h264dsp_neon.S +--- mythtv.orig/libs/libavcodec/armv4l/h264dsp_neon.S 1970-01-01 01:00:00.000000000 +0100 ++++ mythtv/libs/libavcodec/armv4l/h264dsp_neon.S 2008-07-24 19:54:01.033198000 +0200 +@@ -0,0 +1,148 @@ ++/* ++ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++ .fpu neon ++ ++ .text ++ .align ++ .global ff_put_h264_chroma_mc8_neon ++ .func ff_put_h264_chroma_mc8_neon ++/* void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, ++ int h, int x, int y) */ ++ff_put_h264_chroma_mc8_neon: ++ push {r4-r7} ++ ldrd r4, [sp, #16] ++ ++ pld [r1] ++ pld [r1, r2] ++ ++ muls r7, r4, r5 ++ rsb r6, r7, r5, lsl #3 ++ rsb ip, r7, r4, lsl #3 ++ sub r4, r7, r4, lsl #3 ++ sub r4, r4, r5, lsl #3 ++ add r4, r4, #64 ++ ++ beq 2f ++ ++ add r5, r1, r2 ++ ++ vdup.8 d0, r4 ++ lsl r4, r2, #1 ++ vdup.8 d1, ip ++ vld1.64 {d4,d5}, [r1], r4 ++ vdup.8 d2, r6 ++ vld1.64 {d6,d7}, [r5], r4 ++ vdup.8 d3, r7 ++ ++ mov r6, #32 ++ vext.8 d5, d4, d5, #1 ++ vdup.16 q12, r6 ++ vext.8 d7, d6, d7, #1 ++1: ++ pld [r5] ++ vmull.u8 q8, d4, d0 ++ vmlal.u8 q8, d5, d1 ++ vld1.64 {d4,d5}, [r1], r4 ++ vmlal.u8 q8, d6, d2 ++ vext.8 d5, d4, d5, #1 ++ vmlal.u8 q8, d7, d3 ++ vmull.u8 q9, d6, d0 ++ vadd.i16 q8, q8, q12 ++ subs r3, r3, #2 ++ vmlal.u8 q9, d7, d1 ++ vshrn.u16 d16, q8, #6 ++ vld1.64 {d6,d7}, [r5], r4 ++ vmlal.u8 q9, d4, d2 ++ vmlal.u8 q9, d5, d3 ++ pld [r1] ++ vadd.i16 q9, q9, q12 ++ vst1.64 {d16}, [r0,:64], r2 ++ vshrn.u16 d17, q9, #6 ++ vext.8 d7, d6, d7, #1 ++ vst1.64 {d17}, [r0,:64], r2 ++ bgt 1b ++ ++ pop {r4-r7} ++ bx lr ++ ++2: ++ tst r6, r6 ++ add ip, ip, r6 ++ vdup.8 d0, r4 ++ vdup.8 d1, ip ++ mov r6, #32 ++ vdup.16 q12, r6 ++ ++ beq 4f ++ ++ add r5, r1, r2 ++ lsl r4, r2, #1 ++ vld1.64 {d4}, [r1], r4 ++ vld1.64 {d6}, [r5], r4 ++3: ++ pld [r5] ++ vmull.u8 q8, d4, d0 ++ vmlal.u8 q8, d6, d1 ++ vld1.64 {d4}, [r1], r4 ++ vmull.u8 q9, d6, d0 ++ vadd.i16 q8, q8, q12 ++ vmlal.u8 q9, d4, d1 ++ vshrn.u16 d16, q8, #6 ++ vadd.i16 q9, q9, q12 ++ vst1.64 {d16}, [r0,:64], r2 ++ vshrn.u16 d17, q9, #6 ++ subs r3, r3, #2 ++ vld1.64 {d6}, [r5], r4 ++ pld [r1] ++ vst1.64 {d17}, [r0,:64], r2 ++ bgt 3b ++ ++ pop {r4-r7} ++ bx lr ++ ++4: ++ vld1.64 {d4,d5}, [r1], r2 ++ vld1.64 {d6,d7}, [r1], r2 ++ vext.8 d5, d4, d5, #1 ++ vext.8 d7, d6, d7, #1 ++5: ++ pld [r1] ++ subs r3, r3, #2 ++ vmull.u8 q8, d4, d0 ++ vmlal.u8 q8, d5, d1 ++ vld1.64 {d4,d5}, [r1], r2 ++ vmull.u8 q9, d6, d0 ++ vmlal.u8 q9, d7, d1 ++ pld [r1] ++ vadd.i16 q8, q8, q12 ++ vadd.i16 q9, q9, q12 ++ vext.8 d5, d4, d5, #1 ++ vshrn.u16 d16, q8, #6 ++ vld1.64 {d6,d7}, [r1], r2 ++ vshrn.u16 d17, q9, #6 ++ vst1.64 {d16}, [r0,:64], r2 ++ vext.8 d7, d6, d7, #1 ++ vst1.64 {d17}, [r0,:64], r2 ++ bgt 5b ++ ++ pop {r4-r7} ++ bx lr ++ .endfunc +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_arm.c mythtv/libs/libavcodec/armv4l/mpegvideo_arm.c +--- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_arm.c 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/mpegvideo_arm.c 2008-07-24 19:54:01.263198000 +0200 +@@ -18,9 +18,9 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dsputil.h" +-#include "mpegvideo.h" +-#include "avcodec.h" ++#include "libavcodec/avcodec.h" ++#include "libavcodec/dsputil.h" ++#include "libavcodec/mpegvideo.h" + + extern void MPV_common_init_iwmmxt(MpegEncContext *s); + extern void MPV_common_init_armv5te(MpegEncContext *s); +@@ -28,7 +28,7 @@ + void MPV_common_init_armv4l(MpegEncContext *s) + { + /* IWMMXT support is a superset of armv5te, so +- * allow optimised functions for armv5te unless ++ * allow optimized functions for armv5te unless + * a better iwmmxt function exists + */ + #ifdef HAVE_ARMV5TE +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_armv5te.c mythtv/libs/libavcodec/armv4l/mpegvideo_armv5te.c +--- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_armv5te.c 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/mpegvideo_armv5te.c 2008-07-24 19:54:01.263198000 +0200 +@@ -19,9 +19,9 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dsputil.h" +-#include "mpegvideo.h" +-#include "avcodec.h" ++#include "libavcodec/avcodec.h" ++#include "libavcodec/dsputil.h" ++#include "libavcodec/mpegvideo.h" + + + #ifdef ENABLE_ARM_TESTS +@@ -65,7 +65,7 @@ + ({ DCTELEM *xblock = xxblock; \ + int xqmul = xxqmul, xqadd = xxqadd, xcount = xxcount, xtmp; \ + int xdata1, xdata2; \ +-__asm__ __volatile__( \ ++asm volatile( \ + "subs %[count], %[count], #2 \n\t" \ + "ble 2f \n\t" \ + "ldrd r4, [%[block], #0] \n\t" \ +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c mythtv/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c +--- mythtv.orig/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/mpegvideo_iwmmxt.c 2008-07-24 19:54:01.273198000 +0200 +@@ -18,9 +18,9 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dsputil.h" +-#include "mpegvideo.h" +-#include "avcodec.h" ++#include "libavcodec/avcodec.h" ++#include "libavcodec/dsputil.h" ++#include "libavcodec/mpegvideo.h" + + static void dct_unquantize_h263_intra_iwmmxt(MpegEncContext *s, + DCTELEM *block, int n, int qscale) +@@ -48,7 +48,7 @@ + else + nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ]; + +- __asm__ __volatile__ ( ++ asm volatile ( + /* "movd %1, %%mm6 \n\t" //qmul */ + /* "packssdw %%mm6, %%mm6 \n\t" */ + /* "packssdw %%mm6, %%mm6 \n\t" */ +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/simple_idct_arm.S mythtv/libs/libavcodec/armv4l/simple_idct_arm.S +--- mythtv.orig/libs/libavcodec/armv4l/simple_idct_arm.S 2008-07-23 12:19:05.000000000 +0200 ++++ mythtv/libs/libavcodec/armv4l/simple_idct_arm.S 2008-07-24 19:54:01.503198000 +0200 +@@ -79,7 +79,7 @@ + + + __row_loop: +- @@ read the row and check if it is null, almost null, or not, according to strongarm specs, it is not necessary to optimise ldr accesses (i.e. split 32bits in 2 16bits words), at least it gives more usable registers :) ++ @@ read the row and check if it is null, almost null, or not, according to strongarm specs, it is not necessary to optimize ldr accesses (i.e. split 32bits in 2 16bits words), at least it gives more usable registers :) + ldr r1, [r14, #0] @ R1=(int32)(R12)[0]=ROWr32[0] (relative row cast to a 32b pointer) + ldr r2, [r14, #4] @ R2=(int32)(R12)[1]=ROWr32[1] + ldr r3, [r14, #8] @ R3=ROWr32[2] +@@ -421,7 +421,7 @@ + @@ col[40] = ((a2 - b2) >> COL_SHIFT); + @@ col[48] = ((a1 - b1) >> COL_SHIFT); + @@ col[56] = ((a0 - b0) >> COL_SHIFT); +- @@@@@ no optimisation here @@@@@ ++ @@@@@ no optimization here @@@@@ + add r8, r6, r0 @ R8=a0+b0 + add r9, r2, r1 @ R9=a1+b1 + mov r8, r8, asr #COL_SHIFT +diff -Nurd mythtv.orig/libs/libavcodec/armv4l/simple_idct_neon.S mythtv/libs/libavcodec/armv4l/simple_idct_neon.S +--- mythtv.orig/libs/libavcodec/armv4l/simple_idct_neon.S 1970-01-01 01:00:00.000000000 +0100 ++++ mythtv/libs/libavcodec/armv4l/simple_idct_neon.S 2008-07-24 19:54:01.503198000 +0200 +@@ -0,0 +1,388 @@ ++/* ++ * ARM NEON IDCT ++ * ++ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> ++ * ++ * Based on Simple IDCT ++ * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at> ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#define W1 22725 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W2 21407 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W3 19266 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W4 16383 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W5 12873 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W6 8867 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W7 4520 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 ++#define W4c ((1<<(COL_SHIFT-1))/W4) ++#define ROW_SHIFT 11 ++#define COL_SHIFT 20 ++ ++#define w1 d0[0] ++#define w2 d0[1] ++#define w3 d0[2] ++#define w4 d0[3] ++#define w5 d1[0] ++#define w6 d1[1] ++#define w7 d1[2] ++#define w4c d1[3] ++ ++ .fpu neon ++ ++ .macro idct_col4_top ++ vmull.s16 q7, d6, w2 /* q9 = W2 * col[2] */ ++ vmull.s16 q8, d6, w6 /* q10 = W6 * col[2] */ ++ vmull.s16 q9, d4, w1 /* q9 = W1 * col[1] */ ++ vadd.i32 q11, q15, q7 ++ vmull.s16 q10, d4, w3 /* q10 = W3 * col[1] */ ++ vadd.i32 q12, q15, q8 ++ vmull.s16 q5, d4, w5 /* q5 = W5 * col[1] */ ++ vsub.i32 q13, q15, q8 ++ vmull.s16 q6, d4, w7 /* q6 = W7 * col[1] */ ++ vsub.i32 q14, q15, q7 ++ ++ vmlal.s16 q9, d8, w3 /* q9 += W3 * col[3] */ ++ vmlsl.s16 q10, d8, w7 /* q10 -= W7 * col[3] */ ++ vmlsl.s16 q5, d8, w1 /* q5 -= W1 * col[3] */ ++ vmlsl.s16 q6, d8, w5 /* q6 -= W5 * col[3] */ ++ .endm ++ ++ .macro idct_col4_mid1 ++ vmull.s16 q7, d3, w4 /* q7 = W4 * col[4] */ ++ vadd.i32 q11, q11, q7 ++ vsub.i32 q12, q12, q7 ++ vsub.i32 q13, q13, q7 ++ vadd.i32 q14, q14, q7 ++ .endm ++ ++ .macro idct_col4_mid2 ++ vmlal.s16 q9, d5, w5 /* q9 += W5 * col[5] */ ++ vmlsl.s16 q10, d5, w1 /* q10 -= W1 * col[5] */ ++ vmlal.s16 q5, d5, w7 /* q5 += W7 * col[5] */ ++ vmlal.s16 q6, d5, w3 /* q6 += W3 * col[5] */ ++ .endm ++ ++ .macro idct_col4_mid3 ++ vmull.s16 q7, d7, w6 /* q7 = W6 * col[6] */ ++ vmull.s16 q8, d7, w2 /* q8 = W2 * col[6] */ ++ vadd.i32 q11, q11, q7 ++ vsub.i32 q12, q12, q8 ++ vadd.i32 q13, q13, q8 ++ vsub.i32 q14, q14, q7 ++ .endm ++ ++ .macro idct_col4_mid4 ++ vmlal.s16 q9, d9, w7 ++ vmlsl.s16 q10, d9, w5 ++ vmlal.s16 q5, d9, w3 ++ vmlsl.s16 q6, d9, w1 ++ .endm ++ ++ .macro idct_col4_mid ++ vmull.s16 q7, d3, w4 /* q7 = W4 * col[4] */ ++ vmlal.s16 q9, d5, w5 /* q9 += W5 * col[5] */ ++ vmlsl.s16 q10, d5, w1 /* q10 -= W1 * col[5] */ ++ vadd.i32 q11, q11, q7 ++ vmull.s16 q8, d7, w2 /* q8 = W2 * col[6] */ ++ vsub.i32 q12, q12, q7 ++ vmlal.s16 q5, d5, w7 /* q5 += W7 * col[5] */ ++ vsub.i32 q13, q13, q7 ++ vmlal.s16 q6, d5, w3 /* q6 += W3 * col[5] */ ++ vadd.i32 q14, q14, q7 ++ vmull.s16 q7, d7, w6 /* q7 = W6 * col[6] */ ++ vadd.i32 q11, q11, q7 ++ vmlal.s16 q9, d9, w7 ++ vsub.i32 q12, q12, q8 ++ vmlsl.s16 q10, d9, w5 ++ vadd.i32 q13, q13, q8 ++ vmlal.s16 q5, d9, w3 ++ vsub.i32 q14, q14, q7 ++ vmlsl.s16 q6, d9, w1 ++ .endm ++ ++ .macro idct_col4_end ++ vadd.i32 q3, q11, q9 ++ vadd.i32 q4, q12, q10 ++ vadd.i32 q7, q13, q5 ++ vadd.i32 q8, q14, q6 ++ vsub.i32 q11, q11, q9 ++ vsub.i32 q12, q12, q10 ++ vsub.i32 q13, q13, q5 ++ vsub.i32 q14, q14, q6 ++ .endm ++ ++ .text ++ .align ++ .type idct_row4_neon, %function ++ .func idct_row4_neon ++idct_row4_neon: ++ vld1.64 {d2,d3}, [a3,:128]! ++ vld1.64 {d4,d5}, [a3,:128]! ++ vld1.64 {d6,d7}, [a3,:128]! ++ vld1.64 {d8,d9}, [a3,:128]! ++ add a3, a3, #-64 ++ ++ vmov.i32 q15, #(1<<(ROW_SHIFT-1)) ++ vorr d10, d3, d5 ++ vtrn.16 q1, q2 ++ vorr d11, d7, d9 ++ vtrn.16 q3, q4 ++ vorr d10, d10, d11 ++ vtrn.32 q1, q3 ++ vmlal.s16 q15, d2, w4 /* q15 += W4 * col[0] */ ++ vtrn.32 q2, q4 ++ vmov a4, v1, d10 ++ ++ idct_col4_top ++ ++ orrs a4, a4, v1 ++ beq 1f ++ idct_col4_mid ++1: ++ vadd.i32 q3, q11, q9 ++ vadd.i32 q4, q12, q10 ++ vshrn.i32 d2, q3, #ROW_SHIFT ++ vadd.i32 q7, q13, q5 ++ vshrn.i32 d4, q4, #ROW_SHIFT ++ vadd.i32 q8, q14, q6 ++ vshrn.i32 d6, q7, #ROW_SHIFT ++ vsub.i32 q11, q11, q9 ++ vshrn.i32 d8, q8, #ROW_SHIFT ++ vsub.i32 q12, q12, q10 ++ vshrn.i32 d9, q11, #ROW_SHIFT ++ vsub.i32 q13, q13, q5 ++ vshrn.i32 d7, q12, #ROW_SHIFT ++ vsub.i32 q14, q14, q6 ++ vshrn.i32 d5, q13, #ROW_SHIFT ++ vshrn.i32 d3, q14, #ROW_SHIFT ++ ++ vtrn.16 q1, q2 ++ vtrn.16 q3, q4 ++ vtrn.32 q1, q3 ++ vtrn.32 q2, q4 ++ ++ vst1.64 {d2,d3}, [a3,:128]! ++ vst1.64 {d4,d5}, [a3,:128]! ++ vst1.64 {d6,d7}, [a3,:128]! ++ vst1.64 {d8,d9}, [a3,:128]! ++ ++ mov pc, lr ++ .endfunc ++ ++ .align ++ .type idct_col4_neon, %function ++ .func idct_col4_neon ++idct_col4_neon: ++ mov ip, #16 ++ vld1.64 {d2}, [a3,:64], ip /* d2 = col[0] */ ++ vld1.64 {d4}, [a3,:64], ip /* d3 = col[1] */ ++ vld1.64 {d6}, [a3,:64], ip /* d4 = col[2] */ ++ vld1.64 {d8}, [a3,:64], ip /* d5 = col[3] */ ++ vld1.64 {d3}, [a3,:64], ip /* d6 = col[4] */ ++ vld1.64 {d5}, [a3,:64], ip /* d7 = col[5] */ ++ vld1.64 {d7}, [a3,:64], ip /* d8 = col[6] */ ++ vld1.64 {d9}, [a3,:64], ip /* d9 = col[7] */ ++ ++ vrev64.32 d11, d3 ++ vrev64.32 d13, d5 ++ vorr d11, d3, d11 ++ vrev64.32 d15, d7 ++ vorr d13, d5, d13 ++ vrev64.32 d17, d9 ++ vorr d15, d7, d15 ++ vmov.32 v1, d11[0] ++ vmov.32 v2, d13[0] ++ vorr d17, d9, d17 ++ vmov.32 v3, d15[0] ++ vmov.32 ip, d17[0] ++ vdup.16 d30, w4c ++ vadd.i16 d30, d30, d2 ++ vmull.s16 q15, d30, w4 /* q15 = W4 * (col[0]+(1<<(COL_SHIFT-1))/W4) */ ++ ++ idct_col4_top ++ tst v1, v1 ++ beq 1f ++ idct_col4_mid1 ++1: tst v2, v2 ++ beq 2f ++ idct_col4_mid2 ++2: tst v3, v3 ++ beq 3f ++ idct_col4_mid3 ++3: tst ip, ip ++ beq 4f ++ idct_col4_mid4 ++4: ++ idct_col4_end ++ ++ vshr.s32 q2, q3, #COL_SHIFT ++ vshr.s32 q3, q4, #COL_SHIFT ++ vmovn.i32 d2, q2 ++ vshr.s32 q4, q7, #COL_SHIFT ++ vmovn.i32 d3, q3 ++ vshr.s32 q5, q8, #COL_SHIFT ++ vmovn.i32 d4, q4 ++ vshr.s32 q6, q14, #COL_SHIFT ++ vmovn.i32 d5, q5 ++ vshr.s32 q7, q13, #COL_SHIFT ++ vmovn.i32 d6, q6 ++ vshr.s32 q8, q12, #COL_SHIFT ++ vmovn.i32 d7, q7 ++ vshr.s32 q9, q11, #COL_SHIFT ++ vmovn.i32 d8, q8 ++ vmovn.i32 d9, q9 ++ ++ mov pc, lr ++ .endfunc ++ ++ .macro idct_col4_st16 ++ mov ip, #16 ++ vst1.64 {d2}, [a3,:64], ip ++ vst1.64 {d3}, [a3,:64], ip ++ vst1.64 {d4}, [a3,:64], ip ++ vst1.64 {d5}, [a3,:64], ip ++ vst1.64 {d6}, [a3,:64], ip ++ vst1.64 {d7}, [a3,:64], ip ++ vst1.64 {d8}, [a3,:64], ip ++ vst1.64 {d9}, [a3,:64], ip ++ .endm ++ ++ .align ++ .type idct_col4_add8, %function ++ .func idct_col4_add8 ++idct_col4_add8: ++ vld1.32 {d10[0]}, [a1,:32], a2 ++ vld1.32 {d10[1]}, [a1,:32], a2 ++ vld1.32 {d11[0]}, [a1,:32], a2 ++ vld1.32 {d11[1]}, [a1,:32], a2 ++ vld1.32 {d12[0]}, [a1,:32], a2 ++ vld1.32 {d12[1]}, [a1,:32], a2 ++ vld1.32 {d13[0]}, [a1,:32], a2 ++ vld1.32 {d13[1]}, [a1,:32], a2 ++ ++ vaddw.u8 q1, q1, d10 ++ vaddw.u8 q2, q2, d11 ++ vaddw.u8 q3, q3, d12 ++ vaddw.u8 q4, q4, d13 ++ ++ sub a1, a1, a2, lsl #3 ++ .endfunc ++ ++ .type idct_col4_st8, %function ++ .func idct_col4_st8 ++idct_col4_st8: ++ vqmovun.s16 d2, q1 ++ vqmovun.s16 d3, q2 ++ vqmovun.s16 d4, q3 ++ vqmovun.s16 d5, q4 ++ ++ vst1.32 {d2[0]}, [a1,:32], a2 ++ vst1.32 {d2[1]}, [a1,:32], a2 ++ vst1.32 {d3[0]}, [a1,:32], a2 ++ vst1.32 {d3[1]}, [a1,:32], a2 ++ vst1.32 {d4[0]}, [a1,:32], a2 ++ vst1.32 {d4[1]}, [a1,:32], a2 ++ vst1.32 {d5[0]}, [a1,:32], a2 ++ vst1.32 {d5[1]}, [a1,:32], a2 ++ mov pc, lr ++ .endfunc ++ ++ .align 4 ++const: .short W1, W2, W3, W4, W5, W6, W7, W4c ++ ++ .macro idct_start data ++ pld [\data] ++ pld [\data, #64] ++ push {v1-v3, lr} ++ vpush {d8-d15} ++ adr a4, const ++ vld1.64 {d0,d1}, [a4,:128] ++ .endm ++ ++ .macro idct_end ++ vpop {d8-d15} ++ pop {v1-v3, pc} ++ .endm ++ ++ .align ++ .global ff_simple_idct_neon ++ .type ff_simple_idct_neon, %function ++ .func ff_simple_idct_neon ++/* void ff_simple_idct_neon(DCTELEM *data); */ ++ff_simple_idct_neon: ++ idct_start a1 ++ ++ mov a3, a1 ++ bl idct_row4_neon ++ bl idct_row4_neon ++ add a3, a3, #-128 ++ bl idct_col4_neon ++ add a3, a3, #-128 ++ idct_col4_st16 ++ add a3, a3, #-120 ++ bl idct_col4_neon ++ add a3, a3, #-128 ++ idct_col4_st16 ++ ++ idct_end ++ .endfunc ++ ++ .align ++ .global ff_simple_idct_put_neon ++ .type ff_simple_idct_put_neon, %function ++ .func ff_simple_idct_put_neon ++/* void ff_simple_idct_put_neon(uint8_t *dst, int line_size, DCTELEM *data); */ ++ff_simple_idct_put_neon: ++ idct_start a3 ++ ++ bl idct_row4_neon ++ bl idct_row4_neon ++ add a3, a3, #-128 ++ bl idct_col4_neon ++ bl idct_col4_st8 ++ sub a1, a1, a2, lsl #3 ++ add a1, a1, #4 ++ add a3, a3, #-120 ++ bl idct_col4_neon ++ bl idct_col4_st8 ++ ++ idct_end ++ .endfunc ++ ++ .align ++ .global ff_simple_idct_add_neon ++ .type ff_simple_idct_add_neon, %function ++ .func ff_simple_idct_add_neon ++/* void ff_simple_idct_add_neon(uint8_t *dst, int line_size, DCTELEM *data); */ ++ff_simple_idct_add_neon: ++ idct_start a3 ++ ++ bl idct_row4_neon ++ bl idct_row4_neon ++ add a3, a3, #-128 ++ bl idct_col4_neon ++ bl idct_col4_add8 ++ sub a1, a1, a2, lsl #3 ++ add a1, a1, #4 ++ add a3, a3, #-120 ++ bl idct_col4_neon ++ bl idct_col4_add8 ++ ++ idct_end ++ .endfunc +diff -Nurd mythtv.orig/libs/libavcodec/avcodec.h mythtv/libs/libavcodec/avcodec.h +--- mythtv.orig/libs/libavcodec/avcodec.h 2008-07-23 12:19:11.000000000 +0200 ++++ mythtv/libs/libavcodec/avcodec.h 2008-07-24 19:56:46.953198000 +0200 +@@ -1328,6 +1328,8 @@ + #define FF_IDCT_SIMPLEARMV6 17 + #define FF_IDCT_SIMPLEVIS 18 + #define FF_IDCT_WMV2 19 ++#define FF_IDCT_FAAN 20 ++#define FF_IDCT_SIMPLENEON 21 + + /** + * slice count +diff -Nurd mythtv.orig/libs/libavcodec/libavcodec.pro mythtv/libs/libavcodec/libavcodec.pro +--- mythtv.orig/libs/libavcodec/libavcodec.pro 2008-07-23 12:19:10.000000000 +0200 ++++ mythtv/libs/libavcodec/libavcodec.pro 2008-07-24 19:54:01.503198000 +0200 +@@ -413,6 +413,8 @@ + + contains( HAVE_ARMV6, yes ) { SOURCES += armv4l/simple_idct_armv6.S } + ++contains( HAVE_NEON, yes ) { SOURCES += armv4l/float_arm_vfp.c armv4l/simple_idct_neon.S armv4l/dsputil_neon.c armv4l/h264dsp_neon.S } ++ + contains( HAVE_VIS, yes ) { + SOURCES += sparc/dsputil_vis.c + SOURCES += sparc/simple_idct_vis.c +diff -Nurd mythtv.orig/libs/libavcodec/utils.c mythtv/libs/libavcodec/utils.c +--- mythtv.orig/libs/libavcodec/utils.c 2008-07-23 12:19:10.000000000 +0200 ++++ mythtv/libs/libavcodec/utils.c 2008-07-24 19:58:12.403198000 +0200 +@@ -594,6 +594,7 @@ + {"sh4", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SH4, INT_MIN, INT_MAX, V|E|D, "idct"}, + {"simplearm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARM, INT_MIN, INT_MAX, V|E|D, "idct"}, + {"simplearmv5te", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV5TE, INT_MIN, INT_MAX, V|E|D, "idct"}, ++{"simpleneon", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLENEON, INT_MIN, INT_MAX, V|E|D, "idct"}, + {"h264", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_H264, INT_MIN, INT_MAX, V|E|D, "idct"}, + {"vp3", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_VP3, INT_MIN, INT_MAX, V|E|D, "idct"}, + {"ipp", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_IPP, INT_MIN, INT_MAX, V|E|D, "idct"}, diff --git a/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch b/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch new file mode 100644 index 0000000000..4e93af196a --- /dev/null +++ b/recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch @@ -0,0 +1,115 @@ +From: Mans Rullgard <mans@mansr.com> +Date: Tue, 29 Jul 2008 21:13:14 +0000 (+0100) +Subject: ARM: work around Cortex-A8 erratum 451034 +X-Git-Url: http://git.mansr.com/?p=ffmpeg.mru;a=commitdiff_plain;h=c6bbb0c33f6f681b8265a43f8744735de5a9d45e + +ARM: work around Cortex-A8 erratum 451034 + +On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer +store in the store buffer, can cause a processor deadlock under +certain conditions. + +A DMB instruction at the start of every NEON function ensures that +the integer store buffer is always empty before executing any NEON +store, thus avoiding the deadlock condition. + +See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details. +--- + +diff --git b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c +index fa0602d..4fbadfc 100644 +--- b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c ++++ b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c +@@ -28,6 +28,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + int h, int x, int y); + + #define PUT_PIXELS_16_X2(vhadd) \ ++ "dmb \n\t" \ + "1: \n\t" \ + "vld1.64 {d0,d1,d2}, [%[p]], %[line_size] \n\t" \ + "vld1.64 {d4,d5,d6}, [%[p]], %[line_size] \n\t" \ +@@ -46,6 +47,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + "lsl %[l2], %[line_size], #1 \n\t" \ + "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ + "vld1.64 {d2,d3}, [%[p1]], %[l2] \n\t" \ ++ "dmb \n\t" \ + "1: \n\t" \ + "subs %[h], %[h], #2 \n\t" \ + vhadd".u8 q2, q0, q1 \n\t" \ +@@ -69,6 +71,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + "vaddl.u8 q10, d1, d3 \n\t" \ + "vaddl.u8 q9, d4, d6 \n\t" \ + "vaddl.u8 q11, d5, d7 \n\t" \ ++ "dmb \n\t" \ + "1: \n\t" \ + "subs %[h], %[h], #2 \n\t" \ + "vld1.64 {d0,d1,d2}, [%[p0]], %[l2] \n\t" \ +@@ -98,6 +101,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + "bgt 1b \n\t" + + #define PUT_PIXELS_8_X2(vhadd) \ ++ "dmb \n\t" \ + "1: \n\t" \ + "vld1.64 {d0,d1}, [%[p]], %[line_size] \n\t" \ + "vld1.64 {d2,d3}, [%[p]], %[line_size] \n\t" \ +@@ -116,6 +120,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + "lsl %[l2], %[line_size], #1 \n\t" \ + "vld1.64 {d0}, [%[p0]], %[l2] \n\t" \ + "vld1.64 {d1}, [%[p1]], %[l2] \n\t" \ ++ "dmb \n\t" \ + "1: \n\t" \ + "subs %[h], %[h], #2 \n\t" \ + vhadd".u8 d4, d0, d1 \n\t" \ +@@ -137,6 +142,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride, + "vext.8 d6, d2, d3, #1 \n\t" \ + "vaddl.u8 q8, d0, d4 \n\t" \ + "vaddl.u8 q9, d2, d6 \n\t" \ ++ "dmb \n\t" \ + "1: \n\t" \ + "subs %[h], %[h], #2 \n\t" \ + "vld1.64 {d0,d1}, [%[p0]], %[l2] \n\t" \ +@@ -161,6 +167,7 @@ static void put_pixels16_neon(uint8_t *block, const uint8_t *pixels, + int line_size, int h) + { + asm volatile( ++ "dmb \n\t" + "1: \n\t" + "vld1.64 {d0,d1}, [%[pixels]], %[line_size] \n\t" + "vld1.64 {d2,d3}, [%[pixels]], %[line_size] \n\t" +@@ -224,6 +231,7 @@ static void put_pixels8_neon(uint8_t *block, const uint8_t *pixels, + int line_size, int h) + { + asm volatile( ++ "dmb \n\t" + "1: \n\t" + "vld1.64 {d0}, [%[p]], %[line_size] \n\t" + "vld1.64 {d1}, [%[p]], %[line_size] \n\t" +diff --git b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S +index a766867..8171ee2 100644 +--- b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S ++++ b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S +@@ -40,6 +40,8 @@ ff_put_h264_chroma_mc8_neon: + sub r4, r4, r5, lsl #3 + add r4, r4, #64 + ++ dmb ++ + beq 2f + + add r5, r1, r2 +diff --git b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S +index 943e04f..abda6b2 100644 +--- b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S ++++ b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S +@@ -307,9 +307,10 @@ idct_col4_st8: + const: .short W1, W2, W3, W4, W5, W6, W7, W4c + + .macro idct_start data ++ push {v1-v3, lr} + pld [\data] + pld [\data, #64] +- push {v1-v3, lr} ++ dmb + vpush {d8-d15} + adr a4, const + vld1.64 {d0,d1}, [a4,:128] diff --git a/recipes/mythtv/mythtv.inc b/recipes/mythtv/mythtv.inc new file mode 100644 index 0000000000..1d7b90be0e --- /dev/null +++ b/recipes/mythtv/mythtv.inc @@ -0,0 +1,30 @@ +DESCRIPTION = "A full featured personal video recorder system." +HOMEPAGE = "http://www.mythtv.org" +LICENSE = "GPL" +SECTION = "x11/multimedia" +DEPENDS = "fftw fftwf fftwl jack alsa-lib libxinerama libxv libxxf86vm libxvmc lirc \ + ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'lame', d)}" +#RDEPENDS_${PN} = "qt-x11-plugins-sqldrivers qt-x11-plugins-imageformats" + +SRC_URI = "http://www.mythtv.org/mc/mythtv-${PV}.tar.bz2" + +ARM_INSTRUCTION_SET = "arm" + +QMAKE_PROFILES = "mythtv.pro" + +def mythtv_arch(d): + import bb, re + arch = bb.data.getVar('TARGET_ARCH', d, 1) + if re.match("^i.86$", arch): + arch = "x86" + elif arch == "x86_64": + arch = "x86" + elif arch == "arm": + arch = "${BASE_PACKAGE_ARCH}" + return arch + +MYTHTV_ARCH := "${@mythtv_arch(d)}" + +do_install() { + oe_runmake INSTALL_ROOT=${D} install +} diff --git a/recipes/mythtv/mythtv/configure.patch b/recipes/mythtv/mythtv/configure.patch new file mode 100644 index 0000000000..c95a785d6c --- /dev/null +++ b/recipes/mythtv/mythtv/configure.patch @@ -0,0 +1,148 @@ +--- /tmp/configure 2008-07-22 10:27:56.000000000 +0200 ++++ mythtv/configure 2008-07-22 17:53:20.000000000 +0200 +@@ -476,12 +476,13 @@ + } + + check_cmd(){ +- log "$@" ++ echo "Checking $@" ++ log "$@" + "$@" >>$logfile 2>&1 + } + + check_cc(){ +- log check_cc "$@" ++ log check_cc "$@" + cat >$TMPC + log_file $TMPC + check_cmd $cc $CFLAGS $ECFLAGS $OPTFLAGS "$@" -c -o $TMPO $TMPC +@@ -1117,11 +1118,11 @@ + fi + + # machine +-arch=`uname -m` ++disabled cross_compile && arch=`uname -m` + arch_raw="$arch" + cpu="generic" + cpu_override="no" +-processor=`uname -p 2>/dev/null` ++disabled cross_compile && processor=`uname -p 2>/dev/null` + processor_flags="" + tune="generic" + +@@ -1185,7 +1186,7 @@ + lamemp3="yes" + lirc="yes" + mac_bundle="no" +-opengl="yes" ++opengl="no" + v4l="yes" + x11="yes" + x11_include_path="/usr/X11R6/include" +@@ -1214,7 +1215,7 @@ + # build settings + SHFLAGS='-shared -Wl,-soname,$@' + VHOOKSHFLAGS='$(SHFLAGS)' +-LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' ++#LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' + FFSERVERLDFLAGS=-Wl,-E + LDCONFIG="ldconfig" + LIBPREF="lib" +@@ -1714,7 +1715,7 @@ + + has_library() + { +- if test -f /etc/ld.so.conf ; then ++ if test -f /etc/ld.so.conf && disabled cross_compile ; then + LIBPATHS=`cat /etc/ld.so.conf | grep -v "#" | grep -v "include"` + else + LIBPATHS='' +@@ -1725,7 +1726,7 @@ + LIBPATHS="$LIBPATHS `echo $DYLD_LIBRARY_PATH | sed s/':'/' '/g` " + + # recurse down just one level, should be enough in most cases +- if test -f /etc/ld.so.conf ; then ++ if test -f /etc/ld.so.conf && disabled cross_compile ; then + INCL=`cat /etc/ld.so.conf | grep -v "#" | grep "^include"` + SRCH=`echo "$INCL" | sed '{ s/^include \//\//; s/^include /\/etc\//}'` + for x in $SRCH ; do +@@ -1734,29 +1735,31 @@ + done + fi + +- LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` " ++ enabled cross_compile || LIBPATHS="`echo $LIBPATHS /$libdir_name /usr/$libdir_name /usr/local/$libdir_name /usr/X11R6/$libdir_name | sed s/'\/ '/' '/g` " + +- HAS_IT="no" ++ HAS_IT="yes" + for LIBPATH in $LIBPATHS ; do + if test x`ls $LIBPATH/$1* 2> /dev/null | head -n 1` != x"" ; then + HAS_IT="yes" + fi + done ++ echo "$1: $HAS_IT" + expr $HAS_IT : "yes" > /dev/null + } + + has_header() + { +- HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include" ++ enabled cross_compile || HPATHS="/usr/local/include /usr/include /usr/include/g++-v3 /usr/X11R6/include" + INCL=`echo $DYLD_LIBRARY_PATH $LD_LIBRARY_PATH | sed s/':'/' '/g` + HPATHS="$HPATHS "$(echo $INCL | sed "s/$libdir_name/include/g") + +- HAS_IT="no" ++ HAS_IT="yes" + for HPATH in $HPATHS ; do + if test x`ls $HPATH/$1* 2> /dev/null | head -n 1` != x"" ; then + HAS_IT="yes" + fi + done ++ echo "$1: $HAS_IT" + expr $HAS_IT : "yes" > /dev/null + } + +@@ -1863,13 +1866,15 @@ + if test x"$cmov" = x"default"; then + disable cmov + if enabled cpu_override; then +- is_x86_cmov_cpu "$cpu" && enable cmov ++ disabled cross_compile && is_x86_cmov_cpu "$cpu" && enable cmov + disabled cmov || is_x86_slow_cmov_cpu "$cpu" || enable fast_cmov + elif expr "$processor_flags" : ".*cmov" > /dev/null ; then +- enable cmov ++ disabled cross_compile && enable cmov + fi + fi + ++enabled cross_compile && disable cmov ++ + # use different default ARCHFLAGS for CPU missing cmov (Via C3 ...) + if test x"$arch" = x"x86_32" && disabled cmov && disabled cpu_override; then + ARCHFLAGS="-march=i586" +@@ -2254,7 +2259,7 @@ + EOF + + if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then +-$TMPE && cpuclipspositive="yes" ++enabled cross_compile || $TMPE && cpuclipspositive="yes" + fi + + # test negative wrap +@@ -2269,7 +2274,7 @@ + EOF + + if $cc $CFLAGS $ECFLAGS -o $TMPE $TMPC 2>/dev/null ; then +-$TMPE && cpuclipsnegative="yes" ++enabled cross_compile || $TMPE && cpuclipsnegative="yes" + fi + + # test for distcc +@@ -2718,6 +2723,7 @@ + + check_header GL/gl.h + has_library libGL || has_library libopengl32 || disable opengl ++enabled cross_compile && disable opengl + + VENDOR_XVMC_LIBS="" + check_header X11/extensions/XvMClib.h diff --git a/recipes/mythtv/mythtv/ifdef-qt.diff b/recipes/mythtv/mythtv/ifdef-qt.diff new file mode 100644 index 0000000000..bdefee11df --- /dev/null +++ b/recipes/mythtv/mythtv/ifdef-qt.diff @@ -0,0 +1,13 @@ +--- /tmp/mythmainwindow.cpp 2008-07-22 18:19:06.000000000 +0200 ++++ mythtv/libs/libmythui/mythmainwindow.cpp 2008-07-22 18:19:26.000000000 +0200 +@@ -4,7 +4,10 @@ + + #include <algorithm> + ++#ifdef USE_OPENGL_PAINTER + #include <QGLWidget> ++endif ++ + #include <QApplication> + #include <QTimer> + #include <QDesktopWidget> diff --git a/recipes/mythtv/mythtv_0.18.1.bb b/recipes/mythtv/mythtv_0.18.1.bb new file mode 100644 index 0000000000..2d3f55c711 --- /dev/null +++ b/recipes/mythtv/mythtv_0.18.1.bb @@ -0,0 +1,50 @@ +require mythtv.inc + +inherit qmake2 qt3x11 + +PR = "r2" + +SRC_URI += "file://msmpeg-underscore-pic.patch;patch=1 \ + file://settings.pro" + + +do_configure_prepend() { +# it's not autotools anyway, so we call ./configure directly + find . -name "Makefile"|xargs rm -f + ./configure --prefix=/usr \ + --mandir=/usr/man \ + --disable-mp3lame \ + --enable-vorbis \ + --disable-faad \ + --disable-faadbin \ + --disable-faac \ + --disable-mingw32 \ + --enable-a52 \ + --disable-a52bin \ + --enable-pp \ + --enable-shared-pp \ + --enable-shared \ + --disable-amr_nb \ + --disable-amr_nb-fixed \ + --disable-sunmlib \ + \ + --cpu=${MYTHTV_ARCH} \ + --enable-mmx \ + --disable-altivec \ + --enable-v4l \ + --enable-audio-oss \ + --disable-audio-beos \ + --enable-dv1394 \ + --enable-network \ + --enable-zlib \ + --enable-simple_idct \ + --disable-vhook \ + --disable-mpegaudio-hp \ + --enable-ffserver \ + --enable-ffplay \ + --enable-risky + + install -m 0644 ${WORKDIR}/settings.pro ${S}/ + sed 's!PREFIX =.*!PREFIX = ${prefix}!' < settings.pro > settings.pro.new + mv settings.pro.new settings.pro +} diff --git a/recipes/mythtv/mythtv_0.20.bb b/recipes/mythtv/mythtv_0.20.bb new file mode 100644 index 0000000000..467ed5112b --- /dev/null +++ b/recipes/mythtv/mythtv_0.20.bb @@ -0,0 +1,73 @@ +require mythtv.inc + +inherit qmake2 qt3x11 + +DEPENDS += "openchrome" +PR = "r1" + +SRC_URI += "file://configure.patch;patch=1 \ + file://libmyth-libdir.patch;patch=1" + +# Seen on the mythtv web page: +# http://www.mythtv.org/mc/fix-mythweb-in-0.20.diff;patch=1 + +QMAKE_PROFILES = "mythtv.pro" + +mythlibs = "mythavutil mythavcodec mythavformat myth mythtv mythui mythfreemheg mythupnp mythlivemedia" +PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" + +FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode" +FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf" +RDEPENDS_mythtv-frontend = "qt-x11-plugins-sqldrivers qt-x11-plugins-imageformats" +FILES_mythtv-bin = "${bindir}" +FILES_mythtv-filters = "${libdir}/mythtv/filters" +FILES_mythtv-data = "${datadir}" +RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" +ALLOW_EMPTY_${PN} = "1" + +PACKAGES_DYNAMIC = "mythtv-theme-*" + +python __anonymous () { + import bb + + mythlibs = bb.data.getVar('mythlibs', d).split() + pv = bb.data.expand(bb.data.getVar("PV", d), d) + + for m in mythlibs: + bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d) + bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d) + + packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split()) + + bb.data.setVar("PACKAGES", packages, d) +} +do_configure_prepend() { +# it's not autotools anyway, so we call ./configure directly + find . -name "Makefile"|xargs rm -f + ./configure --prefix=/usr \ + --mandir=/usr/man \ + --cpu=${MYTHTV_ARCH} \ + --enable-mmx \ + --disable-altivec \ + --enable-v4l \ + --enable-audio-oss \ + --enable-proc-opt \ + --enable-xvmc \ + --enable-xvmc-pro \ + --enable-dvb \ + --dvb-path=${STAGING_INCDIR} + + sed 's!PREFIX =.*!PREFIX = ${prefix}!;/INCLUDEPATH += $${PREFIX}\/include/d' < settings.pro > settings.pro.new + mv settings.pro.new settings.pro +} + +python populate_packages_prepend () { + new_packages = [] + + def the_hook(file, pkg, pattern, format, basename): + new_packages.append(pkg) + + do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True) + + bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d) +} diff --git a/recipes/mythtv/mythtv_0.21.bb b/recipes/mythtv/mythtv_0.21.bb new file mode 100644 index 0000000000..3594afb45a --- /dev/null +++ b/recipes/mythtv/mythtv_0.21.bb @@ -0,0 +1,108 @@ +require mythtv.inc + +inherit qmake qt3x11 + +PR = "${SRCREV}+r5" +REALPV = "0.21" + +SRCREV = "19479" +SRC_URI = "svn://svn.mythtv.org/svn/branches/release-0-21-fixes;module=mythtv;proto=http" + +SRC_URI += " \ + file://ffmpeg-arm-update.diff;patch=1 \ + file://no-cortex-deadlock.patch;patch=1;pnum=2 \ + file://configure.patch;patch=1 \ + file://configh \ + file://configmak \ + " + +S = "${WORKDIR}/mythtv" + +QMAKE_PROFILES = "mythtv.pro" + +mythlibs = "mythavutil mythavcodec mythavformat myth mythtv mythui mythfreemheg mythupnp mythlivemedia" +PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" + +FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug" +FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode" +FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf" +RDEPENDS_mythtv-frontend = "qt-x11-plugins-sqldrivers qt-x11-plugins-imageformats" +FILES_mythtv-bin = "${bindir}/*" +FILES_mythtv-filters = "${libdir}/mythtv/filters/*" +FILES_mythtv-data = "${datadir}" +RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" +ALLOW_EMPTY_${PN} = "1" + +PACKAGES_DYNAMIC = "mythtv-theme-*" + +python __anonymous () { + import bb + + mythlibs = bb.data.getVar('mythlibs', d).split() + pv = bb.data.expand(bb.data.getVar("REALPV", d), d) + + for m in mythlibs: + bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d) + bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d) + + packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split()) + + bb.data.setVar("PACKAGES", packages, d) +} + +EXTRA_OECONF_armv5te = " --enable-armv5te " +EXTRA_OECONF_armv6 = " --enable-armv6 " +EXTRA_OECONF_armv7a = " --enable-armv6" + +#build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up) +#not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt +MY_ARCH := "${PACKAGE_ARCH}" +PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '${MY_ARCH}',d)}" + +MY_TARGET_CC_ARCH := "${TARGET_CC_ARCH}" +TARGET_CC_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', '-march=iwmmxt -mtune=iwmmxt', '${MY_TARGET_CC_ARCH}',d)}" + +EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'iwmmxt', '--enable-pxa --enable-iwmmxt', '',d)} " + +do_configure_prepend() { +# it's not autotools anyway, so we call ./configure directly + find . -name "Makefile"|xargs rm -f + + ./configure --prefix=/usr \ + --mandir=/usr/man \ + --cpu=${MYTHTV_ARCH} \ + --arch=${MYTHTV_ARCH} \ + --disable-altivec \ + --disable-directfb \ + --disable-opengl-video \ + --disable-strip \ + --enable-v4l \ + --enable-audio-oss \ + --enable-proc-opt \ + --enable-dvb \ + --enable-libmp3lame \ + --cross-compile \ + --dvb-path=${STAGING_INCDIR} \ + --with-bindings= \ + ${EXTRA_OECONF} + + sed 's!PREFIX =.*!PREFIX = ${prefix}!;/INCLUDEPATH += $${PREFIX}\/include/d' < settings.pro > settings.pro.new + mv settings.pro.new settings.pro + for pro in ${S}/*/*pro ${S}/*/*/*pro ${S}/*/*/*/*pro ; do + sed -i -e s:opengl::g $pro + done + sed -i /.SUBDIR/d ${S}/bindings/*pro + cat ${WORKDIR}/configh >> ${S}/config.h + cat ${WORKDIR}/configmak ${OPTSMAK} >> ${S}/config.mak +} + +python populate_packages_prepend () { + new_packages = [] + + def the_hook(file, pkg, pattern, format, basename): + new_packages.append(pkg) + + do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True) + + bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d) +} diff --git a/recipes/mythtv/mythtv_svn.bb b/recipes/mythtv/mythtv_svn.bb new file mode 100644 index 0000000000..83ce8252fa --- /dev/null +++ b/recipes/mythtv/mythtv_svn.bb @@ -0,0 +1,103 @@ +require mythtv.inc + +inherit qmake2 qt4x11 + +DEFAULT_PREFERENCE = "-1" + +PV = "0.21+0.22rc+svnr${SRCREV}" +PR = "r2" +REALPV = "0.22" + +SRCREV = "17892" +SRC_URI = "svn://svn.mythtv.org/svn/trunk;module=mythtv;proto=http" + +SRC_URI += "file://configure.patch;patch=1 \ + " + +S = "${WORKDIR}/mythtv" + +QMAKE_PROFILES = "mythtv.pro" + +mythlibs = "mythdb mythavutil mythavcodec mythavformat myth mythtv mythui mythfreemheg mythupnp mythlivemedia" +PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" + +FILES_${PN}-dbg += "${libdir}/mythtv/filters/.debug" +FILES_mythtv-backend = "${bindir}/mythbackend ${bindir}/mythcommflag ${bindir}/mythfilldatabase ${bindir}/mythtranscode" +FILES_mythtv-frontend = "${bindir}/mythfrontend ${datadir}/mythtv/i18n/mythfrontend_* ${datadir}/mythtv/*.ttf" +FILES_mythtv-bin = "${bindir}/*" +FILES_mythtv-filters = "${libdir}/mythtv/filters/*" +FILES_mythtv-data = "${datadir}" +RDEPENDS_${PN} = "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-data" +ALLOW_EMPTY_${PN} = "1" + +PACKAGES_DYNAMIC = "mythtv-theme-*" + +python __anonymous () { + import bb + + mythlibs = bb.data.getVar('mythlibs', d).split() + pv = bb.data.expand(bb.data.getVar("REALPV", d), d) + + for m in mythlibs: + bb.data.setVar("FILES_lib%s%s" % (m, pv), "${libdir}/lib%s-%s.so.*" % (m, pv), d) + bb.data.setVar("FILES_lib%s%s-dev" % (m, pv), "${libdir}/lib%s-%s.*" % (m, pv), d) + + packages = " ".join(map(lambda x: "lib%s%s lib%s%s-dev" % (x, pv, x, pv), mythlibs) + bb.data.getVar("PACKAGES", d).split()) + + bb.data.setVar("PACKAGES", packages, d) +} + +EXTRA_OECONF_armv5te = " --enable-armv5te " +EXTRA_OECONF_armv6 = " --enable-armv6 " +EXTRA_OECONF_armv7a = " --enable-armv6" + +#build with support for the iwmmxt instruction and pxa270fb overlay support (pxa270 and up) +#not every iwmmxt machine has the lcd connected to pxafb, but building the module doesn't hurt +MY_ARCH := "${PACKAGE_ARCH}" +PACKAGE_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', 'iwmmxt', '${MY_ARCH}',d)}" + +MY_TARGET_CC_ARCH := "${TARGET_CC_ARCH}" +TARGET_CC_ARCH = "${@base_contains('MACHINE_FEATURES', 'iwmmxt', '-march=iwmmxt -mtune=iwmmxt', '${MY_TARGET_CC_ARCH}',d)}" + +EXTRA_OECONF_append = " ${@base_contains('MACHINE_FEATURES', 'iwmmxt', '--enable-pxa --enable-iwmmxt', '',d)} " + + +do_configure_prepend() { +# it's not autotools anyway, so we call ./configure directly + find . -name "Makefile"|xargs rm -f + + ./configure --prefix=/usr \ + --mandir=/usr/man \ + --cpu=${MYTHTV_ARCH} \ + --arch=${MYTHTV_ARCH} \ + --disable-altivec \ + --disable-opengl-video \ + --disable-strip \ + --enable-v4l \ + --enable-audio-oss \ + --enable-proc-opt \ + --enable-dvb \ + --enable-libmp3lame \ + --cross-compile \ + --dvb-path=${STAGING_INCDIR} \ + --with-bindings= \ + ${EXTRA_OECONF} + + sed 's!PREFIX =.*!PREFIX = ${prefix}!;/INCLUDEPATH += $${PREFIX}\/include/d' < settings.pro > settings.pro.new + mv settings.pro.new settings.pro + for pro in ${S}/*/*pro ${S}/*/*/*pro ${S}/*/*/*/*pro ; do + sed -i -e s:opengl::g $pro + done + sed -i /.SUBDIR/d ${S}/bindings/*pro +} + +python populate_packages_prepend () { + new_packages = [] + + def the_hook(file, pkg, pattern, format, basename): + new_packages.append(pkg) + + do_split_packages(d, root=bb.data.expand('${datadir}/mythtv/themes', d), file_regex='(.*)', output_pattern='mythtv-theme-%s', description='MythTV theme %s', allow_dirs=True, hook=the_hook, prepend=True) + + bb.data.setVar("RDEPENDS_${PN}", "%s %s" % (bb.data.getVar("RDEPENDS_${PN}", d), " ".join(new_packages)), d) +} |