aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/mythtv
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/mythtv
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
downloadopenembedded-709c4d66e0b107ca606941b988bad717c0b45d9b.tar.gz
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')
-rw-r--r--recipes/mythtv/files/armv5te/configh6
-rw-r--r--recipes/mythtv/files/armv5te/configmak3
-rw-r--r--recipes/mythtv/files/armv6/configh8
-rw-r--r--recipes/mythtv/files/armv6/configmak3
-rw-r--r--recipes/mythtv/files/armv7a/configh14
-rw-r--r--recipes/mythtv/files/armv7a/configmak6
-rw-r--r--recipes/mythtv/files/configh2
-rw-r--r--recipes/mythtv/files/configmak0
-rw-r--r--recipes/mythtv/files/prefix-etc.patch11
-rw-r--r--recipes/mythtv/files/settings.pro119
-rw-r--r--recipes/mythtv/gmyth-upnp_0.7.0.bb31
-rw-r--r--recipes/mythtv/gmyth_0.7.1.bb23
-rw-r--r--recipes/mythtv/mythtv-0.18.1/msmpeg-underscore-pic.patch85
-rw-r--r--recipes/mythtv/mythtv-0.20/configure.patch90
-rw-r--r--recipes/mythtv/mythtv-0.20/libmyth-libdir.patch11
-rw-r--r--recipes/mythtv/mythtv-0.21/configure.patch183
-rw-r--r--recipes/mythtv/mythtv-0.21/ffmpeg-arm-update.diff1669
-rw-r--r--recipes/mythtv/mythtv-0.21/no-cortex-deadlock.patch115
-rw-r--r--recipes/mythtv/mythtv.inc30
-rw-r--r--recipes/mythtv/mythtv/configure.patch148
-rw-r--r--recipes/mythtv/mythtv/ifdef-qt.diff13
-rw-r--r--recipes/mythtv/mythtv_0.18.1.bb50
-rw-r--r--recipes/mythtv/mythtv_0.20.bb73
-rw-r--r--recipes/mythtv/mythtv_0.21.bb108
-rw-r--r--recipes/mythtv/mythtv_svn.bb103
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)
+}