diff --git a/import-layers/meta-openembedded/meta-multimedia/COPYING.MIT b/import-layers/meta-openembedded/meta-multimedia/COPYING.MIT
new file mode 100644
index 0000000..fb950dc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy 
+of this software and associated documentation files (the "Software"), to deal 
+in the Software without restriction, including without limitation the rights 
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
+copies of the Software, and to permit persons to whom the Software is 
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in 
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
+THE SOFTWARE.
diff --git a/import-layers/meta-openembedded/meta-multimedia/README b/import-layers/meta-openembedded/meta-multimedia/README
new file mode 100644
index 0000000..9364618
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/README
@@ -0,0 +1,20 @@
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: krogoth
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-oe.git
+layers: meta-oe, meta-ruby
+branch: krogoth
+revision: HEAD
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-multimedia][krogoth]' in the subject'
+
+When sending single patches, please use something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-multimedia][krogoth][PATCH
+
+You are encouraged to fork the mirror on github https://github.com/openembedded/meta-oe/ to share your patches, this is preferred for patch sets consisting of more than one patch. Other services like gitorious, repo.or.cz or self hosted setups are of course accepted as well, 'git fetch <remote>' works the same on all of them. We recommend github because it is free, easy to use, has been proven to be reliable and has a really good web GUI.
+
+krogoth Branch Maintainer:
+Armin Kuster <akuster808@gmail.com>
diff --git a/import-layers/meta-openembedded/meta-multimedia/conf/layer.conf b/import-layers/meta-openembedded/meta-multimedia/conf/layer.conf
new file mode 100644
index 0000000..64a0a44
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/conf/layer.conf
@@ -0,0 +1,25 @@
+# It really depends on order of the layers appearing in BBLAYERS
+# variable in toplevel bblayers.conf file, where bitbake will search
+# for .inc files and others where bitbake uses BBPATH since it will
+# search the directories from first to last as specified in BBPATH
+# Therefore if you want a given layer to be considered high priority
+# for the .inc and .conf etc. then consider it adding at the beginning
+# of BBPATH. For bblayers bitbake will use BBFILES_PRIORITY to resolve
+# the recipe contention so the order of directories in BBFILES does 
+# not matter.
+
+# We have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a recipes directory, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "multimedia-layer"
+BBFILE_PATTERN_multimedia-layer := "^${LAYERDIR}/"
+
+# Define the priority for recipes (.bb files) from this layer,
+# choosing carefully how this layer interacts with all of the
+# other layers.
+
+BBFILE_PRIORITY_multimedia-layer = "6"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
new file mode 100644
index 0000000..23f17ed
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
@@ -0,0 +1,20 @@
+SUMMARY = "Resource discovery and announcement over SSDP"
+DESCRIPTION = "GSSDP implements resource discovery and announcement over SSDP (Simpe Service Discovery Protocol)."
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+DEPENDS = "glib-2.0 libsoup-2.4"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gssdp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+        cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk', '', d)}"
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+"
+
+PACKAGES =+ "gssdp-tools"
+
+FILES_gssdp-tools = "${bindir}/gssdp* ${datadir}/gssdp/*.glade"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_0.14.8.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_0.14.8.bb
new file mode 100644
index 0000000..9457abc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_0.14.8.bb
@@ -0,0 +1,9 @@
+require gssdp.inc
+
+inherit gtk-doc
+
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+3"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/0.14/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "b8658e480d047caf2d92baa4a51b9ae7"
+SRC_URI[sha256sum] = "4c3ffa01435e84dc31c954e669e1ca0749b962f76a333e74f5c2cb0de5803a13"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
new file mode 100644
index 0000000..0544501
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Helpers for AV applications using UPnP"
+DESCRIPTION = "GUPnP-AV is a collection of helpers for building AV (audio/video) applications using GUPnP."
+LICENSE = "LGPLv2"
+DEPENDS = "gupnp"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp-av the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+        cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.6.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.6.bb
new file mode 100644
index 0000000..b8cfa27
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.6.bb
@@ -0,0 +1,8 @@
+require gupnp-av.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/0.12/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "f56cdb269376a9e6cb062eb9960ccf57"
+SRC_URI[sha256sum] = "e0553d60dd7c7277c65c02a68a270c4dcb9036a4c7075c902fc8111c6a5e6a44"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+                    file://libgupnp-av/gupnp-av.h;beginline=1;endline=22;md5=2b47b7b5f799d2ebabe62b895e848820"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.9.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.9.4.bb
new file mode 100644
index 0000000..053604e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.9.4.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Helpers for AV applications using DLNA"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libgupnp-dlna/gupnp-dlna-profile.h;beginline=1;endline=22;md5=1b85459f65cb1e73a885ca137aab6274"
+
+DEPENDS = "libxml2 glib-2.0"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.9/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "f93665e535a512e4d515a86311435cb6"
+SRC_URI[sha256sum] = "69969713f36c0e815fbbbcfdfb3ad9bd447cfd10d0fd86227d82dfd8edb6c807"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+PACKAGECONFIG ?= "gstreamer"
+PACKAGECONFIG[gstreamer] = "--enable-gstreamer-metadata-backend,--disable-gstreamer-metadata-backend,gstreamer1.0 gstreamer1.0-plugins-base"
+
+FILES_${PN} += "${datadir}/gupnp-dlna-2.0/dlna-profiles"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.2.bb
new file mode 100644
index 0000000..0cc4a3a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Helpers for interacting with Internet Gateway Devices over UPnP"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://libgupnp-igd/gupnp-simple-igd.c;beginline=1;endline=21;md5=aa292c0d9390463a6e1055dc5fc68e80"
+
+DEPENDS = "glib-2.0 gupnp sqlite3"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.2/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "f881323304185c02634034e3bda714ba"
+SRC_URI[sha256sum] = "73b6a98a0f13b29b34c3bfc07f99f78b1319211cb95a8585752873af2b9067d3"
+
+inherit autotools pkgconfig gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-python"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.10.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.10.bb
new file mode 100644
index 0000000..821b5a3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.10.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Tools for GUPnP"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+                    file://src/network-light/main.c;beginline=1;endline=21;md5=2c39b3a000495dabd4932f231c7efed8"
+DEPENDS = "gupnp gupnp-av gtk+3"
+RRECOMMENDS_${PN} = "adwaita-icon-theme"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.8/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "ad8423d036e98bc6f877528d6b846f6a"
+SRC_URI[sha256sum] = "592c53289ff1cd70e676405c56ca87b28d2da37a385d34a3bb9b944ba9108d17"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
new file mode 100644
index 0000000..6ce9631
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
@@ -0,0 +1,25 @@
+SUMMARY = "UPnP framework"
+DESCRIPTION = "GUPnP is an elegant, object-oriented open source framework for creating UPnP  devices and control points, written in C using GObject and libsoup. The GUPnP API is intended to be easy to use, efficient and flexible. It provides the same set of features as libupnp, but shields the developer from most of UPnP's internals."
+LICENSE = "LGPLv2+"
+
+DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2"
+
+inherit autotools pkgconfig vala gobject-introspection
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+        cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_${PN}-dev += "${bindir}/gupnp-binding-tool"
+
+RDEPENDS_${PN}-dev = "python-textutils python-xml"
+
+SYSROOT_PREPROCESS_FUNCS += "gupnp_sysroot_preprocess"
+
+gupnp_sysroot_preprocess () {
+    install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+    install -m 755 ${D}${bindir}/gupnp-binding-tool ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_0.20.14.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_0.20.14.bb
new file mode 100644
index 0000000..ed07175
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_0.20.14.bb
@@ -0,0 +1,8 @@
+require gupnp.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/0.20/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "63346ef90ac5cd925c3a941f51d8bca6"
+SRC_URI[sha256sum] = "77ffb940ba77c4a6426d09d41004c75d92652dcbde86c84ac1c847dbd9ad59bd"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+                    file://libgupnp/gupnp.h;beginline=1;endline=20;md5=d78a69d9b6e63ee2dc72e7b674d97520"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/avoid-redefining-strnlen-and-strndup.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/avoid-redefining-strnlen-and-strndup.patch
new file mode 100644
index 0000000..3c3f230
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/avoid-redefining-strnlen-and-strndup.patch
@@ -0,0 +1,47 @@
+From 22fba4f2765f92cd592a58e1fe5c450b187e30e1 Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Wed, 3 Jun 2015 21:39:03 -0700
+Subject: [PATCH] avoid redefining strnlen() and strndup()
+
+Rely on string.h definitions instead. Workaround for compiler errors such as:
+
+  | i686-rdk-linux-libtool: compile:  i686-rdk-linux-gcc -m32 -march=atom -mtune=atom -fschedule-insns -fsched-pressure -msse3 -mfpmath=sse --sysroot=/home/andre/build/tmp/sysroots/7401 -DHAVE_CONFIG_H -I. -I/home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp -I.. -I../upnp/inc -I/home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp/inc -I/home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/threadutil/inc -I/home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/ixml/inc -I/home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp/src/inc -pthread -O2 -pipe -g -feliminate-unused-debug-types -Os -Wall -c /home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp/src/gena/gena_callback2.c -o src/gena/libupnp_la-gena_callback2.o >/dev/null 2>&1
+  | In file included from /home/andre/build/tmp/sysroots/7401/usr/include/string.h:634:0,
+  |                  from /home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp/src/api/UpnpString.c:23:
+  | /home/andre/build/tmp/work/core2-32-rdk-linux/libupnp/1.6.19-r0/libupnp-1.6.19/upnp/src/api/UpnpString.c:47:15: error: expected identifier or '(' before '__extension__'
+  |   extern char *strndup(__const char *__string, size_t __n);
+  |                ^
+  | make[3]: *** [src/api/libupnp_la-UpnpString.lo] Error 1
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ upnp/src/api/UpnpString.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/upnp/src/api/UpnpString.c b/upnp/src/api/UpnpString.c
+index 41c9898..2fa09d7 100644
+--- a/upnp/src/api/UpnpString.c
++++ b/upnp/src/api/UpnpString.c
+@@ -32,7 +32,7 @@
+ 	/* VC has strnlen which is already included but with (potentially) different linkage */
+ 	/* strnlen() is a GNU extension. */
+ 	#if HAVE_STRNLEN
+-		extern size_t strnlen(const char *s, size_t maxlen);
++//		extern size_t strnlen(const char *s, size_t maxlen);
+ 	#else /* HAVE_STRNLEN */
+ 		static size_t strnlen(const char *s, size_t n)
+ 		{
+@@ -44,7 +44,7 @@
+ 
+ /* strndup() is a GNU extension. */
+ #if HAVE_STRNDUP && !defined(WIN32)
+-	extern char *strndup(__const char *__string, size_t __n);
++//	extern char *strndup(__const char *__string, size_t __n);
+ #else /* HAVE_STRNDUP && !defined(WIN32) */
+ 	static char *strndup(const char *__string, size_t __n)
+ 	{
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/sepbuildfix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/sepbuildfix.patch
new file mode 100644
index 0000000..cd9768d
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/sepbuildfix.patch
@@ -0,0 +1,60 @@
+From e198f0a87660a048164ca0e16d18517d0aee846e Mon Sep 17 00:00:00 2001
+From: Andre McCurdy <armccurdy@gmail.com>
+Date: Tue, 9 Jun 2015 12:20:45 -0700
+Subject: [PATCH] Fix builds when using separate source and build directories.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+---
+ configure.ac           | 8 ++++----
+ ixml/Makefile.am       | 2 +-
+ threadutil/Makefile.am | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index e2c3f47..11d5e22 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -714,8 +714,8 @@ AC_OUTPUT
+ #
+ # Files copied for windows compilation.
+ #
+-echo "configure: copying \"autoconfig.h\"          to \"build/inc/autoconfig.h\""
+-cp autoconfig.h build/inc/autoconfig.h
+-echo "configure: copying \"upnp/inc/upnpconfig.h\" to \"build/inc/upnpconfig.h\""
+-cp upnp/inc/upnpconfig.h build/inc/upnpconfig.h
++echo "configure: copying \"autoconfig.h\"          to \"\$srcdir/build/inc/autoconfig.h\""
++cp autoconfig.h $srcdir/build/inc/autoconfig.h
++echo "configure: copying \"upnp/inc/upnpconfig.h\" to \"\$srcdir/build/inc/upnpconfig.h\""
++cp upnp/inc/upnpconfig.h $srcdir/build/inc/upnpconfig.h
+ 
+diff --git a/ixml/Makefile.am b/ixml/Makefile.am
+index 49da766..0e9ab2c 100644
+--- a/ixml/Makefile.am
++++ b/ixml/Makefile.am
+@@ -7,7 +7,7 @@
+ 
+ SUBDIRS 		= doc
+ 
+-AM_CPPFLAGS		= -I$(srcdir)/inc -I$(srcdir)/src/inc
++AM_CPPFLAGS		= -I$(top_srcdir)/upnp/inc -I$(srcdir)/inc -I$(srcdir)/src/inc
+ AM_CFLAGS		= 
+ 
+ LDADD			= libixml.la
+diff --git a/threadutil/Makefile.am b/threadutil/Makefile.am
+index a4ed325..42d0726 100644
+--- a/threadutil/Makefile.am
++++ b/threadutil/Makefile.am
+@@ -4,7 +4,7 @@
+ # (C) Copyright 2005 Remi Turboult <r3mi@users.sourceforge.net>
+ #
+ 
+-AM_CPPFLAGS		= -I$(srcdir)/inc -I$(srcdir)/src/inc
++AM_CPPFLAGS		= -I$(top_srcdir)/upnp/inc -I$(srcdir)/inc -I$(srcdir)/src/inc
+ 
+ if ENABLE_DEBUG
+     AM_CPPFLAGS		+= -DDEBUG -DSTATS
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.6.19.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.6.19.bb
new file mode 100644
index 0000000..133a8eb
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.6.19.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Portable SDK for UPnP* Devices"
+DESCRIPTION = "The Portable SDK for UPnP Devices is an SDK for development of \
+UPnP device and control point applications. It consists of the core UPnP \
+protocols along with a UPnP-specific eXtensible Markup Language (XML) parser \
+supporting the Document Object Model (DOM) Level 2 API and an optional, \
+integrated mini web server for serving UPnP related documents."
+HOMEPAGE = "http://pupnp.sourceforge.net/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b3190d5244e08e78e4c8ee78544f4863"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pupnp/${BP}.tar.bz2 \
+           file://avoid-redefining-strnlen-and-strndup.patch \
+           file://sepbuildfix.patch \
+"
+
+SRC_URI[md5sum] = "ee16e5d33a3ea7506f38d71facc057dd"
+SRC_URI[sha256sum] = "b3142b39601243b50532eec90f4a27dba85eb86f58d4b849ac94edeb29d9b22a"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.28.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.28.2.bb
new file mode 100644
index 0000000..5cb7d43
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.28.2.bb
@@ -0,0 +1,59 @@
+SUMMARY = "A UPnP AV media server and renderer"
+DESCRIPTION = "Rygel is a home media solution (UPnP AV MediaServer) that \
+allow you to easily share audio, video and pictures to other devices. \
+Additionally, media player software may use Rygel to become a MediaRenderer \
+that may be controlled remotely by a UPnP or DLNA Controller."
+HOMEPAGE = "http://live.gnome.org/Rygel"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+                    file://src/rygel/rygel-main.vala;endline=27;md5=99324118da4c012d25edae2f779ae9b3"
+
+DEPENDS = "libxml2 glib-2.0 gssdp gupnp gupnp-av gupnp-dlna gstreamer1.0 gstreamer1.0-plugins-base ossp-uuid libgee libsoup-2.4 libmediaart-2.0 libunistring sqlite3"
+RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback shared-mime-info"
+RRECOMMENDS_${PN} = "rygel-plugin-media-export"
+
+GNOME_COMPRESS_TYPE = "xz"
+SRC_URI[archive.md5sum] = "9fbe4fb53b6cfa2f3f3723b7649a2215"
+SRC_URI[archive.sha256sum] = "9ea23df7186caac5f1aad3137edf6d507d339b9a469fc3133df4043fa66b61f5"
+
+inherit gnomebase vala gobject-introspection
+
+EXTRA_OECONF = "--disable-tracker-plugin --with-media-engine=gstreamer"
+
+PACKAGECONFIG ?= "external mpris mediathek ruih media-export gst-launch gtk+3"
+PACKAGECONFIG[external] = "--enable-external-plugin,--disable-external-plugin"
+PACKAGECONFIG[mpris] = "--enable-mpris-plugin,--disable-mpris-plugin"
+PACKAGECONFIG[mediathek] = "--enable-mediathek-plugin,--disable-mediathek-plugin"
+PACKAGECONFIG[ruih] = "--enable-ruih-plugin,--disable-ruih-plugin"
+PACKAGECONFIG[media-export] = "--enable-media-export-plugin,--disable-media-export-plugin"
+PACKAGECONFIG[gst-launch] = "--enable-gst-launch-plugin,--disable-gst-launch-plugin"
+PACKAGECONFIG[gtk+3] = ",--without-ui,gtk+3"
+
+LIBV = "2.6"
+
+do_install_append() {
+       # Remove .la files for loadable modules
+       rm -f ${D}/${libdir}/rygel-${LIBV}/engines/*.la
+       rm -f ${D}/${libdir}/rygel-${LIBV}/plugins/*.la
+}
+
+FILES_${PN} += "${libdir}/rygel-${LIBV}/engines ${datadir}/dbus-1 ${datadir}/icons"
+FILES_${PN}-dbg += "${libdir}/rygel-${LIBV}/engines/.debug ${libdir}/rygel-${LIBV}/plugins/.debug"
+
+PACKAGES += "${PN}-meta"
+ALLOW_EMPTY_${PN}-meta = "1"
+
+PACKAGES_DYNAMIC = "${PN}-plugin-*"
+
+python populate_packages_prepend () {
+    rygel_libdir = d.expand('${libdir}/rygel-${LIBV}')
+    postinst = d.getVar('plugin_postinst', True)
+    pkgs = []
+
+    pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), 'librygel-(.*)\.so$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+    pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), '(.*)\.plugin$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+
+    metapkg = d.getVar('PN', True) + '-meta'
+    d.setVar('RDEPENDS_' + metapkg, ' '.join(pkgs))
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/dvb-apps/dvb-apps_1.1.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/dvb-apps/dvb-apps_1.1.1.bb
new file mode 100644
index 0000000..1c0d686
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/dvb-apps/dvb-apps_1.1.1.bb
@@ -0,0 +1,106 @@
+HOMEPAGE = "http://www.linuxtv.org"
+SUMMARY = "Linux DVB API applications and utilities"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "hg://linuxtv.org/hg;module=dvb-apps;protocol=http"
+SRCREV = "3fc7dfa68484"
+
+S = "${WORKDIR}/${BPN}"
+
+do_configure() {
+    sed -i -e s:/usr/include:${STAGING_INCDIR}:g util/av7110_loadkeys/generate-keynames.sh 
+}
+
+do_install() {
+    make DESTDIR=${D} install
+    install -d ${D}/${bindir}
+    install -d ${D}/${docdir}/dvb-apps
+    install -d ${D}/${docdir}/dvb-apps/scan
+    install -d ${D}/${docdir}/dvb-apps/szap
+    chmod a+rx ${D}/${libdir}/*.so*
+
+    # Install tests
+    install -m 0755 ${S}/test/setvoltage      ${D}${bindir}/test_setvoltage
+    install -m 0755 ${S}/test/set22k          ${D}${bindir}/test_set22k
+    install -m 0755 ${S}/test/sendburst       ${D}${bindir}/test_sendburst
+    install -m 0755 ${S}/test/diseqc          ${D}${bindir}/test_diseqc
+    install -m 0755 ${S}/test/test_sections   ${D}${bindir}/
+    install -m 0755 ${S}/test/test_av_play    ${D}${bindir}/
+    install -m 0755 ${S}/test/test_stillimage ${D}${bindir}/
+    install -m 0755 ${S}/test/test_dvr_play   ${D}${bindir}/
+    install -m 0755 ${S}/test/test_tt         ${D}${bindir}/
+    install -m 0755 ${S}/test/test_sec_ne     ${D}${bindir}/
+    install -m 0755 ${S}/test/test_stc        ${D}${bindir}/
+    install -m 0755 ${S}/test/test_av         ${D}${bindir}/
+    install -m 0755 ${S}/test/test_vevent     ${D}${bindir}/
+    install -m 0755 ${S}/test/test_pes        ${D}${bindir}/
+    install -m 0755 ${S}/test/test_dvr        ${D}${bindir}/
+
+    cp -pPR ${S}/util/szap/channels-conf* ${D}/${docdir}/dvb-apps/szap/
+    cp -pPR ${S}/util/szap/README   ${D}/${docdir}/dvb-apps/szap/
+}
+
+python populate_packages_prepend () {
+    dvb_libdir = bb.data.expand('${libdir}', d)
+    do_split_packages(d, dvb_libdir, '^lib(.*)\.so$', 'lib%s', 'DVB %s package', extra_depends='', allow_links=True)
+    do_split_packages(d, dvb_libdir, '^lib(.*)\.la$', 'lib%s-dev', 'DVB %s development package', extra_depends='${PN}-dev')
+    do_split_packages(d, dvb_libdir, '^lib(.*)\.a$', 'lib%s-dev', 'DVB %s development package', extra_depends='${PN}-dev')
+    do_split_packages(d, dvb_libdir, '^lib(.*)\.so\.*', 'lib%s', 'DVB %s library', extra_depends='', allow_links=True)
+}
+
+PACKAGES =+ "dvb-evtest dvb-evtest-dbg \
+             dvbapp-tests dvbapp-tests-dbg \
+             dvbdate dvbdate-dbg \
+             dvbtraffic dvbtraffic-dbg \
+             dvbnet dvbnet-dbg \
+             dvb-scan dvb-scan-dbg dvb-scan-data \
+             dvb-azap dvb-azap-dbg \
+             dvb-czap dvb-czap-dbg \
+             dvb-szap dvb-szap-dbg \
+             dvb-tzap dvb-tzap-dbg \
+             dvb-femon dvb-femon-dbg \
+             dvb-zap-data"
+
+
+FILES_${PN} = "${bindir} ${datadir}/dvb"
+FILES_${PN}-doc = ""
+FILES_${PN}-dev = "${includedir}"
+
+FILES_dvb-evtest = "${bindir}/evtest"
+FILES_dvb-evtest-dbg = "${bindir}/.debug/evtest"
+RCONFLICTS_dvb-evtest = "evtest"
+
+FILES_dvbapp-tests = "${bindir}/*test* "
+FILES_dvbapp-tests-dbg = "${bindir}/.debug/*test*"
+
+FILES_dvbdate = "${bindir}/dvbdate"
+FILES_dvbdate-dbg = "${bindir}/.debug/dvbdate"
+
+FILES_dvbtraffic = "${bindir}/dvbtraffic"
+FILES_dvbtraffic-dbg = "${bindir}/.debug/dvbtraffic"
+
+FILES_dvbnet = "${bindir}/dvbnet"
+FILES_dvbnet-dbg = "${bindir}/.debug/dvbnet"
+
+FILES_dvb-scan = "${bindir}/*scan "
+FILES_dvb-scan-dbg = "${bindir}/.debug/*scan"
+FILES_dvb-scan-data = "${docdir}/dvb-apps/scan"
+
+FILES_dvb-azap = "${bindir}/azap"
+FILES_dvb-azap-dbg = "${bindir}/.debug/azap"
+
+FILES_dvb-czap = "${bindir}/czap"
+FILES_dvb-czap-dbg = "${bindir}/.debug/czap"
+
+FILES_dvb-szap = "${bindir}/szap"
+FILES_dvb-szap-dbg = "${bindir}/.debug/szap"
+
+FILES_dvb-tzap = "${bindir}/tzap"
+FILES_dvb-tzap-dbg = "${bindir}/.debug/tzap"
+
+FILES_dvb-femon = "${bindir}/femon"
+FILES_dvb-femon-dbg = "${bindir}/.debug/femon"
+
+FILES_dvb-zap-data = "${docdir}/dvb-apps/szap"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
new file mode 100644
index 0000000..179d04a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
@@ -0,0 +1,38 @@
+Upstream-Status: Backport
+http://www.streamboard.tv/oscam/changeset/10068
+http://www.streamboard.tv/oscam/changeset/10070
+
+Index: /CMakeLists.txt
+===================================================================
+--- a/CMakeLists.txt	(revision 10067)
++++ b/CMakeLists.txt	(revision 10068)
+@@ -625,8 +625,8 @@
+     list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+     add_definitions ("-W -Wall ")
+-    set (CMAKE_C_FLAGS "-Wall -O2")
+-	set (CMAKE_CXX_FLAGS "-Wall -O2")
+-    set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+-    set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++    set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++    set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # some optimisations
+Index: /csctapi/CMakeLists.txt
+===================================================================
+--- a/csctapi/CMakeLists.txt	(revision 10069)
++++ b/csctapi/CMakeLists.txt	(revision 10070)
+@@ -6,8 +6,8 @@
+     list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+     add_definitions ("-W -Wall ")
+-    set (CMAKE_C_FLAGS "-Wall -O2")
+-	set (CMAKE_CXX_FLAGS "-Wall -O2")
+-    set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+-    set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++    set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++    set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # Mac extra removes to avoid ranlib warnings in some situations
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
new file mode 100644
index 0000000..cac517f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
@@ -0,0 +1,20 @@
+SUMMARY = "OSCam: Open Source Conditional Access Module"
+HOMEPAGE = "http://www.streamboard.tv/oscam/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "libusb1 openssl pcsc-lite"
+
+SRC_URI = "svn://www.streamboard.tv/svn/oscam;module=trunk;protocol=http \
+    file://respect-cflags.patch \
+"
+SRCREV = "9164"
+PV = "1.10+${SRCPV}"
+
+S = "${WORKDIR}/trunk"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DDEFAULT_CS_CONFDIR=${sysconfdir} -DCMAKE_BUILD_TYPE=Debug"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend/0001-Move-tvheadend-specific-LD-CFLAGS-into-a-helper-vari.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend/0001-Move-tvheadend-specific-LD-CFLAGS-into-a-helper-vari.patch
new file mode 100644
index 0000000..9dfcce0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend/0001-Move-tvheadend-specific-LD-CFLAGS-into-a-helper-vari.patch
@@ -0,0 +1,92 @@
+From 2ee64b359464b48f751683faa5ded3ee8200fe90 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 21 Dec 2012 10:15:42 +0100
+Subject: [PATCH] Move tvheadend specific LD/CFLAGS into a helper variable to
+ avoid being overwritten
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-Status: Inappropriate [OE specific]
+---
+ Makefile              |   20 ++++++++++----------
+ support/configure.inc |    8 ++++----
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8c6b293..daf5f14 100644
+--- a/Makefile
++++ b/Makefile
+@@ -27,12 +27,12 @@ PROG = ${BUILDDIR}/tvheadend
+ # Common compiler flags
+ #
+ 
+-CFLAGS  += -Wall -Werror -Wwrite-strings -Wno-deprecated-declarations
+-CFLAGS  += -Wmissing-prototypes -fms-extensions
+-CFLAGS  += -g -funsigned-char -O2 
+-CFLAGS  += -D_FILE_OFFSET_BITS=64
+-CFLAGS  += -I${BUILDDIR} -I${CURDIR}/src -I${CURDIR}
+-LDFLAGS += -lrt -ldl -lpthread -lm
++TVH_CFLAGS  += -Wall -Werror -Wwrite-strings -Wno-deprecated-declarations
++TVH_CFLAGS  += -Wmissing-prototypes -fms-extensions
++TVH_CFLAGS  += -g -funsigned-char -O2 
++TVH_CFLAGS  += -D_FILE_OFFSET_BITS=64
++TVH_CFLAGS  += -I${BUILDDIR} -I${CURDIR}/src -I${CURDIR}
++TVH_LDFLAGS += -lrt -ldl -lpthread -lm
+ 
+ #
+ # Other config
+@@ -179,8 +179,8 @@ SRCS-${CONFIG_CWC}  += src/ffdecsa/ffdecsa_interface.c \
+ 	src/ffdecsa/ffdecsa_int.c
+ SRCS-${CONFIG_MMX}  += src/ffdecsa/ffdecsa_mmx.c
+ SRCS-${CONFIG_SSE2} += src/ffdecsa/ffdecsa_sse2.c
+-${BUILDDIR}/src/ffdecsa/ffdecsa_mmx.o  : CFLAGS += -mmmx
+-${BUILDDIR}/src/ffdecsa/ffdecsa_sse2.o : CFLAGS += -msse2
++${BUILDDIR}/src/ffdecsa/ffdecsa_mmx.o  : TVH_CFLAGS += -mmmx
++${BUILDDIR}/src/ffdecsa/ffdecsa_sse2.o : TVH_CFLAGS += -msse2
+ endif
+ 
+ # File bundles
+@@ -217,12 +217,12 @@ all: ${PROG}
+ 
+ # Binary
+ ${PROG}: $(OBJS) $(ALLDEPS)
+-	$(CC) -o $@ $(OBJS) $(CFLAGS) $(LDFLAGS)
++	$(CC) -o $@ $(OBJS) $(TVH_CFLAGS) $(TVH_LDFLAGS) $(CFLAGS) $(LDFLAGS)
+ 
+ # Object
+ ${BUILDDIR}/%.o: %.c
+ 	@mkdir -p $(dir $@)
+-	$(CC) -MD -MP $(CFLAGS) -c -o $@ $(CURDIR)/$<
++	$(CC) -MD -MP $(TVH_CFLAGS) $(CFLAGS) -c -o $@ $(CURDIR)/$<
+ 
+ # Add-on
+ ${BUILDDIR}/%.so: ${SRCS_EXTRA}
+diff --git a/support/configure.inc b/support/configure.inc
+index 0130880..332511e 100644
+--- a/support/configure.inc
++++ b/support/configure.inc
+@@ -464,8 +464,8 @@ ifeq (\$(origin CC),default)
+ CC        = ${CC}
+ endif
+ PYTHON   ?= ${PYTHON}
+-CFLAGS   += ${CFLAGS}
+-LDFLAGS  += ${LDFLAGS}
++TVH_CFLAGS   += ${CFLAGS}
++TVH_LDFLAGS  += ${LDFLAGS}
+ prefix    = ${prefix}
+ bindir    = ${bindir}
+ mandir    = ${mandir}
+@@ -482,8 +482,8 @@ EOF
+   # Add package config
+   for pkg in ${PACKAGES[*]}; do
+     cat >>${CONFIG_MK} <<EOF
+-LDFLAGS += $(pkg-config --libs $pkg)
+-CFLAGS  += $(pkg-config --cflags $pkg)
++TVH_LDFLAGS += $(pkg-config --libs $pkg)
++TVH_CFLAGS  += $(pkg-config --cflags $pkg)
+ EOF
+   done
+ 
+-- 
+1.7.7.6
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend_git.bb
new file mode 100644
index 0000000..65d43c6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-dvb/tvheadend/tvheadend_git.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Tvheadend TV streaming server"
+HOMEPAGE = "https://www.lonelycoder.com/redmine/projects/tvheadend"
+
+DEPENDS = "avahi zlib openssl python-native"
+
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9eef91148a9b14ec7f9df333daebc746"
+
+SRC_URI = "git://github.com/tvheadend/tvheadend.git \
+           file://0001-Move-tvheadend-specific-LD-CFLAGS-into-a-helper-vari.patch \
+"
+SRCREV = "a420c83a0e0d2c31c2c15d0fec6fedc3f5a36dfe"
+PV = "3.3"
+
+S = "${WORKDIR}/git"
+
+do_configure() {
+    ./configure --prefix=${prefix} \
+                --libdir=${libdir} \
+                --bindir=${bindir} \
+                --datadir=${datadir} \
+                --arch=${TARGET_ARCH} \
+                --disable-dvbscan \
+                --disable-bundle
+}
+
+do_install() {
+    oe_runmake install DESTDIR=${D}
+}
+
+FILES_${PN} += "${datadir}/${BPN}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0001-configure-don-t-run-python-distutils-to-find-STAGING.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0001-configure-don-t-run-python-distutils-to-find-STAGING.patch
new file mode 100644
index 0000000..dfc3959
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0001-configure-don-t-run-python-distutils-to-find-STAGING.patch
@@ -0,0 +1,31 @@
+From 0dce5a2abd9f42876616c35772a4d71c5399543c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sat, 17 Dec 2011 11:38:15 +0100
+Subject: [PATCH 1/4] configure: don't run python distutils to find STAGING_INCDIR/python, it is not safe for per-machine sysroots
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ m4/ax_python_devel.m4 |    7 +------
+ 1 files changed, 1 insertions(+), 6 deletions(-)
+
+diff --git a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
+index adbd207..dee70f6 100644
+--- a/m4/ax_python_devel.m4
++++ b/m4/ax_python_devel.m4
+@@ -151,12 +151,7 @@ $ac_distutils_result])
+ 	#
+ 	AC_MSG_CHECKING([for Python include path])
+ 	if test -z "$PYTHON_CPPFLAGS"; then
+-		python_path=`$PYTHON -c "import distutils.sysconfig; \
+-			print (distutils.sysconfig.get_python_inc ());"`
+-		if test -n "${python_path}"; then
+-			python_path="-I$python_path"
+-		fi
+-		PYTHON_CPPFLAGS=$python_path
++		PYTHON_CPPFLAGS="-I${STAGING_INCDIR}/${PYTHON_DIR}"
+ 	fi
+ 	AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+ 	AC_SUBST([PYTHON_CPPFLAGS])
+-- 
+1.7.2.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0002-Revert-fixed-ios-Add-memory-barriers-to-atomic-Add-S.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0002-Revert-fixed-ios-Add-memory-barriers-to-atomic-Add-S.patch
new file mode 100644
index 0000000..e0a4037
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0002-Revert-fixed-ios-Add-memory-barriers-to-atomic-Add-S.patch
@@ -0,0 +1,97 @@
+From 7b2a8a7869d257cba35f53f6d877877c29cdac27 Mon Sep 17 00:00:00 2001
+From: Paul Menzel <paulepanter@users.sourceforge.net>
+Date: Sun, 14 Aug 2011 21:53:47 +0200
+Subject: [PATCH 2/4] Revert "fixed:[ios] Add memory barriers to atomic Add/Subtract and Increment/Decrement functions to ensure synchronized accesses."
+
+This reverts commit 9a10c48710df79118e39e9b3bb0a15bf1fe694d1.
+
+The build (OpenEmbedded `angstrom-2010.x` for `MACHINE = "beagleboard") fails with the following error.
+
+        make -C xbmc/threads
+        make[1]: Entering directory `/oe/build-angstrom-next/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/xbmc-10.05-r11+gitr0+9a10c48710df79118e39e9b3bb0a15bf1fe694d1/git/xbmc/threads'
+        CPP     Atomics.o
+        /tmp/ccIzTm3L.s: Assembler messages:
+        /tmp/ccIzTm3L.s:40: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:48: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:76: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:83: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:111: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:118: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:145: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:152: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:180: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccIzTm3L.s:187: Error: garbage following instruction -- `dmb ish'
+        make[1]: *** [Atomics.o] Error 1
+        make[1]: Leaving directory `/oe/build-angstrom-next/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/xbmc-10.05-r11+gitr0+9a10c48710df79118e39e9b3bb0a15bf1fe694d1/git/xbmc/threads'
+        make: *** [xbmc/threads/threads.a] Error 2
+---
+ xbmc/threads/Atomics.cpp |    8 --------
+ 1 files changed, 0 insertions(+), 8 deletions(-)
+
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index 5b09f18..0a98a7e 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -194,14 +194,12 @@ long AtomicIncrement(volatile long* pAddr)
+ {
+   register long val;
+   asm volatile (
+-                "dmb      ish            \n" // Memory barrier. Make sure all memory accesses appearing before this complete before any that appear after
+                 "1:                     \n" 
+                 "ldrex   %0, [%1]       \n" // (val = *pAddr)
+                 "add     %0,  #1        \n" // (val += 1)
+                 "strex   r1,  %0, [%1]	\n"
+                 "cmp     r1,   #0       \n"
+                 "bne     1b             \n"
+-                "dmb     ish            \n" // Memory barrier.
+                 : "=&r" (val)
+                 : "r"(pAddr)
+                 : "r1"
+@@ -273,14 +271,12 @@ long AtomicAdd(volatile long* pAddr, long amount)
+ {
+   register long val;
+   asm volatile (
+-                "dmb      ish            \n" // Memory barrier. Make sure all memory accesses appearing before this complete before any that appear after
+                 "1:                     \n" 
+                 "ldrex   %0, [%1]       \n" // (val = *pAddr)
+                 "add     %0,  %2        \n" // (val += amount)
+                 "strex   r1,  %0, [%1]	\n"
+                 "cmp     r1,   #0       \n"
+                 "bne     1b             \n"
+-                "dmb     ish            \n" // Memory barrier.
+                 : "=&r" (val)
+                 : "r"(pAddr), "r"(amount)
+                 : "r1"
+@@ -351,14 +347,12 @@ long AtomicDecrement(volatile long* pAddr)
+ {
+   register long val;
+   asm volatile (
+-                "dmb      ish            \n" // Memory barrier. Make sure all memory accesses appearing before this complete before any that appear after
+                 "1:                     \n" 
+                 "ldrex   %0, [%1]       \n" // (val = *pAddr)
+                 "sub     %0,  #1        \n" // (val -= 1)
+                 "strex   r1,  %0, [%1]	\n"
+                 "cmp     r1,   #0       \n"
+                 "bne     1b             \n"
+-                "dmb     ish            \n" // Memory barrier.
+                 : "=&r" (val)
+                 : "r"(pAddr)
+                 : "r1"
+@@ -431,14 +425,12 @@ long AtomicSubtract(volatile long* pAddr, long amount)
+ {
+   register long val;
+   asm volatile (
+-                "dmb     ish            \n" // Memory barrier. Make sure all memory accesses appearing before this complete before any that appear after
+                 "1:                     \n" 
+                 "ldrex   %0, [%1]       \n" // (val = *pAddr)
+                 "sub     %0,  %2        \n" // (val -= amount)
+                 "strex   r1,  %0, [%1]	\n"
+                 "cmp     r1,   #0       \n"
+                 "bne     1b             \n"
+-                "dmb     ish            \n" // Memory barrier.
+                 : "=&r" (val)
+                 : "r"(pAddr), "r"(amount)
+                 : "r1"
+-- 
+1.7.2.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0003-Revert-fixed-ios-Add-memory-barriers-to-cas-assembly.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0003-Revert-fixed-ios-Add-memory-barriers-to-cas-assembly.patch
new file mode 100644
index 0000000..629017b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0003-Revert-fixed-ios-Add-memory-barriers-to-cas-assembly.patch
@@ -0,0 +1,69 @@
+From aaae1616a09d359b52e929f944ca0ceb4bb7f831 Mon Sep 17 00:00:00 2001
+From: Paul Menzel <paulepanter@users.sourceforge.net>
+Date: Sun, 14 Aug 2011 21:55:09 +0200
+Subject: [PATCH 3/4] Revert "fixed:[ios] Add memory barriers to cas() assembly to ensure alignment of memory accesses."
+
+This reverts commit 92bab651e2253d172879995b50985645b77fecd2.
+
+The build (OpenEmbedded `angstrom-2010.x` for `MACHINE = "beagleboard") fails with the following error.
+
+        CPP     Atomics.o
+        make[1]: Entering directory `/oe/build-angstrom-next/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/xbmc-10.05-r11+gitr0+92bab651e2253d172879995b50985645b77fecd2/git/xbmc/windows'
+        CPP     GUIMediaWindow.o
+        /tmp/ccrsywuV.s: Assembler messages:
+        /tmp/ccrsywuV.s:40: Error: garbage following instruction -- `dmb ish'
+        /tmp/ccrsywuV.s:48: Error: garbage following instruction -- `dmb ish'
+        make[1]: *** [Atomics.o] Error 1
+        make[1]: Leaving directory `/oe/build-angstrom-next/angstrom-dev/work/armv7a-angstrom-linux-gnueabi/xbmc-10.05-r11+gitr0+92bab651e2253d172879995b50985645b77fecd2/git/xbmc/threads'
+        make: *** [xbmc/threads/threads.a] Error 2
+---
+ xbmc/threads/Atomics.cpp |   33 ++++++++++++++++-----------------
+ 1 files changed, 16 insertions(+), 17 deletions(-)
+
+diff --git a/xbmc/threads/Atomics.cpp b/xbmc/threads/Atomics.cpp
+index 0a98a7e..0967eb2 100644
+--- a/xbmc/threads/Atomics.cpp
++++ b/xbmc/threads/Atomics.cpp
+@@ -49,23 +49,22 @@ long cas(volatile long *pAddr, long expectedVal, long swapVal)
+ #elif defined(__arm__)
+ long cas(volatile long* pAddr, long expectedVal, long swapVal)
+ {
+-  register long prev;
+-  asm volatile (
+-                "dmb      ish            \n" // Memory barrier. Make sure all memory accesses appearing before this complete before any that appear after
+-                "1:                      \n"
+-                "ldrex    %0, [%1]       \n" // Load the current value of *pAddr(%1) into prev (%0) and lock pAddr,
+-                "cmp      %0,  %2        \n" // Verify that the current value (%0) == old value (%2)
+-                "bne      2f             \n" // Bail if the two values are not equal [not as expected]
+-                "strex    r1,  %3, [%1]  \n"
+-                "cmp      r1,  #0        \n"
+-                "bne      1b             \n"
+-                "dmb      ish            \n" // Memory barrier.
+-                "2:                      \n"
+-                : "=&r" (prev)
+-                : "r"(pAddr), "r"(expectedVal),"r"(swapVal)
+-                : "r1"
+-                );
+-  return prev;
++  return(__sync_val_compare_and_swap(pAddr, expectedVal, swapVal));
++//  register long prev;
++//  asm volatile (
++//                "1:                      \n"
++//                "ldrex    %0, [%1]       \n" /* Load the current value of *pAddr(%1) into prev (%0) and lock pAddr,  */
++//                "cmp      %0,  %2        \n" /* Verify that the current value (%0) == old value (%2) */
++//                "bne      2f             \n" /* Bail if the two values are not equal [not as expected] */
++//                "strex    r1,  %3, [%1]  \n"
++//                "cmp      r1,  #0        \n"                
++//                "bne      1b             \n"
++//                "2:                        "
++//                : "=&r" (prev)
++//                : "r"(pAddr), "r"(expectedVal),"r"(swapVal)
++//                : "r1"
++//                );
++//  return prev;
+ }
+ 
+ #elif defined(__mips__)
+-- 
+1.7.2.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0004-configure-cope-with-ld-is-gold-DISTRO_FEATURE.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0004-configure-cope-with-ld-is-gold-DISTRO_FEATURE.patch
new file mode 100644
index 0000000..345e20e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/0004-configure-cope-with-ld-is-gold-DISTRO_FEATURE.patch
@@ -0,0 +1,43 @@
+From fd8f73826240aae543a41a2bfeea0056e2fe594d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 11 Mar 2013 11:04:29 +0100
+Subject: [PATCH] configure: cope with ld-is-gold DISTRO_FEATURE
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+
+Upstream-Stature: backport
+
+ configure.in |   12 +++++++-----
+ 1 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index ef94683..c8b459b 100755
+--- a/configure.in
++++ b/configure.in
+@@ -18,9 +18,14 @@ tolower(){
+ # check for library basenames
+ AC_DEFUN([XB_FIND_SONAME],
+ [
++  #set -x
+   if [[ "$host_vendor" != "apple" ]]; then
+     AC_MSG_CHECKING([for lib$2 soname])
+     $1_FILENAME=$($CC -nostdlib -o /dev/null $LDFLAGS -l$2 -Wl,-M 2>/dev/null | grep "^LOAD.*$2" | awk '{V=2; print $V}')
++    if [[ -z $$1_FILENAME ]]; then
++      #try gold linker syntax
++      $1_FILENAME=$($CC -nostdlib -o /dev/null $LDFLAGS -l$2 -Wl,-t 3>&1 1>&2 2>&3 | grep "$2")
++    fi
+     if [[ ! -z $$1_FILENAME ]]; then
+       $1_SONAME=$(objdump -p $$1_FILENAME | grep "SONAME.*$2" | awk '{V=2; print $V}')
+     fi
+@@ -55,6 +60,7 @@ AC_DEFUN([XB_FIND_SONAME],
+     AC_MSG_RESULT([$$1_SONAME])
+     AC_SUBST($1_SONAME)
+   fi
++  #set +x
+ ])
+ 
+ # Function to push and pop libs and includes for a command
+-- 
+1.7.7.6
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/configure.in-Avoid-running-code.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/configure.in-Avoid-running-code.patch
new file mode 100644
index 0000000..5c14059
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc/configure.in-Avoid-running-code.patch
@@ -0,0 +1,32 @@
+From cfd851660a594801a591e80dc820c65cb7bd7836 Mon Sep 17 00:00:00 2001
+From: Otavio Salvador <otavio@ossystems.com.br>
+Date: Sat, 6 Oct 2012 06:40:03 -0300
+Subject: [PATCH] configure.in: Avoid running code or we break cross-compile
+
+Upstream-Status: Backport [similar change done for 12.0]
+
+Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
+---
+ configure.in |    6 +-----
+ 1 files changed, 1 insertions(+), 5 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index ef94683..d7efcb0 100755
+--- a/configure.in
++++ b/configure.in
+@@ -1246,11 +1246,7 @@ if test "$use_external_ffmpeg" = "yes"; then
+   AC_DEFINE([USE_EXTERNAL_FFMPEG], [1], [Whether to use external FFmpeg libraries.])
+ 
+   # Disable vdpau support if external libavcodec doesn't have it
+-  AC_RUN_IFELSE(
+-    AC_LANG_PROGRAM([[#include <libavcodec/avcodec.h>]],
+-      [[avcodec_register_all();
+-        AVCodec *codec = avcodec_find_decoder_by_name("vc1_vdpau");
+-        return (codec) ? 0 : 1;]]),,
++  AC_CHECK_LIB([avcodec], [ff_vdpau_vc1_decode_picture],,
+     [if test "x$use_vdpau" = "xyes"; then
+       AC_MSG_ERROR($ffmpeg_vdpau_not_supported)
+     else
+-- 
+1.7.2.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc_git.bb
new file mode 100644
index 0000000..f14d4e1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mediacentre/xbmc/xbmc_git.bb
@@ -0,0 +1,99 @@
+SUMMARY = "XBMC Media Center"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=6eb631b6da7fdb01508a80213ffc35ff"
+
+DEPENDS = "libusb1 libcec libplist expat yajl gperf-native libxmu fribidi mpeg2dec ffmpeg samba fontconfig curl python libass libmodplug libmicrohttpd wavpack libmms cmake-native libsdl-image libsdl-mixer virtual/egl mysql5 sqlite3 libmms faad2 libcdio libpcre boost lzo enca avahi libsamplerate0 libxinerama libxrandr libxtst bzip2 virtual/libsdl jasper zip-native zlib libtinyxml libmad"
+#require recipes/egl/egl.inc
+
+
+SRCREV = "82388d55dae79cbb2e486e307e23202e76a43efa"
+
+# multiple issues
+PNBLACKLIST[xbmc] ?= "/usr/include/c++/ctime:70:11: error: '::gmtime' has not been declared"
+
+PV = "11.0+gitr${SRCPV}"
+PR = "r14"
+SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Eden \
+           file://0001-configure-don-t-run-python-distutils-to-find-STAGING.patch \
+           file://0002-Revert-fixed-ios-Add-memory-barriers-to-atomic-Add-S.patch \
+           file://0003-Revert-fixed-ios-Add-memory-barriers-to-cas-assembly.patch \
+           file://0004-configure-cope-with-ld-is-gold-DISTRO_FEATURE.patch \
+           file://configure.in-Avoid-running-code.patch \
+"
+
+inherit autotools gettext python-dir
+
+S = "${WORKDIR}/git"
+
+# breaks compilation
+CCACHE = ""
+
+CACHED_CONFIGUREVARS += " \
+    ac_cv_path_PYTHON="${STAGING_BINDIR_NATIVE}/python-native/python" \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl', 'openglesv2', d)}"
+PACKAGECONFIG[opengl] = "--enable-gl,--enable-gles,glew"
+PACKAGECONFIG[openglesv2] = "--enable-gles,--enable-gl,"
+
+EXTRA_OECONF = " \
+    --disable-rpath \
+    --enable-libusb \
+    --enable-airplay \
+    --disable-optical-drive \
+    --enable-external-libraries \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '--enable-gl', '--enable-gles', d)} \
+"
+
+FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -O4 -ffast-math"
+BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
+
+EXTRA_OECONF_append_armv7a = "--cpu=cortex-a8"
+
+# for python modules
+export HOST_SYS
+export BUILD_SYS
+export STAGING_LIBDIR
+export STAGING_INCDIR
+export PYTHON_DIR
+
+do_configure() {
+    sh bootstrap
+    oe_runconf
+}
+
+PARALLEL_MAKE = ""
+
+do_compile_prepend() {
+    for i in $(find . -name "Makefile") ; do
+        sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
+    done
+
+    for i in $(find . -name "*.mak*" -o    -name "Makefile") ; do
+        sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' -e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
+    done
+}
+
+INSANE_SKIP_${PN} = "rpaths"
+
+# on ARM architectures xbmc will use GLES which will make the regular wrapper fail, so start it directly
+do_install_append_arm() {
+    sed -i -e 's:Exec=xbmc:Exec=${libdir}/xbmc/xbmc.bin:g' ${D}${datadir}/applications/xbmc.desktop
+}
+
+FILES_${PN} += "${datadir}/xsessions ${datadir}/icons"
+FILES_${PN}-dbg += "${libdir}/xbmc/.debug ${libdir}/xbmc/*/.debug ${libdir}/xbmc/*/*/.debug ${libdir}/xbmc/*/*/*/.debug"
+
+# xbmc uses some kind of dlopen() method for libcec so we need to add it manually
+# OpenGL builds need glxinfo, that's in mesa-demos
+RRECOMMENDS_${PN}_append = " libcec \
+                             python \
+                             python-lang \
+                             python-re \
+                             python-netclient \
+                             libcurl \
+                             xdpyinfo \
+                             ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'mesa-demos', '', d)} \
+"
+RRECOMMENDS_${PN}_append_libc-glibc = " glibc-charmap-ibm850 glibc-gconv-ibm850"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
new file mode 100644
index 0000000..71e2bfc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "libebml is a C++ libary to parse EBML files"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=f14599a2f089f6ff8c97e2baa4e3d575"
+
+SRC_URI = "http://dl.matroska.org/downloads/libebml/libebml-${PV}.tar.bz2"
+SRC_URI[md5sum] = "efec729bf5a51e649e1d9d1f61c0ae7a"
+SRC_URI[sha256sum] = "83b074d6b62715aa0080406ea84d33df2e44b5d874096640233a4db49b8096de"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_compile() {
+    cd ${S}/make/linux
+    oe_runmake CROSS="${TARGET_PREFIX}"
+}
+
+do_install() {
+    cd ${S}/make/linux
+
+    install -d ${D}${libdir}
+    install -m 0644 libebml.a ${D}${libdir}
+    install -m 0755 libebml.so.* ${D}${libdir}
+    cp -R --no-dereference --preserve=mode,links -v libebml.so ${D}${libdir}
+
+    install -d ${D}${includedir}/ebml
+    for i in ../../ebml/*.h; do
+        install -m 0644 $i ${D}${includedir}/ebml
+    done
+
+    install -d ${D}${includedir}/ebml/c
+    for i in ../../ebml/c/*.h; do
+        install -m 0644 $i ${D}${includedir}/ebml/c
+    done
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
new file mode 100644
index 0000000..1ad87cb
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "libmatroska is a C++ libary to parse Matroska files (.mkv and .mka)"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libebml"
+
+SRC_URI = "http://dl.matroska.org/downloads/${BPN}/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "f61b2e5086f4bb9d24a43cc8af43a719"
+SRC_URI[sha256sum] = "086f21873e925679babdabf793c3bb85c353d0cd79423543a3355e08e8a4efb7"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_compile() {
+    cd ${S}/make/linux
+    oe_runmake CROSS="${TARGET_PREFIX}"
+}
+
+do_install() {
+    cd ${S}/make/linux
+
+    install -d ${D}${libdir}
+    install -m 0644 libmatroska.a ${D}${libdir}
+    install -m 0755 libmatroska.so.* ${D}${libdir}
+    cp -R --no-dereference --preserve=mode,links -v libmatroska.so ${D}${libdir}
+
+    install -d ${D}${includedir}/matroska
+    for i in ../../matroska/*.h; do
+        install -m 0644 $i ${D}${includedir}/matroska
+    done
+
+    install -d ${D}${includedir}/matroska/c
+    for i in ../../matroska/c/*.h; do
+        install -m 0644 $i ${D}${includedir}/matroska/c
+    done
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/mkvtoolnix/mkvtoolnix_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/mkvtoolnix/mkvtoolnix_git.bb
new file mode 100644
index 0000000..fe44ccf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-mkv/mkvtoolnix/mkvtoolnix_git.bb
@@ -0,0 +1,57 @@
+SUMMARY = "MKVToolNix -- Cross-platform tools for Matroska"
+HOMEPAGE = "http://www.bunkus.org/videotools/mkvtoolnix/source.html"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "curl boost expat zlib libebml libmatroska libogg libvorbis bzip2 lzo file ruby-native"
+
+PV = "8.4.0+git${SRCPV}"
+SRCREV_mkvtoolnix = "7f63ea48ee474754a95838f37aba8f6118c94a65"
+SRCREV_libebml = "04b34b0dbded40e0cec93cafa6a4f4c8e90c3206"
+SRCREV_libmatroska = "db5d627b5bf48516c9e0b540254c0d36595760c3"
+SRCREV_FORMAT = "mkvtoolnix"
+SRC_URI = " \
+           git://github.com/mbunkus/mkvtoolnix.git;name=mkvtoolnix \
+           git://github.com/Matroska-Org/libebml.git;name=libebml;destsuffix=git/lib/libebml \
+           git://github.com/Matroska-Org/libmatroska.git;name=libmatroska;destsuffix=git/lib/libmatroska \
+          "
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep gettext
+
+# make sure rb files are used from sysroot, not from host
+# ruby-1.9.3-always-use-i386.patch is doing target_cpu=`echo $target_cpu | sed s/i.86/i386/`
+# we need to replace it too (a bit longer version without importing re)
+RUBY_SYS = "${@ '${BUILD_SYS}'.replace('i486', 'i386').replace('i586', 'i386').replace('i686', 'i386') }"
+export RUBYLIB="${STAGING_DATADIR_NATIVE}/rubygems:${STAGING_LIBDIR_NATIVE}/ruby:${STAGING_LIBDIR_NATIVE}/ruby/${RUBY_SYS}"
+
+PACKAGECONFIG ??= "flac ${@bb.utils.contains('BBFILE_COLLECTIONS', 'qt5-layer', 'qt5', '', d)}"
+PACKAGECONFIG[flac] = "--with-flac,--without-flac,flac"
+PACKAGECONFIG[qt5] = "--enable-qt --with-moc=${STAGING_BINDIR_NATIVE}/qt5/moc --with-uic=${STAGING_BINDIR_NATIVE}/qt5/uic --with-rcc=${STAGING_BINDIR_NATIVE}/qt5/rcc,--disable-qt,qtbase"
+
+EXTRA_OECONF = " --with-boost-libdir=${STAGING_LIBDIR} \
+"
+
+FILES_${PN} += "${datadir}"
+
+# remove some hardcoded searchpaths
+do_configure_prepend() {
+    sed -i -e s:/usr/local/lib:${STAGING_LIBDIR}:g -e s:/usr/local/include:${STAGING_INCDIR}:g ${S}/ac/qt5.m4
+}
+
+# Yeah, no makefile
+do_compile() {
+    LC_ALL="en_US.UTF-8" ${S}/drake ${PARALLEL_MAKE}
+}
+
+do_install() {
+    LC_ALL="en_US.UTF-8" ${S}/drake install DESTDIR=${D}
+}
+
+# | In file included from src/common/utf8_codecvt_facet.cpp:22:0:
+# | src/common/../../lib/boost/utf8_codecvt_facet/utf8_codecvt_facet.cpp:174:5: error: 'int mtx::utf8_codecvt_facet::do_length' is not a static data member of 'struct mtx::utf8_codecvt_facet'
+# |      BOOST_CODECVT_DO_LENGTH_CONST std::mbstate_t &,
+# |      ^
+PNBLACKLIST[mkvtoolnix] ?= "BROKEN: Failx to build with gcc-5"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
new file mode 100644
index 0000000..86ba527
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
@@ -0,0 +1,26 @@
+SUMMARY = "cdparanoia library"
+DESCRIPTION = "library used to read audio CDs, which is able to perform \
+error corrections, hence the name paranoia."
+HOMEPAGE = "https://www.xiph.org/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING-LGPL;md5=d370feaa1c9edcdbd29ca27ea3d2304d"
+
+SRC_URI = "http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-${PV}.src.tgz \
+           file://0001-Use-DESTDIR-in-install-Makefile-rule.patch \
+           file://0002-interface-remove-C-reserved-keyword.patch \
+"
+SRC_URI[md5sum] = "b304bbe8ab63373924a744eac9ebc652"
+SRC_URI[sha256sum] = "005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df"
+
+# Uppercase letters are not allowed in the recipe name, thus the recipe can not be named cdparanoia-III and
+# we need to add the path to the extracted sources explicitely:
+S = "${WORKDIR}/cdparanoia-III-${PV}"
+
+# cdparanoia Makefile can not be used with several threads (because the static library target and the shared
+# library target use object files which are compiled in the same directory, the object files are just removed
+# between the compilation of those two targets)
+PARALLEL_MAKE = ""
+
+inherit autotools-brokensep
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
new file mode 100644
index 0000000..7b08300
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
@@ -0,0 +1,70 @@
+From 97c06ae955b270851f4fd2396c715f9c76591f37 Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Thu, 2 Apr 2015 10:15:08 +0200
+Subject: [PATCH] Use DESTDIR in "install" Makefile rule
+
+This change allows to perform installations in a sysroot folder, which is required e.g. by
+the recipes inheriting yocto autotool class, and is an autotool standard:
+make install DESTDIR=~/mysysroot
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ Makefile.in | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 3d235ad..df544c7 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -63,28 +63,28 @@ slib:
+ 	cd paranoia && $(MAKE) slib
+ 
+ install:
+-	$(INSTALL) -d -m 0755 $(BINDIR)
+-	$(INSTALL) -m 755 $(srcdir)/cdparanoia $(BINDIR)
+-	$(INSTALL) -d -m 0755 $(MANDIR)
+-	$(INSTALL) -d -m 0755 $(MANDIR)/man1
+-	$(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(MANDIR)/man1
+-	$(INSTALL) -d -m 0755 $(INCLUDEDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(INCLUDEDIR)
+-	$(INSTALL) -d -m 0755 $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(INCLUDEDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/utils.h $(INCLUDEDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
++	$(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
++	$(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ 	ln -fs libcdda_interface.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_interface.so.0
++		$(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ 	ln -fs libcdda_interface.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_interface.so
++		$(DESTDIR)$(LIBDIR)/libcdda_interface.so
+ 	ln -fs libcdda_paranoia.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_paranoia.so.0
++		$(DESTDIR)$(LIBDIR)/libcdda_paranoia.so.0
+ 	ln -fs libcdda_paranoia.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_paranoia.so
++		$(DESTDIR)$(LIBDIR)/libcdda_paranoia.so
+ 
+ cdparanoia:	$(OFILES) $(LIBDEP)
+ 		$(LD) $(CFLAGS) $(LDFLAGS) $(OFILES) \
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
new file mode 100644
index 0000000..a5600a1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
@@ -0,0 +1,605 @@
+From 12ea28398f8e5d4a4a23c62d511fc4f53584e51d Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Tue, 7 Apr 2015 11:07:56 +0200
+Subject: [PATCH] interface: remove C++ reserved keyword
+
+Because "private" was used in cdda_interface.h, this header file could not be
+compiled in C++.
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ interface/cdda_interface.h   |   2 +-
+ interface/cooked_interface.c |   8 +--
+ interface/interface.c        |   8 +--
+ interface/scan_devices.c     |  22 ++++----
+ interface/scsi_interface.c   | 128 +++++++++++++++++++++----------------------
+ interface/test_interface.c   |   4 +-
+ 6 files changed, 86 insertions(+), 86 deletions(-)
+
+diff --git a/interface/cdda_interface.h b/interface/cdda_interface.h
+index 8487cb7..b738825 100644
+--- a/interface/cdda_interface.h
++++ b/interface/cdda_interface.h
+@@ -84,7 +84,7 @@ typedef struct cdrom_drive{
+   int is_atapi;
+   int is_mmc;
+ 
+-  cdda_private_data_t *private;
++  cdda_private_data_t *priv; /* private is a C++ reserved keyword */
+   void         *reserved;
+   unsigned char inqbytes[4];
+ 
+diff --git a/interface/cooked_interface.c b/interface/cooked_interface.c
+index de29055..ea9d0fc 100644
+--- a/interface/cooked_interface.c
++++ b/interface/cooked_interface.c
+@@ -13,13 +13,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+   struct timespec tv1;
+   struct timespec tv2;
+-  int ret1=clock_gettime(d->private->clock,&tv1);
++  int ret1=clock_gettime(d->priv->clock,&tv1);
+   int ret2=ioctl(fd, command,arg);
+-  int ret3=clock_gettime(d->private->clock,&tv2);
++  int ret3=clock_gettime(d->priv->clock,&tv2);
+   if(ret1<0 || ret3<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+   }
+   return ret2;
+ }
+diff --git a/interface/interface.c b/interface/interface.c
+index e8a90cd..526c2a9 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -39,9 +39,9 @@ int cdda_close(cdrom_drive *d){
+     if(d->drive_model)free(d->drive_model);
+     if(d->cdda_fd!=-1)close(d->cdda_fd);
+     if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
+-    if(d->private){
+-      if(d->private->sg_hd)free(d->private->sg_hd);
+-      free(d->private);
++    if(d->priv){
++      if(d->priv->sg_hd)free(d->priv->sg_hd);
++      free(d->priv);
+     }
+ 
+     free(d);
+@@ -127,7 +127,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ 	}
+       }	
+     }
+-    if(ms)*ms=d->private->last_milliseconds;
++    if(ms)*ms=d->priv->last_milliseconds;
+     return(sectors);
+   }
+   
+diff --git a/interface/scan_devices.c b/interface/scan_devices.c
+index fc58110..5f6c4e3 100644
+--- a/interface/scan_devices.c
++++ b/interface/scan_devices.c
+@@ -264,11 +264,11 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int messagedest,
+   d->interface=COOKED_IOCTL;
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   {
+     /* goddamnit */
+     struct timespec tv;
+-    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++    d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+   }
+   idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
+   return(d);
+@@ -674,15 +674,15 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+   d->messagedest = messagedest;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   {
+     /* goddamnit */
+     struct timespec tv;
+-    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++    d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+   }
+   if(use_sgio){
+     d->interface=SGIO_SCSI;
+-    d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
++    d->priv->sg_buffer=(unsigned char *)(d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
+     g_fd=d->cdda_fd=dup(d->ioctl_fd);
+   }else{
+     version=verify_SG_version(d,messagedest,messages);
+@@ -696,8 +696,8 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+     }
+ 
+     /* malloc our big buffer for scsi commands */
+-    d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
+-    d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++    d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
++    d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+   }
+ 
+   {
+@@ -772,9 +772,9 @@ cdda_identify_scsi_fail:
+   if(i_fd!=-1)close(i_fd);
+   if(g_fd!=-1)close(g_fd);
+   if(d){
+-    if(d->private){
+-      if(d->private->sg_hd)free(d->private->sg_hd);
+-      free(d->private);
++    if(d->priv){
++      if(d->priv->sg_hd)free(d->priv->sg_hd);
++      free(d->priv);
+     }
+     free(d);
+   }
+@@ -821,7 +821,7 @@ cdrom_drive *cdda_identify_test(const char *filename, int messagedest,
+   d->interface=TEST_INTERFACE;
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   d->drive_model=copystring("File based test interface");
+   idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
+   
+diff --git a/interface/scsi_interface.c b/interface/scsi_interface.c
+index adbb9bf..75d90d4 100644
+--- a/interface/scsi_interface.c
++++ b/interface/scsi_interface.c
+@@ -15,13 +15,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+   struct timespec tv1;
+   struct timespec tv2;
+-  int ret1=clock_gettime(d->private->clock,&tv1);
++  int ret1=clock_gettime(d->priv->clock,&tv1);
+   int ret2=ioctl(fd, command,arg);
+-  int ret3=clock_gettime(d->private->clock,&tv2);
++  int ret3=clock_gettime(d->priv->clock,&tv2);
+   if(ret1<0 || ret3<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+   }
+   return ret2;
+ }
+@@ -96,7 +96,7 @@ static void tweak_SG_buffer(cdrom_drive *d) {
+ static void clear_garbage(cdrom_drive *d){
+   fd_set fdset;
+   struct timeval tv;
+-  struct sg_header *sg_hd=d->private->sg_hd;
++  struct sg_header *sg_hd=d->priv->sg_hd;
+   int flag=0;
+ 
+   /* clear out any possibly preexisting garbage */
+@@ -185,7 +185,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   struct timespec tv2;
+   int tret1,tret2;
+   int status = 0;
+-  struct sg_header *sg_hd=d->private->sg_hd;
++  struct sg_header *sg_hd=d->priv->sg_hd;
+   long writebytes=SG_OFF+cmd_len+in_size;
+ 
+   /* generic scsi device services */
+@@ -195,7 +195,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ 
+   memset(sg_hd,0,sizeof(sg_hd)); 
+   memset(sense_buffer,0,SG_MAX_SENSE); 
+-  memcpy(d->private->sg_buffer,cmd,cmd_len+in_size);
++  memcpy(d->priv->sg_buffer,cmd,cmd_len+in_size);
+   sg_hd->twelve_byte = cmd_len == 12;
+   sg_hd->result = 0;
+   sg_hd->reply_len = SG_OFF + out_size;
+@@ -209,7 +209,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+      tell if the command failed.  Scared yet? */
+ 
+   if(bytecheck && out_size>in_size){
+-    memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
++    memset(d->priv->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
+     /* the size does not remove cmd_len due to the way the kernel
+        driver copies buffers */
+     writebytes+=(out_size-in_size);
+@@ -243,7 +243,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   }
+ 
+   sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
+-  tret1=clock_gettime(d->private->clock,&tv1);  
++  tret1=clock_gettime(d->priv->clock,&tv1);  
+   errno=0;
+   status = write(d->cdda_fd, sg_hd, writebytes );
+ 
+@@ -289,7 +289,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+     }
+   }
+ 
+-  tret2=clock_gettime(d->private->clock,&tv2);  
++  tret2=clock_gettime(d->priv->clock,&tv2);  
+   errno=0;
+   status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
+   sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
+@@ -313,7 +313,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   if(bytecheck && in_size+cmd_len<out_size){
+     long i,flag=0;
+     for(i=in_size;i<out_size;i++)
+-      if(d->private->sg_buffer[i]!=bytefill){
++      if(d->priv->sg_buffer[i]!=bytefill){
+ 	flag=1;
+ 	break;
+       }
+@@ -326,9 +326,9 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ 
+   errno=0;
+   if(tret1<0 || tret2<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
+   }
+   return(0);
+ }
+@@ -347,7 +347,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ 
+   memset(&hdr,0,sizeof(hdr));
+   memset(sense,0,sizeof(sense));
+-  memcpy(d->private->sg_buffer,cmd+cmd_len,in_size);
++  memcpy(d->priv->sg_buffer,cmd+cmd_len,in_size);
+ 
+   hdr.cmdp = cmd;
+   hdr.cmd_len = cmd_len;
+@@ -355,7 +355,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   hdr.mx_sb_len = SG_MAX_SENSE;
+   hdr.timeout = 50000;
+   hdr.interface_id = 'S';
+-  hdr.dxferp =  d->private->sg_buffer;
++  hdr.dxferp =  d->priv->sg_buffer;
+   hdr.flags = SG_FLAG_DIRECT_IO;  /* direct IO if we can get it */
+ 
+   /* scary buffer fill hack */
+@@ -400,7 +400,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   if(bytecheck && in_size<out_size){
+     long i,flag=0;
+     for(i=in_size;i<out_size;i++)
+-      if(d->private->sg_buffer[i]!=bytefill){
++      if(d->priv->sg_buffer[i]!=bytefill){
+ 	flag=1;
+ 	break;
+       }
+@@ -412,7 +412,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   }
+ 
+   /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
+-  /* d->private->last_milliseconds = hdr.duration; */
++  /* d->priv->last_milliseconds = hdr.duration; */
+ 
+   errno = 0;
+   return 0;
+@@ -445,9 +445,9 @@ static int test_unit_ready(cdrom_drive *d){
+ 
+   handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
+ 
+-  key = d->private->sg_buffer[2] & 0xf;
+-  ASC = d->private->sg_buffer[12];
+-  ASCQ = d->private->sg_buffer[13];
++  key = d->priv->sg_buffer[2] & 0xf;
++  ASC = d->priv->sg_buffer[12];
++  ASCQ = d->priv->sg_buffer[13];
+   
+   if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
+   return 1;
+@@ -492,7 +492,7 @@ static int mode_sense_atapi(cdrom_drive *d,int size,int page){
+   if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
+ 
+   {
+-    unsigned char *b=d->private->sg_buffer;
++    unsigned char *b=d->priv->sg_buffer;
+     if(b[0])return(1); /* Handles only up to 256 bytes */
+     if(b[6])return(1); /* Handles only up to 256 bytes */
+ 
+@@ -604,8 +604,8 @@ static int mode_select(cdrom_drive *d,int density,int secsize){
+ static unsigned int get_orig_sectorsize(cdrom_drive *d){
+   if(mode_sense(d,12,0x01))return(-1);
+ 
+-  d->orgdens = d->private->sg_buffer[4];
+-  return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]);
++  d->orgdens = d->priv->sg_buffer[4];
++  return(d->orgsize = ((int)(d->priv->sg_buffer[10])<<8)+d->priv->sg_buffer[11]);
+ }
+ 
+ /* switch CDROM scsi drives to given sector size  */
+@@ -664,8 +664,8 @@ static int scsi_read_toc (cdrom_drive *d){
+     return(-4);
+   }
+ 
+-  first=d->private->sg_buffer[2];
+-  last=d->private->sg_buffer[3];
++  first=d->priv->sg_buffer[2];
++  last=d->priv->sg_buffer[3];
+   tracks=last-first+1;
+ 
+   if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
+@@ -683,7 +683,7 @@ static int scsi_read_toc (cdrom_drive *d){
+       return(-5);
+     }
+     {
+-      scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++      scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+ 
+       d->disc_toc[i-first].bFlags=toc->bFlags;
+       d->disc_toc[i-first].bTrack=i;
+@@ -704,7 +704,7 @@ static int scsi_read_toc (cdrom_drive *d){
+     return(-2);
+   }
+   {
+-    scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++    scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+     
+     d->disc_toc[i-first].bFlags=toc->bFlags;
+     d->disc_toc[i-first].bTrack=0xAA;
+@@ -738,7 +738,7 @@ static int scsi_read_toc2 (cdrom_drive *d){
+   }
+ 
+   /* copy to our structure and convert start sector */
+-  tracks = d->private->sg_buffer[1];
++  tracks = d->priv->sg_buffer[1];
+   if (tracks > MAXTRK) {
+     cderror(d,"003: CDROM reporting illegal number of tracks\n");
+     return(-3);
+@@ -754,33 +754,33 @@ static int scsi_read_toc2 (cdrom_drive *d){
+       return(-5);
+     }
+     
+-    d->disc_toc[i].bFlags = d->private->sg_buffer[10];
++    d->disc_toc[i].bFlags = d->priv->sg_buffer[10];
+     d->disc_toc[i].bTrack = i + 1;
+ 
+     d->disc_toc[i].dwStartSector= d->adjust_ssize * 
+-	(((signed char)(d->private->sg_buffer[2])<<24) | 
+-	 (d->private->sg_buffer[3]<<16)|
+-	 (d->private->sg_buffer[4]<<8)|
+-	 (d->private->sg_buffer[5]));
++	(((signed char)(d->priv->sg_buffer[2])<<24) | 
++	 (d->priv->sg_buffer[3]<<16)|
++	 (d->priv->sg_buffer[4]<<8)|
++	 (d->priv->sg_buffer[5]));
+   }
+ 
+   d->disc_toc[i].bFlags = 0;
+   d->disc_toc[i].bTrack = i + 1;
+-  memcpy (&foo, d->private->sg_buffer+2, 4);
+-  memcpy (&bar, d->private->sg_buffer+6, 4);
++  memcpy (&foo, d->priv->sg_buffer+2, 4);
++  memcpy (&bar, d->priv->sg_buffer+6, 4);
+   d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
+ 						    be32_to_cpu(bar));
+ 
+   d->disc_toc[i].dwStartSector= d->adjust_ssize * 
+-    ((((signed char)(d->private->sg_buffer[2])<<24) | 
+-      (d->private->sg_buffer[3]<<16)|
+-      (d->private->sg_buffer[4]<<8)|
+-      (d->private->sg_buffer[5]))+
++    ((((signed char)(d->priv->sg_buffer[2])<<24) | 
++      (d->priv->sg_buffer[3]<<16)|
++      (d->priv->sg_buffer[4]<<8)|
++      (d->priv->sg_buffer[5]))+
+      
+-     ((((signed char)(d->private->sg_buffer[6])<<24) | 
+-       (d->private->sg_buffer[7]<<16)|
+-       (d->private->sg_buffer[8]<<8)|
+-       (d->private->sg_buffer[9]))));
++     ((((signed char)(d->priv->sg_buffer[6])<<24) | 
++       (d->priv->sg_buffer[7]<<16)|
++       (d->priv->sg_buffer[8]<<8)|
++       (d->priv->sg_buffer[9]))));
+ 
+ 
+   d->cd_extra = FixupTOC(d,tracks+1);
+@@ -817,7 +817,7 @@ static int i_read_28 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -836,7 +836,7 @@ static int i_read_A8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -854,7 +854,7 @@ static int i_read_D4_10 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -872,7 +872,7 @@ static int i_read_D4_12 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -890,7 +890,7 @@ static int i_read_D5 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -908,7 +908,7 @@ static int i_read_D8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -922,7 +922,7 @@ static int i_read_mmc (cdrom_drive *d, void *p, long begin, long sectors, unsign
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -936,7 +936,7 @@ static int i_read_mmcB (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -950,7 +950,7 @@ static int i_read_mmc2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -964,7 +964,7 @@ static int i_read_mmc2B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -978,7 +978,7 @@ static int i_read_mmc3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -992,7 +992,7 @@ static int i_read_mmc3B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1026,7 +1026,7 @@ static int i_read_msf (cdrom_drive *d, void *p, long begin, long sectors, unsign
+ 
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1039,7 +1039,7 @@ static int i_read_msf2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ 
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1052,7 +1052,7 @@ static int i_read_msf3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1275,7 +1275,7 @@ long scsi_read_msf3 (cdrom_drive *d, void *p, long begin,
+ static int count_2352_bytes(cdrom_drive *d){
+   long i;
+   for(i=2351;i>=0;i--)
+-    if(d->private->sg_buffer[i]!=(unsigned char)'\177')
++    if(d->priv->sg_buffer[i]!=(unsigned char)'\177')
+       return(((i+3)>>2)<<2);
+ 
+   return(0);
+@@ -1284,7 +1284,7 @@ static int count_2352_bytes(cdrom_drive *d){
+ static int verify_nonzero(cdrom_drive *d){
+   long i,flag=0;
+   for(i=0;i<2352;i++)
+-    if(d->private->sg_buffer[i]!=0){
++    if(d->priv->sg_buffer[i]!=0){
+       flag=1;
+       break;
+     }
+@@ -1625,7 +1625,7 @@ static int check_mmc(cdrom_drive *d){
+   d->is_mmc=0;
+   if(mode_sense(d,22,0x2A)==0){
+   
+-    b=d->private->sg_buffer;
++    b=d->priv->sg_buffer;
+     b+=b[3]+4;
+     
+     if((b[0]&0x3F)==0x2A){
+@@ -1673,7 +1673,7 @@ unsigned char *scsi_inquiry(cdrom_drive *d){
+     cderror(d,"008: Unable to identify CDROM model\n");
+     return(NULL);
+   }
+-  return (d->private->sg_buffer);
++  return (d->priv->sg_buffer);
+ }
+ 
+ int scsi_init_drive(cdrom_drive *d){
+@@ -1742,8 +1742,8 @@ int scsi_init_drive(cdrom_drive *d){
+   check_cache(d);
+ 
+   d->error_retry=1;
+-  d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
+-  d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++  d->priv->sg_hd=realloc(d->priv->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
++  d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+   d->report_all=1;
+   return(0);
+ }
+diff --git a/interface/test_interface.c b/interface/test_interface.c
+index 11bec25..e1cefaa 100644
+--- a/interface/test_interface.c
++++ b/interface/test_interface.c
+@@ -66,9 +66,9 @@ static long test_read(cdrom_drive *d, void *p, long begin, long sectors){
+   if(!fd)fd=fdopen(d->cdda_fd,"r");
+ 
+   if(begin<lastread)
+-    d->private->last_milliseconds=20;
++    d->priv->last_milliseconds=20;
+   else
+-    d->private->last_milliseconds=sectors;
++    d->priv->last_milliseconds=sectors;
+ 
+ #ifdef CDDA_TEST_UNDERRUN
+   sectors-=1;
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch
new file mode 100644
index 0000000..49350fe
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch
@@ -0,0 +1,17 @@
+In a cross compile environment adding paths like /usr are not correct.
+With this patch we make it so that its relative to sysroot if the compiler
+defines one.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: a/src/Makefile.am
+===================================================================
+--- a/src/Makefile.am	2013-02-08 22:35:08.000000000 -0800
++++ b/src/Makefile.am	2013-10-13 01:31:38.812869080 -0700
+@@ -33,5 +33,5 @@
+ 	video_encode.c video_encode.h \
+ 	subtitles.c subtitles.h 
+ 
+-coriander_LDADD = -L/usr/X11R6/lib/ @PACKAGE_LIBS@ $(INTLLIBS) $(LIBTIFF_LIBS) $(FTPLIB_LIBS) $(SDLLIB_LIBS) $(LIBDC_LIBS) $(LIBRAW_LIBS) $(XV_LIBS) $(COR_LFS_LDFLAGS) -lgthread-2.0 $(FFMPEG_LIBS) $(X11_LIBS)
++coriander_LDADD = -L=/usr/X11R6/lib/ @PACKAGE_LIBS@ $(INTLLIBS) $(LIBTIFF_LIBS) $(FTPLIB_LIBS) $(SDLLIB_LIBS) $(LIBDC_LIBS) $(LIBRAW_LIBS) $(XV_LIBS) $(COR_LFS_LDFLAGS) -lgthread-2.0 $(FFMPEG_LIBS) $(X11_LIBS)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb
new file mode 100755
index 0000000..a9f52ca
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Control and capture GUI for IIDC compliant cameras"
+HOMEPAGE = "http://damien.douxchamps.net/ieee1394/coriander/"
+SECTION = "applications"
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+DEPENDS = "gtk+ libgnomeui libraw1394 libdc1394 libxv tiff"
+
+PNBLACKLIST[coriander] ?= "BROKEN: fails to use SDL probably because libsdl-config was removed, error: unknown type name 'SDL_Overlay'"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/coriander-2/${PV}/${BP}.tar.gz \
+           file://cross-compile.patch \
+          "
+
+SRC_URI[md5sum] = "431d98fb013217681f97ade168201fb8"
+SRC_URI[sha256sum] = "5c7fd31cb58d398e2742352bf1ffbd2ca22e06686c6668ecfd437735c2b79123"
+
+inherit autotools gettext
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
new file mode 100644
index 0000000..f23bc6c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "D-Bus connector for dLeyna libraries"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/connector-dbus.c;endline=21;md5=0a1695cef53beefc36651de439f643b5"
+
+DEPENDS = "glib-2.0 dbus dleyna-core"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "de913c35e5c936e2d40ddbd276ee902cd802bd3a"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/dleyna-1.0/connectors/*.so"
+FILES_${PN}-dev += "${libdir}/dleyna-1.0/connectors/*.la"
+FILES_${PN}-dbg += "${libdir}/dleyna-1.0/connectors/.debug/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
new file mode 100644
index 0000000..a3b2793
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Utility functions for dLeyna libraries"
+DESCRIPTION = "dleyna-core is a library of utility functions that are used \
+by the higher level dLeyna libraries that communicate with DLNA devices, \
+e.g., dleyna-server. In brief, it provides APIs for logging, error, settings \
+and task management and an IPC asbstraction API."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/core/core.c;endline=21;md5=139cba0c634344abc9456694fbb5083b"
+
+DEPENDS = "glib-2.0 gupnp"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "27a3786ec013f64fd58243410a60798f824acec3"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
new file mode 100644
index 0000000..b30aee9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "DLNA renderer libraries"
+DESCRIPTION = "dleyna-renderer is a library for implementing services \
+that allow clients to discover and manipulate Digital Media Renderers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/renderer/server.c;endline=21;md5=f51acd4757fb6a779a87122c43cf1346"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "50fd1ec9d51328e7dea98874129dc8d6fe3ea1dd"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+CFLAGS += " -I${S}"
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
new file mode 100644
index 0000000..ae16765
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "DLNA server libraries"
+DESCRIPTION = "dleyna-server is a library for implementing services that \
+allow clients to discover, browse and manipulate Digital Media Servers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/server/server.c;endline=22;md5=dfa6dc3f914206c2408c0510c234f8c8"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 libxml2 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "38651783914c76bd861f7fe8651b25e3986d7be8"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb
new file mode 100644
index 0000000..baaf42b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "discover, browse and search UPNP/DLNA media servers"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/media-service-upnp.c;beginline=1;endline=21;md5=584eb103b4f6f3432c43d169b6a123a1"
+
+DEPENDS = "dbus glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "0dbc74a79aa07a8f8c7d32e1d2de6c4d3a0f95bc"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+    install -d ${D}${bindir}
+    install -m 0755 dms-info ${D}${bindir}
+}
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN} += "${datadir}/dbus-1/services/*.service"
+FILES_${PN}-tests = "${bindir}/dms-info"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb
new file mode 100644
index 0000000..68d59fa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "discover and manipulate UPNP/DLNA media renderers"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/renderer-service-upnp.c;beginline=1;endline=21;md5=c25c3082684eb4ca87474b7528c6dc15"
+
+PNBLACKLIST[renderer-service-upnp] ?= "BROKEN: doesn't build with B!=S (trying to install rendererconsole.py from ${B} instead of ${S})"
+
+DEPENDS = "dbus glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "4a0b1d7cd8e22d3cb0e09c77c344ceccbcbbd34f"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+    install -d ${D}${bindir}
+    install -m 0755 test/rendererconsole.py ${D}${bindir}
+}
+
+PACKAGES =+ "${PN}-tests"
+
+RDEPENDS_${PN}-tests = "python-dbus python-json python-misc python-pkgutil python-xml"
+
+FILES_${PN} += "${datadir}/dbus-1/services/*.service"
+# When we have GI, package cap
+FILES_${PN}-tests = "${bindir}/rendererconsole.py"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb
new file mode 100644
index 0000000..d96c1a4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Freeware Advanced Audio Coder (MPEG2-AAC, MPEG4-AAC)"
+SECTION = "libs"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+                    file://libfaac/coder.h;beginline=5;endline=17;md5=fa1fd6a5fa8cdc877d63a12530d273e0"
+
+inherit autotools-brokensep
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/faac/${BP}.tar.gz \
+           file://build-fix.patch"
+
+SRC_URI[md5sum] = "80763728d392c7d789cde25614c878f6"
+SRC_URI[sha256sum] = "c5141199f4cfb17d749c36ba8cfe4b25f838da67c22f0fec40228b6b9c3d19df"
+
+PACKAGES =+ "lib${BPN} lib${BPN}-dev"
+
+FILES_${PN} = " ${bindir}/faac "
+FILES_lib${PN} = " ${libdir}/libfaac.so.*"
+FILES_lib${PN}-dev = "${includedir}/faac.h ${includedir}/faaccfg.h ${libdir}/libfaac.so ${libdir}/libfaac.la"
+FILES_lib${PN}-staticdev = "${libdir}/libfaac.a"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch
new file mode 100644
index 0000000..83cff8f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch
@@ -0,0 +1,332 @@
+Patch fixing build error and warnings. Error consisted of redefining
+strcasestr function from string.h. Warnings consisted of deprecated conversions
+of string constants to char*, using '%llu' for type uint64_t (which on 64 bit
+systems, is defined as unsigned long int by stdint.h), and using '==' for
+equality of two strings.
+
+Patch originally from Debian.
+
+Upstream-Status: Pending
+
+==========================================================================
+--- a/common/mp4v2/mpeg4ip.h
++++ b/common/mp4v2/mpeg4ip.h
+@@ -120,14 +120,6 @@
+ #endif
+ #include <sys/param.h>
+ 
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-char *strcasestr(const char *haystack, const char *needle);
+-#ifdef __cplusplus
+-}
+-#endif
+-
+ #define OPEN_RDWR O_RDWR
+ #define OPEN_CREAT O_CREAT 
+ #define OPEN_RDONLY O_RDONLY
+@@ -135,7 +127,6 @@
+ #define closesocket close
+ #define IOSBINARY ios::bin
+ 
+-#if SIZEOF_LONG == 8
+ #define MAX_UINT64 -1LU
+ #define D64F "ld"
+ #define U64F  "lu"
+@@ -143,15 +134,6 @@
+ 
+ #define TO_D64(a) (a##L)
+ #define TO_U64(a) (a##LU)
+-#else
+-#define MAX_UINT64 -1LLU
+-#define D64F "lld"
+-#define U64F  "llu"
+-#define X64F "llx"
+-
+-#define TO_D64(a) (a##LL)
+-#define TO_U64(a) (a##LLU)
+-#endif
+ 
+ #ifdef HAVE_FPOS_T___POS
+ #define FPOS_TO_VAR(fpos, typed, var) (var) = (typed)((fpos).__pos)
+--- a/configure.in
++++ b/configure.in
+@@ -4,6 +4,9 @@
+ AM_INIT_AUTOMAKE
+ 
+ AM_CONFIG_HEADER(config.h)
++AH_TOP([#ifndef CONFIG_H
++#define CONFIG_H])
++AH_BOTTOM([#endif /* CONFIG_H */])
+ 
+ AC_ARG_WITH( mp4v2,  [  --with-mp4v2            compile libmp4v2],WITHMP4V2=$withval, WITHMP4V2=yes)
+ AC_ARG_ENABLE( drm,  [  --enable-drm            Digital Radio Mondiale support], enable_drm=$enableval, enable_drm=no)
+--- a/common/mp4v2/atom_avcC.cpp
++++ b/common/mp4v2/atom_avcC.cpp
+@@ -29,7 +29,7 @@
+ class SizeTableProperty : public MP4TableProperty 
+ {
+  public:
+-  SizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
++  SizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
+     MP4TableProperty(name, pCountProperty) {};
+  protected:
+   void ReadEntry(MP4File *pFile, u_int32_t index) {
+--- a/common/mp4v2/atom_ohdr.cpp
++++ b/common/mp4v2/atom_ohdr.cpp
+@@ -21,7 +21,7 @@
+       \param useCountedFormat    counted format flag.
+       \param useUnicode          unicode flag.
+   */
+-	OhdrMP4StringProperty(char* name, bool useCountedFormat = false,
++	OhdrMP4StringProperty(const char* name, bool useCountedFormat = false,
+     bool useUnicode = false): MP4StringProperty(name, useCountedFormat,
+     useUnicode) {
+   }
+--- a/common/mp4v2/atom_stz2.cpp
++++ b/common/mp4v2/atom_stz2.cpp
+@@ -30,7 +30,7 @@
+ class MP4HalfSizeTableProperty : public MP4TableProperty
+ {
+ public:
+-  MP4HalfSizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
++  MP4HalfSizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
+     MP4TableProperty(name, pCountProperty) {};
+ 
+   // The count is half the actual size
+--- a/common/mp4v2/mp4atom.cpp
++++ b/common/mp4v2/mp4atom.cpp
+@@ -806,7 +806,7 @@
+ 	AddProperty(new MP4Integer24Property("flags"));
+ }
+ 
+-void MP4Atom::AddReserved(char* name, u_int32_t size) 
++void MP4Atom::AddReserved(const char* name, u_int32_t size)
+ {
+ 	MP4BytesProperty* pReserved = new MP4BytesProperty(name, size); 
+ 	pReserved->SetReadOnly();
+--- a/common/mp4v2/mp4atom.h
++++ b/common/mp4v2/mp4atom.h
+@@ -204,7 +204,7 @@
+ 
+ 	void AddVersionAndFlags();
+ 
+-	void AddReserved(char* name, u_int32_t size);
++	void AddReserved(const char* name, u_int32_t size);
+ 
+ 	void ExpectChildAtom(const char* name, 
+ 		bool mandatory, bool onlyOne = true);
+--- a/common/mp4v2/mp4file.cpp
++++ b/common/mp4v2/mp4file.cpp
+@@ -718,7 +718,7 @@
+ 	}
+ }
+ 
+-void MP4File::ProtectWriteOperation(char* where)
++void MP4File::ProtectWriteOperation(const char* where)
+ {
+ 	if (m_mode == 'r') {
+ 		throw new MP4Error("operation not permitted in read mode", where);
+@@ -1274,7 +1274,7 @@
+ }
+ 
+ // NULL terminated list of brands which require the IODS atom
+-char *brandsWithIods[] = { "mp42",
++const char *brandsWithIods[] = { "mp42",
+                            "isom",
+                            NULL};
+ 
+@@ -2211,11 +2211,11 @@
+ 	for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
+ 		if (!strcmp(normType, m_pTracks[i]->GetType())) {
+ 			if (subType) {
+-				if (normType == MP4_AUDIO_TRACK_TYPE) {
++				if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
+ 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 						continue;
+ 					}
+-				} else if (normType == MP4_VIDEO_TRACK_TYPE) {
++				} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
+ 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 						continue;
+ 					}
+@@ -2278,11 +2278,11 @@
+   for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
+     if (!strcmp(normType, m_pTracks[i]->GetType())) {
+       if (subType) {
+-	if (normType == MP4_AUDIO_TRACK_TYPE) {
++	if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
+ 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 	    continue;
+ 	  }
+-	} else if (normType == MP4_VIDEO_TRACK_TYPE) {
++	} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
+ 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 	    continue;
+ 	  }
+--- a/common/mp4v2/mp4file.h
++++ b/common/mp4v2/mp4file.h
+@@ -700,7 +700,7 @@
+ 	const char* TempFileName();
+ 	void Rename(const char* existingFileName, const char* newFileName);
+ 
+-	void ProtectWriteOperation(char* where);
++	void ProtectWriteOperation(const char* where);
+ 
+ 	void FindIntegerProperty(const char* name, 
+ 		MP4Property** ppProperty, u_int32_t* pIndex = NULL);
+--- a/common/mp4v2/mp4property.cpp
++++ b/common/mp4v2/mp4property.cpp
+@@ -313,7 +313,7 @@
+ 
+ // MP4StringProperty
+ 
+-MP4StringProperty::MP4StringProperty(char* name, 
++MP4StringProperty::MP4StringProperty(const char* name,
+ 	bool useCountedFormat, bool useUnicode)
+ 	: MP4Property(name)
+ {
+@@ -420,7 +420,7 @@
+ 
+ // MP4BytesProperty
+ 
+-MP4BytesProperty::MP4BytesProperty(char* name, u_int32_t valueSize,
++MP4BytesProperty::MP4BytesProperty(const char* name, u_int32_t valueSize,
+                                    u_int32_t defaultValueSize)
+ 	: MP4Property(name)
+ {
+@@ -549,7 +549,7 @@
+ 
+ // MP4TableProperty
+ 
+-MP4TableProperty::MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty)
++MP4TableProperty::MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty)
+ 	: MP4Property(name) 
+ {
+ 	m_pCountProperty = pCountProperty;
+@@ -725,7 +725,7 @@
+ 
+ // MP4DescriptorProperty
+   
+-MP4DescriptorProperty::MP4DescriptorProperty(char* name, 
++MP4DescriptorProperty::MP4DescriptorProperty(const char* name,
+ 	u_int8_t tagsStart, u_int8_t tagsEnd, bool mandatory, bool onlyOne)
+ 	: MP4Property(name) 
+ { 
+--- a/common/mp4v2/mp4property.h
++++ b/common/mp4v2/mp4property.h
+@@ -100,7 +100,7 @@
+ 
+ class MP4IntegerProperty : public MP4Property {
+ protected:
+-	MP4IntegerProperty(char* name)
++	MP4IntegerProperty(const char* name)
+ 		: MP4Property(name) { };
+ 
+ public:
+@@ -118,7 +118,7 @@
+ #define MP4INTEGER_PROPERTY_DECL2(isize, xsize) \
+ 	class MP4Integer##xsize##Property : public MP4IntegerProperty { \
+ 	public: \
+-		MP4Integer##xsize##Property(char* name) \
++		MP4Integer##xsize##Property(const char* name) \
+ 			: MP4IntegerProperty(name) { \
+ 			SetCount(1); \
+ 			m_values[0] = 0; \
+@@ -188,7 +188,7 @@
+ 
+ class MP4BitfieldProperty : public MP4Integer64Property {
+ public:
+-	MP4BitfieldProperty(char* name, u_int8_t numBits)
++	MP4BitfieldProperty(const char* name, u_int8_t numBits)
+ 		: MP4Integer64Property(name) {
+ 		ASSERT(numBits != 0);
+ 		ASSERT(numBits <= 64);
+@@ -213,7 +213,7 @@
+ 
+ class MP4Float32Property : public MP4Property {
+ public:
+-	MP4Float32Property(char* name)
++	MP4Float32Property(const char* name)
+ 		: MP4Property(name) {
+ 		m_useFixed16Format = false;
+ 		m_useFixed32Format = false;
+@@ -280,7 +280,7 @@
+ 
+ class MP4StringProperty : public MP4Property {
+ public:
+-	MP4StringProperty(char* name, 
++	MP4StringProperty(const char* name,
+ 	  bool useCountedFormat = false, bool useUnicode = false);
+ 
+ 	~MP4StringProperty();
+@@ -355,7 +355,7 @@
+ 
+ class MP4BytesProperty : public MP4Property {
+ public:
+-	MP4BytesProperty(char* name, u_int32_t valueSize = 0,
++	MP4BytesProperty(const char* name, u_int32_t valueSize = 0,
+                          u_int32_t defaultValueSize = 0);
+ 
+ 	~MP4BytesProperty();
+@@ -419,7 +419,7 @@
+ 
+ class MP4TableProperty : public MP4Property {
+ public:
+-	MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty);
++	MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty);
+ 
+ 	~MP4TableProperty();
+ 
+@@ -469,7 +469,7 @@
+ 
+ class MP4DescriptorProperty : public MP4Property {
+ public:
+-	MP4DescriptorProperty(char* name = NULL, 
++	MP4DescriptorProperty(const char* name = NULL,
+ 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
+ 	  bool mandatory = false, bool onlyOne = false);
+ 
+@@ -531,7 +531,7 @@
+ 
+ class MP4QosQualifierProperty : public MP4DescriptorProperty {
+ public:
+-	MP4QosQualifierProperty(char* name = NULL, 
++	MP4QosQualifierProperty(const char* name = NULL,
+ 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
+ 	  bool mandatory = false, bool onlyOne = false) :
+ 	MP4DescriptorProperty(name, tagsStart, tagsEnd, mandatory, onlyOne) { }
+--- a/common/mp4v2/mp4track.cpp
++++ b/common/mp4v2/mp4track.cpp
+@@ -1360,7 +1360,7 @@
+   }
+ }
+ 
+-MP4Atom* MP4Track::AddAtom(char* parentName, char* childName)
++MP4Atom* MP4Track::AddAtom(const char* parentName, const char* childName)
+ {
+ 	MP4Atom* pChildAtom = MP4Atom::CreateAtom(childName);
+ 
+--- a/common/mp4v2/mp4track.h
++++ b/common/mp4v2/mp4track.h
+@@ -168,7 +168,7 @@
+ 	void UpdateSyncSamples(MP4SampleId sampleId, 
+ 		bool isSyncSample);
+ 
+-	MP4Atom* AddAtom(char* parentName, char* childName);
++	MP4Atom* AddAtom(const char* parentName, const char* childName);
+ 
+ 	void UpdateDurations(MP4Duration duration);
+ 	MP4Duration ToMovieDuration(MP4Duration trackDuration);
+--- a/common/mp4v2/ocidescriptors.cpp
++++ b/common/mp4v2/ocidescriptors.cpp
+@@ -171,7 +171,7 @@
+ 
+ class MP4CreatorTableProperty : public MP4TableProperty {
+ public:
+-	MP4CreatorTableProperty(char* name, MP4Integer8Property* pCountProperty) :
++	MP4CreatorTableProperty(const char* name, MP4Integer8Property* pCountProperty) :
+ 		MP4TableProperty(name, pCountProperty) {
+ 	};
+ protected:
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb
new file mode 100644
index 0000000..54e8697
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Fluidsynth is a software synthesizer"
+HOMEPAGE = "http://www.fluidsynth.org/"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e198e9aac94943d0ec29a7dae8c29416"
+
+DEPENDS = "alsa-lib ncurses glib-2.0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BP}/${BP}.tar.gz"
+SRC_URI[md5sum] = "ae5aca6de824b4173667cbd3a310b263"
+SRC_URI[sha256sum] = "50853391d9ebeda9b4db787efb23f98b1e26b7296dd2bb5d0d96b5bccee2171c"
+
+inherit autotools-brokensep pkgconfig lib_package
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)}"
+PACKAGECONFIG[sndfile] = "--enable-libsndfile-support,--disable-libsndfile-support,libsndfile1"
+PACKAGECONFIG[jack] = "--enable-jack-support,--disable-jack-support,jack"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse-support,--disable-pulse-support,pulseaudio"
+PACKAGECONFIG[portaudio] = "--enable-portaudio-support,--disable-portaudio-support,portaudio-v19"
+
+do_configure_prepend () {
+    rm -f ${S}/m4/*
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch
new file mode 100644
index 0000000..7da0e14
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch
@@ -0,0 +1,34 @@
+gst-ffmpeg: aacdec: check channel count
+
+Prevent out of array accesses
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 96f452ac647dae33c53c242ef3266b65a9beafb6)
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/aacdec.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
+index 239153a..6c17c33 100644
+--- a/gst-libs/ext/libav/libavcodec/aacdec.c
++++ b/gst-libs/ext/libav/libavcodec/aacdec.c
+@@ -914,6 +914,11 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
+         }
+     }
+ 
++    if (avctx->channels > MAX_CHANNELS) {
++        av_log(avctx, AV_LOG_ERROR, "Too many channels\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     AAC_INIT_VLC_STATIC( 0, 304);
+     AAC_INIT_VLC_STATIC( 1, 270);
+     AAC_INIT_VLC_STATIC( 2, 550);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch
new file mode 100644
index 0000000..10ce0f3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch
@@ -0,0 +1,30 @@
+From e0884eadf6a15e93142131b695f48776f9a0ac31 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sat, 10 Nov 2012 17:14:04 +0100
+Subject: [PATCH] alac: fix nb_samples < order case
+
+Upstream-Status: Backport
+
+Commit e0884eadf6a15e93142131b695f48776f9a0ac31 release/1.0
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit fd4f4923cce6a2cbf4f48640b4ac706e614a1594)
+---
+ libavcodec/alac.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/alac.c b/libavcodec/alac.c
+index 9cd1737..e8e844a 100644
+--- a/gst-libs/ext/libav/libavcodec/alac.c
++++ b/gst-libs/ext/libav/libavcodec/alac.c
+@@ -278,7 +278,7 @@ static void predictor_decompress_fir_ada
+ 
+     /* read warm-up samples */
+     if (predictor_coef_num > 0)
+-        for (i = 0; i < predictor_coef_num; i++) {
++        for (i = 0; i < predictor_coef_num && i < output_size; i++) {
+             int32_t val;
+ 
+             val = buffer_out[i] + error_buffer[i+1];
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch
new file mode 100644
index 0000000..73980f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch
@@ -0,0 +1,61 @@
+From 6df0d3e2916c223dbe4262bf1b876dff1cb3f980 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Wed, 12 Dec 2012 12:28:45 +0100
+Subject: [PATCH] alsdec: check block length
+
+Upstream-Status: Backport
+
+Commit 6df0d3e2916c223dbe4262bf1b876dff1cb3f980 release/1.0
+
+Fix writing over the end
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 0ceca269b66ec12a23bf0907bd2c220513cdbf16)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/alsdec.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
+index 46dd0b4..1095b01 100644
+--- a/gst-libs/ext/libav/libavcodec/alsdec.c
++++ b/gst-libs/ext/libav/libavcodec/alsdec.c
+@@ -552,12 +552,15 @@ static void get_block_sizes(ALSDecContext *ctx, unsigned int *div_blocks,
+ 
+ /** Read the block data for a constant block
+  */
+-static void read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
++static int read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
+ {
+     ALSSpecificConfig *sconf = &ctx->sconf;
+     AVCodecContext *avctx    = ctx->avctx;
+     GetBitContext *gb        = &ctx->gb;
+ 
++    if (bd->block_length <= 0)
++        return -1;
++
+     *bd->raw_samples = 0;
+     *bd->const_block = get_bits1(gb);    // 1 = constant value, 0 = zero block (silence)
+     bd->js_blocks    = get_bits1(gb);
+@@ -572,6 +575,8 @@ static void read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
+ 
+     // ensure constant block decoding by reusing this field
+     *bd->const_block = 1;
++
++    return 0;
+ }
+ 
+ 
+@@ -971,7 +976,8 @@ static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
+         if (read_var_block_data(ctx, bd))
+             return -1;
+     } else {
+-        read_const_block_data(ctx, bd);
++        if (read_const_block_data(ctx, bd) < 0)
++            return -1;
+     }
+ 
+     return 0;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch
new file mode 100644
index 0000000..42cb5f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch
@@ -0,0 +1,37 @@
+From 2502914c5f8eb77659d7c0868396862557a63245 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 9 Nov 2012 13:26:20 +0100
+Subject: [PATCH] atrac3dec: Check coding mode against channels.
+
+Upstream-Status: Backport
+
+Commit 2502914c5f8eb77659d7c0868396862557a63245 release/1.0
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 13451f5520ce6b0afde861b2285dda659f8d4fb4)
+
+Conflicts:
+
+	libavcodec/atrac3.c
+---
+ libavcodec/atrac3.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
+index 7d076be..1da4c78 100644
+--- a/gst-libs/ext/libav/libavcodec/atrac3.c
++++ b/gst-libs/ext/libav/libavcodec/atrac3.c
+@@ -955,6 +955,11 @@ static av_cold int atrac3_decode_init(AVCodecContext *avctx)
+     }
+     /* Check the extradata. */
+ 
++    if (q->codingMode == JOINT_STEREO && avctx->channels < 2) {
++        av_log(avctx, AV_LOG_ERROR, "Invalid coding mode\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     if (q->atrac3version != 4) {
+         av_log(avctx,AV_LOG_ERROR,"Version %d != 4.\n",q->atrac3version);
+         return AVERROR_INVALIDDATA;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch
new file mode 100644
index 0000000..31fa51a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch
@@ -0,0 +1,40 @@
+From a99aff4e4bbef8e64b51f267cd1769214e1b4e80 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 30 Aug 2013 23:40:47 +0200
+Subject: [PATCH] avcodec/dsputil: fix signedness in sizeof() comparissions
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 454a11a1c9c686c78aa97954306fb63453299760)
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/dsputil.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
+index 53dc2eb..6264832 100644
+--- a/gst-libs/ext/libav/libavcodec/dsputil.c
++++ b/gst-libs/ext/libav/libavcodec/dsputil.c
+@@ -1912,7 +1912,7 @@ void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type){
+ 
+ static void add_bytes_c(uint8_t *dst, uint8_t *src, int w){
+     long i;
+-    for(i=0; i<=w-sizeof(long); i+=sizeof(long)){
++    for(i=0; i<=w-(int)sizeof(long); i+=sizeof(long)){
+         long a = *(long*)(src+i);
+         long b = *(long*)(dst+i);
+         *(long*)(dst+i) = ((a&pb_7f) + (b&pb_7f)) ^ ((a^b)&pb_80);
+@@ -1937,7 +1937,7 @@ static void diff_bytes_c(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w){
+         }
+     }else
+ #endif
+-    for(i=0; i<=w-sizeof(long); i+=sizeof(long)){
++    for(i=0; i<=w-(int)sizeof(long); i+=sizeof(long)){
+         long a = *(long*)(src1+i);
+         long b = *(long*)(src2+i);
+         *(long*)(dst+i) = ((a|pb_80) - (b&pb_7f)) ^ ((a^b^pb_80)&pb_80);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch
new file mode 100644
index 0000000..b0a3fb1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch
@@ -0,0 +1,50 @@
+From 573d5fdedae72bf59d8c0b0766fdee171063d36f Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 16 Feb 2014 23:08:52 +0100
+Subject: [PATCH] avcodec/msrle: use av_image_get_linesize() to calculate the
+ linesize
+
+Upstream-Status: Backport
+
+Commit 573d5fdedae72bf59d8c0b0766fdee171063d36f release/0.9
+
+Fixes out of array access
+Fixes: 14a74a0a2dc67ede543f0e35d834fbbe-asan_heap-oob_49572c_556_cov_215466444_44_001_engine_room.mov
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit c919e1ca2ecfc47d796382973ba0e48b8f6f92a2)
+
+Conflicts:
+
+	libavcodec/msrle.c
+(cherry picked from commit bc1c8ec5e65098fd2ccd8456f667151dfc9cda42)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/msrle.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
+index 30159bb..c39ae7b 100644
+--- a/gst-libs/ext/libav/libavcodec/msrle.c
++++ b/gst-libs/ext/libav/libavcodec/msrle.c
+@@ -35,6 +35,7 @@
+ #include "avcodec.h"
+ #include "dsputil.h"
+ #include "msrledec.h"
++#include "libavutil/imgutils.h"
+ 
+ typedef struct MsrleContext {
+     AVCodecContext *avctx;
+@@ -107,7 +108,7 @@ static int msrle_decode_frame(AVCodecContext *avctx,
+ 
+     /* FIXME how to correctly detect RLE ??? */
+     if (avctx->height * istride == avpkt->size) { /* assume uncompressed */
+-        int linesize = avctx->width * avctx->bits_per_coded_sample / 8;
++        int linesize = av_image_get_linesize(avctx->pix_fmt, avctx->width, 0);
+         uint8_t *ptr = s->frame.data[0];
+         uint8_t *buf = avpkt->data + (avctx->height-1)*istride;
+         int i, j;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch
new file mode 100644
index 0000000..5ff6583
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch
@@ -0,0 +1,50 @@
+gst-ffmpeg: avcodec/parser: reset indexes on realloc failure
+
+Fixes Ticket2982
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit f31011e9abfb2ae75bb32bc44e2c34194c8dc40a)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/parser.c |   10 +++++++---
+ 1 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/libavcodec/parser.c b/libavcodec/parser.c
+index 2c6de6e..66eca06 100644
+--- a/gst-libs/ext/libav/libavcodec/parser.c
++++ b/gst-libs/ext/libav/libavcodec/parser.c
+@@ -241,8 +241,10 @@ int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_s
+     if(next == END_NOT_FOUND){
+         void* new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size, (*buf_size) + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
+ 
+-        if(!new_buffer)
++        if(!new_buffer) {
++            pc->index = 0;
+             return AVERROR(ENOMEM);
++        }
+         pc->buffer = new_buffer;
+         memcpy(&pc->buffer[pc->index], *buf, *buf_size);
+         pc->index += *buf_size;
+@@ -255,9 +257,11 @@ int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_s
+     /* append to buffer */
+     if(pc->index){
+         void* new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size, next + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
+-
+-        if(!new_buffer)
++        if(!new_buffer) {
++            pc->overread_index =
++            pc->index = 0;
+             return AVERROR(ENOMEM);
++        }
+         pc->buffer = new_buffer;
+         if (next > -FF_INPUT_BUFFER_PADDING_SIZE)
+             memcpy(&pc->buffer[pc->index], *buf,
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch
new file mode 100644
index 0000000..7f6eb48
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch
@@ -0,0 +1,81 @@
+gst-ffmpeg: avcodec/rpza: Perform pointer advance and checks before
+ using the pointers
+
+Fixes out of array accesses
+Fixes Ticket2850
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 3819db745da2ac7fb3faacb116788c32f4753f34)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Singed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/rpza.c |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libavcodec/rpza.c b/libavcodec/rpza.c
+index 635b406..f291a95 100644
+--- a/gst-libs/ext/libav/libavcodec/rpza.c
++++ b/gst-libs/ext/libav/libavcodec/rpza.c
+@@ -83,7 +83,7 @@ static void rpza_decode_stream(RpzaContext *s)
+     unsigned short *pixels = (unsigned short *)s->frame.data[0];
+ 
+     int row_ptr = 0;
+-    int pixel_ptr = 0;
++    int pixel_ptr = -4;
+     int block_ptr;
+     int pixel_x, pixel_y;
+     int total_blocks;
+@@ -139,6 +139,7 @@ static void rpza_decode_stream(RpzaContext *s)
+             colorA = AV_RB16 (&s->buf[stream_ptr]);
+             stream_ptr += 2;
+             while (n_blocks--) {
++                ADVANCE_BLOCK()
+                 block_ptr = row_ptr + pixel_ptr;
+                 for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                     for (pixel_x = 0; pixel_x < 4; pixel_x++){
+@@ -147,7 +148,6 @@ static void rpza_decode_stream(RpzaContext *s)
+                     }
+                     block_ptr += row_inc;
+                 }
+-                ADVANCE_BLOCK();
+             }
+             break;
+ 
+@@ -184,6 +184,7 @@ static void rpza_decode_stream(RpzaContext *s)
+             color4[2] |= ((21 * ta + 11 * tb) >> 5);
+ 
+             while (n_blocks--) {
++                ADVANCE_BLOCK();
+                 block_ptr = row_ptr + pixel_ptr;
+                 for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                     index = s->buf[stream_ptr++];
+@@ -194,12 +195,12 @@ static void rpza_decode_stream(RpzaContext *s)
+                     }
+                     block_ptr += row_inc;
+                 }
+-                ADVANCE_BLOCK();
+             }
+             break;
+ 
+         /* Fill block with 16 colors */
+         case 0x00:
++            ADVANCE_BLOCK();
+             block_ptr = row_ptr + pixel_ptr;
+             for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                 for (pixel_x = 0; pixel_x < 4; pixel_x++){
+@@ -213,7 +214,6 @@ static void rpza_decode_stream(RpzaContext *s)
+                 }
+                 block_ptr += row_inc;
+             }
+-            ADVANCE_BLOCK();
+             break;
+ 
+         /* Unknown opcode */
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch
new file mode 100644
index 0000000..3ca6fc4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch
@@ -0,0 +1,32 @@
+From c17a0ad1df15a94d0b1239adc2afb593bdf0a153 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 22:50:45 +0200
+Subject: [PATCH 1/2] avcodec/smc: fix off by 1 error
+
+Upstream-Status: Backport
+
+Fixes out of array access
+Fixes: asan_heap-oob_1685bf0_5_asan_heap-oob_1f35116_430_smc.mov
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/smc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/smc.c b/gst-libs/ext/libav/libavcodec/smc.c
+index 3cd5e53..dec9f71 100644
+--- a/gst-libs/ext/libav/libavcodec/smc.c
++++ b/gst-libs/ext/libav/libavcodec/smc.c
+@@ -69,7 +69,7 @@ typedef struct SmcContext {
+         row_ptr += stride * 4; \
+     } \
+     total_blocks--; \
+-    if (total_blocks < 0) \
++    if (total_blocks < 0 + !!n_blocks) \
+     { \
+         av_log(s->avctx, AV_LOG_INFO, "warning: block counter just went negative (this should not happen)\n"); \
+         return; \
+-- 
+2.1.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch
new file mode 100644
index 0000000..68bb66e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch
@@ -0,0 +1,69 @@
+From 12770701856a05b6b3cd706f708f8e9a4e8a1336 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 13 Feb 2014 13:59:51 +0100
+Subject: [PATCH] avformat/mpegtsenc: Check data array size in
+ mpegts_write_pmt()
+
+Upstream-Status: Backport
+
+COmmit 12770701856a05b6b3cd706f708f8e9a4e8a1336 release/0.11
+
+Prevents out of array writes
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 842b6c14bcfc1c5da1a2d288fd65386eb8c158ad)
+
+Conflicts:
+
+	libavformat/mpegtsenc.c
+(cherry picked from commit e87de3f50b765134588d0b048c32ed4b8acc16fb)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavformat/mpegtsenc.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
+index 793e205..a12d19f 100644
+--- a/gst-libs/ext/libav/libavformat/mpegtsenc.c
++++ b/gst-libs/ext/libav/libavformat/mpegtsenc.c
+@@ -240,7 +240,7 @@ static void mpegts_write_pat(AVFormatContext *s)
+                           data, q - data);
+ }
+ 
+-static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
++static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+ {
+     //    MpegTSWrite *ts = s->priv_data;
+     uint8_t data[1012], *q, *desc_length_ptr, *program_info_length_ptr;
+@@ -293,6 +293,10 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+             stream_type = STREAM_TYPE_PRIVATE_DATA;
+             break;
+         }
++
++        if (q - data > sizeof(data) - 32)
++            return AVERROR(EINVAL);
++
+         *q++ = stream_type;
+         put16(&q, 0xe000 | ts_st->pid);
+         desc_length_ptr = q;
+@@ -324,7 +328,7 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+                 len_ptr = q++;
+                 *len_ptr = 0;
+ 
+-                for (p = lang->value; next && *len_ptr < 255 / 4 * 4; p = next + 1) {
++                for (p = lang->value; next && *len_ptr < 255 / 4 * 4 && q - data < sizeof(data) - 4; p = next + 1) {
+                     next = strchr(p, ',');
+                     if (strlen(p) != 3 && (!next || next != p + 3))
+                         continue; /* not a 3-letter code */
+@@ -386,6 +390,7 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+     }
+     mpegts_write_section1(&service->pmt, PMT_TID, service->sid, 0, 0, 0,
+                           data, q - data);
++    return 0;
+ }
+ 
+ /* NOTE: str == NULL is accepted for an empty string */
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch
new file mode 100644
index 0000000..f45e3fd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch
@@ -0,0 +1,29 @@
+From 63ac64864c6e0e84355aa3caa5b92208997a9a8d Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sat, 17 Nov 2012 16:26:55 +0100
+Subject: [PATCH] eamad: fix out of array accesses
+
+Upstream-Status: Backport
+
+Commit 63ac64864c6e0e84355aa3caa5b92208997a9a8d release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/eamad.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
+index 2805195..e38650e 100644
+--- a/gst-libs/ext/libav/libavcodec/eamad.c
++++ b/gst-libs/ext/libav/libavcodec/eamad.c
+@@ -237,7 +237,7 @@ static int decode_frame(AVCodecContext *avctx,
+     int chunk_type;
+     int inter;
+ 
+-    if (buf_size < 17) {
++    if (buf_size < 26) {
+         av_log(avctx, AV_LOG_ERROR, "Input buffer too small\n");
+         *data_size = 0;
+         return -1;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch
new file mode 100644
index 0000000..e0e4239
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch
@@ -0,0 +1,29 @@
+gst-ffmpeg: error concealment: initialize block index.
+
+Fixes CVE-2011-3941 (out of bounds write)
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/error_resilience.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
+index 8bb5d0c..d55c000 100644
+--- a/gst-libs/ext/libav/libavcodec/error_resilience.c
++++ b/gst-libs/ext/libav/libavcodec/error_resilience.c
+@@ -45,6 +45,9 @@ static void decode_mb(MpegEncContext *s, int ref){
+     s->dest[1] = s->current_picture.data[1] + (s->mb_y * (16>>s->chroma_y_shift) * s->uvlinesize) + s->mb_x * (16>>s->chroma_x_shift);
+     s->dest[2] = s->current_picture.data[2] + (s->mb_y * (16>>s->chroma_y_shift) * s->uvlinesize) + s->mb_x * (16>>s->chroma_x_shift);
+ 
++    ff_init_block_index(s);
++    ff_update_block_index(s);
++
+     if(CONFIG_H264_DECODER && s->codec_id == CODEC_ID_H264){
+         H264Context *h= (void*)s;
+         h->mb_xy= s->mb_x + s->mb_y*s->mb_stride;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch
new file mode 100644
index 0000000..8eef6e9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch
@@ -0,0 +1,37 @@
+gst-ffmpeg: error_concealment: Check that the picture is not in a half
+
+Fixes state becoming inconsistent
+Fixes a null pointer dereference
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 23318a57358358e7a4dc551e830e4503f0638cfe)
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/error_resilience.c |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
+index 01f7424..2b6bc42 100644
+--- a/gst-libs/ext/libav/libavcodec/error_resilience.c
++++ b/gst-libs/ext/libav/libavcodec/error_resilience.c
+@@ -793,6 +793,12 @@ void ff_er_frame_end(MpegEncContext *s){
+        s->picture_structure != PICT_FRAME || // we dont support ER of field pictures yet, though it should not crash if enabled
+        s->error_count==3*s->mb_width*(s->avctx->skip_top + s->avctx->skip_bottom)) return;
+ 
++    if (   s->picture_structure == PICT_FRAME
++        && s->current_picture.linesize[0] != s->current_picture_ptr->linesize[0]) {
++        av_log(s->avctx, AV_LOG_ERROR, "Error concealment not possible, frame not fully initialized\n");
++        return;
++    }
++
+     if(s->current_picture.motion_val[0] == NULL){
+         av_log(s->avctx, AV_LOG_ERROR, "Warning MVs not available\n");
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch
new file mode 100644
index 0000000..80325db
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch
@@ -0,0 +1,36 @@
+gst-ffmpeg: ffserver: set oformat
+
+Fix Ticket1986
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit cbe43e62c9ac7d4aefdc13476f6f691bd626525f)
+
+Upstream-Status: Backport 
+
+---
+ ffserver.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/ffserver.c b/ffserver.c
+index 4044d0f..8740140 100644
+--- a/gst-libs/ext/libav/ffserver.c
++++ b/gst-libs/ext/libav/ffserver.c
+@@ -2937,12 +2937,14 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
+ {
+     AVFormatContext *avc;
+     AVStream *avs = NULL;
++    AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
+     int i;
+ 
+     avc =  avformat_alloc_context();
+-    if (avc == NULL) {
++    if (avc == NULL || !rtp_format) {
+         return -1;
+     }
++    avc->oformat = rtp_format;
+     av_dict_set(&avc->metadata, "title",
+                stream->title[0] ? stream->title : "No Title", 0);
+     avc->nb_streams = stream->nb_streams;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch
new file mode 100644
index 0000000..d4f55b2
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch
@@ -0,0 +1,29 @@
+From d6c184880ee2e09fd68c0ae217173832cee5afc1 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 18 Nov 2012 16:29:04 +0100
+Subject: [PATCH] h264: correct ref count check and limit, fix out of array
+ accesses.
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/h264.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index da43f1e..32cede5 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2870,6 +2870,9 @@ static int decode_slice_header(H264Conte
+             h->ref_count[0]= get_ue_golomb(&s->gb) + 1;
+             if(h->slice_type_nos==AV_PICTURE_TYPE_B)
+                 h->ref_count[1]= get_ue_golomb(&s->gb) + 1;
++            else
++                // full range is spec-ok in this case, even for frames
++                h->ref_count[1] = 1;
+ 
+             if(h->ref_count[0]-1 > 32-1 || h->ref_count[1]-1 > 32-1){
+                 av_log(h->s.avctx, AV_LOG_ERROR, "reference overflow\n");
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch
new file mode 100644
index 0000000..05a9de3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch
@@ -0,0 +1,145 @@
+gst-ffmpeg: h264: set parameters from SPS whenever it changes
+    
+Fixes a crash in the fuzzed sample sample_varPAR.avi_s26638 with
+alternating bit depths.
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+diff --git a/gst-libs/ext/libav/libavcodec/h264.c.old b/gst-libs/ext/libav/libavcodec/h264.c
+index 3621f41..718906a 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c.old
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2491,6 +2491,34 @@ int ff_h264_get_profile(SPS *sps)
+     return profile;
+ }
+ 
++static int h264_set_parameter_from_sps(H264Context *h)
++{
++    MpegEncContext *s = &h->s;
++    AVCodecContext * avctx= s->avctx;
++
++    if (s->flags& CODEC_FLAG_LOW_DELAY ||
++        (h->sps.bitstream_restriction_flag && !h->sps.num_reorder_frames))
++        s->low_delay=1;
++
++    if(avctx->has_b_frames < 2)
++        avctx->has_b_frames= !s->low_delay;
++
++    if (avctx->bits_per_raw_sample != h->sps.bit_depth_luma) {
++        if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 10) {
++            avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
++            h->pixel_shift = h->sps.bit_depth_luma > 8;
++
++            ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma);
++            ff_h264_pred_init(&h->hpc, s->codec_id, h->sps.bit_depth_luma);
++            dsputil_init(&s->dsp, s->avctx);
++        } else {
++            av_log(avctx, AV_LOG_DEBUG, "Unsupported bit depth: %d\n", h->sps.bit_depth_luma);
++            return -1;
++        }
++    }
++    return 0;
++}
++
+ /**
+  * decodes a slice header.
+  * This will also call MPV_common_init() and frame_start() as needed.
+@@ -2505,7 +2533,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+     MpegEncContext * const s0 = &h0->s;
+     unsigned int first_mb_in_slice;
+     unsigned int pps_id;
+-    int num_ref_idx_active_override_flag;
++    int num_ref_idx_active_override_flag, ret;
+     unsigned int slice_type, tmp, i, j;
+     int default_ref_list_done = 0;
+     int last_pic_structure;
+@@ -2569,7 +2597,17 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+         av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS %u referenced\n", h->pps.sps_id);
+         return -1;
+     }
+-    h->sps = *h0->sps_buffers[h->pps.sps_id];
++
++    if (h->pps.sps_id != h->current_sps_id ||
++        h0->sps_buffers[h->pps.sps_id]->new) {
++        h0->sps_buffers[h->pps.sps_id]->new = 0;
++
++        h->current_sps_id = h->pps.sps_id;
++        h->sps            = *h0->sps_buffers[h->pps.sps_id];
++
++        if ((ret = h264_set_parameter_from_sps(h)) < 0)
++            return ret;
++    }
+ 
+     s->avctx->profile = ff_h264_get_profile(&h->sps);
+     s->avctx->level   = h->sps.level_idc;
+@@ -3811,26 +3811,8 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
+         case NAL_SPS:
+             init_get_bits(&s->gb, ptr, bit_length);
+             ff_h264_decode_seq_parameter_set(h);
+-
+-            if (s->flags& CODEC_FLAG_LOW_DELAY ||
+-                (h->sps.bitstream_restriction_flag && !h->sps.num_reorder_frames))
+-                s->low_delay=1;
+-
+-            if(avctx->has_b_frames < 2)
+-                avctx->has_b_frames= !s->low_delay;
+-
+-            if (avctx->bits_per_raw_sample != h->sps.bit_depth_luma) {
+-                if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 10) {
+-                    avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
+-                    h->pixel_shift = h->sps.bit_depth_luma > 8;
+-
+-                    ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma);
+-                    ff_h264_pred_init(&h->hpc, s->codec_id, h->sps.bit_depth_luma);
+-                    dsputil_init(&s->dsp, s->avctx);
+-                } else {
+-                    av_log(avctx, AV_LOG_DEBUG, "Unsupported bit depth: %d\n", h->sps.bit_depth_luma);
+-                    return -1;
+-                }
++            if (h264_set_parameter_from_sps(h) < 0) {
++                return -1;
+             }
+             break;
+         case NAL_PPS:
+diff --git a/gst-libs/ext/libav/libavcodec/h264.h.old b/gst-libs/ext/libav/libavcodec/h264.h
+index e3cc815..b77ad98 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.h.old
++++ b/gst-libs/ext/libav/libavcodec/h264.h
+@@ -202,6 +202,7 @@ typedef struct SPS{
+     int bit_depth_chroma;              ///< bit_depth_chroma_minus8 + 8
+     int residual_color_transform_flag; ///< residual_colour_transform_flag
+     int constraint_set_flags;          ///< constraint_set[0-3]_flag
++    int new;                              ///< flag to keep track if the decoder context needs re-init due to changed SPS
+ }SPS;
+ 
+ /**
+@@ -333,6 +334,7 @@ typedef struct H264Context{
+     int emu_edge_width;
+     int emu_edge_height;
+ 
++    unsigned current_sps_id; ///< id of the current SPS
+     SPS sps; ///< current sps
+ 
+     /**
+diff --git a/gst-libs/ext/libav/libavcodec/h264_ps.c.old b/gst-libs/ext/libav/libavcodec/h264_ps.c
+index 7491807..0929098 100644
+--- a/gst-libs/ext/libav/libavcodec/h264_ps.c.old
++++ b/gst-libs/ext/libav/libavcodec/h264_ps.c
+@@ -438,10 +438,13 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){
+                sps->timing_info_present_flag ? sps->time_scale : 0
+                );
+     }
++    sps->new = 1;
+ 
+     av_free(h->sps_buffers[sps_id]);
+-    h->sps_buffers[sps_id]= sps;
+-    h->sps = *sps;
++    h->sps_buffers[sps_id] = sps;
++    h->sps                 = *sps;
++    h->current_sps_id      = sps_id;
++
+     return 0;
+ fail:
+     av_free(sps);
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch
new file mode 100644
index 0000000..5d45c1a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch
@@ -0,0 +1,33 @@
+gst-ffmpeg: h264: skip error concealment when SPS and slices are
+ mismatching
+
+Fixes out of array accesses
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 695af8eed642ff0104834495652d1ee784a4c14d)
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/h264.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index da144db..0aab4e7 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2351,7 +2351,7 @@ static int field_end(H264Context *h, int in_setup)
+      * past end by one (callers fault) and resync_mb_y != 0
+      * causes problems for the first MB line, too.
+      */
+-    if (!FIELD_PICTURE)
++    if (!FIELD_PICTURE && h->current_slice && !h->sps.new)
+         ff_er_frame_end(s);
+ 
+     ff_MPV_frame_end(s);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch
new file mode 100644
index 0000000..1e62b50
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch
@@ -0,0 +1,39 @@
+gst-ffmpeg: h264_sei: Fix infinite loop.
+
+Fixsot yet fixed parts of CVE-2011-3946.
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/h264_sei.c |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+
+diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
+index 374e53d..80d70e5 100644
+--- a/gst-libs/ext/libav/libavcodec/h264_sei.c
++++ b/gst-libs/ext/libav/libavcodec/h264_sei.c
+@@ -169,11 +169,15 @@ int ff_h264_decode_sei(H264Context *h){
+ 
+         type=0;
+         do{
++            if (get_bits_left(&s->gb) < 8)
++                return -1;
+             type+= show_bits(&s->gb, 8);
+         }while(get_bits(&s->gb, 8) == 255);
+ 
+         size=0;
+         do{
++            if (get_bits_left(&s->gb) < 8)
++                return -1;
+             size+= show_bits(&s->gb, 8);
+         }while(get_bits(&s->gb, 8) == 255);
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch
new file mode 100644
index 0000000..e859e44
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch
@@ -0,0 +1,87 @@
+From b666debffec1fcbb19ef377635a53b9a58bca8a4 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Tue, 29 Jan 2013 18:29:41 +0100
+Subject: [PATCH] huffyuvdec: Check init_vlc() return codes.
+
+Upstream-Status: Backport
+
+Commit b666debffec1fcbb19ef377635a53b9a58bca8a4 release/1.0
+
+Prevents out of array writes
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit f67a0d115254461649470452058fa3c28c0df294)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/huffyuv.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
+index 58da789..993e524 100644
+--- a/gst-libs/ext/libav/libavcodec/huffyuv.c
++++ b/gst-libs/ext/libav/libavcodec/huffyuv.c
+@@ -33,6 +33,7 @@
+ #include "put_bits.h"
+ #include "dsputil.h"
+ #include "thread.h"
++#include "libavutil/avassert.h"
+ 
+ #define VLC_BITS 11
+ 
+@@ -287,6 +287,7 @@ static void generate_joint_tables(HYuvCo
+                     int len1 = s->len[p][u];
+                     if (len1 > limit || !len1)
+                         continue;
++                    av_assert0(i < (1 << VLC_BITS));
+                     len[i] = len0 + len1;
+                     bits[i] = (s->bits[0][y] << len1) + s->bits[p][u];
+                     symbols[i] = (y<<8) + u;
+@@ -320,6 +321,7 @@ static void generate_joint_tables(HYuvCo
+                     int len2 = s->len[2][r&255];
+                     if (len2 > limit1 || !len2)
+                         continue;
++                    av_assert0(i < (1 << VLC_BITS));
+                     len[i] = len0 + len1 + len2;
+                     bits[i] = (code << len2) + s->bits[2][r&255];
+                     if(s->decorrelate){
+@@ -343,6 +345,7 @@ static void generate_joint_tables(HYuvCo
+ static int read_huffman_tables(HYuvContext *s, const uint8_t *src, int length){
+     GetBitContext gb;
+     int i;
++    int ret;
+ 
+     init_get_bits(&gb, src, length*8);
+ 
+@@ -353,7 +356,9 @@ static int read_huffman_tables(HYuvConte
+             return -1;
+         }
+         free_vlc(&s->vlc[i]);
+-        init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1, s->bits[i], 4, 4, 0);
++        if ((ret = init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1,
++                           s->bits[i], 4, 4, 0)) < 0)
++            return ret;
+     }
+ 
+     generate_joint_tables(s);
+@@ -365,6 +370,7 @@ static int read_old_huffman_tables(HYuvC
+ #if 1
+     GetBitContext gb;
+     int i;
++    int ret;
+ 
+     init_get_bits(&gb, classic_shift_luma, sizeof(classic_shift_luma)*8);
+     if(read_len_table(s->len[0], &gb)<0)
+@@ -385,7 +391,9 @@ static int read_old_huffman_tables(HYuvC
+ 
+     for(i=0; i<3; i++){
+         free_vlc(&s->vlc[i]);
+-        init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1, s->bits[i], 4, 4, 0);
++        if ((ret = init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1,
++                            s->bits[i], 4, 4, 0)) < 0)
++            return ret;
+     }
+ 
+     generate_joint_tables(s);
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch
new file mode 100644
index 0000000..94bf4b6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch
@@ -0,0 +1,61 @@
+From db0f7f7394e1f994ed38db043f78ed0f10bde0da Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Tue, 29 Jan 2013 19:22:33 +0100
+Subject: [PATCH] huffyuvdec: Skip len==0 cases
+
+Upstream-Status: Backport
+
+Commit db0f7f7394e1f994ed38db043f78ed0f10bde0da release/1.0
+
+Fixes vlc decoding for hypothetical files that would contain such cases.
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 0dfc01c2bbf4b71bb56201bc4a393321e15d1b31)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/huffyuv.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
+index 993e524..72ed351 100644
+--- a/gst-libs/ext/libav/libavcodec/huffyuv.c
++++ b/gst-libs/ext/libav/libavcodec/huffyuv.c
+@@ -281,11 +281,11 @@ static void generate_joint_tables(HYuvCo
+             for(i=y=0; y<256; y++){
+                 int len0 = s->len[0][y];
+                 int limit = VLC_BITS - len0;
+-                if(limit <= 0)
++                if(limit <= 0 || !len0)
+                     continue;
+                 for(u=0; u<256; u++){
+                     int len1 = s->len[p][u];
+-                    if(len1 > limit)
++                    if (len1 > limit || !len1)
+                         continue;
+                     len[i] = len0 + len1;
+                     bits[i] = (s->bits[0][y] << len1) + s->bits[p][u];
+@@ -308,17 +308,17 @@ static void generate_joint_tables(HYuvCo
+         for(i=0, g=-16; g<16; g++){
+             int len0 = s->len[p0][g&255];
+             int limit0 = VLC_BITS - len0;
+-            if(limit0 < 2)
++            if (limit0 < 2 || !len0)
+                 continue;
+             for(b=-16; b<16; b++){
+                 int len1 = s->len[p1][b&255];
+                 int limit1 = limit0 - len1;
+-                if(limit1 < 1)
++                if (limit1 < 1 || !len1)
+                     continue;
+                 code = (s->bits[p0][g&255] << len1) + s->bits[p1][b&255];
+                 for(r=-16; r<16; r++){
+                     int len2 = s->len[2][r&255];
+-                    if(len2 > limit1)
++                    if (len2 > limit1 || !len2)
+                         continue;
+                     len[i] = len0 + len1 + len2;
+                     bits[i] = (code << len2) + s->bits[2][r&255];
+-- 
+1.8.5.2.233.g932f7e4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch
new file mode 100644
index 0000000..ea4aa22
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch
@@ -0,0 +1,45 @@
+gst-ffmpeg: lavf: compute probe buffer size more reliably.
+
+The previous code computes the offset by reversing the growth
+of the allocated buffer size: it is complex and did lead to
+inconsistencies when the size limit is reached.
+
+Fix trac ticket #1991.
+(cherry picked from commit 03847eb8259291b4ff1bd840bd779d0699d71f96)
+
+Conflicts:
+	libavformat/utils.c
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavformat/utils.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/utils.c b/libavformat/utils.c
+index 7940037..be73c4a 100644
+--- a/gst-libs/ext/libav/libavformat/utils.c
++++ b/gst-libs/ext/libav/libavformat/utils.c
+@@ -459,7 +459,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
+ {
+     AVProbeData pd = { filename ? filename : "", NULL, -offset };
+     unsigned char *buf = NULL;
+-    int ret = 0, probe_size;
++    int ret = 0, probe_size, buf_offset = 0;
+ 
+     if (!max_probe_size) {
+         max_probe_size = PROBE_BUF_MAX;
+@@ -499,7 +499,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
+             score = 0;
+             ret = 0;            /* error was end of file, nothing read */
+         }
+-        pd.buf_size += ret;
++        pd.buf_size = buf_offset += ret;
+         pd.buf = &buf[offset];
+ 
+         memset(pd.buf + pd.buf_size, 0, AVPROBE_PADDING_SIZE);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch
new file mode 100644
index 0000000..d90bafa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch
@@ -0,0 +1,32 @@
+From 1f41cffe1e3e79620f587545bdfcbd7e6e68ed29 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 11 Nov 2012 00:01:24 +0100
+Subject: [PATCH] mjpegdec: check SE.
+
+Upstream-Status: Backport
+
+Commit 1f41cffe1e3e79620f587545bdfcbd7e6e68ed29 release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/mjpegdec.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
+index 6b5266d..0a71a6f 100644
+--- a/gst-libs/ext/libav/libavcodec/mjpegdec.c
++++ b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+@@ -905,6 +905,11 @@ static int mjpeg_decode_scan_progressive
+     int16_t *quant_matrix = s->quant_matrixes[ s->quant_index[c] ];
+     GetBitContext mb_bitmask_gb;
+ 
++    if (se > 63) {
++        av_log(s->avctx, AV_LOG_ERROR, "SE %d is too large\n", se);
++        return AVERROR_INVALIDDATA;
++    }
++
+     if (mb_bitmask) {
+         init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width*s->mb_height);
+     }
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch
new file mode 100644
index 0000000..1041347
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch
@@ -0,0 +1,34 @@
+From 28bf685bfc6d0c744369cdf367f61a78d80d0b01 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 15 Nov 2012 16:41:28 +0100
+Subject: [PATCH] pgssubdec: check RLE size before copying. Fix out of array
+ accesses
+
+Upstream-Status: Backport
+
+Commit 28bf685bfc6d0c744369cdf367f61a78d80d0b01 release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit c0d68be555f5858703383040e04fcd6529777061)
+---
+ libavcodec/pgssubdec.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c
+index 728f178..26a3c2a 100644
+--- a/gst-libs/ext/libav/libavcodec/pgssubdec.c
++++ b/gst-libs/ext/libav/libavcodec/pgssubdec.c
+@@ -202,6 +202,11 @@ static int parse_picture_segment(AVCodec
+         return -1;
+     }
+ 
++    if (buf_size > rle_bitmap_len) {
++        av_log(avctx, AV_LOG_ERROR, "too much RLE data\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     ctx->picture.w = width;
+     ctx->picture.h = height;
+ 
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch
new file mode 100644
index 0000000..1e5fb7d
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch
@@ -0,0 +1,44 @@
+gst-ffmpeg: pngdec/filter: dont access out of array elements at the end
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/pngdec.c |   12 ++++--------
+ 1 files changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
+index 97c0ad1..193e35e 100644
+--- a/gst-libs/ext/libav/libavcodec/pngdec.c
++++ b/gst-libs/ext/libav/libavcodec/pngdec.c
+@@ -190,7 +190,7 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w
+     if(bpp >= 2) g = dst[1];\
+     if(bpp >= 3) b = dst[2];\
+     if(bpp >= 4) a = dst[3];\
+-    for(; i < size; i+=bpp) {\
++    for(; i <= size - bpp; i+=bpp) {\
+         dst[i+0] = r = op(r, src[i+0], last[i+0]);\
+         if(bpp == 1) continue;\
+         dst[i+1] = g = op(g, src[i+1], last[i+1]);\
+@@ -206,13 +206,9 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w
+     else if(bpp == 2) UNROLL1(2, op)\
+     else if(bpp == 3) UNROLL1(3, op)\
+     else if(bpp == 4) UNROLL1(4, op)\
+-    else {\
+-        for (; i < size; i += bpp) {\
+-            int j;\
+-            for (j = 0; j < bpp; j++)\
+-                dst[i+j] = op(dst[i+j-bpp], src[i+j], last[i+j]);\
+-        }\
+-    }
++    for (; i < size; i++) {\
++        dst[i] = op(dst[i-bpp], src[i], last[i]);\
++    }\
+ 
+ /* NOTE: 'dst' can be equal to 'last' */
+ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch
new file mode 100644
index 0000000..8c94232
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch
@@ -0,0 +1,30 @@
+gst-ffmpeg: qdm2: check array index before use, fix out of array
+ accesses
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/qdm2.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
+index 4cf4b2f..1dfb8d5 100644
+--- a/gst-libs/ext/libav/libavcodec/qdm2.c
++++ b/gst-libs/ext/libav/libavcodec/qdm2.c
+@@ -1257,6 +1257,11 @@ static void qdm2_decode_super_block (QDM2Context *q)
+     for (i = 0; packet_bytes > 0; i++) {
+         int j;
+ 
++        if (i>=FF_ARRAY_ELEMS(q->sub_packet_list_A)) {
++            SAMPLES_NEEDED_2("too many packet bytes");
++            return;
++        }
++
+         q->sub_packet_list_A[i].next = NULL;
+ 
+         if (i > 0) {
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch
new file mode 100644
index 0000000..43ffc03
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch
@@ -0,0 +1,58 @@
+gst-ffmpeg: qdm2dec: fix buffer overflow. Fixes NGS00144
+
+This also adds a few lines of code from master that are needed for this fix.
+
+Thanks to Phillip for suggestions to improve the patch.
+Found-by: Phillip Langlois
+
+Upstream-Status: Backport 
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/qdm2.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
+index 3aa9e5b..e000df8 100644
+--- a/gst-libs/ext/libav/libavcodec/qdm2.c
++++ b/gst-libs/ext/libav/libavcodec/qdm2.c
+@@ -76,6 +76,7 @@ do { \
+ #define SAMPLES_NEEDED_2(why) \
+      av_log (NULL,AV_LOG_INFO,"This file triggers some missing code. Please contact the developers.\nPosition: %s\n",why);
+ 
++#define QDM2_MAX_FRAME_SIZE 512
+ 
+ typedef int8_t sb_int8_array[2][30][64];
+ 
+@@ -168,7 +169,7 @@ typedef struct {
+     /// I/O data
+     const uint8_t *compressed_data;
+     int compressed_size;
+-    float output_buffer[1024];
++    float output_buffer[QDM2_MAX_FRAME_SIZE * MPA_MAX_CHANNELS * 2];
+ 
+     /// Synthesis filter
+     MPADSPContext mpadsp;
+@@ -1819,6 +1820,9 @@ static av_cold int qdm2_decode_init(AVCodecContext *avctx)
+     s->group_order = av_log2(s->group_size) + 1;
+     s->frame_size = s->group_size / 16; // 16 iterations per super block
+ 
++    if (s->frame_size > QDM2_MAX_FRAME_SIZE)
++        return AVERROR_INVALIDDATA;
++
+     s->sub_sampling = s->fft_order - 7;
+     s->frequency_range = 255 / (1 << (2 - s->sub_sampling));
+ 
+@@ -1887,6 +1891,9 @@ static int qdm2_decode (QDM2Context *q, const uint8_t *in, int16_t *out)
+     int ch, i;
+     const int frame_size = (q->frame_size * q->channels);
+ 
++    if((unsigned)frame_size > FF_ARRAY_ELEMS(q->output_buffer)/2)
++        return -1;
++
+     /* select input buffer */
+     q->compressed_data = in;
+     q->compressed_size = q->checksum_size;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch
new file mode 100644
index 0000000..7e58afc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch
@@ -0,0 +1,36 @@
+From 391e0fc6c90ced6656b74f50f3a487b6dc76ea63 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 29 Nov 2012 15:18:17 +0100
+Subject: [PATCH] roqvideodec: check dimensions validity
+
+Upstream-Status: Backport
+
+Commit 391e0fc6c90ced6656b74f50f3a487b6dc76ea63 release/0.7
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 3ae610451170cd5a28b33950006ff0bd23036845)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/roqvideodec.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/libavcodec/roqvideodec.c b/libavcodec/roqvideodec.c
+index f0977f6..4e34231 100644
+--- a/gst-libs/ext/libav/libavcodec/roqvideodec.c
++++ b/gst-libs/ext/libav/libavcodec/roqvideodec.c
+@@ -157,6 +157,12 @@ static av_cold int roq_decode_init(AVCodecContext *avctx)
+     RoqContext *s = avctx->priv_data;
+ 
+     s->avctx = avctx;
++
++    if (avctx->width%16 || avctx->height%16) {
++         av_log_ask_for_sample(avctx, "dimensions not being a multiple of 16 are unsupported\n");
++         return AVERROR_PATCHWELCOME;
++    }
++
+     s->width = avctx->width;
+     s->height = avctx->height;
+     avcodec_get_frame_defaults(&s->frames[0]);
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch
new file mode 100644
index 0000000..15b1614
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch
@@ -0,0 +1,32 @@
+gst-ffmpeg: smackerdec: Check that the last indexes are within the
+ table.
+
+Fixes CVE-2011-3944
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/smacker.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c
+index 30f99b4..2a8bae8 100644
+--- a/gst-libs/ext/libav/libavcodec/smacker.c
++++ b/gst-libs/ext/libav/libavcodec/smacker.c
+@@ -259,6 +259,11 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int
+     if(ctx.last[0] == -1) ctx.last[0] = huff.current++;
+     if(ctx.last[1] == -1) ctx.last[1] = huff.current++;
+     if(ctx.last[2] == -1) ctx.last[2] = huff.current++;
++    if(huff.current > huff.length){
++        ctx.last[0] = ctx.last[1] = ctx.last[2] = 1;
++        av_log(smk->avctx, AV_LOG_ERROR, "bigtree damaged\n");
++        return -1;
++    }
+ 
+     *recodes = huff.values;
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch
new file mode 100644
index 0000000..a1989cf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch
@@ -0,0 +1,32 @@
+gst-ffmpeg: vp3: Copy all 3 frames for thread updates.
+
+This fixes a double release of the current frame on deinit.
+Fixes CVE-2011-3934
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue.Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/vp3.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 738ae9f..b5daafc 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -1859,7 +1859,7 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+         ||s->width != s1->width
+         ||s->height!= s1->height) {
+         if (s != s1)
+-            copy_fields(s, s1, golden_frame, current_frame);
++            copy_fields(s, s1, golden_frame, keyframe);
+         return -1;
+     }
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch
new file mode 100644
index 0000000..e83d8f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch
@@ -0,0 +1,183 @@
+gst-ffmpeg: vp3: fix oob read for negative tokens and memleaks on error.
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue.Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/vp3.c |   59 +++++++++++++++++++++++++++++++++++++++++------------
+ 1 files changed, 45 insertions(+), 14 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 36715bb..ce14e63 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -45,6 +45,7 @@
+ #define FRAGMENT_PIXELS 8
+ 
+ static av_cold int vp3_decode_end(AVCodecContext *avctx);
++static void vp3_decode_flush(AVCodecContext *avctx);
+ 
+ //FIXME split things out into their own arrays
+ typedef struct Vp3Fragment {
+@@ -890,7 +891,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+             /* decode a VLC into a token */
+             token = get_vlc2(gb, vlc_table, 11, 3);
+             /* use the token to get a zero run, a coefficient, and an eob run */
+-            if (token <= 6) {
++            if ((unsigned) token <= 6U) {
+                 eob_run = eob_run_base[token];
+                 if (eob_run_get_bits[token])
+                     eob_run += get_bits(gb, eob_run_get_bits[token]);
+@@ -908,7 +909,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+                     coeff_i        += eob_run;
+                     eob_run = 0;
+                 }
+-            } else {
++            } else if (token >= 0) {
+                 bits_to_get = coeff_get_bits[token];
+                 if (bits_to_get)
+                     bits_to_get = get_bits(gb, bits_to_get);
+@@ -942,6 +943,10 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+                 for (i = coeff_index+1; i <= coeff_index+zero_run; i++)
+                     s->num_coded_frags[plane][i]--;
+                 coeff_i++;
++            } else {
++                av_log(s->avctx, AV_LOG_ERROR,
++                       "Invalid token %d\n", token);
++                return -1;
+             }
+     }
+ 
+@@ -991,6 +996,8 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     /* unpack the Y plane DC coefficients */
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_y_table], 0,
+         0, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+ 
+     /* reverse prediction of the Y-plane DC coefficients */
+     reverse_dc_prediction(s, 0, s->fragment_width[0], s->fragment_height[0]);
+@@ -998,8 +1005,12 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     /* unpack the C plane DC coefficients */
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
+         1, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
+         2, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+ 
+     /* reverse prediction of the C-plane DC coefficients */
+     if (!(s->avctx->flags & CODEC_FLAG_GRAY))
+@@ -1036,11 +1047,17 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     for (i = 1; i <= 63; i++) {
+             residual_eob_run = unpack_vlcs(s, gb, y_tables[i], i,
+                 0, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+ 
+             residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
+                 1, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+             residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
+                 2, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+     }
+ 
+     return 0;
+@@ -1777,10 +1794,15 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+     Vp3DecodeContext *s = dst->priv_data, *s1 = src->priv_data;
+     int qps_changed = 0, i, err;
+ 
++#define copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)
++
+     if (!s1->current_frame.data[0]
+         ||s->width != s1->width
+-        ||s->height!= s1->height)
++        ||s->height!= s1->height) {
++        if (s != s1)
++            copy_fields(s, s1, golden_frame, current_frame);
+         return -1;
++    }
+ 
+     if (s != s1) {
+         // init tables if the first frame hasn't been decoded
+@@ -1796,8 +1818,6 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+             memcpy(s->motion_val[1], s1->motion_val[1], c_fragment_count * sizeof(*s->motion_val[1]));
+         }
+ 
+-#define copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)
+-
+         // copy previous frame data
+         copy_fields(s, s1, golden_frame, dsp);
+ 
+@@ -1987,9 +2007,6 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
+     Vp3DecodeContext *s = avctx->priv_data;
+     int i;
+ 
+-    if (avctx->is_copy && !s->current_frame.data[0])
+-        return 0;
+-
+     av_free(s->superblock_coding);
+     av_free(s->all_fragments);
+     av_free(s->coded_fragment_list[0]);
+@@ -2016,12 +2033,7 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
+     free_vlc(&s->motion_vector_vlc);
+ 
+     /* release all frames */
+-    if (s->golden_frame.data[0])
+-        ff_thread_release_buffer(avctx, &s->golden_frame);
+-    if (s->last_frame.data[0] && s->last_frame.type != FF_BUFFER_TYPE_COPY)
+-        ff_thread_release_buffer(avctx, &s->last_frame);
+-    /* no need to release the current_frame since it will always be pointing
+-     * to the same frame as either the golden or last frame */
++    vp3_decode_flush(avctx);
+ 
+     return 0;
+ }
+@@ -2341,6 +2353,23 @@ static void vp3_decode_flush(AVCodecContext *avctx)
+         ff_thread_release_buffer(avctx, &s->current_frame);
+ }
+ 
++static int vp3_init_thread_copy(AVCodecContext *avctx)
++{
++    Vp3DecodeContext *s = avctx->priv_data;
++
++    s->superblock_coding      = NULL;
++    s->all_fragments          = NULL;
++    s->coded_fragment_list[0] = NULL;
++    s->dct_tokens_base        = NULL;
++    s->superblock_fragments   = NULL;
++    s->macroblock_coding      = NULL;
++    s->motion_val[0]          = NULL;
++    s->motion_val[1]          = NULL;
++    s->edge_emu_buffer        = NULL;
++
++    return 0;
++}
++
+ AVCodec ff_theora_decoder = {
+     .name           = "theora",
+     .type           = AVMEDIA_TYPE_VIDEO,
+@@ -2352,6 +2381,7 @@ AVCodec ff_theora_decoder = {
+     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
+     .flush = vp3_decode_flush,
+     .long_name = NULL_IF_CONFIG_SMALL("Theora"),
++    .init_thread_copy      = ONLY_IF_THREADS_ENABLED(vp3_init_thread_copy),
+     .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
+ };
+ #endif
+@@ -2367,5 +2397,6 @@ AVCodec ff_vp3_decoder = {
+     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
+     .flush = vp3_decode_flush,
+     .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
++    .init_thread_copy      = ONLY_IF_THREADS_ENABLED(vp3_init_thread_copy),
+     .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
+ };
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch
new file mode 100644
index 0000000..7e4f682
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch
@@ -0,0 +1,51 @@
+From 2cac35086c9e103fa98960c546d5017e7363803a Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 25 Jan 2013 06:11:59 +0100
+Subject: [PATCH] vqavideo: check chunk sizes before reading chunks
+
+Upstream-Status: Backport
+
+Commit 2cac35086c9e103fa98960c546d5017e7363803a release/0.7
+
+Fixes out of array writes
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit ab6c9332bfa1e20127a16392a0b85a4aa4840889)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/vqavideo.c |   10 ++++++++++
+ 1 files changed, 10 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/vqavideo.c b/libavcodec/vqavideo.c
+index d1eab5b..6e1ce6c 100644
+--- a/gst-libs/ext/libav/libavcodec/vqavideo.c
++++ b/gst-libs/ext/libav/libavcodec/vqavideo.c
+@@ -527,6 +527,11 @@ static void vqa_decode_chunk(VqaContext *s)
+         chunk_size = AV_RB32(&s->buf[cbp0_chunk + 4]);
+         cbp0_chunk += CHUNK_PREAMBLE_SIZE;
+ 
++        if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
++            av_log(s->avctx, AV_LOG_ERROR, "cbp0 chunk too large (0x%X bytes)\n", chunk_size);
++            return AVERROR_INVALIDDATA;
++        }
++
+         /* accumulate partial codebook */
+         memcpy(&s->next_codebook_buffer[s->next_codebook_buffer_index],
+             &s->buf[cbp0_chunk], chunk_size);
+@@ -550,6 +555,11 @@ static void vqa_decode_chunk(VqaContext *s)
+         chunk_size = AV_RB32(&s->buf[cbpz_chunk + 4]);
+         cbpz_chunk += CHUNK_PREAMBLE_SIZE;
+ 
++        if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
++            av_log(s->avctx, AV_LOG_ERROR, "cbpz chunk too large (0x%X bytes)\n", chunk_size);
++            return AVERROR_INVALIDDATA;
++        }
++
+         /* accumulate partial codebook */
+         memcpy(&s->next_codebook_buffer[s->next_codebook_buffer_index],
+             &s->buf[cbpz_chunk], chunk_size);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch
new file mode 100644
index 0000000..c8bafd5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch
@@ -0,0 +1,68 @@
+From 6043c431c97d55173f339fafbd033d3c0642e2e9 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 01:50:27 +0200
+Subject: [PATCH 2/2] avcodec/mjpegdec: check bits per pixel for changes
+ similar to dimensions
+
+Upstream-Status: Backport
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_16668e9_2_asan_heap-oob_16668e9_346_miss_congeniality_pegasus_mjpg.avi
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Conflicts:
+	libavcodec/mjpegdec.c
+---
+ libavcodec/mjpegdec.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/mjpegdec.c b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+index 84343c0..c0137d8 100644
+--- a/gst-libs/ext/libav/libavcodec/mjpegdec.c
++++ b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+@@ -210,16 +210,16 @@ int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
+ 
+ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+ {
+-    int len, nb_components, i, width, height, pix_fmt_id;
++    int len, nb_components, i, bits, width, height, pix_fmt_id;
+ 
+     /* XXX: verify len field validity */
+     len = get_bits(&s->gb, 16);
+-    s->bits= get_bits(&s->gb, 8);
++    bits= get_bits(&s->gb, 8);
+ 
+-    if(s->pegasus_rct) s->bits=9;
+-    if(s->bits==9 && !s->pegasus_rct) s->rct=1;    //FIXME ugly
++    if(s->pegasus_rct) bits=9;
++    if(bits==9 && !s->pegasus_rct) s->rct=1;    //FIXME ugly
+ 
+-    if (s->bits != 8 && !s->lossless){
++    if (bits != 8 && !s->lossless){
+         av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
+         return -1;
+     }
+@@ -239,7 +239,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+     if (nb_components <= 0 ||
+         nb_components > MAX_COMPONENTS)
+         return -1;
+-    if (s->ls && !(s->bits <= 8 || nb_components == 1)){
++    if (s->ls && !(bits <= 8 || nb_components == 1)){
+         av_log(s->avctx, AV_LOG_ERROR, "only <= 8 bits/component or 16-bit gray accepted for JPEG-LS\n");
+         return -1;
+     }
+@@ -272,10 +272,11 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+ 
+     /* if different size, realloc/alloc picture */
+     /* XXX: also check h_count and v_count */
+-    if (width != s->width || height != s->height) {
++    if (width != s->width || height != s->height || bits != s->bits) {
+         av_freep(&s->qscale_table);
+ 
+         s->width = width;
++        s->bits= bits;
+         s->height = height;
+         s->interlaced = 0;
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch
new file mode 100644
index 0000000..9ef6f7c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch
@@ -0,0 +1,22 @@
+Disable yasm for libav when --disable-yasm
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r f2f8f74c6e30 configure.ac
+--- a/configure.ac	Thu Dec 22 23:56:09 2011 +0800
++++ b/configure.ac	Thu Dec 22 23:57:37 2011 +0800
+@@ -325,6 +325,12 @@
+         --enable-gpl"
+   fi
+ 
++ AC_ARG_ENABLE(yasm,
++              [AC_HELP_STRING([--disable-yasm], [disable use of yasm assembler])])
++  if test "x$enable_yasm" = "xno"; then
++    embffmpeg_configure_args="$embffmpeg_configure_args --disable-yasm"
++  fi
++
+   # if we are cross-compiling, tell ffmpeg so
+   target_os=`echo $host_os | sed 's/-gnu//'`
+   if test "x$cross_compiling" = xyes; then
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch
new file mode 100644
index 0000000..3c8d8e3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch
@@ -0,0 +1,100 @@
+gst-ffmpeg: Security Advisory - ffmpeg - CVE-2013-0855
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+diff --git a/gst-libs/ext/libav/libavcodec/alac.c.old b/gst-libs/ext/libav/libavcodec/alac.c
+index 2a0df8c..bcbd56d 100644
+--- a/gst-libs/ext/libav/libavcodec/alac.c.old
++++ b/gst-libs/ext/libav/libavcodec/alac.c
+@@ -87,18 +87,44 @@ typedef struct {
+     int wasted_bits;
+ } ALACContext;
+ 
+-static void allocate_buffers(ALACContext *alac)
++static av_cold int alac_decode_close(AVCodecContext *avctx)
++{
++    ALACContext *alac = avctx->priv_data;
++
++    int chan;
++    for (chan = 0; chan < MAX_CHANNELS; chan++) {
++        av_freep(&alac->predicterror_buffer[chan]);
++        av_freep(&alac->outputsamples_buffer[chan]);
++        av_freep(&alac->wasted_bits_buffer[chan]);
++    }
++
++    return 0;
++}
++
++static int allocate_buffers(ALACContext *alac)
+ {
+     int chan;
++    int buf_size;
++
++    if (alac->setinfo_max_samples_per_frame > INT_MAX / sizeof(int32_t))
++        goto buf_alloc_fail;
++    buf_size = alac->setinfo_max_samples_per_frame * sizeof(int32_t);
++
+     for (chan = 0; chan < MAX_CHANNELS; chan++) {
+-        alac->predicterror_buffer[chan] =
+-            av_malloc(alac->setinfo_max_samples_per_frame * 4);
+ 
+-        alac->outputsamples_buffer[chan] =
+-            av_malloc(alac->setinfo_max_samples_per_frame * 4);
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->predicterror_buffer[chan],
++                         buf_size, buf_alloc_fail);
+ 
+-        alac->wasted_bits_buffer[chan] = av_malloc(alac->setinfo_max_samples_per_frame * 4);
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->outputsamples_buffer[chan],
++                         buf_size, buf_alloc_fail);
++
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->wasted_bits_buffer[chan],
++                         buf_size, buf_alloc_fail);
+     }
++    return 0;
++buf_alloc_fail:
++    alac_decode_close(alac->avctx);
++    return AVERROR(ENOMEM);
+ }
+ 
+ static int alac_set_info(ALACContext *alac)
+@@ -131,8 +157,6 @@ static int alac_set_info(ALACContext *alac)
+     bytestream_get_be32(&ptr);      /* bitrate ? */
+     bytestream_get_be32(&ptr);      /* samplerate */
+ 
+-    allocate_buffers(alac);
+-
+     return 0;
+ }
+ 
+@@ -659,6 +683,7 @@ static int alac_decode_frame(AVCodecContext *avctx,
+ 
+ static av_cold int alac_decode_init(AVCodecContext * avctx)
+ {
++    int ret;
+     ALACContext *alac = avctx->priv_data;
+     alac->avctx = avctx;
+     alac->numchannels = alac->avctx->channels;
+@@ -674,18 +699,9 @@ static av_cold int alac_decode_init(AVCodecContext * avctx)
+         return -1;
+     }
+ 
+-    return 0;
+-}
+-
+-static av_cold int alac_decode_close(AVCodecContext *avctx)
+-{
+-    ALACContext *alac = avctx->priv_data;
+-
+-    int chan;
+-    for (chan = 0; chan < MAX_CHANNELS; chan++) {
+-        av_freep(&alac->predicterror_buffer[chan]);
+-        av_freep(&alac->outputsamples_buffer[chan]);
+-        av_freep(&alac->wasted_bits_buffer[chan]);
++    if ((ret = allocate_buffers(alac)) < 0) {
++        av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
++        return ret;
+     }
+ 
+     return 0;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch
new file mode 100644
index 0000000..aa385f5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch
@@ -0,0 +1,26 @@
+avcodec/cdgraphics: check buffer size before use
+
+Fixes out of array accesses
+
+Backported from:http://git.videolan.org/?p=ffmpeg.git;a=commit;h=ad002e1a13a8df934bd6cb2c84175a4780ab8942
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+
+diff -urpN a/gst-libs/ext/libav/libavcodec/cdgraphics.c b/gst-libs/ext/libav/libavcodec/cdgraphics.c
+--- a/gst-libs/ext/libav/libavcodec/cdgraphics.c	2013-07-18 13:17:08.399876575 +0800
++++ b/gst-libs/ext/libav/libavcodec/cdgraphics.c	2013-07-18 13:18:05.880502267 +0800
+@@ -291,7 +291,9 @@ static int cdg_decode_frame(AVCodecConte
+     inst    = bytestream_get_byte(&buf);
+     inst    &= CDG_MASK;
+     buf += 2;  /// skipping 2 unneeded bytes
+-    bytestream_get_buffer(&buf, cdg_data, buf_size - CDG_HEADER_SIZE);
++
++    if (buf_size > CDG_HEADER_SIZE)
++        bytestream_get_buffer(&buf, cdg_data, buf_size - CDG_HEADER_SIZE);
+ 
+     if ((command & CDG_MASK) == CDG_COMMAND) {
+         switch (inst) {
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch
new file mode 100644
index 0000000..90f3fd0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch
@@ -0,0 +1,64 @@
+From 8b94df0f2047e9728cb872adc9e64557b7a5152f Mon Sep 17 00:00:00 2001
+From: Reinhard Tartler <siretart@tauware.de>
+Date: Sun, 4 Dec 2011 10:10:33 +0100
+Subject: [PATCH] vp3dec: Check coefficient index in vp3_dequant()
+
+Based on a patch by Michael Niedermayer <michaelni@gmx.at>
+
+Fixes NGS00145, CVE-2011-4352
+
+Found-by: Phillip Langlois
+Signed-off-by: Reinhard Tartler <siretart@tauware.de>
+
+
+Upstream-Status: Backport
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=8b94df0f2047e9728cb872adc9e64557b7a5152f
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ libavcodec/vp3.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 51ab048..f44d084 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -1363,6 +1363,10 @@ static inline int vp3_dequant(Vp3DecodeContext *s, Vp3Fragment *frag,
+         case 1: // zero run
+             s->dct_tokens[plane][i]++;
+             i += (token >> 2) & 0x7f;
++            if (i > 63) {
++                av_log(s->avctx, AV_LOG_ERROR, "Coefficient index overflow\n");
++                return i;
++            }
+             block[perm[i]] = (token >> 9) * dequantizer[perm[i]];
+             i++;
+             break;
+@@ -1566,7 +1570,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
+                     /* invert DCT and place (or add) in final output */
+ 
+                     if (s->all_fragments[i].coding_method == MODE_INTRA) {
+-                        vp3_dequant(s, s->all_fragments + i, plane, 0, block);
++                        int index;
++                        index = vp3_dequant(s, s->all_fragments + i, plane, 0, block);
++                        if (index > 63)
++                            continue;
+                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
+                             block[0] += 128<<3;
+                         s->dsp.idct_put(
+@@ -1574,7 +1581,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
+                             stride,
+                             block);
+                     } else {
+-                        if (vp3_dequant(s, s->all_fragments + i, plane, 1, block)) {
++                        int index = vp3_dequant(s, s->all_fragments + i, plane, 1, block);
++                        if (index > 63)
++                            continue;
++                        if (index > 0) {
+                         s->dsp.idct_add(
+                             output_plane + first_pixel,
+                             stride,
+-- 
+2.1.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch
new file mode 100644
index 0000000..3c537c7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch
@@ -0,0 +1,38 @@
+From 2266b8bc3370856d874334ba62b337ce4f1eb255 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 May 2015 16:46:06 +0800
+Subject: [PATCH 2/2] gst-ffmpeg: fix CVE-2014-7933
+
+Upstream-Status: Backport
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=33301f00
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ gst-libs/ext/libav/libavformat/matroskadec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/gst-libs/ext/libav/libavformat/matroskadec.c b/gst-libs/ext/libav/libavformat/matroskadec.c
+index 59dce4f..e5f5fc1 100644
+--- a/gst-libs/ext/libav/libavformat/matroskadec.c
++++ b/gst-libs/ext/libav/libavformat/matroskadec.c
+@@ -1916,7 +1916,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+                               int64_t timestamp, int flags)
+ {
+     MatroskaDemuxContext *matroska = s->priv_data;
+-    MatroskaTrack *tracks = matroska->tracks.elem;
++    MatroskaTrack *tracks = NULL;
+     AVStream *st = s->streams[stream_index];
+     int i, index, index_sub, index_min;
+ 
+@@ -1939,6 +1939,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+         return 0;
+ 
+     index_min = index;
++    tracks = matroska->tracks.elem;
+     for (i=0; i < matroska->tracks.nb_elem; i++) {
+         tracks[i].audio.pkt_cnt = 0;
+         tracks[i].audio.sub_packet_cnt = 0;
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch
new file mode 100644
index 0000000..ca47c81
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch
@@ -0,0 +1,38 @@
+From 105654e376a736d243aef4a1d121abebce912e6b Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 04:30:58 +0200
+Subject: [PATCH] avcodec/utils: Add case for jv to
+ avcodec_align_dimensions2()
+
+(Upstream commit 105654e376a736d243aef4a1d121abebce912e6b)
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_12304aa_8_asan_heap-oob_4da4f3_300_intro.jv
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/utils.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libavcodec/utils.c b/libavcodec/utils.c
+index d4f5532..c2c5579 100644
+--- a/gst-libs/ext/libav/libavcodec/utils.c
++++ b/gst-libs/ext/libav/libavcodec/utils.c
+@@ -173,6 +173,10 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l
+             w_align=4;
+             h_align=4;
+         }
++        if (s->codec_id == CODEC_ID_JV){
++            w_align = 8;
++            h_align = 8;
++        }
+         break;
+     case PIX_FMT_BGR24:
+         if((s->codec_id == CODEC_ID_MSZH) || (s->codec_id == CODEC_ID_ZLIB)){
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch
new file mode 100644
index 0000000..b65e55f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch
@@ -0,0 +1,35 @@
+From 8b0e96e1f21b761ca15dbb470cd619a1ebf86c3e Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 14:45:04 +0200
+Subject: [PATCH] avcodec/mmvideo: Bounds check 2nd line of HHV Intra blocks
+
+(Upstream commit 8b0e96e1f21b761ca15dbb470cd619a1ebf86c3e)
+
+Fixes out of array access
+Fixes: asan_heap-oob_4da4f3_8_asan_heap-oob_4da4f3_419_scene1a.mm
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/mmvideo.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/mmvideo.c b/libavcodec/mmvideo.c
+index 026d463..9ff6393 100644
+--- a/gst-libs/ext/libav/libavcodec/mmvideo.c
++++ b/gst-libs/ext/libav/libavcodec/mmvideo.c
+@@ -104,7 +104,7 @@ static void mm_decode_intra(MmContext * s, int half_horiz, int half_vert, const
+ 
+         if (color) {
+             memset(s->frame.data[0] + y*s->frame.linesize[0] + x, color, run_length);
+-            if (half_vert)
++            if (half_vert && y + half_vert < s->avctx->height)
+                 memset(s->frame.data[0] + (y+1)*s->frame.linesize[0] + x, color, run_length);
+         }
+         x+= run_length;
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch
new file mode 100644
index 0000000..a124e3a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch
@@ -0,0 +1,56 @@
+From e1c0cfaa419aa5d320540d5a1b3f8fd9b82ab7e5 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 16:08:32 +0200
+Subject: [PATCH] avcodec/tiff: more completely check bpp/bppcount
+
+(Upstream commit e1c0cfaa419aa5d320540d5a1b3f8fd9b82ab7e5)
+
+Fixes pixel format selection
+Fixes out of array accesses
+Fixes: asan_heap-oob_1766029_6_asan_heap-oob_20aa045_332_cov_1823216757_m2-d1d366d7965db766c19a66c7a2ccbb6b.tif
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/tiff.c |   13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
+index 6e2096f..0870e31 100644
+--- a/gst-libs/ext/libav/libavcodec/tiff.c
++++ b/gst-libs/ext/libav/libavcodec/tiff.c
+@@ -324,11 +324,11 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
+         s->height = value;
+         break;
+     case TIFF_BPP:
+-        s->bppcount = count;
+-        if(count > 4){
+-            av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", s->bpp, count);
++        if(count > 4U){
++            av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", value, count);
+             return -1;
+         }
++        s->bppcount = count;
+         if(count == 1) s->bpp = value;
+         else{
+             switch(type){
+@@ -344,6 +344,13 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
+                 s->bpp = -1;
+             }
+         }
++        if (s->bpp > 64U) {
++            av_log(s->avctx, AV_LOG_ERROR,
++                   "This format is not supported (bpp=%d, %d components)\n",
++                   s->bpp, count);
++            s->bpp = 0;
++            return AVERROR_INVALIDDATA;
++        }
+         break;
+     case TIFF_SAMPLES_PER_PIXEL:
+         if (count != 1) {
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch
new file mode 100644
index 0000000..29d5f77
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch
@@ -0,0 +1,36 @@
+From 3e2b745020c2dbf0201fe7df3dad9e7e0b2e1bb6 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 17:35:58 +0200
+Subject: [PATCH] avcodec/pngdec: Check bits per pixel before setting
+ monoblack pixel format
+
+(Upstream commit 3e2b745020c2dbf0201fe7df3dad9e7e0b2e1bb6)
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_14dbfcf_4_asan_heap-oob_1ce5767_179_add_method_small.png
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/pngdec.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
+index da91aab..f3603b3 100644
+--- a/gst-libs/ext/libav/libavcodec/pngdec.c
++++ b/gst-libs/ext/libav/libavcodec/pngdec.c
+@@ -481,7 +481,7 @@ static int decode_frame(AVCodecContext *avctx,
+                 } else if (s->bit_depth == 16 &&
+                            s->color_type == PNG_COLOR_TYPE_RGB) {
+                     avctx->pix_fmt = PIX_FMT_RGB48BE;
+-                } else if (s->bit_depth == 1 &&
++                } else if (s->bit_depth == 1 && s->bits_per_pixel == 1 &&
+                            s->color_type == PNG_COLOR_TYPE_GRAY) {
+                     avctx->pix_fmt = PIX_FMT_MONOBLACK;
+                 } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch
new file mode 100644
index 0000000..d55d9eb
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch
@@ -0,0 +1,35 @@
+From e7e5114c506957f40aafd794e06de1a7e341e9d5 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 19:33:01 +0200
+Subject: [PATCH] avcodec/cinepak: fix integer underflow
+
+(Upstream commit e7e5114c506957f40aafd794e06de1a7e341e9d5)
+
+Fixes out of array access
+Fixes: asan_heap-oob_4da0ba_6_asan_heap-oob_4da0ba_241_cvid_crash.avi
+
+Upstream-status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/cinepak.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c
+index 4746289..f651c48 100644
+--- a/gst-libs/ext/libav/libavcodec/cinepak.c
++++ b/gst-libs/ext/libav/libavcodec/cinepak.c
+@@ -125,7 +125,7 @@ static int cinepak_decode_vectors (CinepakContext *s, cvid_strip *strip,
+     const uint8_t   *eod = (data + size);
+     uint32_t         flag, mask;
+     cvid_codebook   *codebook;
+-    unsigned int     x, y;
++    int             x, y;
+     uint32_t         iy[4];
+     uint32_t         iu[2];
+     uint32_t         iv[2];
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch
new file mode 100644
index 0000000..a8616fa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch
@@ -0,0 +1,59 @@
+From 8f1457864be8fb9653643519dea1c6492f1dde57 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 20:15:52 +0200
+Subject: [PATCH] avcodec/gifdec: factorize interleave end handling out
+
+(Upstream commit 8f1457864be8fb9653643519dea1c6492f1dde57)
+
+also change it to a loop
+Fixes out of array access
+Fixes: asan_heap-oob_ca5410_8_asan_heap-oob_ca5410_97_ID_LSD_Size_Less_Then_Data_Inter_3.gif
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/gifdec.c |   15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
+
+diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c
+index dee48f5..90de38b 100644
+--- a/gst-libs/ext/libav/libavcodec/gifdec.c
++++ b/gst-libs/ext/libav/libavcodec/gifdec.c
+@@ -271,26 +271,21 @@ static int gif_read_image(GifState *s, AVFrame *frame)
+             case 1:
+                 y1 += 8;
+                 ptr += linesize * 8;
+-                if (y1 >= height) {
+-                    y1 = pass ? 2 : 4;
+-                    ptr = ptr1 + linesize * y1;
+-                    pass++;
+-                }
+                 break;
+             case 2:
+                 y1 += 4;
+                 ptr += linesize * 4;
+-                if (y1 >= height) {
+-                    y1 = 1;
+-                    ptr = ptr1 + linesize;
+-                    pass++;
+-                }
+                 break;
+             case 3:
+                 y1 += 2;
+                 ptr += linesize * 2;
+                 break;
+             }
++            while (y1 >= height) {
++                y1 = 4 >> pass;
++                ptr = ptr1 + linesize * y1;
++                pass++;
++            }
+         } else {
+             ptr += linesize;
+         }
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch
new file mode 100644
index 0000000..0553cee
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch
@@ -0,0 +1,37 @@
+From 0d3a3b9f8907625b361420d48fe05716859620ff Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Wed, 26 Nov 2014 18:56:39 +0100
+Subject: [PATCH] avcodec/rawdec: Check the return code of
+ avpicture_get_size()
+
+(Upstream commit 1d3a3b9f8907625b361420d48fe05716859620ff)
+
+Fixes out of array access
+Fixes: asan_heap-oob_22388d0_3435_cov_3297128910_small_roll5_FlashCine1.cine
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/rawdec.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
+index 28792a1..647dfa9 100644
+--- a/gst-libs/ext/libav/libavcodec/rawdec.c
++++ b/gst-libs/ext/libav/libavcodec/rawdec.c
+@@ -87,6 +87,9 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
+ 
+     ff_set_systematic_pal2(context->palette, avctx->pix_fmt);
+     context->length = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height);
++    if (context->length < 0)
++        return context->length;
++
+     if((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
+        avctx->pix_fmt==PIX_FMT_PAL8 &&
+        (!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))){
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch
new file mode 100644
index 0000000..5dda4cc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch
@@ -0,0 +1,41 @@
+From dc68faf8339a885bc55fabe5b01f1de4f8f3782c Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 May 2015 16:30:53 +0800
+Subject: [PATCH 1/2] gst-ffmpeg: fix CVE-2014-9603
+
+Upstream-Status: Backport
+
+Upstream is version 2.x and vmdav.c is splitted into 2 files vmdaudio.c
+and vmdvideo.c. Becuase source code changes, just partly backport commit which
+is applicable to version 0.10.13 to fix CVE-2014-9603.
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=3030fb7e0d41836f8add6399e9a7c7b740b48bfd
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ gst-libs/ext/libav/libavcodec/vmdav.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/vmdav.c b/gst-libs/ext/libav/libavcodec/vmdav.c
+index d258252..ba88ad8 100644
+--- a/gst-libs/ext/libav/libavcodec/vmdav.c
++++ b/gst-libs/ext/libav/libavcodec/vmdav.c
+@@ -294,10 +294,13 @@ static void vmd_decode(VmdVideoContext *s)
+                     len = *pb++;
+                     if (len & 0x80) {
+                         len = (len & 0x7F) + 1;
+-                        if (*pb++ == 0xFF)
++                        if (*pb++ == 0xFF) {
+                             len = rle_unpack(pb, &dp[ofs], len, frame_width - ofs);
+-                        else
++                        } else {
++                            if (ofs + len > frame_width)
++                                return;
+                             memcpy(&dp[ofs], pb, len);
++                        }
+                         pb += len;
+                         ofs += len;
+                     } else {
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch
new file mode 100644
index 0000000..ade24dc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch
@@ -0,0 +1,57 @@
+Backport http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=5f654897e325349dacf2546674e0510bb72ecb50;hp=250cebeb3b348c3da71f9972eb500d6005dc01f1
+
+Fixes these errors on x86
+
+libavcodec/x86/h264_qpel_mmx.c: Assembler messages:
+libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+make[5]: *** [libavcodec/x86/dsputil_mmx.o] Error 1
+
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Backport
+Index: gst-ffmpeg-0.10.13/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c
+===================================================================
+--- gst-ffmpeg-0.10.13.orig/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c	2012-03-30 11:39:41.324522051 -0700
++++ gst-ffmpeg-0.10.13/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c	2012-03-30 11:54:08.152564075 -0700
+@@ -398,7 +398,7 @@
+             "2:                         \n\t"\
+             \
+             : "+a"(src), "+c"(dst)\
+-            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+             : "memory"\
+         );\
+         src += 4-(h+5)*srcStride;\
+@@ -446,7 +446,7 @@
+             QPEL_H264HV(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, 15*48)\
+             "2:                     \n\t"\
+             : "+a"(src)\
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)\
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)\
+             : "memory"\
+             );\
+         tmp += 4;\
+@@ -823,7 +823,7 @@
+         "2:                          \n\t"\
+         \
+         : "+a"(src), "+c"(dst)\
+-        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+         : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", \
+                        "%xmm4", "%xmm5", "%xmm6", "%xmm7",)\
+           "memory"\
+@@ -878,7 +878,7 @@
+             QPEL_H264HV_XMM(%%xmm3, %%xmm4, %%xmm5, %%xmm0, %%xmm1, %%xmm2, 15*48)
+             "2:                         \n\t"
+             : "+a"(src)
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)
+             : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                            "%xmm4", "%xmm5", "%xmm6", "%xmm7",)
+               "memory"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch
new file mode 100644
index 0000000..1860752
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch
@@ -0,0 +1,9304 @@
+Taken from gentoo patchset:
+http://dev.gentoo.org/~tetromino/distfiles/gst-plugins-ffmpeg/gst-ffmpeg-0.10.13_p2012.11-libav-9-patches.tar.xz
+
+Upstream-Status: Pending
+
+Contains following changes, rebased to apply on top of our changes
+0002-Fix-includes-for-systemwide-build.patch
+0003-libav-Switch-to-non-deprecated-symbols.patch
+0005-av-Update-for-some-constant-changes.patch
+0006-av-Remove-palette-support-for-now.patch
+0007-av-Port-remaining-simple-bits.patch
+0008-av-Use-av_codec_is_-en-de-coder-API-instead-of-priva.patch
+0009-avprotocol-Port-from-the-URL-protocol-handler-to-san.patch
+0010-avdec-don-t-wait-for-keyframe.patch
+
+Following changes were skipped:
+0001-Partially-revert-commit-0300801b.patch
+0004-av-update-to-use-AVOption-variants.patch
+0011-av_get_bits_per_sample_format-was-removed-in-libav-9.patch
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.c	2014-08-08 15:26:07.872857555 +0200
+@@ -151,9 +151,6 @@
+ #endif
+   gst_ffmpegaudioresample_register (plugin);
+ 
+-  av_register_protocol2 (&gstreamer_protocol, sizeof (URLProtocol));
+-  av_register_protocol2 (&gstpipe_protocol, sizeof (URLProtocol));
+-
+   /* Now we can return the pointer to the newly created Plugin object. */
+   return TRUE;
+ }
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.h gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.h
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.h	2011-05-17 10:53:16.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.h	2014-08-08 15:26:07.872857555 +0200
+@@ -58,10 +58,13 @@
+ int gst_ffmpeg_avcodec_close (AVCodecContext *avctx);
+ int gst_ffmpeg_av_find_stream_info(AVFormatContext *ic);
+ 
+-G_END_DECLS
++int gst_ffmpegdata_open (GstPad * pad, int flags, AVIOContext ** context);
++int gst_ffmpegdata_close (AVIOContext * h);
++typedef struct _GstFFMpegPipe GstFFMpegPipe;
++int gst_ffmpeg_pipe_open (GstFFMpegPipe *ffpipe, int flags, AVIOContext ** context);
++int gst_ffmpeg_pipe_close (AVIOContext * h);
+ 
+-extern URLProtocol gstreamer_protocol;
+-extern URLProtocol gstpipe_protocol;
++G_END_DECLS
+ 
+ /* use GST_FFMPEG URL_STREAMHEADER with URL_WRONLY if the first
+  * buffer should be used as streamheader property on the pad's caps. */
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcfg.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcfg.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcfg.c	2011-07-12 16:35:27.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcfg.c	2014-08-08 15:24:17.899853612 +0200
+@@ -147,7 +147,6 @@
+       {FF_DCT_FASTINT, "Fast Integer", "fastint"},
+       {FF_DCT_INT, "Accurate Integer", "int"},
+       {FF_DCT_MMX, "MMX", "mmx"},
+-      {FF_DCT_MLIB, "MLIB", "mlib"},
+       {FF_DCT_ALTIVEC, "ALTIVEC", "altivec"},
+       {FF_DCT_FAAN, "FAAN", "faan"},
+       {0, NULL, NULL},
+@@ -173,8 +172,6 @@
+       {FF_IDCT_SIMPLE, "Simple", "simple"},
+       {FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
+       {FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
+-      {FF_IDCT_PS2, "PS2", "ps2"},
+-      {FF_IDCT_MLIB, "MLIB", "mlib"},
+       {FF_IDCT_ARM, "ARM", "arm"},
+       {FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
+       {FF_IDCT_SH4, "SH4", "sh4"},
+@@ -263,16 +260,11 @@
+ 
+   if (!ffmpeg_flags_type) {
+     static const GFlagsValue ffmpeg_flags[] = {
+-      {CODEC_FLAG_OBMC, "Use overlapped block motion compensation (h263+)",
+-          "obmc"},
+       {CODEC_FLAG_QSCALE, "Use fixed qscale", "qscale"},
+       {CODEC_FLAG_4MV, "Allow 4 MV per MB", "4mv"},
+-      {CODEC_FLAG_H263P_AIV, "H.263 alternative inter VLC", "aiv"},
+       {CODEC_FLAG_QPEL, "Quartel Pel Motion Compensation", "qpel"},
+       {CODEC_FLAG_GMC, "GMC", "gmc"},
+       {CODEC_FLAG_MV0, "Always try a MB with MV (0,0)", "mv0"},
+-      {CODEC_FLAG_PART,
+-          "Store MV, DC and AC coefficients in seperate partitions", "part"},
+       {CODEC_FLAG_LOOP_FILTER, "Loop filter", "loop-filter"},
+       {CODEC_FLAG_GRAY, "Only decode/encode grayscale", "gray"},
+       {CODEC_FLAG_NORMALIZE_AQP,
+@@ -282,13 +274,9 @@
+           "global-headers"},
+       {CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
+           "aic"},
+-      {CODEC_FLAG_H263P_UMV, "Unlimited Motion Vector", "umv"},
+       {CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
+       {CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
+           "qp-rd"},
+-      {CODEC_FLAG_H263P_SLICE_STRUCT, "H263 slice struct", "ss"},
+-      {CODEC_FLAG_SVCD_SCAN_OFFSET,
+-          "Reserve space for SVCD scan offset user data", "scanoffset"},
+       {CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
+       {0, NULL, NULL},
+     };
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c	2014-08-08 15:31:30.968869139 +0200
+@@ -25,8 +25,10 @@
+ #include <gst/gst.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
++#include <channel_layout.h>
+ #else
+ #include <libavcodec/avcodec.h>
++#include <libavutil/channel_layout.h>
+ #endif
+ #include <string.h>
+ 
+@@ -35,43 +37,6 @@
+ 
+ #include <gst/pbutils/codec-utils.h>
+ 
+-/*
+- * Read a palette from a caps.
+- */
+-
+-static void
+-gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
+-{
+-  GstStructure *str = gst_caps_get_structure (caps, 0);
+-  const GValue *palette_v;
+-  const GstBuffer *palette;
+-
+-  /* do we have a palette? */
+-  if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) {
+-    palette = gst_value_get_buffer (palette_v);
+-    if (GST_BUFFER_SIZE (palette) >= AVPALETTE_SIZE) {
+-      if (context->palctrl)
+-        av_free (context->palctrl);
+-      context->palctrl = av_malloc (sizeof (AVPaletteControl));
+-      context->palctrl->palette_changed = 1;
+-      memcpy (context->palctrl->palette, GST_BUFFER_DATA (palette),
+-          AVPALETTE_SIZE);
+-    }
+-  }
+-}
+-
+-static void
+-gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
+-{
+-  if (context->palctrl) {
+-    GstBuffer *palette = gst_buffer_new_and_alloc (AVPALETTE_SIZE);
+-
+-    memcpy (GST_BUFFER_DATA (palette), context->palctrl->palette,
+-        AVPALETTE_SIZE);
+-    gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL);
+-  }
+-}
+-
+ /* IMPORTANT: Keep this sorted by the ffmpeg channel masks */
+ static const struct
+ {
+@@ -79,26 +44,26 @@
+   GstAudioChannelPosition gst;
+ } _ff_to_gst_layout[] = {
+   {
+-  CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+-  CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+-  CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
+-  CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
+-  CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
+-  CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+-  CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
+-  CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+-  CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
+-  CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
+-  CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
+-  CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+-  CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
++  AV_CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
++  AV_CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
++  AV_CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
++  AV_CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
++  AV_CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
++  AV_CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
++  AV_CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
++  AV_CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
++  AV_CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
++  AV_CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
++  AV_CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
+ };
+ 
+ static GstAudioChannelPosition *
+@@ -342,8 +307,8 @@
+ 
+     if (channel_layout == 0) {
+       const guint64 default_channel_set[] = {
+-        0, 0, CH_LAYOUT_SURROUND, CH_LAYOUT_QUAD, CH_LAYOUT_5POINT0,
+-        CH_LAYOUT_5POINT1, 0, CH_LAYOUT_7POINT1
++        0, 0, AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_QUAD, AV_CH_LAYOUT_5POINT0,
++        AV_CH_LAYOUT_5POINT1, 0, AV_CH_LAYOUT_7POINT1
+       };
+ 
+       switch (codec_id) {
+@@ -1267,8 +1232,6 @@
+     case CODEC_ID_FLIC:
+     case CODEC_ID_VMDVIDEO:
+     case CODEC_ID_VMDAUDIO:
+-    case CODEC_ID_SONIC:
+-    case CODEC_ID_SONIC_LS:
+     case CODEC_ID_SNOW:
+     case CODEC_ID_VIXL:
+     case CODEC_ID_QPEG:
+@@ -1689,11 +1652,6 @@
+       gst_buffer_unref (data);
+     }
+ 
+-    /* palette */
+-    if (context) {
+-      gst_ffmpeg_set_palette (caps, context);
+-    }
+-
+     GST_LOG ("caps for codec_id=%d: %" GST_PTR_FORMAT, codec_id, caps);
+ 
+   } else {
+@@ -1830,9 +1788,6 @@
+             "bpp", G_TYPE_INT, bpp,
+             "depth", G_TYPE_INT, depth,
+             "endianness", G_TYPE_INT, endianness, NULL);
+-        if (caps && context) {
+-          gst_ffmpeg_set_palette (caps, context);
+-        }
+       }
+     } else if (fmt) {
+       caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-yuv",
+@@ -1857,7 +1812,7 @@
+  */
+ 
+ static GstCaps *
+-gst_ffmpeg_smpfmt_to_caps (enum SampleFormat sample_fmt,
++gst_ffmpeg_smpfmt_to_caps (enum AVSampleFormat sample_fmt,
+     AVCodecContext * context, enum CodecID codec_id)
+ {
+   GstCaps *caps = NULL;
+@@ -1867,22 +1822,22 @@
+   gboolean signedness = FALSE;
+ 
+   switch (sample_fmt) {
+-    case SAMPLE_FMT_S16:
++    case AV_SAMPLE_FMT_S16:
+       signedness = TRUE;
+       bpp = 16;
+       break;
+ 
+-    case SAMPLE_FMT_S32:
++    case AV_SAMPLE_FMT_S32:
+       signedness = TRUE;
+       bpp = 32;
+       break;
+ 
+-    case SAMPLE_FMT_FLT:
++    case AV_SAMPLE_FMT_FLT:
+       integer = FALSE;
+       bpp = 32;
+       break;
+ 
+-    case SAMPLE_FMT_DBL:
++    case AV_SAMPLE_FMT_DBL:
+       integer = FALSE;
+       bpp = 64;
+       break;
+@@ -1941,12 +1896,12 @@
+     }
+   } else {
+     GstCaps *temp;
+-    enum SampleFormat i;
++    enum AVSampleFormat i;
+     AVCodecContext ctx = { 0, };
+ 
+     ctx.channels = -1;
+     caps = gst_caps_new_empty ();
+-    for (i = 0; i <= SAMPLE_FMT_DBL; i++) {
++    for (i = 0; i <= AV_SAMPLE_FMT_DBL; i++) {
+       temp = gst_ffmpeg_smpfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
+       if (temp != NULL) {
+         gst_caps_append (caps, temp);
+@@ -2049,9 +2004,9 @@
+         gst_structure_get_int (structure, "endianness", &endianness)) {
+       if (endianness == G_BYTE_ORDER) {
+         if (width == 32)
+-          context->sample_fmt = SAMPLE_FMT_FLT;
++          context->sample_fmt = AV_SAMPLE_FMT_FLT;
+         else if (width == 64)
+-          context->sample_fmt = SAMPLE_FMT_DBL;
++          context->sample_fmt = AV_SAMPLE_FMT_DBL;
+       }
+     }
+   } else {
+@@ -2062,9 +2017,9 @@
+         gst_structure_get_int (structure, "endianness", &endianness)) {
+       if ((endianness == G_BYTE_ORDER) && (signedness == TRUE)) {
+         if ((width == 16) && (depth == 16))
+-          context->sample_fmt = SAMPLE_FMT_S16;
++          context->sample_fmt = AV_SAMPLE_FMT_S16;
+         else if ((width == 32) && (depth == 32))
+-          context->sample_fmt = SAMPLE_FMT_S32;
++          context->sample_fmt = AV_SAMPLE_FMT_S32;
+       }
+     }
+   }
+@@ -2190,7 +2145,6 @@
+       } else {
+         if (bpp == 8) {
+           context->pix_fmt = PIX_FMT_PAL8;
+-          gst_ffmpeg_get_palette (caps, context);
+         }
+       }
+     }
+@@ -2576,7 +2530,6 @@
+   switch (codec_type) {
+     case AVMEDIA_TYPE_VIDEO:
+       gst_ffmpeg_caps_to_pixfmt (caps, context, codec_id == CODEC_ID_RAWVIDEO);
+-      gst_ffmpeg_get_palette (caps, context);
+       break;
+     case AVMEDIA_TYPE_AUDIO:
+       gst_ffmpeg_caps_to_smpfmt (caps, context, FALSE);
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.orig	2014-08-08 15:30:34.006867097 +0200
+@@ -0,0 +1,3447 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ * This file:
++ * Copyright (c) 2002-2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++#include <gst/gst.h>
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#include <channel_layout.h>>
++#else
++#include <libavcodec/avcodec.h>
++#include <libavutil/channel_layout.h>
++#endif
++#include <string.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++
++#include <gst/pbutils/codec-utils.h>
++
++/*
++ * Read a palette from a caps.
++ */
++
++static void
++gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
++{
++  GstStructure *str = gst_caps_get_structure (caps, 0);
++  const GValue *palette_v;
++  const GstBuffer *palette;
++
++  /* do we have a palette? */
++  if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) {
++    palette = gst_value_get_buffer (palette_v);
++    if (GST_BUFFER_SIZE (palette) >= AVPALETTE_SIZE) {
++      if (context->palctrl)
++        av_free (context->palctrl);
++      context->palctrl = av_malloc (sizeof (AVPaletteControl));
++      context->palctrl->palette_changed = 1;
++      memcpy (context->palctrl->palette, GST_BUFFER_DATA (palette),
++          AVPALETTE_SIZE);
++    }
++  }
++}
++
++static void
++gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
++{
++  if (context->palctrl) {
++    GstBuffer *palette = gst_buffer_new_and_alloc (AVPALETTE_SIZE);
++
++    memcpy (GST_BUFFER_DATA (palette), context->palctrl->palette,
++        AVPALETTE_SIZE);
++    gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL);
++  }
++}
++
++/* IMPORTANT: Keep this sorted by the ffmpeg channel masks */
++static const struct
++{
++  guint64 ff;
++  GstAudioChannelPosition gst;
++} _ff_to_gst_layout[] = {
++  {
++  AV_CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
++  AV_CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
++  AV_CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
++  AV_CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
++  AV_CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
++  AV_CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
++  AV_CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
++  AV_CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
++  AV_CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
++  AV_CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
++  AV_CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
++};
++
++static GstAudioChannelPosition *
++gst_ff_channel_layout_to_gst (guint64 channel_layout, guint channels)
++{
++  guint nchannels = 0, i, j;
++  GstAudioChannelPosition *pos = NULL;
++  gboolean none_layout = FALSE;
++
++  for (i = 0; i < 64; i++) {
++    if ((channel_layout & (G_GUINT64_CONSTANT (1) << i)) != 0) {
++      nchannels++;
++    }
++  }
++
++  if (channel_layout == 0) {
++    nchannels = channels;
++    none_layout = TRUE;
++  }
++
++  if (nchannels != channels) {
++    GST_ERROR ("Number of channels is different (%u != %u)", channels,
++        nchannels);
++    return NULL;
++  }
++
++  pos = g_new (GstAudioChannelPosition, nchannels);
++
++  for (i = 0, j = 0; i < G_N_ELEMENTS (_ff_to_gst_layout); i++) {
++    if ((channel_layout & _ff_to_gst_layout[i].ff) != 0) {
++      pos[j++] = _ff_to_gst_layout[i].gst;
++
++      if (_ff_to_gst_layout[i].gst == GST_AUDIO_CHANNEL_POSITION_NONE)
++        none_layout = TRUE;
++    }
++  }
++
++  if (j != nchannels) {
++    GST_WARNING ("Unknown channels in channel layout - assuming NONE layout");
++    none_layout = TRUE;
++  }
++
++  if (!none_layout && !gst_audio_check_channel_positions (pos, nchannels)) {
++    GST_ERROR ("Invalid channel layout %" G_GUINT64_FORMAT
++        " - assuming NONE layout", channel_layout);
++    none_layout = TRUE;
++  }
++
++  if (none_layout) {
++    if (nchannels == 1) {
++      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
++    } else if (nchannels == 2) {
++      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
++      pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
++    } else if (channel_layout == 0) {
++      g_free (pos);
++      pos = NULL;
++    } else {
++      for (i = 0; i < nchannels; i++)
++        pos[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
++    }
++  }
++
++  if (nchannels == 1 && pos[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER) {
++    GST_DEBUG ("mono common case; won't set channel positions");
++    g_free (pos);
++    pos = NULL;
++  } else if (nchannels == 2 && pos[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT
++      && pos[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) {
++    GST_DEBUG ("stereo common case; won't set channel positions");
++    g_free (pos);
++    pos = NULL;
++  }
++
++  return pos;
++}
++
++/* this macro makes a caps width fixed or unfixed width/height
++ * properties depending on whether we've got a context.
++ *
++ * See below for why we use this.
++ *
++ * We should actually do this stuff at the end, like in riff-media.c,
++ * but I'm too lazy today. Maybe later.
++ */
++static GstCaps *
++gst_ff_vid_caps_new (AVCodecContext * context, enum CodecID codec_id,
++    const char *mimetype, const char *fieldname, ...)
++{
++  GstStructure *structure = NULL;
++  GstCaps *caps = NULL;
++  va_list var_args;
++  gint i;
++
++  GST_LOG ("context:%p, codec_id:%d, mimetype:%s", context, codec_id, mimetype);
++
++  /* fixed, non probing context */
++  if (context != NULL && context->width != -1) {
++    gint num, denom;
++
++    caps = gst_caps_new_simple (mimetype,
++        "width", G_TYPE_INT, context->width,
++        "height", G_TYPE_INT, context->height, NULL);
++
++    num = context->time_base.den / context->ticks_per_frame;
++    denom = context->time_base.num;
++
++    if (!denom) {
++      GST_LOG ("invalid framerate: %d/0, -> %d/1", num, num);
++      denom = 1;
++    }
++    if (gst_util_fraction_compare (num, denom, 1000, 1) > 0) {
++      GST_LOG ("excessive framerate: %d/%d, -> 0/1", num, denom);
++      num = 0;
++      denom = 1;
++    }
++    GST_LOG ("setting framerate: %d/%d", num, denom);
++    gst_caps_set_simple (caps,
++        "framerate", GST_TYPE_FRACTION, num, denom, NULL);
++  } else {
++    /* so we are after restricted caps in this case */
++    switch (codec_id) {
++      case CODEC_ID_H261:
++      {
++        caps = gst_caps_new_simple (mimetype,
++            "width", G_TYPE_INT, 352,
++            "height", G_TYPE_INT, 288,
++            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++        gst_caps_append (caps, gst_caps_new_simple (mimetype,
++                "width", G_TYPE_INT, 176,
++                "height", G_TYPE_INT, 144,
++                "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL));
++        break;
++      }
++      case CODEC_ID_H263:
++      {
++        /* 128x96, 176x144, 352x288, 704x576, and 1408x1152. slightly reordered
++         * because we want automatic negotiation to go as close to 320x240 as
++         * possible. */
++        const static gint widths[] = { 352, 704, 176, 1408, 128 };
++        const static gint heights[] = { 288, 576, 144, 1152, 96 };
++        GstCaps *temp;
++        gint n_sizes = G_N_ELEMENTS (widths);
++
++        caps = gst_caps_new_empty ();
++        for (i = 0; i < n_sizes; i++) {
++          temp = gst_caps_new_simple (mimetype,
++              "width", G_TYPE_INT, widths[i],
++              "height", G_TYPE_INT, heights[i],
++              "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++
++          gst_caps_append (caps, temp);
++        }
++        break;
++      }
++      case CODEC_ID_DVVIDEO:
++      {
++        static struct
++        {
++          guint32 csp;
++          gint width, height;
++          gint par_n, par_d;
++          gint framerate_n, framerate_d;
++        } profiles[] = {
++          {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 480, 10, 11, 30000, 1001}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 480, 40, 33, 30000, 1001}, {
++          GST_MAKE_FOURCC ('I', '4', '2', '0'), 720, 576, 59, 54, 25, 1}, {
++          GST_MAKE_FOURCC ('I', '4', '2', '0'), 720, 576, 118, 81, 25, 1}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 576, 59, 54, 25, 1}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 576, 118, 81, 25, 1}
++        };
++        GstCaps *temp;
++        gint n_sizes = G_N_ELEMENTS (profiles);
++
++        caps = gst_caps_new_empty ();
++        for (i = 0; i < n_sizes; i++) {
++          temp = gst_caps_new_simple (mimetype,
++              "width", G_TYPE_INT, profiles[i].width,
++              "height", G_TYPE_INT, profiles[i].height,
++              "framerate", GST_TYPE_FRACTION, profiles[i].framerate_n,
++              profiles[i].framerate_d, "pixel-aspect-ratio", GST_TYPE_FRACTION,
++              profiles[i].par_n, profiles[i].par_d, NULL);
++
++          gst_caps_append (caps, temp);
++        }
++        break;
++      }
++      case CODEC_ID_DNXHD:
++      {
++        caps = gst_caps_new_simple (mimetype,
++            "width", G_TYPE_INT, 1920,
++            "height", G_TYPE_INT, 1080,
++            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++        gst_caps_append (caps, gst_caps_new_simple (mimetype,
++                "width", G_TYPE_INT, 1280,
++                "height", G_TYPE_INT, 720,
++                "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL));
++        break;
++      }
++      default:
++        break;
++    }
++  }
++
++  /* no fixed caps or special restrictions applied;
++   * default unfixed setting */
++  if (!caps) {
++    GST_DEBUG ("Creating default caps");
++    caps = gst_caps_new_simple (mimetype,
++        "width", GST_TYPE_INT_RANGE, 16, 4096,
++        "height", GST_TYPE_INT_RANGE, 16, 4096,
++        "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++  }
++
++  for (i = 0; i < gst_caps_get_size (caps); i++) {
++    va_start (var_args, fieldname);
++    structure = gst_caps_get_structure (caps, i);
++    gst_structure_set_valist (structure, fieldname, var_args);
++    va_end (var_args);
++  }
++
++  return caps;
++}
++
++/* same for audio - now with channels/sample rate
++ */
++static GstCaps *
++gst_ff_aud_caps_new (AVCodecContext * context, enum CodecID codec_id,
++    const char *mimetype, const char *fieldname, ...)
++{
++  GstCaps *caps = NULL;
++  GstStructure *structure = NULL;
++  gint i;
++  va_list var_args;
++
++  /* fixed, non-probing context */
++  if (context != NULL && context->channels != -1) {
++    GstAudioChannelPosition *pos;
++    guint64 channel_layout = context->channel_layout;
++
++    if (channel_layout == 0) {
++      const guint64 default_channel_set[] = {
++        0, 0, AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_QUAD, AV_CH_LAYOUT_5POINT0,
++        AV_CH_LAYOUT_5POINT1, 0, AV_CH_LAYOUT_7POINT1
++      };
++
++      switch (codec_id) {
++        case CODEC_ID_EAC3:
++        case CODEC_ID_AC3:
++        case CODEC_ID_DTS:
++          if (context->channels > 0
++              && context->channels < G_N_ELEMENTS (default_channel_set))
++            channel_layout = default_channel_set[context->channels - 1];
++          break;
++        default:
++          break;
++      }
++    }
++
++    caps = gst_caps_new_simple (mimetype,
++        "rate", G_TYPE_INT, context->sample_rate,
++        "channels", G_TYPE_INT, context->channels, NULL);
++
++    pos = gst_ff_channel_layout_to_gst (channel_layout, context->channels);
++    if (pos != NULL) {
++      gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
++      g_free (pos);
++    }
++  } else {
++    gint maxchannels = 2;
++    const gint *rates = NULL;
++    gint n_rates = 0;
++
++    /* so we must be after restricted caps in this case */
++    switch (codec_id) {
++      case CODEC_ID_AAC:
++      case CODEC_ID_AAC_LATM:
++      case CODEC_ID_DTS:
++        maxchannels = 6;
++        break;
++      case CODEC_ID_MP2:
++      {
++        const static gint l_rates[] =
++            { 48000, 44100, 32000, 24000, 22050, 16000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_EAC3:
++      case CODEC_ID_AC3:
++      {
++        const static gint l_rates[] = { 48000, 44100, 32000 };
++        maxchannels = 6;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_ADPCM_G722:
++      {
++        const static gint l_rates[] = { 16000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        maxchannels = 1;
++        break;
++      }
++      case CODEC_ID_ADPCM_G726:
++      {
++        const static gint l_rates[] = { 8000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        maxchannels = 1;
++        break;
++      }
++      case CODEC_ID_ADPCM_SWF:
++      {
++        const static gint l_rates[] = { 11025, 22050, 44100 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_ROQ_DPCM:
++      {
++        const static gint l_rates[] = { 22050 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_AMR_NB:
++      {
++        const static gint l_rates[] = { 8000 };
++        maxchannels = 1;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_AMR_WB:
++      {
++        const static gint l_rates[] = { 16000 };
++        maxchannels = 1;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      default:
++        break;
++    }
++
++    /* TODO: handle context->channel_layouts here to set
++     * the list of channel layouts supported by the encoder.
++     * Unfortunately no encoder uses this yet....
++     */
++    /* regardless of encode/decode, open up channels if applicable */
++    /* Until decoders/encoders expose the maximum number of channels
++     * they support, we whitelist them here. */
++    switch (codec_id) {
++      case CODEC_ID_WMAPRO:
++      case CODEC_ID_TRUEHD:
++        maxchannels = 8;
++        break;
++      default:
++        break;
++    }
++
++    if (maxchannels == 1)
++      caps = gst_caps_new_simple (mimetype,
++          "channels", G_TYPE_INT, maxchannels, NULL);
++    else
++      caps = gst_caps_new_simple (mimetype,
++          "channels", GST_TYPE_INT_RANGE, 1, maxchannels, NULL);
++    if (n_rates) {
++      GValue list = { 0, };
++      GstStructure *structure;
++
++      g_value_init (&list, GST_TYPE_LIST);
++      for (i = 0; i < n_rates; i++) {
++        GValue v = { 0, };
++
++        g_value_init (&v, G_TYPE_INT);
++        g_value_set_int (&v, rates[i]);
++        gst_value_list_append_value (&list, &v);
++        g_value_unset (&v);
++      }
++      structure = gst_caps_get_structure (caps, 0);
++      gst_structure_set_value (structure, "rate", &list);
++      g_value_unset (&list);
++    } else
++      gst_caps_set_simple (caps, "rate", GST_TYPE_INT_RANGE, 4000, 96000, NULL);
++  }
++
++  for (i = 0; i < gst_caps_get_size (caps); i++) {
++    va_start (var_args, fieldname);
++    structure = gst_caps_get_structure (caps, i);
++    gst_structure_set_valist (structure, fieldname, var_args);
++    va_end (var_args);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG codec ID and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * CodecID is primarily meant for compressed data GstCaps!
++ *
++ * encode is a special parameter. gstffmpegdec will say
++ * FALSE, gstffmpegenc will say TRUE. The output caps
++ * depends on this, in such a way that it will be very
++ * specific, defined, fixed and correct caps for encoders,
++ * yet very wide, "forgiving" caps for decoders. Example
++ * for mp3: decode: audio/mpeg,mpegversion=1,layer=[1-3]
++ * but encode: audio/mpeg,mpegversion=1,layer=3,bitrate=x,
++ * rate=x,channels=x.
++ */
++
++GstCaps *
++gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
++    AVCodecContext * context, gboolean encode)
++{
++  GstCaps *caps = NULL;
++  gboolean buildcaps = FALSE;
++
++  GST_LOG ("codec_id:%d, context:%p, encode:%d", codec_id, context, encode);
++
++  switch (codec_id) {
++    case CODEC_ID_MPEG1VIDEO:
++      /* FIXME: bitrate */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++          "mpegversion", G_TYPE_INT, 1,
++          "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      break;
++
++    case CODEC_ID_MPEG2VIDEO:
++      if (encode) {
++        /* FIXME: bitrate */
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++            "mpegversion", G_TYPE_INT, 2,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      } else {
++        /* decode both MPEG-1 and MPEG-2; width/height/fps are all in
++         * the MPEG video stream headers, so may be omitted from caps. */
++        caps = gst_caps_new_simple ("video/mpeg",
++            "mpegversion", GST_TYPE_INT_RANGE, 1, 2,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      }
++      break;
++
++    case CODEC_ID_MPEG2VIDEO_XVMC:
++      /* this is a special ID - don't need it in GStreamer, I think */
++      break;
++
++    case CODEC_ID_H263:
++      if (encode) {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h263",
++            "variant", G_TYPE_STRING, "itu",
++            "h263version", G_TYPE_STRING, "h263", NULL);
++      } else {
++        /* don't pass codec_id, we can decode other variants with the H263
++         * decoder that don't have specific size requirements
++         */
++        caps = gst_ff_vid_caps_new (context, CODEC_ID_NONE, "video/x-h263",
++            "variant", G_TYPE_STRING, "itu", NULL);
++      }
++      break;
++
++    case CODEC_ID_H263P:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h263",
++          "variant", G_TYPE_STRING, "itu",
++          "h263version", G_TYPE_STRING, "h263p", NULL);
++      if (encode && context) {
++
++        gst_caps_set_simple (caps,
++            "annex-f", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_4MV,
++            "annex-j", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_LOOP_FILTER,
++            "annex-i", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_AC_PRED,
++            "annex-t", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_AC_PRED,
++            NULL);
++      }
++      break;
++
++    case CODEC_ID_H263I:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-intel-h263",
++          "variant", G_TYPE_STRING, "intel", NULL);
++      break;
++
++    case CODEC_ID_H261:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h261", NULL);
++      break;
++
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV40:
++    {
++      gint version;
++
++      switch (codec_id) {
++        case CODEC_ID_RV40:
++          version = 4;
++          break;
++        case CODEC_ID_RV30:
++          version = 3;
++          break;
++        case CODEC_ID_RV20:
++          version = 2;
++          break;
++        default:
++          version = 1;
++          break;
++      }
++
++      /* FIXME: context->sub_id must be filled in during decoding */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-pn-realvideo",
++          "systemstream", G_TYPE_BOOLEAN, FALSE,
++          "rmversion", G_TYPE_INT, version, NULL);
++      if (context) {
++        gst_caps_set_simple (caps, "format", G_TYPE_INT, context->sub_id, NULL);
++        if (context->extradata_size >= 8) {
++          gst_caps_set_simple (caps,
++              "subformat", G_TYPE_INT, GST_READ_UINT32_BE (context->extradata),
++              NULL);
++        }
++      }
++    }
++      break;
++
++    case CODEC_ID_MP1:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_MP2:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_MP3:
++      if (encode) {
++        /* FIXME: bitrate */
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++            "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
++      } else {
++        /* Decodes MPEG-1 layer 1/2/3. Samplerate, channels et al are
++         * in the MPEG audio header, so may be omitted from caps. */
++        caps = gst_caps_new_simple ("audio/mpeg",
++            "mpegversion", G_TYPE_INT, 1,
++            "layer", GST_TYPE_INT_RANGE, 1, 3, NULL);
++      }
++      break;
++
++    case CODEC_ID_MUSEPACK7:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id,
++          "audio/x-ffmpeg-parsed-musepack", "streamversion", G_TYPE_INT, 7,
++          NULL);
++      break;
++
++    case CODEC_ID_MUSEPACK8:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id,
++          "audio/x-ffmpeg-parsed-musepack", "streamversion", G_TYPE_INT, 8,
++          NULL);
++      break;
++
++    case CODEC_ID_AC3:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-ac3", NULL);
++      break;
++
++    case CODEC_ID_EAC3:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-eac3", NULL);
++      break;
++
++    case CODEC_ID_TRUEHD:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-true-hd", NULL);
++      break;
++
++    case CODEC_ID_ATRAC1:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-vnd.sony.atrac1",
++          NULL);
++      break;
++
++    case CODEC_ID_ATRAC3:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-vnd.sony.atrac3",
++          NULL);
++      break;
++
++    case CODEC_ID_DTS:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dts", NULL);
++      break;
++
++    case CODEC_ID_APE:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-ffmpeg-parsed-ape",
++          NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_MLP:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mlp", NULL);
++      break;
++
++    case CODEC_ID_IMC:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-imc", NULL);
++      break;
++
++      /* MJPEG is normal JPEG, Motion-JPEG and Quicktime MJPEG-A. MJPEGB
++       * is Quicktime's MJPEG-B. LJPEG is lossless JPEG. I don't know what
++       * sp5x is, but it's apparently something JPEG... We don't separate
++       * between those in GStreamer. Should we (at least between MJPEG,
++       * MJPEG-B and sp5x decoding...)? */
++    case CODEC_ID_MJPEG:
++    case CODEC_ID_LJPEG:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/jpeg", NULL);
++      break;
++
++    case CODEC_ID_SP5X:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/sp5x", NULL);
++      break;
++
++    case CODEC_ID_MJPEGB:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mjpeg-b", NULL);
++      break;
++
++    case CODEC_ID_MPEG4:
++      if (encode && context != NULL) {
++        /* I'm not exactly sure what ffmpeg outputs... ffmpeg itself uses
++         * the AVI fourcc 'DIVX', but 'mp4v' for Quicktime... */
++        switch (context->codec_tag) {
++          case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
++            caps = gst_ff_vid_caps_new (context, codec_id, "video/x-divx",
++                "divxversion", G_TYPE_INT, 5, NULL);
++            break;
++          case GST_MAKE_FOURCC ('m', 'p', '4', 'v'):
++          default:
++            /* FIXME: bitrate */
++            caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++                "systemstream", G_TYPE_BOOLEAN, FALSE,
++                "mpegversion", G_TYPE_INT, 4, NULL);
++            break;
++        }
++      } else {
++        /* The trick here is to separate xvid, divx, mpeg4, 3ivx et al */
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++            "mpegversion", G_TYPE_INT, 4,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++        if (encode) {
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-divx", "divxversion", G_TYPE_INT, 5, NULL));
++        } else {
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-divx", "divxversion", GST_TYPE_INT_RANGE, 4, 5,
++                  NULL));
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-xvid", NULL));
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-3ivx", NULL));
++        }
++      }
++      break;
++
++    case CODEC_ID_RAWVIDEO:
++      caps =
++          gst_ffmpeg_codectype_to_caps (AVMEDIA_TYPE_VIDEO, context, codec_id,
++          encode);
++      break;
++
++    case CODEC_ID_MSMPEG4V1:
++    case CODEC_ID_MSMPEG4V2:
++    case CODEC_ID_MSMPEG4V3:
++    {
++      gint version = 41 + codec_id - CODEC_ID_MSMPEG4V1;
++
++      /* encode-FIXME: bitrate */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-msmpeg",
++          "msmpegversion", G_TYPE_INT, version, NULL);
++      if (!encode && codec_id == CODEC_ID_MSMPEG4V3) {
++        gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                "video/x-divx", "divxversion", G_TYPE_INT, 3, NULL));
++      }
++    }
++      break;
++
++    case CODEC_ID_WMV1:
++    case CODEC_ID_WMV2:
++    {
++      gint version = (codec_id == CODEC_ID_WMV1) ? 1 : 2;
++
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, version, NULL);
++    }
++      break;
++
++    case CODEC_ID_FLV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-flash-video",
++          "flvversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_SVQ1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-svq",
++          "svqversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_SVQ3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-svq",
++          "svqversion", G_TYPE_INT, 3, NULL);
++      break;
++
++    case CODEC_ID_DVAUDIO:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dv", NULL);
++      break;
++
++    case CODEC_ID_DVVIDEO:
++    {
++      if (encode && context) {
++        guint32 fourcc;
++
++        switch (context->pix_fmt) {
++          case PIX_FMT_YUYV422:
++            fourcc = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2');
++            break;
++          case PIX_FMT_YUV420P:
++            fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
++            break;
++          case PIX_FMT_YUVA420P:
++            fourcc = GST_MAKE_FOURCC ('A', '4', '2', '0');
++            break;
++          case PIX_FMT_YUV411P:
++            fourcc = GST_MAKE_FOURCC ('Y', '4', '1', 'B');
++            break;
++          case PIX_FMT_YUV422P:
++            fourcc = GST_MAKE_FOURCC ('Y', '4', '2', 'B');
++            break;
++          case PIX_FMT_YUV410P:
++            fourcc = GST_MAKE_FOURCC ('Y', 'U', 'V', '9');
++            break;
++          default:
++            GST_WARNING
++                ("Couldnt' find fourcc for pixfmt %d, defaulting to I420",
++                context->pix_fmt);
++            fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
++            break;
++        }
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dv",
++            "systemstream", G_TYPE_BOOLEAN, FALSE,
++            "format", GST_TYPE_FOURCC, fourcc, NULL);
++      } else {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dv",
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_WMAV1:
++    case CODEC_ID_WMAV2:
++    {
++      gint version = (codec_id == CODEC_ID_WMAV1) ? 1 : 2;
++
++      if (context) {
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++            "wmaversion", G_TYPE_INT, version,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      } else {
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++            "wmaversion", G_TYPE_INT, version,
++            "block_align", GST_TYPE_INT_RANGE, 0, G_MAXINT,
++            "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL);
++      }
++    }
++      break;
++    case CODEC_ID_WMAPRO:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++          "wmaversion", G_TYPE_INT, 3, NULL);
++      break;
++    }
++
++    case CODEC_ID_WMAVOICE:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wms", NULL);
++      break;
++    }
++
++    case CODEC_ID_MACE3:
++    case CODEC_ID_MACE6:
++    {
++      gint version = (codec_id == CODEC_ID_MACE3) ? 3 : 6;
++
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mace",
++          "maceversion", G_TYPE_INT, version, NULL);
++    }
++      break;
++
++    case CODEC_ID_HUFFYUV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-huffyuv", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "bpp", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_CYUV:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-compressed-yuv",
++          NULL);
++      break;
++
++    case CODEC_ID_H264:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h264", NULL);
++      break;
++
++    case CODEC_ID_INDEO5:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 5, NULL);
++      break;
++
++    case CODEC_ID_INDEO3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 3, NULL);
++      break;
++
++    case CODEC_ID_INDEO2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_FLASHSV:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-flash-screen", NULL);
++      break;
++
++    case CODEC_ID_VP3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp3", NULL);
++      break;
++
++    case CODEC_ID_VP5:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp5", NULL);
++      break;
++
++    case CODEC_ID_VP6:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6", NULL);
++      break;
++
++    case CODEC_ID_VP6F:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6-flash", NULL);
++      break;
++
++    case CODEC_ID_VP6A:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6-alpha", NULL);
++      break;
++
++    case CODEC_ID_VP8:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp8", NULL);
++      break;
++
++    case CODEC_ID_THEORA:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-theora", NULL);
++      break;
++
++    case CODEC_ID_AAC:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg", NULL);
++
++      if (!encode) {
++        GValue arr = { 0, };
++        GValue item = { 0, };
++
++        g_value_init (&arr, GST_TYPE_LIST);
++        g_value_init (&item, G_TYPE_INT);
++        g_value_set_int (&item, 2);
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_int (&item, 4);
++        gst_value_list_append_value (&arr, &item);
++        g_value_unset (&item);
++
++        gst_caps_set_value (caps, "mpegversion", &arr);
++        g_value_unset (&arr);
++
++        g_value_init (&arr, GST_TYPE_LIST);
++        g_value_init (&item, G_TYPE_STRING);
++        g_value_set_string (&item, "raw");
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_string (&item, "adts");
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_string (&item, "adif");
++        gst_value_list_append_value (&arr, &item);
++        g_value_unset (&item);
++
++        gst_caps_set_value (caps, "stream-format", &arr);
++        g_value_unset (&arr);
++      } else {
++        gst_caps_set_simple (caps, "mpegversion", G_TYPE_INT, 4,
++            "stream-format", G_TYPE_STRING, "raw",
++            "base-profile", G_TYPE_STRING, "lc", NULL);
++
++        if (context && context->extradata_size > 0)
++          gst_codec_utils_aac_caps_set_level_and_profile (caps,
++              context->extradata, context->extradata_size);
++      }
++
++      break;
++    }
++    case CODEC_ID_AAC_LATM:    /* LATM/LOAS AAC syntax */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 4, "stream-format", G_TYPE_STRING, "loas",
++          NULL);
++      break;
++
++    case CODEC_ID_ASV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-asus",
++          "asusversion", G_TYPE_INT, 1, NULL);
++      break;
++    case CODEC_ID_ASV2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-asus",
++          "asusversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_FFV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ffv",
++          "ffvversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_4XM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-4xm", NULL);
++      break;
++
++    case CODEC_ID_XAN_WC3:
++    case CODEC_ID_XAN_WC4:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-xan",
++          "wcversion", G_TYPE_INT, 3 - CODEC_ID_XAN_WC3 + codec_id, NULL);
++      break;
++
++    case CODEC_ID_CLJR:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id,
++          "video/x-cirrus-logic-accupak", NULL);
++      break;
++
++    case CODEC_ID_FRAPS:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-fraps", NULL);
++      break;
++
++    case CODEC_ID_MDEC:
++    case CODEC_ID_ROQ:
++    case CODEC_ID_INTERPLAY_VIDEO:
++      buildcaps = TRUE;
++      break;
++
++    case CODEC_ID_VCR1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ati-vcr",
++          "vcrversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_RPZA:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-apple-video", NULL);
++      break;
++
++    case CODEC_ID_CINEPAK:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-cinepak", NULL);
++      break;
++
++      /* WS_VQA belogns here (order) */
++
++    case CODEC_ID_MSRLE:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-rle",
++          "layout", G_TYPE_STRING, "microsoft", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
++      }
++      break;
++
++    case CODEC_ID_QTRLE:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-rle",
++          "layout", G_TYPE_STRING, "quicktime", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
++      }
++      break;
++
++    case CODEC_ID_MSVIDEO1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-msvideocodec",
++          "msvideoversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_WMV3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, 3, NULL);
++      break;
++    case CODEC_ID_VC1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, 3, "format", GST_TYPE_FOURCC,
++          GST_MAKE_FOURCC ('W', 'V', 'C', '1'), NULL);
++      break;
++    case CODEC_ID_QDM2:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-qdm2", NULL);
++      break;
++
++    case CODEC_ID_MSZH:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mszh", NULL);
++      break;
++
++    case CODEC_ID_ZLIB:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-zlib", NULL);
++      break;
++
++    case CODEC_ID_TRUEMOTION1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-truemotion",
++          "trueversion", G_TYPE_INT, 1, NULL);
++      break;
++    case CODEC_ID_TRUEMOTION2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-truemotion",
++          "trueversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_ULTI:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ultimotion",
++          NULL);
++      break;
++
++    case CODEC_ID_TSCC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-camtasia", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 8, 32, NULL);
++      }
++      break;
++
++    case CODEC_ID_KMVC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-kmvc", NULL);
++      break;
++
++    case CODEC_ID_NUV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-nuv", NULL);
++      break;
++
++    case CODEC_ID_GIF:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/gif", NULL);
++      break;
++
++    case CODEC_ID_PNG:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/png", NULL);
++      break;
++
++    case CODEC_ID_PPM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/ppm", NULL);
++      break;
++
++    case CODEC_ID_PBM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/pbm", NULL);
++      break;
++
++    case CODEC_ID_PAM:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-portable-anymap",
++          NULL);
++      break;
++
++    case CODEC_ID_PGM:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-portable-graymap",
++          NULL);
++      break;
++
++    case CODEC_ID_PCX:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-pcx", NULL);
++      break;
++
++    case CODEC_ID_SGI:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-sgi", NULL);
++      break;
++
++    case CODEC_ID_TARGA:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-tga", NULL);
++      break;
++
++    case CODEC_ID_TIFF:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/tiff", NULL);
++      break;
++
++    case CODEC_ID_SUNRAST:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-sun-raster", NULL);
++      break;
++
++    case CODEC_ID_SMC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-smc", NULL);
++      break;
++
++    case CODEC_ID_QDRAW:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-qdrw", NULL);
++      break;
++
++    case CODEC_ID_DNXHD:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dnxhd", NULL);
++      break;
++
++    case CODEC_ID_MIMIC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mimic", NULL);
++      break;
++
++    case CODEC_ID_VMNC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vmnc", NULL);
++      break;
++
++    case CODEC_ID_TRUESPEECH:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-truespeech", NULL);
++      break;
++
++    case CODEC_ID_QCELP:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/qcelp", NULL);
++      break;
++
++    case CODEC_ID_AMV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-amv", NULL);
++      break;
++
++    case CODEC_ID_AASC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-aasc", NULL);
++      break;
++
++    case CODEC_ID_LOCO:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-loco", NULL);
++      break;
++
++    case CODEC_ID_ZMBV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-zmbv", NULL);
++      break;
++
++    case CODEC_ID_LAGARITH:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-lagarith", NULL);
++      break;
++
++    case CODEC_ID_CSCD:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-camstudio", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 8, 32, NULL);
++      }
++      break;
++
++    case CODEC_ID_WS_VQA:
++    case CODEC_ID_IDCIN:
++    case CODEC_ID_8BPS:
++    case CODEC_ID_FLIC:
++    case CODEC_ID_VMDVIDEO:
++    case CODEC_ID_VMDAUDIO:
++    case CODEC_ID_SNOW:
++    case CODEC_ID_VIXL:
++    case CODEC_ID_QPEG:
++    case CODEC_ID_PGMYUV:
++    case CODEC_ID_FFVHUFF:
++    case CODEC_ID_WNV1:
++    case CODEC_ID_MP3ADU:
++    case CODEC_ID_MP3ON4:
++    case CODEC_ID_WESTWOOD_SND1:
++    case CODEC_ID_MMVIDEO:
++    case CODEC_ID_AVS:
++    case CODEC_ID_CAVS:
++      buildcaps = TRUE;
++      break;
++
++      /* weird quasi-codecs for the demuxers only */
++    case CODEC_ID_PCM_S16LE:
++    case CODEC_ID_PCM_S16BE:
++    case CODEC_ID_PCM_U16LE:
++    case CODEC_ID_PCM_U16BE:
++    case CODEC_ID_PCM_S8:
++    case CODEC_ID_PCM_U8:
++    {
++      gint width = 0, depth = 0, endianness = 0;
++      gboolean signedness = FALSE;      /* blabla */
++
++      switch (codec_id) {
++        case CODEC_ID_PCM_S16LE:
++          width = 16;
++          depth = 16;
++          endianness = G_LITTLE_ENDIAN;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_S16BE:
++          width = 16;
++          depth = 16;
++          endianness = G_BIG_ENDIAN;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_U16LE:
++          width = 16;
++          depth = 16;
++          endianness = G_LITTLE_ENDIAN;
++          signedness = FALSE;
++          break;
++        case CODEC_ID_PCM_U16BE:
++          width = 16;
++          depth = 16;
++          endianness = G_BIG_ENDIAN;
++          signedness = FALSE;
++          break;
++        case CODEC_ID_PCM_S8:
++          width = 8;
++          depth = 8;
++          endianness = G_BYTE_ORDER;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_U8:
++          width = 8;
++          depth = 8;
++          endianness = G_BYTE_ORDER;
++          signedness = FALSE;
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-int",
++          "width", G_TYPE_INT, width,
++          "depth", G_TYPE_INT, depth,
++          "endianness", G_TYPE_INT, endianness,
++          "signed", G_TYPE_BOOLEAN, signedness, NULL);
++    }
++      break;
++
++    case CODEC_ID_PCM_MULAW:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mulaw", NULL);
++      break;
++
++    case CODEC_ID_PCM_ALAW:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-alaw", NULL);
++      break;
++
++    case CODEC_ID_ADPCM_G722:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/G722", NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      break;
++
++    case CODEC_ID_ADPCM_G726:
++    {
++      /* the G726 decoder can also handle G721 */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-adpcm",
++          "layout", G_TYPE_STRING, "g726", NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++
++      if (!encode) {
++        gst_caps_append (caps, gst_caps_new_simple ("audio/x-adpcm",
++                "layout", G_TYPE_STRING, "g721",
++                "channels", G_TYPE_INT, 1, "rate", G_TYPE_INT, 8000, NULL));
++      }
++      break;
++    }
++    case CODEC_ID_ADPCM_IMA_QT:
++    case CODEC_ID_ADPCM_IMA_WAV:
++    case CODEC_ID_ADPCM_IMA_DK3:
++    case CODEC_ID_ADPCM_IMA_DK4:
++    case CODEC_ID_ADPCM_IMA_WS:
++    case CODEC_ID_ADPCM_IMA_SMJPEG:
++    case CODEC_ID_ADPCM_IMA_AMV:
++    case CODEC_ID_ADPCM_IMA_ISS:
++    case CODEC_ID_ADPCM_IMA_EA_EACS:
++    case CODEC_ID_ADPCM_IMA_EA_SEAD:
++    case CODEC_ID_ADPCM_MS:
++    case CODEC_ID_ADPCM_4XM:
++    case CODEC_ID_ADPCM_XA:
++    case CODEC_ID_ADPCM_ADX:
++    case CODEC_ID_ADPCM_EA:
++    case CODEC_ID_ADPCM_CT:
++    case CODEC_ID_ADPCM_SWF:
++    case CODEC_ID_ADPCM_YAMAHA:
++    case CODEC_ID_ADPCM_SBPRO_2:
++    case CODEC_ID_ADPCM_SBPRO_3:
++    case CODEC_ID_ADPCM_SBPRO_4:
++    case CODEC_ID_ADPCM_EA_R1:
++    case CODEC_ID_ADPCM_EA_R2:
++    case CODEC_ID_ADPCM_EA_R3:
++    case CODEC_ID_ADPCM_EA_MAXIS_XA:
++    case CODEC_ID_ADPCM_EA_XAS:
++    case CODEC_ID_ADPCM_THP:
++    {
++      const gchar *layout = NULL;
++
++      switch (codec_id) {
++        case CODEC_ID_ADPCM_IMA_QT:
++          layout = "quicktime";
++          break;
++        case CODEC_ID_ADPCM_IMA_WAV:
++          layout = "dvi";
++          break;
++        case CODEC_ID_ADPCM_IMA_DK3:
++          layout = "dk3";
++          break;
++        case CODEC_ID_ADPCM_IMA_DK4:
++          layout = "dk4";
++          break;
++        case CODEC_ID_ADPCM_IMA_WS:
++          layout = "westwood";
++          break;
++        case CODEC_ID_ADPCM_IMA_SMJPEG:
++          layout = "smjpeg";
++          break;
++        case CODEC_ID_ADPCM_IMA_AMV:
++          layout = "amv";
++          break;
++        case CODEC_ID_ADPCM_IMA_ISS:
++          layout = "iss";
++          break;
++        case CODEC_ID_ADPCM_IMA_EA_EACS:
++          layout = "ea-eacs";
++          break;
++        case CODEC_ID_ADPCM_IMA_EA_SEAD:
++          layout = "ea-sead";
++          break;
++        case CODEC_ID_ADPCM_MS:
++          layout = "microsoft";
++          break;
++        case CODEC_ID_ADPCM_4XM:
++          layout = "4xm";
++          break;
++        case CODEC_ID_ADPCM_XA:
++          layout = "xa";
++          break;
++        case CODEC_ID_ADPCM_ADX:
++          layout = "adx";
++          break;
++        case CODEC_ID_ADPCM_EA:
++          layout = "ea";
++          break;
++        case CODEC_ID_ADPCM_CT:
++          layout = "ct";
++          break;
++        case CODEC_ID_ADPCM_SWF:
++          layout = "swf";
++          break;
++        case CODEC_ID_ADPCM_YAMAHA:
++          layout = "yamaha";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_2:
++          layout = "sbpro2";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_3:
++          layout = "sbpro3";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_4:
++          layout = "sbpro4";
++          break;
++        case CODEC_ID_ADPCM_EA_R1:
++          layout = "ea-r1";
++          break;
++        case CODEC_ID_ADPCM_EA_R2:
++          layout = "ea-r3";
++          break;
++        case CODEC_ID_ADPCM_EA_R3:
++          layout = "ea-r3";
++          break;
++        case CODEC_ID_ADPCM_EA_MAXIS_XA:
++          layout = "ea-maxis-xa";
++          break;
++        case CODEC_ID_ADPCM_EA_XAS:
++          layout = "ea-xas";
++          break;
++        case CODEC_ID_ADPCM_THP:
++          layout = "thp";
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      /* FIXME: someone please check whether we need additional properties
++       * in this caps definition. */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-adpcm",
++          "layout", G_TYPE_STRING, layout, NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++    }
++      break;
++
++    case CODEC_ID_AMR_NB:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/AMR", NULL);
++      break;
++
++    case CODEC_ID_AMR_WB:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/AMR-WB", NULL);
++      break;
++
++    case CODEC_ID_GSM:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-gsm", NULL);
++      break;
++
++    case CODEC_ID_GSM_MS:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/ms-gsm", NULL);
++      break;
++
++    case CODEC_ID_NELLYMOSER:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-nellymoser", NULL);
++      break;
++
++    case CODEC_ID_SIPR:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-sipro", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "leaf_size", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_RA_144:
++    case CODEC_ID_RA_288:
++    case CODEC_ID_COOK:
++    {
++      gint version = 0;
++
++      switch (codec_id) {
++        case CODEC_ID_RA_144:
++          version = 1;
++          break;
++        case CODEC_ID_RA_288:
++          version = 2;
++          break;
++        case CODEC_ID_COOK:
++          version = 8;
++          break;
++        default:
++          break;
++      }
++
++      /* FIXME: properties? */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-pn-realaudio",
++          "raversion", G_TYPE_INT, version, NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "leaf_size", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_ROQ_DPCM:
++    case CODEC_ID_INTERPLAY_DPCM:
++    case CODEC_ID_XAN_DPCM:
++    case CODEC_ID_SOL_DPCM:
++    {
++      const gchar *layout = NULL;
++
++      switch (codec_id) {
++        case CODEC_ID_ROQ_DPCM:
++          layout = "roq";
++          break;
++        case CODEC_ID_INTERPLAY_DPCM:
++          layout = "interplay";
++          break;
++        case CODEC_ID_XAN_DPCM:
++          layout = "xan";
++          break;
++        case CODEC_ID_SOL_DPCM:
++          layout = "sol";
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      /* FIXME: someone please check whether we need additional properties
++       * in this caps definition. */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dpcm",
++          "layout", G_TYPE_STRING, layout, NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++    }
++      break;
++
++    case CODEC_ID_SHORTEN:
++      caps = gst_caps_new_simple ("audio/x-shorten", NULL);
++      break;
++
++    case CODEC_ID_ALAC:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-alac", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "samplesize", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_FLAC:
++      /* Note that ffmpeg has no encoder yet, but just for safety. In the
++       * encoder case, we want to add things like samplerate, channels... */
++      if (!encode) {
++        caps = gst_caps_new_simple ("audio/x-flac", NULL);
++      }
++      break;
++
++    case CODEC_ID_DVD_SUBTITLE:
++    case CODEC_ID_DVB_SUBTITLE:
++      caps = NULL;
++      break;
++    case CODEC_ID_BMP:
++      caps = gst_caps_new_simple ("image/bmp", NULL);
++      break;
++    case CODEC_ID_TTA:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-tta", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "samplesize", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++    case CODEC_ID_TWINVQ:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-twin-vq", NULL);
++      break;
++    default:
++      GST_DEBUG ("Unknown codec ID %d, please add mapping here", codec_id);
++      break;
++  }
++
++  if (buildcaps) {
++    AVCodec *codec;
++
++    if ((codec = avcodec_find_decoder (codec_id)) ||
++        (codec = avcodec_find_encoder (codec_id))) {
++      gchar *mime = NULL;
++
++      GST_LOG ("Could not create stream format caps for %s", codec->name);
++
++      switch (codec->type) {
++        case AVMEDIA_TYPE_VIDEO:
++          mime = g_strdup_printf ("video/x-gst_ff-%s", codec->name);
++          caps = gst_ff_vid_caps_new (context, codec_id, mime, NULL);
++          g_free (mime);
++          break;
++        case AVMEDIA_TYPE_AUDIO:
++          mime = g_strdup_printf ("audio/x-gst_ff-%s", codec->name);
++          caps = gst_ff_aud_caps_new (context, codec_id, mime, NULL);
++          if (context)
++            gst_caps_set_simple (caps,
++                "block_align", G_TYPE_INT, context->block_align,
++                "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++          g_free (mime);
++          break;
++        default:
++          break;
++      }
++    }
++  }
++
++  if (caps != NULL) {
++
++    /* set private data */
++    if (context && context->extradata_size > 0) {
++      GstBuffer *data = gst_buffer_new_and_alloc (context->extradata_size);
++
++      memcpy (GST_BUFFER_DATA (data), context->extradata,
++          context->extradata_size);
++      gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, data, NULL);
++      gst_buffer_unref (data);
++    }
++
++    /* palette */
++    if (context) {
++      gst_ffmpeg_set_palette (caps, context);
++    }
++
++    GST_LOG ("caps for codec_id=%d: %" GST_PTR_FORMAT, codec_id, caps);
++
++  } else {
++    GST_LOG ("No caps found for codec_id=%d", codec_id);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG Pixel Format and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * See below for usefullness
++ */
++
++GstCaps *
++gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context,
++    enum CodecID codec_id)
++{
++  GstCaps *caps = NULL;
++
++  int bpp = 0, depth = 0, endianness = 0;
++  gulong g_mask = 0, r_mask = 0, b_mask = 0, a_mask = 0;
++  guint32 fmt = 0;
++
++  switch (pix_fmt) {
++    case PIX_FMT_YUVJ420P:
++    case PIX_FMT_YUV420P:
++      fmt = GST_MAKE_FOURCC ('I', '4', '2', '0');
++      break;
++    case PIX_FMT_YUVA420P:
++      fmt = GST_MAKE_FOURCC ('A', '4', '2', '0');
++      break;
++    case PIX_FMT_YUYV422:
++      fmt = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2');
++      break;
++    case PIX_FMT_RGB24:
++      bpp = depth = 24;
++      endianness = G_BIG_ENDIAN;
++      r_mask = 0xff0000;
++      g_mask = 0x00ff00;
++      b_mask = 0x0000ff;
++      break;
++    case PIX_FMT_BGR24:
++      bpp = depth = 24;
++      endianness = G_BIG_ENDIAN;
++      r_mask = 0x0000ff;
++      g_mask = 0x00ff00;
++      b_mask = 0xff0000;
++      break;
++    case PIX_FMT_YUVJ422P:
++    case PIX_FMT_YUV422P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '2', 'B');
++      break;
++    case PIX_FMT_YUVJ444P:
++    case PIX_FMT_YUV444P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '4', '4');
++      break;
++    case PIX_FMT_RGB32:
++      bpp = 32;
++      depth = 32;
++      endianness = G_BIG_ENDIAN;
++#if (G_BYTE_ORDER == G_BIG_ENDIAN)
++      r_mask = 0x00ff0000;
++      g_mask = 0x0000ff00;
++      b_mask = 0x000000ff;
++      a_mask = 0xff000000;
++#else
++      r_mask = 0x0000ff00;
++      g_mask = 0x00ff0000;
++      b_mask = 0xff000000;
++      a_mask = 0x000000ff;
++#endif
++      break;
++    case PIX_FMT_YUV410P:
++      fmt = GST_MAKE_FOURCC ('Y', 'U', 'V', '9');
++      break;
++    case PIX_FMT_YUV411P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '1', 'B');
++      break;
++    case PIX_FMT_RGB565:
++      bpp = depth = 16;
++      endianness = G_BYTE_ORDER;
++      r_mask = 0xf800;
++      g_mask = 0x07e0;
++      b_mask = 0x001f;
++      break;
++    case PIX_FMT_RGB555:
++      bpp = 16;
++      depth = 15;
++      endianness = G_BYTE_ORDER;
++      r_mask = 0x7c00;
++      g_mask = 0x03e0;
++      b_mask = 0x001f;
++      break;
++    case PIX_FMT_PAL8:
++      bpp = depth = 8;
++      endianness = G_BYTE_ORDER;
++      break;
++    case PIX_FMT_GRAY8:
++      bpp = depth = 8;
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-gray",
++          "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, NULL);
++      break;
++    default:
++      /* give up ... */
++      break;
++  }
++
++  if (caps == NULL) {
++    if (bpp != 0) {
++      if (r_mask != 0) {
++        if (a_mask) {
++          caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++              "bpp", G_TYPE_INT, bpp,
++              "depth", G_TYPE_INT, depth,
++              "red_mask", G_TYPE_INT, r_mask,
++              "green_mask", G_TYPE_INT, g_mask,
++              "blue_mask", G_TYPE_INT, b_mask,
++              "alpha_mask", G_TYPE_INT, a_mask,
++              "endianness", G_TYPE_INT, endianness, NULL);
++        } else {
++          caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++              "bpp", G_TYPE_INT, bpp,
++              "depth", G_TYPE_INT, depth,
++              "red_mask", G_TYPE_INT, r_mask,
++              "green_mask", G_TYPE_INT, g_mask,
++              "blue_mask", G_TYPE_INT, b_mask,
++              "endianness", G_TYPE_INT, endianness, NULL);
++        }
++      } else {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++            "bpp", G_TYPE_INT, bpp,
++            "depth", G_TYPE_INT, depth,
++            "endianness", G_TYPE_INT, endianness, NULL);
++        if (caps && context) {
++          gst_ffmpeg_set_palette (caps, context);
++        }
++      }
++    } else if (fmt) {
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-yuv",
++          "format", GST_TYPE_FOURCC, fmt, NULL);
++    }
++  }
++
++  if (caps != NULL) {
++    GST_DEBUG ("caps for pix_fmt=%d: %" GST_PTR_FORMAT, pix_fmt, caps);
++  } else {
++    GST_LOG ("No caps found for pix_fmt=%d", pix_fmt);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG Sample Format and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * See below for usefullness
++ */
++
++static GstCaps *
++gst_ffmpeg_smpfmt_to_caps (enum AVSampleFormat sample_fmt,
++    AVCodecContext * context, enum CodecID codec_id)
++{
++  GstCaps *caps = NULL;
++
++  int bpp = 0;
++  gboolean integer = TRUE;
++  gboolean signedness = FALSE;
++
++  switch (sample_fmt) {
++    case AV_SAMPLE_FMT_S16:
++      signedness = TRUE;
++      bpp = 16;
++      break;
++
++    case AV_SAMPLE_FMT_S32:
++      signedness = TRUE;
++      bpp = 32;
++      break;
++
++    case AV_SAMPLE_FMT_FLT:
++      integer = FALSE;
++      bpp = 32;
++      break;
++
++    case AV_SAMPLE_FMT_DBL:
++      integer = FALSE;
++      bpp = 64;
++      break;
++    default:
++      /* .. */
++      break;
++  }
++
++  if (bpp) {
++    if (integer) {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-int",
++          "signed", G_TYPE_BOOLEAN, signedness,
++          "endianness", G_TYPE_INT, G_BYTE_ORDER,
++          "width", G_TYPE_INT, bpp, "depth", G_TYPE_INT, bpp, NULL);
++    } else {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-float",
++          "endianness", G_TYPE_INT, G_BYTE_ORDER,
++          "width", G_TYPE_INT, bpp, NULL);
++    }
++  }
++
++  if (caps != NULL) {
++    GST_LOG ("caps for sample_fmt=%d: %" GST_PTR_FORMAT, sample_fmt, caps);
++  } else {
++    GST_LOG ("No caps found for sample_fmt=%d", sample_fmt);
++  }
++
++  return caps;
++}
++
++GstCaps *
++gst_ffmpeg_codectype_to_audio_caps (AVCodecContext * context,
++    enum CodecID codec_id, gboolean encode, AVCodec * codec)
++{
++  GstCaps *caps = NULL;
++
++  GST_DEBUG ("context:%p, codec_id:%d, encode:%d, codec:%p",
++      context, codec_id, encode, codec);
++  if (codec)
++    GST_DEBUG ("sample_fmts:%p, samplerates:%p",
++        codec->sample_fmts, codec->supported_samplerates);
++
++  if (context) {
++    /* Specific codec context */
++    caps = gst_ffmpeg_smpfmt_to_caps (context->sample_fmt, context, codec_id);
++  } else if (codec && codec->sample_fmts) {
++    GstCaps *temp;
++    int i;
++
++    caps = gst_caps_new_empty ();
++    for (i = 0; codec->sample_fmts[i] != -1; i++) {
++      temp =
++          gst_ffmpeg_smpfmt_to_caps (codec->sample_fmts[i], context, codec_id);
++      if (temp != NULL)
++        gst_caps_append (caps, temp);
++    }
++  } else {
++    GstCaps *temp;
++    enum AVSampleFormat i;
++    AVCodecContext ctx = { 0, };
++
++    ctx.channels = -1;
++    caps = gst_caps_new_empty ();
++    for (i = 0; i <= AV_SAMPLE_FMT_DBL; i++) {
++      temp = gst_ffmpeg_smpfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
++      if (temp != NULL) {
++        gst_caps_append (caps, temp);
++      }
++    }
++  }
++  return caps;
++}
++
++GstCaps *
++gst_ffmpeg_codectype_to_video_caps (AVCodecContext * context,
++    enum CodecID codec_id, gboolean encode, AVCodec * codec)
++{
++  GstCaps *caps;
++
++  GST_LOG ("context:%p, codec_id:%d, encode:%d, codec:%p",
++      context, codec_id, encode, codec);
++
++  if (context) {
++    caps = gst_ffmpeg_pixfmt_to_caps (context->pix_fmt, context, codec_id);
++  } else {
++    GstCaps *temp;
++    enum PixelFormat i;
++    AVCodecContext ctx = { 0, };
++
++    caps = gst_caps_new_empty ();
++    for (i = 0; i < PIX_FMT_NB; i++) {
++      ctx.width = -1;
++      ctx.pix_fmt = i;
++      temp = gst_ffmpeg_pixfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
++      if (temp != NULL) {
++        gst_caps_append (caps, temp);
++      }
++    }
++  }
++  return caps;
++}
++
++/* Convert a FFMPEG codec Type and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * AVMediaType is primarily meant for uncompressed data GstCaps!
++ */
++
++GstCaps *
++gst_ffmpeg_codectype_to_caps (enum AVMediaType codec_type,
++    AVCodecContext * context, enum CodecID codec_id, gboolean encode)
++{
++  GstCaps *caps;
++
++  switch (codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      caps =
++          gst_ffmpeg_codectype_to_video_caps (context, codec_id, encode, NULL);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      caps =
++          gst_ffmpeg_codectype_to_audio_caps (context, codec_id, encode, NULL);
++      break;
++    default:
++      caps = NULL;
++      break;
++  }
++
++  return caps;
++}
++
++/* Convert a GstCaps (audio/raw) to a FFMPEG SampleFmt
++ * and other audio properties in a AVCodecContext.
++ *
++ * For usefullness, see below
++ */
++
++static void
++gst_ffmpeg_caps_to_smpfmt (const GstCaps * caps,
++    AVCodecContext * context, gboolean raw)
++{
++  GstStructure *structure;
++  gint depth = 0, width = 0, endianness = 0;
++  gboolean signedness = FALSE;
++  const gchar *name;
++
++  g_return_if_fail (gst_caps_get_size (caps) == 1);
++  structure = gst_caps_get_structure (caps, 0);
++
++  gst_structure_get_int (structure, "channels", &context->channels);
++  gst_structure_get_int (structure, "rate", &context->sample_rate);
++  gst_structure_get_int (structure, "block_align", &context->block_align);
++  gst_structure_get_int (structure, "bitrate", &context->bit_rate);
++
++  if (!raw)
++    return;
++
++  name = gst_structure_get_name (structure);
++
++  if (!strcmp (name, "audio/x-raw-float")) {
++    /* FLOAT */
++    if (gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if (endianness == G_BYTE_ORDER) {
++        if (width == 32)
++          context->sample_fmt = AV_SAMPLE_FMT_FLT;
++        else if (width == 64)
++          context->sample_fmt = AV_SAMPLE_FMT_DBL;
++      }
++    }
++  } else {
++    /* INT */
++    if (gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "depth", &depth) &&
++        gst_structure_get_boolean (structure, "signed", &signedness) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if ((endianness == G_BYTE_ORDER) && (signedness == TRUE)) {
++        if ((width == 16) && (depth == 16))
++          context->sample_fmt = AV_SAMPLE_FMT_S16;
++        else if ((width == 32) && (depth == 32))
++          context->sample_fmt = AV_SAMPLE_FMT_S32;
++      }
++    }
++  }
++}
++
++
++/* Convert a GstCaps (video/raw) to a FFMPEG PixFmt
++ * and other video properties in a AVCodecContext.
++ *
++ * For usefullness, see below
++ */
++
++static void
++gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps,
++    AVCodecContext * context, gboolean raw)
++{
++  GstStructure *structure;
++  const GValue *fps;
++  const GValue *par = NULL;
++
++  GST_DEBUG ("converting caps %" GST_PTR_FORMAT, caps);
++  g_return_if_fail (gst_caps_get_size (caps) == 1);
++  structure = gst_caps_get_structure (caps, 0);
++
++  gst_structure_get_int (structure, "width", &context->width);
++  gst_structure_get_int (structure, "height", &context->height);
++  gst_structure_get_int (structure, "bpp", &context->bits_per_coded_sample);
++
++  fps = gst_structure_get_value (structure, "framerate");
++  if (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps)) {
++
++    /* somehow these seem mixed up.. */
++    context->time_base.den = gst_value_get_fraction_numerator (fps);
++    context->time_base.num = gst_value_get_fraction_denominator (fps);
++    context->ticks_per_frame = 1;
++
++    GST_DEBUG ("setting framerate %d/%d = %lf",
++        context->time_base.den, context->time_base.num,
++        1. * context->time_base.den / context->time_base.num);
++  }
++
++  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
++  if (par && GST_VALUE_HOLDS_FRACTION (par)) {
++
++    context->sample_aspect_ratio.num = gst_value_get_fraction_numerator (par);
++    context->sample_aspect_ratio.den = gst_value_get_fraction_denominator (par);
++
++    GST_DEBUG ("setting pixel-aspect-ratio %d/%d = %lf",
++        context->sample_aspect_ratio.den, context->sample_aspect_ratio.num,
++        1. * context->sample_aspect_ratio.den /
++        context->sample_aspect_ratio.num);
++  }
++
++  if (!raw)
++    return;
++
++  g_return_if_fail (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps));
++
++  if (strcmp (gst_structure_get_name (structure), "video/x-raw-yuv") == 0) {
++    guint32 fourcc;
++
++    if (gst_structure_get_fourcc (structure, "format", &fourcc)) {
++      switch (fourcc) {
++        case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
++          context->pix_fmt = PIX_FMT_YUYV422;
++          break;
++        case GST_MAKE_FOURCC ('I', '4', '2', '0'):
++          context->pix_fmt = PIX_FMT_YUV420P;
++          break;
++        case GST_MAKE_FOURCC ('A', '4', '2', '0'):
++          context->pix_fmt = PIX_FMT_YUVA420P;
++          break;
++        case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
++          context->pix_fmt = PIX_FMT_YUV411P;
++          break;
++        case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
++          context->pix_fmt = PIX_FMT_YUV422P;
++          break;
++        case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
++          context->pix_fmt = PIX_FMT_YUV410P;
++          break;
++#if 0
++        case FIXME:
++          context->pix_fmt = PIX_FMT_YUV444P;
++          break;
++#endif
++      }
++    }
++  } else if (strcmp (gst_structure_get_name (structure),
++          "video/x-raw-rgb") == 0) {
++    gint bpp = 0, rmask = 0, endianness = 0;
++
++    if (gst_structure_get_int (structure, "bpp", &bpp) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if (gst_structure_get_int (structure, "red_mask", &rmask)) {
++        switch (bpp) {
++          case 32:
++#if (G_BYTE_ORDER == G_BIG_ENDIAN)
++            if (rmask == 0x00ff0000)
++#else
++            if (rmask == 0x0000ff00)
++#endif
++              context->pix_fmt = PIX_FMT_RGB32;
++            break;
++          case 24:
++            if (rmask == 0x0000FF)
++              context->pix_fmt = PIX_FMT_BGR24;
++            else
++              context->pix_fmt = PIX_FMT_RGB24;
++            break;
++          case 16:
++            if (endianness == G_BYTE_ORDER)
++              context->pix_fmt = PIX_FMT_RGB565;
++            break;
++          case 15:
++            if (endianness == G_BYTE_ORDER)
++              context->pix_fmt = PIX_FMT_RGB555;
++            break;
++          default:
++            /* nothing */
++            break;
++        }
++      } else {
++        if (bpp == 8) {
++          context->pix_fmt = PIX_FMT_PAL8;
++          gst_ffmpeg_get_palette (caps, context);
++        }
++      }
++    }
++  } else if (strcmp (gst_structure_get_name (structure),
++          "video/x-raw-gray") == 0) {
++    gint bpp = 0;
++
++    if (gst_structure_get_int (structure, "bpp", &bpp)) {
++      switch (bpp) {
++        case 8:
++          context->pix_fmt = PIX_FMT_GRAY8;
++          break;
++      }
++    }
++  }
++}
++
++/* Convert a GstCaps and a FFMPEG codec Type to a
++ * AVCodecContext. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the context
++ *
++ * AVMediaType is primarily meant for uncompressed data GstCaps!
++ */
++
++void
++gst_ffmpeg_caps_with_codectype (enum AVMediaType type,
++    const GstCaps * caps, AVCodecContext * context)
++{
++  if (context == NULL)
++    return;
++
++  switch (type) {
++    case AVMEDIA_TYPE_VIDEO:
++      gst_ffmpeg_caps_to_pixfmt (caps, context, TRUE);
++      break;
++
++    case AVMEDIA_TYPE_AUDIO:
++      gst_ffmpeg_caps_to_smpfmt (caps, context, TRUE);
++      break;
++
++    default:
++      /* unknown */
++      break;
++  }
++}
++
++#if 0
++static void
++nal_escape (guint8 * dst, guint8 * src, guint size, guint * destsize)
++{
++  guint8 *dstp = dst;
++  guint8 *srcp = src;
++  guint8 *end = src + size;
++  gint count = 0;
++
++  while (srcp < end) {
++    if (count == 2 && *srcp <= 0x03) {
++      GST_DEBUG ("added escape code");
++      *dstp++ = 0x03;
++      count = 0;
++    }
++    if (*srcp == 0)
++      count++;
++    else
++      count = 0;
++
++    GST_DEBUG ("copy %02x, count %d", *srcp, count);
++    *dstp++ = *srcp++;
++  }
++  *destsize = dstp - dst;
++}
++
++/* copy the config, escaping NAL units as we iterate them, if something fails we
++ * copy everything and hope for the best. */
++static void
++copy_config (guint8 * dst, guint8 * src, guint size, guint * destsize)
++{
++  guint8 *dstp = dst;
++  guint8 *srcp = src;
++  gint cnt, i;
++  guint nalsize, esize;
++
++  /* check size */
++  if (size < 7)
++    goto full_copy;
++
++  /* check version */
++  if (*srcp != 1)
++    goto full_copy;
++
++  cnt = *(srcp + 5) & 0x1f;     /* Number of sps */
++
++  GST_DEBUG ("num SPS %d", cnt);
++
++  memcpy (dstp, srcp, 6);
++  srcp += 6;
++  dstp += 6;
++
++  for (i = 0; i < cnt; i++) {
++    GST_DEBUG ("copy SPS %d", i);
++    nalsize = (srcp[0] << 8) | srcp[1];
++    nal_escape (dstp + 2, srcp + 2, nalsize, &esize);
++    dstp[0] = esize >> 8;
++    dstp[1] = esize & 0xff;
++    dstp += esize + 2;
++    srcp += nalsize + 2;
++  }
++
++  cnt = *(dstp++) = *(srcp++);  /* Number of pps */
++
++  GST_DEBUG ("num PPS %d", cnt);
++
++  for (i = 0; i < cnt; i++) {
++    GST_DEBUG ("copy PPS %d", i);
++    nalsize = (srcp[0] << 8) | srcp[1];
++    nal_escape (dstp + 2, srcp + 2, nalsize, &esize);
++    dstp[0] = esize >> 8;
++    dstp[1] = esize & 0xff;
++    dstp += esize + 2;
++    srcp += nalsize + 2;
++  }
++  *destsize = dstp - dst;
++
++  return;
++
++full_copy:
++  {
++    GST_DEBUG ("something unexpected, doing full copy");
++    memcpy (dst, src, size);
++    *destsize = size;
++    return;
++  }
++}
++#endif
++
++/*
++ * caps_with_codecid () transforms a GstCaps for a known codec
++ * ID into a filled-in context.
++ * codec_data from caps will override possible extradata already in the context
++ */
++
++void
++gst_ffmpeg_caps_with_codecid (enum CodecID codec_id,
++    enum AVMediaType codec_type, const GstCaps * caps, AVCodecContext * context)
++{
++  GstStructure *str;
++  const GValue *value;
++  const GstBuffer *buf;
++
++  GST_LOG ("codec_id:%d, codec_type:%d, caps:%" GST_PTR_FORMAT " context:%p",
++      codec_id, codec_type, caps, context);
++
++  if (!context || !gst_caps_get_size (caps))
++    return;
++
++  str = gst_caps_get_structure (caps, 0);
++
++  /* extradata parsing (esds [mpeg4], wma/wmv, msmpeg4v1/2/3, etc.) */
++  if ((value = gst_structure_get_value (str, "codec_data"))) {
++    guint size;
++    guint8 *data;
++
++    buf = GST_BUFFER_CAST (gst_value_get_mini_object (value));
++    size = GST_BUFFER_SIZE (buf);
++    data = GST_BUFFER_DATA (buf);
++
++    /* free the old one if it is there */
++    if (context->extradata)
++      av_free (context->extradata);
++
++#if 0
++    if (codec_id == CODEC_ID_H264) {
++      guint extrasize;
++
++      GST_DEBUG ("copy, escaping codec_data %d", size);
++      /* ffmpeg h264 expects the codec_data to be escaped, there is no real
++       * reason for this but let's just escape it for now. Start by allocating
++       * enough space, x2 is more than enough.
++       *
++       * FIXME, we disabled escaping because some file already contain escaped
++       * codec_data and then we escape twice and fail. It's better to leave it
++       * as is, as that is what most players do. */
++      context->extradata =
++          av_mallocz (GST_ROUND_UP_16 (size * 2 +
++              FF_INPUT_BUFFER_PADDING_SIZE));
++      copy_config (context->extradata, data, size, &extrasize);
++      GST_DEBUG ("escaped size: %d", extrasize);
++      context->extradata_size = extrasize;
++    } else
++#endif
++    {
++      /* allocate with enough padding */
++      GST_DEBUG ("copy codec_data");
++      context->extradata =
++          av_mallocz (GST_ROUND_UP_16 (size + FF_INPUT_BUFFER_PADDING_SIZE));
++      memcpy (context->extradata, data, size);
++      context->extradata_size = size;
++    }
++
++    /* Hack for VC1. Sometimes the first (length) byte is 0 for some files */
++    if (codec_id == CODEC_ID_VC1 && size > 0 && data[0] == 0) {
++      context->extradata[0] = (guint8) size;
++    }
++
++    GST_DEBUG ("have codec data of size %d", size);
++  } else if (context->extradata == NULL && codec_id != CODEC_ID_AAC_LATM &&
++      codec_id != CODEC_ID_FLAC) {
++    /* no extradata, alloc dummy with 0 sized, some codecs insist on reading
++     * extradata anyway which makes then segfault. */
++    context->extradata =
++        av_mallocz (GST_ROUND_UP_16 (FF_INPUT_BUFFER_PADDING_SIZE));
++    context->extradata_size = 0;
++    GST_DEBUG ("no codec data");
++  }
++
++  switch (codec_id) {
++    case CODEC_ID_MPEG4:
++    {
++      const gchar *mime = gst_structure_get_name (str);
++
++      if (!strcmp (mime, "video/x-divx"))
++        context->codec_tag = GST_MAKE_FOURCC ('D', 'I', 'V', 'X');
++      else if (!strcmp (mime, "video/x-xvid"))
++        context->codec_tag = GST_MAKE_FOURCC ('X', 'V', 'I', 'D');
++      else if (!strcmp (mime, "video/x-3ivx"))
++        context->codec_tag = GST_MAKE_FOURCC ('3', 'I', 'V', '1');
++      else if (!strcmp (mime, "video/mpeg"))
++        context->codec_tag = GST_MAKE_FOURCC ('m', 'p', '4', 'v');
++    }
++      break;
++
++    case CODEC_ID_SVQ3:
++      /* FIXME: this is a workaround for older gst-plugins releases
++       * (<= 0.8.9). This should be removed at some point, because
++       * it causes wrong decoded frame order. */
++      if (!context->extradata) {
++        gint halfpel_flag, thirdpel_flag, low_delay, unknown_svq3_flag;
++        guint16 flags;
++
++        if (gst_structure_get_int (str, "halfpel_flag", &halfpel_flag) ||
++            gst_structure_get_int (str, "thirdpel_flag", &thirdpel_flag) ||
++            gst_structure_get_int (str, "low_delay", &low_delay) ||
++            gst_structure_get_int (str, "unknown_svq3_flag",
++                &unknown_svq3_flag)) {
++          context->extradata = (guint8 *) av_mallocz (0x64);
++          g_stpcpy ((gchar *) context->extradata, "SVQ3");
++          flags = 1 << 3;
++          flags |= low_delay;
++          flags = flags << 2;
++          flags |= unknown_svq3_flag;
++          flags = flags << 6;
++          flags |= halfpel_flag;
++          flags = flags << 1;
++          flags |= thirdpel_flag;
++          flags = flags << 3;
++
++          flags = GUINT16_FROM_LE (flags);
++
++          memcpy ((gchar *) context->extradata + 0x62, &flags, 2);
++          context->extradata_size = 0x64;
++        }
++      }
++      break;
++
++    case CODEC_ID_MSRLE:
++    case CODEC_ID_QTRLE:
++    case CODEC_ID_TSCC:
++    case CODEC_ID_CSCD:
++    case CODEC_ID_APE:
++    {
++      gint depth;
++
++      if (gst_structure_get_int (str, "depth", &depth)) {
++        context->bits_per_coded_sample = depth;
++      } else {
++        GST_WARNING ("No depth field in caps %" GST_PTR_FORMAT, caps);
++      }
++
++    }
++      break;
++
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV40:
++    {
++      gint format;
++
++      if (gst_structure_get_int (str, "format", &format))
++        context->sub_id = format;
++
++      break;
++    }
++    case CODEC_ID_COOK:
++    case CODEC_ID_RA_288:
++    case CODEC_ID_RA_144:
++    case CODEC_ID_SIPR:
++    {
++      gint leaf_size;
++      gint bitrate;
++
++      if (gst_structure_get_int (str, "leaf_size", &leaf_size))
++        context->block_align = leaf_size;
++      if (gst_structure_get_int (str, "bitrate", &bitrate))
++        context->bit_rate = bitrate;
++    }
++    case CODEC_ID_ALAC:
++      gst_structure_get_int (str, "samplesize",
++          &context->bits_per_coded_sample);
++      break;
++
++    case CODEC_ID_DVVIDEO:
++    {
++      guint32 fourcc;
++
++      if (gst_structure_get_fourcc (str, "format", &fourcc))
++        switch (fourcc) {
++          case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
++            context->pix_fmt = PIX_FMT_YUYV422;
++            break;
++          case GST_MAKE_FOURCC ('I', '4', '2', '0'):
++            context->pix_fmt = PIX_FMT_YUV420P;
++            break;
++          case GST_MAKE_FOURCC ('A', '4', '2', '0'):
++            context->pix_fmt = PIX_FMT_YUVA420P;
++            break;
++          case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
++            context->pix_fmt = PIX_FMT_YUV411P;
++            break;
++          case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
++            context->pix_fmt = PIX_FMT_YUV422P;
++            break;
++          case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
++            context->pix_fmt = PIX_FMT_YUV410P;
++            break;
++          default:
++            GST_WARNING ("couldn't convert fourcc %" GST_FOURCC_FORMAT
++                " to a pixel format", GST_FOURCC_ARGS (fourcc));
++            break;
++        }
++      break;
++    }
++    case CODEC_ID_H263P:
++    {
++      gboolean val;
++
++      if (!gst_structure_get_boolean (str, "annex-f", &val) || val)
++        context->flags |= CODEC_FLAG_4MV;
++      else
++        context->flags &= ~CODEC_FLAG_4MV;
++      if ((!gst_structure_get_boolean (str, "annex-i", &val) || val) &&
++          (!gst_structure_get_boolean (str, "annex-t", &val) || val))
++        context->flags |= CODEC_FLAG_AC_PRED;
++      else
++        context->flags &= ~CODEC_FLAG_AC_PRED;
++      if (!gst_structure_get_boolean (str, "annex-j", &val) || val)
++        context->flags |= CODEC_FLAG_LOOP_FILTER;
++      else
++        context->flags &= ~CODEC_FLAG_LOOP_FILTER;
++      break;
++    }
++    case CODEC_ID_ADPCM_G726:
++    {
++      const gchar *layout;
++
++      if ((layout = gst_structure_get_string (str, "layout"))) {
++        if (!strcmp (layout, "g721")) {
++          context->sample_rate = 8000;
++          context->channels = 1;
++          context->bit_rate = 32000;
++        }
++      }
++      break;
++    }
++    default:
++      break;
++  }
++
++  if (!gst_caps_is_fixed (caps))
++    return;
++
++  /* common properties (width, height, fps) */
++  switch (codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      gst_ffmpeg_caps_to_pixfmt (caps, context, codec_id == CODEC_ID_RAWVIDEO);
++      gst_ffmpeg_get_palette (caps, context);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      gst_ffmpeg_caps_to_smpfmt (caps, context, FALSE);
++      break;
++    default:
++      break;
++  }
++
++  /* fixup of default settings */
++  switch (codec_id) {
++    case CODEC_ID_QCELP:
++      /* QCELP is always mono, no matter what the caps say */
++      context->channels = 1;
++      break;
++    default:
++      break;
++  }
++}
++
++/* _formatid_to_caps () is meant for muxers/demuxers, it
++ * transforms a name (ffmpeg way of ID'ing these, why don't
++ * they have unique numerical IDs?) to the corresponding
++ * caps belonging to that mux-format
++ *
++ * Note: we don't need any additional info because the caps
++ * isn't supposed to contain any useful info besides the
++ * media type anyway
++ */
++
++GstCaps *
++gst_ffmpeg_formatid_to_caps (const gchar * format_name)
++{
++  GstCaps *caps = NULL;
++
++  if (!strcmp (format_name, "mpeg")) {
++    caps = gst_caps_new_simple ("video/mpeg",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "mpegts")) {
++    caps = gst_caps_new_simple ("video/mpegts",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "rm")) {
++    caps = gst_caps_new_simple ("application/x-pn-realmedia",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "asf")) {
++    caps = gst_caps_new_simple ("video/x-ms-asf", NULL);
++  } else if (!strcmp (format_name, "avi")) {
++    caps = gst_caps_new_simple ("video/x-msvideo", NULL);
++  } else if (!strcmp (format_name, "wav")) {
++    caps = gst_caps_new_simple ("audio/x-wav", NULL);
++  } else if (!strcmp (format_name, "ape")) {
++    caps = gst_caps_new_simple ("application/x-ape", NULL);
++  } else if (!strcmp (format_name, "swf")) {
++    caps = gst_caps_new_simple ("application/x-shockwave-flash", NULL);
++  } else if (!strcmp (format_name, "au")) {
++    caps = gst_caps_new_simple ("audio/x-au", NULL);
++  } else if (!strcmp (format_name, "dv")) {
++    caps = gst_caps_new_simple ("video/x-dv",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "4xm")) {
++    caps = gst_caps_new_simple ("video/x-4xm", NULL);
++  } else if (!strcmp (format_name, "matroska")) {
++    caps = gst_caps_new_simple ("video/x-matroska", NULL);
++  } else if (!strcmp (format_name, "mp3")) {
++    caps = gst_caps_new_simple ("application/x-id3", NULL);
++  } else if (!strcmp (format_name, "flic")) {
++    caps = gst_caps_new_simple ("video/x-fli", NULL);
++  } else if (!strcmp (format_name, "flv")) {
++    caps = gst_caps_new_simple ("video/x-flv", NULL);
++  } else if (!strcmp (format_name, "tta")) {
++    caps = gst_caps_new_simple ("audio/x-ttafile", NULL);
++  } else if (!strcmp (format_name, "aiff")) {
++    caps = gst_caps_new_simple ("audio/x-aiff", NULL);
++  } else if (!strcmp (format_name, "mov_mp4_m4a_3gp_3g2")) {
++    caps =
++        gst_caps_from_string
++        ("application/x-3gp; video/quicktime; audio/x-m4a");
++  } else if (!strcmp (format_name, "mov")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)apple");
++  } else if (!strcmp (format_name, "mp4")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)iso");
++  } else if (!strcmp (format_name, "3gp")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)3gpp");
++  } else if (!strcmp (format_name, "3g2")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)3g2");
++  } else if (!strcmp (format_name, "psp")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)psp");
++  } else if (!strcmp (format_name, "ipod")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)ipod");
++  } else if (!strcmp (format_name, "aac")) {
++    caps = gst_caps_new_simple ("audio/mpeg",
++        "mpegversion", G_TYPE_INT, 4, NULL);
++  } else if (!strcmp (format_name, "gif")) {
++    caps = gst_caps_from_string ("image/gif");
++  } else if (!strcmp (format_name, "ogg")) {
++    caps = gst_caps_from_string ("application/ogg");
++  } else if (!strcmp (format_name, "mxf") || !strcmp (format_name, "mxf_d10")) {
++    caps = gst_caps_from_string ("application/mxf");
++  } else if (!strcmp (format_name, "gxf")) {
++    caps = gst_caps_from_string ("application/gxf");
++  } else if (!strcmp (format_name, "yuv4mpegpipe")) {
++    caps = gst_caps_new_simple ("application/x-yuv4mpeg",
++        "y4mversion", G_TYPE_INT, 2, NULL);
++  } else if (!strcmp (format_name, "mpc")) {
++    caps = gst_caps_from_string ("audio/x-musepack, streamversion = (int) 7");
++  } else if (!strcmp (format_name, "vqf")) {
++    caps = gst_caps_from_string ("audio/x-vqf");
++  } else if (!strcmp (format_name, "nsv")) {
++    caps = gst_caps_from_string ("video/x-nsv");
++  } else if (!strcmp (format_name, "amr")) {
++    caps = gst_caps_from_string ("audio/x-amr-nb-sh");
++  } else if (!strcmp (format_name, "webm")) {
++    caps = gst_caps_from_string ("video/webm");
++  } else {
++    gchar *name;
++
++    GST_LOG ("Could not create stream format caps for %s", format_name);
++    name = g_strdup_printf ("application/x-gst_ff-%s", format_name);
++    caps = gst_caps_new_simple (name, NULL);
++    g_free (name);
++  }
++
++  return caps;
++}
++
++gboolean
++gst_ffmpeg_formatid_get_codecids (const gchar * format_name,
++    enum CodecID ** video_codec_list, enum CodecID ** audio_codec_list,
++    AVOutputFormat * plugin)
++{
++  static enum CodecID tmp_vlist[] = {
++    CODEC_ID_NONE,
++    CODEC_ID_NONE
++  };
++  static enum CodecID tmp_alist[] = {
++    CODEC_ID_NONE,
++    CODEC_ID_NONE
++  };
++
++  GST_LOG ("format_name : %s", format_name);
++
++  if (!strcmp (format_name, "mp4")) {
++    static enum CodecID mp4_video_list[] = {
++      CODEC_ID_MPEG4, CODEC_ID_H264,
++      CODEC_ID_MJPEG,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mp4_audio_list[] = {
++      CODEC_ID_AAC, CODEC_ID_MP3,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mp4_video_list;
++    *audio_codec_list = mp4_audio_list;
++  } else if (!strcmp (format_name, "mpeg")) {
++    static enum CodecID mpeg_video_list[] = { CODEC_ID_MPEG1VIDEO,
++      CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpeg_audio_list[] = { CODEC_ID_MP1,
++      CODEC_ID_MP2,
++      CODEC_ID_MP3,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpeg_video_list;
++    *audio_codec_list = mpeg_audio_list;
++  } else if (!strcmp (format_name, "dvd")) {
++    static enum CodecID mpeg_video_list[] = { CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpeg_audio_list[] = { CODEC_ID_MP2,
++      CODEC_ID_AC3,
++      CODEC_ID_DTS,
++      CODEC_ID_PCM_S16BE,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpeg_video_list;
++    *audio_codec_list = mpeg_audio_list;
++  } else if (!strcmp (format_name, "mpegts")) {
++    static enum CodecID mpegts_video_list[] = { CODEC_ID_MPEG1VIDEO,
++      CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpegts_audio_list[] = { CODEC_ID_MP2,
++      CODEC_ID_MP3,
++      CODEC_ID_AC3,
++      CODEC_ID_DTS,
++      CODEC_ID_AAC,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpegts_video_list;
++    *audio_codec_list = mpegts_audio_list;
++  } else if (!strcmp (format_name, "vob")) {
++    static enum CodecID vob_video_list[] =
++        { CODEC_ID_MPEG2VIDEO, CODEC_ID_NONE };
++    static enum CodecID vob_audio_list[] = { CODEC_ID_MP2, CODEC_ID_AC3,
++      CODEC_ID_DTS, CODEC_ID_NONE
++    };
++
++    *video_codec_list = vob_video_list;
++    *audio_codec_list = vob_audio_list;
++  } else if (!strcmp (format_name, "flv")) {
++    static enum CodecID flv_video_list[] = { CODEC_ID_FLV1, CODEC_ID_NONE };
++    static enum CodecID flv_audio_list[] = { CODEC_ID_MP3, CODEC_ID_NONE };
++
++    *video_codec_list = flv_video_list;
++    *audio_codec_list = flv_audio_list;
++  } else if (!strcmp (format_name, "asf")) {
++    static enum CodecID asf_video_list[] =
++        { CODEC_ID_WMV1, CODEC_ID_WMV2, CODEC_ID_MSMPEG4V3, CODEC_ID_NONE };
++    static enum CodecID asf_audio_list[] =
++        { CODEC_ID_WMAV1, CODEC_ID_WMAV2, CODEC_ID_MP3, CODEC_ID_NONE };
++
++    *video_codec_list = asf_video_list;
++    *audio_codec_list = asf_audio_list;
++  } else if (!strcmp (format_name, "dv")) {
++    static enum CodecID dv_video_list[] = { CODEC_ID_DVVIDEO, CODEC_ID_NONE };
++    static enum CodecID dv_audio_list[] = { CODEC_ID_PCM_S16LE, CODEC_ID_NONE };
++
++    *video_codec_list = dv_video_list;
++    *audio_codec_list = dv_audio_list;
++  } else if (!strcmp (format_name, "mov")) {
++    static enum CodecID mov_video_list[] = {
++      CODEC_ID_SVQ1, CODEC_ID_SVQ3, CODEC_ID_MPEG4,
++      CODEC_ID_H263, CODEC_ID_H263P,
++      CODEC_ID_H264, CODEC_ID_DVVIDEO,
++      CODEC_ID_MJPEG,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mov_audio_list[] = {
++      CODEC_ID_PCM_MULAW, CODEC_ID_PCM_ALAW, CODEC_ID_ADPCM_IMA_QT,
++      CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_AAC,
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE,
++      CODEC_ID_MP3, CODEC_ID_NONE
++    };
++
++    *video_codec_list = mov_video_list;
++    *audio_codec_list = mov_audio_list;
++  } else if ((!strcmp (format_name, "3gp") || !strcmp (format_name, "3g2"))) {
++    static enum CodecID tgp_video_list[] = {
++      CODEC_ID_MPEG4, CODEC_ID_H263, CODEC_ID_H263P, CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID tgp_audio_list[] = {
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_AAC,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = tgp_video_list;
++    *audio_codec_list = tgp_audio_list;
++  } else if (!strcmp (format_name, "mmf")) {
++    static enum CodecID mmf_audio_list[] = {
++      CODEC_ID_ADPCM_YAMAHA, CODEC_ID_NONE
++    };
++    *video_codec_list = NULL;
++    *audio_codec_list = mmf_audio_list;
++  } else if (!strcmp (format_name, "amr")) {
++    static enum CodecID amr_audio_list[] = {
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_NONE
++    };
++    *video_codec_list = NULL;
++    *audio_codec_list = amr_audio_list;
++  } else if (!strcmp (format_name, "gif")) {
++    static enum CodecID gif_image_list[] = {
++      CODEC_ID_RAWVIDEO, CODEC_ID_NONE
++    };
++    *video_codec_list = gif_image_list;
++    *audio_codec_list = NULL;
++  } else if ((plugin->audio_codec != CODEC_ID_NONE) ||
++      (plugin->video_codec != CODEC_ID_NONE)) {
++    tmp_vlist[0] = plugin->video_codec;
++    tmp_alist[0] = plugin->audio_codec;
++
++    *video_codec_list = tmp_vlist;
++    *audio_codec_list = tmp_alist;
++  } else {
++    GST_LOG ("Format %s not found", format_name);
++    return FALSE;
++  }
++
++  return TRUE;
++}
++
++/* Convert a GstCaps to a FFMPEG codec ID. Size et all
++ * are omitted, that can be queried by the user itself,
++ * we're not eating the GstCaps or anything
++ * A pointer to an allocated context is also needed for
++ * optional extra info
++ */
++
++enum CodecID
++gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context)
++{
++  enum CodecID id = CODEC_ID_NONE;
++  const gchar *mimetype;
++  const GstStructure *structure;
++  gboolean video = FALSE, audio = FALSE;        /* we want to be sure! */
++
++  g_return_val_if_fail (caps != NULL, CODEC_ID_NONE);
++  g_return_val_if_fail (gst_caps_get_size (caps) == 1, CODEC_ID_NONE);
++  structure = gst_caps_get_structure (caps, 0);
++
++  mimetype = gst_structure_get_name (structure);
++
++  if (!strcmp (mimetype, "video/x-raw-rgb") ||
++      !strcmp (mimetype, "video/x-raw-yuv")) {
++    id = CODEC_ID_RAWVIDEO;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-raw-int")) {
++    gint depth, width, endianness;
++    gboolean signedness;
++
++    if (gst_structure_get_int (structure, "endianness", &endianness) &&
++        gst_structure_get_boolean (structure, "signed", &signedness) &&
++        gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "depth", &depth) && depth == width) {
++      switch (depth) {
++        case 8:
++          if (signedness) {
++            id = CODEC_ID_PCM_S8;
++          } else {
++            id = CODEC_ID_PCM_U8;
++          }
++          break;
++        case 16:
++          switch (endianness) {
++            case G_BIG_ENDIAN:
++              if (signedness) {
++                id = CODEC_ID_PCM_S16BE;
++              } else {
++                id = CODEC_ID_PCM_U16BE;
++              }
++              break;
++            case G_LITTLE_ENDIAN:
++              if (signedness) {
++                id = CODEC_ID_PCM_S16LE;
++              } else {
++                id = CODEC_ID_PCM_U16LE;
++              }
++              break;
++          }
++          break;
++      }
++      if (id != CODEC_ID_NONE)
++        audio = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-mulaw")) {
++    id = CODEC_ID_PCM_MULAW;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-alaw")) {
++    id = CODEC_ID_PCM_ALAW;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-dv")) {
++    gboolean sys_strm;
++
++    if (gst_structure_get_boolean (structure, "systemstream", &sys_strm) &&
++        !sys_strm) {
++      id = CODEC_ID_DVVIDEO;
++      video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-dv")) {        /* ??? */
++    id = CODEC_ID_DVAUDIO;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h263")) {
++    const gchar *h263version =
++        gst_structure_get_string (structure, "h263version");
++    if (h263version && !strcmp (h263version, "h263p"))
++      id = CODEC_ID_H263P;
++    else
++      id = CODEC_ID_H263;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-intel-h263")) {
++    id = CODEC_ID_H263I;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h261")) {
++    id = CODEC_ID_H261;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/mpeg")) {
++    gboolean sys_strm;
++    gint mpegversion;
++
++    if (gst_structure_get_boolean (structure, "systemstream", &sys_strm) &&
++        gst_structure_get_int (structure, "mpegversion", &mpegversion) &&
++        !sys_strm) {
++      switch (mpegversion) {
++        case 1:
++          id = CODEC_ID_MPEG1VIDEO;
++          break;
++        case 2:
++          id = CODEC_ID_MPEG2VIDEO;
++          break;
++        case 4:
++          id = CODEC_ID_MPEG4;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "image/jpeg")) {
++    id = CODEC_ID_MJPEG;        /* A... B... */
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-jpeg-b")) {
++    id = CODEC_ID_MJPEGB;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-wmv")) {
++    gint wmvversion = 0;
++
++    if (gst_structure_get_int (structure, "wmvversion", &wmvversion)) {
++      switch (wmvversion) {
++        case 1:
++          id = CODEC_ID_WMV1;
++          break;
++        case 2:
++          id = CODEC_ID_WMV2;
++          break;
++        case 3:
++        {
++          guint32 fourcc;
++
++          /* WMV3 unless the fourcc exists and says otherwise */
++          id = CODEC_ID_WMV3;
++
++          if (gst_structure_get_fourcc (structure, "format", &fourcc)) {
++            if ((fourcc == GST_MAKE_FOURCC ('W', 'V', 'C', '1')) ||
++                (fourcc == GST_MAKE_FOURCC ('W', 'M', 'V', 'A'))) {
++              id = CODEC_ID_VC1;
++            }
++          }
++        }
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-vorbis")) {
++    id = CODEC_ID_VORBIS;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-qdm2")) {
++    id = CODEC_ID_QDM2;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/mpeg")) {
++    gint layer = 0;
++    gint mpegversion = 0;
++
++    if (gst_structure_get_int (structure, "mpegversion", &mpegversion)) {
++      switch (mpegversion) {
++        case 2:                /* ffmpeg uses faad for both... */
++        case 4:
++          id = CODEC_ID_AAC;
++          break;
++        case 1:
++          if (gst_structure_get_int (structure, "layer", &layer)) {
++            switch (layer) {
++              case 1:
++                id = CODEC_ID_MP1;
++                break;
++              case 2:
++                id = CODEC_ID_MP2;
++                break;
++              case 3:
++                id = CODEC_ID_MP3;
++                break;
++            }
++          }
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-musepack")) {
++    gint streamversion = -1;
++
++    if (gst_structure_get_int (structure, "streamversion", &streamversion)) {
++      if (streamversion == 7)
++        id = CODEC_ID_MUSEPACK7;
++    } else {
++      id = CODEC_ID_MUSEPACK7;
++    }
++  } else if (!strcmp (mimetype, "audio/x-wma")) {
++    gint wmaversion = 0;
++
++    if (gst_structure_get_int (structure, "wmaversion", &wmaversion)) {
++      switch (wmaversion) {
++        case 1:
++          id = CODEC_ID_WMAV1;
++          break;
++        case 2:
++          id = CODEC_ID_WMAV2;
++          break;
++        case 3:
++          id = CODEC_ID_WMAPRO;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-wms")) {
++    id = CODEC_ID_WMAVOICE;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-ac3")) {
++    id = CODEC_ID_AC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-eac3")) {
++    id = CODEC_ID_EAC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-vnd.sony.atrac3") ||
++      !strcmp (mimetype, "audio/atrac3")) {
++    id = CODEC_ID_ATRAC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-dts")) {
++    id = CODEC_ID_DTS;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "application/x-ape")) {
++    id = CODEC_ID_APE;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-msmpeg")) {
++    gint msmpegversion = 0;
++
++    if (gst_structure_get_int (structure, "msmpegversion", &msmpegversion)) {
++      switch (msmpegversion) {
++        case 41:
++          id = CODEC_ID_MSMPEG4V1;
++          break;
++        case 42:
++          id = CODEC_ID_MSMPEG4V2;
++          break;
++        case 43:
++          id = CODEC_ID_MSMPEG4V3;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-svq")) {
++    gint svqversion = 0;
++
++    if (gst_structure_get_int (structure, "svqversion", &svqversion)) {
++      switch (svqversion) {
++        case 1:
++          id = CODEC_ID_SVQ1;
++          break;
++        case 3:
++          id = CODEC_ID_SVQ3;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-huffyuv")) {
++    id = CODEC_ID_HUFFYUV;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-mace")) {
++    gint maceversion = 0;
++
++    if (gst_structure_get_int (structure, "maceversion", &maceversion)) {
++      switch (maceversion) {
++        case 3:
++          id = CODEC_ID_MACE3;
++          break;
++        case 6:
++          id = CODEC_ID_MACE6;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-theora")) {
++    id = CODEC_ID_THEORA;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp3")) {
++    id = CODEC_ID_VP3;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp5")) {
++    id = CODEC_ID_VP5;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6")) {
++    id = CODEC_ID_VP6;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6-flash")) {
++    id = CODEC_ID_VP6F;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6-alpha")) {
++    id = CODEC_ID_VP6A;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp8")) {
++    id = CODEC_ID_VP8;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-flash-screen")) {
++    id = CODEC_ID_FLASHSV;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-indeo")) {
++    gint indeoversion = 0;
++
++    if (gst_structure_get_int (structure, "indeoversion", &indeoversion)) {
++      switch (indeoversion) {
++        case 5:
++          id = CODEC_ID_INDEO5;
++          break;
++        case 3:
++          id = CODEC_ID_INDEO3;
++          break;
++        case 2:
++          id = CODEC_ID_INDEO2;
++          break;
++      }
++      if (id != CODEC_ID_NONE)
++        video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "video/x-divx")) {
++    gint divxversion = 0;
++
++    if (gst_structure_get_int (structure, "divxversion", &divxversion)) {
++      switch (divxversion) {
++        case 3:
++          id = CODEC_ID_MSMPEG4V3;
++          break;
++        case 4:
++        case 5:
++          id = CODEC_ID_MPEG4;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-3ivx")) {
++    id = CODEC_ID_MPEG4;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-xvid")) {
++    id = CODEC_ID_MPEG4;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-ffv")) {
++    gint ffvversion = 0;
++
++    if (gst_structure_get_int (structure, "ffvversion", &ffvversion) &&
++        ffvversion == 1) {
++      id = CODEC_ID_FFV1;
++      video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-adpcm")) {
++    const gchar *layout;
++
++    layout = gst_structure_get_string (structure, "layout");
++    if (layout == NULL) {
++      /* break */
++    } else if (!strcmp (layout, "quicktime")) {
++      id = CODEC_ID_ADPCM_IMA_QT;
++    } else if (!strcmp (layout, "microsoft")) {
++      id = CODEC_ID_ADPCM_MS;
++    } else if (!strcmp (layout, "dvi")) {
++      id = CODEC_ID_ADPCM_IMA_WAV;
++    } else if (!strcmp (layout, "4xm")) {
++      id = CODEC_ID_ADPCM_4XM;
++    } else if (!strcmp (layout, "smjpeg")) {
++      id = CODEC_ID_ADPCM_IMA_SMJPEG;
++    } else if (!strcmp (layout, "dk3")) {
++      id = CODEC_ID_ADPCM_IMA_DK3;
++    } else if (!strcmp (layout, "dk4")) {
++      id = CODEC_ID_ADPCM_IMA_DK4;
++    } else if (!strcmp (layout, "westwood")) {
++      id = CODEC_ID_ADPCM_IMA_WS;
++    } else if (!strcmp (layout, "iss")) {
++      id = CODEC_ID_ADPCM_IMA_ISS;
++    } else if (!strcmp (layout, "xa")) {
++      id = CODEC_ID_ADPCM_XA;
++    } else if (!strcmp (layout, "adx")) {
++      id = CODEC_ID_ADPCM_ADX;
++    } else if (!strcmp (layout, "ea")) {
++      id = CODEC_ID_ADPCM_EA;
++    } else if (!strcmp (layout, "g726")) {
++      id = CODEC_ID_ADPCM_G726;
++    } else if (!strcmp (layout, "g721")) {
++      id = CODEC_ID_ADPCM_G726;
++    } else if (!strcmp (layout, "ct")) {
++      id = CODEC_ID_ADPCM_CT;
++    } else if (!strcmp (layout, "swf")) {
++      id = CODEC_ID_ADPCM_SWF;
++    } else if (!strcmp (layout, "yamaha")) {
++      id = CODEC_ID_ADPCM_YAMAHA;
++    } else if (!strcmp (layout, "sbpro2")) {
++      id = CODEC_ID_ADPCM_SBPRO_2;
++    } else if (!strcmp (layout, "sbpro3")) {
++      id = CODEC_ID_ADPCM_SBPRO_3;
++    } else if (!strcmp (layout, "sbpro4")) {
++      id = CODEC_ID_ADPCM_SBPRO_4;
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-4xm")) {
++    id = CODEC_ID_4XM;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-dpcm")) {
++    const gchar *layout;
++
++    layout = gst_structure_get_string (structure, "layout");
++    if (!layout) {
++      /* .. */
++    } else if (!strcmp (layout, "roq")) {
++      id = CODEC_ID_ROQ_DPCM;
++    } else if (!strcmp (layout, "interplay")) {
++      id = CODEC_ID_INTERPLAY_DPCM;
++    } else if (!strcmp (layout, "xan")) {
++      id = CODEC_ID_XAN_DPCM;
++    } else if (!strcmp (layout, "sol")) {
++      id = CODEC_ID_SOL_DPCM;
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-flac")) {
++    id = CODEC_ID_FLAC;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-shorten")) {
++    id = CODEC_ID_SHORTEN;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-alac")) {
++    id = CODEC_ID_ALAC;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-cinepak")) {
++    id = CODEC_ID_CINEPAK;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-pn-realvideo")) {
++    gint rmversion;
++
++    if (gst_structure_get_int (structure, "rmversion", &rmversion)) {
++      switch (rmversion) {
++        case 1:
++          id = CODEC_ID_RV10;
++          break;
++        case 2:
++          id = CODEC_ID_RV20;
++          break;
++        case 3:
++          id = CODEC_ID_RV30;
++          break;
++        case 4:
++          id = CODEC_ID_RV40;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-sipro")) {
++    id = CODEC_ID_SIPR;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-pn-realaudio")) {
++    gint raversion;
++
++    if (gst_structure_get_int (structure, "raversion", &raversion)) {
++      switch (raversion) {
++        case 1:
++          id = CODEC_ID_RA_144;
++          break;
++        case 2:
++          id = CODEC_ID_RA_288;
++          break;
++        case 8:
++          id = CODEC_ID_COOK;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-rle")) {
++    const gchar *layout;
++
++    if ((layout = gst_structure_get_string (structure, "layout"))) {
++      if (!strcmp (layout, "microsoft")) {
++        id = CODEC_ID_MSRLE;
++        video = TRUE;
++      }
++    }
++  } else if (!strcmp (mimetype, "video/x-xan")) {
++    gint wcversion = 0;
++
++    if ((gst_structure_get_int (structure, "wcversion", &wcversion))) {
++      switch (wcversion) {
++        case 3:
++          id = CODEC_ID_XAN_WC3;
++          video = TRUE;
++          break;
++        case 4:
++          id = CODEC_ID_XAN_WC4;
++          video = TRUE;
++          break;
++        default:
++          break;
++      }
++    }
++  } else if (!strcmp (mimetype, "audio/AMR")) {
++    audio = TRUE;
++    id = CODEC_ID_AMR_NB;
++  } else if (!strcmp (mimetype, "audio/AMR-WB")) {
++    id = CODEC_ID_AMR_WB;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/qcelp")) {
++    id = CODEC_ID_QCELP;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h264")) {
++    id = CODEC_ID_H264;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-flash-video")) {
++    gint flvversion = 0;
++
++    if ((gst_structure_get_int (structure, "flvversion", &flvversion))) {
++      switch (flvversion) {
++        case 1:
++          id = CODEC_ID_FLV1;
++          video = TRUE;
++          break;
++        default:
++          break;
++      }
++    }
++
++  } else if (!strcmp (mimetype, "audio/x-nellymoser")) {
++    id = CODEC_ID_NELLYMOSER;
++    audio = TRUE;
++  } else if (!strncmp (mimetype, "audio/x-gst_ff-", 15)) {
++    gchar ext[16];
++    AVCodec *codec;
++
++    if (strlen (mimetype) <= 30 &&
++        sscanf (mimetype, "audio/x-gst_ff-%s", ext) == 1) {
++      if ((codec = avcodec_find_decoder_by_name (ext)) ||
++          (codec = avcodec_find_encoder_by_name (ext))) {
++        id = codec->id;
++        audio = TRUE;
++      }
++    }
++  } else if (!strncmp (mimetype, "video/x-gst_ff-", 15)) {
++    gchar ext[16];
++    AVCodec *codec;
++
++    if (strlen (mimetype) <= 30 &&
++        sscanf (mimetype, "video/x-gst_ff-%s", ext) == 1) {
++      if ((codec = avcodec_find_decoder_by_name (ext)) ||
++          (codec = avcodec_find_encoder_by_name (ext))) {
++        id = codec->id;
++        video = TRUE;
++      }
++    }
++  }
++
++  if (context != NULL) {
++    if (video == TRUE) {
++      context->codec_type = AVMEDIA_TYPE_VIDEO;
++    } else if (audio == TRUE) {
++      context->codec_type = AVMEDIA_TYPE_AUDIO;
++    } else {
++      context->codec_type = AVMEDIA_TYPE_UNKNOWN;
++    }
++    context->codec_id = id;
++    gst_ffmpeg_caps_with_codecid (id, context->codec_type, caps, context);
++  }
++
++  if (id != CODEC_ID_NONE) {
++    GST_DEBUG ("The id=%d belongs to the caps %" GST_PTR_FORMAT, id, caps);
++  } else {
++    GST_WARNING ("Couldn't figure out the id for caps %" GST_PTR_FORMAT, caps);
++  }
++
++  return id;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.rej gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.rej
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.rej	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.rej	2014-08-08 15:31:06.055868246 +0200
+@@ -0,0 +1,12 @@
++--- ext/ffmpeg/gstffmpegcodecmap.c
+++++ ext/ffmpeg/gstffmpegcodecmap.c
++@@ -1884,9 +1842,6 @@
++             gst_ff_vid_caps_new (context, codec_id, encode, "video/x-raw-rgb",
++             "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, "endianness",
++             G_TYPE_INT, endianness, NULL);
++-        if (caps && context) {
++-          gst_ffmpeg_set_palette (caps, context);
++-        }
++       }
++     } else if (fmt) {
++       caps = gst_ff_vid_caps_new (context, codec_id, encode, "video/x-raw-yuv",
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c	2014-08-08 14:46:31.462772351 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c	2014-08-08 15:32:18.608870847 +0200
+@@ -88,7 +88,6 @@
+       gint depth;
+     } audio;
+   } format;
+-  gboolean waiting_for_key;
+   gboolean discont;
+   gboolean clear_ts;
+ 
+@@ -438,7 +437,6 @@
+   ffmpegdec->pcache = NULL;
+   ffmpegdec->par = NULL;
+   ffmpegdec->opened = FALSE;
+-  ffmpegdec->waiting_for_key = TRUE;
+   ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
+   ffmpegdec->direct_rendering = DEFAULT_DIRECT_RENDERING;
+   ffmpegdec->do_padding = DEFAULT_DO_PADDING;
+@@ -608,11 +606,6 @@
+     gst_ffmpeg_avcodec_close (ffmpegdec->context);
+   ffmpegdec->opened = FALSE;
+ 
+-  if (ffmpegdec->context->palctrl) {
+-    av_free (ffmpegdec->context->palctrl);
+-    ffmpegdec->context->palctrl = NULL;
+-  }
+-
+   if (ffmpegdec->context->extradata) {
+     av_free (ffmpegdec->context->extradata);
+     ffmpegdec->context->extradata = NULL;
+@@ -864,7 +857,7 @@
+ 
+   /* workaround encoder bugs */
+   ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
+-  ffmpegdec->context->error_recognition = 1;
++  ffmpegdec->context->err_recognition = 1;
+ 
+   /* for slow cpus */
+   ffmpegdec->context->lowres = ffmpegdec->lowres;
+@@ -944,7 +937,7 @@
+   fsize = gst_ffmpeg_avpicture_get_size (ffmpegdec->context->pix_fmt,
+       width, height);
+ 
+-  if (!ffmpegdec->context->palctrl && ffmpegdec->can_allocate_aligned) {
++  if (ffmpegdec->can_allocate_aligned) {
+     GST_LOG_OBJECT (ffmpegdec, "calling pad_alloc");
+     /* no pallete, we can use the buffer size to alloc */
+     ret = gst_pad_alloc_buffer_and_set_caps (ffmpegdec->srcpad,
+@@ -1083,7 +1076,6 @@
+   /* tell ffmpeg we own this buffer, tranfer the ref we have on the buffer to
+    * the opaque data. */
+   picture->type = FF_BUFFER_TYPE_USER;
+-  picture->age = 256 * 256 * 256 * 64;
+   picture->opaque = buf;
+ 
+ #ifdef EXTRA_REF
+@@ -1414,10 +1406,6 @@
+   } else {
+     if (diff >= 0) {
+       /* we're too slow, try to speed up */
+-      if (ffmpegdec->waiting_for_key) {
+-        /* we were waiting for a keyframe, that's ok */
+-        goto skipping;
+-      }
+       /* switch to skip_frame mode */
+       goto skip_frame;
+     }
+@@ -1427,11 +1415,6 @@
+   ffmpegdec->processed++;
+   return TRUE;
+ 
+-skipping:
+-  {
+-    res = FALSE;
+-    goto drop_qos;
+-  }
+ normal_mode:
+   {
+     if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
+@@ -1528,43 +1511,6 @@
+ }
+ 
+ 
+-/* figure out if the current picture is a keyframe, return TRUE if that is
+- * the case. */
+-static gboolean
+-check_keyframe (GstFFMpegDec * ffmpegdec)
+-{
+-  GstFFMpegDecClass *oclass;
+-  gboolean is_itype = FALSE;
+-  gboolean is_reference = FALSE;
+-  gboolean iskeyframe;
+-
+-  /* figure out if we are dealing with a keyframe */
+-  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
+-
+-  /* remember that we have B frames, we need this for the DTS -> PTS conversion
+-   * code */
+-  if (!ffmpegdec->has_b_frames && ffmpegdec->picture->pict_type == FF_B_TYPE) {
+-    GST_DEBUG_OBJECT (ffmpegdec, "we have B frames");
+-    ffmpegdec->has_b_frames = TRUE;
+-  }
+-
+-  is_itype = (ffmpegdec->picture->pict_type == FF_I_TYPE);
+-  is_reference = (ffmpegdec->picture->reference == 1);
+-
+-  iskeyframe = (is_itype || is_reference || ffmpegdec->picture->key_frame)
+-      || (oclass->in_plugin->id == CODEC_ID_INDEO3)
+-      || (oclass->in_plugin->id == CODEC_ID_MSZH)
+-      || (oclass->in_plugin->id == CODEC_ID_ZLIB)
+-      || (oclass->in_plugin->id == CODEC_ID_VP3)
+-      || (oclass->in_plugin->id == CODEC_ID_HUFFYUV);
+-
+-  GST_LOG_OBJECT (ffmpegdec,
+-      "current picture: type: %d, is_keyframe:%d, is_itype:%d, is_reference:%d",
+-      ffmpegdec->picture->pict_type, iskeyframe, is_itype, is_reference);
+-
+-  return iskeyframe;
+-}
+-
+ /* get an outbuf buffer with the current picture */
+ static GstFlowReturn
+ get_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf)
+@@ -1694,7 +1640,6 @@
+ {
+   gint len = -1;
+   gint have_data;
+-  gboolean iskeyframe;
+   gboolean mode_switch;
+   gboolean decode;
+   gint skip_frame = AVDISCARD_DEFAULT;
+@@ -1809,7 +1754,6 @@
+     gst_ffmpegdec_negotiate (ffmpegdec, TRUE);
+   }
+ 
+-
+   /* Whether a frame is interlaced or not is unknown at the time of
+      buffer allocation, so caps on the buffer in opaque will have
+      the previous frame's interlaced flag set. So if interlacedness
+@@ -1831,10 +1775,6 @@
+     }
+   }
+ 
+-  /* check if we are dealing with a keyframe here, this will also check if we
+-   * are dealing with B frames. */
+-  iskeyframe = check_keyframe (ffmpegdec);
+-
+   /* check that the timestamps go upwards */
+   if (ffmpegdec->last_out != -1 && ffmpegdec->last_out > out_pts) {
+     /* timestamps go backwards, this means frames were reordered and we must
+@@ -1865,7 +1805,7 @@
+    * timestamps */
+   if (!ffmpegdec->reordered_in && ffmpegdec->reordered_out) {
+     /* PTS and DTS are the same for keyframes */
+-    if (!iskeyframe && ffmpegdec->next_out != -1) {
++    if (ffmpegdec->next_out != -1) {
+       /* interpolate all timestamps except for keyframes, FIXME, this is
+        * wrong when QoS is active. */
+       GST_DEBUG_OBJECT (ffmpegdec, "interpolate timestamps");
+@@ -1874,16 +1814,6 @@
+     }
+   }
+ 
+-  /* when we're waiting for a keyframe, see if we have one or drop the current
+-   * non-keyframe */
+-  if (G_UNLIKELY (ffmpegdec->waiting_for_key)) {
+-    if (G_LIKELY (!iskeyframe))
+-      goto drop_non_keyframe;
+-
+-    /* we have a keyframe, we can stop waiting for one */
+-    ffmpegdec->waiting_for_key = FALSE;
+-  }
+-
+   /* get a handle to the output buffer */
+   *ret = get_output_buffer (ffmpegdec, outbuf);
+   if (G_UNLIKELY (*ret != GST_FLOW_OK))
+@@ -2000,20 +1930,11 @@
+   else
+     ffmpegdec->next_out = -1;
+ 
+-  /* palette is not part of raw video frame in gst and the size
+-   * of the outgoing buffer needs to be adjusted accordingly */
+-  if (ffmpegdec->context->palctrl != NULL)
+-    GST_BUFFER_SIZE (*outbuf) -= AVPALETTE_SIZE;
+-
+   /* now see if we need to clip the buffer against the segment boundaries. */
+   if (G_UNLIKELY (!clip_video_buffer (ffmpegdec, *outbuf, out_timestamp,
+               out_duration)))
+     goto clipped;
+ 
+-  /* mark as keyframe or delta unit */
+-  if (!iskeyframe)
+-    GST_BUFFER_FLAG_SET (*outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+-
+   if (ffmpegdec->picture->top_field_first)
+     GST_BUFFER_FLAG_SET (*outbuf, GST_VIDEO_BUFFER_TFF);
+ 
+@@ -2024,11 +1945,6 @@
+   return len;
+ 
+   /* special cases */
+-drop_non_keyframe:
+-  {
+-    GST_WARNING_OBJECT (ffmpegdec, "Dropping non-keyframe (seek/init)");
+-    goto beach;
+-  }
+ no_output:
+   {
+     GST_DEBUG_OBJECT (ffmpegdec, "no output buffer");
+@@ -2422,7 +2338,6 @@
+       gst_ffmpegdec_reset_ts (ffmpegdec);
+       gst_ffmpegdec_reset_qos (ffmpegdec);
+       gst_ffmpegdec_flush_pcache (ffmpegdec);
+-      ffmpegdec->waiting_for_key = TRUE;
+       gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
+       clear_queued (ffmpegdec);
+       break;
+@@ -2560,17 +2475,6 @@
+ 
+   oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
+ 
+-  /* do early keyframe check pretty bad to rely on the keyframe flag in the
+-   * source for this as it might not even be parsed (UDP/file/..).  */
+-  if (G_UNLIKELY (ffmpegdec->waiting_for_key)) {
+-    GST_DEBUG_OBJECT (ffmpegdec, "waiting for keyframe");
+-    if (GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_DELTA_UNIT) &&
+-        oclass->in_plugin->type != AVMEDIA_TYPE_AUDIO)
+-      goto skip_keyframe;
+-
+-    GST_DEBUG_OBJECT (ffmpegdec, "got keyframe");
+-    ffmpegdec->waiting_for_key = FALSE;
+-  }
+   /* parse cache joining. If there is cached data */
+   if (ffmpegdec->pcache) {
+     /* join with previous data */
+@@ -2805,12 +2709,6 @@
+     gst_buffer_unref (inbuf);
+     return GST_FLOW_NOT_NEGOTIATED;
+   }
+-skip_keyframe:
+-  {
+-    GST_DEBUG_OBJECT (ffmpegdec, "skipping non keyframe");
+-    gst_buffer_unref (inbuf);
+-    return GST_FLOW_OK;
+-  }
+ }
+ 
+ static GstStateChangeReturn
+@@ -2936,7 +2834,7 @@
+     gchar *plugin_name;
+ 
+     /* only decoders */
+-    if (!in_plugin->decode) {
++    if (!av_codec_is_decoder (in_plugin)) {
+       goto next;
+     }
+ 
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.orig	2014-08-08 15:31:06.057868246 +0200
+@@ -0,0 +1,2973 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <assert.h>
++#include <string.h>
++
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#else
++#include <libavcodec/avcodec.h>
++#endif
++
++#include <gst/gst.h>
++#include <gst/video/video.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++#include "gstffmpegutils.h"
++
++/* define to enable alternative buffer refcounting algorithm */
++#undef EXTRA_REF
++
++typedef struct _GstFFMpegDec GstFFMpegDec;
++
++#define MAX_TS_MASK 0xff
++
++/* for each incomming buffer we keep all timing info in a structure like this.
++ * We keep a circular array of these structures around to store the timing info.
++ * The index in the array is what we pass as opaque data (to pictures) and
++ * pts (to parsers) so that ffmpeg can remember them for us. */
++typedef struct
++{
++  gint idx;
++  GstClockTime timestamp;
++  GstClockTime duration;
++  gint64 offset;
++} GstTSInfo;
++
++struct _GstFFMpegDec
++{
++  GstElement element;
++
++  /* We need to keep track of our pads, so we do so here. */
++  GstPad *srcpad;
++  GstPad *sinkpad;
++
++  /* decoding */
++  AVCodecContext *context;
++  AVFrame *picture;
++  gboolean opened;
++  union
++  {
++    struct
++    {
++      gint width, height;
++      gint clip_width, clip_height;
++      gint par_n, par_d;
++      gint fps_n, fps_d;
++      gint old_fps_n, old_fps_d;
++      gboolean interlaced;
++
++      enum PixelFormat pix_fmt;
++    } video;
++    struct
++    {
++      gint channels;
++      gint samplerate;
++      gint depth;
++    } audio;
++  } format;
++  gboolean discont;
++  gboolean clear_ts;
++
++  /* for tracking DTS/PTS */
++  gboolean has_b_frames;
++  gboolean reordered_in;
++  GstClockTime last_in;
++  GstClockTime last_diff;
++  guint last_frames;
++  gboolean reordered_out;
++  GstClockTime last_out;
++  GstClockTime next_out;
++
++  /* parsing */
++  gboolean turnoff_parser;      /* used for turning off aac raw parsing
++                                 * See bug #566250 */
++  AVCodecParserContext *pctx;
++  GstBuffer *pcache;
++  guint8 *padded;
++  guint padded_size;
++
++  GValue *par;                  /* pixel aspect ratio of incoming data */
++  gboolean current_dr;          /* if direct rendering is enabled */
++  gboolean extra_ref;           /* keep extra ref around in get/release */
++
++  /* some properties */
++  enum AVDiscard skip_frame;
++  gint lowres;
++  gboolean direct_rendering;
++  gboolean do_padding;
++  gboolean debug_mv;
++  gboolean crop;
++  int max_threads;
++
++  /* QoS stuff *//* with LOCK */
++  gdouble proportion;
++  GstClockTime earliest_time;
++  gint64 processed;
++  gint64 dropped;
++
++  /* clipping segment */
++  GstSegment segment;
++
++  gboolean is_realvideo;
++
++  GstTSInfo ts_info[MAX_TS_MASK + 1];
++  gint ts_idx;
++
++  /* reverse playback queue */
++  GList *queued;
++
++  /* Can downstream allocate 16bytes aligned data. */
++  gboolean can_allocate_aligned;
++};
++
++typedef struct _GstFFMpegDecClass GstFFMpegDecClass;
++
++struct _GstFFMpegDecClass
++{
++  GstElementClass parent_class;
++
++  AVCodec *in_plugin;
++  GstPadTemplate *srctempl, *sinktempl;
++};
++
++#define GST_TS_INFO_NONE &ts_info_none
++static const GstTSInfo ts_info_none = { -1, -1, -1, -1 };
++
++static const GstTSInfo *
++gst_ts_info_store (GstFFMpegDec * dec, GstClockTime timestamp,
++    GstClockTime duration, gint64 offset)
++{
++  gint idx = dec->ts_idx;
++  dec->ts_info[idx].idx = idx;
++  dec->ts_info[idx].timestamp = timestamp;
++  dec->ts_info[idx].duration = duration;
++  dec->ts_info[idx].offset = offset;
++  dec->ts_idx = (idx + 1) & MAX_TS_MASK;
++
++  return &dec->ts_info[idx];
++}
++
++static const GstTSInfo *
++gst_ts_info_get (GstFFMpegDec * dec, gint idx)
++{
++  if (G_UNLIKELY (idx < 0 || idx > MAX_TS_MASK))
++    return GST_TS_INFO_NONE;
++
++  return &dec->ts_info[idx];
++}
++
++#define GST_TYPE_FFMPEGDEC \
++  (gst_ffmpegdec_get_type())
++#define GST_FFMPEGDEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegDec))
++#define GST_FFMPEGDEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegDecClass))
++#define GST_IS_FFMPEGDEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC))
++#define GST_IS_FFMPEGDEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC))
++
++#define DEFAULT_LOWRES			0
++#define DEFAULT_SKIPFRAME		0
++#define DEFAULT_DIRECT_RENDERING	TRUE
++#define DEFAULT_DO_PADDING		TRUE
++#define DEFAULT_DEBUG_MV		FALSE
++#define DEFAULT_CROP			TRUE
++#define DEFAULT_MAX_THREADS		1
++
++enum
++{
++  PROP_0,
++  PROP_LOWRES,
++  PROP_SKIPFRAME,
++  PROP_DIRECT_RENDERING,
++  PROP_DO_PADDING,
++  PROP_DEBUG_MV,
++  PROP_CROP,
++  PROP_MAX_THREADS,
++  PROP_LAST
++};
++
++/* A number of function prototypes are given so we can refer to them later. */
++static void gst_ffmpegdec_base_init (GstFFMpegDecClass * klass);
++static void gst_ffmpegdec_class_init (GstFFMpegDecClass * klass);
++static void gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec);
++static void gst_ffmpegdec_finalize (GObject * object);
++
++static gboolean gst_ffmpegdec_query (GstPad * pad, GstQuery * query);
++static gboolean gst_ffmpegdec_src_event (GstPad * pad, GstEvent * event);
++
++static gboolean gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps);
++static gboolean gst_ffmpegdec_sink_event (GstPad * pad, GstEvent * event);
++static GstFlowReturn gst_ffmpegdec_chain (GstPad * pad, GstBuffer * buf);
++
++static GstStateChangeReturn gst_ffmpegdec_change_state (GstElement * element,
++    GstStateChange transition);
++
++static void gst_ffmpegdec_set_property (GObject * object,
++    guint prop_id, const GValue * value, GParamSpec * pspec);
++static void gst_ffmpegdec_get_property (GObject * object,
++    guint prop_id, GValue * value, GParamSpec * pspec);
++
++static gboolean gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec,
++    gboolean force);
++
++/* some sort of bufferpool handling, but different */
++static int gst_ffmpegdec_get_buffer (AVCodecContext * context,
++    AVFrame * picture);
++static void gst_ffmpegdec_release_buffer (AVCodecContext * context,
++    AVFrame * picture);
++
++static void gst_ffmpegdec_drain (GstFFMpegDec * ffmpegdec);
++
++#define GST_FFDEC_PARAMS_QDATA g_quark_from_static_string("ffdec-params")
++
++static GstElementClass *parent_class = NULL;
++
++#define GST_FFMPEGDEC_TYPE_LOWRES (gst_ffmpegdec_lowres_get_type())
++static GType
++gst_ffmpegdec_lowres_get_type (void)
++{
++  static GType ffmpegdec_lowres_type = 0;
++
++  if (!ffmpegdec_lowres_type) {
++    static const GEnumValue ffmpegdec_lowres[] = {
++      {0, "0", "full"},
++      {1, "1", "1/2-size"},
++      {2, "2", "1/4-size"},
++      {0, NULL, NULL},
++    };
++
++    ffmpegdec_lowres_type =
++        g_enum_register_static ("GstFFMpegDecLowres", ffmpegdec_lowres);
++  }
++
++  return ffmpegdec_lowres_type;
++}
++
++#define GST_FFMPEGDEC_TYPE_SKIPFRAME (gst_ffmpegdec_skipframe_get_type())
++static GType
++gst_ffmpegdec_skipframe_get_type (void)
++{
++  static GType ffmpegdec_skipframe_type = 0;
++
++  if (!ffmpegdec_skipframe_type) {
++    static const GEnumValue ffmpegdec_skipframe[] = {
++      {0, "0", "Skip nothing"},
++      {1, "1", "Skip B-frames"},
++      {2, "2", "Skip IDCT/Dequantization"},
++      {5, "5", "Skip everything"},
++      {0, NULL, NULL},
++    };
++
++    ffmpegdec_skipframe_type =
++        g_enum_register_static ("GstFFMpegDecSkipFrame", ffmpegdec_skipframe);
++  }
++
++  return ffmpegdec_skipframe_type;
++}
++
++static void
++gst_ffmpegdec_base_init (GstFFMpegDecClass * klass)
++{
++  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
++  GstPadTemplate *sinktempl, *srctempl;
++  GstCaps *sinkcaps, *srccaps;
++  AVCodec *in_plugin;
++  gchar *longname, *classification, *description;
++
++  in_plugin =
++      (AVCodec *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass),
++      GST_FFDEC_PARAMS_QDATA);
++  g_assert (in_plugin != NULL);
++
++  /* construct the element details struct */
++  longname = g_strdup_printf ("FFmpeg %s decoder", in_plugin->long_name);
++  classification = g_strdup_printf ("Codec/Decoder/%s",
++      (in_plugin->type == AVMEDIA_TYPE_VIDEO) ? "Video" : "Audio");
++  description = g_strdup_printf ("FFmpeg %s decoder", in_plugin->name);
++  gst_element_class_set_details_simple (element_class, longname, classification,
++      description,
++      "Wim Taymans <wim.taymans@gmail.com>, "
++      "Ronald Bultje <rbultje@ronald.bitfreak.net>, "
++      "Edward Hervey <bilboed@bilboed.com>");
++  g_free (longname);
++  g_free (classification);
++  g_free (description);
++
++  /* get the caps */
++  sinkcaps = gst_ffmpeg_codecid_to_caps (in_plugin->id, NULL, FALSE);
++  if (!sinkcaps) {
++    GST_DEBUG ("Couldn't get sink caps for decoder '%s'", in_plugin->name);
++    sinkcaps = gst_caps_from_string ("unknown/unknown");
++  }
++  if (in_plugin->type == AVMEDIA_TYPE_VIDEO) {
++    srccaps = gst_caps_from_string ("video/x-raw-rgb; video/x-raw-yuv");
++  } else {
++    srccaps = gst_ffmpeg_codectype_to_audio_caps (NULL,
++        in_plugin->id, FALSE, in_plugin);
++  }
++  if (!srccaps) {
++    GST_DEBUG ("Couldn't get source caps for decoder '%s'", in_plugin->name);
++    srccaps = gst_caps_from_string ("unknown/unknown");
++  }
++
++  /* pad templates */
++  sinktempl = gst_pad_template_new ("sink", GST_PAD_SINK,
++      GST_PAD_ALWAYS, sinkcaps);
++  srctempl = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, srccaps);
++
++  gst_element_class_add_pad_template (element_class, srctempl);
++  gst_element_class_add_pad_template (element_class, sinktempl);
++
++  klass->in_plugin = in_plugin;
++  klass->srctempl = srctempl;
++  klass->sinktempl = sinktempl;
++}
++
++static void
++gst_ffmpegdec_class_init (GstFFMpegDecClass * klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->finalize = gst_ffmpegdec_finalize;
++
++  gobject_class->set_property = gst_ffmpegdec_set_property;
++  gobject_class->get_property = gst_ffmpegdec_get_property;
++
++  if (klass->in_plugin->type == AVMEDIA_TYPE_VIDEO) {
++    int caps;
++
++    g_object_class_install_property (gobject_class, PROP_SKIPFRAME,
++        g_param_spec_enum ("skip-frame", "Skip frames",
++            "Which types of frames to skip during decoding",
++            GST_FFMPEGDEC_TYPE_SKIPFRAME, 0,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_LOWRES,
++        g_param_spec_enum ("lowres", "Low resolution",
++            "At which resolution to decode images", GST_FFMPEGDEC_TYPE_LOWRES,
++            0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DIRECT_RENDERING,
++        g_param_spec_boolean ("direct-rendering", "Direct Rendering",
++            "Enable direct rendering", DEFAULT_DIRECT_RENDERING,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DO_PADDING,
++        g_param_spec_boolean ("do-padding", "Do Padding",
++            "Add 0 padding before decoding data", DEFAULT_DO_PADDING,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DEBUG_MV,
++        g_param_spec_boolean ("debug-mv", "Debug motion vectors",
++            "Whether ffmpeg should print motion vectors on top of the image",
++            DEFAULT_DEBUG_MV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++#if 0
++    g_object_class_install_property (gobject_class, PROP_CROP,
++        g_param_spec_boolean ("crop", "Crop",
++            "Crop images to the display region",
++            DEFAULT_CROP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++#endif
++
++    caps = klass->in_plugin->capabilities;
++    if (caps & (CODEC_CAP_FRAME_THREADS | CODEC_CAP_SLICE_THREADS)) {
++      g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MAX_THREADS,
++          g_param_spec_int ("max-threads", "Maximum decode threads",
++              "Maximum number of worker threads to spawn. (0 = auto)",
++              0, G_MAXINT, DEFAULT_MAX_THREADS,
++              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    }
++  }
++
++  gstelement_class->change_state = gst_ffmpegdec_change_state;
++}
++
++static void
++gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  /* setup pads */
++  ffmpegdec->sinkpad = gst_pad_new_from_template (oclass->sinktempl, "sink");
++  gst_pad_set_setcaps_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_setcaps));
++  gst_pad_set_event_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_sink_event));
++  gst_pad_set_chain_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_chain));
++  gst_element_add_pad (GST_ELEMENT (ffmpegdec), ffmpegdec->sinkpad);
++
++  ffmpegdec->srcpad = gst_pad_new_from_template (oclass->srctempl, "src");
++  gst_pad_use_fixed_caps (ffmpegdec->srcpad);
++  gst_pad_set_event_function (ffmpegdec->srcpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_src_event));
++  gst_pad_set_query_function (ffmpegdec->srcpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_query));
++  gst_element_add_pad (GST_ELEMENT (ffmpegdec), ffmpegdec->srcpad);
++
++  /* some ffmpeg data */
++  ffmpegdec->context = avcodec_alloc_context ();
++  ffmpegdec->picture = avcodec_alloc_frame ();
++  ffmpegdec->pctx = NULL;
++  ffmpegdec->pcache = NULL;
++  ffmpegdec->par = NULL;
++  ffmpegdec->opened = FALSE;
++  ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
++  ffmpegdec->direct_rendering = DEFAULT_DIRECT_RENDERING;
++  ffmpegdec->do_padding = DEFAULT_DO_PADDING;
++  ffmpegdec->debug_mv = DEFAULT_DEBUG_MV;
++  ffmpegdec->crop = DEFAULT_CROP;
++  ffmpegdec->max_threads = DEFAULT_MAX_THREADS;
++
++  ffmpegdec->format.video.par_n = -1;
++  ffmpegdec->format.video.fps_n = -1;
++  ffmpegdec->format.video.old_fps_n = -1;
++  gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
++
++  /* We initially assume downstream can allocate 16 bytes aligned buffers */
++  ffmpegdec->can_allocate_aligned = TRUE;
++}
++
++static void
++gst_ffmpegdec_finalize (GObject * object)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  if (ffmpegdec->context != NULL) {
++    av_free (ffmpegdec->context);
++    ffmpegdec->context = NULL;
++  }
++
++  if (ffmpegdec->picture != NULL) {
++    av_free (ffmpegdec->picture);
++    ffmpegdec->picture = NULL;
++  }
++
++  G_OBJECT_CLASS (parent_class)->finalize (object);
++}
++
++static gboolean
++gst_ffmpegdec_query (GstPad * pad, GstQuery * query)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstPad *peer;
++  gboolean res;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  res = FALSE;
++
++  if ((peer = gst_pad_get_peer (ffmpegdec->sinkpad))) {
++    /* just forward to peer */
++    res = gst_pad_query (peer, query);
++    gst_object_unref (peer);
++  }
++#if 0
++  {
++    GstFormat bfmt;
++
++    bfmt = GST_FORMAT_BYTES;
++
++    /* ok, do bitrate calc... */
++    if ((type != GST_QUERY_POSITION && type != GST_QUERY_TOTAL) ||
++        *fmt != GST_FORMAT_TIME || ffmpegdec->context->bit_rate == 0 ||
++        !gst_pad_query (peer, type, &bfmt, value))
++      return FALSE;
++
++    if (ffmpegdec->pcache && type == GST_QUERY_POSITION)
++      *value -= GST_BUFFER_SIZE (ffmpegdec->pcache);
++    *value *= GST_SECOND / ffmpegdec->context->bit_rate;
++  }
++#endif
++
++  gst_object_unref (ffmpegdec);
++
++  return res;
++}
++
++static void
++gst_ffmpegdec_reset_ts (GstFFMpegDec * ffmpegdec)
++{
++  ffmpegdec->last_in = GST_CLOCK_TIME_NONE;
++  ffmpegdec->last_diff = GST_CLOCK_TIME_NONE;
++  ffmpegdec->last_frames = 0;
++  ffmpegdec->last_out = GST_CLOCK_TIME_NONE;
++  ffmpegdec->next_out = GST_CLOCK_TIME_NONE;
++  ffmpegdec->reordered_in = FALSE;
++  ffmpegdec->reordered_out = FALSE;
++}
++
++static void
++gst_ffmpegdec_update_qos (GstFFMpegDec * ffmpegdec, gdouble proportion,
++    GstClockTime timestamp)
++{
++  GST_LOG_OBJECT (ffmpegdec, "update QOS: %f, %" GST_TIME_FORMAT,
++      proportion, GST_TIME_ARGS (timestamp));
++
++  GST_OBJECT_LOCK (ffmpegdec);
++  ffmpegdec->proportion = proportion;
++  ffmpegdec->earliest_time = timestamp;
++  GST_OBJECT_UNLOCK (ffmpegdec);
++}
++
++static void
++gst_ffmpegdec_reset_qos (GstFFMpegDec * ffmpegdec)
++{
++  gst_ffmpegdec_update_qos (ffmpegdec, 0.5, GST_CLOCK_TIME_NONE);
++  ffmpegdec->processed = 0;
++  ffmpegdec->dropped = 0;
++}
++
++static void
++gst_ffmpegdec_read_qos (GstFFMpegDec * ffmpegdec, gdouble * proportion,
++    GstClockTime * timestamp)
++{
++  GST_OBJECT_LOCK (ffmpegdec);
++  *proportion = ffmpegdec->proportion;
++  *timestamp = ffmpegdec->earliest_time;
++  GST_OBJECT_UNLOCK (ffmpegdec);
++}
++
++static gboolean
++gst_ffmpegdec_src_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegDec *ffmpegdec;
++  gboolean res;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_QOS:
++    {
++      gdouble proportion;
++      GstClockTimeDiff diff;
++      GstClockTime timestamp;
++
++      gst_event_parse_qos (event, &proportion, &diff, &timestamp);
++
++      /* update our QoS values */
++      gst_ffmpegdec_update_qos (ffmpegdec, proportion, timestamp + diff);
++
++      /* forward upstream */
++      res = gst_pad_push_event (ffmpegdec->sinkpad, event);
++      break;
++    }
++    default:
++      /* forward upstream */
++      res = gst_pad_push_event (ffmpegdec->sinkpad, event);
++      break;
++  }
++
++  gst_object_unref (ffmpegdec);
++
++  return res;
++}
++
++/* with LOCK */
++static void
++gst_ffmpegdec_close (GstFFMpegDec * ffmpegdec)
++{
++  if (!ffmpegdec->opened)
++    return;
++
++  GST_LOG_OBJECT (ffmpegdec, "closing ffmpeg codec");
++
++  if (ffmpegdec->par) {
++    g_free (ffmpegdec->par);
++    ffmpegdec->par = NULL;
++  }
++
++  if (ffmpegdec->context->priv_data)
++    gst_ffmpeg_avcodec_close (ffmpegdec->context);
++  ffmpegdec->opened = FALSE;
++
++  if (ffmpegdec->context->extradata) {
++    av_free (ffmpegdec->context->extradata);
++    ffmpegdec->context->extradata = NULL;
++  }
++
++  if (ffmpegdec->pctx) {
++    if (ffmpegdec->pcache) {
++      gst_buffer_unref (ffmpegdec->pcache);
++      ffmpegdec->pcache = NULL;
++    }
++    av_parser_close (ffmpegdec->pctx);
++    ffmpegdec->pctx = NULL;
++  }
++
++  ffmpegdec->format.video.par_n = -1;
++  ffmpegdec->format.video.fps_n = -1;
++  ffmpegdec->format.video.old_fps_n = -1;
++  ffmpegdec->format.video.interlaced = FALSE;
++}
++
++/* with LOCK */
++static gboolean
++gst_ffmpegdec_open (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  if (gst_ffmpeg_avcodec_open (ffmpegdec->context, oclass->in_plugin) < 0)
++    goto could_not_open;
++
++  ffmpegdec->opened = TRUE;
++  ffmpegdec->is_realvideo = FALSE;
++
++  GST_LOG_OBJECT (ffmpegdec, "Opened ffmpeg codec %s, id %d",
++      oclass->in_plugin->name, oclass->in_plugin->id);
++
++  /* open a parser if we can */
++  switch (oclass->in_plugin->id) {
++    case CODEC_ID_MPEG4:
++    case CODEC_ID_MJPEG:
++    case CODEC_ID_VC1:
++      GST_LOG_OBJECT (ffmpegdec, "not using parser, blacklisted codec");
++      ffmpegdec->pctx = NULL;
++      break;
++    case CODEC_ID_H264:
++      /* For H264, only use a parser if there is no context data, if there is, 
++       * we're talking AVC */
++      if (ffmpegdec->context->extradata_size == 0) {
++        GST_LOG_OBJECT (ffmpegdec, "H264 with no extradata, creating parser");
++        ffmpegdec->pctx = av_parser_init (oclass->in_plugin->id);
++      } else {
++        GST_LOG_OBJECT (ffmpegdec,
++            "H264 with extradata implies framed data - not using parser");
++        ffmpegdec->pctx = NULL;
++      }
++      break;
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV40:
++      ffmpegdec->is_realvideo = TRUE;
++      break;
++    default:
++      if (!ffmpegdec->turnoff_parser) {
++        ffmpegdec->pctx = av_parser_init (oclass->in_plugin->id);
++        if (ffmpegdec->pctx)
++          GST_LOG_OBJECT (ffmpegdec, "Using parser %p", ffmpegdec->pctx);
++        else
++          GST_LOG_OBJECT (ffmpegdec, "No parser for codec");
++      } else {
++        GST_LOG_OBJECT (ffmpegdec, "Parser deactivated for format");
++      }
++      break;
++  }
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      ffmpegdec->format.video.width = 0;
++      ffmpegdec->format.video.height = 0;
++      ffmpegdec->format.video.clip_width = -1;
++      ffmpegdec->format.video.clip_height = -1;
++      ffmpegdec->format.video.pix_fmt = PIX_FMT_NB;
++      ffmpegdec->format.video.interlaced = FALSE;
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      ffmpegdec->format.audio.samplerate = 0;
++      ffmpegdec->format.audio.channels = 0;
++      ffmpegdec->format.audio.depth = 0;
++      break;
++    default:
++      break;
++  }
++
++  gst_ffmpegdec_reset_ts (ffmpegdec);
++  /* FIXME, reset_qos holds the LOCK */
++  ffmpegdec->proportion = 0.0;
++  ffmpegdec->earliest_time = -1;
++
++  return TRUE;
++
++  /* ERRORS */
++could_not_open:
++  {
++    gst_ffmpegdec_close (ffmpegdec);
++    GST_DEBUG_OBJECT (ffmpegdec, "ffdec_%s: Failed to open FFMPEG codec",
++        oclass->in_plugin->name);
++    return FALSE;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstFFMpegDecClass *oclass;
++  GstStructure *structure;
++  const GValue *par;
++  const GValue *fps;
++  gboolean ret = TRUE;
++
++  ffmpegdec = (GstFFMpegDec *) (gst_pad_get_parent (pad));
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  GST_DEBUG_OBJECT (pad, "setcaps called");
++
++  GST_OBJECT_LOCK (ffmpegdec);
++
++  /* stupid check for VC1 */
++  if ((oclass->in_plugin->id == CODEC_ID_WMV3) ||
++      (oclass->in_plugin->id == CODEC_ID_VC1))
++    oclass->in_plugin->id = gst_ffmpeg_caps_to_codecid (caps, NULL);
++
++  /* close old session */
++  if (ffmpegdec->opened) {
++    GST_OBJECT_UNLOCK (ffmpegdec);
++    gst_ffmpegdec_drain (ffmpegdec);
++    GST_OBJECT_LOCK (ffmpegdec);
++    gst_ffmpegdec_close (ffmpegdec);
++
++    /* and reset the defaults that were set when a context is created */
++    avcodec_get_context_defaults (ffmpegdec->context);
++  }
++
++  /* set buffer functions */
++  ffmpegdec->context->get_buffer = gst_ffmpegdec_get_buffer;
++  ffmpegdec->context->release_buffer = gst_ffmpegdec_release_buffer;
++  ffmpegdec->context->draw_horiz_band = NULL;
++
++  /* default is to let format decide if it needs a parser */
++  ffmpegdec->turnoff_parser = FALSE;
++
++  ffmpegdec->has_b_frames = FALSE;
++
++  GST_LOG_OBJECT (ffmpegdec, "size %dx%d", ffmpegdec->context->width,
++      ffmpegdec->context->height);
++
++  /* get size and so */
++  gst_ffmpeg_caps_with_codecid (oclass->in_plugin->id,
++      oclass->in_plugin->type, caps, ffmpegdec->context);
++
++  GST_LOG_OBJECT (ffmpegdec, "size after %dx%d", ffmpegdec->context->width,
++      ffmpegdec->context->height);
++
++  if (!ffmpegdec->context->time_base.den || !ffmpegdec->context->time_base.num) {
++    GST_DEBUG_OBJECT (ffmpegdec, "forcing 25/1 framerate");
++    ffmpegdec->context->time_base.num = 1;
++    ffmpegdec->context->time_base.den = 25;
++  }
++
++  /* get pixel aspect ratio if it's set */
++  structure = gst_caps_get_structure (caps, 0);
++
++  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
++  if (par) {
++    GST_DEBUG_OBJECT (ffmpegdec, "sink caps have pixel-aspect-ratio of %d:%d",
++        gst_value_get_fraction_numerator (par),
++        gst_value_get_fraction_denominator (par));
++    /* should be NULL */
++    if (ffmpegdec->par)
++      g_free (ffmpegdec->par);
++    ffmpegdec->par = g_new0 (GValue, 1);
++    gst_value_init_and_copy (ffmpegdec->par, par);
++  }
++
++  /* get the framerate from incoming caps. fps_n is set to -1 when
++   * there is no valid framerate */
++  fps = gst_structure_get_value (structure, "framerate");
++  if (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps)) {
++    ffmpegdec->format.video.fps_n = gst_value_get_fraction_numerator (fps);
++    ffmpegdec->format.video.fps_d = gst_value_get_fraction_denominator (fps);
++    GST_DEBUG_OBJECT (ffmpegdec, "Using framerate %d/%d from incoming caps",
++        ffmpegdec->format.video.fps_n, ffmpegdec->format.video.fps_d);
++  } else {
++    ffmpegdec->format.video.fps_n = -1;
++    GST_DEBUG_OBJECT (ffmpegdec, "Using framerate from codec");
++  }
++
++  /* figure out if we can use direct rendering */
++  ffmpegdec->current_dr = FALSE;
++  ffmpegdec->extra_ref = FALSE;
++  if (ffmpegdec->direct_rendering) {
++    GST_DEBUG_OBJECT (ffmpegdec, "trying to enable direct rendering");
++    if (oclass->in_plugin->capabilities & CODEC_CAP_DR1) {
++      if (oclass->in_plugin->id == CODEC_ID_H264) {
++        GST_DEBUG_OBJECT (ffmpegdec, "disable direct rendering setup for H264");
++        /* does not work, many stuff reads outside of the planes */
++        ffmpegdec->current_dr = FALSE;
++        ffmpegdec->extra_ref = TRUE;
++      } else if ((oclass->in_plugin->id == CODEC_ID_SVQ1) ||
++          (oclass->in_plugin->id == CODEC_ID_VP5) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6F) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6A)) {
++        GST_DEBUG_OBJECT (ffmpegdec,
++            "disable direct rendering setup for broken stride support");
++        /* does not work, uses a incompatible stride. See #610613 */
++        ffmpegdec->current_dr = FALSE;
++        ffmpegdec->extra_ref = TRUE;
++      } else {
++        GST_DEBUG_OBJECT (ffmpegdec, "enabled direct rendering");
++        ffmpegdec->current_dr = TRUE;
++      }
++    } else {
++      GST_DEBUG_OBJECT (ffmpegdec, "direct rendering not supported");
++    }
++  }
++  if (ffmpegdec->current_dr) {
++    /* do *not* draw edges when in direct rendering, for some reason it draws
++     * outside of the memory. */
++    ffmpegdec->context->flags |= CODEC_FLAG_EMU_EDGE;
++  }
++
++  /* for AAC we only use av_parse if not on stream-format==raw or ==loas */
++  if (oclass->in_plugin->id == CODEC_ID_AAC
++      || oclass->in_plugin->id == CODEC_ID_AAC_LATM) {
++    const gchar *format = gst_structure_get_string (structure, "stream-format");
++
++    if (format == NULL || strcmp (format, "raw") == 0) {
++      ffmpegdec->turnoff_parser = TRUE;
++    }
++  }
++
++  /* for FLAC, don't parse if it's already parsed */
++  if (oclass->in_plugin->id == CODEC_ID_FLAC) {
++    if (gst_structure_has_field (structure, "streamheader"))
++      ffmpegdec->turnoff_parser = TRUE;
++  }
++
++  /* workaround encoder bugs */
++  ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
++  ffmpegdec->context->err_recognition = 1;
++
++  /* for slow cpus */
++  ffmpegdec->context->lowres = ffmpegdec->lowres;
++  ffmpegdec->context->skip_frame = ffmpegdec->skip_frame;
++
++  /* ffmpeg can draw motion vectors on top of the image (not every decoder
++   * supports it) */
++  ffmpegdec->context->debug_mv = ffmpegdec->debug_mv;
++
++  if (ffmpegdec->max_threads == 0)
++    ffmpegdec->context->thread_count = gst_ffmpeg_auto_max_threads ();
++  else
++    ffmpegdec->context->thread_count = ffmpegdec->max_threads;
++
++  /* open codec - we don't select an output pix_fmt yet,
++   * simply because we don't know! We only get it
++   * during playback... */
++  if (!gst_ffmpegdec_open (ffmpegdec))
++    goto open_failed;
++
++  /* clipping region */
++  gst_structure_get_int (structure, "width",
++      &ffmpegdec->format.video.clip_width);
++  gst_structure_get_int (structure, "height",
++      &ffmpegdec->format.video.clip_height);
++
++  GST_DEBUG_OBJECT (pad, "clipping to %dx%d",
++      ffmpegdec->format.video.clip_width, ffmpegdec->format.video.clip_height);
++
++  /* take into account the lowres property */
++  if (ffmpegdec->format.video.clip_width != -1)
++    ffmpegdec->format.video.clip_width >>= ffmpegdec->lowres;
++  if (ffmpegdec->format.video.clip_height != -1)
++    ffmpegdec->format.video.clip_height >>= ffmpegdec->lowres;
++
++  GST_DEBUG_OBJECT (pad, "final clipping to %dx%d",
++      ffmpegdec->format.video.clip_width, ffmpegdec->format.video.clip_height);
++
++done:
++  GST_OBJECT_UNLOCK (ffmpegdec);
++
++  gst_object_unref (ffmpegdec);
++
++  return ret;
++
++  /* ERRORS */
++open_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "Failed to open");
++    if (ffmpegdec->par) {
++      g_free (ffmpegdec->par);
++      ffmpegdec->par = NULL;
++    }
++    ret = FALSE;
++    goto done;
++  }
++}
++
++static GstFlowReturn
++alloc_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf,
++    gint width, gint height)
++{
++  GstFlowReturn ret;
++  gint fsize;
++
++  ret = GST_FLOW_ERROR;
++  *outbuf = NULL;
++
++  GST_LOG_OBJECT (ffmpegdec, "alloc output buffer");
++
++  /* see if we need renegotiation */
++  if (G_UNLIKELY (!gst_ffmpegdec_negotiate (ffmpegdec, FALSE)))
++    goto negotiate_failed;
++
++  /* get the size of the gstreamer output buffer given a
++   * width/height/format */
++  fsize = gst_ffmpeg_avpicture_get_size (ffmpegdec->context->pix_fmt,
++      width, height);
++
++  if (ffmpegdec->can_allocate_aligned) {
++    GST_LOG_OBJECT (ffmpegdec, "calling pad_alloc");
++    /* no pallete, we can use the buffer size to alloc */
++    ret = gst_pad_alloc_buffer_and_set_caps (ffmpegdec->srcpad,
++        GST_BUFFER_OFFSET_NONE, fsize,
++        GST_PAD_CAPS (ffmpegdec->srcpad), outbuf);
++    if (G_UNLIKELY (ret != GST_FLOW_OK))
++      goto alloc_failed;
++
++    /* If buffer isn't 128-bit aligned, create a memaligned one ourselves */
++    if (((uintptr_t) GST_BUFFER_DATA (*outbuf)) % 16) {
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Downstream can't allocate aligned buffers.");
++      ffmpegdec->can_allocate_aligned = FALSE;
++      gst_buffer_unref (*outbuf);
++      *outbuf = new_aligned_buffer (fsize, GST_PAD_CAPS (ffmpegdec->srcpad));
++    }
++  } else {
++    GST_LOG_OBJECT (ffmpegdec,
++        "not calling pad_alloc, we have a pallete or downstream can't give 16 byte aligned buffers.");
++    /* for paletted data we can't use pad_alloc_buffer(), because
++     * fsize contains the size of the palette, so the overall size
++     * is bigger than ffmpegcolorspace's unit size, which will
++     * prompt GstBaseTransform to complain endlessly ... */
++    *outbuf = new_aligned_buffer (fsize, GST_PAD_CAPS (ffmpegdec->srcpad));
++    ret = GST_FLOW_OK;
++  }
++  /* set caps, we do this here because the buffer is still writable here and we
++   * are sure to be negotiated */
++  gst_buffer_set_caps (*outbuf, GST_PAD_CAPS (ffmpegdec->srcpad));
++
++  return ret;
++
++  /* special cases */
++negotiate_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "negotiate failed");
++    return GST_FLOW_NOT_NEGOTIATED;
++  }
++alloc_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "pad_alloc failed %d (%s)", ret,
++        gst_flow_get_name (ret));
++    return ret;
++  }
++}
++
++static int
++gst_ffmpegdec_get_buffer (AVCodecContext * context, AVFrame * picture)
++{
++  GstBuffer *buf = NULL;
++  GstFFMpegDec *ffmpegdec;
++  gint width, height;
++  gint coded_width, coded_height;
++  gint res;
++
++  ffmpegdec = (GstFFMpegDec *) context->opaque;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "getting buffer");
++
++  /* apply the last info we have seen to this picture, when we get the
++   * picture back from ffmpeg we can use this to correctly timestamp the output
++   * buffer */
++  picture->reordered_opaque = context->reordered_opaque;
++  /* make sure we don't free the buffer when it's not ours */
++  picture->opaque = NULL;
++
++  /* take width and height before clipping */
++  width = context->width;
++  height = context->height;
++  coded_width = context->coded_width;
++  coded_height = context->coded_height;
++
++  GST_LOG_OBJECT (ffmpegdec, "dimension %dx%d, coded %dx%d", width, height,
++      coded_width, coded_height);
++  if (!ffmpegdec->current_dr) {
++    GST_LOG_OBJECT (ffmpegdec, "direct rendering disabled, fallback alloc");
++    res = avcodec_default_get_buffer (context, picture);
++
++    GST_LOG_OBJECT (ffmpegdec, "linsize %d %d %d", picture->linesize[0],
++        picture->linesize[1], picture->linesize[2]);
++    GST_LOG_OBJECT (ffmpegdec, "data %u %u %u", 0,
++        (guint) (picture->data[1] - picture->data[0]),
++        (guint) (picture->data[2] - picture->data[0]));
++    return res;
++  }
++
++  switch (context->codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      /* some ffmpeg video plugins don't see the point in setting codec_type ... */
++    case AVMEDIA_TYPE_UNKNOWN:
++    {
++      GstFlowReturn ret;
++      gint clip_width, clip_height;
++
++      /* take final clipped output size */
++      if ((clip_width = ffmpegdec->format.video.clip_width) == -1)
++        clip_width = width;
++      if ((clip_height = ffmpegdec->format.video.clip_height) == -1)
++        clip_height = height;
++
++      GST_LOG_OBJECT (ffmpegdec, "raw outsize %d/%d", width, height);
++
++      /* this is the size ffmpeg needs for the buffer */
++      avcodec_align_dimensions (context, &width, &height);
++
++      GST_LOG_OBJECT (ffmpegdec, "aligned outsize %d/%d, clip %d/%d",
++          width, height, clip_width, clip_height);
++
++      if (width != clip_width || height != clip_height) {
++        /* We can't alloc if we need to clip the output buffer later */
++        GST_LOG_OBJECT (ffmpegdec, "we need clipping, fallback alloc");
++        return avcodec_default_get_buffer (context, picture);
++      }
++
++      /* alloc with aligned dimensions for ffmpeg */
++      ret = alloc_output_buffer (ffmpegdec, &buf, width, height);
++      if (G_UNLIKELY (ret != GST_FLOW_OK)) {
++        /* alloc default buffer when we can't get one from downstream */
++        GST_LOG_OBJECT (ffmpegdec, "alloc failed, fallback alloc");
++        return avcodec_default_get_buffer (context, picture);
++      }
++
++      /* copy the right pointers and strides in the picture object */
++      gst_ffmpeg_avpicture_fill ((AVPicture *) picture,
++          GST_BUFFER_DATA (buf), context->pix_fmt, width, height);
++      break;
++    }
++    case AVMEDIA_TYPE_AUDIO:
++    default:
++      GST_ERROR_OBJECT (ffmpegdec,
++          "_get_buffer() should never get called for non-video buffers !");
++      g_assert_not_reached ();
++      break;
++  }
++
++  /* tell ffmpeg we own this buffer, tranfer the ref we have on the buffer to
++   * the opaque data. */
++  picture->type = FF_BUFFER_TYPE_USER;
++  picture->opaque = buf;
++
++#ifdef EXTRA_REF
++  if (picture->reference != 0 || ffmpegdec->extra_ref) {
++    GST_DEBUG_OBJECT (ffmpegdec, "adding extra ref");
++    gst_buffer_ref (buf);
++  }
++#endif
++
++  GST_LOG_OBJECT (ffmpegdec, "returned buffer %p", buf);
++
++  return 0;
++}
++
++static void
++gst_ffmpegdec_release_buffer (AVCodecContext * context, AVFrame * picture)
++{
++  gint i;
++  GstBuffer *buf;
++  GstFFMpegDec *ffmpegdec;
++
++  ffmpegdec = (GstFFMpegDec *) context->opaque;
++
++  /* check if it was our buffer */
++  if (picture->opaque == NULL) {
++    GST_DEBUG_OBJECT (ffmpegdec, "default release buffer");
++    avcodec_default_release_buffer (context, picture);
++    return;
++  }
++
++  /* we remove the opaque data now */
++  buf = GST_BUFFER_CAST (picture->opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "release buffer %p", buf);
++  picture->opaque = NULL;
++
++#ifdef EXTRA_REF
++  if (picture->reference != 0 || ffmpegdec->extra_ref) {
++    GST_DEBUG_OBJECT (ffmpegdec, "remove extra ref");
++    gst_buffer_unref (buf);
++  }
++#else
++  gst_buffer_unref (buf);
++#endif
++
++  /* zero out the reference in ffmpeg */
++  for (i = 0; i < 4; i++) {
++    picture->data[i] = NULL;
++    picture->linesize[i] = 0;
++  }
++}
++
++static void
++gst_ffmpegdec_add_pixel_aspect_ratio (GstFFMpegDec * ffmpegdec,
++    GstStructure * s)
++{
++  gboolean demuxer_par_set = FALSE;
++  gboolean decoder_par_set = FALSE;
++  gint demuxer_num = 1, demuxer_denom = 1;
++  gint decoder_num = 1, decoder_denom = 1;
++
++  GST_OBJECT_LOCK (ffmpegdec);
++
++  if (ffmpegdec->par) {
++    demuxer_num = gst_value_get_fraction_numerator (ffmpegdec->par);
++    demuxer_denom = gst_value_get_fraction_denominator (ffmpegdec->par);
++    demuxer_par_set = TRUE;
++    GST_DEBUG_OBJECT (ffmpegdec, "Demuxer PAR: %d:%d", demuxer_num,
++        demuxer_denom);
++  }
++
++  if (ffmpegdec->context->sample_aspect_ratio.num &&
++      ffmpegdec->context->sample_aspect_ratio.den) {
++    decoder_num = ffmpegdec->context->sample_aspect_ratio.num;
++    decoder_denom = ffmpegdec->context->sample_aspect_ratio.den;
++    decoder_par_set = TRUE;
++    GST_DEBUG_OBJECT (ffmpegdec, "Decoder PAR: %d:%d", decoder_num,
++        decoder_denom);
++  }
++
++  GST_OBJECT_UNLOCK (ffmpegdec);
++
++  if (!demuxer_par_set && !decoder_par_set)
++    goto no_par;
++
++  if (demuxer_par_set && !decoder_par_set)
++    goto use_demuxer_par;
++
++  if (decoder_par_set && !demuxer_par_set)
++    goto use_decoder_par;
++
++  /* Both the demuxer and the decoder provide a PAR. If one of
++   * the two PARs is 1:1 and the other one is not, use the one
++   * that is not 1:1. */
++  if (demuxer_num == demuxer_denom && decoder_num != decoder_denom)
++    goto use_decoder_par;
++
++  if (decoder_num == decoder_denom && demuxer_num != demuxer_denom)
++    goto use_demuxer_par;
++
++  /* Both PARs are non-1:1, so use the PAR provided by the demuxer */
++  goto use_demuxer_par;
++
++use_decoder_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Setting decoder provided pixel-aspect-ratio of %u:%u", decoder_num,
++        decoder_denom);
++    gst_structure_set (s, "pixel-aspect-ratio", GST_TYPE_FRACTION, decoder_num,
++        decoder_denom, NULL);
++    return;
++  }
++
++use_demuxer_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Setting demuxer provided pixel-aspect-ratio of %u:%u", demuxer_num,
++        demuxer_denom);
++    gst_structure_set (s, "pixel-aspect-ratio", GST_TYPE_FRACTION, demuxer_num,
++        demuxer_denom, NULL);
++    return;
++  }
++no_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Neither demuxer nor codec provide a pixel-aspect-ratio");
++    return;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec, gboolean force)
++{
++  GstFFMpegDecClass *oclass;
++  GstCaps *caps;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      if (!force && ffmpegdec->format.video.width == ffmpegdec->context->width
++          && ffmpegdec->format.video.height == ffmpegdec->context->height
++          && ffmpegdec->format.video.fps_n == ffmpegdec->format.video.old_fps_n
++          && ffmpegdec->format.video.fps_d == ffmpegdec->format.video.old_fps_d
++          && ffmpegdec->format.video.pix_fmt == ffmpegdec->context->pix_fmt
++          && ffmpegdec->format.video.par_n ==
++          ffmpegdec->context->sample_aspect_ratio.num
++          && ffmpegdec->format.video.par_d ==
++          ffmpegdec->context->sample_aspect_ratio.den)
++        return TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Renegotiating video from %dx%d@ %d:%d PAR %d/%d fps to %dx%d@ %d:%d PAR %d/%d fps",
++          ffmpegdec->format.video.width, ffmpegdec->format.video.height,
++          ffmpegdec->format.video.par_n, ffmpegdec->format.video.par_d,
++          ffmpegdec->format.video.old_fps_n, ffmpegdec->format.video.old_fps_n,
++          ffmpegdec->context->width, ffmpegdec->context->height,
++          ffmpegdec->context->sample_aspect_ratio.num,
++          ffmpegdec->context->sample_aspect_ratio.den,
++          ffmpegdec->format.video.fps_n, ffmpegdec->format.video.fps_d);
++      ffmpegdec->format.video.width = ffmpegdec->context->width;
++      ffmpegdec->format.video.height = ffmpegdec->context->height;
++      ffmpegdec->format.video.old_fps_n = ffmpegdec->format.video.fps_n;
++      ffmpegdec->format.video.old_fps_d = ffmpegdec->format.video.fps_d;
++      ffmpegdec->format.video.pix_fmt = ffmpegdec->context->pix_fmt;
++      ffmpegdec->format.video.par_n =
++          ffmpegdec->context->sample_aspect_ratio.num;
++      ffmpegdec->format.video.par_d =
++          ffmpegdec->context->sample_aspect_ratio.den;
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++    {
++      gint depth = av_smp_format_depth (ffmpegdec->context->sample_fmt);
++      if (!force && ffmpegdec->format.audio.samplerate ==
++          ffmpegdec->context->sample_rate &&
++          ffmpegdec->format.audio.channels == ffmpegdec->context->channels &&
++          ffmpegdec->format.audio.depth == depth)
++        return TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Renegotiating audio from %dHz@%dchannels (%d) to %dHz@%dchannels (%d)",
++          ffmpegdec->format.audio.samplerate, ffmpegdec->format.audio.channels,
++          ffmpegdec->format.audio.depth,
++          ffmpegdec->context->sample_rate, ffmpegdec->context->channels, depth);
++      ffmpegdec->format.audio.samplerate = ffmpegdec->context->sample_rate;
++      ffmpegdec->format.audio.channels = ffmpegdec->context->channels;
++      ffmpegdec->format.audio.depth = depth;
++    }
++      break;
++    default:
++      break;
++  }
++
++  caps = gst_ffmpeg_codectype_to_caps (oclass->in_plugin->type,
++      ffmpegdec->context, oclass->in_plugin->id, FALSE);
++
++  if (caps == NULL)
++    goto no_caps;
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++    {
++      gint width, height;
++      gboolean interlaced;
++
++      width = ffmpegdec->format.video.clip_width;
++      height = ffmpegdec->format.video.clip_height;
++      interlaced = ffmpegdec->format.video.interlaced;
++
++      if (width != -1 && height != -1) {
++        /* overwrite the output size with the dimension of the
++         * clipping region but only if they are smaller. */
++        if (width < ffmpegdec->context->width)
++          gst_caps_set_simple (caps, "width", G_TYPE_INT, width, NULL);
++        if (height < ffmpegdec->context->height)
++          gst_caps_set_simple (caps, "height", G_TYPE_INT, height, NULL);
++      }
++      gst_caps_set_simple (caps, "interlaced", G_TYPE_BOOLEAN, interlaced,
++          NULL);
++
++      /* If a demuxer provided a framerate then use it (#313970) */
++      if (ffmpegdec->format.video.fps_n != -1) {
++        gst_caps_set_simple (caps, "framerate",
++            GST_TYPE_FRACTION, ffmpegdec->format.video.fps_n,
++            ffmpegdec->format.video.fps_d, NULL);
++      }
++      gst_ffmpegdec_add_pixel_aspect_ratio (ffmpegdec,
++          gst_caps_get_structure (caps, 0));
++      break;
++    }
++    case AVMEDIA_TYPE_AUDIO:
++    {
++      break;
++    }
++    default:
++      break;
++  }
++
++  if (!gst_pad_set_caps (ffmpegdec->srcpad, caps))
++    goto caps_failed;
++
++  gst_caps_unref (caps);
++
++  return TRUE;
++
++  /* ERRORS */
++no_caps:
++  {
++#ifdef HAVE_FFMPEG_UNINSTALLED
++    /* using internal ffmpeg snapshot */
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION,
++        ("Could not find GStreamer caps mapping for FFmpeg codec '%s'.",
++            oclass->in_plugin->name), (NULL));
++#else
++    /* using external ffmpeg */
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION,
++        ("Could not find GStreamer caps mapping for FFmpeg codec '%s', and "
++            "you are using an external libavcodec. This is most likely due to "
++            "a packaging problem and/or libavcodec having been upgraded to a "
++            "version that is not compatible with this version of "
++            "gstreamer-ffmpeg. Make sure your gstreamer-ffmpeg and libavcodec "
++            "packages come from the same source/repository.",
++            oclass->in_plugin->name), (NULL));
++#endif
++    return FALSE;
++  }
++caps_failed:
++  {
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION, (NULL),
++        ("Could not set caps for ffmpeg decoder (%s), not fixed?",
++            oclass->in_plugin->name));
++    gst_caps_unref (caps);
++
++    return FALSE;
++  }
++}
++
++/* perform qos calculations before decoding the next frame.
++ *
++ * Sets the skip_frame flag and if things are really bad, skips to the next
++ * keyframe.
++ * 
++ * Returns TRUE if the frame should be decoded, FALSE if the frame can be dropped
++ * entirely.
++ */
++static gboolean
++gst_ffmpegdec_do_qos (GstFFMpegDec * ffmpegdec, GstClockTime timestamp,
++    gboolean * mode_switch)
++{
++  GstClockTimeDiff diff;
++  gdouble proportion;
++  GstClockTime qostime, earliest_time;
++  gboolean res = TRUE;
++
++  *mode_switch = FALSE;
++
++  /* no timestamp, can't do QoS */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp)))
++    goto no_qos;
++
++  /* get latest QoS observation values */
++  gst_ffmpegdec_read_qos (ffmpegdec, &proportion, &earliest_time);
++
++  /* skip qos if we have no observation (yet) */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (earliest_time))) {
++    /* no skip_frame initialy */
++    ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
++    goto no_qos;
++  }
++
++  /* qos is done on running time of the timestamp */
++  qostime = gst_segment_to_running_time (&ffmpegdec->segment, GST_FORMAT_TIME,
++      timestamp);
++
++  /* timestamp can be out of segment, then we don't do QoS */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (qostime)))
++    goto no_qos;
++
++  /* see how our next timestamp relates to the latest qos timestamp. negative
++   * values mean we are early, positive values mean we are too late. */
++  diff = GST_CLOCK_DIFF (qostime, earliest_time);
++
++  GST_DEBUG_OBJECT (ffmpegdec, "QOS: qostime %" GST_TIME_FORMAT
++      ", earliest %" GST_TIME_FORMAT, GST_TIME_ARGS (qostime),
++      GST_TIME_ARGS (earliest_time));
++
++  /* if we using less than 40% of the available time, we can try to
++   * speed up again when we were slow. */
++  if (proportion < 0.4 && diff < 0) {
++    goto normal_mode;
++  } else {
++    if (diff >= 0) {
++      /* we're too slow, try to speed up */
++      /* switch to skip_frame mode */
++      goto skip_frame;
++    }
++  }
++
++no_qos:
++  ffmpegdec->processed++;
++  return TRUE;
++
++normal_mode:
++  {
++    if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
++      ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
++      *mode_switch = TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec, "QOS: normal mode %g < 0.4", proportion);
++    }
++    ffmpegdec->processed++;
++    return TRUE;
++  }
++skip_frame:
++  {
++    if (ffmpegdec->context->skip_frame != AVDISCARD_NONREF) {
++      ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
++      *mode_switch = TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "QOS: hurry up, diff %" G_GINT64_FORMAT " >= 0", diff);
++    }
++    goto drop_qos;
++  }
++drop_qos:
++  {
++    GstClockTime stream_time, jitter;
++    GstMessage *qos_msg;
++
++    ffmpegdec->dropped++;
++    stream_time =
++        gst_segment_to_stream_time (&ffmpegdec->segment, GST_FORMAT_TIME,
++        timestamp);
++    jitter = GST_CLOCK_DIFF (qostime, earliest_time);
++    qos_msg =
++        gst_message_new_qos (GST_OBJECT_CAST (ffmpegdec), FALSE, qostime,
++        stream_time, timestamp, GST_CLOCK_TIME_NONE);
++    gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
++    gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
++        ffmpegdec->processed, ffmpegdec->dropped);
++    gst_element_post_message (GST_ELEMENT_CAST (ffmpegdec), qos_msg);
++
++    return res;
++  }
++}
++
++/* returns TRUE if buffer is within segment, else FALSE.
++ * if Buffer is on segment border, it's timestamp and duration will be clipped */
++static gboolean
++clip_video_buffer (GstFFMpegDec * dec, GstBuffer * buf, GstClockTime in_ts,
++    GstClockTime in_dur)
++{
++  gboolean res = TRUE;
++  gint64 cstart, cstop;
++  GstClockTime stop;
++
++  GST_LOG_OBJECT (dec,
++      "timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT,
++      GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur));
++
++  /* can't clip without TIME segment */
++  if (G_UNLIKELY (dec->segment.format != GST_FORMAT_TIME))
++    goto beach;
++
++  /* we need a start time */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (in_ts)))
++    goto beach;
++
++  /* generate valid stop, if duration unknown, we have unknown stop */
++  stop =
++      GST_CLOCK_TIME_IS_VALID (in_dur) ? (in_ts + in_dur) : GST_CLOCK_TIME_NONE;
++
++  /* now clip */
++  res =
++      gst_segment_clip (&dec->segment, GST_FORMAT_TIME, in_ts, stop, &cstart,
++      &cstop);
++  if (G_UNLIKELY (!res))
++    goto beach;
++
++  /* we're pretty sure the duration of this buffer is not till the end of this
++   * segment (which _clip will assume when the stop is -1) */
++  if (stop == GST_CLOCK_TIME_NONE)
++    cstop = GST_CLOCK_TIME_NONE;
++
++  /* update timestamp and possibly duration if the clipped stop time is
++   * valid */
++  GST_BUFFER_TIMESTAMP (buf) = cstart;
++  if (GST_CLOCK_TIME_IS_VALID (cstop))
++    GST_BUFFER_DURATION (buf) = cstop - cstart;
++
++  GST_LOG_OBJECT (dec,
++      "clipped timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT,
++      GST_TIME_ARGS (cstart), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
++
++beach:
++  GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : ""));
++  return res;
++}
++
++
++/* get an outbuf buffer with the current picture */
++static GstFlowReturn
++get_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf)
++{
++  GstFlowReturn ret;
++
++  ret = GST_FLOW_OK;
++  *outbuf = NULL;
++
++  if (ffmpegdec->picture->opaque != NULL) {
++    /* we allocated a picture already for ffmpeg to decode into, let's pick it
++     * up and use it now. */
++    *outbuf = (GstBuffer *) ffmpegdec->picture->opaque;
++    GST_LOG_OBJECT (ffmpegdec, "using opaque buffer %p", *outbuf);
++#ifndef EXTRA_REF
++    gst_buffer_ref (*outbuf);
++#endif
++  } else {
++    AVPicture pic, *outpic;
++    gint width, height;
++
++    GST_LOG_OBJECT (ffmpegdec, "get output buffer");
++
++    /* figure out size of output buffer, this is the clipped output size because
++     * we will copy the picture into it but only when the clipping region is
++     * smaller than the actual picture size. */
++    if ((width = ffmpegdec->format.video.clip_width) == -1)
++      width = ffmpegdec->context->width;
++    else if (width > ffmpegdec->context->width)
++      width = ffmpegdec->context->width;
++
++    if ((height = ffmpegdec->format.video.clip_height) == -1)
++      height = ffmpegdec->context->height;
++    else if (height > ffmpegdec->context->height)
++      height = ffmpegdec->context->height;
++
++    GST_LOG_OBJECT (ffmpegdec, "clip width %d/height %d", width, height);
++
++    ret = alloc_output_buffer (ffmpegdec, outbuf, width, height);
++    if (G_UNLIKELY (ret != GST_FLOW_OK))
++      goto alloc_failed;
++
++    /* original ffmpeg code does not handle odd sizes correctly.
++     * This patched up version does */
++    gst_ffmpeg_avpicture_fill (&pic, GST_BUFFER_DATA (*outbuf),
++        ffmpegdec->context->pix_fmt, width, height);
++
++    outpic = (AVPicture *) ffmpegdec->picture;
++
++    GST_LOG_OBJECT (ffmpegdec, "linsize %d %d %d", outpic->linesize[0],
++        outpic->linesize[1], outpic->linesize[2]);
++    GST_LOG_OBJECT (ffmpegdec, "data %u %u %u", 0,
++        (guint) (outpic->data[1] - outpic->data[0]),
++        (guint) (outpic->data[2] - outpic->data[0]));
++
++    av_picture_copy (&pic, outpic, ffmpegdec->context->pix_fmt, width, height);
++  }
++  ffmpegdec->picture->reordered_opaque = -1;
++
++  return ret;
++
++  /* special cases */
++alloc_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "pad_alloc failed");
++    return ret;
++  }
++}
++
++static void
++clear_queued (GstFFMpegDec * ffmpegdec)
++{
++  g_list_foreach (ffmpegdec->queued, (GFunc) gst_mini_object_unref, NULL);
++  g_list_free (ffmpegdec->queued);
++  ffmpegdec->queued = NULL;
++}
++
++static GstFlowReturn
++flush_queued (GstFFMpegDec * ffmpegdec)
++{
++  GstFlowReturn res = GST_FLOW_OK;
++
++  while (ffmpegdec->queued) {
++    GstBuffer *buf = GST_BUFFER_CAST (ffmpegdec->queued->data);
++
++    GST_LOG_OBJECT (ffmpegdec, "pushing buffer %p, offset %"
++        G_GUINT64_FORMAT ", timestamp %"
++        GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, buf,
++        GST_BUFFER_OFFSET (buf),
++        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
++        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
++
++    /* iterate ouput queue an push downstream */
++    res = gst_pad_push (ffmpegdec->srcpad, buf);
++
++    ffmpegdec->queued =
++        g_list_delete_link (ffmpegdec->queued, ffmpegdec->queued);
++  }
++  return res;
++}
++
++static void
++gst_avpacket_init (AVPacket * packet, guint8 * data, guint size)
++{
++  memset (packet, 0, sizeof (AVPacket));
++  packet->data = data;
++  packet->size = size;
++}
++
++/* gst_ffmpegdec_[video|audio]_frame:
++ * ffmpegdec:
++ * data: pointer to the data to decode
++ * size: size of data in bytes
++ * in_timestamp: incoming timestamp.
++ * in_duration: incoming duration.
++ * in_offset: incoming offset (frame number).
++ * outbuf: outgoing buffer. Different from NULL ONLY if it contains decoded data.
++ * ret: Return flow.
++ *
++ * Returns: number of bytes used in decoding. The check for successful decode is
++ *   outbuf being non-NULL.
++ */
++static gint
++gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
++    guint8 * data, guint size,
++    const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
++{
++  gint len = -1;
++  gint have_data;
++  gboolean mode_switch;
++  gboolean decode;
++  gint skip_frame = AVDISCARD_DEFAULT;
++  GstClockTime out_timestamp, out_duration, out_pts;
++  gint64 out_offset;
++  const GstTSInfo *out_info;
++  AVPacket packet;
++
++  *ret = GST_FLOW_OK;
++  *outbuf = NULL;
++
++  ffmpegdec->context->opaque = ffmpegdec;
++
++  /* in case we skip frames */
++  ffmpegdec->picture->pict_type = -1;
++
++  /* run QoS code, we don't stop decoding the frame when we are late because
++   * else we might skip a reference frame */
++  decode = gst_ffmpegdec_do_qos (ffmpegdec, dec_info->timestamp, &mode_switch);
++
++  if (ffmpegdec->is_realvideo && data != NULL) {
++    gint slice_count;
++    gint i;
++
++    /* setup the slice table for realvideo */
++    if (ffmpegdec->context->slice_offset == NULL)
++      ffmpegdec->context->slice_offset = g_malloc (sizeof (guint32) * 1000);
++
++    slice_count = (*data++) + 1;
++    ffmpegdec->context->slice_count = slice_count;
++
++    for (i = 0; i < slice_count; i++) {
++      data += 4;
++      ffmpegdec->context->slice_offset[i] = GST_READ_UINT32_LE (data);
++      data += 4;
++    }
++  }
++
++  if (!decode) {
++    /* no decoding needed, save previous skip_frame value and brutely skip
++     * decoding everything */
++    skip_frame = ffmpegdec->context->skip_frame;
++    ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
++  }
++
++  /* save reference to the timing info */
++  ffmpegdec->context->reordered_opaque = (gint64) dec_info->idx;
++  ffmpegdec->picture->reordered_opaque = (gint64) dec_info->idx;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "stored opaque values idx %d", dec_info->idx);
++
++  /* now decode the frame */
++  gst_avpacket_init (&packet, data, size);
++  len = avcodec_decode_video2 (ffmpegdec->context,
++      ffmpegdec->picture, &have_data, &packet);
++
++  /* restore previous state */
++  if (!decode)
++    ffmpegdec->context->skip_frame = skip_frame;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d",
++      len, have_data);
++
++  /* when we are in skip_frame mode, don't complain when ffmpeg returned
++   * no data because we told it to skip stuff. */
++  if (len < 0 && (mode_switch || ffmpegdec->context->skip_frame))
++    len = 0;
++
++  if (len > 0 && have_data <= 0 && (mode_switch
++          || ffmpegdec->context->skip_frame)) {
++    /* we consumed some bytes but nothing decoded and we are skipping frames,
++     * disable the interpollation of DTS timestamps */
++    ffmpegdec->last_out = -1;
++  }
++
++  /* no data, we're done */
++  if (len < 0 || have_data <= 0)
++    goto beach;
++
++  /* get the output picture timing info again */
++  out_info = gst_ts_info_get (ffmpegdec, ffmpegdec->picture->reordered_opaque);
++  out_pts = out_info->timestamp;
++  out_duration = out_info->duration;
++  out_offset = out_info->offset;
++
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "pts %" G_GUINT64_FORMAT " duration %" G_GUINT64_FORMAT " offset %"
++      G_GINT64_FORMAT, out_pts, out_duration, out_offset);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: pts %" G_GUINT64_FORMAT,
++      (guint64) ffmpegdec->picture->pts);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: num %d",
++      ffmpegdec->picture->coded_picture_number);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: ref %d",
++      ffmpegdec->picture->reference);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: display %d",
++      ffmpegdec->picture->display_picture_number);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: opaque %p",
++      ffmpegdec->picture->opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: reordered opaque %" G_GUINT64_FORMAT,
++      (guint64) ffmpegdec->picture->reordered_opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "repeat_pict:%d",
++      ffmpegdec->picture->repeat_pict);
++  GST_DEBUG_OBJECT (ffmpegdec, "interlaced_frame:%d",
++      ffmpegdec->picture->interlaced_frame);
++
++  if (G_UNLIKELY (ffmpegdec->picture->interlaced_frame !=
++          ffmpegdec->format.video.interlaced)) {
++    GST_WARNING ("Change in interlacing ! picture:%d, recorded:%d",
++        ffmpegdec->picture->interlaced_frame,
++        ffmpegdec->format.video.interlaced);
++    ffmpegdec->format.video.interlaced = ffmpegdec->picture->interlaced_frame;
++    gst_ffmpegdec_negotiate (ffmpegdec, TRUE);
++  }
++
++  /* Whether a frame is interlaced or not is unknown at the time of
++     buffer allocation, so caps on the buffer in opaque will have
++     the previous frame's interlaced flag set. So if interlacedness
++     has changed since allocation, we update the buffer (if any)
++     caps now with the correct interlaced flag. */
++  if (ffmpegdec->picture->opaque != NULL) {
++    GstBuffer *buffer = ffmpegdec->picture->opaque;
++    if (GST_BUFFER_CAPS (buffer) && GST_PAD_CAPS (ffmpegdec->srcpad)) {
++      GstStructure *s = gst_caps_get_structure (GST_BUFFER_CAPS (buffer), 0);
++      gboolean interlaced;
++      gboolean found = gst_structure_get_boolean (s, "interlaced", &interlaced);
++      if (!found || (!!interlaced != !!ffmpegdec->format.video.interlaced)) {
++        GST_DEBUG_OBJECT (ffmpegdec,
++            "Buffer interlacing does not match pad, updating");
++        buffer = gst_buffer_make_metadata_writable (buffer);
++        gst_buffer_set_caps (buffer, GST_PAD_CAPS (ffmpegdec->srcpad));
++        ffmpegdec->picture->opaque = buffer;
++      }
++    }
++  }
++
++  /* check that the timestamps go upwards */
++  if (ffmpegdec->last_out != -1 && ffmpegdec->last_out > out_pts) {
++    /* timestamps go backwards, this means frames were reordered and we must
++     * be dealing with DTS as the buffer timestamps */
++    if (!ffmpegdec->reordered_out) {
++      GST_DEBUG_OBJECT (ffmpegdec, "detected reordered out timestamps");
++      ffmpegdec->reordered_out = TRUE;
++    }
++    if (ffmpegdec->reordered_in) {
++      /* we reset the input reordering here because we want to recover from an
++       * occasionally wrong reordered input timestamp */
++      GST_DEBUG_OBJECT (ffmpegdec, "assuming DTS input timestamps");
++      ffmpegdec->reordered_in = FALSE;
++    }
++  }
++
++  if (out_pts == 0 && out_pts == ffmpegdec->last_out) {
++    GST_LOG_OBJECT (ffmpegdec, "ffmpeg returns 0 timestamps, ignoring");
++    /* some codecs only output 0 timestamps, when that happens, make us select an
++     * output timestamp based on the input timestamp. We do this by making the
++     * ffmpeg timestamp and the interpollated next timestamp invalid. */
++    out_pts = -1;
++    ffmpegdec->next_out = -1;
++  } else
++    ffmpegdec->last_out = out_pts;
++
++  /* we assume DTS as input timestamps unless we see reordered input
++   * timestamps */
++  if (!ffmpegdec->reordered_in && ffmpegdec->reordered_out) {
++    /* PTS and DTS are the same for keyframes */
++    if (ffmpegdec->next_out != -1) {
++      /* interpolate all timestamps except for keyframes, FIXME, this is
++       * wrong when QoS is active. */
++      GST_DEBUG_OBJECT (ffmpegdec, "interpolate timestamps");
++      out_pts = -1;
++      out_offset = -1;
++    }
++  }
++
++  /* get a handle to the output buffer */
++  *ret = get_output_buffer (ffmpegdec, outbuf);
++  if (G_UNLIKELY (*ret != GST_FLOW_OK))
++    goto no_output;
++
++  /*
++   * Timestamps:
++   *
++   *  1) Copy picture timestamp if valid
++   *  2) else interpolate from previous output timestamp
++   *  3) else copy input timestamp
++   */
++  out_timestamp = -1;
++  if (out_pts != -1) {
++    /* Get (interpolated) timestamp from FFMPEG */
++    out_timestamp = (GstClockTime) out_pts;
++    GST_LOG_OBJECT (ffmpegdec, "using timestamp %" GST_TIME_FORMAT
++        " returned by ffmpeg", GST_TIME_ARGS (out_timestamp));
++  }
++  if (!GST_CLOCK_TIME_IS_VALID (out_timestamp) && ffmpegdec->next_out != -1) {
++    out_timestamp = ffmpegdec->next_out;
++    GST_LOG_OBJECT (ffmpegdec, "using next timestamp %" GST_TIME_FORMAT,
++        GST_TIME_ARGS (out_timestamp));
++  }
++  if (!GST_CLOCK_TIME_IS_VALID (out_timestamp)) {
++    out_timestamp = dec_info->timestamp;
++    GST_LOG_OBJECT (ffmpegdec, "using in timestamp %" GST_TIME_FORMAT,
++        GST_TIME_ARGS (out_timestamp));
++  }
++  GST_BUFFER_TIMESTAMP (*outbuf) = out_timestamp;
++
++  /*
++   * Offset:
++   *  0) Use stored input offset (from opaque)
++   *  1) Use value converted from timestamp if valid
++   *  2) Use input offset if valid
++   */
++  if (out_offset != GST_BUFFER_OFFSET_NONE) {
++    /* out_offset already contains the offset from ts_info */
++    GST_LOG_OBJECT (ffmpegdec, "Using offset returned by ffmpeg");
++  } else if (out_timestamp != GST_CLOCK_TIME_NONE) {
++    GstFormat out_fmt = GST_FORMAT_DEFAULT;
++    GST_LOG_OBJECT (ffmpegdec, "Using offset converted from timestamp");
++    /* FIXME, we should really remove this as it's not nice at all to do
++     * upstream queries for each frame to get the frame offset. We also can't
++     * really remove this because it is the only way of setting frame offsets
++     * on outgoing buffers. We should have metadata so that the upstream peer
++     * can set a frame number on the encoded data. */
++    gst_pad_query_peer_convert (ffmpegdec->sinkpad,
++        GST_FORMAT_TIME, out_timestamp, &out_fmt, &out_offset);
++  } else if (dec_info->offset != GST_BUFFER_OFFSET_NONE) {
++    /* FIXME, the input offset is input media specific and might not
++     * be the same for the output media. (byte offset as input, frame number
++     * as output, for example) */
++    GST_LOG_OBJECT (ffmpegdec, "using in_offset %" G_GINT64_FORMAT,
++        dec_info->offset);
++    out_offset = dec_info->offset;
++  } else {
++    GST_LOG_OBJECT (ffmpegdec, "no valid offset found");
++    out_offset = GST_BUFFER_OFFSET_NONE;
++  }
++  GST_BUFFER_OFFSET (*outbuf) = out_offset;
++
++  /*
++   * Duration:
++   *
++   *  1) Use reordered input duration if valid
++   *  2) Else use input duration
++   *  3) else use input framerate
++   *  4) else use ffmpeg framerate
++   */
++  if (GST_CLOCK_TIME_IS_VALID (out_duration)) {
++    /* We have a valid (reordered) duration */
++    GST_LOG_OBJECT (ffmpegdec, "Using duration returned by ffmpeg");
++  } else if (GST_CLOCK_TIME_IS_VALID (dec_info->duration)) {
++    GST_LOG_OBJECT (ffmpegdec, "using in_duration");
++    out_duration = dec_info->duration;
++  } else if (GST_CLOCK_TIME_IS_VALID (ffmpegdec->last_diff)) {
++    GST_LOG_OBJECT (ffmpegdec, "using last-diff");
++    out_duration = ffmpegdec->last_diff;
++  } else {
++    /* if we have an input framerate, use that */
++    if (ffmpegdec->format.video.fps_n != -1 &&
++        (ffmpegdec->format.video.fps_n != 1000 &&
++            ffmpegdec->format.video.fps_d != 1)) {
++      GST_LOG_OBJECT (ffmpegdec, "using input framerate for duration");
++      out_duration = gst_util_uint64_scale_int (GST_SECOND,
++          ffmpegdec->format.video.fps_d, ffmpegdec->format.video.fps_n);
++    } else {
++      /* don't try to use the decoder's framerate when it seems a bit abnormal,
++       * which we assume when den >= 1000... */
++      if (ffmpegdec->context->time_base.num != 0 &&
++          (ffmpegdec->context->time_base.den > 0 &&
++              ffmpegdec->context->time_base.den < 1000)) {
++        GST_LOG_OBJECT (ffmpegdec, "using decoder's framerate for duration");
++        out_duration = gst_util_uint64_scale_int (GST_SECOND,
++            ffmpegdec->context->time_base.num *
++            ffmpegdec->context->ticks_per_frame,
++            ffmpegdec->context->time_base.den);
++      } else {
++        GST_LOG_OBJECT (ffmpegdec, "no valid duration found");
++      }
++    }
++  }
++
++  /* Take repeat_pict into account */
++  if (GST_CLOCK_TIME_IS_VALID (out_duration)) {
++    out_duration += out_duration * ffmpegdec->picture->repeat_pict / 2;
++  }
++  GST_BUFFER_DURATION (*outbuf) = out_duration;
++
++  if (out_timestamp != -1 && out_duration != -1 && out_duration != 0)
++    ffmpegdec->next_out = out_timestamp + out_duration;
++  else
++    ffmpegdec->next_out = -1;
++
++  /* now see if we need to clip the buffer against the segment boundaries. */
++  if (G_UNLIKELY (!clip_video_buffer (ffmpegdec, *outbuf, out_timestamp,
++              out_duration)))
++    goto clipped;
++
++  if (ffmpegdec->picture->top_field_first)
++    GST_BUFFER_FLAG_SET (*outbuf, GST_VIDEO_BUFFER_TFF);
++
++
++beach:
++  GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
++      *ret, *outbuf, len);
++  return len;
++
++  /* special cases */
++no_output:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "no output buffer");
++    len = -1;
++    goto beach;
++  }
++clipped:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "buffer clipped");
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++    goto beach;
++  }
++}
++
++/* returns TRUE if buffer is within segment, else FALSE.
++ * if Buffer is on segment border, it's timestamp and duration will be clipped */
++static gboolean
++clip_audio_buffer (GstFFMpegDec * dec, GstBuffer * buf, GstClockTime in_ts,
++    GstClockTime in_dur)
++{
++  GstClockTime stop;
++  gint64 diff, ctime, cstop;
++  gboolean res = TRUE;
++
++  GST_LOG_OBJECT (dec,
++      "timestamp:%" GST_TIME_FORMAT ", duration:%" GST_TIME_FORMAT
++      ", size %u", GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur),
++      GST_BUFFER_SIZE (buf));
++
++  /* can't clip without TIME segment */
++  if (G_UNLIKELY (dec->segment.format != GST_FORMAT_TIME))
++    goto beach;
++
++  /* we need a start time */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (in_ts)))
++    goto beach;
++
++  /* trust duration */
++  stop = in_ts + in_dur;
++
++  res = gst_segment_clip (&dec->segment, GST_FORMAT_TIME, in_ts, stop, &ctime,
++      &cstop);
++  if (G_UNLIKELY (!res))
++    goto out_of_segment;
++
++  /* see if some clipping happened */
++  if (G_UNLIKELY ((diff = ctime - in_ts) > 0)) {
++    /* bring clipped time to bytes */
++    diff =
++        gst_util_uint64_scale_int (diff, dec->format.audio.samplerate,
++        GST_SECOND) * (dec->format.audio.depth * dec->format.audio.channels);
++
++    GST_DEBUG_OBJECT (dec, "clipping start to %" GST_TIME_FORMAT " %"
++        G_GINT64_FORMAT " bytes", GST_TIME_ARGS (ctime), diff);
++
++    GST_BUFFER_SIZE (buf) -= diff;
++    GST_BUFFER_DATA (buf) += diff;
++  }
++  if (G_UNLIKELY ((diff = stop - cstop) > 0)) {
++    /* bring clipped time to bytes */
++    diff =
++        gst_util_uint64_scale_int (diff, dec->format.audio.samplerate,
++        GST_SECOND) * (dec->format.audio.depth * dec->format.audio.channels);
++
++    GST_DEBUG_OBJECT (dec, "clipping stop to %" GST_TIME_FORMAT " %"
++        G_GINT64_FORMAT " bytes", GST_TIME_ARGS (cstop), diff);
++
++    GST_BUFFER_SIZE (buf) -= diff;
++  }
++  GST_BUFFER_TIMESTAMP (buf) = ctime;
++  GST_BUFFER_DURATION (buf) = cstop - ctime;
++
++beach:
++  GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : ""));
++  return res;
++
++  /* ERRORS */
++out_of_segment:
++  {
++    GST_LOG_OBJECT (dec, "out of segment");
++    goto beach;
++  }
++}
++
++static gint
++gst_ffmpegdec_audio_frame (GstFFMpegDec * ffmpegdec,
++    AVCodec * in_plugin, guint8 * data, guint size,
++    const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
++{
++  gint len = -1;
++  gint have_data = AVCODEC_MAX_AUDIO_FRAME_SIZE;
++  GstClockTime out_timestamp, out_duration;
++  gint64 out_offset;
++  AVPacket packet;
++
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "size:%d, offset:%" G_GINT64_FORMAT ", ts:%" GST_TIME_FORMAT ", dur:%"
++      GST_TIME_FORMAT ", ffmpegdec->next_out:%" GST_TIME_FORMAT, size,
++      dec_info->offset, GST_TIME_ARGS (dec_info->timestamp),
++      GST_TIME_ARGS (dec_info->duration), GST_TIME_ARGS (ffmpegdec->next_out));
++
++  *outbuf =
++      new_aligned_buffer (AVCODEC_MAX_AUDIO_FRAME_SIZE,
++      GST_PAD_CAPS (ffmpegdec->srcpad));
++
++  gst_avpacket_init (&packet, data, size);
++  len = avcodec_decode_audio3 (ffmpegdec->context,
++      (int16_t *) GST_BUFFER_DATA (*outbuf), &have_data, &packet);
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "Decode audio: len=%d, have_data=%d", len, have_data);
++
++  if (len >= 0 && have_data > 0) {
++    GST_DEBUG_OBJECT (ffmpegdec, "Creating output buffer");
++    if (!gst_ffmpegdec_negotiate (ffmpegdec, FALSE)) {
++      gst_buffer_unref (*outbuf);
++      *outbuf = NULL;
++      len = -1;
++      goto beach;
++    }
++
++    /* Buffer size */
++    GST_BUFFER_SIZE (*outbuf) = have_data;
++
++    /*
++     * Timestamps:
++     *
++     *  1) Copy input timestamp if valid
++     *  2) else interpolate from previous input timestamp
++     */
++    /* always take timestamps from the input buffer if any */
++    if (GST_CLOCK_TIME_IS_VALID (dec_info->timestamp)) {
++      out_timestamp = dec_info->timestamp;
++    } else {
++      out_timestamp = ffmpegdec->next_out;
++    }
++
++    /*
++     * Duration:
++     *
++     *  1) calculate based on number of samples
++     */
++    out_duration = gst_util_uint64_scale (have_data, GST_SECOND,
++        ffmpegdec->format.audio.depth * ffmpegdec->format.audio.channels *
++        ffmpegdec->format.audio.samplerate);
++
++    /* offset:
++     *
++     * Just copy
++     */
++    out_offset = dec_info->offset;
++
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Buffer created. Size:%d , timestamp:%" GST_TIME_FORMAT " , duration:%"
++        GST_TIME_FORMAT, have_data,
++        GST_TIME_ARGS (out_timestamp), GST_TIME_ARGS (out_duration));
++
++    GST_BUFFER_TIMESTAMP (*outbuf) = out_timestamp;
++    GST_BUFFER_DURATION (*outbuf) = out_duration;
++    GST_BUFFER_OFFSET (*outbuf) = out_offset;
++    gst_buffer_set_caps (*outbuf, GST_PAD_CAPS (ffmpegdec->srcpad));
++
++    /* the next timestamp we'll use when interpolating */
++    if (GST_CLOCK_TIME_IS_VALID (out_timestamp))
++      ffmpegdec->next_out = out_timestamp + out_duration;
++
++    /* now see if we need to clip the buffer against the segment boundaries. */
++    if (G_UNLIKELY (!clip_audio_buffer (ffmpegdec, *outbuf, out_timestamp,
++                out_duration)))
++      goto clipped;
++
++  } else {
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++  }
++
++  /* If we don't error out after the first failed read with the AAC decoder,
++   * we must *not* carry on pushing data, else we'll cause segfaults... */
++  if (len == -1 && (in_plugin->id == CODEC_ID_AAC
++          || in_plugin->id == CODEC_ID_AAC_LATM)) {
++    GST_ELEMENT_ERROR (ffmpegdec, STREAM, DECODE, (NULL),
++        ("Decoding of AAC stream by FFMPEG failed."));
++    *ret = GST_FLOW_ERROR;
++  }
++
++beach:
++  GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
++      *ret, *outbuf, len);
++  return len;
++
++  /* ERRORS */
++clipped:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "buffer clipped");
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++    goto beach;
++  }
++}
++
++/* gst_ffmpegdec_frame:
++ * ffmpegdec:
++ * data: pointer to the data to decode
++ * size: size of data in bytes
++ * got_data: 0 if no data was decoded, != 0 otherwise.
++ * in_time: timestamp of data
++ * in_duration: duration of data
++ * ret: GstFlowReturn to return in the chain function
++ *
++ * Decode the given frame and pushes it downstream.
++ *
++ * Returns: Number of bytes used in decoding, -1 on error/failure.
++ */
++
++static gint
++gst_ffmpegdec_frame (GstFFMpegDec * ffmpegdec,
++    guint8 * data, guint size, gint * got_data, const GstTSInfo * dec_info,
++    GstFlowReturn * ret)
++{
++  GstFFMpegDecClass *oclass;
++  GstBuffer *outbuf = NULL;
++  gint have_data = 0, len = 0;
++
++  if (G_UNLIKELY (ffmpegdec->context->codec == NULL))
++    goto no_codec;
++
++  GST_LOG_OBJECT (ffmpegdec, "data:%p, size:%d, id:%d", data, size,
++      dec_info->idx);
++
++  *ret = GST_FLOW_OK;
++  ffmpegdec->context->frame_number++;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      len =
++          gst_ffmpegdec_video_frame (ffmpegdec, data, size, dec_info, &outbuf,
++          ret);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      len =
++          gst_ffmpegdec_audio_frame (ffmpegdec, oclass->in_plugin, data, size,
++          dec_info, &outbuf, ret);
++
++      /* if we did not get an output buffer and we have a pending discont, don't
++       * clear the input timestamps, we will put them on the next buffer because
++       * else we might create the first buffer with a very big timestamp gap. */
++      if (outbuf == NULL && ffmpegdec->discont) {
++        GST_DEBUG_OBJECT (ffmpegdec, "no buffer but keeping timestamp");
++        ffmpegdec->clear_ts = FALSE;
++      }
++      break;
++    default:
++      GST_ERROR_OBJECT (ffmpegdec, "Asked to decode non-audio/video frame !");
++      g_assert_not_reached ();
++      break;
++  }
++
++  if (outbuf)
++    have_data = 1;
++
++  if (len < 0 || have_data < 0) {
++    GST_WARNING_OBJECT (ffmpegdec,
++        "ffdec_%s: decoding error (len: %d, have_data: %d)",
++        oclass->in_plugin->name, len, have_data);
++    *got_data = 0;
++    goto beach;
++  } else if (len == 0 && have_data == 0) {
++    *got_data = 0;
++    goto beach;
++  } else {
++    /* this is where I lost my last clue on ffmpeg... */
++    *got_data = 1;
++  }
++
++  if (outbuf) {
++    GST_LOG_OBJECT (ffmpegdec,
++        "Decoded data, now pushing buffer %p with offset %" G_GINT64_FORMAT
++        ", timestamp %" GST_TIME_FORMAT " and duration %" GST_TIME_FORMAT,
++        outbuf, GST_BUFFER_OFFSET (outbuf),
++        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
++        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)));
++
++    /* mark pending discont */
++    if (ffmpegdec->discont) {
++      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
++      ffmpegdec->discont = FALSE;
++    }
++
++    if (ffmpegdec->segment.rate > 0.0) {
++      /* and off we go */
++      *ret = gst_pad_push (ffmpegdec->srcpad, outbuf);
++    } else {
++      /* reverse playback, queue frame till later when we get a discont. */
++      GST_DEBUG_OBJECT (ffmpegdec, "queued frame");
++      ffmpegdec->queued = g_list_prepend (ffmpegdec->queued, outbuf);
++      *ret = GST_FLOW_OK;
++    }
++  } else {
++    GST_DEBUG_OBJECT (ffmpegdec, "We didn't get a decoded buffer");
++  }
++
++beach:
++  return len;
++
++  /* ERRORS */
++no_codec:
++  {
++    GST_ERROR_OBJECT (ffmpegdec, "no codec context");
++    return -1;
++  }
++}
++
++static void
++gst_ffmpegdec_drain (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  if (oclass->in_plugin->capabilities & CODEC_CAP_DELAY) {
++    gint have_data, len, try = 0;
++
++    GST_LOG_OBJECT (ffmpegdec,
++        "codec has delay capabilities, calling until ffmpeg has drained everything");
++
++    do {
++      GstFlowReturn ret;
++
++      len =
++          gst_ffmpegdec_frame (ffmpegdec, NULL, 0, &have_data, &ts_info_none,
++          &ret);
++      if (len < 0 || have_data == 0)
++        break;
++    } while (try++ < 10);
++  }
++  if (ffmpegdec->segment.rate < 0.0) {
++    /* if we have some queued frames for reverse playback, flush them now */
++    flush_queued (ffmpegdec);
++  }
++}
++
++static void
++gst_ffmpegdec_flush_pcache (GstFFMpegDec * ffmpegdec)
++{
++  if (ffmpegdec->pctx) {
++    gint size, bsize;
++    guint8 *data;
++    guint8 bdata[FF_INPUT_BUFFER_PADDING_SIZE];
++
++    bsize = FF_INPUT_BUFFER_PADDING_SIZE;
++    memset (bdata, 0, bsize);
++
++    /* parse some dummy data to work around some ffmpeg weirdness where it keeps
++     * the previous pts around */
++    av_parser_parse2 (ffmpegdec->pctx, ffmpegdec->context,
++        &data, &size, bdata, bsize, -1, -1, -1);
++    ffmpegdec->pctx->pts = -1;
++    ffmpegdec->pctx->dts = -1;
++  }
++
++  if (ffmpegdec->pcache) {
++    gst_buffer_unref (ffmpegdec->pcache);
++    ffmpegdec->pcache = NULL;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_sink_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegDec *ffmpegdec;
++  gboolean ret = FALSE;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  GST_DEBUG_OBJECT (ffmpegdec, "Handling %s event",
++      GST_EVENT_TYPE_NAME (event));
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_EOS:
++    {
++      gst_ffmpegdec_drain (ffmpegdec);
++      break;
++    }
++    case GST_EVENT_FLUSH_STOP:
++    {
++      if (ffmpegdec->opened) {
++        avcodec_flush_buffers (ffmpegdec->context);
++      }
++      gst_ffmpegdec_reset_ts (ffmpegdec);
++      gst_ffmpegdec_reset_qos (ffmpegdec);
++      gst_ffmpegdec_flush_pcache (ffmpegdec);
++      gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
++      clear_queued (ffmpegdec);
++      break;
++    }
++    case GST_EVENT_NEWSEGMENT:
++    {
++      gboolean update;
++      GstFormat fmt;
++      gint64 start, stop, time;
++      gdouble rate, arate;
++
++      gst_event_parse_new_segment_full (event, &update, &rate, &arate, &fmt,
++          &start, &stop, &time);
++
++      switch (fmt) {
++        case GST_FORMAT_TIME:
++          /* fine, our native segment format */
++          break;
++        case GST_FORMAT_BYTES:
++        {
++          gint bit_rate;
++
++          bit_rate = ffmpegdec->context->bit_rate;
++
++          /* convert to time or fail */
++          if (!bit_rate)
++            goto no_bitrate;
++
++          GST_DEBUG_OBJECT (ffmpegdec, "bitrate: %d", bit_rate);
++
++          /* convert values to TIME */
++          if (start != -1)
++            start = gst_util_uint64_scale_int (start, GST_SECOND, bit_rate);
++          if (stop != -1)
++            stop = gst_util_uint64_scale_int (stop, GST_SECOND, bit_rate);
++          if (time != -1)
++            time = gst_util_uint64_scale_int (time, GST_SECOND, bit_rate);
++
++          /* unref old event */
++          gst_event_unref (event);
++
++          /* create new converted time segment */
++          fmt = GST_FORMAT_TIME;
++          /* FIXME, bitrate is not good enough too find a good stop, let's
++           * hope start and time were 0... meh. */
++          stop = -1;
++          event = gst_event_new_new_segment (update, rate, fmt,
++              start, stop, time);
++          break;
++        }
++        default:
++          /* invalid format */
++          goto invalid_format;
++      }
++
++      /* drain pending frames before trying to use the new segment, queued
++       * buffers belonged to the previous segment. */
++      if (ffmpegdec->context->codec)
++        gst_ffmpegdec_drain (ffmpegdec);
++
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "NEWSEGMENT in time start %" GST_TIME_FORMAT " -- stop %"
++          GST_TIME_FORMAT, GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
++
++      /* and store the values */
++      gst_segment_set_newsegment_full (&ffmpegdec->segment, update,
++          rate, arate, fmt, start, stop, time);
++      break;
++    }
++    default:
++      break;
++  }
++
++  /* and push segment downstream */
++  ret = gst_pad_push_event (ffmpegdec->srcpad, event);
++
++done:
++  gst_object_unref (ffmpegdec);
++
++  return ret;
++
++  /* ERRORS */
++no_bitrate:
++  {
++    GST_WARNING_OBJECT (ffmpegdec, "no bitrate to convert BYTES to TIME");
++    gst_event_unref (event);
++    goto done;
++  }
++invalid_format:
++  {
++    GST_WARNING_OBJECT (ffmpegdec, "unknown format received in NEWSEGMENT");
++    gst_event_unref (event);
++    goto done;
++  }
++}
++
++static GstFlowReturn
++gst_ffmpegdec_chain (GstPad * pad, GstBuffer * inbuf)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstFFMpegDecClass *oclass;
++  guint8 *data, *bdata;
++  gint size, bsize, len, have_data;
++  GstFlowReturn ret = GST_FLOW_OK;
++  GstClockTime in_timestamp;
++  GstClockTime in_duration;
++  gboolean discont;
++  gint64 in_offset;
++  const GstTSInfo *in_info;
++  const GstTSInfo *dec_info;
++
++  ffmpegdec = (GstFFMpegDec *) (GST_PAD_PARENT (pad));
++
++  if (G_UNLIKELY (!ffmpegdec->opened))
++    goto not_negotiated;
++
++  discont = GST_BUFFER_IS_DISCONT (inbuf);
++
++  /* The discont flags marks a buffer that is not continuous with the previous
++   * buffer. This means we need to clear whatever data we currently have. We
++   * currently also wait for a new keyframe, which might be suboptimal in the
++   * case of a network error, better show the errors than to drop all data.. */
++  if (G_UNLIKELY (discont)) {
++    GST_DEBUG_OBJECT (ffmpegdec, "received DISCONT");
++    /* drain what we have queued */
++    gst_ffmpegdec_drain (ffmpegdec);
++    gst_ffmpegdec_flush_pcache (ffmpegdec);
++    avcodec_flush_buffers (ffmpegdec->context);
++    ffmpegdec->discont = TRUE;
++    gst_ffmpegdec_reset_ts (ffmpegdec);
++  }
++  /* by default we clear the input timestamp after decoding each frame so that
++   * interpollation can work. */
++  ffmpegdec->clear_ts = TRUE;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  /* parse cache joining. If there is cached data */
++  if (ffmpegdec->pcache) {
++    /* join with previous data */
++    GST_LOG_OBJECT (ffmpegdec, "join parse cache");
++    inbuf = gst_buffer_join (ffmpegdec->pcache, inbuf);
++    /* no more cached data, we assume we can consume the complete cache */
++    ffmpegdec->pcache = NULL;
++  }
++
++  in_timestamp = GST_BUFFER_TIMESTAMP (inbuf);
++  in_duration = GST_BUFFER_DURATION (inbuf);
++  in_offset = GST_BUFFER_OFFSET (inbuf);
++
++  /* get handle to timestamp info, we can pass this around to ffmpeg */
++  in_info = gst_ts_info_store (ffmpegdec, in_timestamp, in_duration, in_offset);
++
++  if (in_timestamp != -1) {
++    /* check for increasing timestamps if they are jumping backwards, we
++     * probably are dealing with PTS as timestamps */
++    if (!ffmpegdec->reordered_in && ffmpegdec->last_in != -1) {
++      if (in_timestamp < ffmpegdec->last_in) {
++        GST_LOG_OBJECT (ffmpegdec, "detected reordered input timestamps");
++        ffmpegdec->reordered_in = TRUE;
++        ffmpegdec->last_diff = GST_CLOCK_TIME_NONE;
++      } else if (in_timestamp > ffmpegdec->last_in) {
++        GstClockTime diff;
++        /* keep track of timestamp diff to estimate duration */
++        diff = in_timestamp - ffmpegdec->last_in;
++        /* need to scale with amount of frames in the interval */
++        if (ffmpegdec->last_frames)
++          diff /= ffmpegdec->last_frames;
++
++        GST_LOG_OBJECT (ffmpegdec, "estimated duration %" GST_TIME_FORMAT " %u",
++            GST_TIME_ARGS (diff), ffmpegdec->last_frames);
++
++        ffmpegdec->last_diff = diff;
++      }
++    }
++    ffmpegdec->last_in = in_timestamp;
++    ffmpegdec->last_frames = 0;
++  }
++
++  GST_LOG_OBJECT (ffmpegdec,
++      "Received new data of size %u, offset:%" G_GUINT64_FORMAT ", ts:%"
++      GST_TIME_FORMAT ", dur:%" GST_TIME_FORMAT ", info %d",
++      GST_BUFFER_SIZE (inbuf), GST_BUFFER_OFFSET (inbuf),
++      GST_TIME_ARGS (in_timestamp), GST_TIME_ARGS (in_duration), in_info->idx);
++
++  /* workarounds, functions write to buffers:
++   *  libavcodec/svq1.c:svq1_decode_frame writes to the given buffer.
++   *  libavcodec/svq3.c:svq3_decode_slice_header too.
++   * ffmpeg devs know about it and will fix it (they said). */
++  if (oclass->in_plugin->id == CODEC_ID_SVQ1 ||
++      oclass->in_plugin->id == CODEC_ID_SVQ3) {
++    inbuf = gst_buffer_make_writable (inbuf);
++  }
++
++  bdata = GST_BUFFER_DATA (inbuf);
++  bsize = GST_BUFFER_SIZE (inbuf);
++
++  if (ffmpegdec->do_padding) {
++    /* add padding */
++    if (ffmpegdec->padded_size < bsize + FF_INPUT_BUFFER_PADDING_SIZE) {
++      ffmpegdec->padded_size = bsize + FF_INPUT_BUFFER_PADDING_SIZE;
++      ffmpegdec->padded = g_realloc (ffmpegdec->padded, ffmpegdec->padded_size);
++      GST_LOG_OBJECT (ffmpegdec, "resized padding buffer to %d",
++          ffmpegdec->padded_size);
++    }
++    memcpy (ffmpegdec->padded, bdata, bsize);
++    memset (ffmpegdec->padded + bsize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
++
++    bdata = ffmpegdec->padded;
++  }
++
++  do {
++    guint8 tmp_padding[FF_INPUT_BUFFER_PADDING_SIZE];
++
++    /* parse, if at all possible */
++    if (ffmpegdec->pctx) {
++      gint res;
++
++      GST_LOG_OBJECT (ffmpegdec,
++          "Calling av_parser_parse2 with offset %" G_GINT64_FORMAT ", ts:%"
++          GST_TIME_FORMAT " size %d", in_offset, GST_TIME_ARGS (in_timestamp),
++          bsize);
++
++      /* feed the parser. We pass the timestamp info so that we can recover all
++       * info again later */
++      res = av_parser_parse2 (ffmpegdec->pctx, ffmpegdec->context,
++          &data, &size, bdata, bsize, in_info->idx, in_info->idx, in_offset);
++
++      GST_LOG_OBJECT (ffmpegdec,
++          "parser returned res %d and size %d, id %" G_GINT64_FORMAT, res, size,
++          ffmpegdec->pctx->pts);
++
++      /* store pts for decoding */
++      if (ffmpegdec->pctx->pts != AV_NOPTS_VALUE && ffmpegdec->pctx->pts != -1)
++        dec_info = gst_ts_info_get (ffmpegdec, ffmpegdec->pctx->pts);
++      else {
++        /* ffmpeg sometimes loses track after a flush, help it by feeding a
++         * valid start time */
++        ffmpegdec->pctx->pts = in_info->idx;
++        ffmpegdec->pctx->dts = in_info->idx;
++        dec_info = in_info;
++      }
++
++      GST_LOG_OBJECT (ffmpegdec, "consuming %d bytes. id %d", size,
++          dec_info->idx);
++
++      if (res) {
++        /* there is output, set pointers for next round. */
++        bsize -= res;
++        bdata += res;
++      } else {
++        /* Parser did not consume any data, make sure we don't clear the
++         * timestamp for the next round */
++        ffmpegdec->clear_ts = FALSE;
++      }
++
++      /* if there is no output, we must break and wait for more data. also the
++       * timestamp in the context is not updated. */
++      if (size == 0) {
++        if (bsize > 0)
++          continue;
++        else
++          break;
++      }
++    } else {
++      data = bdata;
++      size = bsize;
++
++      dec_info = in_info;
++    }
++
++    if (ffmpegdec->do_padding) {
++      /* add temporary padding */
++      memcpy (tmp_padding, data + size, FF_INPUT_BUFFER_PADDING_SIZE);
++      memset (data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
++    }
++
++    /* decode a frame of audio/video now */
++    len =
++        gst_ffmpegdec_frame (ffmpegdec, data, size, &have_data, dec_info, &ret);
++
++    if (ffmpegdec->do_padding) {
++      memcpy (data + size, tmp_padding, FF_INPUT_BUFFER_PADDING_SIZE);
++    }
++
++    if (ret != GST_FLOW_OK) {
++      GST_LOG_OBJECT (ffmpegdec, "breaking because of flow ret %s",
++          gst_flow_get_name (ret));
++      /* bad flow retun, make sure we discard all data and exit */
++      bsize = 0;
++      break;
++    }
++    if (!ffmpegdec->pctx) {
++      if (len == 0 && !have_data) {
++        /* nothing was decoded, this could be because no data was available or
++         * because we were skipping frames.
++         * If we have no context we must exit and wait for more data, we keep the
++         * data we tried. */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding didn't return any data, breaking");
++        break;
++      } else if (len < 0) {
++        /* a decoding error happened, we must break and try again with next data. */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding error, breaking");
++        bsize = 0;
++        break;
++      }
++      /* prepare for the next round, for codecs with a context we did this
++       * already when using the parser. */
++      bsize -= len;
++      bdata += len;
++    } else {
++      if (len == 0) {
++        /* nothing was decoded, this could be because no data was available or
++         * because we were skipping frames. Since we have a parser we can
++         * continue with the next frame */
++        GST_LOG_OBJECT (ffmpegdec,
++            "Decoding didn't return any data, trying next");
++      } else if (len < 0) {
++        /* we have a context that will bring us to the next frame */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding error, trying next");
++      }
++    }
++
++    /* make sure we don't use the same old timestamp for the next frame and let
++     * the interpollation take care of it. */
++    if (ffmpegdec->clear_ts) {
++      in_timestamp = GST_CLOCK_TIME_NONE;
++      in_duration = GST_CLOCK_TIME_NONE;
++      in_offset = GST_BUFFER_OFFSET_NONE;
++      in_info = GST_TS_INFO_NONE;
++    } else {
++      ffmpegdec->clear_ts = TRUE;
++    }
++    ffmpegdec->last_frames++;
++
++    GST_LOG_OBJECT (ffmpegdec, "Before (while bsize>0).  bsize:%d , bdata:%p",
++        bsize, bdata);
++  } while (bsize > 0);
++
++  /* keep left-over */
++  if (ffmpegdec->pctx && bsize > 0) {
++    in_timestamp = GST_BUFFER_TIMESTAMP (inbuf);
++    in_offset = GST_BUFFER_OFFSET (inbuf);
++
++    GST_LOG_OBJECT (ffmpegdec,
++        "Keeping %d bytes of data with offset %" G_GINT64_FORMAT ", timestamp %"
++        GST_TIME_FORMAT, bsize, in_offset, GST_TIME_ARGS (in_timestamp));
++
++    ffmpegdec->pcache = gst_buffer_create_sub (inbuf,
++        GST_BUFFER_SIZE (inbuf) - bsize, bsize);
++    /* we keep timestamp, even though all we really know is that the correct
++     * timestamp is not below the one from inbuf */
++    GST_BUFFER_TIMESTAMP (ffmpegdec->pcache) = in_timestamp;
++    GST_BUFFER_OFFSET (ffmpegdec->pcache) = in_offset;
++  } else if (bsize > 0) {
++    GST_DEBUG_OBJECT (ffmpegdec, "Dropping %d bytes of data", bsize);
++  }
++  gst_buffer_unref (inbuf);
++
++  return ret;
++
++  /* ERRORS */
++not_negotiated:
++  {
++    oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION, (NULL),
++        ("ffdec_%s: input format was not set before data start",
++            oclass->in_plugin->name));
++    gst_buffer_unref (inbuf);
++    return GST_FLOW_NOT_NEGOTIATED;
++  }
++}
++
++static GstStateChangeReturn
++gst_ffmpegdec_change_state (GstElement * element, GstStateChange transition)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) element;
++  GstStateChangeReturn ret;
++
++  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      GST_OBJECT_LOCK (ffmpegdec);
++      gst_ffmpegdec_close (ffmpegdec);
++      GST_OBJECT_UNLOCK (ffmpegdec);
++      clear_queued (ffmpegdec);
++      g_free (ffmpegdec->padded);
++      ffmpegdec->padded = NULL;
++      ffmpegdec->padded_size = 0;
++      ffmpegdec->can_allocate_aligned = TRUE;
++      break;
++    default:
++      break;
++  }
++
++  return ret;
++}
++
++static void
++gst_ffmpegdec_set_property (GObject * object,
++    guint prop_id, const GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  switch (prop_id) {
++    case PROP_LOWRES:
++      ffmpegdec->lowres = ffmpegdec->context->lowres = g_value_get_enum (value);
++      break;
++    case PROP_SKIPFRAME:
++      ffmpegdec->skip_frame = ffmpegdec->context->skip_frame =
++          g_value_get_enum (value);
++      break;
++    case PROP_DIRECT_RENDERING:
++      ffmpegdec->direct_rendering = g_value_get_boolean (value);
++      break;
++    case PROP_DO_PADDING:
++      ffmpegdec->do_padding = g_value_get_boolean (value);
++      break;
++    case PROP_DEBUG_MV:
++      ffmpegdec->debug_mv = ffmpegdec->context->debug_mv =
++          g_value_get_boolean (value);
++      break;
++    case PROP_CROP:
++      ffmpegdec->crop = g_value_get_boolean (value);
++      break;
++    case PROP_MAX_THREADS:
++      ffmpegdec->max_threads = g_value_get_int (value);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++static void
++gst_ffmpegdec_get_property (GObject * object,
++    guint prop_id, GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  switch (prop_id) {
++    case PROP_LOWRES:
++      g_value_set_enum (value, ffmpegdec->context->lowres);
++      break;
++    case PROP_SKIPFRAME:
++      g_value_set_enum (value, ffmpegdec->context->skip_frame);
++      break;
++    case PROP_DIRECT_RENDERING:
++      g_value_set_boolean (value, ffmpegdec->direct_rendering);
++      break;
++    case PROP_DO_PADDING:
++      g_value_set_boolean (value, ffmpegdec->do_padding);
++      break;
++    case PROP_DEBUG_MV:
++      g_value_set_boolean (value, ffmpegdec->context->debug_mv);
++      break;
++    case PROP_CROP:
++      g_value_set_boolean (value, ffmpegdec->crop);
++      break;
++    case PROP_MAX_THREADS:
++      g_value_set_int (value, ffmpegdec->max_threads);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++gboolean
++gst_ffmpegdec_register (GstPlugin * plugin)
++{
++  GTypeInfo typeinfo = {
++    sizeof (GstFFMpegDecClass),
++    (GBaseInitFunc) gst_ffmpegdec_base_init,
++    NULL,
++    (GClassInitFunc) gst_ffmpegdec_class_init,
++    NULL,
++    NULL,
++    sizeof (GstFFMpegDec),
++    0,
++    (GInstanceInitFunc) gst_ffmpegdec_init,
++  };
++  GType type;
++  AVCodec *in_plugin;
++  gint rank;
++
++  in_plugin = av_codec_next (NULL);
++
++  GST_LOG ("Registering decoders");
++
++  while (in_plugin) {
++    gchar *type_name;
++    gchar *plugin_name;
++
++    /* only decoders */
++    if (!in_plugin->decode) {
++      goto next;
++    }
++
++    /* no quasi-codecs, please */
++    if (in_plugin->id == CODEC_ID_RAWVIDEO ||
++        in_plugin->id == CODEC_ID_V210 ||
++        in_plugin->id == CODEC_ID_V210X ||
++        in_plugin->id == CODEC_ID_R210 ||
++        (in_plugin->id >= CODEC_ID_PCM_S16LE &&
++            in_plugin->id <= CODEC_ID_PCM_BLURAY)) {
++      goto next;
++    }
++
++    /* No decoders depending on external libraries (we don't build them, but
++     * people who build against an external ffmpeg might have them.
++     * We have native gstreamer plugins for all of those libraries anyway. */
++    if (!strncmp (in_plugin->name, "lib", 3)) {
++      GST_DEBUG
++          ("Not using external library decoder %s. Use the gstreamer-native ones instead.",
++          in_plugin->name);
++      goto next;
++    }
++
++    /* No vdpau plugins until we can figure out how to properly use them
++     * outside of ffmpeg. */
++    if (g_str_has_suffix (in_plugin->name, "_vdpau")) {
++      GST_DEBUG
++          ("Ignoring VDPAU decoder %s. We can't handle this outside of ffmpeg",
++          in_plugin->name);
++      goto next;
++    }
++
++    if (g_str_has_suffix (in_plugin->name, "_xvmc")) {
++      GST_DEBUG
++          ("Ignoring XVMC decoder %s. We can't handle this outside of ffmpeg",
++          in_plugin->name);
++      goto next;
++    }
++
++    GST_DEBUG ("Trying plugin %s [%s]", in_plugin->name, in_plugin->long_name);
++
++    /* no codecs for which we're GUARANTEED to have better alternatives */
++    /* MPEG1VIDEO : the mpeg2video decoder is preferred */
++    /* MP1 : Use MP3 for decoding */
++    /* MP2 : Use MP3 for decoding */
++    /* Theora: Use libtheora based theoradec */
++    if (!strcmp (in_plugin->name, "gif") ||
++        !strcmp (in_plugin->name, "vorbis") ||
++        !strcmp (in_plugin->name, "theora") ||
++        !strcmp (in_plugin->name, "mpeg1video") ||
++        !strcmp (in_plugin->name, "wavpack") ||
++        !strcmp (in_plugin->name, "mp1") ||
++        !strcmp (in_plugin->name, "mp2") ||
++        !strcmp (in_plugin->name, "libfaad") ||
++        !strcmp (in_plugin->name, "mpeg4aac") ||
++        !strcmp (in_plugin->name, "ass") ||
++        !strcmp (in_plugin->name, "srt") ||
++        !strcmp (in_plugin->name, "pgssub") ||
++        !strcmp (in_plugin->name, "dvdsub") ||
++        !strcmp (in_plugin->name, "dvbsub")) {
++      GST_LOG ("Ignoring decoder %s", in_plugin->name);
++      goto next;
++    }
++
++    /* construct the type */
++    plugin_name = g_strdup ((gchar *) in_plugin->name);
++    g_strdelimit (plugin_name, NULL, '_');
++    type_name = g_strdup_printf ("ffdec_%s", plugin_name);
++    g_free (plugin_name);
++
++    type = g_type_from_name (type_name);
++
++    if (!type) {
++      /* create the gtype now */
++      type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0);
++      g_type_set_qdata (type, GST_FFDEC_PARAMS_QDATA, (gpointer) in_plugin);
++    }
++
++    /* (Ronald) MPEG-4 gets a higher priority because it has been well-
++     * tested and by far outperforms divxdec/xviddec - so we prefer it.
++     * msmpeg4v3 same, as it outperforms divxdec for divx3 playback.
++     * VC1/WMV3 are not working and thus unpreferred for now. */
++    switch (in_plugin->id) {
++      case CODEC_ID_MPEG4:
++      case CODEC_ID_MSMPEG4V3:
++      case CODEC_ID_H264:
++      case CODEC_ID_RA_144:
++      case CODEC_ID_RA_288:
++      case CODEC_ID_RV10:
++      case CODEC_ID_RV20:
++      case CODEC_ID_RV30:
++      case CODEC_ID_RV40:
++      case CODEC_ID_COOK:
++        rank = GST_RANK_SECONDARY;
++        break;
++        /* DVVIDEO: we have a good dv decoder, fast on both ppc as well as x86.
++         * They say libdv's quality is better though. leave as secondary.
++         * note: if you change this, see the code in gstdv.c in good/ext/dv.
++         *
++         * SIPR: decoder should have a higher rank than realaudiodec.
++         */
++      case CODEC_ID_DVVIDEO:
++      case CODEC_ID_SIPR:
++        rank = GST_RANK_SECONDARY;
++        break;
++      case CODEC_ID_MP3:
++        rank = GST_RANK_NONE;
++        break;
++        /* TEMPORARILY DISABLING AC3/EAC3/DTS for 0.10.12 release
++         * due to downmixing failure.
++         * See Bug #608892 for more details */
++      case CODEC_ID_EAC3:
++      case CODEC_ID_AC3:
++      case CODEC_ID_DTS:
++        rank = GST_RANK_NONE;
++        break;
++      default:
++        rank = GST_RANK_MARGINAL;
++        break;
++    }
++    if (!gst_element_register (plugin, type_name, rank, type)) {
++      g_warning ("Failed to register %s", type_name);
++      g_free (type_name);
++      return FALSE;
++    }
++
++    g_free (type_name);
++
++  next:
++    in_plugin = av_codec_next (in_plugin);
++  }
++
++  GST_LOG ("Finished Registering decoders");
++
++  return TRUE;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.rej gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.rej
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.rej	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.rej	2014-08-08 15:26:38.471858652 +0200
+@@ -0,0 +1,11 @@
++--- ext/ffmpeg/gstffmpegdec.c
+++++ ext/ffmpeg/gstffmpegdec.c
++@@ -1565,7 +1564,7 @@
++         gst_message_new_latency (GST_OBJECT_CAST (ffmpegdec)));
++   }
++ 
++-  is_itype = (ffmpegdec->picture->pict_type == FF_I_TYPE);
+++  is_itype = (ffmpegdec->picture->pict_type == AV_PICTURE_TYPE_I);
++   is_reference = (ffmpegdec->picture->reference == 1);
++ 
++   iskeyframe = (is_itype || is_reference || ffmpegdec->picture->key_frame)
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdemux.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdemux.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdemux.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdemux.c	2014-08-08 15:26:07.874857555 +0200
+@@ -343,8 +343,11 @@
+   demux->audiopads = 0;
+ 
+   /* close demuxer context from ffmpeg */
+-  av_close_input_file (demux->context);
+-  demux->context = NULL;
++  if (demux->seekable)
++    gst_ffmpegdata_close (demux->context->pb);
++  else
++    gst_ffmpeg_pipe_close (demux->context->pb);
++  avformat_close_input (&demux->context);
+ 
+   GST_OBJECT_LOCK (demux);
+   demux->opened = FALSE;
+@@ -1146,9 +1149,9 @@
+ static gboolean
+ gst_ffmpegdemux_open (GstFFMpegDemux * demux)
+ {
++  AVIOContext *iocontext = NULL;
+   GstFFMpegDemuxClass *oclass =
+       (GstFFMpegDemuxClass *) G_OBJECT_GET_CLASS (demux);
+-  gchar *location;
+   gint res, n_streams, i;
+ #if 0
+   /* Re-enable once converted to new AVMetaData API
+@@ -1164,15 +1167,14 @@
+ 
+   /* open via our input protocol hack */
+   if (demux->seekable)
+-    location = g_strdup_printf ("gstreamer://%p", demux->sinkpad);
++    res = gst_ffmpegdata_open (demux->sinkpad, AVIO_FLAG_READ, &iocontext);
+   else
+-    location = g_strdup_printf ("gstpipe://%p", &demux->ffpipe);
+-  GST_DEBUG_OBJECT (demux, "about to call av_open_input_file %s", location);
++    res = gst_ffmpeg_pipe_open (&demux->ffpipe, AVIO_FLAG_READ, &iocontext);
+ 
+-  res = av_open_input_file (&demux->context, location,
+-      oclass->in_plugin, 0, NULL);
++  demux->context = avformat_alloc_context ();
++  demux->context->pb = iocontext;
++  res = avformat_open_input (&demux->context, NULL, oclass->in_plugin, NULL);
+ 
+-  g_free (location);
+   GST_DEBUG_OBJECT (demux, "av_open_input returned %d", res);
+   if (res < 0)
+     goto open_failed;
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegenc.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegenc.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegenc.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegenc.c	2014-08-08 15:32:18.608870847 +0200
+@@ -770,7 +770,7 @@
+   GST_OBJECT_UNLOCK (ffmpegenc);
+ 
+   if (force_keyframe)
+-    ffmpegenc->picture->pict_type = FF_I_TYPE;
++    ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
+ 
+   frame_size = gst_ffmpeg_avpicture_fill ((AVPicture *) ffmpegenc->picture,
+       GST_BUFFER_DATA (inbuf),
+@@ -1136,7 +1136,7 @@
+       const GstStructure *s;
+       s = gst_event_get_structure (event);
+       if (gst_structure_has_name (s, "GstForceKeyUnit")) {
+-        ffmpegenc->picture->pict_type = FF_I_TYPE;
++        ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
+       }
+       break;
+     }
+@@ -1339,7 +1339,7 @@
+     }
+ 
+     /* only encoders */
+-    if (!in_plugin->encode) {
++    if (!av_codec_is_encoder (in_plugin)) {
+       goto next;
+     }
+ 
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c	2014-08-08 15:26:07.874857555 +0200
+@@ -24,8 +24,10 @@
+ #include <string.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avformat.h>
++#include <opt.h>
+ #else
+ #include <libavformat/avformat.h>
++#include <libavutil/opt.h>
+ #endif
+ 
+ #include <gst/gst.h>
+@@ -336,9 +338,6 @@
+   ffmpegmux->context = g_new0 (AVFormatContext, 1);
+   ffmpegmux->context->oformat = oclass->in_plugin;
+   ffmpegmux->context->nb_streams = 0;
+-  g_snprintf (ffmpegmux->context->filename,
+-      sizeof (ffmpegmux->context->filename),
+-      "gstreamer://%p", ffmpegmux->srcpad);
+   ffmpegmux->opened = FALSE;
+ 
+   ffmpegmux->videopads = 0;
+@@ -450,10 +449,10 @@
+   gst_element_add_pad (element, pad);
+ 
+   /* AVStream needs to be created */
+-  st = av_new_stream (ffmpegmux->context, collect_pad->padnum);
++  st = avformat_new_stream (ffmpegmux->context, NULL);
++  st->id = collect_pad->padnum;
+   st->codec->codec_type = type;
+   st->codec->codec_id = CODEC_ID_NONE;  /* this is a check afterwards */
+-  st->stream_copy = 1;          /* we're not the actual encoder */
+   st->codec->bit_rate = bitrate;
+   st->codec->frame_size = framesize;
+   /* we fill in codec during capsnego */
+@@ -485,7 +484,7 @@
+   collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
+ 
+   st = ffmpegmux->context->streams[collect_pad->padnum];
+-  ffmpegmux->context->preload = ffmpegmux->preload;
++  av_opt_set_int (&ffmpegmux->context, "preload", ffmpegmux->preload, 0);
+   ffmpegmux->context->max_delay = ffmpegmux->max_delay;
+ 
+   /* for the format-specific guesses, we'll go to
+@@ -552,7 +551,7 @@
+ 
+   /* open "file" (gstreamer protocol to next element) */
+   if (!ffmpegmux->opened) {
+-    int open_flags = URL_WRONLY;
++    int open_flags = AVIO_FLAG_WRITE;
+ 
+     /* we do need all streams to have started capsnego,
+      * or things will go horribly wrong */
+@@ -646,19 +645,13 @@
+       open_flags |= GST_FFMPEG_URL_STREAMHEADER;
+     }
+ 
+-    if (url_fopen (&ffmpegmux->context->pb,
+-            ffmpegmux->context->filename, open_flags) < 0) {
++    if (gst_ffmpegdata_open (ffmpegmux->srcpad, open_flags,
++            &ffmpegmux->context->pb) < 0) {
+       GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
+           ("Failed to open stream context in ffmux"));
+       return GST_FLOW_ERROR;
+     }
+ 
+-    if (av_set_parameters (ffmpegmux->context, NULL) < 0) {
+-      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, INIT, (NULL),
+-          ("Failed to initialize muxer"));
+-      return GST_FLOW_ERROR;
+-    }
+-
+     /* now open the mux format */
+     if (av_write_header (ffmpegmux->context) < 0) {
+       GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
+@@ -670,7 +663,7 @@
+     ffmpegmux->opened = TRUE;
+ 
+     /* flush the header so it will be used as streamheader */
+-    put_flush_packet (ffmpegmux->context->pb);
++    avio_flush (ffmpegmux->context->pb);
+   }
+ 
+   /* take the one with earliest timestamp,
+@@ -770,8 +763,8 @@
+     /* close down */
+     av_write_trailer (ffmpegmux->context);
+     ffmpegmux->opened = FALSE;
+-    put_flush_packet (ffmpegmux->context->pb);
+-    url_fclose (ffmpegmux->context->pb);
++    avio_flush (ffmpegmux->context->pb);
++    gst_ffmpegdata_close (ffmpegmux->context->pb);
+     gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
+     return GST_FLOW_UNEXPECTED;
+   }
+@@ -795,6 +788,10 @@
+       break;
+     case GST_STATE_CHANGE_PAUSED_TO_READY:
+       gst_collect_pads_stop (ffmpegmux->collect);
++      if (ffmpegmux->opened) {
++        ffmpegmux->opened = FALSE;
++        gst_ffmpegdata_close (ffmpegmux->context->pb);
++      }
+       break;
+     default:
+       break;
+@@ -809,7 +806,7 @@
+       gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
+       if (ffmpegmux->opened) {
+         ffmpegmux->opened = FALSE;
+-        url_fclose (ffmpegmux->context->pb);
++        avio_close (ffmpegmux->context->pb);
+       }
+       break;
+     case GST_STATE_CHANGE_READY_TO_NULL:
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c.orig	2011-07-13 11:07:28.000000000 +0200
+@@ -0,0 +1,970 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <string.h>
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avformat.h>
++#else
++#include <libavformat/avformat.h>
++#endif
++
++#include <gst/gst.h>
++#include <gst/base/gstcollectpads.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++#include "gstffmpegutils.h"
++
++typedef struct _GstFFMpegMux GstFFMpegMux;
++typedef struct _GstFFMpegMuxPad GstFFMpegMuxPad;
++
++struct _GstFFMpegMuxPad
++{
++  GstCollectData collect;       /* we extend the CollectData */
++
++  gint padnum;
++};
++
++struct _GstFFMpegMux
++{
++  GstElement element;
++
++  GstCollectPads *collect;
++  /* We need to keep track of our pads, so we do so here. */
++  GstPad *srcpad;
++
++  AVFormatContext *context;
++  gboolean opened;
++
++  gint videopads, audiopads;
++
++  /*< private > */
++  /* event_function is the collectpads default eventfunction */
++  GstPadEventFunction event_function;
++  int preload;
++  int max_delay;
++};
++
++typedef struct _GstFFMpegMuxClass GstFFMpegMuxClass;
++
++struct _GstFFMpegMuxClass
++{
++  GstElementClass parent_class;
++
++  AVOutputFormat *in_plugin;
++};
++
++#define GST_TYPE_FFMPEGMUX \
++  (gst_ffmpegdec_get_type())
++#define GST_FFMPEGMUX(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGMUX,GstFFMpegMux))
++#define GST_FFMPEGMUX_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGMUX,GstFFMpegMuxClass))
++#define GST_IS_FFMPEGMUX(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGMUX))
++#define GST_IS_FFMPEGMUX_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGMUX))
++
++enum
++{
++  /* FILL ME */
++  LAST_SIGNAL
++};
++
++enum
++{
++  ARG_0,
++  /* FILL ME */
++};
++
++enum
++{
++  PROP_0,
++  PROP_PRELOAD,
++  PROP_MAXDELAY
++};
++
++/* A number of function prototypes are given so we can refer to them later. */
++static void gst_ffmpegmux_class_init (GstFFMpegMuxClass * klass);
++static void gst_ffmpegmux_base_init (gpointer g_class);
++static void gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux,
++    GstFFMpegMuxClass * g_class);
++static void gst_ffmpegmux_finalize (GObject * object);
++
++static gboolean gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps);
++static GstPad *gst_ffmpegmux_request_new_pad (GstElement * element,
++    GstPadTemplate * templ, const gchar * name);
++static GstFlowReturn gst_ffmpegmux_collected (GstCollectPads * pads,
++    gpointer user_data);
++
++static gboolean gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event);
++
++static GstStateChangeReturn gst_ffmpegmux_change_state (GstElement * element,
++    GstStateChange transition);
++
++static void gst_ffmpegmux_set_property (GObject * object, guint prop_id,
++    const GValue * value, GParamSpec * pspec);
++static void gst_ffmpegmux_get_property (GObject * object, guint prop_id,
++    GValue * value, GParamSpec * pspec);
++
++static GstCaps *gst_ffmpegmux_get_id_caps (enum CodecID *id_list);
++static void gst_ffmpeg_mux_simple_caps_set_int_list (GstCaps * caps,
++    const gchar * field, guint num, const gint * values);
++
++#define GST_FFMUX_PARAMS_QDATA g_quark_from_static_string("ffmux-params")
++
++static GstElementClass *parent_class = NULL;
++
++/*static guint gst_ffmpegmux_signals[LAST_SIGNAL] = { 0 }; */
++
++typedef struct
++{
++  const char *name;
++  const char *replacement;
++} GstFFMpegMuxReplacement;
++
++static const char *
++gst_ffmpegmux_get_replacement (const char *name)
++{
++  static const GstFFMpegMuxReplacement blacklist[] = {
++    {"avi", "avimux"},
++    {"matroska", "matroskamux"},
++    {"mov", "qtmux"},
++    {"mpegts", "mpegtsmux"},
++    {"mp4", "mp4mux"},
++    {"mpjpeg", "multipartmux"},
++    {"ogg", "oggmux"},
++    {"wav", "wavenc"},
++    {"webm", "webmmux"},
++    {"mxf", "mxfmux"},
++    {"3gp", "gppmux"},
++    {"yuv4mpegpipe", "y4menc"},
++    {"aiff", "aiffmux"},
++    {"adts", "aacparse"},
++    {"asf", "asfmux"},
++    {"asf_stream", "asfmux"},
++    {"flv", "flvmux"},
++    {"mp3", "id3v2mux"},
++    {"mp2", "id3v2mux"}
++  };
++  int i;
++
++  for (i = 0; i < sizeof (blacklist) / sizeof (blacklist[0]); i++) {
++    if (strcmp (blacklist[i].name, name) == 0) {
++      return blacklist[i].replacement;
++    }
++  }
++
++  return NULL;
++}
++
++static gboolean
++gst_ffmpegmux_is_formatter (const char *name)
++{
++  static const char *replace[] = {
++    "mp2", "mp3", NULL
++  };
++  int i;
++
++  for (i = 0; replace[i]; i++)
++    if (strcmp (replace[i], name) == 0)
++      return TRUE;
++  return FALSE;
++}
++
++static void
++gst_ffmpegmux_base_init (gpointer g_class)
++{
++  GstFFMpegMuxClass *klass = (GstFFMpegMuxClass *) g_class;
++  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
++  GstPadTemplate *videosinktempl, *audiosinktempl, *srctempl;
++  AVOutputFormat *in_plugin;
++  GstCaps *srccaps, *audiosinkcaps, *videosinkcaps;
++  enum CodecID *video_ids = NULL, *audio_ids = NULL;
++  gchar *longname, *description;
++  const char *replacement;
++  gboolean is_formatter;
++
++  in_plugin =
++      (AVOutputFormat *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass),
++      GST_FFMUX_PARAMS_QDATA);
++  g_assert (in_plugin != NULL);
++
++  /* construct the element details struct */
++  replacement = gst_ffmpegmux_get_replacement (in_plugin->name);
++  is_formatter = gst_ffmpegmux_is_formatter (in_plugin->name);
++  if (replacement != NULL) {
++    longname =
++        g_strdup_printf ("FFmpeg %s %s (not recommended, use %s instead)",
++        in_plugin->long_name, is_formatter ? "formatter" : "muxer",
++        replacement);
++    description =
++        g_strdup_printf ("FFmpeg %s %s (not recommended, use %s instead)",
++        in_plugin->long_name, is_formatter ? "formatter" : "muxer",
++        replacement);
++  } else {
++    longname = g_strdup_printf ("FFmpeg %s %s", in_plugin->long_name,
++        is_formatter ? "formatter" : "muxer");
++    description = g_strdup_printf ("FFmpeg %s %s", in_plugin->long_name,
++        is_formatter ? "formatter" : "muxer");
++  }
++  gst_element_class_set_details_simple (element_class, longname,
++      is_formatter ? "Formatter/Metadata" : "Codec/Muxer", description,
++      "Wim Taymans <wim.taymans@chello.be>, "
++      "Ronald Bultje <rbultje@ronald.bitfreak.net>");
++  g_free (longname);
++  g_free (description);
++
++  /* Try to find the caps that belongs here */
++  srccaps = gst_ffmpeg_formatid_to_caps (in_plugin->name);
++  if (!srccaps) {
++    GST_DEBUG ("Couldn't get source caps for muxer '%s', skipping format",
++        in_plugin->name);
++    goto beach;
++  }
++
++  if (!gst_ffmpeg_formatid_get_codecids (in_plugin->name,
++          &video_ids, &audio_ids, in_plugin)) {
++    gst_caps_unref (srccaps);
++    GST_DEBUG
++        ("Couldn't get sink caps for muxer '%s'. Most likely because no input format mapping exists.",
++        in_plugin->name);
++    goto beach;
++  }
++
++  videosinkcaps = video_ids ? gst_ffmpegmux_get_id_caps (video_ids) : NULL;
++  audiosinkcaps = audio_ids ? gst_ffmpegmux_get_id_caps (audio_ids) : NULL;
++
++  /* fix up allowed caps for some muxers */
++  /* FIXME : This should be in gstffmpegcodecmap.c ! */
++  if (strcmp (in_plugin->name, "flv") == 0) {
++    const gint rates[] = { 44100, 22050, 11025 };
++
++    gst_ffmpeg_mux_simple_caps_set_int_list (audiosinkcaps, "rate", 3, rates);
++  } else if (strcmp (in_plugin->name, "gif") == 0) {
++    if (videosinkcaps)
++      gst_caps_unref (videosinkcaps);
++
++    videosinkcaps =
++        gst_caps_from_string ("video/x-raw-rgb, bpp=(int)24, depth=(int)24");
++  }
++
++  /* pad templates */
++  srctempl = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, srccaps);
++  gst_element_class_add_pad_template (element_class, srctempl);
++
++  if (audiosinkcaps) {
++    audiosinktempl = gst_pad_template_new ("audio_%d",
++        GST_PAD_SINK, GST_PAD_REQUEST, audiosinkcaps);
++    gst_element_class_add_pad_template (element_class, audiosinktempl);
++  }
++
++  if (videosinkcaps) {
++    videosinktempl = gst_pad_template_new ("video_%d",
++        GST_PAD_SINK, GST_PAD_REQUEST, videosinkcaps);
++    gst_element_class_add_pad_template (element_class, videosinktempl);
++  }
++
++beach:
++  klass->in_plugin = in_plugin;
++}
++
++static void
++gst_ffmpegmux_class_init (GstFFMpegMuxClass * klass)
++{
++  GObjectClass *gobject_class;
++  GstElementClass *gstelement_class;
++
++  gobject_class = (GObjectClass *) klass;
++  gstelement_class = (GstElementClass *) klass;
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_ffmpegmux_set_property);
++  gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_ffmpegmux_get_property);
++
++  g_object_class_install_property (gobject_class, PROP_PRELOAD,
++      g_param_spec_int ("preload", "preload",
++          "Set the initial demux-decode delay (in microseconds)", 0, G_MAXINT,
++          0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++  g_object_class_install_property (gobject_class, PROP_MAXDELAY,
++      g_param_spec_int ("maxdelay", "maxdelay",
++          "Set the maximum demux-decode delay (in microseconds)", 0, G_MAXINT,
++          0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++  gstelement_class->request_new_pad = gst_ffmpegmux_request_new_pad;
++  gstelement_class->change_state = gst_ffmpegmux_change_state;
++  gobject_class->finalize = gst_ffmpegmux_finalize;
++}
++
++static void
++gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
++{
++  GstElementClass *klass = GST_ELEMENT_CLASS (g_class);
++  GstFFMpegMuxClass *oclass = (GstFFMpegMuxClass *) klass;
++  GstPadTemplate *templ = gst_element_class_get_pad_template (klass, "src");
++
++  ffmpegmux->srcpad = gst_pad_new_from_template (templ, "src");
++  gst_pad_set_caps (ffmpegmux->srcpad, gst_pad_template_get_caps (templ));
++  gst_element_add_pad (GST_ELEMENT (ffmpegmux), ffmpegmux->srcpad);
++
++  ffmpegmux->collect = gst_collect_pads_new ();
++  gst_collect_pads_set_function (ffmpegmux->collect,
++      (GstCollectPadsFunction) gst_ffmpegmux_collected, ffmpegmux);
++
++  ffmpegmux->context = g_new0 (AVFormatContext, 1);
++  ffmpegmux->context->oformat = oclass->in_plugin;
++  ffmpegmux->context->nb_streams = 0;
++  g_snprintf (ffmpegmux->context->filename,
++      sizeof (ffmpegmux->context->filename),
++      "gstreamer://%p", ffmpegmux->srcpad);
++  ffmpegmux->opened = FALSE;
++
++  ffmpegmux->videopads = 0;
++  ffmpegmux->audiopads = 0;
++  ffmpegmux->preload = 0;
++  ffmpegmux->max_delay = 0;
++}
++
++static void
++gst_ffmpegmux_set_property (GObject * object, guint prop_id,
++    const GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegMux *src;
++
++  src = (GstFFMpegMux *) object;
++
++  switch (prop_id) {
++    case PROP_PRELOAD:
++      src->preload = g_value_get_int (value);
++      break;
++    case PROP_MAXDELAY:
++      src->max_delay = g_value_get_int (value);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++static void
++gst_ffmpegmux_get_property (GObject * object, guint prop_id, GValue * value,
++    GParamSpec * pspec)
++{
++  GstFFMpegMux *src;
++
++  src = (GstFFMpegMux *) object;
++
++  switch (prop_id) {
++    case PROP_PRELOAD:
++      g_value_set_int (value, src->preload);
++      break;
++    case PROP_MAXDELAY:
++      g_value_set_int (value, src->max_delay);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++
++static void
++gst_ffmpegmux_finalize (GObject * object)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) object;
++
++  g_free (ffmpegmux->context);
++  gst_object_unref (ffmpegmux->collect);
++
++  if (G_OBJECT_CLASS (parent_class)->finalize)
++    G_OBJECT_CLASS (parent_class)->finalize (object);
++}
++
++static GstPad *
++gst_ffmpegmux_request_new_pad (GstElement * element,
++    GstPadTemplate * templ, const gchar * name)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) element;
++  GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
++  GstFFMpegMuxPad *collect_pad;
++  gchar *padname;
++  GstPad *pad;
++  AVStream *st;
++  enum AVMediaType type;
++  gint bitrate = 0, framesize = 0;
++
++  g_return_val_if_fail (templ != NULL, NULL);
++  g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
++  g_return_val_if_fail (ffmpegmux->opened == FALSE, NULL);
++
++  /* figure out a name that *we* like */
++  if (templ == gst_element_class_get_pad_template (klass, "video_%d")) {
++    padname = g_strdup_printf ("video_%d", ffmpegmux->videopads++);
++    type = AVMEDIA_TYPE_VIDEO;
++    bitrate = 64 * 1024;
++    framesize = 1152;
++  } else if (templ == gst_element_class_get_pad_template (klass, "audio_%d")) {
++    padname = g_strdup_printf ("audio_%d", ffmpegmux->audiopads++);
++    type = AVMEDIA_TYPE_AUDIO;
++    bitrate = 285 * 1024;
++  } else {
++    g_warning ("ffmux: unknown pad template!");
++    return NULL;
++  }
++
++  /* create pad */
++  pad = gst_pad_new_from_template (templ, padname);
++  collect_pad = (GstFFMpegMuxPad *)
++      gst_collect_pads_add_pad (ffmpegmux->collect, pad,
++      sizeof (GstFFMpegMuxPad));
++  collect_pad->padnum = ffmpegmux->context->nb_streams;
++
++  /* small hack to put our own event pad function and chain up to collect pad */
++  ffmpegmux->event_function = GST_PAD_EVENTFUNC (pad);
++  gst_pad_set_event_function (pad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegmux_sink_event));
++
++  gst_pad_set_setcaps_function (pad, GST_DEBUG_FUNCPTR (gst_ffmpegmux_setcaps));
++  gst_element_add_pad (element, pad);
++
++  /* AVStream needs to be created */
++  st = av_new_stream (ffmpegmux->context, collect_pad->padnum);
++  st->codec->codec_type = type;
++  st->codec->codec_id = CODEC_ID_NONE;  /* this is a check afterwards */
++  st->stream_copy = 1;          /* we're not the actual encoder */
++  st->codec->bit_rate = bitrate;
++  st->codec->frame_size = framesize;
++  /* we fill in codec during capsnego */
++
++  /* we love debug output (c) (tm) (r) */
++  GST_DEBUG ("Created %s pad for ffmux_%s element",
++      padname, ((GstFFMpegMuxClass *) klass)->in_plugin->name);
++  g_free (padname);
++
++  return pad;
++}
++
++/**
++ * gst_ffmpegmux_setcaps
++ * @pad: #GstPad
++ * @caps: New caps.
++ *
++ * Set caps to pad.
++ *
++ * Returns: #TRUE on success.
++ */
++static gboolean
++gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) (gst_pad_get_parent (pad));
++  GstFFMpegMuxPad *collect_pad;
++  AVStream *st;
++
++  collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
++
++  st = ffmpegmux->context->streams[collect_pad->padnum];
++  ffmpegmux->context->preload = ffmpegmux->preload;
++  ffmpegmux->context->max_delay = ffmpegmux->max_delay;
++
++  /* for the format-specific guesses, we'll go to
++   * our famous codec mapper */
++  if (gst_ffmpeg_caps_to_codecid (caps, st->codec) == CODEC_ID_NONE)
++    goto not_accepted;
++
++  /* copy over the aspect ratios, ffmpeg expects the stream aspect to match the
++   * codec aspect. */
++  st->sample_aspect_ratio = st->codec->sample_aspect_ratio;
++
++  GST_LOG_OBJECT (pad, "accepted caps %" GST_PTR_FORMAT, caps);
++  return TRUE;
++
++  /* ERRORS */
++not_accepted:
++  {
++    GST_LOG_OBJECT (pad, "rejecting caps %" GST_PTR_FORMAT, caps);
++    return FALSE;
++  }
++}
++
++
++static gboolean
++gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) gst_pad_get_parent (pad);
++  gboolean res = TRUE;
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_TAG:{
++      GstTagList *taglist;
++      GstTagSetter *setter = GST_TAG_SETTER (ffmpegmux);
++      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
++
++      gst_event_parse_tag (event, &taglist);
++      gst_tag_setter_merge_tags (setter, taglist, mode);
++      break;
++    }
++    default:
++      break;
++  }
++
++  /* chaining up to collectpads default event function */
++  res = ffmpegmux->event_function (pad, event);
++
++  gst_object_unref (ffmpegmux);
++  return res;
++}
++
++static GstFlowReturn
++gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) user_data;
++  GSList *collected;
++  GstFFMpegMuxPad *best_pad;
++  GstClockTime best_time;
++#if 0
++  /* Re-enable once converted to new AVMetaData API
++   * See #566605
++   */
++  const GstTagList *tags;
++#endif
++
++  /* open "file" (gstreamer protocol to next element) */
++  if (!ffmpegmux->opened) {
++    int open_flags = URL_WRONLY;
++
++    /* we do need all streams to have started capsnego,
++     * or things will go horribly wrong */
++    for (collected = ffmpegmux->collect->data; collected;
++        collected = g_slist_next (collected)) {
++      GstFFMpegMuxPad *collect_pad = (GstFFMpegMuxPad *) collected->data;
++      AVStream *st = ffmpegmux->context->streams[collect_pad->padnum];
++
++      /* check whether the pad has successfully completed capsnego */
++      if (st->codec->codec_id == CODEC_ID_NONE) {
++        GST_ELEMENT_ERROR (ffmpegmux, CORE, NEGOTIATION, (NULL),
++            ("no caps set on stream %d (%s)", collect_pad->padnum,
++                (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ?
++                "video" : "audio"));
++        return GST_FLOW_ERROR;
++      }
++      /* set framerate for audio */
++      if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
++        switch (st->codec->codec_id) {
++          case CODEC_ID_PCM_S16LE:
++          case CODEC_ID_PCM_S16BE:
++          case CODEC_ID_PCM_U16LE:
++          case CODEC_ID_PCM_U16BE:
++          case CODEC_ID_PCM_S8:
++          case CODEC_ID_PCM_U8:
++            st->codec->frame_size = 1;
++            break;
++          default:
++          {
++            GstBuffer *buffer;
++
++            /* FIXME : This doesn't work for RAW AUDIO...
++             * in fact I'm wondering if it even works for any kind of audio... */
++            buffer = gst_collect_pads_peek (ffmpegmux->collect,
++                (GstCollectData *) collect_pad);
++            if (buffer) {
++              st->codec->frame_size =
++                  st->codec->sample_rate *
++                  GST_BUFFER_DURATION (buffer) / GST_SECOND;
++              gst_buffer_unref (buffer);
++            }
++          }
++        }
++      }
++    }
++
++#if 0
++    /* Re-enable once converted to new AVMetaData API
++     * See #566605
++     */
++
++    /* tags */
++    tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
++    if (tags) {
++      gint i;
++      gchar *s;
++
++      /* get the interesting ones */
++      if (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)) {
++        strncpy (ffmpegmux->context->title, s,
++            sizeof (ffmpegmux->context->title));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &s)) {
++        strncpy (ffmpegmux->context->author, s,
++            sizeof (ffmpegmux->context->author));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_COPYRIGHT, &s)) {
++        strncpy (ffmpegmux->context->copyright, s,
++            sizeof (ffmpegmux->context->copyright));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_COMMENT, &s)) {
++        strncpy (ffmpegmux->context->comment, s,
++            sizeof (ffmpegmux->context->comment));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_ALBUM, &s)) {
++        strncpy (ffmpegmux->context->album, s,
++            sizeof (ffmpegmux->context->album));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_GENRE, &s)) {
++        strncpy (ffmpegmux->context->genre, s,
++            sizeof (ffmpegmux->context->genre));
++      }
++      if (gst_tag_list_get_int (tags, GST_TAG_TRACK_NUMBER, &i)) {
++        ffmpegmux->context->track = i;
++      }
++    }
++#endif
++
++    /* set the streamheader flag for gstffmpegprotocol if codec supports it */
++    if (!strcmp (ffmpegmux->context->oformat->name, "flv")) {
++      open_flags |= GST_FFMPEG_URL_STREAMHEADER;
++    }
++
++    if (url_fopen (&ffmpegmux->context->pb,
++            ffmpegmux->context->filename, open_flags) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
++          ("Failed to open stream context in ffmux"));
++      return GST_FLOW_ERROR;
++    }
++
++    if (av_set_parameters (ffmpegmux->context, NULL) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, INIT, (NULL),
++          ("Failed to initialize muxer"));
++      return GST_FLOW_ERROR;
++    }
++
++    /* now open the mux format */
++    if (av_write_header (ffmpegmux->context) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
++          ("Failed to write file header - check codec settings"));
++      return GST_FLOW_ERROR;
++    }
++
++    /* we're now opened */
++    ffmpegmux->opened = TRUE;
++
++    /* flush the header so it will be used as streamheader */
++    put_flush_packet (ffmpegmux->context->pb);
++  }
++
++  /* take the one with earliest timestamp,
++   * and push it forward */
++  best_pad = NULL;
++  best_time = GST_CLOCK_TIME_NONE;
++  for (collected = ffmpegmux->collect->data; collected;
++      collected = g_slist_next (collected)) {
++    GstFFMpegMuxPad *collect_pad = (GstFFMpegMuxPad *) collected->data;
++    GstBuffer *buffer = gst_collect_pads_peek (ffmpegmux->collect,
++        (GstCollectData *) collect_pad);
++
++    /* if there's no buffer, just continue */
++    if (buffer == NULL) {
++      continue;
++    }
++
++    /* if we have no buffer yet, just use the first one */
++    if (best_pad == NULL) {
++      best_pad = collect_pad;
++      best_time = GST_BUFFER_TIMESTAMP (buffer);
++      goto next_pad;
++    }
++
++    /* if we do have one, only use this one if it's older */
++    if (GST_BUFFER_TIMESTAMP (buffer) < best_time) {
++      best_time = GST_BUFFER_TIMESTAMP (buffer);
++      best_pad = collect_pad;
++    }
++
++  next_pad:
++    gst_buffer_unref (buffer);
++
++    /* Mux buffers with invalid timestamp first */
++    if (!GST_CLOCK_TIME_IS_VALID (best_time))
++      break;
++  }
++
++  /* now handle the buffer, or signal EOS if we have
++   * no buffers left */
++  if (best_pad != NULL) {
++    GstBuffer *buf;
++    AVPacket pkt;
++    gboolean need_free = FALSE;
++
++    /* push out current buffer */
++    buf = gst_collect_pads_pop (ffmpegmux->collect,
++        (GstCollectData *) best_pad);
++
++    ffmpegmux->context->streams[best_pad->padnum]->codec->frame_number++;
++
++    /* set time */
++    pkt.pts = gst_ffmpeg_time_gst_to_ff (GST_BUFFER_TIMESTAMP (buf),
++        ffmpegmux->context->streams[best_pad->padnum]->time_base);
++    pkt.dts = pkt.pts;
++
++    if (strcmp (ffmpegmux->context->oformat->name, "gif") == 0) {
++      AVStream *st = ffmpegmux->context->streams[best_pad->padnum];
++      AVPicture src, dst;
++
++      need_free = TRUE;
++      pkt.size = st->codec->width * st->codec->height * 3;
++      pkt.data = g_malloc (pkt.size);
++
++      dst.data[0] = pkt.data;
++      dst.data[1] = NULL;
++      dst.data[2] = NULL;
++      dst.linesize[0] = st->codec->width * 3;
++
++      gst_ffmpeg_avpicture_fill (&src, GST_BUFFER_DATA (buf),
++          PIX_FMT_RGB24, st->codec->width, st->codec->height);
++
++      av_picture_copy (&dst, &src, PIX_FMT_RGB24,
++          st->codec->width, st->codec->height);
++    } else {
++      pkt.data = GST_BUFFER_DATA (buf);
++      pkt.size = GST_BUFFER_SIZE (buf);
++    }
++
++    pkt.stream_index = best_pad->padnum;
++    pkt.flags = 0;
++
++    if (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT))
++      pkt.flags |= AV_PKT_FLAG_KEY;
++
++    if (GST_BUFFER_DURATION_IS_VALID (buf))
++      pkt.duration =
++          gst_ffmpeg_time_gst_to_ff (GST_BUFFER_DURATION (buf),
++          ffmpegmux->context->streams[best_pad->padnum]->time_base);
++    else
++      pkt.duration = 0;
++    av_write_frame (ffmpegmux->context, &pkt);
++    gst_buffer_unref (buf);
++    if (need_free)
++      g_free (pkt.data);
++  } else {
++    /* close down */
++    av_write_trailer (ffmpegmux->context);
++    ffmpegmux->opened = FALSE;
++    put_flush_packet (ffmpegmux->context->pb);
++    url_fclose (ffmpegmux->context->pb);
++    gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
++    return GST_FLOW_UNEXPECTED;
++  }
++
++  return GST_FLOW_OK;
++}
++
++static GstStateChangeReturn
++gst_ffmpegmux_change_state (GstElement * element, GstStateChange transition)
++{
++  GstFlowReturn ret;
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) (element);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_NULL_TO_READY:
++      break;
++    case GST_STATE_CHANGE_READY_TO_PAUSED:
++      gst_collect_pads_start (ffmpegmux->collect);
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      gst_collect_pads_stop (ffmpegmux->collect);
++      break;
++    default:
++      break;
++  }
++
++  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
++      if (ffmpegmux->opened) {
++        ffmpegmux->opened = FALSE;
++        url_fclose (ffmpegmux->context->pb);
++      }
++      break;
++    case GST_STATE_CHANGE_READY_TO_NULL:
++      break;
++    default:
++      break;
++  }
++
++  return ret;
++}
++
++static GstCaps *
++gst_ffmpegmux_get_id_caps (enum CodecID *id_list)
++{
++  GstCaps *caps, *t;
++  gint i;
++
++  caps = gst_caps_new_empty ();
++  for (i = 0; id_list[i] != CODEC_ID_NONE; i++) {
++    if ((t = gst_ffmpeg_codecid_to_caps (id_list[i], NULL, TRUE)))
++      gst_caps_append (caps, t);
++  }
++  if (gst_caps_is_empty (caps)) {
++    gst_caps_unref (caps);
++    return NULL;
++  }
++
++  return caps;
++}
++
++/* set a list of integer values on the caps, e.g. for sample rates */
++static void
++gst_ffmpeg_mux_simple_caps_set_int_list (GstCaps * caps, const gchar * field,
++    guint num, const gint * values)
++{
++  GValue list = { 0, };
++  GValue val = { 0, };
++  gint i;
++
++  g_return_if_fail (GST_CAPS_IS_SIMPLE (caps));
++
++  g_value_init (&list, GST_TYPE_LIST);
++  g_value_init (&val, G_TYPE_INT);
++
++  for (i = 0; i < num; ++i) {
++    g_value_set_int (&val, values[i]);
++    gst_value_list_append_value (&list, &val);
++  }
++
++  gst_structure_set_value (gst_caps_get_structure (caps, 0), field, &list);
++
++  g_value_unset (&val);
++  g_value_unset (&list);
++}
++
++gboolean
++gst_ffmpegmux_register (GstPlugin * plugin)
++{
++  GTypeInfo typeinfo = {
++    sizeof (GstFFMpegMuxClass),
++    (GBaseInitFunc) gst_ffmpegmux_base_init,
++    NULL,
++    (GClassInitFunc) gst_ffmpegmux_class_init,
++    NULL,
++    NULL,
++    sizeof (GstFFMpegMux),
++    0,
++    (GInstanceInitFunc) gst_ffmpegmux_init,
++  };
++  static const GInterfaceInfo tag_setter_info = {
++    NULL, NULL, NULL
++  };
++  GType type;
++  AVOutputFormat *in_plugin;
++
++  in_plugin = av_oformat_next (NULL);
++
++  GST_LOG ("Registering muxers");
++
++  while (in_plugin) {
++    gchar *type_name;
++    gchar *p;
++    GstRank rank = GST_RANK_MARGINAL;
++
++    if ((!strncmp (in_plugin->name, "u16", 3)) ||
++        (!strncmp (in_plugin->name, "s16", 3)) ||
++        (!strncmp (in_plugin->name, "u24", 3)) ||
++        (!strncmp (in_plugin->name, "s24", 3)) ||
++        (!strncmp (in_plugin->name, "u8", 2)) ||
++        (!strncmp (in_plugin->name, "s8", 2)) ||
++        (!strncmp (in_plugin->name, "u32", 3)) ||
++        (!strncmp (in_plugin->name, "s32", 3)) ||
++        (!strncmp (in_plugin->name, "f32", 3)) ||
++        (!strncmp (in_plugin->name, "f64", 3)) ||
++        (!strncmp (in_plugin->name, "raw", 3)) ||
++        (!strncmp (in_plugin->name, "crc", 3)) ||
++        (!strncmp (in_plugin->name, "null", 4)) ||
++        (!strncmp (in_plugin->name, "gif", 3)) ||
++        (!strncmp (in_plugin->name, "frame", 5)) ||
++        (!strncmp (in_plugin->name, "image", 5)) ||
++        (!strncmp (in_plugin->name, "mulaw", 5)) ||
++        (!strncmp (in_plugin->name, "alaw", 4)) ||
++        (!strncmp (in_plugin->name, "h26", 3)) ||
++        (!strncmp (in_plugin->name, "rtp", 3)) ||
++        (!strncmp (in_plugin->name, "ass", 3)) ||
++        (!strncmp (in_plugin->name, "ffmetadata", 10)) ||
++        (!strncmp (in_plugin->name, "srt", 3))
++        ) {
++      GST_LOG ("Ignoring muxer %s", in_plugin->name);
++      goto next;
++    }
++
++    if ((!strncmp (in_plugin->long_name, "raw ", 4))) {
++      GST_LOG ("Ignoring raw muxer %s", in_plugin->name);
++      goto next;
++    }
++
++    if (gst_ffmpegmux_get_replacement (in_plugin->name))
++      rank = GST_RANK_NONE;
++
++    /* FIXME : We need a fast way to know whether we have mappings for this
++     * muxer type. */
++
++    /* construct the type */
++    type_name = g_strdup_printf ("ffmux_%s", in_plugin->name);
++
++    p = type_name;
++
++    while (*p) {
++      if (*p == '.')
++        *p = '_';
++      p++;
++    }
++
++    type = g_type_from_name (type_name);
++
++    if (!type) {
++      /* create the type now */
++      type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0);
++      g_type_set_qdata (type, GST_FFMUX_PARAMS_QDATA, (gpointer) in_plugin);
++      g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, &tag_setter_info);
++    }
++
++    if (!gst_element_register (plugin, type_name, rank, type)) {
++      g_free (type_name);
++      return FALSE;
++    }
++
++    g_free (type_name);
++
++  next:
++    in_plugin = av_oformat_next (in_plugin);
++  }
++
++  GST_LOG ("Finished registering muxers");
++
++  return TRUE;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegprotocol.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegprotocol.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegprotocol.c	2011-07-12 16:35:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegprotocol.c	2014-08-08 15:26:07.875857555 +0200
+@@ -46,63 +46,14 @@
+ };
+ 
+ static int
+-gst_ffmpegdata_open (URLContext * h, const char *filename, int flags)
+-{
+-  GstProtocolInfo *info;
+-  GstPad *pad;
+-
+-  GST_LOG ("Opening %s", filename);
+-
+-  info = g_new0 (GstProtocolInfo, 1);
+-
+-  info->set_streamheader = flags & GST_FFMPEG_URL_STREAMHEADER;
+-  flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+-  h->flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+-
+-  /* we don't support R/W together */
+-  if (flags != URL_RDONLY && flags != URL_WRONLY) {
+-    GST_WARNING ("Only read-only or write-only are supported");
+-    return -EINVAL;
+-  }
+-
+-  if (sscanf (&filename[12], "%p", &pad) != 1) {
+-    GST_WARNING ("could not decode pad from %s", filename);
+-    return -EIO;
+-  }
+-
+-  /* make sure we're a pad and that we're of the right type */
+-  g_return_val_if_fail (GST_IS_PAD (pad), -EINVAL);
+-
+-  switch (flags) {
+-    case URL_RDONLY:
+-      g_return_val_if_fail (GST_PAD_IS_SINK (pad), -EINVAL);
+-      break;
+-    case URL_WRONLY:
+-      g_return_val_if_fail (GST_PAD_IS_SRC (pad), -EINVAL);
+-      break;
+-  }
+-
+-  info->eos = FALSE;
+-  info->pad = pad;
+-  info->offset = 0;
+-
+-  h->priv_data = (void *) info;
+-  h->is_streamed = FALSE;
+-  h->max_packet_size = 0;
+-
+-  return 0;
+-}
+-
+-static int
+-gst_ffmpegdata_peek (URLContext * h, unsigned char *buf, int size)
++gst_ffmpegdata_peek (void *priv_data, unsigned char *buf, int size)
+ {
+   GstProtocolInfo *info;
+   GstBuffer *inbuf = NULL;
+   GstFlowReturn ret;
+   int total = 0;
+ 
+-  g_return_val_if_fail (h->flags == URL_RDONLY, AVERROR (EIO));
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   GST_DEBUG ("Pulling %d bytes at position %" G_GUINT64_FORMAT, size,
+       info->offset);
+@@ -134,17 +85,17 @@
+ }
+ 
+ static int
+-gst_ffmpegdata_read (URLContext * h, unsigned char *buf, int size)
++gst_ffmpegdata_read (void *priv_data, unsigned char *buf, int size)
+ {
+   gint res;
+   GstProtocolInfo *info;
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   GST_DEBUG ("Reading %d bytes of data at position %" G_GUINT64_FORMAT, size,
+       info->offset);
+ 
+-  res = gst_ffmpegdata_peek (h, buf, size);
++  res = gst_ffmpegdata_peek (priv_data, buf, size);
+   if (res >= 0)
+     info->offset += res;
+ 
+@@ -154,15 +105,13 @@
+ }
+ 
+ static int
+-gst_ffmpegdata_write (URLContext * h, const unsigned char *buf, int size)
++gst_ffmpegdata_write (void *priv_data, const unsigned char *buf, int size)
+ {
+   GstProtocolInfo *info;
+   GstBuffer *outbuf;
+ 
+   GST_DEBUG ("Writing %d bytes", size);
+-  info = (GstProtocolInfo *) h->priv_data;
+-
+-  g_return_val_if_fail (h->flags != URL_RDONLY, -EIO);
++  info = (GstProtocolInfo *) priv_data;
+ 
+   /* create buffer and push data further */
+   if (gst_pad_alloc_buffer_and_set_caps (info->pad,
+@@ -179,7 +128,7 @@
+ }
+ 
+ static int64_t
+-gst_ffmpegdata_seek (URLContext * h, int64_t pos, int whence)
++gst_ffmpegdata_seek (void *priv_data, int64_t pos, int whence)
+ {
+   GstProtocolInfo *info;
+   guint64 newpos = 0;
+@@ -187,70 +136,62 @@
+   GST_DEBUG ("Seeking to %" G_GINT64_FORMAT ", whence=%d",
+       (gint64) pos, whence);
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   /* TODO : if we are push-based, we need to return sensible info */
+ 
+-  switch (h->flags) {
+-    case URL_RDONLY:
+-    {
+-      /* sinkpad */
+-      switch (whence) {
+-        case SEEK_SET:
+-          newpos = (guint64) pos;
+-          break;
+-        case SEEK_CUR:
+-          newpos = info->offset + pos;
+-          break;
+-        case SEEK_END:
+-        case AVSEEK_SIZE:
+-          /* ffmpeg wants to know the current end position in bytes ! */
+-        {
+-          GstFormat format = GST_FORMAT_BYTES;
+-          gint64 duration;
+-
+-          GST_DEBUG ("Seek end");
+-
+-          if (gst_pad_is_linked (info->pad))
+-            if (gst_pad_query_duration (GST_PAD_PEER (info->pad), &format,
+-                    &duration))
+-              newpos = ((guint64) duration) + pos;
+-        }
+-          break;
+-        default:
+-          g_assert (0);
+-          break;
++  if (GST_PAD_IS_SINK (info->pad)) {
++    /* sinkpad */
++    switch (whence) {
++      case SEEK_SET:
++        newpos = (guint64) pos;
++        break;
++      case SEEK_CUR:
++        newpos = info->offset + pos;
++        break;
++      case SEEK_END:
++      case AVSEEK_SIZE:
++        /* ffmpeg wants to know the current end position in bytes ! */
++      {
++        GstFormat format = GST_FORMAT_BYTES;
++        gint64 duration;
++
++        GST_DEBUG ("Seek end");
++
++        if (gst_pad_is_linked (info->pad))
++          if (gst_pad_query_duration (GST_PAD_PEER (info->pad), &format,
++                  &duration))
++            newpos = ((guint64) duration) + pos;
+       }
+-      /* FIXME : implement case for push-based behaviour */
+-      if (whence != AVSEEK_SIZE)
+-        info->offset = newpos;
++        break;
++      default:
++        g_assert (0);
++        break;
+     }
+-      break;
+-    case URL_WRONLY:
+-    {
+-      /* srcpad */
+-      switch (whence) {
+-        case SEEK_SET:
+-          info->offset = (guint64) pos;
+-          gst_pad_push_event (info->pad, gst_event_new_new_segment
+-              (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
+-                  GST_CLOCK_TIME_NONE, info->offset));
+-          break;
+-        case SEEK_CUR:
+-          info->offset += pos;
+-          gst_pad_push_event (info->pad, gst_event_new_new_segment
+-              (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
+-                  GST_CLOCK_TIME_NONE, info->offset));
+-          break;
+-        default:
+-          break;
+-      }
+-      newpos = info->offset;
++    /* FIXME : implement case for push-based behaviour */
++    if (whence != AVSEEK_SIZE)
++      info->offset = newpos;
++  } else if (GST_PAD_IS_SRC (info->pad)) {
++    /* srcpad */
++    switch (whence) {
++      case SEEK_SET:
++        info->offset = (guint64) pos;
++        gst_pad_push_event (info->pad, gst_event_new_new_segment
++            (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
++                GST_CLOCK_TIME_NONE, info->offset));
++        break;
++      case SEEK_CUR:
++        info->offset += pos;
++        gst_pad_push_event (info->pad, gst_event_new_new_segment
++            (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
++                GST_CLOCK_TIME_NONE, info->offset));
++        break;
++      default:
++        break;
+     }
+-      break;
+-    default:
+-      g_assert (0);
+-      break;
++    newpos = info->offset;
++  } else {
++    g_assert_not_reached ();
+   }
+ 
+   GST_DEBUG ("Now at offset %" G_GUINT64_FORMAT " (returning %" G_GUINT64_FORMAT
+@@ -258,85 +199,91 @@
+   return newpos;
+ }
+ 
+-static int
+-gst_ffmpegdata_close (URLContext * h)
++int
++gst_ffmpegdata_close (AVIOContext * h)
+ {
+   GstProtocolInfo *info;
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) h->opaque;
+   if (info == NULL)
+     return 0;
+ 
+   GST_LOG ("Closing file");
+ 
+-  switch (h->flags) {
+-    case URL_WRONLY:
+-    {
+-      /* send EOS - that closes down the stream */
+-      gst_pad_push_event (info->pad, gst_event_new_eos ());
+-      break;
+-    }
+-    default:
+-      break;
++  if (GST_PAD_IS_SRC (info->pad)) {
++    /* send EOS - that closes down the stream */
++    gst_pad_push_event (info->pad, gst_event_new_eos ());
+   }
+ 
+   /* clean up data */
+   g_free (info);
+-  h->priv_data = NULL;
++  h->opaque = NULL;
++
++  av_freep (&h->buffer);
++  av_free (h);
+ 
+   return 0;
+ }
+ 
++int
++gst_ffmpegdata_open (GstPad * pad, int flags, AVIOContext ** context)
++{
++  GstProtocolInfo *info;
++  static const int buffer_size = 4096;
++  unsigned char *buffer = NULL;
+ 
+-URLProtocol gstreamer_protocol = {
+-  /*.name = */ "gstreamer",
+-  /*.url_open = */ gst_ffmpegdata_open,
+-  /*.url_read = */ gst_ffmpegdata_read,
+-  /*.url_write = */ gst_ffmpegdata_write,
+-  /*.url_seek = */ gst_ffmpegdata_seek,
+-  /*.url_close = */ gst_ffmpegdata_close,
+-};
++  info = g_new0 (GstProtocolInfo, 1);
+ 
++  info->set_streamheader = flags & GST_FFMPEG_URL_STREAMHEADER;
++  flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+ 
+-/* specialized protocol for cross-thread pushing,
+- * based on ffmpeg's pipe protocol */
++  /* we don't support R/W together */
++  if ((flags & AVIO_FLAG_WRITE) && (flags & AVIO_FLAG_READ)) {
++    GST_WARNING ("Only read-only or write-only are supported");
++    return -EINVAL;
++  }
+ 
+-static int
+-gst_ffmpeg_pipe_open (URLContext * h, const char *filename, int flags)
+-{
+-  GstFFMpegPipe *ffpipe;
++  /* make sure we're a pad and that we're of the right type */
++  g_return_val_if_fail (GST_IS_PAD (pad), -EINVAL);
+ 
+-  GST_LOG ("Opening %s", filename);
++  if ((flags & AVIO_FLAG_READ))
++    g_return_val_if_fail (GST_PAD_IS_SINK (pad), -EINVAL);
++  if ((flags & AVIO_FLAG_WRITE))
++    g_return_val_if_fail (GST_PAD_IS_SRC (pad), -EINVAL);
+ 
+-  /* we don't support W together */
+-  if (flags != URL_RDONLY) {
+-    GST_WARNING ("Only read-only is supported");
+-    return -EINVAL;
+-  }
++  info->eos = FALSE;
++  info->pad = pad;
++  info->offset = 0;
+ 
+-  if (sscanf (&filename[10], "%p", &ffpipe) != 1) {
+-    GST_WARNING ("could not decode pipe info from %s", filename);
+-    return -EIO;
++  buffer = av_malloc (buffer_size);
++  if (buffer == NULL) {
++    GST_WARNING ("Failed to allocate buffer");
++    return -ENOMEM;
+   }
+ 
+-  /* sanity check */
+-  g_return_val_if_fail (GST_IS_ADAPTER (ffpipe->adapter), -EINVAL);
+-
+-  h->priv_data = (void *) ffpipe;
+-  h->is_streamed = TRUE;
+-  h->max_packet_size = 0;
++  *context =
++      avio_alloc_context (buffer, buffer_size, flags, (void *) info,
++      gst_ffmpegdata_read, gst_ffmpegdata_write, gst_ffmpegdata_seek);
++  (*context)->seekable = AVIO_SEEKABLE_NORMAL;
++  if (!(flags & AVIO_FLAG_WRITE)) {
++    (*context)->buf_ptr = (*context)->buf_end;
++    (*context)->write_flag = 0;
++  }
+ 
+   return 0;
+ }
+ 
++/* specialized protocol for cross-thread pushing,
++ * based on ffmpeg's pipe protocol */
++
+ static int
+-gst_ffmpeg_pipe_read (URLContext * h, unsigned char *buf, int size)
++gst_ffmpeg_pipe_read (void *priv_data, unsigned char *buf, int size)
+ {
+   GstFFMpegPipe *ffpipe;
+   const guint8 *data;
+   guint available;
+ 
+-  ffpipe = (GstFFMpegPipe *) h->priv_data;
++  ffpipe = (GstFFMpegPipe *) priv_data;
+ 
+   GST_LOG ("requested size %d", size);
+ 
+@@ -367,21 +314,38 @@
+   return size;
+ }
+ 
+-static int
+-gst_ffmpeg_pipe_close (URLContext * h)
++int
++gst_ffmpeg_pipe_close (AVIOContext * h)
+ {
+   GST_LOG ("Closing pipe");
+ 
+-  h->priv_data = NULL;
++  h->opaque = NULL;
++  av_freep (&h->buffer);
++  av_free (h);
+ 
+   return 0;
+ }
+ 
+-URLProtocol gstpipe_protocol = {
+-  "gstpipe",
+-  gst_ffmpeg_pipe_open,
+-  gst_ffmpeg_pipe_read,
+-  NULL,
+-  NULL,
+-  gst_ffmpeg_pipe_close,
+-};
++int
++gst_ffmpeg_pipe_open (GstFFMpegPipe * ffpipe, int flags, AVIOContext ** context)
++{
++  static const int buffer_size = 4096;
++  unsigned char *buffer = NULL;
++
++  /* sanity check */
++  g_return_val_if_fail (GST_IS_ADAPTER (ffpipe->adapter), -EINVAL);
++
++  buffer = av_malloc (buffer_size);
++  if (buffer == NULL) {
++    GST_WARNING ("Failed to allocate buffer");
++    return -ENOMEM;
++  }
++
++  *context =
++      avio_alloc_context (buffer, buffer_size, 0, (void *) ffpipe,
++      gst_ffmpeg_pipe_read, NULL, NULL);
++  (*context)->seekable = 0;
++  (*context)->buf_ptr = (*context)->buf_end;
++
++  return 0;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c	2014-08-08 15:34:04.007874626 +0200
+@@ -25,6 +25,11 @@
+ #ifdef __APPLE__
+ #include <sys/sysctl.h>
+ #endif
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avformat.h>
++#else
++#include <libavformat/avformat.h>
++#endif
+ 
+ G_CONST_RETURN gchar *
+ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
+@@ -39,21 +44,21 @@
+ }
+ 
+ gint
+-av_smp_format_depth (enum SampleFormat smp_fmt)
++av_smp_format_depth (enum AVSampleFormat smp_fmt)
+ {
+   gint depth = -1;
+   switch (smp_fmt) {
+-    case SAMPLE_FMT_U8:
++    case AV_SAMPLE_FMT_U8:
+       depth = 1;
+       break;
+-    case SAMPLE_FMT_S16:
++    case AV_SAMPLE_FMT_S16:
+       depth = 2;
+       break;
+-    case SAMPLE_FMT_S32:
+-    case SAMPLE_FMT_FLT:
++    case AV_SAMPLE_FMT_S32:
++    case AV_SAMPLE_FMT_FLT:
+       depth = 4;
+       break;
+-    case SAMPLE_FMT_DBL:
++    case AV_SAMPLE_FMT_DBL:
+       depth = 8;
+       break;
+     default:
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c.orig	2011-07-13 11:07:28.000000000 +0200
+@@ -0,0 +1,483 @@
++/* GStreamer
++ * Copyright (c) 2009 Edward Hervey <bilboed@bilboed.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++#include "gstffmpegutils.h"
++#include <unistd.h>
++#ifdef __APPLE__
++#include <sys/sysctl.h>
++#endif
++
++G_CONST_RETURN gchar *
++gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
++{
++  AVCodec *codec;
++  /* Let's use what ffmpeg can provide us */
++
++  if ((codec = avcodec_find_decoder (codec_id)) ||
++      (codec = avcodec_find_encoder (codec_id)))
++    return codec->long_name;
++  return NULL;
++}
++
++gint
++av_smp_format_depth (enum SampleFormat smp_fmt)
++{
++  gint depth = -1;
++  switch (smp_fmt) {
++    case SAMPLE_FMT_U8:
++      depth = 1;
++      break;
++    case SAMPLE_FMT_S16:
++      depth = 2;
++      break;
++    case SAMPLE_FMT_S32:
++    case SAMPLE_FMT_FLT:
++      depth = 4;
++      break;
++    case SAMPLE_FMT_DBL:
++      depth = 8;
++      break;
++    default:
++      GST_ERROR ("UNHANDLED SAMPLE FORMAT !");
++      break;
++  }
++  return depth;
++}
++
++
++/*
++ * Fill in pointers to memory in a AVPicture, where
++ * everything is aligned by 4 (as required by X).
++ * This is mostly a copy from imgconvert.c with some
++ * small changes.
++ */
++
++#define FF_COLOR_RGB      0     /* RGB color space */
++#define FF_COLOR_GRAY     1     /* gray color space */
++#define FF_COLOR_YUV      2     /* YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
++#define FF_COLOR_YUV_JPEG 3     /* YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
++
++#define FF_PIXEL_PLANAR   0     /* each channel has one component in AVPicture */
++#define FF_PIXEL_PACKED   1     /* only one components containing all the channels */
++#define FF_PIXEL_PALETTE  2     /* one components containing indexes for a palette */
++
++typedef struct PixFmtInfo
++{
++  const char *name;
++  uint8_t nb_channels;          /* number of channels (including alpha) */
++  uint8_t color_type;           /* color type (see FF_COLOR_xxx constants) */
++  uint8_t pixel_type;           /* pixel storage type (see FF_PIXEL_xxx constants) */
++  uint8_t is_alpha:1;           /* true if alpha can be specified */
++  uint8_t x_chroma_shift;       /* X chroma subsampling factor is 2 ^ shift */
++  uint8_t y_chroma_shift;       /* Y chroma subsampling factor is 2 ^ shift */
++  uint8_t depth;                /* bit depth of the color components */
++} PixFmtInfo;
++
++
++/* this table gives more information about formats */
++static PixFmtInfo pix_fmt_info[PIX_FMT_NB];
++void
++gst_ffmpeg_init_pix_fmt_info (void)
++{
++  /* YUV formats */
++  pix_fmt_info[PIX_FMT_YUV420P].name = g_strdup ("yuv420p");
++  pix_fmt_info[PIX_FMT_YUV420P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV420P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV420P].depth = 8,
++      pix_fmt_info[PIX_FMT_YUV420P].x_chroma_shift = 1,
++      pix_fmt_info[PIX_FMT_YUV420P].y_chroma_shift = 1;
++
++  pix_fmt_info[PIX_FMT_YUV422P].name = g_strdup ("yuv422p");
++  pix_fmt_info[PIX_FMT_YUV422P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV422P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV422P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV422P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV422P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUV422P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUV444P].name = g_strdup ("yuv444p");
++  pix_fmt_info[PIX_FMT_YUV444P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV444P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV444P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV444P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV444P].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_YUV444P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUYV422].name = g_strdup ("yuv422");
++  pix_fmt_info[PIX_FMT_YUYV422].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_YUYV422].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUYV422].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_YUYV422].depth = 8;
++  pix_fmt_info[PIX_FMT_YUYV422].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUYV422].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUV410P].name = g_strdup ("yuv410p");
++  pix_fmt_info[PIX_FMT_YUV410P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV410P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV410P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV410P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV410P].x_chroma_shift = 2;
++  pix_fmt_info[PIX_FMT_YUV410P].y_chroma_shift = 2;
++
++  pix_fmt_info[PIX_FMT_YUV411P].name = g_strdup ("yuv411p");
++  pix_fmt_info[PIX_FMT_YUV411P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV411P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV411P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV411P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV411P].x_chroma_shift = 2;
++  pix_fmt_info[PIX_FMT_YUV411P].y_chroma_shift = 0;
++
++  /* JPEG YUV */
++  pix_fmt_info[PIX_FMT_YUVJ420P].name = g_strdup ("yuvj420p");
++  pix_fmt_info[PIX_FMT_YUVJ420P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ420P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ420P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ420P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUVJ420P].y_chroma_shift = 1;
++
++  pix_fmt_info[PIX_FMT_YUVJ422P].name = g_strdup ("yuvj422p");
++  pix_fmt_info[PIX_FMT_YUVJ422P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ422P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ422P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ422P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ422P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUVJ422P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUVJ444P].name = g_strdup ("yuvj444p");
++  pix_fmt_info[PIX_FMT_YUVJ444P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ444P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ444P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ444P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ444P].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_YUVJ444P].y_chroma_shift = 0;
++
++  /* RGB formats */
++  pix_fmt_info[PIX_FMT_RGB24].name = g_strdup ("rgb24");
++  pix_fmt_info[PIX_FMT_RGB24].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_RGB24].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB24].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB24].depth = 8;
++  pix_fmt_info[PIX_FMT_RGB24].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB24].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_BGR24].name = g_strdup ("bgr24");
++  pix_fmt_info[PIX_FMT_BGR24].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_BGR24].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_BGR24].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_BGR24].depth = 8;
++  pix_fmt_info[PIX_FMT_BGR24].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_BGR24].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB32].name = g_strdup ("rgba32");
++  pix_fmt_info[PIX_FMT_RGB32].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_RGB32].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_RGB32].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB32].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB32].depth = 8;
++  pix_fmt_info[PIX_FMT_RGB32].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB32].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB565].name = g_strdup ("rgb565");
++  pix_fmt_info[PIX_FMT_RGB565].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_RGB565].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB565].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB565].depth = 5;
++  pix_fmt_info[PIX_FMT_RGB565].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB565].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB555].name = g_strdup ("rgb555");
++  pix_fmt_info[PIX_FMT_RGB555].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_RGB555].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_RGB555].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB555].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB555].depth = 5;
++  pix_fmt_info[PIX_FMT_RGB555].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB555].y_chroma_shift = 0;
++
++  /* gray / mono formats */
++  pix_fmt_info[PIX_FMT_GRAY8].name = g_strdup ("gray");
++  pix_fmt_info[PIX_FMT_GRAY8].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_GRAY8].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_GRAY8].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_GRAY8].depth = 8;
++
++  pix_fmt_info[PIX_FMT_MONOWHITE].name = g_strdup ("monow");
++  pix_fmt_info[PIX_FMT_MONOWHITE].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_MONOWHITE].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_MONOWHITE].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_MONOWHITE].depth = 1;
++
++  pix_fmt_info[PIX_FMT_MONOBLACK].name = g_strdup ("monob");
++  pix_fmt_info[PIX_FMT_MONOBLACK].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_MONOBLACK].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_MONOBLACK].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_MONOBLACK].depth = 1;
++
++  /* paletted formats */
++  pix_fmt_info[PIX_FMT_PAL8].name = g_strdup ("pal8");
++  pix_fmt_info[PIX_FMT_PAL8].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_PAL8].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_PAL8].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_PAL8].pixel_type = FF_PIXEL_PALETTE;
++  pix_fmt_info[PIX_FMT_PAL8].depth = 8;
++
++  pix_fmt_info[PIX_FMT_YUVA420P].name = g_strdup ("yuva420p");
++  pix_fmt_info[PIX_FMT_YUVA420P].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_YUVA420P].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_YUVA420P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUVA420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVA420P].depth = 8,
++      pix_fmt_info[PIX_FMT_YUVA420P].x_chroma_shift = 1,
++      pix_fmt_info[PIX_FMT_YUVA420P].y_chroma_shift = 1;
++};
++
++int
++gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height)
++{
++  AVPicture dummy_pict;
++
++  return gst_ffmpeg_avpicture_fill (&dummy_pict, NULL, pix_fmt, width, height);
++}
++
++#define GEN_MASK(x) ((1<<(x))-1)
++#define ROUND_UP_X(v,x) (((v) + GEN_MASK(x)) & ~GEN_MASK(x))
++#define ROUND_UP_2(x) ROUND_UP_X (x, 1)
++#define ROUND_UP_4(x) ROUND_UP_X (x, 2)
++#define ROUND_UP_8(x) ROUND_UP_X (x, 3)
++#define DIV_ROUND_UP_X(v,x) (((v) + GEN_MASK(x)) >> (x))
++
++int
++gst_ffmpeg_avpicture_fill (AVPicture * picture,
++    uint8_t * ptr, enum PixelFormat pix_fmt, int width, int height)
++{
++  int size, w2, h2, size2;
++  int stride, stride2;
++  PixFmtInfo *pinfo;
++
++  pinfo = &pix_fmt_info[pix_fmt];
++
++  switch (pix_fmt) {
++    case PIX_FMT_YUV420P:
++    case PIX_FMT_YUV422P:
++    case PIX_FMT_YUV444P:
++    case PIX_FMT_YUV410P:
++    case PIX_FMT_YUV411P:
++    case PIX_FMT_YUVJ420P:
++    case PIX_FMT_YUVJ422P:
++    case PIX_FMT_YUVJ444P:
++      stride = ROUND_UP_4 (width);
++      h2 = ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size = stride * h2;
++      w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift);
++      stride2 = ROUND_UP_4 (w2);
++      h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size2 = stride2 * h2;
++      picture->data[0] = ptr;
++      picture->data[1] = picture->data[0] + size;
++      picture->data[2] = picture->data[1] + size2;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = stride2;
++      picture->linesize[2] = stride2;
++      picture->linesize[3] = 0;
++      GST_DEBUG ("planes %d %d %d", 0, size, size + size2);
++      GST_DEBUG ("strides %d %d %d", stride, stride2, stride2);
++      return size + 2 * size2;
++    case PIX_FMT_YUVA420P:
++      stride = ROUND_UP_4 (width);
++      h2 = ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size = stride * h2;
++      w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift);
++      stride2 = ROUND_UP_4 (w2);
++      h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size2 = stride2 * h2;
++      picture->data[0] = ptr;
++      picture->data[1] = picture->data[0] + size;
++      picture->data[2] = picture->data[1] + size2;
++      picture->data[3] = picture->data[2] + size2;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = stride2;
++      picture->linesize[2] = stride2;
++      picture->linesize[3] = stride;
++      GST_DEBUG ("planes %d %d %d %d", 0, size, size + size2, size + 2 * size2);
++      GST_DEBUG ("strides %d %d %d %d", stride, stride2, stride2, stride);
++      return 2 * size + 2 * size2;
++    case PIX_FMT_RGB24:
++    case PIX_FMT_BGR24:
++      stride = ROUND_UP_4 (width * 3);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++      /*case PIX_FMT_AYUV4444:
++         case PIX_FMT_BGR32:
++         case PIX_FMT_BGRA32:
++         case PIX_FMT_RGB32: */
++    case PIX_FMT_RGB32:
++      stride = width * 4;
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_RGB555:
++    case PIX_FMT_RGB565:
++    case PIX_FMT_YUYV422:
++    case PIX_FMT_UYVY422:
++      stride = ROUND_UP_4 (width * 2);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_UYYVYY411:
++      /* FIXME, probably not the right stride */
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = width + width / 2;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size + size / 2;
++    case PIX_FMT_GRAY8:
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_MONOWHITE:
++    case PIX_FMT_MONOBLACK:
++      stride = ROUND_UP_4 ((width + 7) >> 3);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_PAL8:
++      /* already forced to be with stride, so same result as other function */
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = ptr + size;    /* palette is stored here as 256 32 bit words */
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 4;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size + 256 * 4;
++    default:
++      picture->data[0] = NULL;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      return -1;
++  }
++
++  return 0;
++}
++
++/* Create a GstBuffer of the requested size and caps.
++ * The memory will be allocated by ffmpeg, making sure it's properly aligned
++ * for any processing. */
++
++GstBuffer *
++new_aligned_buffer (gint size, GstCaps * caps)
++{
++  GstBuffer *buf;
++
++  buf = gst_buffer_new ();
++  GST_BUFFER_DATA (buf) = GST_BUFFER_MALLOCDATA (buf) = av_malloc (size);
++  GST_BUFFER_SIZE (buf) = size;
++  GST_BUFFER_FREE_FUNC (buf) = av_free;
++  if (caps)
++    gst_buffer_set_caps (buf, caps);
++
++  return buf;
++}
++
++int
++gst_ffmpeg_auto_max_threads (void)
++{
++  static gsize n_threads = 0;
++  if (g_once_init_enter (&n_threads)) {
++    int n = 1;
++#if defined(_WIN32)
++    {
++      const char *s = getenv ("NUMBER_OF_PROCESSORS");
++      if (s) {
++        n = atoi (s);
++      }
++    }
++#elif defined(__APPLE__)
++    {
++      int mib[] = { CTL_HW, HW_NCPU };
++      size_t dataSize = sizeof (int);
++
++      if (sysctl (mib, 2, &n_threads, &dataSize, NULL, 0)) {
++        n = 1;
++      }
++    }
++#else
++    n = sysconf (_SC_NPROCESSORS_CONF);
++#endif
++    if (n < 1)
++      n = 1;
++
++    g_once_init_leave (&n_threads, n);
++  }
++
++  return (int) (n_threads);
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h	2011-11-02 14:04:05.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h	2014-08-08 15:34:04.007874626 +0200
+@@ -23,6 +23,7 @@
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
+ #else
++#include <libavutil/mathematics.h>
+ #include <libavcodec/avcodec.h>
+ #endif
+ #include <gst/gst.h>
+@@ -87,7 +88,7 @@
+ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id);
+ 
+ gint
+-av_smp_format_depth(enum SampleFormat smp_fmt);
++av_smp_format_depth(enum AVSampleFormat smp_fmt);
+ 
+ GstBuffer *
+ new_aligned_buffer (gint size, GstCaps * caps);
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h.orig	2014-08-08 15:26:38.473858652 +0200
+@@ -0,0 +1,95 @@
++/* GStreamer
++ * Copyright (C) <2009> Edward Hervey <bilboed@bilboed.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifndef __GST_FFMPEG_UTILS_H__
++#define __GST_FFMPEG_UTILS_H__
++
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#else
++#include <libavcodec/avcodec.h>
++#endif
++#include <gst/gst.h>
++
++/*
++ *Get the size of an picture
++ */
++int
++gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height);
++
++/*
++ * Fill in pointers in an AVPicture, aligned by 4 (required by X).
++ */
++
++int
++gst_ffmpeg_avpicture_fill (AVPicture * picture,
++                           uint8_t *   ptr,
++                           enum PixelFormat pix_fmt,
++                           int         width,
++                           int         height);
++
++/*
++ * Convert from/to a GStreamer <-> FFMpeg timestamp.
++ */
++static inline guint64
++gst_ffmpeg_time_ff_to_gst (gint64 pts, AVRational base)
++{
++  guint64 out;
++
++  if (pts == AV_NOPTS_VALUE){
++    out = GST_CLOCK_TIME_NONE;
++  } else {
++    AVRational bq = { 1, GST_SECOND };
++    out = av_rescale_q (pts, base, bq);
++  }
++
++  return out;
++}
++
++static inline gint64
++gst_ffmpeg_time_gst_to_ff (guint64 time, AVRational base)
++{
++  gint64 out;
++
++  if (!GST_CLOCK_TIME_IS_VALID (time) || base.num == 0) {
++    out = AV_NOPTS_VALUE;
++  } else {
++    AVRational bq = { 1, GST_SECOND };
++    out = av_rescale_q (time, bq, base);
++  }
++
++  return out;
++}
++
++void 
++gst_ffmpeg_init_pix_fmt_info(void);
++
++int
++gst_ffmpeg_auto_max_threads(void);
++
++G_CONST_RETURN gchar *
++gst_ffmpeg_get_codecid_longname (enum CodecID codec_id);
++
++gint
++av_smp_format_depth(enum AVSampleFormat smp_fmt);
++
++GstBuffer *
++new_aligned_buffer (gint size, GstCaps * caps);
++
++#endif /* __GST_FFMPEG_UTILS_H__ */
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch
new file mode 100644
index 0000000..eba4988
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch
@@ -0,0 +1,21 @@
+diff --git a/gst-libs/ext/libav/configure b/gst-libs/ext/libav/configure
+index 8473069..4f74952 100755
+--- a/gst-libs/ext/libav/configure
++++ b/gst-libs/ext/libav/configure
+Fix gst-ffmpeg build issues for libav on e500mc (fsl-p4080)
+
+Upstream-Status: Backport
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+
+@@ -2210,6 +2210,10 @@ elif enabled ppc; then
+             cpuflags="-mcpu=cell"
+             enable ldbrx
+         ;;
++        e500mc)
++            cpuflags="-mcpu=e500mc"
++            disable altivec
++        ;;
+         e500v2)
+             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
+             disable altivec
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch
new file mode 100644
index 0000000..d9ea2c2
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch
@@ -0,0 +1,19 @@
+libav: Add configs for ppc e5500
+
+Upstream-Status: Pending
+
+Signed-off-by: Jesse Zhang <sen.zhang@windriver.com>
+
+--- gst-ffmpeg-0.10.13/gst-libs/ext/libav/configure	2013-06-20 05:18:36.073104964 -0400
++++ gst-ffmpeg-0.10.13/gst-libs/ext/libav/configure	2013-06-20 05:18:38.269104150 -0400
+@@ -2222,6 +2222,10 @@
+             cpuflags="-mcpu=8540 -mhard-float"
+             disable altivec
+         ;;
++        e5500)
++            cpuflags="-mcpu=e5500 -mhard-float"
++            disable altivec
++        ;;
+     esac
+ 
+ elif enabled x86; then
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff
new file mode 100644
index 0000000..5f08afe
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff
@@ -0,0 +1,16 @@
+Lower the rank of ffmpeg plugin so codecs that hook into accelerated pieces (e.g. dsp or hw engines) can get picked over this
+Derived from OE by Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+--- /tmp/gstffmpegdec.c	2009-03-05 09:31:15.000000000 +0100
++++ gst-ffmpeg-0.10.6/ext/ffmpeg/gstffmpegdec.c	2009-03-05 09:33:09.000000000 +0100
+@@ -2588,7 +2588,7 @@
+       case CODEC_ID_MSMPEG4V3:
+       case CODEC_ID_H264:
+       case CODEC_ID_COOK:
+-        rank = GST_RANK_PRIMARY;
++        rank = GST_RANK_SECONDARY;
+         break;
+       case CODEC_ID_DVVIDEO:
+         /* we have a good dv decoder, fast on both ppc as well as x86. they say
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb
new file mode 100644
index 0000000..891b10c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb
@@ -0,0 +1,103 @@
+SUMMARY = "FFmpeg-based GStreamer plug-in"
+SECTION = "multimedia"
+LICENSE = "GPLv2+ & LGPLv2+ & ( (GPLv2+ & LGPLv2.1+) | (GPLv3+ & LGPLv3+) )"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://ext/libpostproc/gstpostproc.c;beginline=1;endline=18;md5=5896e445e41681324381f5869ee33d38 \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://ext/ffmpeg/gstffmpeg.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9 \
+                    file://gst-libs/ext/libav/LICENSE;md5=abc3b8cb02856aa7823bbbd162d16232 \
+                    file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
+                    file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=e344c8fa836c3a41c4cbd79d7bd3a379 \
+                    file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
+LICENSE_FLAGS = "commercial"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer gst-plugins-base zlib bzip2 yasm-native libpostproc"
+
+inherit autotools-brokensep pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+           file://lower-rank.diff \
+           file://configure-fix.patch \
+           file://h264_qpel_mmx.patch \
+           file://libav_e500mc.patch \
+           file://libav_e5500.patch \
+           file://gst-ffmpeg-CVE-2013-3674.patch \
+           file://0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch \
+           file://0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch \
+           file://0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch \
+           file://0001-huffyuvdec-Skip-len-0-cases.patch \
+           file://0001-huffyuvdec-Check-init_vlc-return-codes.patch \
+           file://0001-alsdec-check-block-length.patch \
+           file://0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch \
+           file://0001-atrac3dec-Check-coding-mode-against-channels.patch \
+           file://0001-eamad-fix-out-of-array-accesses.patch \
+           file://0001-mjpegdec-check-SE.patch \
+           file://0001-alac-fix-nb_samples-order-case.patch \
+           file://0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch \
+           file://0001-roqvideodec-check-dimensions-validity.patch \
+           file://0001-aacdec-check-channel-count.patch \
+           file://0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch \
+           file://0001-error_concealment-Check-that-the-picture-is-not-in-a.patch \
+           file://0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch \
+           file://0001-vp3-Copy-all-3-frames-for-thread-updates.patch \
+           file://0001-h264_sei-Fix-infinite-loop.patch \
+           file://0001-avcodec-parser-reset-indexes-on-realloc-failure.patch \
+           file://0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch \
+           file://gst-ffmpeg-CVE-2013-0855.patch \
+           file://0001-qdm2dec-fix-buffer-overflow.patch \
+           file://0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch \
+           file://0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch \
+           file://0001-error-concealment-initialize-block-index.patch \
+           file://0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch \
+           file://0001-lavf-compute-probe-buffer-size-more-reliably.patch \
+           file://0001-ffserver-set-oformat.patch \
+           file://0001-h264-set-parameters-from-SPS-whenever-it-changes.patch \
+           file://0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch \
+           file://0001-avcodec-smc-fix-off-by-1-error.patch \
+           file://0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch \
+           file://libav-9.patch \
+           file://gst-ffmpeg-fix-CVE-2011-4352.patch \
+           file://gst-ffmpeg-fix-CVE-2014-7933.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8542.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8543.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8544.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8545.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8546.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8547.patch \
+           file://gst-ffmpeg-fix-CVE-2014-9318.patch \
+           file://gst-ffmpeg-fix-CVE-2014-9603.patch \
+"
+
+SRC_URI[md5sum] = "7f5beacaf1312db2db30a026b36888c4"
+SRC_URI[sha256sum] = "76fca05b08e00134e3cb92fa347507f42cbd48ddb08ed3343a912def187fbb62"
+
+PR = "r8"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+
+FFMPEG_EXTRA_CONFIGURE = "--with-ffmpeg-extra-configure"
+# pass --cpu for powerpc. get cpu name by stripping "ppc" or "ppc64"
+# from DEFAULTTUNE
+FFMPEG_CPU_powerpc = "--cpu=${@d.getVar('DEFAULTTUNE', False)[3:]}"
+FFMPEG_CPU_powerpc64 = "--cpu=${@d.getVar('DEFAULTTUNE', False)[5:]}"
+FFMPEG_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux ${FFMPEG_CPU} \
+  --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \
+  --ranlib='${RANLIB}' \
+  ${GSTREAMER_DEBUG}"
+FFMPEG_EXTRA_CONFIGURE_COMMON = \
+'${FFMPEG_EXTRA_CONFIGURE}="${FFMPEG_EXTRA_CONFIGURE_COMMON_ARG}"'
+
+EXTRA_OECONF = "${FFMPEG_EXTRA_CONFIGURE_COMMON}"
+
+PACKAGECONFIG ??= "external-libav"
+PACKAGECONFIG[external-libav] = "--with-system-ffmpeg,,libav"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/*.a"
+
+# http://errors.yoctoproject.org/Errors/Details/40736/
+PNBLACKLIST[gst-ffmpeg] ?= "Not compatible with currently used ffmpeg 3"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
new file mode 100644
index 0000000..1e2cd2a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
@@ -0,0 +1,14 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo closed-format mp3 GStreamer plug-in"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=259a43dd1c9854b71fc396f74699f4d2"
+LICENSE_FLAGS = "commercial"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF += "${GSTREAMER_DEBUG} --with-gstreamer-api=0.10"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "adf0390f3416bb72f91c358528be0c38"
+SRC_URI[sha256sum] = "dae0d0559a4e159c0dd92b7e18de059a5783f8d038904c7de4ca6393f7d55c7d"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
new file mode 100644
index 0000000..7bba41a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
@@ -0,0 +1,12 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo MPEG Transport Stream and Program Stream demuxer for GStreamer"
+LICENSE = "MPLv1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=be282f1c3cc9a98cc0dc5c2b25dfc510 \
+                    file://src/gstmpegdemux.h;beginline=1;endline=19;md5=a9e90033f59897b91664d9f2a2ff01dd"
+LICENSE_FLAGS = "commercial"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "7c4fb993f80b9ae631b11897733f0970"
+SRC_URI[sha256sum] = "df04c91cc8e5d9a892c2492ed989974b4547beaa2a3647649e85113317897424"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
new file mode 100644
index 0000000..7a77d62
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Fluendo closed-format GStreamer plug-in"
+SECTION = "multimedia"
+HOMEPAGE = "https://core.fluendo.com/gstreamer/trac/wiki"
+DEPENDS = "gstreamer gst-plugins-base zlib"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://core.fluendo.com/gstreamer/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-valgrind"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
new file mode 100644
index 0000000..039abe1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
@@ -0,0 +1,73 @@
+SUMMARY = "GStreamer package groups"
+LICENSE = "MIT"
+
+COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}"
+DEPENDS_UGLY="${@'gst-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS_BAD="${@'gst-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS = "gstreamer gst-plugins-base gst-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}"
+
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690 \
+                    file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+
+PR = "r13"
+
+PACKAGES = "\
+    gst-meta-base \
+    gst-meta-x11-base \
+    gst-meta-audio \
+    gst-meta-debug \
+    gst-meta-video"
+
+ALLOW_EMPTY_gst-meta-base = "1"
+ALLOW_EMPTY_gst-meta-x11-base = "1"
+ALLOW_EMPTY_gst-meta-audio = "1"
+ALLOW_EMPTY_gst-meta-debug = "1"
+ALLOW_EMPTY_gst-meta-video = "1"
+
+RDEPENDS_gst-meta-base = "\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gst-meta-x11-base', '', d)} \
+    gstreamer \
+    gst-plugins-base-playbin \
+    gst-plugins-base-decodebin \
+    gst-plugins-base-decodebin2 \
+    gst-plugins-base-gio \
+    gst-plugins-base-alsa \
+    gst-plugins-base-volume \
+    gst-plugins-base-audioconvert \
+    gst-plugins-base-audioresample \
+    gst-plugins-base-typefindfunctions \
+    gst-plugins-base-videoscale \
+    gst-plugins-base-ffmpegcolorspace \
+    gst-plugins-good-autodetect \
+    gst-plugins-good-souphttpsrc"
+
+RRECOMMENDS_gst-meta-x11-base = "\
+    gst-plugins-base-ximagesink \
+    gst-plugins-base-xvimagesink"
+
+RDEPENDS_gst-meta-audio = "\
+    gst-meta-base \
+    gst-plugins-base-vorbis \
+    gst-plugins-base-ogg \
+    gst-plugins-good-wavparse \
+    gst-plugins-good-flac \
+    ${COMMERCIAL_AUDIO_PLUGINS}"
+
+
+RDEPENDS_gst-meta-debug = "\
+    gst-meta-base \
+    gst-plugins-good-debug \
+    gst-plugins-base-audiotestsrc \
+    gst-plugins-base-videotestsrc"
+
+
+RDEPENDS_gst-meta-video = "\
+    gst-meta-base \
+    gst-plugins-good-avi \
+    gst-plugins-good-matroska \
+    gst-plugins-base-theora \
+    ${COMMERCIAL_VIDEO_PLUGINS}"
+
+RRECOMMENDS_gst-meta-video = "\
+    gst-meta-audio"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
new file mode 100644
index 0000000..57a63b5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: gst-openmax-0.10.1/omx/gstomx.c
+===================================================================
+--- gst-openmax-0.10.1.orig/omx/gstomx.c	2010-09-30 18:00:24.000000000 -0700
++++ gst-openmax-0.10.1/omx/gstomx.c	2011-05-17 23:08:08.794535872 -0700
+@@ -238,7 +238,8 @@
+     const gchar *element_name = gst_structure_nth_field_name (element_table, i);
+     GstStructure *element = get_element_entry (element_name);
+     const gchar *type_name, *parent_type_name;
+-    const gchar *component_name, *component_role, *library_name;
++    const gchar *component_name, *library_name;
++    const gchar __attribute__((__unused__)) *component_role;
+     GType type;
+     gint rank;
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
new file mode 100644
index 0000000..5965bba
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
@@ -0,0 +1,46 @@
+Rename static functions that use GLib naming conventions as one of them
+(g_ptr_array_insert) has now been added to GLib.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
+index 423e441..579dbf5 100644
+--- a/omx/gstomx_util.c
++++ b/omx/gstomx_util.c
+@@ -85,7 +85,7 @@ static gboolean initialized;
+  */
+ 
+ static void
+-g_ptr_array_clear (GPtrArray * array)
++omx_g_ptr_array_clear (GPtrArray * array)
+ {
+   guint index;
+   for (index = 0; index < array->len; index++)
+@@ -93,7 +93,7 @@ g_ptr_array_clear (GPtrArray * array)
+ }
+ 
+ static void
+-g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
++omx_g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
+ {
+   if (index + 1 > array->len) {
+     g_ptr_array_set_size (array, index + 1);
+@@ -394,7 +394,7 @@ g_omx_core_unload (GOmxCore * core)
+   }
+ 
+   core_for_each_port (core, g_omx_port_free);
+-  g_ptr_array_clear (core->ports);
++  omx_g_ptr_array_clear (core->ports);
+ }
+ 
+ static inline GOmxPort *
+@@ -418,7 +418,7 @@ g_omx_core_new_port (GOmxCore * core, guint index)
+   }
+ 
+   port = g_omx_port_new (core, index);
+-  g_ptr_array_insert (core->ports, index, port);
++  omx_g_ptr_array_insert (core->ports, index, port);
+ 
+   return port;
+ }
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
new file mode 100644
index 0000000..2e01579
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "GStreamer plug-in for communication with OpenMAX IL components"
+DESCRIPTION = "GstOpenMAX is a GStreamer plug-in that allows \
+communication with OpenMAX Integration Layer (IL) components. OpenMAX \
+IL is an industry standard that provides an abstraction layer for \
+computer graphics, video, and sound routines."
+HOMEPAGE = "http://freedesktop.org/wiki/GstOpenMAX"
+DEPENDS = "gstreamer"
+RDEPENDS_${PN} = "libomxil"
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+                    file://util/sem.h;beginline=1;endline=20;md5=accce5550d5583b839b441a0623f09fc"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-openmax/gst-openmax-${PV}.tar.bz2 \
+           file://gcc_4.6.patch \
+           file://ptr-array.patch \
+           "
+
+inherit autotools pkgconfig
+
+# Tell configure that this isn't a development snapshot so we don't want
+# -Werror (hopefully fixed in 0.10.2)
+export GST_CVS="no"
+
+EXTRA_OECONF += "--disable-valgrind"
+
+PR = "r4"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/libgstomx.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/libgstomx.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/libgstomx.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug/"
+
+SRC_URI[md5sum] = "4d0370bfe99dea20918c84347abadb4e"
+SRC_URI[sha256sum] = "9074d5a0591995133d19cfb15144f19664f902c1623f996595695cf2c2070e1f"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
new file mode 100644
index 0000000..235acda
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
@@ -0,0 +1,36 @@
+Description: Fix buffer overflow in mp4 parsing
+Author: Ralph Giles <giles@mozilla.com>
+---
+Backport patch from debian to fix CVE-2015-0797.
+https://sources.debian.net/data/main/g/gst-plugins-bad0.10/0.10.23-7.1+deb7u2/debian/patches/buffer-overflow-mp4.patch
+
+Upstream-Status: Backport
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+--- gst-plugins-bad0.10-0.10.23.orig/gst/videoparsers/gsth264parse.c
++++ gst-plugins-bad0.10-0.10.23/gst/videoparsers/gsth264parse.c
+@@ -384,6 +384,11 @@ gst_h264_parse_wrap_nal (GstH264Parse *
+ 
+   GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
+ 
++  if (size > G_MAXUINT32 - nl) {
++    GST_ELEMENT_ERROR (h264parse, STREAM, FAILED, (NULL),
++        ("overflow in nal size"));
++    return NULL;
++  }
+   buf = gst_buffer_new_and_alloc (size + nl + 4);
+   if (format == GST_H264_PARSE_FORMAT_AVC) {
+     GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), size << (32 - 8 * nl));
+@@ -452,6 +457,11 @@ gst_h264_parse_process_nal (GstH264Parse
+     GST_DEBUG_OBJECT (h264parse, "not processing nal size %u", nalu->size);
+     return;
+   }
++  if (G_UNLIKELY (nalu->size > 20 * 1024 * 1024)) {
++    GST_DEBUG_OBJECT (h264parse, "not processing nal size %u (too big)",
++        nalu->size);
++    return;
++  }
+ 
+   /* we have a peek as well */
+   nal_type = nalu->type;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
new file mode 100644
index 0000000..8aad0b7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
@@ -0,0 +1,60 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+                    file://gst/tta/filters.h;beginline=12;endline=29;md5=629b0c7a665d155a6677778f4460ec06 \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/tta/crc32.h;beginline=12;endline=29;md5=71a904d99ce7ae0c1cf129891b98145c"
+
+DEPENDS += "gst-plugins-base"
+
+PR = "r4"
+
+SRC_URI += "file://buffer-overflow-mp4.patch"
+
+inherit gettext gsettings
+
+EXTRA_OECONF += "--disable-experimental \
+                 --disable-sdl --disable-cdaudio --disable-directfb \
+                 --disable-vdpau --disable-apexsink"
+
+PACKAGECONFIG ??= "bzip curl \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'rsvg', '', d)}"
+
+PACKAGECONFIG[bzip] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg,"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[mms] = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[cog] = "--enable-cog,--disable-cog,libpng"
+PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[jp2k] = "--enable-jp2k,--disable-jp2k,jasper"
+PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[vp8] = "--enable-vp8,--disable-vp8,libvpx"
+PACKAGECONFIG[ass] = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[schro] = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump"
+PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc"
+PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc"
+PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES =+ "${PN}-resindvd"
+FILES_${PN}-resindvd = "${libdir}/gstreamer-${LIBV}/libresindvd.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-${LIBV}/libresindvd.la"
+FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "fcb09798114461955260e4d940db5987"
+SRC_URI[sha256sum] = "0eae7d1a1357ae8377fded6a1b42e663887beabe0e6cc336e2ef9ada42e11491"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
new file mode 100644
index 0000000..5214256
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
@@ -0,0 +1,37 @@
+audioresample: Fix build on x86 if emmintrin.h is available but can't be used
+
+On x86, EMMINTRIN is defined but not usable without SSE so check for
+__SSE__ and __SSE2__ as well.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+
+Upstream-Status: Backport
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ gst/audioresample/resample.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
+index 98d006c..481fa01 100644
+--- a/gst/audioresample/resample.c
++++ b/gst/audioresample/resample.c
+@@ -77,13 +77,13 @@
+ #define EXPORT G_GNUC_INTERNAL
+ 
+ #ifdef _USE_SSE
+-#ifndef HAVE_XMMINTRIN_H
++#if !defined(__SSE__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE
+ #endif
+ #endif
+ 
+ #ifdef _USE_SSE2
+-#ifndef HAVE_EMMINTRIN_H
++#if !defined(__SSE2__) || !defined(HAVE_EMMINTRIN_H)
+ #undef _USE_SSE2
+ #endif
+ #endif
+-- 
+1.7.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
new file mode 100644
index 0000000..b8602c8
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
@@ -0,0 +1,27 @@
+Upstream-Status: Submitted [similar patch by other author, bugzilla]
+Bugtracker-URL: https://bugzilla.gnome.org/show_bug.cgi?id=663600
+
+Prepend PKG_CONFIG_SYSROOT to includedir, so configure doesn't
+search for gstconfig.h in /usr/include.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+---
+ configure.ac |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1901bcf..460fb0a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -435,7 +435,7 @@ AG_GST_CHECK_PLUGIN(volume)
+ dnl check for gstreamer core features (subsystems)
+ dnl FIXME: this assumes srcdir == builddir for uninstalled setups
+ GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+-AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH)
++AG_GST_PARSE_SUBSYSTEM_DISABLES($PKG_CONFIG_SYSROOT_DIR$GST_CONFIGPATH)
+ AM_CONDITIONAL(USE_XML, test $GST_DISABLE_XML != "1")
+ 
+ dnl disable plug-ins that require libxml2's HTML support if it is not available
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
new file mode 100644
index 0000000..99dbc9d
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
@@ -0,0 +1,20 @@
+Remove -DTREMOR option since Tremor has dropped its internal
+libogg2, and gst-plugins-base has dependency on that.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r 70065fb4e085 ext/vorbis/Makefile.am
+--- a/ext/vorbis/Makefile.am	Tue Mar 13 16:36:56 2012 +0800
++++ b/ext/vorbis/Makefile.am	Tue Mar 13 16:38:53 2012 +0800
+@@ -30,7 +30,7 @@
+ 	gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+ libgstivorbisdec_la_CFLAGS = \
+ 	$(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+-	-DTREMOR $(IVORBIS_CFLAGS)
++	$(IVORBIS_CFLAGS)
+ libgstivorbisdec_la_LIBADD = \
+ 	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+ 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
new file mode 100644
index 0000000..c86834f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
@@ -0,0 +1,43 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/ffmpegcolorspace/utils.c;beginline=1;endline=20;md5=9c83a200b8e597b26ca29df20fc6ecd0"
+
+DEPENDS += "alsa-lib libogg libvorbis libtheora util-linux tremor glib-2.0-native"
+
+SRC_URI += "file://gst-plugins-base-tremor.patch \
+            file://configure.ac-fix-subparse-plugin.patch \
+            file://audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch \
+"
+
+SRC_URI[md5sum] = "776c73883e567f67b9c4a2847d8d041a"
+SRC_URI[sha256sum] = "2cd3b0fa8e9b595db8f514ef7c2bdbcd639a0d63d154c00f8c9b609321f49976"
+
+PR = "r8"
+
+inherit gettext
+
+EXTRA_OECONF += "--disable-freetypetest"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
+
+PACKAGECONFIG[gnomevfs] = "--enable-gnome_vfs,--disable-gnome_vfs,gnome-vfs"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+PACKAGECONFIG[x11] = "--enable-x --enable-xvideo,--disable-x --disable-xvideo,virtual/libx11 libxv libsm libice"
+PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm -f ${S}/m4/lib-link.m4
+}
+
+FILES_${PN} += "${datadir}/${BPN}"
+
+CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
+
+# /usr/bin/gst-visualise-0.10 is a perl script.
+RDEPENDS_${PN}-apps += "perl"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
new file mode 100644
index 0000000..bc2f88b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
@@ -0,0 +1,35 @@
+From 14d51cbefef19737e7ab2b6818ee1d3bdb248d12 Mon Sep 17 00:00:00 2001
+From: Jeremy Stashluk <jstashluk@dekaresearch.com>
+Date: Wed, 6 Feb 2013 09:59:48 -0500
+Subject: [PATCH] conditional gl framebuffer undefined use
+
+The OpenGL extension GL_ARB_framebuffer_object defines the macro
+GL_FRAMEBUFFER_UNDEFINED. The macro will only need to map to an error
+string if the extension provides functions that might return the macro.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jeremy Stashluk <jstashluk@dekaresearch.com>
+---
+ gst-libs/gst/gl/gstgldisplay.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
+index 3ed0b71..64c6c2c 100644
+--- a/gst-libs/gst/gl/gstgldisplay.c
++++ b/gst-libs/gst/gl/gstgldisplay.c
+@@ -2177,9 +2177,11 @@ gst_gl_display_check_framebuffer_status (void)
+       GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
+       break;
+ 
++#if defined(GL_ARB_framebuffer_object)
+     case GL_FRAMEBUFFER_UNDEFINED:
+       GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
+       break;
++#endif
+ 
+     default:
+       GST_ERROR ("General FBO error");
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
new file mode 100644
index 0000000..6859f33
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
@@ -0,0 +1,25 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI[md5sum] = "ac70ede13f79978d56eaed8abaa3c938"
+SRC_URI[sha256sum] = "48340b6a4b8abce16344a7bc33e74a94fdcce4f57ef6342cdf2f941c429bf210"
+
+SRC_URI += " file://0001-conditional-gl-framebuffer-undefined-use.patch"
+
+DEPENDS += "gst-plugins-base virtual/libgles2 virtual/egl jpeg libpng glew"
+
+PR = "r4"
+
+inherit gettext
+
+# This package doesn't have a configure switch for EGL or GL, so forcibly tell
+# configure that it can't find gl.h so it always uses EGL.  If/when we have some
+# way for machines to specify their preferred GL flavour this can be
+# automatically adapted.
+EXTRA_OECONF += "ac_cv_header_GL_gl_h=no"
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-apps = "1"
+ALLOW_EMPTY_${PN}-glib = "1"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
new file mode 100644
index 0000000..6456d3c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
@@ -0,0 +1,33 @@
+From 12d18fe4e98e7c232d59b56d529a0521f293fe6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 5 Sep 2012 18:54:42 +0200
+Subject: [PATCH] v4l2: fix build with recent kernels, the v4l2_buffer input
+ field was removed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Backport
+
+[1] http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=9f2aa8d47f835ea155aaf635f618c0fc1ca87012
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ sys/v4l2/gstv4l2bufferpool.c |    1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
+index b81c6a4..51cc0ce 100644
+--- a/sys/v4l2/gstv4l2bufferpool.c
++++ b/sys/v4l2/gstv4l2bufferpool.c
+@@ -181,7 +181,6 @@ gst_v4l2_buffer_new (GstV4l2BufferPool * pool, guint index, GstCaps * caps)
+     GST_LOG_OBJECT (pool->v4l2elem, "  MMAP offset:  %u",
+         ret->vbuffer.m.offset);
+   GST_LOG_OBJECT (pool->v4l2elem, "  length:    %u", ret->vbuffer.length);
+-  GST_LOG_OBJECT (pool->v4l2elem, "  input:     %u", ret->vbuffer.input);
+ 
+   data = (guint8 *) v4l2_mmap (0, ret->vbuffer.length,
+       PROT_READ | PROT_WRITE, MAP_SHARED, pool->video_fd,
+-- 
+1.7.6.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
new file mode 100644
index 0000000..bd0de58
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
@@ -0,0 +1,45 @@
+From ccb01de8096a32d86d47b0d92ec3416c57ee4d25 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Thu, 22 Aug 2013 12:15:54 -0400
+Subject: [PATCH] v4l2_calls: define V4L2_CID_HCENTER and V4L2_CID_VCENTER
+
+kernel commit 24b9f5017 [[media] V4L: Remove deprecated image centering controls]
+removed the definitions of V4L2_CID_HCENTER and V4L2_CID_VCENTER after three
+years of depreciation.
+
+The ioctl values are still free, and the case statement which processess them
+in v4l2 userspace falls through to the proper replacement. So in the short
+term, we can explicitly define them using the old absolute values, and everything
+will work.
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ sys/v4l2/v4l2_calls.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
+index 309bfb6..3c64544 100644
+--- a/sys/v4l2/v4l2_calls.c
++++ b/sys/v4l2/v4l2_calls.c
+@@ -54,11 +54,16 @@
+ #include "gst/gst-i18n-plugin.h"
+ 
+ /* Those are ioctl calls */
++
++/* V4L2_CID_HCENTER has been removed from the mainline kernel, but
++   the ioctl space is still present. Since these values fall through
++   to their replacement, it is safe (in the short term) to re-use the
++    old values explictily */
+ #ifndef V4L2_CID_HCENTER
+-#define V4L2_CID_HCENTER V4L2_CID_HCENTER_DEPRECATED
++#define V4L2_CID_HCENTER V4L2_CID_BASE+22
+ #endif
+ #ifndef V4L2_CID_VCENTER
+-#define V4L2_CID_VCENTER V4L2_CID_VCENTER_DEPRECATED
++#define V4L2_CID_VCENTER V4L2_CID_BASE+23
+ #endif
+ 
+ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
+-- 
+1.7.10.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
new file mode 100644
index 0000000..48b8e98
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
@@ -0,0 +1,47 @@
+From ce94b2c2b91b6db190c121860e12a6afafce7ae1 Mon Sep 17 00:00:00 2001
+From: Roland Krikava <rkrikava@gmail.com>
+Date: Fri, 2 Nov 2012 12:38:44 -0400
+Subject: [PATCH 407/440] mulawdec: fix integer overrun
+
+There might be more than 65535 samples in a chunk of data.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=687469
+
+Commit - 3be45f70220310ec1c60d819f90b5f2ae03b5d83 in 0.10 branch
+
+Upstream Status:  Backported
+
+Signed-off-by: Roland Krikava <rkrikava@gmail.com>
+---
+ gst/law/mulaw-conversion.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/gst/law/mulaw-conversion.c b/gst/law/mulaw-conversion.c
+index 8afae80..190a9f5 100644
+--- a/gst/law/mulaw-conversion.c
++++ b/gst/law/mulaw-conversion.c
+@@ -51,9 +51,10 @@ mulaw_encode (gint16 * in, guint8 * out, gint numsamples)
+     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
+   };
+-  gint16 sign, exponent, mantissa, i;
++  gint16 sign, exponent, mantissa;
+   gint16 sample;
+   guint8 ulawbyte;
++  gint i;
+ 
+   for (i = 0; i < numsamples; i++) {
+     sample = in[i];
+@@ -102,7 +103,8 @@ mulaw_decode (guint8 * in, gint16 * out, gint numsamples)
+   static gint16 exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
+   gint16 sign, exponent, mantissa;
+   guint8 ulawbyte;
+-  gint16 linear, i;
++  gint16 linear;
++  gint i;
+ 
+   for (i = 0; i < numsamples; i++) {
+     ulawbyte = in[i];
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
new file mode 100644
index 0000000..d922895
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
@@ -0,0 +1,48 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+                    file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+PR = "r8"
+
+PACKAGECONFIG ?= "jpeg v4l \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack"
+PACKAGECONFIG[gdkpixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[v4l] = "--enable-gst_v4l2 --with-gudev,--disable-gst_v4l2 --without-gudev,libgudev"
+# sub-feature of v4l, but control separately since libv4l is not part of oe-core
+PACKAGECONFIG[libv4l] = "--with-libv4l2,--without-libv4l2,libv4l"
+PACKAGECONFIG[bzip2] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[x11] = "--enable-x,--disable-x,virtual/libx11 libxfixes libxdamage"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394"
+
+DEPENDS += "gst-plugins-base gconf cairo libpng zlib libid3tag flac \
+            speex libsoup-2.4 libcap"
+
+inherit gettext gconf
+
+SRC_URI += "file://0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch \
+            file://0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch \
+            file://0407-mulawdec-fix-integer-overrun.patch \
+"
+EXTRA_OECONF += "--disable-aalib --disable-esd --disable-shout2 --disable-libcaca --disable-hal \
+                 --disable-examples --disable-taglib"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "24f98a294a2b521e1b29412bdadae2e6"
+SRC_URI[sha256sum] = "7e27840e40a7932ef2dc032d7201f9f41afcaf0b437daf5d1d44dc96d9e35ac6"
+
+FILES_${PN}-gconfelements += "${sysconfdir}/gconf/schemas/gstreamer-0.10.schemas"
+FILES_${PN}-equalizer += "${datadir}/gstreamer-0.10/presets/*.prs"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
new file mode 100644
index 0000000..1f72fc0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
@@ -0,0 +1,193 @@
+From 649bd92cd2600719862ad5189899212409dd0a67 Mon Sep 17 00:00:00 2001
+From: Leon Merten Lohse <leon@green-side.de>
+Date: Thu, 3 May 2012 23:50:30 +0100
+Subject: [PATCH] cdio: compensate for libcdio's recent cd-text api changes
+
+https://bugzilla.gnome.org/show_bug.cgi?id=675112
+
+Conflicts:
+
+	ext/cdio/gstcdiocddasrc.c
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+Upstream-Status: Backport
+---
+ ext/cdio/gstcdio.c        | 35 ++++++++++++++++++++++++++++-------
+ ext/cdio/gstcdio.h        | 16 ++++++++++++++++
+ ext/cdio/gstcdiocddasrc.c | 19 +++++++++++++++++++
+ 3 files changed, 63 insertions(+), 7 deletions(-)
+
+diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
+index 2f58d18..483ebf5 100644
+--- a/ext/cdio/gstcdio.c
++++ b/ext/cdio/gstcdio.c
+@@ -30,12 +30,16 @@
+ GST_DEBUG_CATEGORY (gst_cdio_debug);
+ 
+ void
+-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
++gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+     cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+ {
+   const gchar *txt;
+ 
++#if LIBCDIO_VERSION_NUM > 83
++  txt = cdtext_get_const (cdtext, field, track);
++#else
+   txt = cdtext_get_const (field, cdtext);
++#endif
+   if (txt == NULL || *txt == '\0') {
+     GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+     return;
+@@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
+ }
+ 
+ GstTagList *
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
++{
++  GstTagList *tags = NULL;
++
++#else
+ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ {
+   GstTagList *tags = NULL;
+@@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+     GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+     return NULL;
+   }
++#endif
+ 
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags);
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags);
++  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
++      GST_TAG_ARTIST, &tags);
++  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
++      &tags);
+ 
+   return tags;
+ }
+ 
+ void
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
++    GstTagList * tags)
++{
++#else
+ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ {
+   cdtext_t *t;
+@@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+     GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+     return;
+   }
++#endif
+ 
+-  /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags);
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags);
+-
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
++      GST_TAG_ALBUM_ARTIST, &tags);
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
++      &tags);
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
++      &tags);
+   GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+ }
+ 
+diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h
+index ef31ed0..c6da580 100644
+--- a/ext/cdio/gstcdio.h
++++ b/ext/cdio/gstcdio.h
+@@ -24,22 +24,38 @@
+ #include <gst/gst.h>
+ #include <cdio/cdio.h>
+ #include <cdio/cdtext.h>
++#include <cdio/version.h>
++
++#if LIBCDIO_VERSION_NUM <= 83
++  #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
++  #define CDTEXT_FIELD_GENRE     CDTEXT_GENRE
++  #define CDTEXT_FIELD_TITLE     CDTEXT_TITLE
++#endif
+ 
+ GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+ #define GST_CAT_DEFAULT gst_cdio_debug
+ 
+ void     gst_cdio_add_cdtext_field (GstObject      * src,
+                                     cdtext_t       * cdtext,
++                                    track_t          track,
+                                     cdtext_field_t   field,
+                                     const gchar    * gst_tag,
+                                     GstTagList    ** p_tags);
+ 
+ GstTagList  * gst_cdio_get_cdtext  (GstObject      * src,
++#if LIBCDIO_VERSION_NUM > 83
++                                    cdtext_t       * t,
++#else
+                                     CdIo           * cdio,
++#endif
+                                     track_t          track);
+ 
+ void      gst_cdio_add_cdtext_album_tags (GstObject  * src,
++#if LIBCDIO_VERSION_NUM > 83
++                                          cdtext_t   * t,
++#else
+                                           CdIo       * cdio,
++#endif
+                                           GstTagList * tags);
+ 
+ #endif /* __GST_CDIO_H__ */
+diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c
+index 615a0c8..830839e 100644
+--- a/ext/cdio/gstcdiocddasrc.c
++++ b/ext/cdio/gstcdiocddasrc.c
+@@ -206,6 +206,9 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+   GstCdioCddaSrc *src;
+   discmode_t discmode;
+   gint first_track, num_tracks, i;
++#if LIBCDIO_VERSION_NUM > 83
++  cdtext_t *cdtext;
++#endif
+ 
+   src = GST_CDIO_CDDA_SRC (audiocdsrc);
+ 
+@@ -244,8 +244,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+   if (src->read_speed != -1)
+     cdio_set_speed (src->cdio, src->read_speed);
+ 
++#if LIBCDIO_VERSION_NUM > 83
++  cdtext = cdio_get_cdtext (src->cdio);
++
++  if (NULL == cdtext)
++    GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
++  else
++    gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
++        cddabasesrc->tags);
++#else
+   gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+       cddabasesrc->tags);
++#endif
+ 
+   GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+ 
+@@ -250,8 +263,14 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+      * the right thing here (for cddb id calculations etc. as well) */
+     track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+     track.end = track.start + len_sectors - 1;  /* -1? */
++#if LIBCDIO_VERSION_NUM > 83
++    if (NULL != cdtext)
++      track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
++          i + first_track);
++#else
+     track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+         i + first_track);
++#endif
+ 
+     gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+   }
+-- 
+2.1.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
new file mode 100644
index 0000000..3fd6a26
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
@@ -0,0 +1,58 @@
+From e634bc6420826f760f6519a9f134c6a4d3412ef8 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Mon, 19 Oct 2015 15:26:24 +0200
+Subject: [PATCH] Fix opencore include paths
+
+Upstream-Status: Inappropriate [no upstream - GStreamer 0.10 is no longer being maintained]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ ext/amrnb/amrnbdec.h    | 2 +-
+ ext/amrnb/amrnbenc.h    | 2 +-
+ ext/amrwbdec/amrwbdec.h | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/ext/amrnb/amrnbdec.h b/ext/amrnb/amrnbdec.h
+index 1e81839..01b7154 100644
+--- a/ext/amrnb/amrnbdec.h
++++ b/ext/amrnb/amrnbdec.h
+@@ -22,7 +22,7 @@
+ 
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <interf_dec.h>
++#include <opencore-amrnb/interf_dec.h>
+ 
+ G_BEGIN_DECLS
+ 
+diff --git a/ext/amrnb/amrnbenc.h b/ext/amrnb/amrnbenc.h
+index 7f673ac..5be39b5 100644
+--- a/ext/amrnb/amrnbenc.h
++++ b/ext/amrnb/amrnbenc.h
+@@ -21,7 +21,7 @@
+ #define __GST_AMRNBENC_H__
+ 
+ #include <gst/gst.h>
+-#include <interf_enc.h>
++#include <opencore-amrnb/interf_enc.h>
+ #include <gst/audio/gstaudioencoder.h>
+ 
+ G_BEGIN_DECLS
+diff --git a/ext/amrwbdec/amrwbdec.h b/ext/amrwbdec/amrwbdec.h
+index c3528fc..f27c6d2 100644
+--- a/ext/amrwbdec/amrwbdec.h
++++ b/ext/amrwbdec/amrwbdec.h
+@@ -22,8 +22,8 @@
+ 
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <dec_if.h>
+-#include <if_rom.h>
++#include <opencore-amrwb/dec_if.h>
++#include <opencore-amrwb/if_rom.h>
+ 
+ G_BEGIN_DECLS
+ 
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
new file mode 100644
index 0000000..a8cb852
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
@@ -0,0 +1,35 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://gst/synaesthesia/synaescope.h;beginline=1;endline=20;md5=99f301df7b80490c6ff8305fcc712838 \
+                    file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 \
+                    file://gst/mpegstream/gstmpegparse.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9"
+
+DEPENDS += "gst-plugins-base libid3tag libmad mpeg2dec liba52 lame"
+PR = "r3"
+
+inherit gettext
+
+EXTRA_OECONF += "--with-plugins=a52dec,lame,id3tag,mad,mpeg2dec,mpegstream,mpegaudioparse,asfdemux,realmedia \
+                 --disable-orc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264"
+PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[amrnb] = "--enable-amrnb,--disable-amrnb,opencore-amr"
+PACKAGECONFIG[amrwb] = "--enable-amrwb,--disable-amrwb,opencore-amr"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "1d81c593e22a6cdf0f2b4f57eae93df2"
+SRC_URI[sha256sum] = "1ca90059275c0f5dca71d4d1601a8f429b7852baed0723e820703b977e2c8df0"
+SRC_URI += "file://0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch \
+            file://0002-Fix-opencore-include-paths.patch"
+
+FILES_${PN}-amrnb += "${datadir}/gstreamer-0.10/presets/GstAmrnbEnc.prs"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
new file mode 100644
index 0000000..68a70b1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer"
+
+# gobject-introspection to get --disable-introspection into UNKNOWN_CONFIGURE_WHITELIST
+inherit autotools pkgconfig gobject-introspection
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_DEBUG} --disable-examples --disable-introspection"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "0.10"
+require recipes-multimedia/gstreamer/gst-plugins-package.inc
+
+PACKAGES_DYNAMIC += "^${PN}-.*"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+	if [ -e ${S}/po/Makefile.in.in ]; then
+		sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+	fi
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
new file mode 100644
index 0000000..3afca4e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
@@ -0,0 +1,34 @@
+index gst-rtsp_0.10.8/bindings/python/Makefile.am
+--- gst-rtsp_0.10.8.orig/bindings/python/Makefile.am
++++ gst-rtsp_0.10.8/bindings/python/Makefile.am
+@@ -14,7 +14,7 @@ defs_DATA = $(DEFS)
+ defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs
+ OVERRIDES = rtspserver.override
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
+
+ rtspserver_la_CFLAGS = -I$(top_srcdir)/src \
+         $(PYGOBJECT_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+index gst-rtsp_0.10.8/examples/Makefile.am
+--- gst-rtsp_0.10.8.orig/examples/Makefile.am
++++ gst-rtsp_0.10.8/examples/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-video test-ogg test-mp4 test-readme test-launch test-sdp test-uri test-auth
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
+index gst-rtsp_0.10.8/tests/Makefile.am
+--- gst-rtsp_0.10.8.orig/tests/Makefile.am
++++ gst-rtsp_0.10.8/tests/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-cleanup
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
new file mode 100644
index 0000000..b78bcaf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
@@ -0,0 +1,18 @@
+SUMMARY = "GStreamer RTSP server"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+           file://0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch"
+SRC_URI[md5sum] = "b511af07000595f63c3a705946221643"
+SRC_URI[sha256sum] = "9915887cf8515bda87462c69738646afb715b597613edc7340477ccab63a6617"
+
+DEPENDS = "gst-plugins-base gstreamer"
+
+EXTRA_OECONF = "--disable-introspection"
+
+# Configure always checks for Python so inherit pythonnative. Better solution
+# would be to disable the checks entirely.
+inherit autotools pythonnative gettext
+
+FILES_${PN}-dev += "${datadir}/vala/vapi/"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
new file mode 100644
index 0000000..d077496
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
@@ -0,0 +1,32 @@
+From ed7f4802222234eef192aa3f74bc92268f338f97 Mon Sep 17 00:00:00 2001
+From: Sebastian Droege <sebastian.droege@collabora.co.uk>
+Date: Tue, 6 Mar 2012 12:28:02 +0100
+Subject: [PATCH] baseparse: Fix 'self-comparison always evaluates to true'
+
+This was really a bug.
+
+Commit is ed7f4802222234eef192aa3f74bc92268f338f97 in 0.10 branch
+
+Upstream Status:  Backported
+
+Signed-off-by: Sebastian Droege <sebastian.droege@collabora.co.uk>
+---
+ libs/gst/base/gstbaseparse.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
+index 851ec1d..108ee89 100644
+--- a/libs/gst/base/gstbaseparse.c
++++ b/libs/gst/base/gstbaseparse.c
+@@ -3899,7 +3899,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
+        seek event (in bytes) to upstream. Segment / flush handling happens
+        in corresponding src event handlers */
+     GST_DEBUG_OBJECT (parse, "seek in PUSH mode");
+-    if (seekstop >= 0 && seekpos <= seekpos)
++    if (seekstop >= 0 && seekstop <= seekpos)
+       seekstop = seekpos;
+     new_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+         GST_SEEK_TYPE_SET, seekpos, stop_type, seekstop);
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
new file mode 100644
index 0000000..dc2d606
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
@@ -0,0 +1,35 @@
+From 60516f4798894f958fc53b470e1283318d0f8706 Mon Sep 17 00:00:00 2001
+From: Kerrick Staley <kerrick@kerrickstaley.com>
+Date: Tue, 20 Aug 2013 23:59:29 -0700
+Subject: [PATCH 1/2] parse: make grammar.y work with Bison 3
+
+YYLEX_PARAM is no longer supported in Bison 3.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=706462
+---
+ gst/parse/grammar.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y
+index 24fc87b..7f9dd16 100644
+--- a/gst/parse/grammar.y
++++ b/gst/parse/grammar.y
+@@ -26,7 +26,6 @@
+  */
+ 
+ #define YYERROR_VERBOSE 1
+-#define YYLEX_PARAM scanner
+ 
+ #define YYENABLE_NLS 0
+ 
+@@ -648,6 +647,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s);
+ %right '.'
+ %left '!' '='
+ 
++%lex-param { void *scanner }
+ %parse-param { void *scanner }
+ %parse-param { graph_t *graph }
+ %pure-parser
+-- 
+2.7.2
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
new file mode 100644
index 0000000..5d8bb13
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
@@ -0,0 +1,19 @@
+# gstreamer: Fix a problem with configure if check has already been built
+# Richard Purdie <rpurdie@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -urN gstreamer-0.10.29-orig/configure.ac gstreamer-0.10.29/configure.ac
+--- gstreamer-0.10.29-orig/configure.ac	2010-06-26 12:49:27.774930773 +0800
++++ gstreamer-0.10.29/configure.ac	2010-06-26 12:51:12.899200233 +0800
+@@ -543,8 +543,10 @@
+       *) BUILD_CHECK=yes ;;
+     esac
+ ])
++
+ dnl bit of a misnomer, but keep the conditional named like this so we don't
+ dnl have to change too much elsewhere
++HAVE_CHECK=no
+ AM_CONDITIONAL(HAVE_CHECK, test "x$BUILD_CHECK" = "xyes")
+ 
+ dnl configure the desired buffer alignment
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
new file mode 100644
index 0000000..30be85f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
@@ -0,0 +1,16 @@
+# Fix crash with gst-inspect
+# Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+--- gstreamer-0.10.9/tools/gst-inspect.c.old	2006-09-12 11:56:53.000000000 +0100
++++ gstreamer-0.10.9/tools/gst-inspect.c	2006-09-12 11:57:27.000000000 +0100
+@@ -1123,7 +1123,7 @@
+   g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+   g_option_context_add_group (ctx, gst_init_get_option_group ());
+   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+-    g_print ("Error initializing: %s\n", err->message);
++    g_print ("Error initializing: %s\n", err ? err->message : "(null)");
+     exit (1);
+   }
+   g_option_context_free (ctx);
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
new file mode 100644
index 0000000..c1f3e71
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
@@ -0,0 +1,487 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *                    2005 David A. Schleef <ds@schleef.org>
+ *
+ * gstregistryxml.c: GstRegistry object, support routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it ulnder the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include <gst/gstregistrybinary.h>
+
+/*
+** Simple handy function to write a memory location to the registry cache file
+*/
+inline static gboolean
+gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size)
+{
+  if (write(registry->cache_file, mem, size) != size)
+    {
+      GST_ERROR("Failed to write binary registry element: ptr=%p size=%u error=%s\n",
+		mem, size, strerror(errno));
+      return FALSE;
+    }
+  return TRUE;
+}
+
+/*
+** Save features GstBinary style
+*/
+static gboolean 
+gst_registry_binary_fill_feature(GList **list, GstPluginFeature *orig, GstBinaryPluginFeature *dest, const char *name)
+{
+  GstBinaryChunck *chk;
+
+  if ((chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    return FALSE;
+
+  chk->data = dest;
+  chk->size = sizeof (GstBinaryPluginFeature);
+
+  *list = g_list_append(*list, chk);
+
+  dest->rank = orig->rank;
+  if (!strncpy(dest->typename, name, GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN) ||
+      !strncpy(dest->name, orig->name, GST_BINARY_REGISTRY_TYPENAME_NAME_LEN))
+    {
+      GST_ERROR("Failed to write binary registry feature");
+      goto fail;
+    }
+  
+  if (GST_IS_ELEMENT_FACTORY(orig))
+    {
+      GstElementFactory *factory = GST_ELEMENT_FACTORY(orig);
+      
+      if (!strncpy(dest->longname, factory->details.longname, GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN) ||
+	  !strncpy(dest->class, factory->details.klass, GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN) ||
+	  !strncpy(dest->description, factory->details.description, GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN) ||
+	  !strncpy(dest->author, factory->details.author, GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN))
+	{
+	  GST_ERROR("Failed to write binary registry feature");
+	  goto fail;
+	}
+    }
+  
+  dest->npadtemplates = dest->ninterfaces = dest->nuritypes = 0;
+  return TRUE;
+
+ fail:
+  free(chk);
+  return FALSE;
+}
+
+
+/*
+** Initialize the GstBinaryRegistryMagic, setting both our magic number and gstreamer major/minor version
+*/
+inline static gboolean
+gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m)
+{
+  if (!strncpy(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) ||
+      !strncpy(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+    {
+      GST_ERROR("Failed to write magic to the registry magic structure");
+      return FALSE;
+    }
+  return TRUE;
+}
+
+/*
+** Check GstBinaryRegistryMagic validity.
+** Return a pointer pointing right after the magic structure
+*/
+static gchar *
+gst_registry_binary_check_magic(gchar *in)
+{
+  GstBinaryRegistryMagic *m = (GstBinaryRegistryMagic *) in;
+
+  if (m == NULL || m->magic == NULL || m->version == NULL)
+    {
+      GST_ERROR("Binary registry magic structure is broken");
+      return NULL;
+    }
+  if (strncmp(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) != 0)
+    {
+      GST_ERROR("Binary registry magic is different : %02x%02x%02x%02x != %02x%02x%02x%02x",
+		GST_MAGIC_BINARY_REGISTRY_STR[0] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[1] & 0xff,
+		GST_MAGIC_BINARY_REGISTRY_STR[2] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[3] & 0xff,
+		m->magic[0] & 0xff, m->magic[1] & 0xff, m->magic[2] & 0xff, m->magic[3] & 0xff);
+      return NULL;
+    }
+  if (strncmp(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+    {
+      GST_ERROR("Binary registry magic version is different : %s != %s",
+		GST_MAJORMINOR, m->version);
+      return NULL;
+    }
+  return (in + sizeof (GstBinaryRegistryMagic));
+}
+
+/*
+** Adapt a GstPlugin to our GstBinaryPluginElement structure, and write it to the 
+** registry file.
+*/   
+static gboolean
+gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin)
+{
+  GstBinaryPluginElement *e;
+  GstBinaryChunck *chk;
+  GList *walk;
+
+  if ((e = calloc(1, sizeof (GstBinaryPluginElement))) == NULL ||
+      (chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    return FALSE;
+
+  chk->data = e;
+  chk->size = sizeof (GstBinaryPluginElement);
+  *list = g_list_append(*list, chk);
+
+  if (!strncpy(e->name, plugin->desc.name, GST_BINARY_REGISTRY_NAME_LEN)		       	||
+      !strncpy(e->description, plugin->desc.description, GST_BINARY_REGISTRY_DESCRIPTION_LEN)	||
+      !strncpy(e->filename, plugin->filename, _POSIX_PATH_MAX)					||
+      !strncpy(e->version, plugin->desc.version, GST_BINARY_REGISTRY_VERSION_LEN)		||
+      !strncpy(e->license, plugin->desc.license, GST_BINARY_REGISTRY_LICENSE_LEN)		||
+      !strncpy(e->source, plugin->desc.source, GST_BINARY_REGISTRY_SOURCE_LEN)			||
+      !strncpy(e->package, plugin->desc.package, GST_BINARY_REGISTRY_PACKAGE_LEN)		||
+      !strncpy(e->origin, plugin->desc.origin, GST_BINARY_REGISTRY_ORIGIN_LEN))
+    {
+      GST_DEBUG("Can't adapt GstPlugin to GstBinaryPluginElement");
+      goto fail;
+    }
+
+  e->size = plugin->file_size;
+  e->m32p = plugin->file_mtime;
+  
+  GList *ft_list = gst_registry_get_feature_list_by_plugin(registry, plugin->desc.name);
+
+  for (walk = ft_list; walk; walk = g_list_next(walk), e->nfeatures++)
+    {
+      GstPluginFeature *curfeat = GST_PLUGIN_FEATURE (walk->data);
+      GstBinaryPluginFeature *newfeat;
+      const char *feat_name = g_type_name(G_OBJECT_TYPE(curfeat));
+      
+      if ((newfeat = calloc(1, sizeof (GstBinaryPluginFeature))) == NULL)
+	  goto fail;
+
+      if (!feat_name || !gst_registry_binary_fill_feature(list, curfeat, newfeat, feat_name))
+	{
+	  GST_ERROR("Can't fill plugin feature, aborting.");
+	  goto fail;
+	}
+    }
+
+  GST_DEBUG("Found %d features in plugin \"%s\"\n", e->nfeatures, e->name);
+  return TRUE;
+
+ fail:
+  free(chk);
+  free(e);
+  return FALSE;
+}
+
+/*
+** Write the cache to file. Part of the code was taken from gstregistryxml.c
+*/
+gboolean 
+gst_registry_binary_write_cache(GstRegistry *registry, const char *location)
+{
+  GList *walk;
+  char *tmp_location;
+  GstBinaryRegistryMagic *magic;
+  GstBinaryChunck *magic_chunck;
+  GList *to_write = NULL;
+ 
+  GST_INFO("Writing binary registry cache");
+
+  g_return_val_if_fail (GST_IS_REGISTRY (registry), FALSE);
+  tmp_location = g_strconcat (location, ".tmpXXXXXX", NULL);
+  registry->cache_file = g_mkstemp (tmp_location);
+  if (registry->cache_file == -1)
+    {
+      char *dir;
+
+      /* oops, I bet the directory doesn't exist */
+      dir = g_path_get_dirname (location);
+      g_mkdir_with_parents (dir, 0777);
+      g_free (dir);
+      
+      registry->cache_file = g_mkstemp (tmp_location);
+    }
+
+  if (registry->cache_file == -1)
+    goto fail;
+
+  if ((magic = calloc(1, sizeof (GstBinaryRegistryMagic))) == NULL ||
+      !gst_registry_binary_initialize_magic(magic))
+    goto fail;
+
+  if ((magic_chunck = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    goto fail;
+
+  magic_chunck->data = magic;
+  magic_chunck->size = sizeof (GstBinaryRegistryMagic);
+  to_write = g_list_append(to_write, magic_chunck); 
+
+  /* Iterate trough the list of plugins in the GstRegistry and adapt them to our structures */
+  for (walk = g_list_last(registry->plugins); walk; walk = g_list_previous(walk))
+    {
+      GstPlugin *plugin = GST_PLUGIN(walk->data);
+      
+      if (!plugin->filename)
+	continue;
+	  
+      if (plugin->flags & GST_PLUGIN_FLAG_CACHED)
+	{
+	  int ret;
+	  struct stat statbuf;
+	  
+	  ret = g_stat (plugin->filename, &statbuf);
+	  if ((ret = g_stat (plugin->filename, &statbuf)) < 0 	||
+	      plugin->file_mtime != statbuf.st_mtime		||
+	      plugin->file_size != statbuf.st_size)
+	    continue;
+	}
+
+      if (!gst_registry_binary_save_plugin(&to_write, registry, plugin))
+	{
+	  GST_ERROR("Can't write binary plugin information for \"%s\"", plugin->filename);
+	  continue; /* Try anyway */
+	}
+    }
+
+  for (walk = g_list_first(to_write); walk; walk = g_list_next(walk))
+    {
+      GstBinaryChunck *cur = walk->data;
+
+      if (!gst_registry_binary_write(registry, cur->data, cur->size))
+	{
+	  free(cur->data);
+	  free(cur);
+	  g_list_free(to_write);
+	  goto fail;
+	}
+      free(cur->data);
+      free(cur);
+    }
+  g_list_free(to_write);
+
+  if (close(registry->cache_file) < 0)
+    {
+      GST_DEBUG("Can't close registry file : %s", strerror(errno));
+      goto fail;
+    }
+  
+  if (g_file_test (tmp_location, G_FILE_TEST_EXISTS)) {
+#ifdef WIN32
+    remove (location);
+#endif
+    rename (tmp_location, location);
+  }
+
+  g_free (tmp_location);
+  return TRUE;
+
+ fail:
+  g_free(tmp_location);
+  return FALSE;
+}
+
+static GstPluginFeature*
+gst_registry_binary_load_feature(GstBinaryPluginFeature *in)
+{
+  GstPluginFeature *feature;
+  GType type;
+
+  if (!in->typename || !*(in->typename))
+    return NULL;
+
+  /*  GST_INFO("Plugin feature typename : %s", in->typename);*/
+
+  if (!(type = g_type_from_name(in->typename)))
+    {
+      GST_ERROR("Unknown type from typename");
+      return NULL;
+    }
+  feature = g_object_new (type, NULL);
+
+  if (!feature) {
+    GST_ERROR("Can't create feature from type");
+    return NULL;
+  }
+
+  if (!GST_IS_PLUGIN_FEATURE (feature)) {
+    /* don't really know what it is */
+    if (GST_IS_OBJECT (feature))
+      gst_object_unref (feature);
+    else
+      g_object_unref (feature);
+    return NULL;
+  }
+
+  feature->name = g_strdup(in->name);
+  feature->rank = in->rank;
+
+  if (GST_IS_ELEMENT_FACTORY(feature))
+    {
+      GstElementFactory *factory = GST_ELEMENT_FACTORY(feature);
+
+      factory->details.longname = g_strdup(in->longname);
+      factory->details.klass = g_strdup(in->class);
+      factory->details.description = g_strdup(in->description);
+      factory->details.author = g_strdup(in->author);
+
+      /*      GST_INFO("Element factory : %s", factory->details.longname); */
+    }
+
+  GST_DEBUG("Added feature %p with name %s", feature, feature->name);
+  return feature;
+}
+
+/*
+** Make a new plugin from current GstBinaryPluginElement structure
+** and save it to the GstRegistry. Return an offset to the next
+** GstBinaryPluginElement structure.
+*/
+static unsigned long
+gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in)
+{
+  GstBinaryPluginElement *p = (GstBinaryPluginElement *) in;
+  GstPlugin *plugin = NULL;
+  GList *plugin_features = NULL;
+  GstBinaryPluginFeature *feat;
+  unsigned int i;
+  unsigned long offset;
+
+  plugin = g_object_new (GST_TYPE_PLUGIN, NULL);
+
+  plugin->flags |= GST_PLUGIN_FLAG_CACHED;
+
+  plugin->desc.name = g_strdup(p->name);
+  plugin->desc.description= g_strdup(p->description);
+  plugin->filename = g_strdup(p->filename);
+  plugin->desc.version = g_strdup(p->version);
+  plugin->desc.license = g_strdup(p->license);
+  plugin->desc.source = g_strdup(p->source);
+  plugin->desc.package = g_strdup(p->package);
+  plugin->desc.origin = g_strdup(p->origin);
+  plugin->file_mtime = p->m32p;
+  plugin->file_size = p->size;
+  plugin->basename = g_path_get_basename (plugin->filename);
+
+  if (plugin->file_mtime < 0 || plugin->file_size < 0)
+    {
+      GST_ERROR("Plugin time or file size is not valid !");
+      g_free(plugin);
+      return -1;
+    }
+
+  if (p->nfeatures < 0)
+    {
+      GST_ERROR("The number of feature structure is not valid !");
+      gst_object_unref(plugin);
+      return -1;
+    }
+
+  for (feat = (GstBinaryPluginFeature *) (in + sizeof (GstBinaryPluginElement)), i = 0; 
+       i < p->nfeatures; i++, feat++)
+    {
+      GstPluginFeature *gstfeat;
+
+      if ((gstfeat = gst_registry_binary_load_feature(feat)) == NULL)
+	{
+	  g_list_free(plugin_features);
+	  g_free(plugin);
+	  GST_ERROR("Error while loading binary feature");
+	  return -1;
+	}
+      gstfeat->plugin_name = g_strdup(plugin->desc.name);
+      plugin_features = g_list_prepend(plugin_features, gstfeat);
+    }
+  
+  GST_DEBUG("Added plugin \"%s\" to global registry from binary registry", plugin->desc.name); 
+  GList *g;
+
+  gst_registry_add_plugin (registry, plugin);
+  for (g = plugin_features; g; g = g_list_next (g))
+    gst_registry_add_feature (registry, GST_PLUGIN_FEATURE (g->data));
+  /*  g_list_free(plugin_features); */
+
+  offset = sizeof (GstBinaryPluginElement) + p->nfeatures * sizeof (GstBinaryPluginFeature);
+  return offset;
+}
+
+
+/*
+** Read the cache and adapt it to fill GstRegistry
+*/ 
+gboolean 
+gst_registry_binary_read_cache(GstRegistry *registry, const char *location)
+{
+  GMappedFile *mapped = NULL;
+  GTimer *timer = NULL;
+  gchar *contents = NULL;
+  gdouble seconds;
+  unsigned long offset, inc;
+  gsize size;
+
+  /* make sure these types exist */
+  GST_TYPE_ELEMENT_FACTORY;
+  GST_TYPE_TYPE_FIND_FACTORY;
+  GST_TYPE_INDEX_FACTORY;
+
+  timer = g_timer_new ();
+
+  if ((mapped = g_mapped_file_new(location, FALSE, NULL)) == NULL ||
+      (contents = g_mapped_file_get_contents(mapped)) == NULL)
+    {
+      GST_ERROR("Can't load file : %s", strerror(errno));
+      return FALSE;
+    }
+  if ((contents = gst_registry_binary_check_magic(contents)) == NULL)
+    {
+      GST_ERROR("Binary registry type not recognized (invalid magic)");
+      g_mapped_file_free(mapped);
+      return FALSE;
+    }
+
+  if ((size = g_mapped_file_get_length(mapped)) < sizeof (GstBinaryPluginElement))
+    {
+      GST_INFO("No binary plugins structure to read");
+      return TRUE; /* This is not really an error */
+    }
+
+  for (offset = inc = 0; (offset + sizeof (GstBinaryPluginElement)) < size &&
+	 (inc = gst_registry_binary_get_binary_plugin(registry, contents + offset)) > 0;
+       offset += inc)
+    ; /* May want in the future to do something here */
+  if (inc < 0)
+    {
+      GST_DEBUG("Problem while reading binary registry");
+      return FALSE;
+    }
+
+  g_timer_stop (timer);
+  seconds = g_timer_elapsed (timer, NULL);
+  g_timer_destroy (timer);
+
+  GST_INFO ("loaded %s in %f seconds", location, seconds);
+
+  if (mapped)
+    g_mapped_file_free (mapped);
+  return TRUE;
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
new file mode 100644
index 0000000..2ef24d7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
@@ -0,0 +1,194 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wim.taymans@chello.be>
+ *
+ * gstregistry.h: Header for registry handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* SUGGESTIONS AND TODO :
+** ====================
+** - Use a compressed registry, but would induce performance loss
+** - Encrypt the registry, for security purpose, but would also reduce performances
+** - Also have a non-mmap based cache reading (work with file descriptors)
+*/
+
+#ifndef __GST_REGISTRYBINARY_H__
+#define __GST_REGISTRYBINARY_H__
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <gst/gst_private.h>
+#include <gst/gstelement.h>
+#include <gst/gsttypefind.h>
+#include <gst/gsttypefindfactory.h>
+#include <gst/gsturi.h>
+#include <gst/gstinfo.h>
+#include <gst/gstenumtypes.h>
+#include <gst/gstregistry.h>
+#include <gst/gstpadtemplate.h>
+
+#include "glib-compat-private.h"
+#include <glib/gstdio.h>
+
+/* A magic, written at the beginning of the file */
+#define GST_MAGIC_BINARY_REGISTRY_STR "\xc0\xde\xf0\x0d"
+#define GST_MAGIC_BINARY_REGISTRY_LEN (4)
+#define GST_MAGIC_BINARY_VERSION_LEN (64)
+
+typedef struct _GstBinaryRegistryMagic
+{
+  char magic[GST_MAGIC_BINARY_REGISTRY_LEN];
+  char version[GST_MAGIC_BINARY_VERSION_LEN];
+} GstBinaryRegistryMagic;
+
+
+/* Used to store pointers to write */
+typedef struct _GstBinaryChunck
+{
+  void *data;
+  unsigned int size;
+} GstBinaryChunck;
+
+
+/* A structure containing (staticely) every information needed for a plugin
+**
+** Notes :
+** "nfeatures" is used to say how many GstBinaryPluginFeature structures we will have 
+** right after the structure itself.
+*/
+
+/* Various lenght defines for our GstBinaryPluginElement structure 
+** Note : We could eventually use smaller size
+*/
+#define GST_BINARY_REGISTRY_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_VERSION_LEN (64)
+#define GST_BINARY_REGISTRY_LICENSE_LEN (256)
+#define GST_BINARY_REGISTRY_SOURCE_LEN (256)
+#define GST_BINARY_REGISTRY_PACKAGE_LEN (1024)
+#define GST_BINARY_REGISTRY_ORIGIN_LEN (1024)
+
+typedef struct _GstBinaryPluginElement
+{
+  char name[GST_BINARY_REGISTRY_NAME_LEN];
+  char description[GST_BINARY_REGISTRY_DESCRIPTION_LEN];
+  char filename[_POSIX_PATH_MAX];
+  char version[GST_BINARY_REGISTRY_VERSION_LEN];
+  char license[GST_BINARY_REGISTRY_LICENSE_LEN];
+  char source[GST_BINARY_REGISTRY_SOURCE_LEN];
+  char package[GST_BINARY_REGISTRY_PACKAGE_LEN];
+  char origin[GST_BINARY_REGISTRY_ORIGIN_LEN];
+  unsigned long size;
+  unsigned long m32p;
+  unsigned int nfeatures;
+} GstBinaryPluginElement;
+
+
+/* A structure containing the plugin features
+**
+** Note :
+** "npadtemplates" is used to store the number of GstBinaryPadTemplate structures following the structure itself.
+** "ninterfaces" is used to store the number of GstBinaryInterface structures following the structure itself.
+** "nuritypes" is used to store the number of GstBinaryUriType structures following the structure itself.
+*/
+#define GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN (512)
+#define GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN (256)
+
+typedef struct _GstBinaryPluginFeature
+{
+  char typename[GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN];
+  char name[GST_BINARY_REGISTRY_TYPENAME_NAME_LEN];
+  unsigned long rank;
+  char longname[GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN];
+  char class[GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN];
+  char description[GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN];
+  char author[GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN];
+  unsigned int npadtemplates;
+  unsigned int ninterfaces;
+  unsigned int nuritypes;
+} GstBinaryPluginFeature;
+
+
+/* 
+** A structure containing the static pad templates of a plugin feature 
+*/
+#define GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN (1024)
+
+typedef struct _GstBinaryPadTemplate
+{
+  char name[GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN];
+  char cap[GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN];
+  int direction;					/* Either 0:"sink" or 1:"src" */
+  GstPadPresence presence;
+} GstBinaryPadTemplate;
+
+/*
+** A very simple structure defining the plugin feature interface string
+*/
+#define GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN (512)
+typedef struct _GstBinaryInterface
+{
+  char interface[GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN];
+  unsigned long size;
+} GstBinaryInterface;
+
+/* Uri Type */
+typedef struct _GstBinaryUriType
+{
+  GstURIType type;
+  unsigned long nuriprotocols;
+} GstBinaryUriType;
+
+/* 
+** Function prototypes
+*/
+
+/* Local prototypes */
+inline static gboolean gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size);
+inline static gboolean gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m);
+static gboolean gst_registry_binary_fill_feature(GList **list, GstPluginFeature *, GstBinaryPluginFeature *, const char *);
+static gboolean gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin);
+static gchar *gst_registry_binary_check_magic(gchar *in);
+static GstPluginFeature *gst_registry_binary_load_feature(GstBinaryPluginFeature *);
+static unsigned long gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in);
+
+/* Exportable */
+gboolean gst_registry_binary_write_cache(GstRegistry *registry, const char *location);
+gboolean gst_registry_binary_read_cache(GstRegistry *registry, const char *location);
+
+#endif /* !__GST_REGISTRYBINARY_H__ */
+
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
new file mode 100644
index 0000000..f61a410
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
@@ -0,0 +1,52 @@
+SUMMARY = "GStreamer multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/gst.h;beginline=1;endline=21;md5=8e5fe5e87d33a04479fde862e238eaa4"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native"
+
+PR = "r2"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2 \
+           file://check_fix.patch \
+           file://gst-inspect-check-error.patch \
+           file://0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch \
+           file://0001-parse-make-grammar.y-work-with-Bison-3.patch \
+"
+
+SRC_URI[md5sum] = "a0cf7d6877f694a1a2ad2b4d1ecb890b"
+SRC_URI[sha256sum] = "e556a529e0a8cf1cd0afd0cab2af5488c9524e7c3f409de29b5d82bb41ae7a30"
+
+inherit autotools pkgconfig gettext
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+            --disable-dependency-tracking --disable-check \
+            --disable-examples --disable-tests \
+            --disable-valgrind ${GSTREAMER_DEBUG} \
+            --disable-introspection \
+            "
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+        sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+}
+
+#do_compile_prepend () {
+#	mv ${WORKDIR}/gstregistrybinary.[ch] ${S}/gst/
+#}
+
+RRECOMMENDS_${PN}_qemux86    += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-0.10/.debug/ ${libexecdir}/gstreamer-0.10/.debug/"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch
new file mode 100644
index 0000000..61b0e6c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch
@@ -0,0 +1,60 @@
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 3e46d2e501da68d929bb5f26900a292a5fc04a1f Mon Sep 17 00:00:00 2001
+From: Stefan Westerfeld <stefan@space.twc.de>
+Date: Mon, 23 Apr 2012 03:10:22 +0200
+Subject: [PATCH] Fix time display updates (broken by introduction of quiet
+ mode).
+
+---
+ src/gst123.cc |    1 +
+ src/msg.cc    |    7 +++++++
+ src/msg.h     |    1 +
+ 3 files changed, 9 insertions(+)
+
+diff --git a/src/gst123.cc b/src/gst123.cc
+index 20e91e5..ce5876d 100644
+--- a/src/gst123.cc
++++ b/src/gst123.cc
+@@ -640,6 +640,7 @@ cb_print_position (gpointer *data)
+       else
+         blanks += "         ";
+       Msg::print ("%s%s\r", status.c_str(), blanks.c_str());
++      Msg::flush();
+     }
+ 
+   /* call me again */
+diff --git a/src/msg.cc b/src/msg.cc
+index 547cd90..33cada2 100644
+--- a/src/msg.cc
++++ b/src/msg.cc
+@@ -41,6 +41,13 @@ print (const char *format, ...)
+     }
+ }
+ 
++void
++flush()
++{
++  if (!Options::the().quiet)
++    fflush (stdout);
++}
++
+ }
+ 
+ }
+diff --git a/src/msg.h b/src/msg.h
+index e0ced24..5bebac0 100644
+--- a/src/msg.h
++++ b/src/msg.h
+@@ -27,6 +27,7 @@ namespace Msg
+ {
+ 
+ void print (const char *format, ...);
++void flush();
+ 
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb
new file mode 100644
index 0000000..47f1d9f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Flexible CLI player in the spirit of mpg123, based on GStreamer"
+HOMEPAGE = "http://space.twc.de/~stefan/gst123.php"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+                    file://src/gst123.cc;beginline=1;endline=19;md5=05d2f5d54b985b986c26af931d2084f8"
+
+DEPENDS = "libx11 gstreamer gst-plugins-base gtk+ ncurses"
+
+SRC_URI = "http://space.twc.de/~stefan/gst123/${BPN}-${PV}.tar.bz2 \
+           file://display.patch"
+
+SRC_URI[md5sum] = "1e77767c9d6fecee5641f95804f160fe"
+SRC_URI[sha256sum] = "89d1de025eca0466c125dcd6a11b64341bdf98ee4c03c3e5a12321d77cb8b0ce"
+
+inherit autotools
+
+PNBLACKLIST[gst123] ?= "gst123 is still "sometimes" using wrong sysroot"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
new file mode 100644
index 0000000..1339df6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Cross-platform audio output library and plugins"
+DESCRIPTION = "Libao is a cross-platform audio library that allows programs to \
+               output audio using a simple API on a wide variety of platforms."
+SECTION = "multimedia"
+HOMEPAGE = "https://www.xiph.org/ao/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI="http://downloads.xiph.org/releases/ao/${BP}.tar.gz"
+SRC_URI[md5sum] = "9f5dd20d7e95fd0dd72df5353829f097"
+SRC_URI[sha256sum] = "03ad231ad1f9d64b52474392d63c31197b0bc7bd416e58b1c10a329a5ed89caf"
+
+inherit autotools
+
+PACKAGES += "${BPN}-ckport"
+PACKAGES_DYNAMIC += "^${BPN}-plugin-.*"
+
+do_install_append () {
+    find "${D}" -name '*.la' -exec rm -f {} +
+}
+
+python populate_packages_prepend () {
+    rootdir = bb.data.expand('${libdir}/ao/plugins-4', d)
+    rootdir_dbg = bb.data.expand('${libdir}/ao/plugins-4/.debug', d)
+    do_split_packages(d, rootdir, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s', description='AO %s plugin')
+    do_split_packages(d, rootdir_dbg, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s-dbg', description='AO %s plugin debug data')
+}
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)}"
+PACKAGECONFIG[esound] = "--enable-esd,--disable-esd,esound"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+FILES_${BPN}-ckport = "${libdir}/ckport"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
new file mode 100644
index 0000000..97e2bf1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "libavc1394 is a programming interface for the 1394 Trade \
+Association AV/C (Audio/Video Control) Digital Interface Command Set"
+HOMEPAGE = "http://sourceforge.net/projects/libavc1394/"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "caf0db059d8b8d35d6f08e6c0e1c7dfe"
+SRC_URI[sha256sum] = "7cb1ff09506ae911ca9860bef4af08c2403f3e131f6c913a2cbd6ddca4215b53"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
new file mode 100755
index 0000000..89133ad
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
@@ -0,0 +1,14 @@
+Index: libdc1394/examples/Makefile.am
+===================================================================
+--- libdc1394.orig/examples/Makefile.am	2012-06-30 17:50:46.000000000 -0700
++++ libdc1394/examples/Makefile.am	2012-06-30 19:02:13.822646430 -0700
+@@ -36,8 +36,7 @@
+ AM_LDFLAGS = -framework CoreFoundation -framework Carbon
+ endif
+ 
+-noinst_PROGRAMS = $(A)
+-bin_PROGRAMS = $(B)
++bin_PROGRAMS = $(A) $(B)
+ 
+ LDADD = ../dc1394/libdc1394.la
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
new file mode 100755
index 0000000..0ea5cb9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Capture and control API for IIDC compliant cameras"
+HOMEPAGE = "http://sourceforge.net/projects/libdc1394/"
+SECTION = "libs"
+LICENSE = "LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c848e78d9a4a5cc69906178e4d6fbd64"
+
+# libsdl to provide sdl.m4 with AM_PATH_SDL
+DEPENDS += "libusb1 libraw1394 libsdl"
+
+PV = "2.2.1+gitr${SRCPV}"
+
+SRCREV = "b90342933b4b48634b98b73805f47bd25ed5857e"
+
+SRC_URI = "git://git.code.sf.net/p/libdc1394/code;branch=master;protocol=git \
+           file://install_examples.patch \
+          "
+
+S = "${WORKDIR}/git/${PN}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OECONF += "--disable-doxygen-doc --disable-examples"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
new file mode 100644
index 0000000..48b0111
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvbpsi is a simple library designed for decoding \
+and generation of MPEG TS and DVB PSI tables according to standards \
+ISO/IEC 13818 and ITU-T H.222.0."
+HOMEPAGE = "http://www.videolan.org/developers/libdvbpsi.html"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "http://download.videolan.org/pub/libdvbpsi/${PV}/libdvbpsi-${PV}.tar.bz2"
+SRC_URI[md5sum] = "2b217039a1299000c39423441f77e76a"
+SRC_URI[sha256sum] = "a2fed1d11980662f919bbd1f29e2462719e0f6227e1a531310bd5a706db0a1fe"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
new file mode 100644
index 0000000..c2dd96f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "library for DVD navigation features"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "libdvdread"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "e9ea4de3bd8f204e61301d407d09f033"
+SRC_URI[sha256sum] = "5097023e3d2b36944c763f1df707ee06b19dc639b2b68fb30113a5f2cbf60b6d"
+
+inherit autotools lib_package binconfig pkgconfig
+
+CONFIGUREOPTS_remove = "--disable-silent-rules"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
new file mode 100644
index 0000000..e6079bd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "An implementation of the most relevant parts of IEC 61883 over \
+libraw1394 for transmission, reception, and management of media streams and \
+devices such as DV, MPEG2-TS, audio, and MIDI"
+HOMEPAGE = "https://ieee1394.wiki.kernel.org/index.php/Libraries#libiec61883"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=771782cb6245c7fbbe74bc0ec059beff"
+
+SRC_URI = "https://www.kernel.org/pub/linux/libs/ieee1394/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "ed91bc1727fac8e019402fc3724a283d"
+SRC_URI[sha256sum] = "d1e02c7e276fac37313a2f8c1c33d7a9e19282ff16f32e72435428ff5121f09e"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb
new file mode 100644
index 0000000..e6a912b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Audio decoder for MPEG-1 Layer 1/2/3"
+DESCRIPTION = "The core of mpg123 is an MPEG-1 Layer 1/2/3 decoding library, which can be used by other programs. \
+mpg123 also comes with a command-line tool which can playback using ALSA, PulseAudio, OSS, and several other APIs, \
+and also can write the decoded audio to WAV."
+HOMEPAGE = "http://mpg123.de/"
+BUGTRACKER = "http://sourceforge.net/p/mpg123/bugs/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1e86753638d3cf2512528b99079bc4f3"
+
+DEPENDS = "audiofile"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mpg123/mpg123/${PV}/${BP}.tar.bz2"
+
+SRC_URI[md5sum] = "2dfafae3bbc532b4c8b04a77c6a6de89"
+SRC_URI[sha256sum] = "5069e02e50138600f10cc5f7674e44e9bf6f1930af81d0e1d2f869b3c0ee40d2"
+
+inherit autotools pkgconfig
+
+# The options should be mutually exclusive for configuration script.
+# If both alsa and pulseaudio are specified (as in the default distro features)
+# pulseaudio takes precedence.
+PACKAGECONFIG_ALSA = "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)}"
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '${PACKAGECONFIG_ALSA}', d)}"
+
+PACKAGECONFIG[alsa] = "--with-default-audio=alsa,,alsa-lib"
+PACKAGECONFIG[esd] = ",,esound"
+PACKAGECONFIG[jack] = ",,jack"
+PACKAGECONFIG[openal] = ",,openal-soft"
+PACKAGECONFIG[portaudio] = ",,portaudio-v19"
+PACKAGECONFIG[pulseaudio] = "--with-default-audio=pulse,,pulseaudio"
+PACKAGECONFIG[sdl] = ",,libsdl"
+
+# Following are possible sound output modules:
+# alsa arts coreaudio dummy esd jack nas openal os2 oss portaudio pulse sdl sndio sun tinyalsa win32 win32_wasapi
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'alsa', 'alsa', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'esd', 'esd', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'jack', 'jack', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'openal', 'openal', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'portaudio', 'portaudio', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'pulse', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'sdl', 'sdl', '', d)}"
+
+EXTRA_OECONF = " \
+    --enable-shared \
+    --with-audio='${AUDIOMODS}' \
+    --with-module-suffix=.so \
+    ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-cpu=neon', '', d)} \
+    ${@bb.utils.contains('TUNE_FEATURES', 'altivec', '--with-cpu=altivec', '', d)} \
+"
+
+# The x86 assembler optimisations contains text relocations and there are no
+# upstream plans to fix them: http://sourceforge.net/p/mpg123/bugs/168/
+INSANE_SKIP_${PN}_append_x86 = " textrel"
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:47: Error: selected processor does not support Thumb mode `smull r5,r6,r7,r4'
+#| {standard input}:48: Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r5,r5,lsr#24'
+#...
+#| make[3]: *** [equalizer.lo] Error 1
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
new file mode 100644
index 0000000..d59d12e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
@@ -0,0 +1,21 @@
+Allow LIB_INSTALL_DIR to be set by the the cmake configure invocation.  We dont
+easily have a way of determining something that patches ${LIB_SUFFIX} so we'll
+set LIB_INSTALL_DIR.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+Index: libmusicbrainz-3.0.3/CMakeLists.txt
+===================================================================
+--- libmusicbrainz-3.0.3.orig/CMakeLists.txt
++++ libmusicbrainz-3.0.3/CMakeLists.txt
+@@ -26,7 +26,7 @@ FIND_PACKAGE(DiscId)
+ SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
+ SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
+ SET(BIN_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/bin CACHE PATH "Installation prefix for user executables" FORCE)
+-SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH  "Installation prefix for object code libraries" FORCE)
++SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH  "Installation prefix for object code libraries")
+ SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "Installation prefix for C header files" FORCE)
+ 
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libmusicbrainz3.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libmusicbrainz3.pc)
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
new file mode 100644
index 0000000..a6a4f6a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "MusicBrainz client library"
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs.  The library allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
+DEPENDS = "expat neon neon-native"
+
+PV = "5.0.1+git${SRCPV}"
+PR = "r1"
+
+SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
+SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
+           file://allow-libdir-override.patch "
+
+S = "${WORKDIR}/git"
+
+LDFLAGS_prepend_libc-uclibc = " -lpthread "
+
+inherit cmake pkgconfig
+
+do_configure_prepend() {
+    # The native build really doesn't like being rebuilt, so delete
+    # it if it's already present. Also delete all other files not
+    # known to Git to fix subsequent invocations of do_configure.
+    git clean -dfx -e /.pc/ -e /patches/ .
+    mkdir build-native
+    cd build-native
+    cmake -DCMAKE_C_FLAGS=${BUILD_CFLAGS} \
+          -DCMAKE_C_COMPILER=${BUILD_CC} \
+          -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
+          -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
+          ..
+    make make-c-interface
+    cd ..
+}
+
+EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:PATH=${libdir} \
+                 -DIMPORT_EXECUTABLES=build-native/ImportExecutables.cmake"
+
+# out-of-tree building doesn't appear to work for this package.
+B = "${S}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
new file mode 100644
index 0000000..4a2b25c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
@@ -0,0 +1,10 @@
+--- libmpd-11.8.17/src/libmpd-internal.h.orig	2014-09-30 04:08:50.963292427 +0200
++++ libmpd-11.8.17/src/libmpd-internal.h	2014-09-30 04:08:30.595292223 +0200
+@@ -21,6 +21,7 @@
+ #define __MPD_INTERNAL_LIB_
+ 
+ #include "libmpdclient.h"
++#include "config.h"
+ struct _MpdData_real;
+ 
+ typedef struct _MpdData_real {
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
new file mode 100644
index 0000000..54d7910
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Music Player Daemon library"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://sourceforge.net/projects/musicpd"
+DEPENDS = "glib-2.0"
+
+SRC_URI = "http://www.musicpd.org/download/${BPN}/${PV}/${BP}.tar.gz \
+    file://glibc-2.20.patch \
+"
+SRC_URI[md5sum] = "5ae3d87467d52aef3345407adb0a2488"
+SRC_URI[sha256sum] = "fe20326b0d10641f71c4673fae637bf9222a96e1712f71f170fca2fc34bf7a83"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
new file mode 100644
index 0000000..f9f92c9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
@@ -0,0 +1,420 @@
+# An example configuration file for MPD
+# See the mpd.conf man page for a more detailed description of each parameter.
+
+
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory		"%music_directory%"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory		"%playlist_directory%"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file			"%db_file%"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog, otherwise logging is disabled.
+#
+log_file			"%log_file%"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+#pid_file			"/var/run/mpd/mpd.pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file		"%state_file%"
+#
+# The location of the sticker database.  This is a database which
+# manages dynamic information attached to songs.
+#
+#sticker_file			"~/.mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+user "mpd"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+group				"audio"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
+#
+# For network
+bind_to_address		"any"
+#
+# And for Unix Socket
+#bind_to_address		"~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+#port				"6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose" setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level			"default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback			"yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists	"no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use	"artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update	"yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself.  There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks	"yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks		"yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled		"yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
+#
+#zeroconf_name			"Music Player"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# can setting can be specified multiple times for different password profiles.
+#
+#password                        "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions             "read,add,control,admin"
+#
+###############################################################################
+
+
+# Input #######################################################################
+#
+
+input {
+        plugin "curl"
+#       proxy "proxy.isp.com:8080"
+#       proxy_user "user"
+#       proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
+# other audio outputs.
+#
+# board specific examples #####################################################
+# (feel free to add futher)
+#
+# gumstix overo (tested with TOBI expansion board)
+#audio_output {
+#	type		"alsa"
+#	name		"overo"
+#	mixer_control	"Headset"
+#	mixer_index	"0"
+#}
+#
+# general examples ############################################################
+#
+# An example of an ALSA output:
+#
+#audio_output {
+#	type		"alsa"
+#	name		"My ALSA Device"
+##	device		"hw:0,0"	# optional
+##	format		"44100:16:2"	# optional
+##	mixer_type      "hardware"	# optional
+##	mixer_device	"default"	# optional
+##	mixer_control	"PCM"		# optional
+##	mixer_index	"0"		# optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+#	type		"oss"
+#	name		"My OSS Device"
+##	device		"/dev/dsp"	# optional
+##	format		"44100:16:2"	# optional
+##	mixer_type      "hardware"	# optional
+##	mixer_device	"/dev/mixer"	# optional
+##	mixer_control	"PCM"		# optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+#	type		"shout"
+#	encoding	"ogg"			# optional
+#	name		"My Shout Stream"
+#	host		"localhost"
+#	port		"8000"
+#	mount		"/mpd.ogg"
+#	password	"hackme"
+#	quality		"5.0"
+#	bitrate		"128"
+#	format		"44100:16:1"
+##	protocol	"icecast2"		# optional
+##	user		"source"		# optional
+##	description	"My Stream Description"	# optional
+##	genre		"jazz"			# optional
+##	public		"no"			# optional
+##	timeout		"2"			# optional
+##	mixer_type      "software"		# optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+#	type		"recorder"
+#	name		"My recorder"
+#	encoder		"vorbis"		# optional, vorbis or lame
+#	path		"/var/lib/mpd/recorder/mpd.ogg"
+##	quality		"5.0"			# do not define if bitrate is defined
+#	bitrate		"128"			# do not define if quality is defined
+#	format		"44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+#	type		"httpd"
+#	name		"My HTTP Stream"
+#	encoder		"vorbis"		# optional, vorbis or lame
+#	port		"8000"
+#	bind_to_address	"0.0.0.0"		# optional, IPv4 or IPv6
+##	quality		"5.0"			# do not define if bitrate is defined
+#	bitrate		"128"			# do not define if quality is defined
+#	format		"44100:16:1"
+#	max_clients	"0"			# optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+#audio_output {
+#	type		"pulse"
+#	name		"My Pulse Output"
+##	server		"remote_server"		# optional
+##	sink		"remote_server_sink"	# optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+#	type		"pipe"
+#	name		"my pipe"
+#	command		"aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+#	command		"AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+#	command		"nc example.org 8765"
+#	format		"44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+#	type		"null"
+#	name		"My Null Output"
+#	mixer_type      "none"			# optional
+#}
+#
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting is
+# disabled.
+#
+#audio_output_format		"44100:16:2"
+#
+# If MPD has been compiled with libsamplerate support, this setting specifies
+# the sample rate converter to use.  Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
+#
+#samplerate_converter		"Fastest Sinc Interpolator"
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album" or "track". See <http://www.replaygain.org>
+# for more details. This setting is off by default.
+#
+#replaygain			"album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp		"0"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization		"no"
+#
+###############################################################################
+
+
+# MPD Internal Buffering ######################################################
+#
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what you
+# are doing.
+#
+#audio_buffer_size		"2048"
+#
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play		"10%"
+#
+###############################################################################
+
+
+# Resource Limitations ########################################################
+#
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent security
+# risks, depending on the operating resources.
+#
+#connection_timeout		"60"
+#max_connections		"10"
+#max_playlist_length		"16384"
+#max_command_list_size		"2048"
+#max_output_buffer_size		"8192"
+#
+###############################################################################
+
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+#filesystem_charset		"UTF-8"
+#
+# This setting controls the encoding that ID3v1 tags should be converted from.
+#
+#id3v1_encoding			"ISO-8859-1"
+#
+###############################################################################
+
+
+# SIDPlay decoder #############################################################
+#
+# songlength_database:
+#  Location of your songlengths file, as distributed with the HVSC.
+#  The sidplay plugin checks this for matching MD5 fingerprints.
+#  See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
+#
+# default_songlength:
+#  This is the default playing time in seconds for songs not in the
+#  songlength database, or in case you're not using a database.
+#  A value of 0 means play indefinitely.
+#
+# filter:
+#  Turns the SID filter emulation on or off.
+#
+#decoder {
+#	plugin			"sidplay"
+#	songlength_database	"/media/C64Music/DOCUMENTS/Songlengths.txt"
+#	default_songlength	"120"
+#	filter "true"
+#}
+#
+###############################################################################
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb
new file mode 100644
index 0000000..7b124ca
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Music Player Daemon"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://www.musicpd.org"
+
+DEPENDS = "alsa-lib libsamplerate0 libsndfile1 libvorbis libogg faad2 ffmpeg curl sqlite bzip2 pulseaudio tcp-wrappers openal-soft yajl jack faad2 flac libao fluidsynth libcdio wavpack libopus mpg123 libmms libmodplug boost icu dbus expat zlib libupnp"
+
+SRC_URI = " \
+    http://www.musicpd.org/download/${BPN}/0.19/${BP}.tar.xz \
+    file://mpd.conf.in \
+"
+SRC_URI[md5sum] = "da4bc3e47afd0faf9e7a67168e012102"
+SRC_URI[sha256sum] = "c386eb3d22f98dc993b5ae3c272f969aa7763713483c6800040ebf1791b15851"
+
+inherit autotools useradd systemd
+
+EXTRA_OECONF = "enable_bzip2=yes"
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
+
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[id3tag] = "--enable-id3,--disable-id3,libid3tag"
+PACKAGECONFIG[lame] = "--enable-lame-encoder,--disable-lame-encoder,lame"
+PACKAGECONFIG[smb] = "--enable-smbclient,--disable-smbclient,samba"
+
+do_install_append() {
+    install -d ${D}/${localstatedir}/lib/mpd/music
+    chmod 775 ${D}/${localstatedir}/lib/mpd/music
+    install -d ${D}/${localstatedir}/lib/mpd/playlists
+    chown -R mpd ${D}/${localstatedir}/lib/mpd
+    chown mpd:mpd ${D}/${localstatedir}/lib/mpd/music
+
+    install -d ${D}/${sysconfdir}
+    install -m 644 ${WORKDIR}/mpd.conf.in ${D}/${sysconfdir}/mpd.conf
+    sed -i \
+        -e 's|%music_directory%|${localstatedir}/lib/mpd/music|' \
+        -e 's|%playlist_directory%|${localstatedir}/lib/mpd/playlists|' \
+        -e 's|%db_file%|${localstatedir}/lib/mpd/mpd.db|' \
+        -e 's|%log_file%|${localstatedir}/log/mpd.log|' \
+        -e 's|%state_file%|${localstatedir}/lib/mpd/state|' \
+        ${D}/${sysconfdir}/mpd.conf
+
+    if [ -e ${D}/${systemd_unitdir}/system/mpd.service ] ; then
+        sed -i \
+            's|^ExecStart=.*|ExecStart=${bindir}/mpd --no-daemon|' \
+            ${D}/${systemd_unitdir}/system/mpd.service
+    fi
+}
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "mpd.service mpd.socket"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+    --system --no-create-home \
+    --home ${localstatedir}/lib/mpd \
+    --groups audio \
+    --user-group mpd"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
new file mode 100644
index 0000000..5895234
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "OpenAL is a cross-platform 3D audio API"
+HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=facc3a8f452930083bbb95d82b989c35"
+
+inherit cmake
+
+SRC_URI = "http://kcat.strangesoft.net/openal-releases/${BP}.tar.bz2"
+SRC_URI[md5sum] = "ea83dec3b9655a27d28e7bc7cae9cd71"
+SRC_URI[sha256sum] = "0e29a162f0841ccb4135ce76e92e8a704589b680a85eddf76f898de5236eb056"
+
+PACKAGECONFIG ?= "\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+"
+PACKAGECONFIG[alsa] = "-DALSA=TRUE, -DALSA=FALSE, alsa-lib"
+PACKAGECONFIG[pulseaudio] = "-DPULSEAUDIO=TRUE, -DPULSEAUDIO=FALSE, pulseaudio"
+# currently doesn't work with libav-9
+# PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
+# but alffmpeg.c:418:44: error: 'AV_CH_LAYOUT_MONO' undeclared (first use in this function)
+PACKAGECONFIG[examples] = "-DEXAMPLES=TRUE, -DEXAMPLES=FALSE, libav"
+
+FILES_${PN} += "${datadir}/openal"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
new file mode 100644
index 0000000..ab5813e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "OpenCORE Adaptive Multi Rate (AMR) speech codec library implementation"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "09d2c5dfb43a9f6e9fec8b1ae678e725"
+SRC_URI[sha256sum] = "106bf811c1f36444d7671d8fd2589f8b2e0cca58a2c764da62ffc4a070595385"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
new file mode 100644
index 0000000..ce37362
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Advanced Audio Coding (AAC) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "b574da1d92d75fc40b0b75aa16f24ac4"
+SRC_URI[sha256sum] = "e51a7477a359f18df7c4f82d195dab4e14e7414cbd48cf79cc195fc446850f36"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
new file mode 100644
index 0000000..cc049ed
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Adaptive Multi Rate Wideband (AMR-WB) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "f63bb92bde0b1583cb3cb344c12922e0"
+SRC_URI[sha256sum] = "5652b391e0f0e296417b841b02987d3fd33e6c0af342c69542cbb016a71d9d4e"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
new file mode 100644
index 0000000..bb3d8b0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
@@ -0,0 +1,18 @@
+Make sure libdir (SODIR) is created when running parallel make.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: git/librtmp/Makefile
+===================================================================
+--- git.orig/librtmp/Makefile
++++ git/librtmp/Makefile
+@@ -107,6 +107,7 @@ install_base:	librtmp.a librtmp.pc
+ 	cp librtmp.3 $(MANDIR)/man3
+ 
+ install_so:	librtmp.$(SO_EXT)
++	-mkdir -p $(SODIR)
+ 	cp librtmp.$(SO_EXT) $(SODIR)
+ 	cd $(SODIR); ln -sf librtmp.$(SO_EXT) librtmp.$(SOX)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
new file mode 100644
index 0000000..a1e6502
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "RTMP Dump"
+DESCRIPTION = "rtmpdump is a toolkit for RTMP streams. All forms of RTMP are \
+supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://."
+HOMEPAGE = "http://rtmpdump.mplayerhq.hu/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "openssl zlib"
+
+SRCREV = "3121324046e4ca1934e7e28293fc8326475d5053"
+SRC_URI = " \
+    git://git.ffmpeg.org/rtmpdump \
+    file://fix-racing-build-issue.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = " \
+    CC='${CC}' LD='${LD} ${STAGING_LIBDIR}' \
+    SYS=posix INC=-I=/usr/include DESTDIR=${D} \
+    prefix=${prefix} libdir=${libdir} incdir=${includedir}/librtmp bindir=${bindir} mandir=${mandir}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
new file mode 100644
index 0000000..e91ba45
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 1080P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_surround.avi"
+SRC_URI[md5sum] = "223991c8b33564eb77988a4c13c1c76a"
+SRC_URI[sha256sum] = "69fe2cfe7154a6e752688e3a0d7d6b07b1605bbaf75b56f6470dc7b4c20c06ea"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_1080p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
new file mode 100644
index 0000000..e7029d9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 480P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"
+SRC_URI[md5sum] = "ed7ed01e9aefba8ddd77c13332cec120"
+SRC_URI[sha256sum] = "40d1cf5bc8e1b0e55dac7bb2e3fbc2aea05b6679444864781299b24db044634f"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_480p_surround-fix.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
new file mode 100644
index 0000000..55fceab
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 720P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi"
+SRC_URI[md5sum] = "0da8fe124595f5b206d64cb1400bbefc"
+SRC_URI[sha256sum] = "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_720p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
new file mode 100644
index 0000000..bb7ee7c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Tears of Steel movie - 1080P"
+LICENSE = "CC-BY-3.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://ftp.nluug.nl/pub/graphics/blender/demo/movies/ToS/ToS-4k-1920.mov"
+SRC_URI[md5sum] = "e3fee55b1779c553e37b1d3988e6fad6"
+SRC_URI[sha256sum] = "bd2b5bc6c16d4085034f47ef7e4b3938afe86b4eec4ac3cf2685367d3b0b23b0"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/ToS-4k-1920.mov ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
new file mode 100644
index 0000000..2ed8d22
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
@@ -0,0 +1,20 @@
+Use the version of orcc in the sysroot not the one from the host
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: schroedinger-1.0.9/configure.ac
+===================================================================
+--- schroedinger-1.0.9.orig/configure.ac
++++ schroedinger-1.0.9/configure.ac
+@@ -54,7 +54,7 @@ if test "x${HAVE_ORC}" != xyes ; then
+   AC_ERROR([orc-0.4 >= $ORC_VER is required])
+ fi
+ SCHRO_PKG_DEPS="$SCHRO_PKG_DEPS orc-0.4 >= $ORC_VER"
+-ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
++ORCC=$STAGING_DIR`$PKG_CONFIG --variable=orcc orc-0.4`
+ AC_SUBST(ORCC)
+ 
+ AC_ARG_WITH([thread],
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
new file mode 100644
index 0000000..d38eb94
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Dirac compressed video encoder/decoder"
+HOMEPAGE = "http://schrodinger.sourceforge.net/"
+LICENSE = "MPL-1.1 | GPLv2 | LGPLv2 | MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d91a46405fc074b88c963cc4f2a0aae9 \
+                    file://COPYING.GPL;md5=e181e3b7c66f5f96921d813c1074f833 \
+                    file://COPYING.LGPL;md5=38c893e21baec4cd75ad800ba9e2410a \
+                    file://COPYING.MIT;md5=8b345371b3536b4ce37ead1eafc88221 \
+                    file://COPYING.MPL;md5=0117647fecb9a932c25a7bbfc0333c37"
+
+DEPENDS = "liboil orc-native orc"
+
+SRC_URI = "http://www.diracvideo.org/download/schroedinger/${BP}.tar.gz \
+           file://configure.ac.patch"
+
+SRC_URI[md5sum] = "da6af08e564ca1157348fb8d92efc891"
+SRC_URI[sha256sum] = "1e572a0735b92aca5746c4528f9bebd35aa0ccf8619b22fa2756137a8cc9f912"
+
+EXTRA_OECONF += "STAGING_DIR=${STAGING_DIR_NATIVE}"
+
+inherit autotools-brokensep pkgconfig
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb
new file mode 100644
index 0000000..4b73aa3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb
@@ -0,0 +1,38 @@
+DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
+It converts audio files among various standard audio file formats \
+and can apply different effects and filters to the audio data."
+HOMEPAGE = "http://sox.sourceforge.net"
+SECTION = "audio"
+
+DEPENDS = "libpng ffmpeg libsndfile1 libvorbis"
+
+PR = "r2"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+                   magic \
+"
+PACKAGECONFIG[pulseaudio] = "--with-pulseaudio=dyn,--with-pulseaudio=no,pulseaudio,"
+PACKAGECONFIG[alsa] = "--with-alsa=dyn,--with-alsa=no,alsa-lib,"
+PACKAGECONFIG[wavpack] = "--with-wavpack=dyn,--with-wavpack=no,wavpack,"
+PACKAGECONFIG[flac] = "--with-flac=dyn,--with-flac=no,flac,"
+PACKAGECONFIG[amrwb] = "--with-amrwb=dyn,--with-amrwb=no,opencore-amr,"
+PACKAGECONFIG[amrnb] = "--with-amrnb=dyn,--with-amrnb=no,opencore-amr,"
+PACKAGECONFIG[magic] = "--with-magic,--without-magic,file,"
+PACKAGECONFIG[mad] = "--with-mad,--without-mad,libmad,"
+PACKAGECONFIG[id3tag] = "--with-id3tag,--without-id3tag,libid3tag,"
+PACKAGECONFIG[lame] = "--with-lame,--without-lame,lame,"
+PACKAGECONFIG[ao] = "--with-ao,--without-ao,libao,"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=751419260aa954499f7abaabaa882bbe \
+                    file://LICENSE.LGPL;md5=fbc093901857fcd118f065f900982c24"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz"
+SRC_URI[md5sum] = "b0c15cff7a4ba0ec17fdc74e6a1f9cf1"
+SRC_URI[sha256sum] = "3ee34b14dd267de378e8a117aae81ec4cae330772342e6a55bbf6520a0a88aa3"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
new file mode 100644
index 0000000..79e64ae
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = " --disable-doc "
+
+SRC_URI[md5sum] = "7f0fdb3ff91d638f5e45ed7536f7eb67"
+SRC_URI[sha256sum] = "7c414acd520c4e4dd7267952f72d738ff50321a7869af4d75c65aefad44f1395"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
new file mode 100644
index 0000000..8142e16
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
@@ -0,0 +1,106 @@
+DESCRIPTION = "Video player and streamer - davinci edition"
+HOMEPAGE = "http://www.videolan.org"
+SECTION = "multimedia"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libfribidi libtool libgcrypt libgcrypt-native \
+   dbus dbus-glib libxml2 gnutls \
+   tremor faad2 ffmpeg flac fluidsynth alsa-lib \
+   lua-native lua libidn \
+   avahi jpeg xz libmodplug mpeg2dec \
+   libmtp libopus orc libsamplerate0 libusb1 schroedinger taglib \
+   tiff"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.xz"
+
+inherit autotools gettext pkgconfig distro_features_check
+
+ARM_INSTRUCTION_SET = "arm"
+
+EXTRA_OECONF = "\
+    --enable-run-as-root \
+    --enable-xvideo \ 
+    --disable-screen --disable-caca \
+    --enable-httpd --enable-vlm \
+    --enable-freetype \
+    --enable-tremor \
+    --enable-v4l2 --disable-aa --disable-faad \
+    --enable-dbus \
+    --without-contrib \
+    --without-kde-solid \
+    --enable-realrtsp \
+    --disable-libtar \
+    ac_cv_path_MOC=${STAGING_BINDIR_NATIVE}/moc4 \
+    ac_cv_path_RCC=${STAGING_BINDIR_NATIVE}/rcc4 \
+    ac_cv_path_UIC=${STAGING_BINDIR_NATIVE}/uic4 \
+"
+
+PACKAGECONFIG ?= " live555 dc1394 dv1394 notify fontconfig freetype dvdread png ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 sdl', '', d)}"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,virtual/libsdl libsdl-image "
+PACKAGECONFIG[a52] = "--enable-a52,--disable-a52,liba52"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[live555] = "--enable-live555,--disable-live555,live555"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[mkv] = "--enable-mkv,--disable-mkv,libmatroska libebml"
+PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc,libpostproc"
+PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[libva] = "--enable-libva --enable-avcodec,--disable-libva --disable-avcodec,libva libav"
+PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[gstreamer] = "--enable-gst-decode,--disable-gst-decode,gstreamer1.0 gstreamer1.0-plugins-base gst-plugins-bad"
+PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx, libvpx"
+PACKAGECONFIG[qt4] = "--enable-qt,--disable-qt, qt4-x11-free"
+PACKAGECONFIG[freerdp] = "--enable-freerdp,--disable-freerdp, freerdp"
+PACKAGECONFIG[dvbpsi] = "--enable-dvbpsi,--disable-dvbpsi, libdvbpsi"
+PACKAGECONFIG[gnome-vfs] = "--enable-gnomevfs,--disable-gnomevfs, gnome-vfs"
+PACKAGECONFIG[samba] = "--enable-smbclient,--disable-smbclient, samba"
+PACKAGECONFIG[upnp] = "--enable-upnp,--disable-upnp,libupnp"
+PACKAGECONFIG[dvdnav] = "--enable-dvdnav,--disable-dvdnav,libdvdnav libdvdcss"
+PACKAGECONFIG[sftp] = "--enable-sftp,--disable-sftp,libssh2"
+PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis libogg"
+PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libvorbis libogg"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libavc1394"
+PACKAGECONFIG[svg] = "--enable-svg,--disable-svg,librsvg"
+PACKAGECONFIG[svgdec] = "--enable-svgdec,--disable-svgdec,librsvg cairo"
+PACKAGECONFIG[notify] = "--enable-notify,--disable-notify, libnotify gtk+"
+PACKAGECONFIG[fontconfig] = "--enable-fontconfig,--disable-fontconfig, fontconfig"
+PACKAGECONFIG[freetype] = "--enable-freetype,--disable-freetype, freetype"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread, libdvdread libdvdcss"
+PACKAGECONFIG[vnc] = "--enable-vnc,--disable-vnc, libvncserver"
+PACKAGECONFIG[x11] = "--with-x --enable-xcb,--without-x --disable-xcb,  xcb-util-keysyms libxpm libxinerama"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
+
+do_configure_prepend() {
+    cp ${STAGING_DATADIR}/libtool/config.* ${S}/autotools/ || true
+}
+
+do_configure_append() {
+    sed -i -e s:'$(MOC) $(DEFS) $(CPPFLAGS)':'$(MOC) $(DEFS)'\ -I${B}/include\ -DSYS_LINUX:g ${B}/modules/gui/qt4/Makefile
+    sed -i -e s:'${top_builddir_slash}libtool':'${top_builddir_slash}'${TARGET_SYS}-libtool:g ${B}/doltlibtool
+}
+
+# This recipe packages vlc as a library as well, so qt4 dependencies
+# can be avoided when only the library is installed.
+PACKAGES =+ "libvlc"
+
+LEAD_SONAME_libvlc = "libvlc.so.5"
+FILES_libvlc = "${libdir}/lib*.so.*"
+
+FILES_${PN} += "\
+    ${bindir}/vlc \
+    ${datadir}/applications \
+    ${datadir}/vlc/ \
+    ${datadir}/icons \
+"
+
+FILES_${PN}-dbg += "\
+    ${libdir}/vlc/*/.debug \
+    ${libdir}/vlc/plugins/*/.debug \
+"
+
+FILES_${PN}-staticdev += "\
+    ${libdir}/vlc/plugins/*/*.a \
+"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
new file mode 100644
index 0000000..9f0e708
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
@@ -0,0 +1,13 @@
+Index: vlc-2.1.2/configure.ac
+===================================================================
+--- vlc-2.1.2.orig/configure.ac
++++ vlc-2.1.2/configure.ac
+@@ -24,7 +24,7 @@ AC_CANONICAL_BUILD
+ AC_CANONICAL_HOST
+ AC_PRESERVE_HELP_ORDER
+ 
+-AM_INIT_AUTOMAKE(tar-ustar color-tests foreign)
++AM_INIT_AUTOMAKE(tar-ustar color-tests foreign subdir-objects)
+ AC_CONFIG_HEADERS([config.h])
+ 
+ # Disable with "./configure --disable-silent-rules" or "make V=1"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
new file mode 100644
index 0000000..6d2a46f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
@@ -0,0 +1,17 @@
+Index: vlc-2.1.2/src/input/subtitles.c
+===================================================================
+--- vlc-2.1.2.orig/src/input/subtitles.c
++++ vlc-2.1.2/src/input/subtitles.c
+@@ -44,6 +44,12 @@
+ #include "input_internal.h"
+ 
+ /**
++ * Drepper's alternative 
++ * http://en.wikibooks.org/wiki/C_Programming/C_Reference/nonstandard/strlcpy
++ */
++#define strlcpy(dst, src, n) *((char* ) mempcpy(dst, src, n)) = '\0'
++
++/**
+  * We are not going to autodetect more subtitle files than this.
+  */
+ #define MAX_SUBTITLE_FILES 128
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
new file mode 100644
index 0000000..8e881d0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
@@ -0,0 +1,46 @@
+* The upstream tests for libgcrypt are awkward and not working.
+  - Requires libgcrypt-config, which seems broken?
+* AM_PATH_LIBGCRYPT exists for a reason, why not use it? KISS.
+* Upstream abandoned AM_PATH_LIBGCRYPT in the past...newer automake ok?
+
+Upstream status: Pending
+
+Index: vlc-2.2.1/configure.ac
+===================================================================
+--- vlc-2.2.1.orig/configure.ac
++++ vlc-2.2.1/configure.ac
+@@ -4017,25 +4017,19 @@ PKG_ENABLE_MODULES_VLC([LIBXML2], [xml],
+ dnl
+ dnl libgcrypt
+ dnl
++GCRYPT_LIBVER=1
++GCRYPT_REQ=1.1.94
+ AC_ARG_ENABLE(libgcrypt,
+   [  --disable-libgcrypt     gcrypt support (default enabled)])
+ AS_IF([test "${enable_libgcrypt}" != "no"], [
+-  AC_CHECK_DECL([GCRYCTL_SET_THREAD_CBS], [
+-    libgcrypt-config --version >/dev/null || \
+-        AC_MSG_ERROR([gcrypt.h present but libgcrypt-config could not be found])
+-    AC_CHECK_LIB(gcrypt, gcry_control, [
+-      have_libgcrypt="yes"
+-      GCRYPT_CFLAGS="`libgcrypt-config --cflags`"
+-      GCRYPT_LIBS="`libgcrypt-config --libs`"
+-    ], [
+-      AC_MSG_ERROR([libgcrypt not found. Install libgcrypt or pass --disable-libgcrypt.])
+-    ], [`libgcrypt-config --libs`])
+-  ], [
+-    AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
+-  ], [#include <gcrypt.h>]
+-  )
++      AM_PATH_LIBGCRYPT($GCRYPT_LIBVER:$GCRYPT_REQ,
++      [
++          GCRYPT_CFLAGS="$LIBGCRYPT_CFLAGS"
++          GCRYPT_LIBS="$LIBGCRYPT_LIBS"
++      ],[
++          AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or use --disable-libgcrypt. Have a nice day.])
++      ])
+ ])
+-
+ AC_SUBST(GCRYPT_CFLAGS)
+ AC_SUBST(GCRYPT_LIBS)
+ AM_CONDITIONAL([HAVE_GCRYPT], [test "${have_libgcrypt}" = "yes"])
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
new file mode 100644
index 0000000..53df1c6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
@@ -0,0 +1,19 @@
+* modules/gui/qt4/Makefile.am not B!=S friendly
+* Simple solution to missing directories in ${B}
+
+Upstream status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/gui/qt4/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/gui/qt4/Makefile.am
++++ vlc-2.2.1/modules/gui/qt4/Makefile.am
+@@ -127,6 +127,7 @@ moc_verbose_0 = @echo "  MOC   " $@;
+ moc_verbose__0 = $(moc_verbose_0)
+ 
+ .hpp.moc.cpp:
++	[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ 	$(moc_verbose)$(MOC) $(MOC_CPPFLAGS) -o $@ $<
+ 
+ # These MOC files depend on the configure settings:
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
new file mode 100644
index 0000000..2d84ffd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
@@ -0,0 +1,17 @@
+* Also look for postprocess.h under libpostproc/
+
+Upstream-status: Pending
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -2444,7 +2444,7 @@ then
+       VLC_SAVE_FLAGS
+       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
+       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
+-      AC_CHECK_HEADERS(postproc/postprocess.h)
++      AC_CHECK_HEADERS(postproc/postprocess.h,[],[AC_CHECK_HEADERS(libpostproc/postprocess.h)])
+       VLC_ADD_PLUGIN([postproc])
+       VLC_ADD_LIBS([postproc],[$POSTPROC_LIBS $AVUTIL_LIBS])
+       VLC_ADD_CFLAGS([postproc],[$POSTPROC_CFLAGS $AVUTIL_CFLAGS])
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
new file mode 100644
index 0000000..950c09b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
@@ -0,0 +1,29 @@
+Recent opencv API changes break upstream filter and example.
+Make opencv explicitly configurable.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -1693,7 +1693,16 @@ PKG_ENABLE_MODULES_VLC([BLURAY], [libblu
+ dnl
+ dnl  OpenCV wrapper and example filters
+ dnl
+-PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
++AC_ARG_ENABLE(opencv,
++  [AS_HELP_STRING([--disable-opencv],
++    [disable OpenCV computer vision filter and example (default auto)])])
++if test "${enable_opencv}" != "no"
++then
++    PKG_ENABLE_MODULES_VLC([OPENCV], 
++                           [opencv_example opencv_wrapper], 
++                           [opencv > 2.0], 
++                           (OpenCV (computer vision) filter), [auto])
++fi
+ 
+ 
+ dnl
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
new file mode 100644
index 0000000..d05cf02
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
@@ -0,0 +1,19 @@
+* tremor provides libvorbisidec, use it instead of libvorbisdec
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/codec/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/codec/Makefile.am
++++ vlc-2.2.1/modules/codec/Makefile.am
+@@ -234,7 +234,7 @@ codec_LTLIBRARIES += $(LTLIBtheora)
+ libtremor_plugin_la_SOURCES = codec/vorbis.c
+ libtremor_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -DMODULE_NAME_IS_tremor
+ libtremor_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(codecdir)'
+-libtremor_plugin_la_LIBADD = -lvorbisdec -logg
++libtremor_plugin_la_LIBADD = -lvorbisidec -logg
+ EXTRA_LTLIBRARIES += libtremor_plugin.la
+ codec_LTLIBRARIES += $(LTLIBtremor)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
new file mode 100644
index 0000000..145e1ab
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
@@ -0,0 +1,279 @@
+* luaL_checkint and luaL_optint were deprecated in lua 5.3
+* replacement functions are luaL_checkinteger and luaL_optinteger
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/lua/demux.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/demux.c
++++ vlc-2.2.1/modules/lua/demux.c
+@@ -52,7 +52,7 @@ struct demux_sys_t
+ static int vlclua_demux_peek( lua_State *L )
+ {
+     demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+-    int n = luaL_checkint( L, 1 );
++    int n = luaL_checkinteger( L, 1 );
+     const uint8_t *p_peek;
+ 
+     int i_peek = stream_Peek( p_demux->s, &p_peek, n );
+@@ -67,7 +67,7 @@ static int vlclua_demux_read( lua_State
+ {
+     demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+     const uint8_t *p_read;
+-    int n = luaL_checkint( L, 1 );
++    int n = luaL_checkinteger( L, 1 );
+     int i_read = stream_Peek( p_demux->s, &p_read, n );
+ 
+     if( i_read > 0 )
+Index: vlc-2.2.1/modules/lua/libs/configuration.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/configuration.c
++++ vlc-2.2.1/modules/lua/libs/configuration.c
+@@ -84,7 +84,7 @@ static int vlclua_config_set( lua_State
+             break;
+ 
+         case VLC_VAR_INTEGER:
+-            config_PutInt( p_this, psz_name, luaL_checkint( L, 2 ) );
++            config_PutInt( p_this, psz_name, luaL_checkinteger( L, 2 ) );
+             break;
+ 
+         case VLC_VAR_BOOL:
+Index: vlc-2.2.1/modules/lua/libs/net.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/net.c
++++ vlc-2.2.1/modules/lua/libs/net.c
+@@ -202,7 +202,7 @@ static int vlclua_net_listen_tcp( lua_St
+ {
+     vlc_object_t *p_this = vlclua_get_this( L );
+     const char *psz_host = luaL_checkstring( L, 1 );
+-    int i_port = luaL_checkint( L, 2 );
++    int i_port = luaL_checkinteger( L, 2 );
+     int *pi_fd = net_ListenTCP( p_this, psz_host, i_port );
+     if( pi_fd == NULL )
+         return luaL_error( L, "Cannot listen on %s:%d", psz_host, i_port );
+@@ -274,7 +274,7 @@ static int vlclua_net_connect_tcp( lua_S
+ {
+     vlc_object_t *p_this = vlclua_get_this( L );
+     const char *psz_host = luaL_checkstring( L, 1 );
+-    int i_port = luaL_checkint( L, 2 );
++    int i_port = luaL_checkinteger( L, 2 );
+     int i_fd = net_Connect( p_this, psz_host, i_port, SOCK_STREAM, IPPROTO_TCP );
+     lua_pushinteger( L, vlclua_fd_map_safe( L, i_fd ) );
+     return 1;
+@@ -282,26 +282,26 @@ static int vlclua_net_connect_tcp( lua_S
+ 
+ static int vlclua_net_close( lua_State *L )
+ {
+-    int i_fd = luaL_checkint( L, 1 );
++    int i_fd = luaL_checkinteger( L, 1 );
+     vlclua_fd_unmap_safe( L, i_fd );
+     return 0;
+ }
+ 
+ static int vlclua_net_send( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+     size_t i_len;
+     const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+ 
+-    i_len = luaL_optint( L, 3, i_len );
++    i_len = luaL_optinteger( L, 3, i_len );
+     lua_pushinteger( L, (fd != -1) ? send( fd, psz_buffer, i_len, 0 ) : -1 );
+     return 1;
+ }
+ 
+ static int vlclua_net_recv( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+-    size_t i_len = luaL_optint( L, 2, 1 );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++    size_t i_len = luaL_optinteger( L, 2, 1 );
+     char psz_buffer[i_len];
+ 
+     ssize_t i_ret = (fd != -1) ? recv( fd, psz_buffer, i_len, 0 ) : -1;
+@@ -382,19 +382,19 @@ static int vlclua_fd_open( lua_State *L
+ #ifndef _WIN32
+ static int vlclua_fd_write( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+     size_t i_len;
+     const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+ 
+-    i_len = luaL_optint( L, 3, i_len );
++    i_len = luaL_optinteger( L, 3, i_len );
+     lua_pushinteger( L, (fd != -1) ? write( fd, psz_buffer, i_len ) : -1 );
+     return 1;
+ }
+ 
+ static int vlclua_fd_read( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+-    size_t i_len = luaL_optint( L, 2, 1 );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++    size_t i_len = luaL_optinteger( L, 2, 1 );
+     char psz_buffer[i_len];
+ 
+     ssize_t i_ret = (fd != -1) ? read( fd, psz_buffer, i_len ) : -1;
+Index: vlc-2.2.1/modules/lua/libs/osd.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/osd.c
++++ vlc-2.2.1/modules/lua/libs/osd.c
+@@ -67,7 +67,7 @@ static int vlclua_osd_icon( lua_State *L
+ {
+     const char *psz_icon = luaL_checkstring( L, 1 );
+     int i_icon = vlc_osd_icon_from_string( psz_icon );
+-    int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+     if( !i_icon )
+         return luaL_error( L, "\"%s\" is not a valid osd icon.", psz_icon );
+ 
+@@ -114,9 +114,9 @@ static int vlc_osd_position_from_string(
+ static int vlclua_osd_message( lua_State *L )
+ {
+     const char *psz_message = luaL_checkstring( L, 1 );
+-    int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+     const char *psz_position = luaL_optstring( L, 3, "top-right" );
+-    mtime_t duration = luaL_optint( L, 4, 1000000 );
++    mtime_t duration = luaL_optinteger( L, 4, 1000000 );
+ 
+     input_thread_t *p_input = vlclua_get_input_internal( L );
+     if( p_input )
+@@ -154,10 +154,10 @@ static int vlc_osd_slider_type_from_stri
+ 
+ static int vlclua_osd_slider( lua_State *L )
+ {
+-    int i_position = luaL_checkint( L, 1 );
++    int i_position = luaL_checkinteger( L, 1 );
+     const char *psz_type = luaL_checkstring( L, 2 );
+     int i_type = vlc_osd_slider_type_from_string( psz_type );
+-    int i_chan = luaL_optint( L, 3, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 3, SPU_DEFAULT_CHANNEL );
+     if( !i_type )
+         return luaL_error( L, "\"%s\" is not a valid slider type.",
+                            psz_type );
+@@ -198,7 +198,7 @@ static int vlclua_spu_channel_register(
+ 
+ static int vlclua_spu_channel_clear( lua_State *L )
+ {
+-    int i_chan = luaL_checkint( L, 1 );
++    int i_chan = luaL_checkinteger( L, 1 );
+     input_thread_t *p_input = vlclua_get_input_internal( L );
+     if( !p_input )
+         return luaL_error( L, "Unable to find input." );
+Index: vlc-2.2.1/modules/lua/libs/playlist.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/playlist.c
++++ vlc-2.2.1/modules/lua/libs/playlist.c
+@@ -69,7 +69,7 @@ static int vlclua_playlist_next( lua_Sta
+ 
+ static int vlclua_playlist_skip( lua_State * L )
+ {
+-    int i_skip = luaL_checkint( L, 1 );
++    int i_skip = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     playlist_Skip( p_playlist, i_skip );
+     return 0;
+@@ -127,7 +127,7 @@ static int vlclua_playlist_random( lua_S
+ 
+ static int vlclua_playlist_gotoitem( lua_State * L )
+ {
+-    int i_id = luaL_checkint( L, 1 );
++    int i_id = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+@@ -139,7 +139,7 @@ static int vlclua_playlist_gotoitem( lua
+ 
+ static int vlclua_playlist_delete( lua_State * L )
+ {
+-    int i_id = luaL_checkint( L, 1 );
++    int i_id = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id );
+@@ -155,8 +155,8 @@ static int vlclua_playlist_delete( lua_S
+ 
+ static int vlclua_playlist_move( lua_State * L )
+ {
+-    int i_item = luaL_checkint( L, 1 );
+-    int i_target = luaL_checkint( L, 2 );
++    int i_item = luaL_checkinteger( L, 1 );
++    int i_target = luaL_checkinteger( L, 2 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item );
+Index: vlc-2.2.1/modules/lua/libs/stream.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/stream.c
++++ vlc-2.2.1/modules/lua/libs/stream.c
+@@ -101,7 +101,7 @@ static int vlclua_stream_read( lua_State
+ {
+     int i_read;
+     stream_t **pp_stream = (stream_t **)luaL_checkudata( L, 1, "stream" );
+-    int n = luaL_checkint( L, 2 );
++    int n = luaL_checkinteger( L, 2 );
+     uint8_t *p_read = malloc( n );
+     if( !p_read ) return vlclua_error( L );
+ 
+Index: vlc-2.2.1/modules/lua/libs/variables.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/variables.c
++++ vlc-2.2.1/modules/lua/libs/variables.c
+@@ -103,7 +103,7 @@ static int vlclua_tovalue( lua_State *L,
+             val->b_bool = luaL_checkboolean( L, -1 );
+             break;
+         case VLC_VAR_INTEGER:
+-            val->i_int = luaL_checkint( L, -1 );
++            val->i_int = luaL_checkinteger( L, -1 );
+             break;
+         case VLC_VAR_STRING:
+             val->psz_string = (char*)luaL_checkstring( L, -1 ); /* XXX: Beware, this only stays valid as long as (L,-1) stays in the stack */
+Index: vlc-2.2.1/modules/lua/libs/volume.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/volume.c
++++ vlc-2.2.1/modules/lua/libs/volume.c
+@@ -48,7 +48,7 @@
+ static int vlclua_volume_set( lua_State *L )
+ {
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+-    int i_volume = luaL_checkint( L, 1 );
++    int i_volume = luaL_checkinteger( L, 1 );
+     if( i_volume < 0 )
+         i_volume = 0;
+     int i_ret = playlist_VolumeSet( p_this, i_volume/(float)AOUT_VOLUME_DEFAULT );
+@@ -68,7 +68,7 @@ static int vlclua_volume_up( lua_State *
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+     float volume;
+ 
+-    playlist_VolumeUp( p_this, luaL_optint( L, 1, 1 ), &volume );
++    playlist_VolumeUp( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+     lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+     return 1;
+ }
+@@ -78,7 +78,7 @@ static int vlclua_volume_down( lua_State
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+     float volume;
+ 
+-    playlist_VolumeDown( p_this, luaL_optint( L, 1, 1 ), &volume );
++    playlist_VolumeDown( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+     lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+     return 1;
+ }
+Index: vlc-2.2.1/modules/lua/libs/win.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/win.c
++++ vlc-2.2.1/modules/lua/libs/win.c
+@@ -123,7 +123,7 @@ static int vlclua_console_init( lua_Stat
+ 
+ static int vlclua_console_wait( lua_State *L )
+ {
+-    int i_timeout = luaL_optint( L, 1, 0 );
++    int i_timeout = luaL_optinteger( L, 1, 0 );
+     DWORD status = WaitForSingleObject( GetConsole( L ), i_timeout );
+     lua_pushboolean( L, status == WAIT_OBJECT_0 );
+     return 1;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
new file mode 100644
index 0000000..cb3ba71
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
@@ -0,0 +1,293 @@
+From 427732a379893491eac27aeadff0e0b3e252d158 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 08:19:00 +0200
+Subject: [PATCH] Avcodec/swscale: use AV_PIX_FMT consistently
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit faa7bd357b1f9e07a6ffbc451a188773fad7a275)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+
+Conflicts:
+	modules/codec/avcodec/chroma.c
+	modules/codec/avcodec/video.c
+---
+ modules/codec/avcodec/chroma.c | 104 ++++++++++++++++++++---------------------
+ modules/codec/avcodec/video.c  |  10 ++--
+ modules/video_chroma/swscale.c |  28 +++++------
+ 3 files changed, 71 insertions(+), 71 deletions(-)
+
+diff --git a/modules/codec/avcodec/chroma.c b/modules/codec/avcodec/chroma.c
+index 393364b..c31f93d 100644
+--- a/modules/codec/avcodec/chroma.c
++++ b/modules/codec/avcodec/chroma.c
+@@ -62,77 +62,77 @@ static const struct
+ } chroma_table[] =
+ {
+     /* Planar YUV formats */
+-    {VLC_CODEC_I444, PIX_FMT_YUV444P, 0, 0, 0 },
+-    {VLC_CODEC_J444, PIX_FMT_YUVJ444P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I440, PIX_FMT_YUV440P, 0, 0, 0 },
+-    {VLC_CODEC_J440, PIX_FMT_YUVJ440P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I422, PIX_FMT_YUV422P, 0, 0, 0 },
+-    {VLC_CODEC_J422, PIX_FMT_YUVJ422P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I420, PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_CODEC_YV12, PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_FOURCC('I','Y','U','V'), PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_CODEC_J420, PIX_FMT_YUVJ420P, 0, 0, 0 },
+-    {VLC_CODEC_I411, PIX_FMT_YUV411P, 0, 0, 0 },
+-    {VLC_CODEC_I410, PIX_FMT_YUV410P, 0, 0, 0 },
+-    {VLC_FOURCC('Y','V','U','9'), PIX_FMT_YUV410P, 0, 0, 0 },
+-
+-    {VLC_FOURCC('N','V','1','2'), PIX_FMT_NV12, 0, 0, 0 },
+-    {VLC_FOURCC('N','V','2','1'), PIX_FMT_NV21, 0, 0, 0 },
+-
+-    {VLC_CODEC_I420_9L, PIX_FMT_YUV420P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I420_9B, PIX_FMT_YUV420P9BE, 0, 0, 0 },
+-    {VLC_CODEC_I420_10L, PIX_FMT_YUV420P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I420_10B, PIX_FMT_YUV420P10BE, 0, 0, 0 },
++    {VLC_CODEC_I444, AV_PIX_FMT_YUV444P, 0, 0, 0 },
++    {VLC_CODEC_J444, AV_PIX_FMT_YUVJ444P, 0, 0, 0 },
++
++    {VLC_CODEC_I440, AV_PIX_FMT_YUV440P, 0, 0, 0 },
++    {VLC_CODEC_J440, AV_PIX_FMT_YUVJ440P, 0, 0, 0 },
++
++    {VLC_CODEC_I422, AV_PIX_FMT_YUV422P, 0, 0, 0 },
++    {VLC_CODEC_J422, AV_PIX_FMT_YUVJ422P, 0, 0, 0 },
++
++    {VLC_CODEC_I420, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_CODEC_YV12, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_FOURCC('I','Y','U','V'), AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_CODEC_J420, AV_PIX_FMT_YUVJ420P, 0, 0, 0 },
++    {VLC_CODEC_I411, AV_PIX_FMT_YUV411P, 0, 0, 0 },
++    {VLC_CODEC_I410, AV_PIX_FMT_YUV410P, 0, 0, 0 },
++    {VLC_FOURCC('Y','V','U','9'), AV_PIX_FMT_YUV410P, 0, 0, 0 },
++
++    {VLC_FOURCC('N','V','1','2'), AV_PIX_FMT_NV12, 0, 0, 0 },
++    {VLC_FOURCC('N','V','2','1'), AV_PIX_FMT_NV21, 0, 0, 0 },
++
++    {VLC_CODEC_I420_9L, AV_PIX_FMT_YUV420P9LE, 0, 0, 0 },
++    {VLC_CODEC_I420_9B, AV_PIX_FMT_YUV420P9BE, 0, 0, 0 },
++    {VLC_CODEC_I420_10L, AV_PIX_FMT_YUV420P10LE, 0, 0, 0 },
++    {VLC_CODEC_I420_10B, AV_PIX_FMT_YUV420P10BE, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,13,0)
+-    {VLC_CODEC_I422_9L, PIX_FMT_YUV422P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I422_9B, PIX_FMT_YUV422P9BE, 0, 0, 0 },
++    {VLC_CODEC_I422_9L, AV_PIX_FMT_YUV422P9LE, 0, 0, 0 },
++    {VLC_CODEC_I422_9B, AV_PIX_FMT_YUV422P9BE, 0, 0, 0 },
+ #endif
+-    {VLC_CODEC_I422_10L, PIX_FMT_YUV422P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I422_10B, PIX_FMT_YUV422P10BE, 0, 0, 0 },
++    {VLC_CODEC_I422_10L, AV_PIX_FMT_YUV422P10LE, 0, 0, 0 },
++    {VLC_CODEC_I422_10B, AV_PIX_FMT_YUV422P10BE, 0, 0, 0 },
+ 
+-    {VLC_CODEC_YUV420A, PIX_FMT_YUVA420P, 0, 0, 0 },
++    {VLC_CODEC_YUV420A, AV_PIX_FMT_YUVA420P, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_CHECK( 51, 45, 0, 74, 100 )
+     {VLC_CODEC_YUV422A, AV_PIX_FMT_YUVA422P, 0, 0, 0 },
+ #endif
+ 
+-    {VLC_CODEC_I444_9L, PIX_FMT_YUV444P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_9B, PIX_FMT_YUV444P9BE, 0, 0, 0 },
+-    {VLC_CODEC_I444_10L, PIX_FMT_YUV444P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_10B, PIX_FMT_YUV444P10BE, 0, 0, 0 },
+-    {VLC_CODEC_I444_16L, PIX_FMT_YUV444P16LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_16B, PIX_FMT_YUV444P16BE, 0, 0, 0 },
++    {VLC_CODEC_I444_9L, AV_PIX_FMT_YUV444P9LE, 0, 0, 0 },
++    {VLC_CODEC_I444_9B, AV_PIX_FMT_YUV444P9BE, 0, 0, 0 },
++    {VLC_CODEC_I444_10L, AV_PIX_FMT_YUV444P10LE, 0, 0, 0 },
++    {VLC_CODEC_I444_10B, AV_PIX_FMT_YUV444P10BE, 0, 0, 0 },
++    {VLC_CODEC_I444_16L, AV_PIX_FMT_YUV444P16LE, 0, 0, 0 },
++    {VLC_CODEC_I444_16B, AV_PIX_FMT_YUV444P16BE, 0, 0, 0 },
+ 
+     /* Packed YUV formats */
+-    {VLC_CODEC_YUYV, PIX_FMT_YUYV422, 0, 0, 0 },
+-    {VLC_FOURCC('Y','U','Y','V'), PIX_FMT_YUYV422, 0, 0, 0 },
+-    {VLC_CODEC_UYVY, PIX_FMT_UYVY422, 0, 0, 0 },
+-    {VLC_FOURCC('Y','4','1','1'), PIX_FMT_UYYVYY411, 0, 0, 0 },
++    {VLC_CODEC_YUYV, AV_PIX_FMT_YUYV422, 0, 0, 0 },
++    {VLC_FOURCC('Y','U','Y','V'), AV_PIX_FMT_YUYV422, 0, 0, 0 },
++    {VLC_CODEC_UYVY, AV_PIX_FMT_UYVY422, 0, 0, 0 },
++    {VLC_FOURCC('Y','4','1','1'), AV_PIX_FMT_UYYVYY411, 0, 0, 0 },
+ 
+     /* Packed RGB formats */
+-    VLC_RGB( VLC_FOURCC('R','G','B','4'), PIX_FMT_RGB4, PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
+-    VLC_RGB( VLC_FOURCC('R','G','B','8'), PIX_FMT_RGB8, PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
++    VLC_RGB( VLC_FOURCC('R','G','B','4'), AV_PIX_FMT_RGB4, AV_PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
++    VLC_RGB( VLC_FOURCC('R','G','B','8'), AV_PIX_FMT_RGB8, AV_PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
+ 
+-    VLC_RGB( VLC_CODEC_RGB15, PIX_FMT_RGB555, PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
+-    VLC_RGB( VLC_CODEC_RGB16, PIX_FMT_RGB565, PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
+-    VLC_RGB( VLC_CODEC_RGB24, PIX_FMT_BGR24, PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
++    VLC_RGB( VLC_CODEC_RGB15, AV_PIX_FMT_RGB555, AV_PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
++    VLC_RGB( VLC_CODEC_RGB16, AV_PIX_FMT_RGB565, AV_PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
++    VLC_RGB( VLC_CODEC_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
+ 
+-    VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32, PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
+-    VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32_1, PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
++    VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32, AV_PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
++    VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32_1, AV_PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
+ 
+ #ifdef AV_PIX_FMT_0BGR32
+     VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0BGR32, AV_PIX_FMT_0RGB32, 0x000000ff, 0x0000ff00, 0x00ff0000 )
+ #endif
+ 
+-    {VLC_CODEC_RGBA, PIX_FMT_RGBA, 0, 0, 0 },
+-    {VLC_CODEC_ARGB, PIX_FMT_ARGB, 0, 0, 0 },
+-    {VLC_CODEC_BGRA, PIX_FMT_BGRA, 0, 0, 0 },
+-    {VLC_CODEC_GREY, PIX_FMT_GRAY8, 0, 0, 0},
++    {VLC_CODEC_RGBA, AV_PIX_FMT_RGBA, 0, 0, 0 },
++    {VLC_CODEC_ARGB, AV_PIX_FMT_ARGB, 0, 0, 0 },
++    {VLC_CODEC_BGRA, AV_PIX_FMT_BGRA, 0, 0, 0 },
++    {VLC_CODEC_GREY, AV_PIX_FMT_GRAY8, 0, 0, 0},
+ 
+      /* Paletized RGB */
+-    {VLC_CODEC_RGBP, PIX_FMT_PAL8, 0, 0, 0},
++    {VLC_CODEC_RGBP, AV_PIX_FMT_PAL8, 0, 0, 0},
+ 
+ #if LIBAVUTIL_VERSION_CHECK(51, 42, 0, 74,100)
+     {VLC_CODEC_GBR_PLANAR, AV_PIX_FMT_GBRP, 0, 0, 0 },
+@@ -201,5 +201,5 @@ int FindFfmpegChroma( vlc_fourcc_t fourcc )
+     for( int i = 0; chroma_table[i].i_chroma != 0; i++ )
+         if( chroma_table[i].i_chroma == fourcc )
+             return chroma_table[i].i_chroma_id;
+-    return PIX_FMT_NONE;
++    return AV_PIX_FMT_NONE;
+ }
+diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
+index c115db9..ae600e8 100644
+--- a/modules/codec/avcodec/video.c
++++ b/modules/codec/avcodec/video.c
+@@ -1004,7 +1004,7 @@ static picture_t *lavc_dr_GetFrame(struct AVCodecContext *ctx,
+     if (GetVlcChroma(&dec->fmt_out.video, ctx->pix_fmt) != VLC_SUCCESS)
+         return NULL;
+     dec->fmt_out.i_codec = dec->fmt_out.video.i_chroma;
+-    if (ctx->pix_fmt == PIX_FMT_PAL8)
++    if (ctx->pix_fmt == AV_PIX_FMT_PAL8)
+         return NULL;
+ 
+     int width = frame->width;
+@@ -1180,7 +1180,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+     if (GetVlcChroma(&p_dec->fmt_out.video, p_context->pix_fmt) != VLC_SUCCESS)
+         goto no_dr;
+ 
+-    if (p_context->pix_fmt == PIX_FMT_PAL8)
++    if (p_context->pix_fmt == AV_PIX_FMT_PAL8)
+         goto no_dr;
+ 
+     p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
+@@ -1215,7 +1215,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+             goto no_dr;
+     }
+ 
+-    if( p_context->pix_fmt == PIX_FMT_YUV422P )
++    if( p_context->pix_fmt == AV_PIX_FMT_YUV422P )
+     {
+         if( 2 * p_pic->p[1].i_pitch != p_pic->p[0].i_pitch ||
+             2 * p_pic->p[2].i_pitch != p_pic->p[0].i_pitch )
+@@ -1325,7 +1325,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+ 
+     /* Enumerate available formats */
+     bool can_hwaccel = false;
+-    for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++    for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+     {
+         const AVPixFmtDescriptor *dsc = av_pix_fmt_desc_get(pi_fmt[i]);
+         if (dsc == NULL)
+@@ -1352,7 +1352,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+     if( p_va == NULL )
+         goto end;
+ 
+-    for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++    for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+     {
+         if( p_va->pix_fmt != pi_fmt[i] )
+             continue;
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 569e0f5..4e0ecf1 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -257,35 +257,35 @@ static void FixParameters( int *pi_fmt, bool *pb_has_a, bool *pb_swap_uv, vlc_fo
+     switch( fmt )
+     {
+     case VLC_CODEC_YUV422A:
+-        *pi_fmt = PIX_FMT_YUV422P;
++        *pi_fmt = AV_PIX_FMT_YUV422P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YUV420A:
+-        *pi_fmt = PIX_FMT_YUV420P;
++        *pi_fmt = AV_PIX_FMT_YUV420P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YUVA:
+-        *pi_fmt = PIX_FMT_YUV444P;
++        *pi_fmt = AV_PIX_FMT_YUV444P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_RGBA:
+-        *pi_fmt = PIX_FMT_BGR32;
++        *pi_fmt = AV_PIX_FMT_BGR32;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_ARGB:
+-        *pi_fmt = PIX_FMT_BGR32_1;
++        *pi_fmt = AV_PIX_FMT_BGR32_1;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_BGRA:
+-        *pi_fmt = PIX_FMT_RGB32;
++        *pi_fmt = AV_PIX_FMT_RGB32;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YV12:
+-        *pi_fmt = PIX_FMT_YUV420P;
++        *pi_fmt = AV_PIX_FMT_YUV420P;
+         *pb_swap_uv = true;
+         break;
+     case VLC_CODEC_YV9:
+-        *pi_fmt = PIX_FMT_YUV410P;
++        *pi_fmt = AV_PIX_FMT_YUV410P;
+         *pb_swap_uv = true;
+         break;
+     default:
+@@ -314,7 +314,7 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+     {
+         if( p_fmti->i_chroma == VLC_CODEC_YUVP && ALLOW_YUVP )
+         {
+-            i_fmti = i_fmto = PIX_FMT_GRAY8;
++            i_fmti = i_fmto = AV_PIX_FMT_GRAY8;
+             i_sws_flags = SWS_POINT;
+         }
+     }
+@@ -327,9 +327,9 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+      * Without SWS_ACCURATE_RND the quality is really bad for some conversions */
+     switch( i_fmto )
+     {
+-    case PIX_FMT_ARGB:
+-    case PIX_FMT_RGBA:
+-    case PIX_FMT_ABGR:
++    case AV_PIX_FMT_ARGB:
++    case AV_PIX_FMT_RGBA:
++    case AV_PIX_FMT_ABGR:
+         i_sws_flags |= SWS_ACCURATE_RND;
+         break;
+     }
+@@ -403,8 +403,8 @@ static int Init( filter_t *p_filter )
+     const unsigned i_fmto_visible_width = p_fmto->i_visible_width * p_sys->i_extend_factor;
+     for( int n = 0; n < (cfg.b_has_a ? 2 : 1); n++ )
+     {
+-        const int i_fmti = n == 0 ? cfg.i_fmti : PIX_FMT_GRAY8;
+-        const int i_fmto = n == 0 ? cfg.i_fmto : PIX_FMT_GRAY8;
++        const int i_fmti = n == 0 ? cfg.i_fmti : AV_PIX_FMT_GRAY8;
++        const int i_fmto = n == 0 ? cfg.i_fmto : AV_PIX_FMT_GRAY8;
+         struct SwsContext *ctx;
+ 
+         ctx = sws_getContext( i_fmti_visible_width, p_fmti->i_visible_height, i_fmti,
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
new file mode 100644
index 0000000..56744e7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
@@ -0,0 +1,45 @@
+From 6fa8a4a9bb64ff34328aae46acd600f8502b2c05 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 09:07:39 +0200
+Subject: [PATCH] SWSCALE: fix compilation with 4.x
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit 2b23857c68622edda76b72b74aeb3d943ee277c9)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+---
+ modules/video_chroma/swscale.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 4e0ecf1..26d0d6f 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -36,6 +36,7 @@
+ #include <vlc_cpu.h>
+ 
+ #include <libswscale/swscale.h>
++#include <libswscale/version.h>
+ 
+ #ifdef __APPLE__
+ # include <TargetConditionals.h>
+@@ -235,6 +236,7 @@ static int GetSwsCpuMask(void)
+ {
+     int i_sws_cpu = 0;
+ 
++#if LIBSWSCALE_VERSION_MAJOR < 4
+ #if defined(__i386__) || defined(__x86_64__)
+     if( vlc_CPU_MMX() )
+         i_sws_cpu |= SWS_CPU_CAPS_MMX;
+@@ -248,6 +250,7 @@ static int GetSwsCpuMask(void)
+     if( vlc_CPU_ALTIVEC() )
+         i_sws_cpu |= SWS_CPU_CAPS_ALTIVEC;
+ #endif
++#endif
+ 
+     return i_sws_cpu;
+ }
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
new file mode 100644
index 0000000..b5be04c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
@@ -0,0 +1,19 @@
+require ${BPN}.inc
+
+# work around build failure
+EXTRA_OECONF += " --enable-libxml2=no"
+
+SRC_URI += "file://0001-enable-subdir-objects.patch \
+            file://0002-glibc-does-not-provide-strlcpy.patch \
+            file://0003-use-am-path-libgcrypt.patch \
+            file://0004-modules-gui-qt4-out-of-tree-build.patch \
+            file://0005-libpostproc-header-check.patch \
+            file://0006-make-opencv-configurable.patch \
+            file://0007-use-vorbisidec.patch \
+            file://0008-fix-luaL-checkint.patch \
+            file://0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch \
+            file://0010-SWSCALE-fix-compilation-with-4.x.patch \
+"
+
+SRC_URI[md5sum] = "f98d60f0f59ef72b6e3407f2ff09bda6"
+SRC_URI[sha256sum] = "9ad23128be16f9b40ed772961272cb0748ed8e4aa1bc79c129e589feebea5fb5"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
new file mode 100644
index 0000000..b623dbf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
@@ -0,0 +1,49 @@
+Upstream-Status: Backport
+
+Backport patch to fix CVE-2015-6749 from:
+
+https://trac.xiph.org/ticket/2212
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 04815d3e1bfae3a6cdfb2c25358a5a72b61299f7 Mon Sep 17 00:00:00 2001
+From: Mark Harris <mark.hsj@gmail.com>
+Date: Sun, 30 Aug 2015 05:54:46 -0700
+Subject: [PATCH] oggenc: Fix large alloca on bad AIFF input
+
+Fixes #2212
+---
+ oggenc/audio.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/oggenc/audio.c b/oggenc/audio.c
+index 477da8c..4921fb9 100644
+--- a/oggenc/audio.c
++++ b/oggenc/audio.c
+@@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] =
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ {
+     int aifc; /* AIFC or AIFF? */
+-    unsigned int len;
+-    unsigned char *buffer;
++    unsigned int len, readlen;
++    unsigned char buffer[22];
+     unsigned char buf2[8];
+     aiff_fmt format;
+     aifffile *aiff = malloc(sizeof(aifffile));
+@@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+         return 0; /* Weird common chunk */
+     }
+ 
+-    buffer = alloca(len);
+-
+-    if(fread(buffer,1,len,in) < len)
++    readlen = len < sizeof(buffer) ? len : sizeof(buffer);
++    if(fread(buffer,1,readlen,in) < readlen ||
++       (len > readlen && !seek_forward(in, len-readlen)))
+     {
+         fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
+         return 0;
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
new file mode 100644
index 0000000..2683555
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Vorbis Tools"
+DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
+that is free of intellectual property restrictions. vorbis-tools \
+include some command line applications to use the libraries."
+HOMEPAGE = "http://www.vorbis.com/"
+BUGTRACKER = "https://trac.xiph.org"
+SECTION = "multimedia"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libogg libvorbis curl libao"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/${BP}.tar.gz \
+           file://0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch \
+          "
+
+SRC_URI[md5sum] = "567e0fb8d321b2cd7124f8208b8b90e6"
+SRC_URI[sha256sum] = "a389395baa43f8e5a796c99daf62397e435a7e73531c9f44d9084055a05d22bc"
+
+inherit autotools pkgconfig gettext
+
+PACKAGECONFIG ??= "flac"
+PACKAGECONFIG[flac] = ",--without-flac,flac,libflac"
+PACKAGECONFIG[speex] = ",--without-speex,speex,speex"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
new file mode 100644
index 0000000..44f135a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
@@ -0,0 +1,7 @@
+require libmediaart.inc
+
+SRC_URI = "${GNOME_MIRROR}/libmediaart/1.9/libmediaart-${PV}.tar.xz"
+SRC_URI[md5sum] = "0b65d64398d2f3dff89534c9dfffab4f"
+SRC_URI[sha256sum] = "94668adb29d4dc3115b0fd105942ebd5ca6f5f9dbb2afa8a191a73a747dd506f"
+
+S = "${WORKDIR}/libmediaart-${PV}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
new file mode 100644
index 0000000..57dca9c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Library tasked with managing, extracting and handling media art caches"
+
+LICENSE = "LGPLv2+ & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
+                    file://libmediaart/extract.c;endline=18;md5=dff2b6328ab067b5baadc135f9876c36 \
+                    file://tests/mediaarttest.c;endline=18;md5=067106eaa1f7a9d918759a096667f18e"
+
+DEPENDS = "glib-2.0 gdk-pixbuf"
+
+GNOME_COMPRESS_TYPE = "xz"
+
+inherit gnomebase gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-qt --enable-gdkpixbuf"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
new file mode 100644
index 0000000..eb45974
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
@@ -0,0 +1,4 @@
+require libmediaart.inc
+
+SRC_URI[archive.md5sum] = "1a44933d4cd0064e3c76d8d0ddacddc9"
+SRC_URI[archive.sha256sum] = "3a9dffcad862aed7c0921579b93080d694b8a66f3676bfee8037867f653a1cd3"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
new file mode 100644
index 0000000..aff1cb1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
@@ -0,0 +1,41 @@
+Upstream-Status: Inappropriate [configuration]
+
+From 1921498bcc06408e8b051a3a9e9ce4182998f748 Mon Sep 17 00:00:00 2001
+From: David Schleef <ds@schleef.org>
+Date: Fri, 8 Apr 2011 10:05:49 -0700
+Subject: [PATCH 10/10] Fix --enable-vfp flag
+
+Patch from Christophe Lyon, fixes #36084.
+---
+ configure.ac           |    4 ++--
+ liboil/arm/Makefile.am |    1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 98c81fb..407d88c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -188,8 +188,8 @@ fi
+ AC_ARG_ENABLE(vfp,
+   AC_HELP_STRING([--enable-vfp],[compile with Vector Floating-point unit support]),
+   enable_vfp=$enableval,enable_vfp=yes)
+-if test "x$enable-vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
+-  AS_COMPILER_FLAG(["-Wa,-mfpu=vfp"],
++if test "x$enable_vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
++  AS_COMPILER_FLAG(["-mfpu=vfp"],
+     [VFP_CFLAGS="$VFP_CFLAGS -mfpu=vfp"],
+     true)
+   #AS_COMPILER_FLAG(["-Wa,-mfloat-abi=softfp"],
+diff --git a/liboil/arm/Makefile.am b/liboil/arm/Makefile.am
+index ead08ed..cd8d9fa 100644
+--- a/liboil/arm/Makefile.am
++++ b/liboil/arm/Makefile.am
+@@ -6,4 +6,5 @@ libarm_la_SOURCES = \
+ 	math_vfp_asm.S
+ 
+ libarm_la_CFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
++libarm_la_CCASFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
+ 
+-- 
+1.7.6
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
new file mode 100644
index 0000000..c8e3c1f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
@@ -0,0 +1,19 @@
+Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=31358
+
+configure: fix whitelisting of x86_64 unaligned memory access
+
+Fix typo in whitelist so cross-compile works for x86_64.
+
+Upstream-Status: Inappropriate [configuration]
+
+--- liboil-0.3.17/m4/as-unaligned-access.m4.orig	2009-02-26 14:40:08.000000000 -0500
++++ liboil-0.3.17/m4/as-unaligned-access.m4	2010-11-03 12:19:55.000000000 -0400
+@@ -9,7 +9,7 @@
+         _AS_ECHO_N([(blacklisted) ])
+         as_cv_unaligned_access=no
+ 	;;
+-      i?86*|x86_64|amd64|powerpc*|m68k*|cris*)
++      i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*)
+         _AS_ECHO_N([(whitelisted) ])
+         as_cv_unaligned_access=yes
+ 	;;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
new file mode 100644
index 0000000..473380e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
@@ -0,0 +1,222 @@
+Upstream-Status: Pending
+
+Make the assembly syntax compatible with x32 gcc. Othewise x32 gcc throws errors.
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
+2011/12/01
+
+
+Index: liboil-0.3.17/liboil/amd64/wavelet.c
+===================================================================
+--- liboil-0.3.17.orig/liboil/amd64/wavelet.c
++++ liboil-0.3.17/liboil/amd64/wavelet.c
+@@ -21,14 +21,14 @@ deinterleave2_asm (int16_t *d1, int16_t 
+   asm volatile ("\n"
+       "  sub $2, %%rcx\n"
+       "1:\n"
+-      "  movw (%1,%%rcx,4), %%ax\n"
+-      "  movw %%ax, (%0,%%rcx,2)\n"
+-      "  movw 2(%1,%%rcx,4), %%ax\n"
+-      "  movw %%ax, (%2,%%rcx,2)\n"
+-      "  movw 4(%1,%%rcx,4), %%ax\n"
+-      "  movw %%ax, 2(%0,%%rcx,2)\n"
+-      "  movw 6(%1,%%rcx,4), %%ax\n"
+-      "  movw %%ax, 2(%2,%%rcx,2)\n"
++      "  movw (%q1,%%rcx,4), %%ax\n"
++      "  movw %%ax, (%q0,%%rcx,2)\n"
++      "  movw 2(%q1,%%rcx,4), %%ax\n"
++      "  movw %%ax, (%q2,%%rcx,2)\n"
++      "  movw 4(%q1,%%rcx,4), %%ax\n"
++      "  movw %%ax, 2(%q0,%%rcx,2)\n"
++      "  movw 6(%q1,%%rcx,4), %%ax\n"
++      "  movw %%ax, 2(%q2,%%rcx,2)\n"
+       "  sub $2, %%rcx\n"
+       "  jge 1b\n"
+       : "+r" (d1), "+r" (s_2xn), "+r" (d2), "+c" (n)
+@@ -53,20 +53,20 @@ deinterleave2_mmx (int16_t *d1, int16_t 
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%1,%%rcx,4), %%mm0\n"
+-      "  movq 8(%1,%%rcx,4), %%mm1\n"
++      "  movq (%q1,%%rcx,4), %%mm0\n"
++      "  movq 8(%q1,%%rcx,4), %%mm1\n"
+       "  pslld $16, %%mm0\n"
+       "  pslld $16, %%mm1\n"
+       "  psrad $16, %%mm0\n"
+       "  psrad $16, %%mm1\n"
+       "  packssdw %%mm1, %%mm0\n"
+-      "  movq %%mm0, (%0,%%rcx,2)\n"
+-      "  movq (%1,%%rcx,4), %%mm0\n"
+-      "  movq 8(%1,%%rcx,4), %%mm1\n"
++      "  movq %%mm0, (%q0,%%rcx,2)\n"
++      "  movq (%q1,%%rcx,4), %%mm0\n"
++      "  movq 8(%q1,%%rcx,4), %%mm1\n"
+       "  psrad $16, %%mm0\n"
+       "  psrad $16, %%mm1\n"
+       "  packssdw %%mm1, %%mm0\n"
+-      "  movq %%mm0, (%2,%%rcx,2)\n"
++      "  movq %%mm0, (%q2,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %3, %%ecx\n"
+       "  jl 1b\n"
+@@ -93,10 +93,10 @@ deinterleave2_mmx_2 (int16_t *d1, int16_
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  pshufw $0xd8, (%1,%%rcx,4), %%mm0\n"
+-      "  movd %%mm0, (%0,%%rcx,2)\n"
+-      "  pshufw $0x8d, (%1,%%rcx,4), %%mm0\n"
+-      "  movd %%mm0, (%2,%%rcx,2)\n"
++      "  pshufw $0xd8, (%q1,%%rcx,4), %%mm0\n"
++      "  movd %%mm0, (%q0,%%rcx,2)\n"
++      "  pshufw $0x8d, (%q1,%%rcx,4), %%mm0\n"
++      "  movd %%mm0, (%q2,%%rcx,2)\n"
+       "  add $2, %%rcx\n"
+       "  cmp %3, %%ecx\n"
+       "  jl 1b\n"
+@@ -123,16 +123,16 @@ deinterleave2_mmx_3 (int16_t *d1, int16_
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%1,%%rcx,4), %%mm1\n"
+-      "  movq (%1,%%rcx,4), %%mm2\n"
+-      "  movq 8(%1,%%rcx,4), %%mm0\n"
++      "  movq (%q1,%%rcx,4), %%mm1\n"
++      "  movq (%q1,%%rcx,4), %%mm2\n"
++      "  movq 8(%q1,%%rcx,4), %%mm0\n"
+       "  punpcklwd %%mm0, %%mm1\n"
+       "  punpckhwd %%mm0, %%mm2\n"
+       "  movq %%mm1, %%mm0\n"
+       "  punpcklwd %%mm2, %%mm0\n"
+       "  punpckhwd %%mm2, %%mm1\n"
+-      "  movq %%mm0, (%0,%%rcx,2)\n"
+-      "  movq %%mm1, (%2,%%rcx,2)\n"
++      "  movq %%mm0, (%q0,%%rcx,2)\n"
++      "  movq %%mm1, (%q2,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %3, %%ecx\n"
+       "  jl 1b\n"
+@@ -159,26 +159,26 @@ deinterleave2_mmx_4 (int16_t *d1, int16_
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%1,%%rcx,4), %%mm1\n"
++      "  movq (%q1,%%rcx,4), %%mm1\n"
+       "  movq %%mm1, %%mm2\n"
+-      "  movq 8(%1,%%rcx,4), %%mm0\n"
+-      "   movq 16(%1,%%rcx,4), %%mm5\n"
++      "  movq 8(%q1,%%rcx,4), %%mm0\n"
++      "   movq 16(%q1,%%rcx,4), %%mm5\n"
+       "  punpcklwd %%mm0, %%mm1\n"
+       "   movq %%mm5, %%mm6\n"
+       "  punpckhwd %%mm0, %%mm2\n"
+-      "   movq 24(%1,%%rcx,4), %%mm4\n"
++      "   movq 24(%q1,%%rcx,4), %%mm4\n"
+       "  movq %%mm1, %%mm0\n"
+       "   punpcklwd %%mm4, %%mm5\n"
+       "  punpcklwd %%mm2, %%mm0\n"
+       "   punpckhwd %%mm4, %%mm6\n"
+       "  punpckhwd %%mm2, %%mm1\n"
+       "   movq %%mm5, %%mm4\n"
+-      "  movq %%mm0, (%0,%%rcx,2)\n"
++      "  movq %%mm0, (%q0,%%rcx,2)\n"
+       "   punpcklwd %%mm6, %%mm4\n"
+-      "  movq %%mm1, (%2,%%rcx,2)\n"
++      "  movq %%mm1, (%q2,%%rcx,2)\n"
+       "   punpckhwd %%mm6, %%mm5\n"
+-      "   movq %%mm4, 8(%0,%%rcx,2)\n"
+-      "   movq %%mm5, 8(%2,%%rcx,2)\n"
++      "   movq %%mm4, 8(%q0,%%rcx,2)\n"
++      "   movq %%mm5, 8(%q2,%%rcx,2)\n"
+       "  add $8, %%rcx\n"
+       "  cmp %3, %%ecx\n"
+       "  jl 1b\n"
+@@ -252,13 +252,13 @@ interleave2_mmx (int16_t *d_2xn, int16_t
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%1,%%rcx,2), %%mm0\n"
+-      "  movq (%2,%%rcx,2), %%mm1\n"
++      "  movq (%q1,%%rcx,2), %%mm0\n"
++      "  movq (%q2,%%rcx,2), %%mm1\n"
+       "  movq %%mm0, %%mm2\n"
+       "  punpckhwd %%mm1, %%mm0\n"
+       "  punpcklwd %%mm1, %%mm2\n"
+-      "  movq %%mm2, (%0,%%rcx,4)\n"
+-      "  movq %%mm0, 8(%0,%%rcx,4)\n"
++      "  movq %%mm2, (%q0,%%rcx,4)\n"
++      "  movq %%mm0, 8(%q0,%%rcx,4)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %3, %%ecx\n"
+       "  jl 1b\n"
+@@ -285,12 +285,12 @@ lift_add_shift1_mmx (int16_t *d, int16_t
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%2,%%rcx,2), %%mm1\n"
+-      "  movq (%3,%%rcx,2), %%mm2\n"
++      "  movq (%q2,%%rcx,2), %%mm1\n"
++      "  movq (%q3,%%rcx,2), %%mm2\n"
+       "  paddw %%mm2, %%mm1\n"
+       "  psraw $1, %%mm1\n"
+-      "  paddw (%1,%%rcx,2), %%mm1\n"
+-      "  movq %%mm1, (%0,%%rcx,2)\n"
++      "  paddw (%q1,%%rcx,2), %%mm1\n"
++      "  movq %%mm1, (%q0,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %4, %%ecx\n"
+       "  jl 1b\n"
+@@ -317,13 +317,13 @@ lift_sub_shift1_mmx (int16_t *d, int16_t
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%2,%%rcx,2), %%mm1\n"
+-      "  movq (%3,%%rcx,2), %%mm2\n"
+-      "  movq (%1,%%rcx,2), %%mm0\n"
++      "  movq (%q2,%%rcx,2), %%mm1\n"
++      "  movq (%q3,%%rcx,2), %%mm2\n"
++      "  movq (%q1,%%rcx,2), %%mm0\n"
+       "  paddw %%mm2, %%mm1\n"
+       "  psraw $1, %%mm1\n"
+       "  psubw %%mm1, %%mm0\n"
+-      "  movq %%mm0, (%0,%%rcx,2)\n"
++      "  movq %%mm0, (%q0,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %4, %%ecx\n"
+       "  jl 1b\n"
+@@ -350,12 +350,12 @@ lift_add_shift2_mmx (int16_t *d, int16_t
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%2,%%rcx,2), %%mm1\n"
+-      "  movq (%3,%%rcx,2), %%mm2\n"
++      "  movq (%q2,%%rcx,2), %%mm1\n"
++      "  movq (%q3,%%rcx,2), %%mm2\n"
+       "  paddw %%mm2, %%mm1\n"
+       "  psraw $2, %%mm1\n"
+-      "  paddw (%1,%%rcx,2), %%mm1\n"
+-      "  movq %%mm1, (%0,%%rcx,2)\n"
++      "  paddw (%q1,%%rcx,2), %%mm1\n"
++      "  movq %%mm1, (%q0,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %4, %%ecx\n"
+       "  jl 1b\n"
+@@ -382,13 +382,13 @@ lift_sub_shift2_mmx (int16_t *d, int16_t
+   asm volatile ("\n"
+       "  xor %%rcx, %%rcx\n"
+       "1:\n"
+-      "  movq (%2,%%rcx,2), %%mm1\n"
+-      "  movq (%3,%%rcx,2), %%mm2\n"
+-      "  movq (%1,%%rcx,2), %%mm0\n"
++      "  movq (%q2,%%rcx,2), %%mm1\n"
++      "  movq (%q3,%%rcx,2), %%mm2\n"
++      "  movq (%q1,%%rcx,2), %%mm0\n"
+       "  paddw %%mm2, %%mm1\n"
+       "  psraw $2, %%mm1\n"
+       "  psubw %%mm1, %%mm0\n"
+-      "  movq %%mm0, (%0,%%rcx,2)\n"
++      "  movq %%mm0, (%q0,%%rcx,2)\n"
+       "  add $4, %%rcx\n"
+       "  cmp %4, %%ecx\n"
+       "  jl 1b\n"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
new file mode 100644
index 0000000..892d441
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
@@ -0,0 +1,24 @@
+Upstream-Status: Inappropriate [disable feature]
+
+--- liboil-0.3.9/liboil/liboilfunction.c.old	2006-09-18 13:03:20.000000000 +0100
++++ liboil-0.3.9/liboil/liboilfunction.c	2006-09-18 13:04:10.000000000 +0100
+@@ -345,7 +345,9 @@
+     return;
+   }
+ 
+-  test = oil_test_new (klass);
++  klass->chosen_impl = klass->reference_impl;
++  klass->func = klass->reference_impl->func;
++/*  test = oil_test_new (klass);
+   if (test == NULL) {
+     OIL_ERROR ("failed to test function class %s", klass->name);
+     return;
+@@ -385,7 +387,7 @@
+   klass->chosen_impl = min_impl;
+   klass->func = min_impl->func;
+ 
+-  oil_test_free (test);
++  oil_test_free (test);*/
+ }
+ 
+ static void
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
new file mode 100644
index 0000000..03b7785
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library of simple functions optimized for various CPUs"
+HOMEPAGE = "http://liboil.freedesktop.org/"
+BUGTRACKER = "https://bugs.freedesktop.org/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ad80780d9c5205d63481a0184e199a15 \
+                    file://liboil/liboil.h;endline=28;md5=95c794a66b88800d949fed17e437d9fb \
+                    file://liboil/liboilcpu.c;endline=28;md5=89da69a61d88eedcba066f42353fb75a \
+                    file://examples/example1.c;endline=29;md5=9d4dad9fcbbdf0441ee063f8af5170c9 \
+                    file://testsuite/trans.c;endline=29;md5=380ecd43121fe3dcc0d8d7e5984f283d"
+
+DEPENDS = "glib-2.0"
+PR = "r5"
+
+SRC_URI = "http://liboil.freedesktop.org/download/${BPN}-${PV}.tar.gz \
+           file://no-tests.patch \
+           file://fix-unaligned-whitelist.patch \
+           file://0001-Fix-enable-vfp-flag.patch \
+           file://liboil_fix_for_x32.patch \
+          "
+
+SRC_URI[md5sum] = "47dc734f82faeb2964d97771cfd2e701"
+SRC_URI[sha256sum] = "105f02079b0b50034c759db34b473ecb5704ffa20a5486b60a8b7698128bfc69"
+
+inherit autotools pkgconfig
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
new file mode 100644
index 0000000..8ee6634
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "library implementing Secure RTP (RFC 3711)"
+HOMEPAGE = "https://github.com/cisco/libsrtp"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=15bc16b9d2e305974dde47e733883714"
+
+SRC_URI = "https://github.com/cisco/libsrtp/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz"
+SRC_URI[md5sum] = "2309aa6027992810a4285b042c71e644"
+SRC_URI[sha256sum] = "86e1efe353397c0751f6bdd709794143bd1b76494412860f16ff2b6d9c304eda"
+
+inherit autotools
+
+do_install[postfuncs] += " rm_unused_bindir "
+
+rm_unused_bindir() {
+	rmdir ${D}/${bindir}
+}
