aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-multimedia')
-rw-r--r--common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch0
-rw-r--r--common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch22
-rw-r--r--common/recipes-multimedia/gstreamer/gst-openmax_git.bb22
-rw-r--r--common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend15
-rw-r--r--common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend3
-rw-r--r--common/recipes-multimedia/gstreamer/gst-plugins-package.inc36
-rw-r--r--common/recipes-multimedia/gstreamer/gst-plugins.inc12
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer/printf.patch58
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc32
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch33
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch26
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb26
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc41
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch30
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch36
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch29
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch27
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch126
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch27
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch29
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch63
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch97
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch56
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch74
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch45
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch36
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch24
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch39
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch30
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb13
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend21
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc136
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch105
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch41
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch32
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch64
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend2
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb14
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend2
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc38
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch359
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch129
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch26
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch31
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch87
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch225
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch69
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch69
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch37
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch49
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch31
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch32
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch54
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch44
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch64
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch57
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch53
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch46
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb11
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend5
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc53
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch62
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch25
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb10
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend5
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc30
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch38
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch143
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb9
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend8
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc90
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0.inc54
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch28
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch55
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch70
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch30
-rwxr-xr-xcommon/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch167
-rw-r--r--common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb16
78 files changed, 3899 insertions, 34 deletions
diff --git a/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
diff --git a/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch b/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch
new file mode 100644
index 0000000..c934336
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch
@@ -0,0 +1,22 @@
+diff -Napur gstreamer-1.2.3.orig/common/m4/introspection.m4 gstreamer-1.2.3/common/m4/introspection.m4
+--- gstreamer-1.2.3.orig/common/m4/introspection.m4 2013-09-24 15:07:33.000000000 +0200
++++ gstreamer-1.2.3/common/m4/introspection.m4 2016-09-01 10:44:56.426710243 +0200
+@@ -54,14 +54,14 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_
+ INTROSPECTION_GIRDIR=
+ INTROSPECTION_TYPELIBDIR=
+ if test "x$found_introspection" = "xyes"; then
+- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
++ INTROSPECTION_SCANNER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
++ INTROSPECTION_COMPILER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
++ INTROSPECTION_GENERATE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+ INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+ INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+ INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+ INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
++ INTROSPECTION_MAKEFILE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+ fi
+ AC_SUBST(INTROSPECTION_SCANNER)
+ AC_SUBST(INTROSPECTION_COMPILER)
diff --git a/common/recipes-multimedia/gstreamer/gst-openmax_git.bb b/common/recipes-multimedia/gstreamer/gst-openmax_git.bb
index 3ae3788..3873edd 100644
--- a/common/recipes-multimedia/gstreamer/gst-openmax_git.bb
+++ b/common/recipes-multimedia/gstreamer/gst-openmax_git.bb
@@ -6,7 +6,7 @@ DEFAULT_PREFERENCE = "-1"
DEPENDS = "gstreamer"
RDEPENDS_${PN} = "libomxil"
LICENSE = "LGPLv2.1"
-LICENSE_FLAGS = "commercial"
+LICENSE_FLAGS = "commercial"
require gst-plugins.inc
inherit gettext
@@ -21,15 +21,17 @@ EXTRA_OECONF += "--disable-valgrind"
# for armadillo800eva
SRCREV_armadillo800eva = "43e0be40d82f83308d0a17cd74060b280c30c2a8"
-SRC_URI_armadillo800eva = "git://github.com/matsu/gst-openmax.git \
- file://gst-openmax.conf \
+SRC_URI_armadillo800eva = " \
+ git://github.com/matsu/gst-openmax.git \
+ file://gst-openmax.conf \
"
SRCREV = "3dad1ec6803bb2f2627188ce0e957dbeaa57b1be"
-SRC_URI = "git://github.com/renesas-devel/gst-openmax.git \
- file://0001-base_videodec-change-the-tile-height-for-T-L-address.patch \
- file://0001-Stop-using-deprecated-GLib-thread-API.patch \
- file://disable_configure.patch \
+SRC_URI = " \
+ git://github.com/renesas-devel/gst-openmax.git \
+ file://0001-base_videodec-change-the-tile-height-for-T-L-address.patch \
+ file://0001-Stop-using-deprecated-GLib-thread-API.patch \
+ file://disable_configure.patch \
"
S = "${WORKDIR}/git/"
@@ -39,12 +41,12 @@ CPPFLAGS += "-Wno-deprecated-declarations"
EXTRA_OECONF := "${@'${EXTRA_OECONF}'.replace('--disable-experimental', '--enable-experimental')}"
do_configure_prepend() {
- (cd ${S}; sh autogen.sh --noconfigure)
+ (cd ${S}; sh autogen.sh --noconfigure)
}
do_install_append_armadillo800eva() {
- install -d ${D}/home/root/.config/
- install -m 644 ${WORKDIR}/gst-openmax.conf ${D}/home/root/.config/.
+ install -d ${D}/home/root/.config/
+ install -m 644 ${WORKDIR}/gst-openmax.conf ${D}/home/root/.config/.
}
FILES_${PN} += "${libdir}/gstreamer-${LIBV}/libgstomx.so /home/root/.config"
diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend b/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend
index 6dd2399..bbe249a 100644
--- a/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend
+++ b/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend
@@ -7,20 +7,23 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
# For armadillo
SRCREV_armadillo800eva = "6c0a11cb57d4425f6d721a6756c5af4d9dd269e5"
-SRC_URI_armadillo800eva = "git://github.com/matsu/gst-plugins-bad.git \
- file://0001-Setup-MERAM-for-A1.patch"
+SRC_URI_armadillo800eva = " \
+ git://github.com/matsu/gst-plugins-bad.git \
+ file://0001-Setup-MERAM-for-A1.patch \
+"
+
S_armadillo800eva = "${WORKDIR}/git/"
DEPENDS_append_armadillo800eva = " directfb libuiomux libshvio"
EXTRA_OECONF_armadillo800eva := "${@'${EXTRA_OECONF}'.replace('--disable-directfb', '--enable-directfb')}"
EXTRA_OECONF_append_armadillo800eva = " \
- --disable-librfb --enable-introspection=no \
- --disable-nls --disable-static --disable-gsettings \
+ --disable-librfb --enable-introspection=no \
+ --disable-nls --disable-static --disable-gsettings \
"
do_configure_armadillo800eva() {
- (cd ${S}; sh autogen.sh --noconfigure)
- oe_runconf
+ (cd ${S}; sh autogen.sh --noconfigure)
+ oe_runconf
}
FILES_${PN} += "${bindir}"
diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend b/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend
index a055a97..fb3a345 100644
--- a/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend
+++ b/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend
@@ -33,5 +33,6 @@ SRC_URI_append_armadillo800eva = " \
file://0029-videocrop-round-down-cropping-parameters-when-the-co.patch \
file://0030-videocrop-hold-a-lock-to-prevent-from-accessing-crop.patch \
file://0031-videocrop-fix-a-memory-leak-caused-by-invoking-gst_p.patch \
- "
+"
+
require gst-plugins-private-libs.inc
diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-package.inc b/common/recipes-multimedia/gstreamer/gst-plugins-package.inc
index 7ae3ef6..cb1be06 100644
--- a/common/recipes-multimedia/gstreamer/gst-plugins-package.inc
+++ b/common/recipes-multimedia/gstreamer/gst-plugins-package.inc
@@ -1,31 +1,46 @@
-LIBV = "0.10"
+PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages "
+PACKAGESPLITFUNCS_append = " set_metapkg_rdepends "
-python populate_packages_prepend () {
+python split_gstreamer10_packages () {
gst_libdir = d.expand('${libdir}/gstreamer-${LIBV}')
postinst = d.getVar('plugin_postinst', True)
glibdir = d.getVar('libdir', True)
do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True)
- do_split_packages(d, gst_libdir, 'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+ do_split_packages(d, gst_libdir, 'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer plugin for %s', postinst=postinst, extra_depends='')
do_split_packages(d, gst_libdir, 'libgst(.*)\.la$', d.expand('${PN}-%s-dev'), 'GStreamer plugin for %s (development files)', extra_depends=d.expand('${PN}-dev'))
do_split_packages(d, gst_libdir, 'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer plugin for %s (static development files)', extra_depends=d.expand('${PN}-staticdev'))
-
+}
+
+python set_metapkg_rdepends () {
+ import os
+
pn = d.getVar('PN', True)
metapkg = pn + '-meta'
d.setVar('ALLOW_EMPTY_' + metapkg, "1")
d.setVar('FILES_' + metapkg, "")
- blacklist = [ pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc' ]
+ blacklist = [ pn, pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc', pn + '-meta' ]
metapkg_rdepends = []
packages = d.getVar('PACKAGES', True).split()
+ pkgdest = d.getVar('PKGDEST', True)
for pkg in packages[1:]:
if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.count('locale') and not pkg.count('-staticdev'):
- metapkg_rdepends.append(pkg)
+ # See if the package is empty by looking at the contents of its PKGDEST subdirectory.
+ # If this subdirectory is empty, then the package is.
+ # Empty packages do not get added to the meta package's RDEPENDS
+ pkgdir = os.path.join(pkgdest, pkg)
+ if os.path.exists(pkgdir):
+ dir_contents = os.listdir(pkgdir) or []
+ else:
+ dir_contents = []
+ is_empty = len(dir_contents) == 0
+ if not is_empty:
+ metapkg_rdepends.append(pkg)
d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package')
}
-# metapkg has runtime dependency on PN
-# each plugin depends on PN, plugin-dev on PN-dev and plugin-staticdev on PN-staticdev
+# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev
# so we need them even when empty (like in gst-plugins-good case)
ALLOW_EMPTY_${PN} = "1"
ALLOW_EMPTY_${PN}-dev = "1"
@@ -34,7 +49,10 @@ ALLOW_EMPTY_${PN}-staticdev = "1"
PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib"
FILES_${PN}-apps = "${bindir}"
-FILES_${PN} = "${datadir}/gstreamer-${LIBV}"
+RDEPENDS_${PN}-apps += "perl"
+RRECOMMENDS_${PN} += "${PN}-meta"
+
+FILES_${PN} = ""
FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug"
FILES_${PN}-glib = "${datadir}/glib-2.0"
diff --git a/common/recipes-multimedia/gstreamer/gst-plugins.inc b/common/recipes-multimedia/gstreamer/gst-plugins.inc
index fc9567a..959c04e 100644
--- a/common/recipes-multimedia/gstreamer/gst-plugins.inc
+++ b/common/recipes-multimedia/gstreamer/gst-plugins.inc
@@ -20,10 +20,10 @@ require 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
+# ${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
-}
+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/common/recipes-multimedia/gstreamer/gstreamer/printf.patch b/common/recipes-multimedia/gstreamer/gstreamer/printf.patch
new file mode 100644
index 0000000..287994b
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer/printf.patch
@@ -0,0 +1,58 @@
+diff --git a/gst/gstinfo.c b/gst/gstinfo.c
+index e05cd22..eadb5e0 100644
+--- a/gst/gstinfo.c
++++ b/gst/gstinfo.c
+@@ -219,7 +219,7 @@ dladdr (void *address, Dl_info * dl)
+ static void gst_debug_reset_threshold (gpointer category, gpointer unused);
+ static void gst_debug_reset_all_thresholds (void);
+
+-#ifdef HAVE_PRINTF_EXTENSION
++#ifdef GST_USING_PRINTF_EXTENSION
+ static int _gst_info_printf_extension_ptr (FILE * stream,
+ const struct printf_info *info, const void *const *args);
+ static int _gst_info_printf_extension_segment (FILE * stream,
+@@ -331,7 +331,7 @@ _priv_gst_debug_init (void)
+ /* get time we started for debugging messages */
+ _priv_gst_info_start_time = gst_util_get_timestamp ();
+
+-#ifdef HAVE_PRINTF_EXTENSION
++#ifdef GST_USING_PRINTF_EXTENSION
+ #ifdef HAVE_REGISTER_PRINTF_SPECIFIER
+ register_printf_specifier (GST_PTR_FORMAT[0], _gst_info_printf_extension_ptr,
+ _gst_info_printf_extension_arginfo);
+@@ -720,7 +720,7 @@ gst_debug_print_object (gpointer ptr)
+ return g_strdup_printf ("%p", ptr);
+ }
+
+-#ifdef HAVE_PRINTF_EXTENSION
++#ifdef GST_USING_PRINTF_EXTENSION
+
+ static gchar *
+ gst_debug_print_segment (gpointer ptr)
+@@ -763,7 +763,7 @@ gst_debug_print_segment (gpointer ptr)
+ }
+ }
+
+-#endif /* HAVE_PRINTF_EXTENSION */
++#endif /* GST_USING_PRINTF_EXTENSION */
+
+ /**
+ * gst_debug_construct_term_color:
+@@ -1655,7 +1655,7 @@ _gst_debug_register_funcptr (GstDebugFuncPtr func, const gchar * ptrname)
+
+ /*** PRINTF EXTENSIONS ********************************************************/
+
+-#ifdef HAVE_PRINTF_EXTENSION
++#ifdef GST_USING_PRINTF_EXTENSION
+ static int
+ _gst_info_printf_extension_ptr (FILE * stream, const struct printf_info *info,
+ const void *const *args)
+@@ -1712,7 +1712,7 @@ _gst_info_printf_extension_arginfo (const struct printf_info *info, size_t n,
+ }
+ return 1;
+ }
+-#endif /* HAVE_PRINTF_EXTENSION */
++#endif /* GST_USING_PRINTF_EXTENSION */
+
+ static void
+ gst_info_dump_mem_line (gchar * linebuf, gsize linebuf_size, \ No newline at end of file
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc
new file mode 100644
index 0000000..84e6e95
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc
@@ -0,0 +1,32 @@
+SUMMARY = "Libav-based GStreamer 1.x plugin"
+SECTION = "multimedia"
+LICENSE = "GPLv2+ & LGPLv2+ & ( (GPLv2+ & LGPLv2.1+) | (GPLv3+ & LGPLv3+) )"
+LICENSE_FLAGS = "commercial"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base zlib bzip2"
+
+inherit autotools pkgconfig
+
+# CAUTION: Using the system libav is not recommended. Since the libav API is changing all the time,
+# compilation errors (and other, more subtle bugs) can happen. It is usually better to rely on the
+# libav copy included in the gst-libav package.
+PACKAGECONFIG ??= " orc yasm "
+PACKAGECONFIG[libav] = "--with-system-libav,,libav"
+PACKAGECONFIG[lgpl] = "--enable-lgpl,,"
+PACKAGECONFIG[yasm] = "--enable-yasm,--disable-yasm,yasm-native"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+
+
+GSTREAMER_1_0_DEBUG ?= "--disable-debug"
+
+LIBAV_EXTRA_CONFIGURE = "--with-libav-extra-configure"
+LIBAV_EXTRA_CONFIGURE_COMMON = \
+'${LIBAV_EXTRA_CONFIGURE}="${LIBAV_EXTRA_CONFIGURE_COMMON_ARG}"'
+
+EXTRA_OECONF = "${LIBAV_EXTRA_CONFIGURE_COMMON}"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch
new file mode 100644
index 0000000..1d99ad1
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch
@@ -0,0 +1,33 @@
+From 54bba228ea52d01fd84941d97be23c03f9862b64 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 6 Apr 2013 01:22:22 +0200
+Subject: [PATCH] Disable yasm for libav when --disable-yasm
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ configure.ac | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 22ede88..ef3c050 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -305,6 +305,12 @@ else
+ emblibav_configure_args="$emblibav_configure_args --enable-gpl"
+ fi
+
++ AC_ARG_ENABLE(yasm,
++ [AC_HELP_STRING([--disable-yasm], [disable use of yasm assembler])])
++ if test "x$enable_yasm" = "xno"; then
++ emblibav_configure_args="$emblibav_configure_args --disable-yasm"
++ fi
++
+ # if we are cross-compiling, tell libav so
+ case $host in
+ *android*)
+--
+1.8.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch
new file mode 100644
index 0000000..ccadea4
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch
@@ -0,0 +1,26 @@
+Description: Workaround to build libav for i586 with gcc 4.9.2 by avoiding memset
+Author: Bernhard Übelacker <bernhardu@vr-web.de>
+
+---
+Bug-Debian: https://bugs.debian.org/783082
+Last-Update: 2015-04-28
+
+Upstream-Status: Backport [debian]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+
+--- gst-libav-1.4.5.orig/gst-libs/ext/libav/libavcodec/h264_cabac.c
++++ gst-libav-1.4.5/gst-libs/ext/libav/libavcodec/h264_cabac.c
+@@ -2020,7 +2020,11 @@ decode_intra_mb:
+ // In deblocking, the quantizer is 0
+ h->cur_pic.qscale_table[mb_xy] = 0;
+ // All coeffs are present
+- memset(h->non_zero_count[mb_xy], 16, 48);
++ /*memset(h->non_zero_count[mb_xy], 16, 48);*/
++ /* avoiding this memset because it leads at least with gcc4.9.2 to error: 'asm' operand has impossible constraints */
++ for (size_t i = 0; i < 48; i++) {
++ ( (unsigned char*)(h->non_zero_count[mb_xy]) ) [i] = 16;
++ }
+ h->cur_pic.mb_type[mb_xy] = mb_type;
+ h->last_qscale_diff = 0;
+ return 0;
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb
new file mode 100644
index 0000000..ecd9819
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb
@@ -0,0 +1,26 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-libav.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \
+ file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \
+ file://gst-libs/ext/libav/LICENSE;md5=23a54f59b82572c203a559346e89ed57 \
+ 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=bd7a443320af8c812e4c18d1b79df004 \
+ file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI = " \
+ http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \
+ file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \
+ "
+SRC_URI[md5sum] = "58c7998a054d8d8ca041fa35738f72b6"
+SRC_URI[sha256sum] = "ebc7fbe10955f40df6ccc4bf689075e7e296205fc7ecd8ff383d43c5cdf5bcd6"
+LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \
+ --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \
+ --ranlib='${RANLIB}' \
+ ${GSTREAMER_1_0_DEBUG}"
+
+S = "${WORKDIR}/gst-libav-${PV}"
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc
new file mode 100644
index 0000000..26c1336
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc
@@ -0,0 +1,41 @@
+SUMMARY = "OpenMAX IL plugins for GStreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
+RDEPENDS_${PN} = "libomxil"
+
+inherit autotools pkgconfig gettext
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+PR = "r1"
+
+GSTREAMER_1_0_OMX_TARGET ?= "bellagio"
+GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0"
+
+EXTRA_OECONF += "--disable-valgrind --with-omx-target=${GSTREAMER_1_0_OMX_TARGET}"
+
+python __anonymous () {
+ omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET", True)
+ if omx_target in ['generic', 'bellagio']:
+ # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,#
+ # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros);
+ # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this
+ d.appendVar("CFLAGS", " -I${S}/omx/openmax")
+ elif omx_target == "rpi":
+ # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific
+ d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH", True))
+}
+
+set_omx_core_name() {
+ sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf"
+}
+do_install[postfuncs] += " set_omx_core_name "
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch
new file mode 100644
index 0000000..a428ac9
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch
@@ -0,0 +1,30 @@
+From f629e041e9f678fcd86ad764a15117dff63c271c Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 27 Apr 2013 02:50:25 +0200
+Subject: [PATCH] omx: fixed type error in printf call
+
+%zu expects size_t
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=699008]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ omx/gstomx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/omx/gstomx.c b/omx/gstomx.c
+index a2945ed..1eca7cc 100644
+--- a/omx/gstomx.c
++++ b/omx/gstomx.c
+@@ -1630,7 +1630,7 @@ gst_omx_port_allocate_buffers_unlocked (GstOMXPort * port,
+
+ GST_INFO_OBJECT (comp->parent,
+ "Allocating %d buffers of size %zu for %s port %u", n,
+- port->port_def.nBufferSize, comp->name, (guint) port->index);
++ (size_t) (port->port_def.nBufferSize), comp->name, (guint) port->index);
+
+ if (!port->buffers)
+ port->buffers = g_ptr_array_sized_new (n);
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch
new file mode 100644
index 0000000..b24dbeb
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch
@@ -0,0 +1,36 @@
+From ca11a82ecfed260dfde19dfec5d9f27e0c5b4be5 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 5 Jun 2013 16:54:33 +0900
+Subject: [PATCH 01/14] omxvideodec: don't disable output port but allocate
+ output buffers when changing to idle
+
+According to the OpenMax specification, buffers for the component to
+use for all of the ports must be required to be allocated when
+changing to idle state. The input/output ports can't be disabled
+at this time.
+---
+ omx/gstomxvideodec.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 976f58e..7f6a48e 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -2097,13 +2097,7 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder,
+ /* Need to allocate buffers to reach Idle state */
+ if (gst_omx_port_allocate_buffers (self->dec_in_port) != OMX_ErrorNone)
+ return FALSE;
+-
+- /* And disable output port */
+- if (gst_omx_port_set_enabled (self->dec_out_port, FALSE) != OMX_ErrorNone)
+- return FALSE;
+-
+- if (gst_omx_port_wait_enabled (self->dec_out_port,
+- 1 * GST_SECOND) != OMX_ErrorNone)
++ if (gst_omx_port_allocate_buffers (self->dec_out_port) != OMX_ErrorNone)
+ return FALSE;
+
+ if (gst_omx_component_get_state (self->dec,
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch
new file mode 100644
index 0000000..4e1d59f
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch
@@ -0,0 +1,29 @@
+From fc7d4dec94367fcd9a3757667a10715897276c22 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 5 Jun 2013 17:28:47 +0900
+Subject: [PATCH 02/14] omxvideodec: populate output buffers in the component
+
+All of the output buffers must be populated in the component with
+FillThisBuffer() beforehand so that gst_omx_video_dec_loop() waits
+for output buffers to be obtained properly.
+---
+ omx/gstomxvideodec.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 7f6a48e..73f677b 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -2111,6 +2111,9 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder,
+ if (gst_omx_component_get_state (self->dec,
+ GST_CLOCK_TIME_NONE) != OMX_StateExecuting)
+ return FALSE;
++
++ if (gst_omx_port_populate (self->dec_out_port) != OMX_ErrorNone)
++ return FALSE;
+ }
+
+ /* Unset flushing to allow ports to accept data again */
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch
new file mode 100644
index 0000000..f8dc325
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch
@@ -0,0 +1,27 @@
+From 881373684539709a23f842cdfd8cbc1dbef76673 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 5 Jun 2013 17:52:18 +0900
+Subject: [PATCH 03/14] omxvideodec: update the cached data of output port
+ definition after its changes
+
+This change reflects the change by negotiating caps with downstream.
+---
+ omx/gstomxvideodec.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 73f677b..df6362b 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -1443,6 +1443,8 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self)
+
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+
++ gst_omx_port_update_port_definition (self->dec_out_port, NULL);
++
+ if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) {
+ err = gst_omx_video_dec_allocate_output_buffers (self);
+ if (err != OMX_ErrorNone)
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch
new file mode 100644
index 0000000..1f20871
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch
@@ -0,0 +1,126 @@
+From 92bf075e1ce4b2687acc84f56ffbfff17883069e Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 6 Jun 2013 11:31:27 +0900
+Subject: [PATCH 04/14] omxvideodec: change supported color formats list
+ creation
+
+To create supported color formats list for caps negotiation,
+this change tries to set each color format that is prepared in
+a list beforehand and determines which color formats are supported
+by the component. The more components can be dealt with by this
+support.
+
+NV12 color format is put at the top of the list declared as a constant
+so that the caps negotiation gives top priority to this color format.
+---
+ omx/gstomxvideodec.c | 84 +++++++++++++++++++++++-----------------------------
+ 1 file changed, 37 insertions(+), 47 deletions(-)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index df6362b..62ee5c5 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -1793,63 +1793,53 @@ static GList *
+ gst_omx_video_dec_get_supported_colorformats (GstOMXVideoDec * self)
+ {
+ GstOMXPort *port = self->dec_out_port;
+- GstVideoCodecState *state = self->input_state;
+ OMX_VIDEO_PARAM_PORTFORMATTYPE param;
+ OMX_ERRORTYPE err;
+ GList *negotiation_map = NULL;
+- gint old_index;
++ gint i;
++ OMX_COLOR_FORMATTYPE format_org;
++ VideoNegotiationMap *m;
++ const VideoNegotiationMap format_list[] = {
++ {GST_VIDEO_FORMAT_NV12, OMX_COLOR_FormatYUV420SemiPlanar},
++ {GST_VIDEO_FORMAT_I420, OMX_COLOR_FormatYUV420Planar},
++ {GST_VIDEO_FORMAT_I420, OMX_COLOR_FormatYUV420PackedPlanar},
++ };
+
+ GST_OMX_INIT_STRUCT (&param);
+ param.nPortIndex = port->index;
+- param.nIndex = 0;
+- if (!state || state->info.fps_n == 0)
+- param.xFramerate = 0;
+- else
+- param.xFramerate = (state->info.fps_n << 16) / (state->info.fps_d);
+
+- old_index = -1;
+- do {
+- VideoNegotiationMap *m;
++ err = gst_omx_component_get_parameter (self->dec,
++ OMX_IndexParamVideoPortFormat, &param);
++ if (err != OMX_ErrorNone) {
++ GST_ERROR_OBJECT (self,
++ "Failed to getting video port format (err info: %s (0x%08x))",
++ gst_omx_error_to_string (err), err);
++ return NULL;
++ }
++ /* temporary save original format type */
++ format_org = param.eColorFormat;
+
+- err =
+- gst_omx_component_get_parameter (self->dec,
++ for (i = 0; i < sizeof (format_list) / sizeof (VideoNegotiationMap); i++) {
++ param.eColorFormat = format_list[i].type;
++ err = gst_omx_component_set_parameter (self->dec,
+ OMX_IndexParamVideoPortFormat, &param);
+-
+- /* FIXME: Workaround for Bellagio that simply always
+- * returns the same value regardless of nIndex and
+- * never returns OMX_ErrorNoMore
+- */
+- if (old_index == param.nIndex)
+- break;
+-
+- if (err == OMX_ErrorNone || err == OMX_ErrorNoMore) {
+- switch (param.eColorFormat) {
+- case OMX_COLOR_FormatYUV420Planar:
+- case OMX_COLOR_FormatYUV420PackedPlanar:
+- m = g_slice_new (VideoNegotiationMap);
+- m->format = GST_VIDEO_FORMAT_I420;
+- m->type = param.eColorFormat;
+- negotiation_map = g_list_append (negotiation_map, m);
+- GST_DEBUG_OBJECT (self, "Component supports I420 (%d) at index %d",
+- param.eColorFormat, param.nIndex);
+- break;
+- case OMX_COLOR_FormatYUV420SemiPlanar:
+- m = g_slice_new (VideoNegotiationMap);
+- m->format = GST_VIDEO_FORMAT_NV12;
+- m->type = param.eColorFormat;
+- negotiation_map = g_list_append (negotiation_map, m);
+- GST_DEBUG_OBJECT (self, "Component supports NV12 (%d) at index %d",
+- param.eColorFormat, param.nIndex);
+- break;
+- default:
+- GST_DEBUG_OBJECT (self,
+- "Component supports unsupported color format %d at index %d",
+- param.eColorFormat, param.nIndex);
+- break;
+- }
++ if (err == OMX_ErrorNone) {
++ m = g_slice_new (VideoNegotiationMap);
++ m->format = format_list[i].format;
++ m->type = format_list[i].type;
++ negotiation_map = g_list_append (negotiation_map, m);
++ GST_DEBUG_OBJECT (self, "Component supports (%d)", param.eColorFormat);
+ }
+- old_index = param.nIndex++;
+- } while (err == OMX_ErrorNone);
++ }
++
++ /* restore setting */
++ param.eColorFormat = format_org;
++ err = gst_omx_component_set_parameter (self->dec,
++ OMX_IndexParamVideoPortFormat, &param);
++ if (err != OMX_ErrorNone)
++ GST_ERROR_OBJECT (self,
++ "Failed to seetting video port format (err info: %s (0x%08x))",
++ gst_omx_error_to_string (err), err);
+
+ return negotiation_map;
+ }
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch
new file mode 100644
index 0000000..0ca832d
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch
@@ -0,0 +1,27 @@
+From 5c13ed4eeeb151b5bc648eb6f7262f65903470c4 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Fri, 7 Jun 2013 14:07:57 +0900
+Subject: [PATCH 05/14] omxh264dec: allow to accept H.264 stream in a nal unit
+
+This change allows to set caps to "alignment=nal" in order to
+receive H.264 stream that is split into a nal unit.
+---
+ omx/gstomxh264dec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/omx/gstomxh264dec.c b/omx/gstomxh264dec.c
+index 2581889..3ed41fc 100644
+--- a/omx/gstomxh264dec.c
++++ b/omx/gstomxh264dec.c
+@@ -61,7 +61,7 @@ gst_omx_h264_dec_class_init (GstOMXH264DecClass * klass)
+
+ videodec_class->cdata.default_sink_template_caps = "video/x-h264, "
+ "parsed=(boolean) true, "
+- "alignment=(string) au, "
++ "alignment=(string) { au, nal }, "
+ "stream-format=(string) byte-stream, "
+ "width=(int) [1,MAX], " "height=(int) [1,MAX]";
+
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch
new file mode 100644
index 0000000..297ec78
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch
@@ -0,0 +1,29 @@
+From 8c999df451f8e4307b71d83177f904d1c2ebd346 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Fri, 7 Jun 2013 15:59:21 +0900
+Subject: [PATCH 06/14] omxvideodec: set OMX buffer flags if
+ GST_BUFFER_FLAG_HEADER is detected
+
+OMX for R-CarM1A requires that the OMX_BUFFERFLAG_CODECCONFIG flag
+be set if the Nal unit type is SPS or PPS.
+---
+ omx/gstomxvideodec.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 62ee5c5..1bdac85 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -2383,6 +2383,9 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder,
+ if (offset == size)
+ buf->omx_buf->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
+
++ if (GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_BUFFER_FLAG_HEADER))
++ buf->omx_buf->nFlags |= OMX_BUFFERFLAG_CODECCONFIG;
++
+ self->started = TRUE;
+ err = gst_omx_port_release_buffer (port, buf);
+ if (err != OMX_ErrorNone)
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch
new file mode 100644
index 0000000..15d2478
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch
@@ -0,0 +1,63 @@
+From 53072a001ad615377144a1e9ed38f4664496fc8c Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 13 Jun 2013 12:08:04 +0900
+Subject: [PATCH 07/14] omxvideodec: remove the data packets left queued in the
+ VideoDecoder class
+
+This change is required when the data packets split from a frame
+are queued in VideoDecoder class. The VideoDecoder class only takes account
+into frame to frame decoding, so subsequent packets aren't cleared
+from the queue in the VideoDecoder class.
+These should be removed before the test to determine if the remaining
+data in the queue is needed to be dropped.
+---
+ omx/gstomxvideodec.c | 33 +++++++++++++++++++++++++++++++++
+ 1 file changed, 33 insertions(+)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 1bdac85..e8c276b 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -949,6 +949,39 @@ _find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf)
+ }
+
+ if (best_id) {
++ /* This processing is required when the data packets split from a frame
++ * are queued in VideoDecoder class. The VideoDecoder class takes account
++ * into frame to frame decoding, so the subsequent packets are left queued.
++ * These should be removed before the test to determine if the remaining
++ * data in the queue is needed to be dropped.
++ */
++ for (l = frames; l; l = l->next) {
++ GstVideoCodecFrame *tmp;
++ BufferIdentification *id;
++
++ tmp = l->data;
++ id = gst_video_codec_frame_get_user_data (tmp);
++
++ /* This happens for frames that were just added but
++ * which were not passed to the component yet. Ignore
++ * them here!
++ */
++ if (!id)
++ continue;
++
++ if (id->timestamp == best_timestamp && l != best_l) {
++ GstVideoCodecFrame *removal;
++
++ removal = gst_video_decoder_get_frame (GST_VIDEO_DECODER (self),
++ tmp->system_frame_number);
++ gst_video_decoder_release_frame (GST_VIDEO_DECODER (self), removal);
++ }
++ }
++
++ g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL);
++ g_list_free (frames);
++ frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self));
++
+ for (l = frames; l && l != best_l; l = l->next) {
+ GstVideoCodecFrame *tmp = l->data;
+ BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp);
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch
new file mode 100644
index 0000000..f68c421
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch
@@ -0,0 +1,97 @@
+From b5605b7ce31c43bc29d15507389d980d09eb914a Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Mon, 17 Jun 2013 17:41:05 +0900
+Subject: [PATCH 08/14] omxwmvdec: support VC-1 stream decoding
+
+The input sequence header must be sent to the REL OMX component before
+pushing the frame data according to the spec.
+This patch sets codec_data to the the sequence header first,
+then the processing keeps being passed with doing nothing.
+
+Only the Simple/Main profiles are supported by this patch.
+Advanced profile isn't supported yet.
+---
+ omx/gstomxwmvdec.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 50 insertions(+)
+
+diff --git a/omx/gstomxwmvdec.c b/omx/gstomxwmvdec.c
+index 64460d9..0f8f2db 100644
+--- a/omx/gstomxwmvdec.c
++++ b/omx/gstomxwmvdec.c
+@@ -34,12 +34,16 @@ static gboolean gst_omx_wmv_dec_is_format_change (GstOMXVideoDec * dec,
+ GstOMXPort * port, GstVideoCodecState * state);
+ static gboolean gst_omx_wmv_dec_set_format (GstOMXVideoDec * dec,
+ GstOMXPort * port, GstVideoCodecState * state);
++static GstFlowReturn gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self,
++ GstVideoCodecFrame * frame);
+
+ enum
+ {
+ PROP_0
+ };
+
++#define SEQ_PARAM_BUF_SIZE 24
++
+ /* class initialization */
+
+ #define DEBUG_INIT \
+@@ -58,6 +62,8 @@ gst_omx_wmv_dec_class_init (GstOMXWMVDecClass * klass)
+ videodec_class->is_format_change =
+ GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_is_format_change);
+ videodec_class->set_format = GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_set_format);
++ videodec_class->prepare_frame =
++ GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_prepare_frame);
+
+ videodec_class->cdata.default_sink_template_caps = "video/x-wmv, "
+ "width=(int) [1,MAX], " "height=(int) [1,MAX]";
+@@ -96,3 +102,47 @@ gst_omx_wmv_dec_set_format (GstOMXVideoDec * dec, GstOMXPort * port,
+
+ return ret;
+ }
++
++static GstFlowReturn
++gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self,
++ GstVideoCodecFrame * frame)
++{
++ if (self->codec_data) {
++ OMX_PARAM_PORTDEFINITIONTYPE port_def;
++ guint32 *SeqHdrBuf;
++ guint8 *u8ptr;
++ GstMapInfo info;
++
++ gst_omx_port_get_port_definition (self->dec_in_port, &port_def);
++
++ if (!gst_buffer_map (self->codec_data, &info, GST_MAP_READ)) {
++ GST_ERROR_OBJECT (self, "Failed to create a gstbuffer mapping");
++ return GST_FLOW_ERROR;
++ }
++
++ SeqHdrBuf = (guint32 *) g_malloc (SEQ_PARAM_BUF_SIZE);
++ if (SeqHdrBuf == NULL) {
++ GST_ERROR_OBJECT (self, "Failed to g_malloc");
++ return GST_FLOW_ERROR;
++ }
++
++ /* create sequence header */
++ SeqHdrBuf[0] = 0xc5000000;
++ SeqHdrBuf[1] = 0x00000004;
++ u8ptr = (guint8 *) & SeqHdrBuf[2];
++ u8ptr[0] = info.data[0];
++ u8ptr[1] = info.data[1];
++ u8ptr[2] = info.data[2];
++ u8ptr[3] = info.data[3];
++ SeqHdrBuf[3] = port_def.format.video.nFrameHeight;
++ SeqHdrBuf[4] = port_def.format.video.nFrameWidth;
++ SeqHdrBuf[5] = 0x0000000c;
++
++ gst_buffer_unmap (self->codec_data, &info);
++
++ gst_buffer_replace (&self->codec_data, NULL);
++ self->codec_data = gst_buffer_new_wrapped (SeqHdrBuf, SEQ_PARAM_BUF_SIZE);
++ }
++
++ return GST_FLOW_OK;
++}
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch
new file mode 100644
index 0000000..3d31b1c
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch
@@ -0,0 +1,56 @@
+From 5ad42791ad2d93bd694bf5faa466ccaffee7d23b Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 19 Jun 2013 16:03:02 +0900
+Subject: [PATCH 09/14] omxwmvdec: support VC-1 advanced profile
+
+If VC-1 advanced profile stream is demuxed, codec_data has a sequence
+header and a entry point header. At the beginning of playback,
+this patch pushes a buffer which is the concatenation of sequence header,
+entry point header and first frame data to decode the advanced profile
+stream.
+---
+ omx/gstomxwmvdec.c | 28 +++++++++++++++++++++++++++-
+ 1 file changed, 27 insertions(+), 1 deletion(-)
+
+diff --git a/omx/gstomxwmvdec.c b/omx/gstomxwmvdec.c
+index 0f8f2db..a3bd3c5 100644
+--- a/omx/gstomxwmvdec.c
++++ b/omx/gstomxwmvdec.c
+@@ -107,7 +107,33 @@ static GstFlowReturn
+ gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self,
+ GstVideoCodecFrame * frame)
+ {
+- if (self->codec_data) {
++ GstCaps *caps;
++ gboolean is_ap = FALSE;
++ GstStructure *structure;
++ const gchar *fourcc;
++
++ if (self->codec_data == NULL)
++ return GST_FLOW_OK;
++
++ caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SINK_PAD (self));
++ structure = gst_caps_get_structure (caps, 0);
++ fourcc = gst_structure_get_string (structure, "format");
++ if (fourcc) {
++ if (strncmp (fourcc, "WVC1", strlen ("WVC1")) == 0) {
++ GST_INFO_OBJECT (self, "stream type is Advanced Profile");
++ is_ap = TRUE;
++ } else {
++ GST_INFO_OBJECT (self, "stream type is Simple/Main Profile");
++ is_ap = FALSE;
++ }
++ }
++ gst_caps_unref (caps);
++
++ if (is_ap) {
++ frame->input_buffer =
++ gst_buffer_append (self->codec_data, frame->input_buffer);
++ self->codec_data = NULL;
++ } else {
+ OMX_PARAM_PORTDEFINITIONTYPE port_def;
+ guint32 *SeqHdrBuf;
+ guint8 *u8ptr;
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch
new file mode 100644
index 0000000..d9bb319
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch
@@ -0,0 +1,74 @@
+From 51d51503f9a1bd52e32d08a81b1ab9b2c0996161 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Tue, 25 Jun 2013 19:23:28 +0900
+Subject: [PATCH 10/14] omxvideodec: don't start the output thread before
+ set_format has been done
+
+reset() method is invoked before set_format() has been invoked at
+the initialization. Thus the output thread is launched before output
+buffers haven't been populated into the component with FillThisBuffer() yet.
+This might cause a malfunction of decoding.
+To resolve the above issue, the output thread invocation in the
+reset() method is restricted before the processing necessary to
+activate the component with set_format_done flag.
+---
+ omx/gstomxvideodec.c | 8 ++++++--
+ omx/gstomxvideodec.h | 2 ++
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index e8c276b..2beaac6 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -735,6 +735,7 @@ gst_omx_video_dec_open (GstVideoDecoder * decoder)
+ klass->cdata.component_name, klass->cdata.component_role,
+ klass->cdata.hacks);
+ self->started = FALSE;
++ self->set_format_done = FALSE;
+
+ if (!self->dec)
+ return FALSE;
+@@ -819,6 +820,7 @@ gst_omx_video_dec_close (GstVideoDecoder * decoder)
+ self->dec = NULL;
+
+ self->started = FALSE;
++ self->set_format_done = FALSE;
+
+ GST_DEBUG_OBJECT (self, "Closed decoder");
+
+@@ -2158,6 +2160,7 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder,
+ self->downstream_flow_ret = GST_FLOW_OK;
+ gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
+ (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL);
++ self->set_format_done = TRUE;
+
+ return TRUE;
+ }
+@@ -2192,8 +2195,9 @@ gst_omx_video_dec_reset (GstVideoDecoder * decoder, gboolean hard)
+ self->last_upstream_ts = 0;
+ self->eos = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+- gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
+- (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL);
++ if (self->set_format_done)
++ gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
++ (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL);
+
+ GST_DEBUG_OBJECT (self, "Reset decoder");
+
+diff --git a/omx/gstomxvideodec.h b/omx/gstomxvideodec.h
+index 8f0f98b..747bc36 100644
+--- a/omx/gstomxvideodec.h
++++ b/omx/gstomxvideodec.h
+@@ -62,6 +62,8 @@ struct _GstOMXVideoDec
+ * the first buffer */
+ gboolean started;
+
++ gboolean set_format_done;
++
+ GstClockTime last_upstream_ts;
+
+ /* Draining state */
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch
new file mode 100644
index 0000000..e593629
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch
@@ -0,0 +1,45 @@
+From 23a56fb86827f4555e30fa587df32fb00f709877 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 27 Jun 2013 19:07:19 +0900
+Subject: [PATCH 11/14] omxvideodec: don't use gst_buffer_map when copying to
+ the output buffers
+
+When the preallocated buffers which are separated into multiple blocks
+are received from a sink plugin, gst_buffer_map() could return
+the different pointer from the buffers received from the sink plugin.
+Probably it is newly allocated because the buffers are mistakenly
+regarded as being discontiguous and tried to be collected into a
+region with copying.
+It is safety that the stride and the slice height are always taken
+account into when copying to the output buffers.
+---
+ omx/gstomxvideodec.c | 13 -------------
+ 1 file changed, 13 deletions(-)
+
+diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
+index 2beaac6..1c3a64c 100644
+--- a/omx/gstomxvideodec.c
++++ b/omx/gstomxvideodec.c
+@@ -1048,19 +1048,6 @@ gst_omx_video_dec_fill_buffer (GstOMXVideoDec * self,
+ goto done;
+ }
+
+- /* Same strides and everything */
+- if (gst_buffer_get_size (outbuf) == inbuf->omx_buf->nFilledLen) {
+- GstMapInfo map = GST_MAP_INFO_INIT;
+-
+- gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
+- memcpy (map.data,
+- inbuf->omx_buf->pBuffer + inbuf->omx_buf->nOffset,
+- inbuf->omx_buf->nFilledLen);
+- gst_buffer_unmap (outbuf, &map);
+- ret = TRUE;
+- goto done;
+- }
+-
+ /* Different strides */
+
+ switch (vinfo->finfo->format) {
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch
new file mode 100644
index 0000000..743d849
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch
@@ -0,0 +1,36 @@
+From 2319fa55b99d8bc0285f79f2cc322aa6ffdce41f Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 27 Jun 2013 21:50:31 +0900
+Subject: [PATCH 12/14] gstomx: Once reinitialize an instance and then retry
+ OMX_Init() if it fails
+
+Reinitializing an instance in case that OMX_Init() fails may
+be effective especially for some stateful OMXIL libraries since it
+resets the state.
+---
+ omx/gstomx.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/omx/gstomx.c b/omx/gstomx.c
+index f542954..be4c4dd 100644
+--- a/omx/gstomx.c
++++ b/omx/gstomx.c
+@@ -133,9 +133,15 @@ gst_omx_core_acquire (const gchar * filename)
+ core->user_count++;
+ if (core->user_count == 1) {
+ OMX_ERRORTYPE err;
++ int retry = 1;
+
++ reinit:
+ err = core->init ();
+ if (err != OMX_ErrorNone) {
++ if (retry-- > 0) {
++ core->deinit ();
++ goto reinit;
++ }
+ GST_ERROR ("Failed to initialize core '%s': 0x%08x", filename, err);
+ g_mutex_unlock (&core->lock);
+ goto error;
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch
new file mode 100644
index 0000000..fa91c71
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch
@@ -0,0 +1,24 @@
+From 8ba852a436d22604897526cb3408e51626b7dd5f Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 27 Jun 2013 21:59:29 +0900
+Subject: [PATCH 13/14] gstomx: fix a missing g_free
+
+---
+ omx/gstomx.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/omx/gstomx.c b/omx/gstomx.c
+index be4c4dd..6738d98 100644
+--- a/omx/gstomx.c
++++ b/omx/gstomx.c
+@@ -651,6 +651,7 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name,
+ "Failed to get component handle '%s' from core '%s': 0x%08x",
+ component_name, core_name, err);
+ gst_omx_core_release (core);
++ g_free (comp->name);
+ g_slice_free (GstOMXComponent, comp);
+ return NULL;
+ }
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch
new file mode 100644
index 0000000..f20d81d
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch
@@ -0,0 +1,39 @@
+From 4a858bb6cf197653aa77f6a3d8b652a793419291 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Thu, 27 Jun 2013 22:03:37 +0900
+Subject: [PATCH 14/14] gstomx: Once reinitialize an instance and then retry
+ OMX_Init() if OMX_GetHandle() fails
+
+Reinitializing an instance in case that OMX_GetHandle() fails may
+be effective especially for some stateful OMXIL libraries since it
+resets the state.
+---
+ omx/gstomx.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/omx/gstomx.c b/omx/gstomx.c
+index 6738d98..6b0a3d1 100644
+--- a/omx/gstomx.c
++++ b/omx/gstomx.c
+@@ -630,7 +630,9 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name,
+ GstOMXCore *core;
+ GstOMXComponent *comp;
+ const gchar *dot;
++ gint retry = 1;
+
++reinit:
+ core = gst_omx_core_acquire (core_name);
+ if (!core)
+ return NULL;
+@@ -653,6 +655,8 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name,
+ gst_omx_core_release (core);
+ g_free (comp->name);
+ g_slice_free (GstOMXComponent, comp);
++ if (retry-- > 0)
++ goto reinit;
+ return NULL;
+ }
+ GST_DEBUG_OBJECT (parent,
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch
new file mode 100644
index 0000000..9dac021
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch
@@ -0,0 +1,30 @@
+From d2e63c6780b323ae8dc03b0236e7e87c0a8832dc Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Mon, 1 Jul 2013 13:33:07 +0900
+Subject: [PATCH 15/15] omxmpeg4videodec: conform caps template to the
+ definition described in avidemux
+
+This is to avoid the caps negotiation failure between avidemux and
+omxmpeg4videodec.
+---
+ omx/gstomxmpeg4videodec.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/omx/gstomxmpeg4videodec.c b/omx/gstomxmpeg4videodec.c
+index d912d74..ade12fc 100644
+--- a/omx/gstomxmpeg4videodec.c
++++ b/omx/gstomxmpeg4videodec.c
+@@ -62,9 +62,7 @@ gst_omx_mpeg4_video_dec_class_init (GstOMXMPEG4VideoDecClass * klass)
+ GST_DEBUG_FUNCPTR (gst_omx_mpeg4_video_dec_set_format);
+
+ videodec_class->cdata.default_sink_template_caps = "video/mpeg, "
+- "mpegversion=(int) 4, "
+- "systemstream=(boolean) false, "
+- "parsed=(boolean) true, " "width=(int) [1,MAX], " "height=(int) [1,MAX]";
++ "mpegversion=(int) 4, " "width=(int) [1,MAX], " "height=(int) [1,MAX]";
+
+ gst_element_class_set_static_metadata (element_class,
+ "OpenMAX MPEG4 Video Decoder",
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb
new file mode 100644
index 0000000..40fc2c7
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb
@@ -0,0 +1,13 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-omx.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "bb34b5742223267298bcffc209104a92"
+SRC_URI[sha256sum] = "7a1d8d28d70dacc6bd3c7ee7d7e40df6d5a1d38d7c256d5c9c5c8ef15c005014"
+
+S = "${WORKDIR}/gst-omx-${PV}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend
new file mode 100644
index 0000000..c0e5605
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += " \
+ file://0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch \
+ file://0002-omxvideodec-populate-output-buffers-in-the-component.patch \
+ file://0003-omxvideodec-update-the-cached-data-of-output-port-de.patch \
+ file://0004-omxvideodec-change-supported-color-formats-list-crea.patch \
+ file://0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch \
+ file://0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch \
+ file://0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch \
+ file://0008-omxwmvdec-support-VC-1-stream-decoding.patch \
+ file://0009-omxwmvdec-support-VC-1-advanced-profile.patch \
+ file://0010-omxvideodec-don-t-start-the-output-thread-before-set.patch \
+ file://0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch \
+ file://0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch \
+ file://0013-gstomx-fix-a-missing-g_free.patch \
+ file://0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch \
+ file://0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch \
+ "
+
+EXTRA_OECONF += "--enable-experimental"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc
new file mode 100644
index 0000000..b4f01af
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc
@@ -0,0 +1,136 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+
+DEPENDS += "gstreamer1.0-plugins-base libpng jpeg"
+
+S = "${WORKDIR}/gst-plugins-bad-${PV}"
+
+SRC_URI += "file://configure-allow-to-disable-libssh2.patch \
+ "
+
+inherit gettext bluetooth
+
+# opengl packageconfig factored out to make it easy for distros
+# and BSP layers to pick either (desktop) opengl, gles2, or no GL
+PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}"
+
+PACKAGECONFIG ??= " \
+ ${PACKAGECONFIG_GL} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'directfb', 'directfb', '', d)} \
+ orc curl neon sndfile \
+ hls sbc dash bz2 smoothstreaming \
+ "
+
+# dash = Dynamic Adaptive Streaming over HTTP
+PACKAGECONFIG[assrender] = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[gles2] = "--enable-gles2,--disable-gles2,virtual/libgles2"
+PACKAGECONFIG[opengl] = "--enable-opengl,--disable-opengl,virtual/libgl libglu"
+PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[libmms] = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[mpg123] = "--enable-mpg123,--disable-mpg123,mpg123"
+PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[flite] = "--enable-flite,--disable-flite,flite-alsa"
+PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[wayland] = "--enable-wayland --enable-egl,--disable-wayland --disable-egl,wayland virtual/egl"
+PACKAGECONFIG[uvch264] = "--enable-uvch264,--disable-uvch264,libusb1 libgudev"
+PACKAGECONFIG[directfb] = "--enable-directfb,--disable-directfb,directfb"
+PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[hls] = "--enable-hls,--disable-hls,gnutls"
+PACKAGECONFIG[sbc] = "--enable-sbc,--disable-sbc,sbc"
+PACKAGECONFIG[dash] = "--enable-dash,--disable-dash,libxml2"
+PACKAGECONFIG[bz2] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[fluidsynth] = "--enable-fluidsynth,--disable-fluidsynth,fluidsynth"
+PACKAGECONFIG[schroedinger] = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[smoothstreaming] = "--enable-smoothstreaming,--disable-smoothstreaming,libxml2"
+PACKAGECONFIG[bluez] = "--enable-bluez,--disable-bluez,${BLUEZ}"
+PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg"
+PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp"
+PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump"
+PACKAGECONFIG[libssh2] = "--enable-libssh2,--disable-libssh2,libssh2"
+PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc"
+PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc"
+PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread"
+
+# these plugins have not been ported to 1.0 (yet):
+# directdraw vcd apexsink dc1394 lv2 linsys musepack mythtv
+# nas timidity teletextdec sdl xvid wininet acm gsettings
+# sndio qtwrapper cdxaparse dccp faceoverlay hdvparse tta
+# mve nuvdemux osx_video patchdetect quicktime real sdi
+# videomeasure gsettings
+
+# these plugins have no corresponding library in OE-core or meta-openembedded:
+# openni2 winks direct3d directdraw directsound winscreencap osx_video
+# apple_media android_media avc chromaprint daala dts gme gsm kate ladspa mimic
+# mpeg2enc mplex ofa openjpeg opensles pvr rtmp soundtouch spandsp spc
+# srtp vdpau wasapi zbar
+
+EXTRA_OECONF += " \
+ --enable-dvb \
+ --enable-shm \
+ --enable-fbdev \
+ --enable-decklink \
+ --disable-acm \
+ --disable-android_media \
+ --disable-apexsink \
+ --disable-apple_media \
+ --disable-avc \
+ --disable-chromaprint \
+ --disable-cocoa \
+ --disable-daala \
+ --disable-dc1394 \
+ --disable-direct3d \
+ --disable-directdraw \
+ --disable-directsound \
+ --disable-dts \
+ --disable-gme \
+ --disable-gsettings \
+ --disable-gsm \
+ --disable-kate \
+ --disable-ladspa \
+ --disable-linsys \
+ --disable-lv2 \
+ --disable-mimic \
+ --disable-mpeg2enc \
+ --disable-mplex \
+ --disable-musepack \
+ --disable-mythtv \
+ --disable-nas \
+ --disable-ofa \
+ --disable-openjpeg \
+ --disable-opensles \
+ --disable-osx_video \
+ --disable-pvr \
+ --disable-quicktime \
+ --disable-sdl \
+ --disable-sdltest \
+ --disable-sndio \
+ --disable-soundtouch \
+ --disable-spandsp \
+ --disable-spc \
+ --disable-srtp \
+ --disable-teletextdec \
+ --disable-timidity \
+ --disable-vcd \
+ --disable-vdpau \
+ --disable-wasapi \
+ --disable-wildmidi \
+ --disable-wininet \
+ --disable-winscreencap \
+ --disable-xvid \
+ --disable-zbar \
+ ${@bb.utils.contains("TUNE_FEATURES", "mx32", "--disable-yadif", "", d)} \
+ "
+
+ARM_INSTRUCTION_SET = "arm"
+
+FILES_gstreamer1.0-plugins-bad-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*"
+
+FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
new file mode 100644
index 0000000..94e5a4d
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
@@ -0,0 +1,105 @@
+From b47725b30127df2f34d5a4612a7021adb110e1bc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org>
+Date: Thu, 1 Sep 2016 22:06:11 +0200
+Subject: [PATCH] Patch Makefiles to use PKG_CONFIG_SYSROOT_PATH
+
+---
+ gst-libs/gst/egl/Makefile.am | 10 +++++-----
+ gst-libs/gst/insertbin/Makefile.am | 10 +++++-----
+ gst-libs/gst/mpegts/Makefile.am | 10 +++++-----
+ 3 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/gst-libs/gst/egl/Makefile.am b/gst-libs/gst/egl/Makefile.am
+index 2270d26..e1a80fa 100644
+--- a/gst-libs/gst/egl/Makefile.am
++++ b/gst-libs/gst/egl/Makefile.am
+@@ -43,11 +43,11 @@ GstEGL-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstegl-@GST_API_VERSIO
+ --c-include "gst/egl/egl.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
+ --library=libgstegl-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-video-@GST_API_VERSION@ \
+ --pkg-export gstreamer-egl-@GST_API_VERSION@ \
+@@ -71,8 +71,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/insertbin/Makefile.am b/gst-libs/gst/insertbin/Makefile.am
+index 6379a0b..ddfadf8 100644
+--- a/gst-libs/gst/insertbin/Makefile.am
++++ b/gst-libs/gst/insertbin/Makefile.am
+@@ -38,12 +38,12 @@ GstInsertBin-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstinsertbin-@GS
+ --c-include "gst/insertbin/gstinsertbin.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --library=libgstinsertbin-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-insertbin-@GST_API_VERSION@ \
+@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/mpegts/Makefile.am b/gst-libs/gst/mpegts/Makefile.am
+index 649de69..bfc164f 100644
+--- a/gst-libs/gst/mpegts/Makefile.am
++++ b/gst-libs/gst/mpegts/Makefile.am
+@@ -71,11 +71,11 @@ GstMpegts-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstmpegts-@GST_API_
+ --c-include "gst/mpegts/mpegts.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \
+ --library=libgstmpegts-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-video-@GST_API_VERSION@ \
+ --pkg-export gstreamer-mpegts-@GST_API_VERSION@ \
+@@ -99,8 +99,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+--
+2.1.4
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch
new file mode 100644
index 0000000..042a32c
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch
@@ -0,0 +1,41 @@
+From deba0da45ec821209a7ed148a4521d562e6512cd Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Wed, 27 Aug 2014 14:47:25 +0200
+Subject: [PATCH] gl: do not check for GL/GLU/EGL/GLES2 libs if disabled in
+ configuration
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=735522]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ configure.ac | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1a46afb..e85d4ba 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -661,10 +661,16 @@ case $host in
+ fi
+ ;;
+ *)
+- AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
+- AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
+- AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
+- AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++ if test "x$NEED_GL" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h)
++ AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h)
++ fi
++ if test "x$NEED_GLES2" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h)
++ fi
++ if test "x$NEED_EGL" != "xno"; then
++ AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h)
++ fi
+
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+--
+1.8.3.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch
new file mode 100644
index 0000000..f677603
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch
@@ -0,0 +1,32 @@
+From c6b37a80806f9128de47f1ccc3f2354f8d436bb6 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 24 Sep 2015 19:47:32 +0300
+Subject: [PATCH] glimagesink: Downrank to marginal
+
+On desktop, where there is good OpenGL, xvimagesink will come up first,
+on other platforms, OpenGL can't be trusted because it's either software (like
+in a VM) or broken (like on embedded)., so let ximagesink come above.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=751684]
+
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ ext/gl/gstopengl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c
+index a4b2540..0ccaacd 100644
+--- a/ext/gl/gstopengl.c
++++ b/ext/gl/gstopengl.c
+@@ -101,7 +101,7 @@ plugin_init (GstPlugin * plugin)
+ #endif
+
+ if (!gst_element_register (plugin, "glimagesink",
+- GST_RANK_SECONDARY, GST_TYPE_GLIMAGE_SINK)) {
++ GST_RANK_MARGINAL, GST_TYPE_GLIMAGE_SINK)) {
+ return FALSE;
+ }
+
+--
+2.1.4
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch
new file mode 100644
index 0000000..d52afd5
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch
@@ -0,0 +1,64 @@
+From f59c5269f92d59a5296cbfeeb682d42095cd88ad Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Thu, 18 Sep 2014 02:24:07 -0400
+Subject: [PATCH] gstreamer1.0-plugins-bad: allow to disable libssh2
+
+libssh2 is automatically linked to if present, this undetermined
+dependency may cause build errors like:
+
+ .../x86_64-poky-linux/4.9.0/ld: cannot find -lssh2
+
+libssh2 isn't an oe-core recipe, so allow to disable it from
+configure.
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.ac | 23 +++++++++++++++++------
+ 1 file changed, 17 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0e95c5c..12153b4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1901,6 +1901,15 @@ AG_GST_CHECK_FEATURE(CHROMAPRINT, [chromaprint], chromaprint, [
+ ])
+
+ dnl *** Curl ***
++AC_ARG_ENABLE([libssh2],
++ [ --enable-libssh2 enable LIBSSH2 support @<:@default=auto@:>@],
++ [case "${enableval}" in
++ yes) NEED_SSH2=yes ;;
++ no) NEED_SSH2=no ;;
++ auto) NEED_SSH2=auto ;;
++ *) AC_MSG_ERROR([bad value ${enableval} for --enable-libssh2]) ;;
++ esac],[NEED_SSH2=auto])
++
+ translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true)
+ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+ PKG_CHECK_MODULES(CURL, libcurl >= 7.21.0, [
+@@ -1915,12 +1924,14 @@ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
+ ])
+ AC_SUBST(CURL_CFLAGS)
+ AC_SUBST(CURL_LIBS)
+- PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
+- HAVE_SSH2="yes"
+- AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
+- ], [
+- HAVE_SSH2="no"
+- ])
++ if test "x$NEED_SSH2" != "xno"; then
++ PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [
++ HAVE_SSH2="yes"
++ AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available])
++ ], [
++ HAVE_SSH2="no"
++ ])
++ fi
+ AM_CONDITIONAL(USE_SSH2, test "x$HAVE_SSH2" = "xyes")
+ AC_SUBST(SSH2_CFLAGS)
+ AC_SUBST(SSH2_LIBS)
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
new file mode 100644
index 0000000..e22e3f8
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
@@ -0,0 +1,2 @@
+PACKAGECONFIG[bluez] = "--enable-bluez,--disable-bluez,bluez5"
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb
new file mode 100644
index 0000000..009db30
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb
@@ -0,0 +1,14 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-plugins-bad.inc
+
+#remove patch from poky that is not necessary in version 1.2.3
+SRC_URI_remove = "file://configure-allow-to-disable-libssh2.patch"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=73a5855a8119deb017f5f13cf327095d \
+ file://gst/tta/filters.h;beginline=12;endline=29;md5=8a08270656f2f8ad7bb3655b83138e5a \
+ file://COPYING.LIB;md5=21682e4e8fea52413fd26c60acb907e5 \
+ file://gst/tta/crc32.h;beginline=12;endline=29;md5=27db269c575d1e5317fffca2d33b3b50"
+SRC_URI[md5sum] = "cfd6f303c8df2740b27cc63b945decef"
+SRC_URI[sha256sum] = "595d7911a9e6207dea37200587724bdbf841b81a5eb0730118be36976684278c"
+S = "${WORKDIR}/gst-plugins-bad-${PV}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
index 4b37238..b7cb577 100644
--- a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
@@ -1,7 +1,5 @@
DEPENDS += "faad2 libxml2 libuiomux libshvio"
-FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
-
TARGET_CFLAGS += "-D_GNU_SOURCE"
PACKAGECONFIG := "${@'${PACKAGECONFIG}'.replace('curl', '')}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc
new file mode 100644
index 0000000..4909b10
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc
@@ -0,0 +1,38 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxv', '', d)}"
+DEPENDS += "freetype liboil util-linux"
+
+inherit gettext
+
+PACKAGES_DYNAMIC =+ "^libgst.*"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+ orc ivorbis ogg theora vorbis pango \
+ "
+
+X11DEPENDS = "virtual/libx11 libsm libxrender"
+X11ENABLEOPTS = "--enable-x --enable-xvideo --enable-xshm"
+X11DISABLEOPTS = "--disable-x --disable-xvideo --disable-xshm"
+PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[ivorbis] = "--enable-ivorbis,--disable-ivorbis,tremor"
+PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg"
+PACKAGECONFIG[theora] = "--enable-theora,--disable-theora,libtheora"
+PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+# libvisual do not seem to exist anywhere in OE
+PACKAGECONFIG[visual] = "--enable-libvisual,--disable-libvisual,libvisual"
+PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+
+EXTRA_OECONF += " \
+ --disable-freetypetest \
+"
+
+FILES_${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict"
+
+CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
new file mode 100644
index 0000000..49b6ebc
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch
@@ -0,0 +1,359 @@
+From 1a363164d7804895b6df43aa9cb5833134bd3c1d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org>
+Date: Thu, 1 Sep 2016 20:07:43 +0200
+Subject: [PATCH] Patch Makefiles to use PKG_CONFIG_SYSROOT_PATH
+
+---
+ gst-libs/gst/allocators/Makefile.am | 6 +++---
+ gst-libs/gst/app/Makefile.am | 6 +++---
+ gst-libs/gst/audio/Makefile.am | 14 +++++++-------
+ gst-libs/gst/fft/Makefile.am | 6 +++---
+ gst-libs/gst/pbutils/Makefile.am | 14 +++++++-------
+ gst-libs/gst/riff/Makefile.am | 12 +++++++-----
+ gst-libs/gst/rtp/Makefile.am | 10 +++++-----
+ gst-libs/gst/rtsp/Makefile.am | 7 +++----
+ gst-libs/gst/sdp/Makefile.am | 6 +++---
+ gst-libs/gst/tag/Makefile.am | 10 +++++-----
+ gst-libs/gst/video/Makefile.am | 10 +++++-----
+ 11 files changed, 51 insertions(+), 50 deletions(-)
+
+diff --git a/gst-libs/gst/allocators/Makefile.am b/gst-libs/gst/allocators/Makefile.am
+index c550ab0..24825d9 100644
+--- a/gst-libs/gst/allocators/Makefile.am
++++ b/gst-libs/gst/allocators/Makefile.am
+@@ -32,10 +32,10 @@ GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@
+ --c-include "gst/allocators/allocators.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ --library=libgstallocators-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg-export gstreamer-allocators-@GST_API_VERSION@ \
+ --output $@ \
+@@ -56,7 +56,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/app/Makefile.am b/gst-libs/gst/app/Makefile.am
+index e89057a..91b2f0e 100644
+--- a/gst-libs/gst/app/Makefile.am
++++ b/gst-libs/gst/app/Makefile.am
+@@ -47,12 +47,12 @@ GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSIO
+ --c-include "gst/app/app.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --library=libgstapp-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-app-@GST_API_VERSION@ \
+diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am
+index 0e67b9b..ac43b19 100644
+--- a/gst-libs/gst/audio/Makefile.am
++++ b/gst-libs/gst/audio/Makefile.am
+@@ -93,17 +93,17 @@ GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VE
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+ --c-include "gst/audio/audio.h" \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --add-include-path="$(top_builddir)/gst-libs/gst/tag/" \
+ --library=libgstaudio-@GST_API_VERSION@.la \
+- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \
+- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \
++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \
++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \
+ --library-path="$(top_builddir)/gst-libs/gst/tag/" \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+ --include=GstTag-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-audio-@GST_API_VERSION@ \
+@@ -127,8 +127,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+ --includedir="$(top_builddir)/gst-libs/gst/tag/" \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am
+index 99c71ba..3527352 100644
+--- a/gst-libs/gst/fft/Makefile.am
++++ b/gst-libs/gst/fft/Makefile.am
+@@ -61,10 +61,10 @@ GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSIO
+ --c-include "gst/fft/fft.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ --library=libgstfft-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg-export gstreamer-fft-@GST_API_VERSION@ \
+ --output $@ \
+@@ -85,7 +85,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am
+index c0f0091..54b3103 100644
+--- a/gst-libs/gst/pbutils/Makefile.am
++++ b/gst-libs/gst/pbutils/Makefile.am
+@@ -79,14 +79,14 @@ GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_AP
+ --c-include "gst/pbutils/pbutils.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --add-include-path="$(top_builddir)/gst-libs/gst/tag/" \
+ --add-include-path="$(top_builddir)/gst-libs/gst/video/" \
+ --add-include-path="$(top_builddir)/gst-libs/gst/audio/" \
+ --library=libgstpbutils-@GST_API_VERSION@.la \
+- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \
+- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \
++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \
++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \
+ --library-path="$(top_builddir)/gst-libs/gst/tag/" \
+ --library-path="$(top_builddir)/gst-libs/gst/video/" \
+ --library-path="$(top_builddir)/gst-libs/gst/audio/" \
+@@ -94,7 +94,7 @@ GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_AP
+ --include=GstTag-@GST_API_VERSION@ \
+ --include=GstVideo-@GST_API_VERSION@ \
+ --include=GstAudio-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-tag-@GST_API_VERSION@ \
+ --pkg gstreamer-video-@GST_API_VERSION@ \
+@@ -119,8 +119,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --includedir="$(top_builddir)/gst-libs/gst/tag/" \
+ --includedir="$(top_builddir)/gst-libs/gst/video/" \
+ --includedir="$(top_builddir)/gst-libs/gst/audio/" \
+diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am
+index 974efd4..9de2a59 100644
+--- a/gst-libs/gst/riff/Makefile.am
++++ b/gst-libs/gst/riff/Makefile.am
+@@ -36,13 +36,15 @@ GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERS
+ --c-include "gst/riff/riff.h" \
+ --add-include-path=$(builddir)/../tag \
+ --add-include-path=$(builddir)/../audio \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ -I$(top_srcdir)/gst-libs \
++ -I$(top_builddir)/gst-libs \
+ --library=libgstriff-@GST_API_VERSION@.la \
+ --include=GstAudio-@GST_API_VERSION@ \
+ --include=GstTag-@GST_API_VERSION@ \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-tag-@GST_API_VERSION@ \
+ --pkg gstreamer-audio-@GST_API_VERSION@ \
+@@ -68,8 +70,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ --includedir=$(builddir) \
+ --includedir=$(builddir)/../tag \
+ --includedir=$(builddir)/../audio \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am
+index 15126ff..3c07a6f 100644
+--- a/gst-libs/gst/rtp/Makefile.am
++++ b/gst-libs/gst/rtp/Makefile.am
+@@ -39,12 +39,12 @@ GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSIO
+ --warn-all \
+ --c-include "gst/rtp/rtp.h" \
+ -I$(top_srcdir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --library=libgstrtp-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-rtp-@GST_API_VERSION@ \
+@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am
+index eceafe5..82646da 100644
+--- a/gst-libs/gst/rtsp/Makefile.am
++++ b/gst-libs/gst/rtsp/Makefile.am
+@@ -67,15 +67,14 @@ GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERS
+ -I$(top_builddir)/gst-libs \
+ -I$(top_srcdir)/gst-libs \
+ --add-include-path=$(builddir)/../sdp \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ --library=libgstrtsp-@GST_API_VERSION@.la \
+ --include=Gio-2.0 \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstSdp-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gio-2.0 \
+ --pkg gstreamer-@GST_API_VERSION@ \
+- --pkg gstreamer-sdp-@GST_API_VERSION@ \
+ --pkg-export gstreamer-rtsp-@GST_API_VERSION@ \
+ --add-init-section="gst_init(NULL,NULL);" \
+ --output $@ \
+@@ -97,7 +96,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+ --includedir=$(builddir)/../sdp \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am
+index 70fba4b..10384d5 100644
+--- a/gst-libs/gst/sdp/Makefile.am
++++ b/gst-libs/gst/sdp/Makefile.am
+@@ -27,10 +27,10 @@ GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSIO
+ --warn-all \
+ --c-include "gst/sdp/sdp.h" \
+ -I$(top_srcdir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ --library=libgstsdp-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg-export gstreamer-sdp-@GST_API_VERSION@ \
+ --output $@ \
+@@ -51,7 +51,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am
+index 1883636..e7fe84e 100644
+--- a/gst-libs/gst/tag/Makefile.am
++++ b/gst-libs/gst/tag/Makefile.am
+@@ -39,12 +39,12 @@ GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSIO
+ --c-include "gst/tag/tag.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --library=libgsttag-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-tag-@GST_API_VERSION@ \
+@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA)
+diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am
+index 292415e..5878bf1 100644
+--- a/gst-libs/gst/video/Makefile.am
++++ b/gst-libs/gst/video/Makefile.am
+@@ -93,12 +93,12 @@ GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VE
+ --c-include "gst/video/video.h" \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_builddir)/gst-libs \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ --library=libgstvideo-@GST_API_VERSION@.la \
+ --include=Gst-@GST_API_VERSION@ \
+ --include=GstBase-@GST_API_VERSION@ \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gstreamer-@GST_API_VERSION@ \
+ --pkg gstreamer-base-@GST_API_VERSION@ \
+ --pkg-export gstreamer-video-@GST_API_VERSION@ \
+@@ -121,8 +121,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+ $(INTROSPECTION_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(builddir) \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
+- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \
++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \
+ $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F)
+
+ CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA)
+--
+2.1.4
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch
new file mode 100644
index 0000000..03dca95
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch
@@ -0,0 +1,129 @@
+From 3781d40940d46d7e6a502092d24aac7997f6da5b Mon Sep 17 00:00:00 2001
+From: Mingke Wang <mingke.wang@freescale.com>
+Date: Thu, 5 Mar 2015 12:06:23 +0800
+Subject: [PATCH 1/4] basetextoverlay: make memory copy when video buffer's
+ memory is ready only
+
+1. since gst_buffer_make_writable just lookup the refcount to determine if
+ a buffer is writable, and it will use _gst_buffer_copy() which don't
+ perform a deep memory copy even if the flag of a memory is set to
+ GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use
+ gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform
+ deep memory copy. if the allocator of a memory don't support mem_copy
+ interface, the it will return NULL, if this case, we can use
+ gst_buffer_make_writable() to get a shared memory buffer or the orignal
+ buffer if the buffer's refcount is 1.
+2. new feature is no added if caps has no feature during caps negotiation
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747495]
+
+Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
+
+diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c
+index c919861..3c0a1d7 100755
+--- a/ext/pango/gstbasetextoverlay.c
++++ b/ext/pango/gstbasetextoverlay.c
+@@ -747,6 +747,7 @@ gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps)
+ if (f == NULL) {
+ f = gst_caps_features_new
+ (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, NULL);
++ gst_caps_set_features(overlay_caps, 0, f);
+ } else {
+ gst_caps_features_add (f,
+ GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION);
+@@ -1890,16 +1891,71 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay,
+ if (gst_pad_check_reconfigure (overlay->srcpad))
+ gst_base_text_overlay_negotiate (overlay, NULL);
+
+- video_frame = gst_buffer_make_writable (video_frame);
+-
+ if (overlay->attach_compo_to_buffer) {
+ GST_DEBUG_OBJECT (overlay, "Attaching text overlay image to video buffer");
++ video_frame = gst_buffer_make_writable (video_frame);
+ gst_buffer_add_video_overlay_composition_meta (video_frame,
+ overlay->composition);
+ /* FIXME: emulate shaded background box if want_shading=true */
+ goto done;
+ }
+
++ gint m = gst_buffer_n_memory(video_frame);
++ gboolean mem_rdonly = FALSE;
++ GstMemory *mem;
++ GstBuffer *orig = video_frame;
++
++ while (--m>=0) {
++ mem = gst_buffer_get_memory(video_frame, m);
++ if (GST_MEMORY_IS_READONLY(mem)) {
++ mem_rdonly = TRUE;
++ gst_memory_unref (mem);
++ break;
++ }
++ gst_memory_unref (mem);
++ }
++
++ if (mem_rdonly) {
++ // since gst_buffer_make_writable just lookup the refcount to determine if
++ // a buffer is writable, and it will use _gst_buffer_copy() which don't
++ // perform a deep memory copy even if the flag of a memory is set to
++ // GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use
++ // gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform
++ // deep memory copy. if the allocator of a memory don't support mem_copy
++ // interface, the it will return NULL, if this case, we can use
++ // gst_buffer_make_writable() to get a shared memory buffer or the orignal
++ // buffer if the buffer's refcount is 1.
++ GstBuffer *new_buf = gst_buffer_copy_region (video_frame,
++ GST_BUFFER_COPY_ALL | GST_BUFFER_COPY_DEEP, 0, -1);
++
++ GST_DEBUG_OBJECT (overlay, "copy %s video frame buffer %p -> %p",
++ g_type_name (GST_MINI_OBJECT_TYPE (video_frame)), video_frame, new_buf);
++
++ if (!new_buf) {
++ //maybe the allocator don't support mem_copy interface, the we just use
++ //gst_buffer_make_writable() to get a writable buffer.
++ video_frame = gst_buffer_make_writable (video_frame);
++ } else {
++ gst_mini_object_unref (video_frame);
++ GST_BUFFER_FLAG_UNSET (new_buf, GST_BUFFER_FLAG_TAG_MEMORY);
++ video_frame = new_buf;
++ }
++
++ if (!video_frame) {
++ GST_WARNING_OBJECT (overlay, "make writable buffer failed");
++ return GST_FLOW_OK;
++ }
++
++ m = gst_buffer_n_memory(video_frame);
++ while (--m>=0) {
++ mem = gst_buffer_get_memory(video_frame, m);
++ GST_MEMORY_FLAG_UNSET (mem, GST_MEMORY_FLAG_READONLY);
++ gst_memory_unref (mem);
++ }
++ } else {
++ video_frame = gst_buffer_make_writable (video_frame);
++ }
++
+ if (!gst_video_frame_map (&frame, &overlay->info, video_frame,
+ GST_MAP_READWRITE))
+ goto invalid_frame;
+@@ -1918,6 +1974,18 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay,
+
+ gst_video_frame_unmap (&frame);
+
++ if (mem_rdonly && orig == video_frame) {
++ //if we used the original buffer and it's mem is set to read only,
++ //recover the memory ready only flag since we unset it before
++ // gst_video_frame_map ()
++ m = gst_buffer_n_memory(video_frame);
++ while (--m>=0) {
++ mem = gst_buffer_get_memory(video_frame, m);
++ GST_MEMORY_FLAGS(mem) |= (GST_MEMORY_FLAG_READONLY);
++ gst_memory_unref (mem);
++ }
++ }
++
+ done:
+
+ return gst_pad_push (overlay->srcpad, video_frame);
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch
new file mode 100644
index 0000000..3db4724
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch
@@ -0,0 +1,26 @@
+From 269f642c45d85cfd630ed490478e6bd6b71a767f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Tue, 16 Sep 2014 01:07:18 +0300
+Subject: [PATCH] video-frame: Don't ref buffers twice when mapping
+
+Upstream-Status: Backport [1.5.1]
+---
+ gst-libs/gst/video/video-frame.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c
+index 01f23c0..8a9ae96 100644
+--- a/gst-libs/gst/video/video-frame.c
++++ b/gst-libs/gst/video/video-frame.c
+@@ -105,7 +105,7 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info,
+ frame->data[i] = frame->map[0].data + info->offset[i];
+ }
+ }
+- frame->buffer = gst_buffer_ref (buffer);
++ frame->buffer = buffer;
+ if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0)
+ gst_buffer_ref (frame->buffer);
+
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch
new file mode 100644
index 0000000..39c146a
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch
@@ -0,0 +1,31 @@
+From 0a78555ea6c8c2f1ee27ee4707e8d7aa00ab7a66 Mon Sep 17 00:00:00 2001
+From: Mingke Wang <mingke.wang@freescale.com>
+Date: Thu, 19 Mar 2015 14:15:25 +0800
+Subject: [PATCH 2/4] gstplaysink: don't set async of custom text-sink to
+ false
+
+set async to false lead to A/V sync problem when seeking.
+the preroll need use GAP event instead of set async to false.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747499]
+
+Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
+
+diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c
+old mode 100644
+new mode 100755
+index f5a2d42..fba0172
+--- a/gst/playback/gstplaysink.c
++++ b/gst/playback/gstplaysink.c
+@@ -2408,7 +2408,7 @@ gen_text_chain (GstPlaySink * playsink)
+ G_TYPE_BOOLEAN);
+ if (elem) {
+ /* make sure the sparse subtitles don't participate in the preroll */
+- g_object_set (elem, "async", FALSE, NULL);
++ //g_object_set (elem, "async", FALSE, NULL);
+ GST_DEBUG_OBJECT (playsink, "adding custom text sink");
+ gst_bin_add (bin, chain->sink);
+ /* NOTE streamsynchronizer needs streams decoupled */
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
new file mode 100644
index 0000000..c465b5c
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
@@ -0,0 +1,87 @@
+From 40a293d44d1aeccf5eb8e86f23a0b13666111c5c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Fri, 12 Sep 2014 14:39:16 +0300
+Subject: [PATCH 2/3] video-frame: Add GST_VIDEO_FRAME_MAP_FLAG_NO_REF
+
+This makes sure that the buffer is not reffed another time when
+storing it in the GstVideoFrame, keeping it writable if it was
+writable.
+
+Upstream-Status: Backport [1.5.1]
+https://bugzilla.gnome.org/show_bug.cgi?id=736118
+---
+ gst-libs/gst/video/video-frame.c | 9 ++++++++-
+ gst-libs/gst/video/video-frame.h | 18 ++++++++++++++++++
+ 2 files changed, 26 insertions(+), 1 deletion(-)
+
+diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c
+index 537cf70..01f23c0 100644
+--- a/gst-libs/gst/video/video-frame.c
++++ b/gst-libs/gst/video/video-frame.c
+@@ -106,6 +106,9 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info,
+ }
+ }
+ frame->buffer = gst_buffer_ref (buffer);
++ if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0)
++ gst_buffer_ref (frame->buffer);
++
+ frame->meta = meta;
+
+ /* buffer flags enhance the frame flags */
+@@ -189,11 +192,13 @@ gst_video_frame_unmap (GstVideoFrame * frame)
+ GstBuffer *buffer;
+ GstVideoMeta *meta;
+ gint i;
++ GstMapFlags flags;
+
+ g_return_if_fail (frame != NULL);
+
+ buffer = frame->buffer;
+ meta = frame->meta;
++ flags = frame->map[0].flags;
+
+ if (meta) {
+ for (i = 0; i < frame->info.finfo->n_planes; i++) {
+@@ -202,7 +207,9 @@ gst_video_frame_unmap (GstVideoFrame * frame)
+ } else {
+ gst_buffer_unmap (buffer, &frame->map[0]);
+ }
+- gst_buffer_unref (buffer);
++
++ if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0)
++ gst_buffer_unref (frame->buffer);
+ }
+
+ /**
+diff --git a/gst-libs/gst/video/video-frame.h b/gst-libs/gst/video/video-frame.h
+index 627fab0..f8e6304 100644
+--- a/gst-libs/gst/video/video-frame.h
++++ b/gst-libs/gst/video/video-frame.h
+@@ -149,6 +149,24 @@ typedef enum {
+ GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8)
+ } GstVideoBufferFlags;
+
++/**
++ * GstVideoBufferFlags:
++ * @GST_VIDEO_FRAME_MAP_FLAG_NO_REF: Don't take another reference of the buffer and store it in
++ * the GstVideoFrame. This makes sure that the buffer stays
++ * writable while the frame is mapped, but requires that the
++ * buffer reference stays valid until the frame is unmapped again.
++ * @GST_VIDEO_FRAME_MAP_FLAG_LAST: Offset to define more flags
++ *
++ * Additional mapping flags for gst_video_frame_map().
++ *
++ * Since: 1.6
++ */
++typedef enum {
++ GST_VIDEO_FRAME_MAP_FLAG_NO_REF = (GST_MAP_FLAG_LAST << 0),
++ GST_VIDEO_FRAME_MAP_FLAG_LAST = (GST_MAP_FLAG_LAST << 8)
++ /* 8 more flags possible afterwards */
++} GstVideoFrameMapFlags;
++
+ G_END_DECLS
+
+ #endif /* __GST_VIDEO_FRAME_H__ */
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch
new file mode 100644
index 0000000..9fbebd5
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch
@@ -0,0 +1,225 @@
+From be6163cfa3a255493f9d75bad9541cbfe1723fee Mon Sep 17 00:00:00 2001
+From: Mingke Wang <mingke.wang@freescale.com>
+Date: Thu, 19 Mar 2015 14:17:10 +0800
+Subject: [PATCH 3/4] ssaparse: enhance SSA text lines parsing.
+
+some parser will pass in the original ssa text line which starts with "Dialog:"
+and there's are maybe multiple Dialog lines in one input buffer.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747496]
+
+Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
+
+diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c
+old mode 100644
+new mode 100755
+index 06ecef9..0ab5dce
+--- a/gst/subparse/gstssaparse.c
++++ b/gst/subparse/gstssaparse.c
+@@ -260,6 +260,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
+ * gst_ssa_parse_push_line:
+ * @parse: caller element
+ * @txt: text to push
++ * @size: text size need to be parse
+ * @start: timestamp for the buffer
+ * @duration: duration for the buffer
+ *
+@@ -269,27 +270,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt)
+ * Returns: result of the push of the created buffer
+ */
+ static GstFlowReturn
+-gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
++gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size,
+ GstClockTime start, GstClockTime duration)
+ {
+ GstFlowReturn ret;
+ GstBuffer *buf;
+- gchar *t, *escaped;
++ gchar *t, *text, *p, *escaped, *p_start, *p_end;
+ gint num, i, len;
++ GstClockTime start_time = G_MAXUINT64, end_time = 0;
+
+- num = atoi (txt);
+- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
+- num, GST_TIME_ARGS (start));
+-
+- /* skip all non-text fields before the actual text */
++ p = text = g_malloc(size + 1);
++ *p = '\0';
+ t = txt;
+- for (i = 0; i < 8; ++i) {
+- t = strchr (t, ',');
++
++ /* there are may have multiple dialogue lines at a time */
++ while (*t) {
++ /* ignore leading white space characters */
++ while (isspace(*t))
++ t++;
++
++ /* ignore Format: and Style: lines */
++ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) {
++ while (*t != '\0' && *t != '\n') {
++ t++;
++ }
++ }
++
++ if (*t == '\0')
++ break;
++
++ /* continue with next line */
++ if (*t == '\n') {
++ t++;
++ continue;
++ }
++
++ if(strncmp(t, "Dialogue:", 9) != 0) {
++ /* not started with "Dialogue:", it must be a line trimmed by demuxer */
++ num = atoi (t);
++ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT,
++ num, GST_TIME_ARGS (start));
++
++ /* skip all non-text fields before the actual text */
++ for (i = 0; i < 8; ++i) {
++ t = strchr (t, ',');
++ if (t == NULL)
++ break;
++ ++t;
++ }
++ } else {
++ /* started with "Dialogue:", update timestamp and duration */
++ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */
++ guint hour, min, sec, msec, len;
++ GstClockTime tmp;
++ gchar t_str[12] = {0};
++
++ /* find the first ',' */
++ p_start = strchr (t, ',');
++ if (p_start)
++ p_end = strchr (++p_start, ',');
++
++ if (p_start && p_end) {
++ /* copy text between first ',' and second ',' */
++ strncpy(t_str, p_start, p_end - p_start);
++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
++ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND;
++ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n",
++ hour, min, sec, msec);
++ if (start_time > tmp)
++ start_time = tmp;
++ } else {
++ GST_WARNING_OBJECT (parse,
++ "failed to parse ssa start timestamp string :%s", t_str);
++ }
++
++ p_start = p_end;
++ p_end = strchr (++p_start, ',');
++ if (p_end) {
++ /* copy text between second ',' and third ',' */
++ strncpy(t_str, p_start, p_end - p_start);
++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) {
++ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND;
++ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n",
++ hour, min, sec, msec);
++ if (end_time < tmp)
++ end_time = tmp;
++ } else {
++ GST_WARNING_OBJECT (parse,
++ "failed to parse ssa end timestamp string :%s", t_str);
++ }
++ }
++ }
++
++ /* now skip all non-text fields before the actual text */
++ for (i = 0; i <= 8; ++i) {
++ t = strchr (t, ',');
++ if (t == NULL)
++ break;
++ ++t;
++ }
++ }
++
++ /* line end before expected number of ',', not a Dialogue line */
+ if (t == NULL)
+- return GST_FLOW_ERROR;
+- ++t;
++ break;
++
++ /* if not the first line, and the last character of previous line is '\0',
++ * then replace it with '\N' */
++ if (p != text && *p == '\0') {
++ *p++ = '\\';
++ *p++ = 'N';
++ }
++
++ /* copy all actual text of this line */
++ while ((*t != '\0') && (*t != '\n'))
++ *p++ = *t++;
++
++ /* add a terminator at the end */
++ *p = '\0';
++ }
++
++ /* not valid text found in this buffer return OK to let caller unref buffer */
++ if (strlen(text) <= 0) {
++ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n");
++ return GST_FLOW_ERROR;
+ }
+
++ t = text;
+ GST_LOG_OBJECT (parse, "Text : %s", t);
+
+ if (gst_ssa_parse_remove_override_codes (parse, t)) {
+@@ -307,13 +414,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
+ gst_buffer_fill (buf, 0, escaped, len + 1);
+ gst_buffer_set_size (buf, len);
+ g_free (escaped);
++ g_free(t);
++
++ if (start_time != G_MAXUINT64)
++ GST_BUFFER_TIMESTAMP (buf) = start_time;
++ else
++ GST_BUFFER_TIMESTAMP (buf) = start;
+
+- GST_BUFFER_TIMESTAMP (buf) = start;
+- GST_BUFFER_DURATION (buf) = duration;
++ if (end_time > start_time)
++ GST_BUFFER_DURATION (buf) = end_time - start_time;
++ else
++ GST_BUFFER_DURATION (buf) = duration;
+
+ GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT
+- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start),
+- GST_TIME_ARGS (duration));
++ " and duration %" GST_TIME_FORMAT,
++ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
++ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
+
+ ret = gst_pad_push (parse->srcpad, buf);
+
+@@ -333,6 +449,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
+ GstClockTime ts;
+ gchar *txt;
+ GstMapInfo map;
++ gint size;
+
+ if (G_UNLIKELY (!parse->framed))
+ goto not_framed;
+@@ -350,13 +467,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf)
+ /* make double-sure it's 0-terminated and all */
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ txt = g_strndup ((gchar *) map.data, map.size);
++ size = map.size;
+ gst_buffer_unmap (buf, &map);
+
+ if (txt == NULL)
+ goto empty_text;
+
+ ts = GST_BUFFER_TIMESTAMP (buf);
+- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf));
++ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf));
+
+ if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) {
+ GstSegment segment;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
new file mode 100644
index 0000000..132bf06
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch
@@ -0,0 +1,69 @@
+From 3a7cdcdfc9c5b0d20394fe51b3b8cda23931ca6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Fri, 12 Sep 2014 14:41:01 +0300
+Subject: [PATCH 3/3] videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF
+
+Upstream-Status: Backport [1.5.1]
+https://bugzilla.gnome.org/show_bug.cgi?id=736118
+---
+ gst-libs/gst/video/gstvideofilter.c | 23 ++++-------------------
+ 1 file changed, 4 insertions(+), 19 deletions(-)
+
+diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c
+index e1fa2c1..874b2e8 100644
+--- a/gst-libs/gst/video/gstvideofilter.c
++++ b/gst-libs/gst/video/gstvideofilter.c
+@@ -260,23 +260,15 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
+ if (fclass->transform_frame) {
+ GstVideoFrame in_frame, out_frame;
+
+- if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, GST_MAP_READ))
++ if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf,
++ GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF))
+ goto invalid_buffer;
+
+ if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf,
+- GST_MAP_WRITE))
++ GST_MAP_WRITE | GST_VIDEO_FRAME_MAP_FLAG_NO_REF))
+ goto invalid_buffer;
+
+- /* GstVideoFrame has another reference, so the buffer looks unwriteable,
+- * meaning that we can't attach any metas or anything to it. Other
+- * map() functions like gst_buffer_map() don't get another reference
+- * of the buffer and expect the buffer reference to be kept until
+- * the buffer is unmapped again. */
+- gst_buffer_unref (inbuf);
+- gst_buffer_unref (outbuf);
+ res = fclass->transform_frame (filter, &in_frame, &out_frame);
+- gst_buffer_ref (inbuf);
+- gst_buffer_ref (outbuf);
+
+ gst_video_frame_unmap (&out_frame);
+ gst_video_frame_unmap (&in_frame);
+@@ -317,7 +309,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
+ GstVideoFrame frame;
+ GstMapFlags flags;
+
+- flags = GST_MAP_READ;
++ flags = GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF;
+
+ if (!gst_base_transform_is_passthrough (trans))
+ flags |= GST_MAP_WRITE;
+@@ -325,14 +317,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf)
+ if (!gst_video_frame_map (&frame, &filter->in_info, buf, flags))
+ goto invalid_buffer;
+
+- /* GstVideoFrame has another reference, so the buffer looks unwriteable,
+- * meaning that we can't attach any metas or anything to it. Other
+- * map() functions like gst_buffer_map() don't get another reference
+- * of the buffer and expect the buffer reference to be kept until
+- * the buffer is unmapped again. */
+- gst_buffer_unref (buf);
+ res = fclass->transform_frame_ip (filter, &frame);
+- gst_buffer_ref (buf);
+
+ gst_video_frame_unmap (&frame);
+ } else {
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch
new file mode 100644
index 0000000..7813915
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch
@@ -0,0 +1,69 @@
+From ed09c8fd2c9c2b5384b72cc70af3728be6694e64 Mon Sep 17 00:00:00 2001
+From: Mingke Wang <mingke.wang@freescale.com>
+Date: Thu, 19 Mar 2015 14:20:26 +0800
+Subject: [PATCH 4/4] subparse: set need_segment after sink pad received
+ GST_EVENT_SEGMENT
+
+subparse works in push mode, chain funciton will be called once
+up stream element finished the seeking and flushing.
+if set need_segment flag in src pad event handler, the segment
+event will be pushed earlier, result in the subtitle text will
+be send out to down stream from the beginning.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747498]
+
+Signed-off-by: Mingke Wang <mingke.wang@freescale.com>
+
+diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
+old mode 100644
+new mode 100755
+index b565e93..7741ccc
+--- a/gst/subparse/gstsubparse.c
++++ b/gst/subparse/gstsubparse.c
+@@ -266,22 +266,20 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+ goto beach;
+ }
+
++ /* Apply the seek to our segment */
++ gst_segment_do_seek (&self->segment, rate, format, flags,
++ start_type, start, stop_type, stop, &update);
++
++ GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT,
++ &self->segment);
++
+ /* Convert that seek to a seeking in bytes at position 0,
+ FIXME: could use an index */
+ ret = gst_pad_push_event (self->sinkpad,
+ gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+ GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, 0));
+
+- if (ret) {
+- /* Apply the seek to our segment */
+- gst_segment_do_seek (&self->segment, rate, format, flags,
+- start_type, start, stop_type, stop, &update);
+-
+- GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT,
+- &self->segment);
+-
+- self->need_segment = TRUE;
+- } else {
++ if (!ret) {
+ GST_WARNING_OBJECT (self, "seek to 0 bytes failed");
+ }
+
+@@ -1632,8 +1630,10 @@ gst_sub_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+ gst_event_parse_segment (event, &s);
+ if (s->format == GST_FORMAT_TIME)
+ gst_event_copy_segment (event, &self->segment);
+- GST_DEBUG_OBJECT (self, "newsegment (%s)",
+- gst_format_get_name (self->segment.format));
++ GST_DEBUG_OBJECT (self, "newsegment (%s) %" GST_SEGMENT_FORMAT,
++ gst_format_get_name (self->segment.format), &self->segment);
++
++ self->need_segment = TRUE;
+
+ /* if not time format, we'll either start with a 0 timestamp anyway or
+ * it's following a seek in which case we'll have saved the requested
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch
new file mode 100644
index 0000000..aa55de1
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch
@@ -0,0 +1,37 @@
+From b608d027fff6efc2d1988ebf169cbe3b2b44a61b Mon Sep 17 00:00:00 2001
+From: zhouming <b42586@freescale.com>
+Date: Thu, 8 May 2014 12:01:17 +0800
+Subject: [PATCH] ENGR00312034: do not change eos event to gap event if no
+ data has passed to streamsynchronizer.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=727074
+
+Upstream-Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst/playback/gststreamsynchronizer.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
+index 3997d1b..3e17c55 100644
+--- a/gst/playback/gststreamsynchronizer.c
++++ b/gst/playback/gststreamsynchronizer.c
+@@ -488,12 +488,11 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
+ }
+ g_slist_free (pads);
+ } else {
+- /* if EOS, but no data has passed, then send something to replace EOS
+- * for preroll purposes */
++ /* if EOS, but no data has passed, then send EOS event */
+ if (!seen_data) {
+ GstEvent *gap_event;
+
+- gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
++ gap_event = gst_event_new_eos ();
+ ret = gst_pad_push_event (srcpad, gap_event);
+ } else {
+ GstEvent *gap_event;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch
new file mode 100755
index 0000000..f24bc7c
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch
@@ -0,0 +1,49 @@
+commit f9536544f5ad182b4f78d0143d1daa45dd64e624
+Author: Song Bing <b06498@freescale.com>
+Date: Thu Oct 9 17:37:43 2014 +0800
+
+[gststreamsynchronizer] send EOS event insterd of GAP event as GAP
+event has issue when A/V have different duration.
+
+send EOS event insterd of GAP event as GAP event has issue when A/V have different duration.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655]
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+
+diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
+index 3e17c55..ff42d72 100644
+--- a/gst/playback/gststreamsynchronizer.c
++++ b/gst/playback/gststreamsynchronizer.c
+@@ -488,19 +488,24 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
+ }
+ g_slist_free (pads);
+ } else {
+- /* if EOS, but no data has passed, then send EOS event */
++ /* if EOS, but no data has passed, then send something to replace EOS
++ * for preroll purposes */
+ if (!seen_data) {
+- GstEvent *gap_event;
++ GstEvent *eos_event;
+
+- gap_event = gst_event_new_eos ();
+- ret = gst_pad_push_event (srcpad, gap_event);
++ /* FIXME: change to EOS event as GAP event has issue when A/V have
++ * different duration */
++ eos_event = gst_event_new_eos ();
++ ret = gst_pad_push_event (srcpad, eos_event);
+ } else {
+- GstEvent *gap_event;
++ GstEvent *eos_event;
+
+ /* FIXME: Also send a GAP event to let audio sinks start their
+ * clock in case they did not have enough data yet */
+- gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE);
+- ret = gst_pad_push_event (srcpad, gap_event);
++ /* FIXME: change to EOS event as GAP event has issue when A/V have
++ * different duration */
++ eos_event = gst_event_new_eos ();
++ ret = gst_pad_push_event (srcpad, eos_event);
+ }
+ }
+ gst_object_unref (srcpad);
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch
new file mode 100755
index 0000000..731be68
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch
@@ -0,0 +1,31 @@
+commit 3f7052aac5e0118a9a9e09fff2f65091be448972
+Author: Song Bing <b06498@freescale.com>
+Date: Thu Oct 23 13:35:13 2014 +0800
+
+[streamsynchronizer] One stream can finish playback.
+
+As changed GAP event EOS event, so EOS will send more times, which will
+cause send function return error.
+Streamsynchronizer will don’t send second track EOS event if send the
+first track EOS return fail. Fixed by ignore the return error.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655]
+
+Signed-off-by: Song Bing b06498@freescale.com
+
+diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c
+index ff42d72..d1732c3 100644
+--- a/gst/playback/gststreamsynchronizer.c
++++ b/gst/playback/gststreamsynchronizer.c
+@@ -482,7 +482,10 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent,
+ while (epad) {
+ pad = epad->data;
+ GST_DEBUG_OBJECT (pad, "Pushing EOS");
+- ret = ret && gst_pad_push_event (pad, gst_event_new_eos ());
++ /* FIXME: remove error check as GAP changed to EOS will send EOS
++ * more times, which will cause return error and then don't send
++ * EOS event to following tracks. */
++ gst_pad_push_event (pad, gst_event_new_eos ());
+ gst_object_unref (pad);
+ epad = g_slist_next (epad);
+ }
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch
new file mode 100644
index 0000000..3256717
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch
@@ -0,0 +1,32 @@
+From 540e02c92c75e08b90326863dc787fa5cadf9da6 Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Fri, 13 Mar 2015 18:04:31 +0800
+Subject: [PATCH] encodebin: Need more buffers in output queue for better
+ performance
+
+Need more buffers in output queue for better performance
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=744191]
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+---
+ gst/encoding/gstencodebin.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c
+index 6728e58..32daae4 100644
+--- a/gst/encoding/gstencodebin.c
++++ b/gst/encoding/gstencodebin.c
+@@ -1138,8 +1138,7 @@ _create_stream_group (GstEncodeBin * ebin, GstEncodingProfile * sprof,
+ * We only use a 1buffer long queue here, the actual queueing will be done
+ * in the input queue */
+ last = sgroup->outqueue = gst_element_factory_make ("queue", NULL);
+- g_object_set (sgroup->outqueue, "max-size-buffers", (guint32) 1,
+- "max-size-bytes", (guint32) 0, "max-size-time", (guint64) 0,
++ g_object_set (sgroup->outqueue, "max-size-time", (guint64) 0,
+ "silent", TRUE, NULL);
+
+ gst_bin_add (GST_BIN (ebin), sgroup->outqueue);
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch
new file mode 100755
index 0000000..ef3f75f
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch
@@ -0,0 +1,54 @@
+Author: Lyon Wang <b12696@freescale.com>
+Date: Thu Oct 9 17:37:43 2014 +0800
+
+[id3v2frames] Bug fix for id3demux issue
+
+Fix the issue that id3 tags utf16 charaters cannot be extreacted in id3demux
+when I tried to get the id3v2 tag such as TIT2, TALB etc. it will return extrac
+failed.
+
+Checked in id3v2frame.c, When parse the UTF-16 streams, it used g_convert() to
+convert the buffer from UTF-16 to UTF-8, however it will return err that this
+conversion is not supported which cause the extraction failed with these UTF-16
+characters.
+
+In the patch, use g_utf16_to_utf8() instead of g_convert, which can convert the
+character format successfully.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=741144
+
+Upstream-Status: Backport [1.5.1]
+
+Signed-off-by: Lyon Wang <b12696@freescale.com>
+
+diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c
+old mode 100644
+new mode 100755
+index 3785c2a..7b9d8ac
+--- a/gst-libs/gst/tag/id3v2frames.c
++++ b/gst-libs/gst/tag/id3v2frames.c
+@@ -1057,14 +1057,17 @@ parse_insert_string_field (guint8 encoding, gchar * data, gint data_size,
+ data_size -= 2;
+ }
+
+- field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL);
+-
+- if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) {
+- /* As a fallback, try interpreting UTF-16 in the other endianness */
+- if (in_encode == utf16beenc)
+- field = g_convert (data, data_size, "UTF-8", utf16leenc,
+- NULL, NULL, NULL);
++ if (in_encode == utf16beenc) {
++ gunichar2 *data_utf16;
++ guint i;
++ data_utf16 = (gunichar2 *) data;
++ for (i=0; i<(data_size>>1); i++) {
++ data_utf16[i] = GUINT16_TO_LE (data_utf16[i]);
++ }
+ }
++ //field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL);
++ field = g_utf16_to_utf8((gunichar2 *)data, (glong)(data_size>>1), NULL, NULL, NULL);
++
+ }
+
+ break;
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
new file mode 100644
index 0000000..284abbe
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch
@@ -0,0 +1,44 @@
+From af0dac26f62aaceb4bf266720911953793e0fc5d Mon Sep 17 00:00:00 2001
+From: zhouming <b42586@freescale.com>
+Date: Wed, 14 May 2014 10:16:20 +0800
+Subject: [PATCH] ENGR00312515: get caps from src pad when query caps
+
+https://bugzilla.gnome.org/show_bug.cgi?id=728312
+
+Upstream-Status: Pending
+
+Signed-off-by: zhouming <b42586@freescale.com>
+---
+ gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+ mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c
+
+diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
+old mode 100644
+new mode 100755
+index 9b6c478..ae2294a
+--- a/gst-libs/gst/tag/gsttagdemux.c
++++ b/gst-libs/gst/tag/gsttagdemux.c
+@@ -1708,6 +1708,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
+ }
+ break;
+ }
++ case GST_QUERY_CAPS:
++ {
++
++ /* We can hijack caps query if we typefind already */
++ if (demux->priv->src_caps) {
++ gst_query_set_caps_result (query, demux->priv->src_caps);
++ res = TRUE;
++ } else {
++ res = gst_pad_query_default (pad, parent, query);
++ }
++ break;
++ }
++
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch
new file mode 100755
index 0000000..833ce72
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch
@@ -0,0 +1,64 @@
+From bcb2b8b6f49e7c66124a4f5e07dea829d5ebfe59 Mon Sep 17 00:00:00 2001
+From: Lyon Wang <lyon.wang@freescale.com>
+Date: Mon, 15 Dec 2014 16:52:07 +0800
+Subject: [PATCH] handle audio/video decoder error
+
+When there is input data and no output data to the end of the stream, it will
+send GST_ELEMENT_ERROR, So the clips playing will quit.
+However, if only one of the tracks is corrupt, there is no need to quit other
+tracks playing.
+
+The patch comments the GST_ELEMENT_ERROR() and just add GST_ERROR_OBJECT()
+information instead.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=741542]
+
+Signed-off-by: Lyon Wang <lyon.wang@freescale.com>
+---
+ gst-libs/gst/audio/gstaudiodecoder.c | 5 +++--
+ gst-libs/gst/video/gstvideodecoder.c | 5 +++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+ mode change 100644 => 100755 gst-libs/gst/audio/gstaudiodecoder.c
+ mode change 100644 => 100755 gst-libs/gst/video/gstvideodecoder.c
+
+diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
+old mode 100644
+new mode 100755
+index c2e7a28..891df0a
+--- a/gst-libs/gst/audio/gstaudiodecoder.c
++++ b/gst-libs/gst/audio/gstaudiodecoder.c
+@@ -2123,9 +2123,10 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
+ GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
+ if (dec->priv->ctx.had_input_data && !dec->priv->ctx.had_output_data) {
+- GST_ELEMENT_ERROR (dec, STREAM, DECODE,
++ /* GST_ELEMENT_ERROR (dec, STREAM, DECODE,
+ ("No valid frames decoded before end of stream"),
+- ("no valid frames found"));
++ ("no valid frames found")); */
++ GST_ERROR_OBJECT(dec, "No valid frames decoded before end of stream");
+ }
+
+ /* send taglist if no valid frame is decoded util EOS */
+diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
+old mode 100644
+new mode 100755
+index ac581e1..4278bcd
+--- a/gst-libs/gst/video/gstvideodecoder.c
++++ b/gst-libs/gst/video/gstvideodecoder.c
+@@ -1068,9 +1068,10 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
+
+ /* Error out even if EOS was ok when we had input, but no output */
+ if (ret && priv->had_input_data && !priv->had_output_data) {
+- GST_ELEMENT_ERROR (decoder, STREAM, DECODE,
++ /* GST_ELEMENT_ERROR (decoder, STREAM, DECODE,
+ ("No valid frames decoded before end of stream"),
+- ("no valid frames found"));
++ ("no valid frames found")); */
++ GST_ERROR_OBJECT(decoder, "No valid frames decoded before end of stream");
+ }
+
+ /* Forward EOS immediately. This is required because no
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
new file mode 100644
index 0000000..62a52b0
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
@@ -0,0 +1,57 @@
+From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001
+From: Jian Li <lj.qfy.sh@gmail.com>
+Date: Wed, 24 Sep 2014 17:21:02 +0800
+Subject: [PATCH] taglist not send to down stream if all the frame corrupted
+
+https://bugzilla.gnome.org/show_bug.cgi?id=737246
+
+Upstream-Status: Pending
+
+Signed-off-by: Jian Li <lj.qfy.sh@gmail.com>
+---
+ gst-libs/gst/audio/gstaudiodecoder.c | 9 +++++++++
+ gst-libs/gst/video/gstvideodecoder.c | 8 ++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
+index 3504678..3d69efe 100644
+--- a/gst-libs/gst/audio/gstaudiodecoder.c
++++ b/gst-libs/gst/audio/gstaudiodecoder.c
+@@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
+ gst_audio_decoder_drain (dec);
+ GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+
++ /* send taglist if no valid frame is decoded util EOS */
++ if (dec->priv->taglist && dec->priv->taglist_changed) {
++ GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist);
++ if (!gst_tag_list_is_empty (dec->priv->taglist))
++ gst_audio_decoder_push_event (dec,
++ gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist)));
++ dec->priv->taglist_changed = FALSE;
++ }
++
+ /* Forward EOS because no buffer or serialized event will come after
+ * EOS and nothing could trigger another _finish_frame() call. */
+ ret = gst_audio_decoder_push_event (dec, event);
+diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
+index dd8abe3..d9bfe4d 100644
+--- a/gst-libs/gst/video/gstvideodecoder.c
++++ b/gst-libs/gst/video/gstvideodecoder.c
+@@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
+ * parent class' ::sink_event() until a later time.
+ */
+ forward_immediate = TRUE;
++
++ /* send taglist if no valid frame is decoded util EOS */
++ if (decoder->priv->tags && decoder->priv->tags_changed) {
++ gst_video_decoder_push_event (decoder,
++ gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags)));
++ decoder->priv->tags_changed = FALSE;
++ }
++
+ break;
+ }
+ case GST_EVENT_GAP:
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch
new file mode 100755
index 0000000..8cfda95
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch
@@ -0,0 +1,53 @@
+commit 88d253ea23b06289df40401160b606323f16c910
+Author: Song Bing <b06498@freescale.com>
+Date: Mon Dec 15 09:34:35 2014 +0800
+
+videopool: update video alignment after video alignment
+
+Video buffer pool will update video alignment to respect stride alignment
+requirement. But haven't update it to video alignment in configure.
+Which will cause user get wrong video alignment.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=741501
+
+Upstream-Status: Backport [1.5.1]
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c
+index 4475f45..acef594 100644
+--- a/gst-libs/gst/video/gstvideopool.c
++++ b/gst-libs/gst/video/gstvideopool.c
+@@ -167,6 +167,7 @@ video_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+ /* get an apply the alignment to the info */
+ gst_buffer_pool_config_get_video_alignment (config, &priv->video_align);
+ gst_video_info_align (&info, &priv->video_align);
++ gst_buffer_pool_config_set_video_alignment (config, &priv->video_align);
+ }
+ priv->info = info;
+
+diff --git a/sys/ximage/ximagepool.c b/sys/ximage/ximagepool.c
+index 6cc2cfa..6a1cbc9 100644
+--- a/sys/ximage/ximagepool.c
++++ b/sys/ximage/ximagepool.c
+@@ -597,6 +597,8 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+ /* do padding and alignment */
+ gst_video_info_align (&info, &priv->align);
+
++ gst_buffer_pool_config_set_video_alignment (config, &priv->align);
++
+ /* we need the video metadata too now */
+ priv->add_metavideo = TRUE;
+ } else {
+diff --git a/sys/xvimage/xvimagepool.c b/sys/xvimage/xvimagepool.c
+index 244a51a..34b1ab2 100644
+--- a/sys/xvimage/xvimagepool.c
++++ b/sys/xvimage/xvimagepool.c
+@@ -124,6 +124,8 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+ /* do padding and alignment */
+ gst_video_info_align (&info, &priv->align);
+
++ gst_buffer_pool_config_set_video_alignment (config, &priv->align);
++
+ /* we need the video metadata too now */
+ priv->add_metavideo = TRUE;
+ } else {
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch
new file mode 100644
index 0000000..b476969
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch
@@ -0,0 +1,46 @@
+From c3f7d36b992a3cbcee3386dea85720f3cb04e1ff Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Fri, 27 Mar 2015 13:39:43 +0800
+Subject: [PATCH] videoencoder: Keep sticky events around when doing a soft
+ reset
+
+The current code will first discard all frames, and then tries to copy
+all sticky events from the (now discarded) frames. Let's change the order.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=746865
+
+Upstream-Status: Accepted
+
+---
+ gst-libs/gst/video/gstvideoencoder.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c
+index 614ba2d..4c5b111 100644
+--- a/gst-libs/gst/video/gstvideoencoder.c
++++ b/gst-libs/gst/video/gstvideoencoder.c
+@@ -340,10 +340,6 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard)
+
+ priv->drained = TRUE;
+
+- g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL);
+- g_list_free (priv->frames);
+- priv->frames = NULL;
+-
+ priv->bytes = 0;
+ priv->time = 0;
+
+@@ -392,6 +388,10 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard)
+ encoder->priv->current_frame_events);
+ }
+
++ g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL);
++ g_list_free (priv->frames);
++ priv->frames = NULL;
++
+ GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
+
+ return ret;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb
new file mode 100644
index 0000000..9ee9202
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb
@@ -0,0 +1,11 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-plugins-base.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \
+ file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \
+ "
+SRC_URI[md5sum] = "17aeabfbcd232526f50c9bee375f1b97"
+SRC_URI[sha256sum] = "61edec35c270f86928bad434bd059da4efff865d1ef01bcc64ecbd903625dae1"
+S = "${WORKDIR}/gst-plugins-base-${PV}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
new file mode 100644
index 0000000..2f46ba3
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
@@ -0,0 +1,5 @@
+PACKAGECONFIG ??= " \
+ ${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+ ${@base_contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+ ivorbis ogg theora vorbis \
+ "
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc
new file mode 100644
index 0000000..edaafe8
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc
@@ -0,0 +1,53 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+
+# libid3tag
+DEPENDS += "gstreamer1.0-plugins-base zlib bzip2 libcap"
+
+inherit gettext
+
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+ orc cairo flac gdk-pixbuf jpeg libpng soup speex taglib v4l2\
+ "
+
+X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage"
+X11ENABLEOPTS = "--enable-x --enable-xshm"
+X11DISABLEOPTS = "--disable-x --disable-xshm"
+PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[cairo] = "--enable-cairo,--disable-cairo,cairo"
+PACKAGECONFIG[flac] = "--enable-flac,--disable-flac,flac"
+PACKAGECONFIG[gdk-pixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[gudev] = "--with-gudev,--without-gudev,libgudev"
+PACKAGECONFIG[libv4l2] = "--with-libv4l2,--without-libv4l2,libv4l2"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[libpng] = "--enable-libpng,--disable-libpng,libpng"
+PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4"
+PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[taglib] = "--enable-taglib,--disable-taglib,taglib"
+PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx,libvpx"
+PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394"
+PACKAGECONFIG[v4l2] = "--enable-gst_v4l2,--disable-gst_v4l2"
+
+EXTRA_OECONF += " \
+ --enable-oss \
+ --disable-directsound \
+ --disable-waveform \
+ --disable-oss4 \
+ --disable-sunaudio \
+ --disable-osx_audio \
+ --disable-osx_video \
+ --disable-aalib \
+ --disable-libcaca \
+ --disable-libdv \
+ --disable-shout2 \
+ --disable-examples \
+"
+
+FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch
new file mode 100755
index 0000000..d1973d4
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch
@@ -0,0 +1,62 @@
+From c782a30482908a4b4dd9cd4abff9f9bc4016698f Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Tue, 5 Aug 2014 14:40:46 +0800
+Subject: [PATCH] gstrtpmp4gpay: set dafault value for MPEG4 without codec
+ data in caps.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=734263
+
+Upstream-Status: Submitted
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+---
+ gst/rtp/gstrtpmp4gpay.c | 19 ++++++++++++++++++-
+ 1 file changed, 18 insertions(+), 1 deletion(-)
+
+diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c
+index 7913d9a..1749d39 100644
+--- a/gst/rtp/gstrtpmp4gpay.c
++++ b/gst/rtp/gstrtpmp4gpay.c
+@@ -390,6 +390,7 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+ const GValue *codec_data;
+ const gchar *media_type = NULL;
+ gboolean res;
++ const gchar *name;
+
+ rtpmp4gpay = GST_RTP_MP4G_PAY (payload);
+
+@@ -400,7 +401,6 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+ GST_LOG_OBJECT (rtpmp4gpay, "got codec_data");
+ if (G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) {
+ GstBuffer *buffer;
+- const gchar *name;
+
+ buffer = gst_value_get_buffer (codec_data);
+ GST_LOG_OBJECT (rtpmp4gpay, "configuring codec_data");
+@@ -426,6 +426,23 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
+
+ rtpmp4gpay->config = gst_buffer_copy (buffer);
+ }
++ } else {
++ name = gst_structure_get_name (structure);
++
++ if (!strcmp (name, "video/mpeg")) {
++ rtpmp4gpay->profile = g_strdup ("1");
++
++ /* fixed rate */
++ rtpmp4gpay->rate = 90000;
++ /* video stream type */
++ rtpmp4gpay->streamtype = "4";
++ /* no params for video */
++ rtpmp4gpay->params = NULL;
++ /* mode */
++ rtpmp4gpay->mode = "generic";
++
++ media_type = "video";
++ }
+ }
+ if (media_type == NULL)
+ goto config_failed;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch
new file mode 100755
index 0000000..288631b
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch
@@ -0,0 +1,25 @@
+commit d71d74daac8ed54156ed103958ab455c63c72b0e
+Author: Song Bing <b06498@freescale.com>
+Date: Mon Nov 10 11:25:47 2014 +0800
+
+[asteriskh263] decrease the rank as we havn't this kind of decoder.
+
+Decrease the rank as we havn't this kind of decoder.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=739935
+
+Upstream-Status: Pending
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+
+diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c
+index a01fbc8..8fa3194 100644
+--- a/gst/rtp/gstasteriskh263.c
++++ b/gst/rtp/gstasteriskh263.c
+@@ -226,5 +226,5 @@ gboolean
+ gst_asteriskh263_plugin_init (GstPlugin * plugin)
+ {
+ return gst_element_register (plugin, "asteriskh263",
+- GST_RANK_SECONDARY, GST_TYPE_ASTERISK_H263);
++ GST_RANK_SECONDARY - 1, GST_TYPE_ASTERISK_H263);
+ }
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb
new file mode 100644
index 0000000..e7c5342
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb
@@ -0,0 +1,10 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-plugins-good.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \
+ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+SRC_URI[md5sum] = "1a1f96bc27ad446e559474299160a9a8"
+SRC_URI[sha256sum] = "bfb33536a515bdcc34482f64b8d9cc3e47c753878b254923b419bc2f7485e470"
+S = "${WORKDIR}/gst-plugins-good-${PV}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
new file mode 100644
index 0000000..910b031
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
@@ -0,0 +1,5 @@
+PACKAGECONFIG ??= " \
+ ${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+ ${@base_contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+ cairo flac gdk-pixbuf jpeg libpng soup speex taglib \
+ "
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc
new file mode 100644
index 0000000..63ba316
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc
@@ -0,0 +1,30 @@
+require gstreamer1.0-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+
+DEPENDS += "gstreamer1.0-plugins-base libid3tag"
+
+inherit gettext
+
+
+PACKAGECONFIG ??= " \
+ orc a52dec lame mad mpeg2dec \
+ "
+
+PACKAGECONFIG[a52dec] = "--enable-a52dec,--disable-a52dec,liba52"
+PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[lame] = "--enable-lame,--disable-lame,lame"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[mpeg2dec] = "--enable-mpeg2dec,--disable-mpeg2dec,mpeg2dec"
+PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264"
+
+
+EXTRA_OECONF += " \
+ --disable-amrnb \
+ --disable-amrwb \
+ --disable-sidplay \
+ --disable-twolame \
+ "
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch
new file mode 100644
index 0000000..b10e327
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch
@@ -0,0 +1,38 @@
+From 5dbb78388883e2f6e4525b0f322587aa090c3c72 Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 19 Jun 2013 14:10:07 +0900
+Subject: [PATCH 1/2] asfdemux/asfpacket: specify the offset by an amount of
+ filled buffer size when concatenating fragmented media objects
+
+This change is preliminary for inserting VC-1 startcodes of advanced
+profile. To achieve this, the VC-1 startcode size is required to be
+added to the amount of filled buffer size of a payload. As a result
+the offset to concatenate fragmented media objects couldn't be determined
+by mo_offset of an asfpacket, so the offset is specified as the amount
+of filled buffer size instead, which will take account into the VC-1
+start code size.
+---
+ gst/asfdemux/asfpacket.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c
+index f9b13fb..12eede8 100644
+--- a/gst/asfdemux/asfpacket.c
++++ b/gst/asfdemux/asfpacket.c
+@@ -425,10 +425,10 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ "offset=%u vs buf_filled=%u", payload.mo_offset,
+ prev->buf_filled);
+ }
+- gst_buffer_fill (prev->buf, payload.mo_offset,
++ gst_buffer_fill (prev->buf, prev->buf_filled,
+ payload_data, payload_len);
+- prev->buf_filled =
+- MAX (prev->buf_filled, payload.mo_offset + payload_len);
++ if ((payload.mo_offset + payload_len) > prev->buf_filled)
++ prev->buf_filled += payload_len;
+ GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u",
+ prev->buf_filled);
+ }
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch
new file mode 100644
index 0000000..2c81e1b
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch
@@ -0,0 +1,143 @@
+From 389480c0a11c134b963fe4d249d49549db519dec Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Tue, 18 Jun 2013 12:28:32 +0900
+Subject: [PATCH 2/2] asfdemux/asfpacket: set frame start code to VC-1 advanced
+ profile stream
+
+VC-1 advanced profile constrains the bitstream format to pair
+the frame data with the frame start code.
+---
+ gst/asfdemux/asfpacket.c | 73 ++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 67 insertions(+), 6 deletions(-)
+
+diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c
+index 12eede8..7b72aa0 100644
+--- a/gst/asfdemux/asfpacket.c
++++ b/gst/asfdemux/asfpacket.c
+@@ -72,7 +72,7 @@ asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset,
+
+ static GstBuffer *
+ asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
+- guint * p_size, guint payload_len)
++ guint * p_size, guint payload_len, gboolean need_st_code)
+ {
+ guint off;
+
+@@ -84,6 +84,39 @@ asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data,
+ *p_data += payload_len;
+ *p_size -= payload_len;
+
++ /* set start code for VC-1 advanced profile */
++ if (need_st_code && off >= 4) {
++ const guint8 *pos;
++
++ pos = packet->bdata + off;
++ /* check if this packet has a start code */
++ if (pos[0] != 0x00 || pos[1] != 0x00 || pos[2] != 0x01 || pos[3] != 0x0d) {
++ GstBuffer *subbuf;
++ GstMapInfo map;
++
++ subbuf = gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL,
++ off - 4, payload_len + 4);
++ if (subbuf == NULL) {
++ GST_ERROR ("Failed to create a sub-buffer");
++ return NULL;
++ }
++
++ if (!gst_buffer_map (subbuf, &map, GST_MAP_WRITE)) {
++ GST_ERROR ("Failed to create a gstbuffer mapping");
++ return NULL;
++ }
++
++ map.data[0] = 0x00;
++ map.data[1] = 0x00;
++ map.data[2] = 0x01;
++ map.data[3] = 0x0d;
++
++ gst_buffer_unmap (subbuf, &map);
++
++ return subbuf;
++ }
++ }
++
+ return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off,
+ payload_len);
+ }
+@@ -284,6 +317,9 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ gboolean is_compressed;
+ guint payload_len;
+ guint stream_num;
++ GstStructure *structure;
++ const gchar *fourcc;
++ gboolean need_st_code = FALSE;
+
+ if (G_UNLIKELY (*p_size < 1)) {
+ GST_WARNING_OBJECT (demux, "Short packet!");
+@@ -363,6 +399,18 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ return TRUE;
+ }
+
++ structure = gst_caps_get_structure (stream->caps, 0);
++ fourcc = gst_structure_get_string (structure, "format");
++ if (fourcc) {
++ /*
++ * set start code for VC-1 advanced profile if fourcc is 'WVC1' and this
++ * packet is at the head of a payload.
++ */
++ if (strncmp (fourcc, "WVC1", strlen ("WVC1")) == 0
++ && payload.mo_offset == 0)
++ need_st_code = TRUE;
++ }
++
+ if (G_UNLIKELY (!is_compressed)) {
+ GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len);
+
+@@ -397,7 +445,7 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ /* if the media object is not fragmented, just create a sub-buffer */
+ GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len);
+ payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size,
+- payload_len);
++ payload_len, need_st_code);
+ payload.buf_filled = payload_len;
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ } else {
+@@ -437,11 +485,24 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+ "any previous fragment, ignoring payload");
+ }
+ } else {
++ const guint8 st_code[] = { 0x00, 0x00, 0x01, 0x0d };
++
+ GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented "
+ "media object", payload.mo_size);
+- payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
+- gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
+- payload.buf_filled = payload_len;
++ if ((payload_data[0] != 0x00 || payload_data[1] != 0x00 ||
++ payload_data[2] != 0x01 || payload_data[3] != 0x0d) &&
++ need_st_code) {
++ /* set start code for VC-1 advanced profile */
++ payload.buf =
++ gst_buffer_new_allocate (NULL, payload.mo_size + 4, NULL);
++ gst_buffer_fill (payload.buf, 0, st_code, sizeof (st_code));
++ gst_buffer_fill (payload.buf, 4, payload_data, payload_len);
++ payload.buf_filled = payload_len + sizeof (st_code);
++ } else {
++ payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL);
++ gst_buffer_fill (payload.buf, 0, payload_data, payload_len);
++ payload.buf_filled = payload_len;
++ }
+
+ gst_asf_payload_queue_for_stream (demux, &payload, stream);
+ }
+@@ -483,7 +544,7 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
+
+ if (G_LIKELY (sub_payload_len > 0)) {
+ payload.buf = asf_packet_create_payload_buffer (packet,
+- &payload_data, &payload_len, sub_payload_len);
++ &payload_data, &payload_len, sub_payload_len, need_st_code);
+ payload.buf_filled = sub_payload_len;
+
+ payload.ts = ts;
+--
+1.8.1.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb
new file mode 100644
index 0000000..9c30d26
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb
@@ -0,0 +1,9 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0-plugins-ugly.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 "
+SRC_URI[md5sum] = "7ae60e2f759f58f32af5fcdc3c9193c4"
+SRC_URI[sha256sum] = "537b0a7607eee499026388bb705b5b68985a3fd59fe22ee09accaf8cdf57eb3b"
+S = "${WORKDIR}/gst-plugins-ugly-${PV}"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend
new file mode 100644
index 0000000..ca4f404
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend
@@ -0,0 +1,8 @@
+PACKAGECONFIG ??= " \
+ a52dec lame mad mpeg2dec \
+ "
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch \
+ file://0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch"
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc
new file mode 100644
index 0000000..449809b
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc
@@ -0,0 +1,90 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework 1.x"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer1.0"
+
+inherit autotools pkgconfig gobject-introspection
+
+GSTREAMER_1_0_DEBUG ?= "--disable-debug"
+GSTREAMER_1_0_GIT_BRANCH ?= "master"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_1_0_DEBUG} --disable-examples "
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "1.0"
+require gst-plugins-package.inc
+
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc orc-native"
+
+export ORCC = "${STAGING_DIR_NATIVE}${bindir}/orcc"
+
+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
+}
+
+SRC_URI = "${@get_gst_srcuri(d)}"
+
+def get_gst_srcuri(d):
+ # check if expected prefix is present
+ prefix = "gstreamer1.0-"
+ bpn = d.getVar("BPN", True)
+ if not bpn.startswith(prefix):
+ bb.fatal('Invalid GStreamer 1.0 plugin package name "%s" : must start with "%s"' % (bpn, prefix))
+
+ # replaced prefix with "gst-", which is what is used for the tarball and repository filenames
+ gstpkg_basename = "gst-" + bpn[len(prefix):]
+ pv = d.getVar("PV", True)
+ branch = d.getVar("GSTREAMER_1_0_GIT_BRANCH", True)
+
+ if pv == "git":
+ s = "git://anongit.freedesktop.org/gstreamer/%s;branch=%s" % (gstpkg_basename, branch)
+ else:
+ s = "http://gstreamer.freedesktop.org/src/%s/%s-%s.tar.xz" % (gstpkg_basename, gstpkg_basename, pv)
+ return s
+
+
+## HACK alert. These changes are needed to build the old source with newer tools
+
+delete_liblink_m4_file() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm "${S}/m4/lib-link.m4" || true
+}
+
+do_configure[prefuncs] += " delete_liblink_m4_file "
+
+delete_pkg_m4_file() {
+ # This m4 file is out of date and is missing PKG_CONFIG_SYSROOT_PATH tweaks which we need for introspection
+ rm -f "${S}/common/m4/pkg.m4" || true
+}
+
+do_configure[prefuncs] += " delete_pkg_m4_file"
+
+SRC_URI_append = " file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch"
+
+# This patch has 4 incarnations ... files, -base, -bad, -good
+SRC_URI_append = " file://0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch"
+
+# we need to pull down common to patch it ... yikes!
+# autogen will clone common ... how evil
+autogennoconf() {
+ cd ${S}
+ ./autogen.sh --noconfigure
+}
+do_patch[prefuncs] += "autogennoconf"
+
+
+do_install_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/gst-libs/gst/tag/.libs:${B}/gst-libs/gst/video/.libs:${B}/gst-libs/gst/audio/.libs:${B}/gst-libs/gst/rtp/.libs:${B}/gst-libs/gst/sdp/.libs"
+}
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/gst-libs/gst/tag/.libs:${B}/gst-libs/gst/video/.libs:${B}/gst-libs/gst/audio/.libs:${B}/gst-libs/gst/rtp/.libs:${B}/gst-libs/gst/sdp/.libs"
+}
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0.inc
new file mode 100644
index 0000000..d1bdba4
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0.inc
@@ -0,0 +1,54 @@
+SUMMARY = "GStreamer 1.0 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+"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native"
+
+inherit autotools pkgconfig gettext gobject-introspection
+
+PACKAGECONFIG[debug] = "--enable-debug,--disable-debug"
+PACKAGECONFIG[check] = "--enable-check,--disable-check"
+
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+ --disable-dependency-tracking \
+ --disable-examples --disable-tests \
+ --disable-valgrind \
+ "
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+delete_pkg_m4_file() {
+ # This m4 file is out of date and is missing PKG_CONFIG_SYSROOT_PATH tweaks which we need for introspection
+ rm -f "${S}/common/m4/pkg.m4" || true
+ # sed the §%"!& hardcoded libtool
+ cd ${S}
+ for i in gst/Makefile.in gst/Makefile.am libs/gst/controller/Makefile.in libs/gst/controller/Makefile.am libs/gst/base/Makefile.in libs/gst/base/Makefile.am \
+ libs/gst/check/Makefile.in libs/gst/check/Makefile.am libs/gst/net/Makefile.in libs/gst/net/Makefile.am ; do
+ sed -i -e 's#--libtool=\"\$(top_builddir)/libtool\"#--libtool=\"\$(LIBTOOL)\"#g' $i
+ done
+ cd -
+
+}
+
+do_configure[prefuncs] += " delete_pkg_m4_file"
+
+do_install_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/gst/.libs:${B}/libs/gst/base/.libs"
+}
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/gst/.libs:${B}/libs/gst/base/.libs"
+}
+
+RRECOMMENDS_${PN}_qemux86 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+FILES_${PN} += " ${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-1.0/*.la ${libdir}/gstreamer-1.0/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-1.0/.debug/ ${libexecdir}/gstreamer-1.0/.debug/"
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch
new file mode 100644
index 0000000..94f5cc5
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch
@@ -0,0 +1,28 @@
+From 6b26f3dbf9bf577d71534ab7410de66d06e46ba2 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 6 Apr 2013 23:52:11 +0200
+Subject: [PATCH] Fix crash with gst-inspect Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ tools/gst-inspect.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c
+index 23b7c44..b79b02e 100644
+--- a/tools/gst-inspect.c
++++ b/tools/gst-inspect.c
+@@ -1556,7 +1556,7 @@ main (int argc, char *argv[])
+ 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_printerr ("Error initializing: %s\n", err->message);
++ g_printerr ("Error initializing: %s\n", err ? err->message : "(null)");
+ return -1;
+ }
+ g_option_context_free (ctx);
+--
+1.8.2
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch
new file mode 100644
index 0000000..8213c4b
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch
@@ -0,0 +1,55 @@
+From 81fecd367b016e5ac4fb0c04b84da5c474f30da6 Mon Sep 17 00:00:00 2001
+From: Peter Urbanec <git.user@urbanec.net>
+Date: Fri, 27 Feb 2015 01:16:58 +1100
+Subject: [PATCH 1/1] gstinfo: Shorten __FILE__ on all platforms.
+
+This is useful not only for MSVC, but also with gcc/Linux when doing
+cross-compilation builds and out-of-tree builds.
+
+Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=745213]
+
+Signed-off-by: Peter Urbanec <git.user@urbanec.net>
+---
+ gst/gstinfo.c | 11 ++++-------
+ 1 file changed, 4 insertions(+), 7 deletions(-)
+
+diff --git a/gst/gstinfo.c b/gst/gstinfo.c
+index b2a3005..8b61d09 100644
+--- a/gst/gstinfo.c
++++ b/gst/gstinfo.c
+@@ -444,7 +444,6 @@ gst_debug_log (GstDebugCategory * category, GstDebugLevel level,
+ va_end (var_args);
+ }
+
+-#ifdef G_OS_WIN32
+ /* based on g_basename(), which we can't use because it was deprecated */
+ static inline const gchar *
+ gst_path_basename (const gchar * file_name)
+@@ -467,7 +466,6 @@ gst_path_basename (const gchar * file_name)
+
+ return file_name;
+ }
+-#endif
+
+ /**
+ * gst_debug_log_valist:
+@@ -497,12 +495,11 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level,
+ g_return_if_fail (function != NULL);
+ g_return_if_fail (format != NULL);
+
+- /* The predefined macro __FILE__ is always the exact path given to the
+- * compiler with MSVC, which may or may not be the basename. We work
+- * around it at runtime to improve the readability. */
+-#ifdef G_OS_WIN32
++ /* The predefined macro __FILE__ can be an absolute path in some build
++ * environments, such as MSVC or out-of-tree cross-compiles. This may
++ * be significantly longer than the filename. We work around it at
++ * runtime to improve the readability. */
+ file = gst_path_basename (file);
+-#endif
+
+ message.message = NULL;
+ message.format = format;
+--
+2.3.0
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch
new file mode 100644
index 0000000..1505cbe
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch
@@ -0,0 +1,70 @@
+From 6914566ed6a89c96973a578aa5ecd01ee68cdcfd Mon Sep 17 00:00:00 2001
+From: Jian <Jian.Li@freescale.com>
+Date: Thu, 14 May 2015 15:49:43 +0800
+Subject: [PATCH] basesink: Fix QoS/lateness checking if subclass implements
+ prepare/prepare_list vfuncs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In basesink functions gst_base_sink_chain_unlocked(), below code is used to
+checking if buffer is late before doing prepare call to save some effort:
+ if (syncable && do_sync)
+ late =
+ gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
+ GST_CLOCK_EARLY, 0, FALSE);
+
+ if (G_UNLIKELY (late))
+ goto dropped;
+
+But this code has problem, it should calculate jitter based on current media
+clock, rather than just passing 0. I found it will drop all the frames when
+rewind in slow speed, such as -2X.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=749258
+
+Upstream-Status: Backport [1.5.1]
+---
+ libs/gst/base/gstbasesink.c | 26 ++++++++++++++++++++++----
+ 1 file changed, 22 insertions(+), 4 deletions(-)
+
+diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
+index a505695..5fb2d6a 100644
+--- a/libs/gst/base/gstbasesink.c
++++ b/libs/gst/base/gstbasesink.c
+@@ -3369,10 +3369,28 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
+ if (G_UNLIKELY (stepped))
+ goto dropped;
+
+- if (syncable && do_sync)
+- late =
+- gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
+- GST_CLOCK_EARLY, 0, FALSE);
++ if (syncable && do_sync) {
++ GstClock *clock;
++
++ GST_OBJECT_LOCK (basesink);
++ clock = GST_ELEMENT_CLOCK (basesink);
++ if (clock && GST_STATE (basesink) == GST_STATE_PLAYING) {
++ GstClockTime base_time;
++ GstClockTime stime;
++ GstClockTime now;
++
++ base_time = GST_ELEMENT_CAST (basesink)->base_time;
++ stime = base_time + gst_base_sink_adjust_time (basesink, rstart);
++ now = gst_clock_get_time (clock);
++ GST_OBJECT_UNLOCK (basesink);
++
++ late =
++ gst_base_sink_is_too_late (basesink, obj, rstart, rstop,
++ GST_CLOCK_EARLY, GST_CLOCK_DIFF (stime, now), FALSE);
++ } else {
++ GST_OBJECT_UNLOCK (basesink);
++ }
++ }
+
+ if (G_UNLIKELY (late))
+ goto dropped;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch
new file mode 100755
index 0000000..d682ee6
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch
@@ -0,0 +1,30 @@
+From 73df2b5c0aea58015788f5a94a3ec65296a688d3 Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Thu, 2 Jul 2015 14:32:21 +0800
+Subject: [PATCH] basesink: Shouldn't drop buffer when sync=false
+
+Shouldn't drop buffer when sync=false
+
+Upstream-Status: Accepted
+
+https://bugzilla.gnome.org/show_bug.cgi?id=751819
+---
+ libs/gst/base/gstbasesink.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c
+index d44e8fc..cd759ac 100644
+--- a/libs/gst/base/gstbasesink.c
++++ b/libs/gst/base/gstbasesink.c
+@@ -3423,7 +3423,7 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad,
+ if (G_UNLIKELY (stepped))
+ goto dropped;
+
+- if (syncable && do_sync) {
++ if (syncable && do_sync && gst_base_sink_get_sync (basesink)) {
+ GstClock *clock;
+
+ GST_OBJECT_LOCK (basesink);
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch
new file mode 100755
index 0000000..f50ce6f
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch
@@ -0,0 +1,167 @@
+From 83bed90c306ed3185d48febf6441177d638f7341 Mon Sep 17 00:00:00 2001
+From: Song Bing <b06498@freescale.com>
+Date: Wed, 24 Dec 2014 10:13:51 +0800
+Subject: [PATCH] inputselector: sticky events haven't send out when active
+ track reach EOS
+
+EOS event hasn't been send to down-element. The resolution is block EOS event
+of inactive pad, send the event after the pad actived.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=740949
+
+Upstream-Status: Backport [1.5.1]
+
+Signed-off-by: Song Bing <b06498@freescale.com>
+---
+ plugins/elements/gstinputselector.c | 58 ++++++++++++++++++++++++++---------
+ plugins/elements/gstinputselector.h | 1 +
+ 2 files changed, 45 insertions(+), 14 deletions(-)
+
+diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c
+index fb50802..4461f7c 100644
+--- a/plugins/elements/gstinputselector.c
++++ b/plugins/elements/gstinputselector.c
+@@ -440,6 +440,17 @@ gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent)
+ }
+
+ static gboolean
++gst_input_selector_eos_wait (GstInputSelector * self, GstSelectorPad * pad)
++{
++ while (!self->eos && !self->flushing && !pad->flushing) {
++ /* we can be unlocked here when we are shutting down (flushing) or when we
++ * get unblocked */
++ GST_INPUT_SELECTOR_WAIT (self);
++ }
++ return self->flushing;
++}
++
++static gboolean
+ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+ {
+ gboolean res = TRUE;
+@@ -486,6 +497,7 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+ case GST_EVENT_FLUSH_START:
+ /* Unblock the pad if it's waiting */
+ selpad->flushing = TRUE;
++ sel->eos = FALSE;
+ GST_INPUT_SELECTOR_BROADCAST (sel);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+@@ -523,21 +535,12 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+ case GST_EVENT_EOS:
+ selpad->eos = TRUE;
+
+- if (forward) {
+- selpad->eos_sent = TRUE;
+- } else {
+- GstSelectorPad *active_selpad;
+-
+- /* If the active sinkpad is in EOS state but EOS
+- * was not sent downstream this means that the pad
+- * got EOS before it was set as active pad and that
+- * the previously active pad got EOS after it was
+- * active
+- */
+- active_selpad = GST_SELECTOR_PAD (active_sinkpad);
+- forward = (active_selpad->eos && !active_selpad->eos_sent);
+- active_selpad->eos_sent = TRUE;
++ if (!forward) {
++ /* blocked until active the sind pad or flush */
++ gst_input_selector_eos_wait (sel, selpad);
++ forward = TRUE;
+ }
++ selpad->eos_sent = TRUE;
+ GST_DEBUG_OBJECT (pad, "received EOS");
+ break;
+ case GST_EVENT_GAP:{
+@@ -676,6 +679,12 @@ gst_input_selector_wait_running_time (GstInputSelector * sel,
+ gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad));
+ active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad);
+
++ if (sel->eos) {
++ GST_DEBUG_OBJECT (sel, "Not waiting because inputselector reach EOS.");
++ GST_INPUT_SELECTOR_UNLOCK (sel);
++ return FALSE;
++ }
++
+ if (seg->format != GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (selpad,
+ "Not waiting because we don't have a TIME segment");
+@@ -971,6 +980,12 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ GST_INPUT_SELECTOR_LOCK (sel);
++ if (sel->eos) {
++ GST_DEBUG_OBJECT (pad, "inputselector eos.");
++ GST_INPUT_SELECTOR_UNLOCK (sel);
++ goto eos;
++ }
++
+ /* wait or check for flushing */
+ if (gst_input_selector_wait (sel, selpad)) {
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+@@ -1151,6 +1166,13 @@ flushing:
+ res = GST_FLOW_FLUSHING;
+ goto done;
+ }
++eos:
++ {
++ GST_DEBUG_OBJECT (pad, "We are eos, discard buffer %p", buf);
++ gst_buffer_unref (buf);
++ res = GST_FLOW_EOS;
++ goto done;
++ }
+ }
+
+ static void gst_input_selector_dispose (GObject * object);
+@@ -1309,6 +1331,7 @@ gst_input_selector_init (GstInputSelector * sel)
+ g_mutex_init (&sel->lock);
+ g_cond_init (&sel->cond);
+ sel->blocked = FALSE;
++ sel->eos = FALSE;
+
+ /* lets give a change for downstream to do something on
+ * active-pad change before we start pushing new buffers */
+@@ -1377,6 +1400,11 @@ gst_input_selector_set_active_pad (GstInputSelector * self, GstPad * pad)
+ GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
+ self->active_sinkpad);
+
++ if (old != new && new->eos && !new->eos_sent) {
++ self->eos = TRUE;
++ GST_INPUT_SELECTOR_BROADCAST (self);
++ }
++
+ return TRUE;
+ }
+
+@@ -1771,6 +1799,7 @@ gst_input_selector_change_state (GstElement * element,
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_INPUT_SELECTOR_LOCK (self);
++ self->eos = FALSE;
+ self->blocked = FALSE;
+ self->flushing = FALSE;
+ GST_INPUT_SELECTOR_UNLOCK (self);
+@@ -1779,6 +1808,7 @@ gst_input_selector_change_state (GstElement * element,
+ /* first unlock before we call the parent state change function, which
+ * tries to acquire the stream lock when going to ready. */
+ GST_INPUT_SELECTOR_LOCK (self);
++ self->eos = TRUE;
+ self->blocked = FALSE;
+ self->flushing = TRUE;
+ GST_INPUT_SELECTOR_BROADCAST (self);
+diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h
+index 96c680f..9bf924f 100644
+--- a/plugins/elements/gstinputselector.h
++++ b/plugins/elements/gstinputselector.h
+@@ -77,6 +77,7 @@ struct _GstInputSelector {
+ GMutex lock;
+ GCond cond;
+ gboolean blocked;
++ gboolean eos;
+ gboolean flushing;
+ };
+
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb
new file mode 100644
index 0000000..c9d3fea
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb
@@ -0,0 +1,16 @@
+DEFAULT_PREFERENCE = "-1"
+
+include gstreamer1.0.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \
+ file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d"
+
+SRC_URI = " \
+ http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \
+ file://0001-Fix-crash-with-gst-inspect.patch \
+ file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \
+ "
+
+SRC_URI[md5sum] = "8155b9c7574ccaa361cc504e8e0e72dc"
+SRC_URI[sha256sum] = "0f9a9817a384b3448c368c23345e5122435caef9c00f1c40d7b1953827b0d8eb"
+S = "${WORKDIR}/gstreamer-${PV}"