[meta-freescale] [meta-fsl-arm][PATCH 1/2] Remove GStreamer 0.10 support
Nikolay Dimitrov
picmaster at mail.bg
Thu Jun 11 07:17:42 PDT 2015
Hi Otavio,
On 06/11/2015 01:59 AM, Otavio Salvador wrote:
> The GStreamer 0.10 support is dead upstream and is being moved away of
> OE-Core so there is no much sense to keep supporting and testing it.
>
> This removes support for i.MX23, i.MX28 and i.MX5 SoCs for video
> decoding using through Freescale proprietary plugin and codecs.
>
> The support for i.MX5 SoCs can now by used in with Linux kernel
> mainline, with GStreamer 1.0, without the need of Freescale
> proprietary codecs.
>
> The patch removes all the metadata specific to the GStreamer 0.10
> support so it allow for an easier identification of the changes and
> code.
>
> Change-Id: I02ae3a104d303037031f02f66866255540c6e678
> Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
> ---
> conf/machine/include/imx-base.inc | 7 +-
> conf/machine/include/mxs-base.inc | 7 -
> recipes-multimedia/gstreamer/gst-fsl-plugin.inc | 3 -
> ...e-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch | 69 -
> ...igure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch | 46 -
> .../gstreamer/gst-fsl-plugin_4.0.3.bb | 40 -
> .../gstplaybin2-rawvideo-support.patch | 28 -
> .../gstreamer/gst-plugins-base_%.bbappend | 11 -
> .../gst-plugins-gl/IMX_MMCODEC_3.0.35_4.0.0.patch | 2438 --------------------
> .../gstreamer/gst-plugins-gl_%.bbappend | 11 -
> .../libfslcodec/libfslcodec_4.0.3.bb | 2 +-
> .../libfslparser/libfslparser_4.0.3.bb | 2 +-
> 12 files changed, 3 insertions(+), 2661 deletions(-)
> delete mode 100644 recipes-multimedia/gstreamer/gst-fsl-plugin/Remove-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch
> delete mode 100644 recipes-multimedia/gstreamer/gst-fsl-plugin/configure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch
> delete mode 100644 recipes-multimedia/gstreamer/gst-fsl-plugin_4.0.3.bb
> delete mode 100644 recipes-multimedia/gstreamer/gst-plugins-base/gstplaybin2-rawvideo-support.patch
> delete mode 100644 recipes-multimedia/gstreamer/gst-plugins-base_%.bbappend
> delete mode 100644 recipes-multimedia/gstreamer/gst-plugins-gl/IMX_MMCODEC_3.0.35_4.0.0.patch
> delete mode 100644 recipes-multimedia/gstreamer/gst-plugins-gl_%.bbappend
>
> diff --git a/conf/machine/include/imx-base.inc b/conf/machine/include/imx-base.inc
> index 1ebfe00..51625eb 100644
> --- a/conf/machine/include/imx-base.inc
> +++ b/conf/machine/include/imx-base.inc
> @@ -51,7 +51,7 @@ MACHINE_SOCARCH_SUFFIX_vf60 = "-vf60"
> MACHINE_SOCARCH_SUFFIX_vf50 = "-vf50"
>
> MACHINE_ARCH_FILTER = "virtual/kernel"
> -MACHINE_SOCARCH_FILTER = "libfslcodec libfslvpuwrap libfslparser gst-fsl-plugins"
> +MACHINE_SOCARCH_FILTER = "libfslcodec libfslvpuwrap libfslparser"
> MACHINE_SOCARCH_FILTER_append_mx5 = " virtual/libgles1 virtual/libgles2 virtual/egl virtual/mesa virtual/libgl"
> MACHINE_SOCARCH_FILTER_append_mx6 = " virtual/libopenvg virtual/libgles1 virtual/libgles2 virtual/egl virtual/mesa virtual/libgl virtual/libg2d"
>
> @@ -79,11 +79,6 @@ MACHINE_EXTRA_RRECOMMENDS_append_mx6 = " ${@base_contains('DISTRO_FEATURES', 'al
> # Extra udev rules
> MACHINE_EXTRA_RRECOMMENDS += "udev-rules-imx"
>
> -# GStreamer 0.10 plugins
> -MACHINE_GSTREAMER_PLUGIN ?= "gst-fsl-plugin"
> -MACHINE_GSTREAMER_PLUGIN_mx3 ?= ""
> -MACHINE_GSTREAMER_PLUGIN_vf ?= ""
> -
> # GStreamer 1.0 plugins
> MACHINE_GSTREAMER_1_0_PLUGIN ?= ""
> MACHINE_GSTREAMER_1_0_PLUGIN_mx6q ?= "gstreamer1.0-plugins-imx-meta"
> diff --git a/conf/machine/include/mxs-base.inc b/conf/machine/include/mxs-base.inc
> index 9139e17..a6c34e1 100644
> --- a/conf/machine/include/mxs-base.inc
> +++ b/conf/machine/include/mxs-base.inc
> @@ -19,17 +19,10 @@ XSERVER = "xserver-xorg \
> xf86-input-evdev \
> xf86-video-fbdev"
>
> -# Gstreamer plugin
> -MACHINE_GSTREAMER_PLUGIN ?= ""
> -MACHINE_GSTREAMER_PLUGIN_mx28 ?= "gst-fsl-plugin"
> -
> # Sub-architecture support
> MACHINE_SOCARCH_SUFFIX ?= ""
> -MACHINE_SOCARCH_SUFFIX_mx23 = "-mx23"
> -MACHINE_SOCARCH_SUFFIX_mx28 = "-mx28"
>
> MACHINE_ARCH_FILTER = "virtual/kernel"
> -MACHINE_SOCARCH_FILTER = "libfslcodec libfslvpuwrap libfslparser gst-fsl-plugins"
>
> INHERIT += "fsl-dynamic-packagearch"
>
> diff --git a/recipes-multimedia/gstreamer/gst-fsl-plugin.inc b/recipes-multimedia/gstreamer/gst-fsl-plugin.inc
> index 59d5071..412ca05 100644
> --- a/recipes-multimedia/gstreamer/gst-fsl-plugin.inc
> +++ b/recipes-multimedia/gstreamer/gst-fsl-plugin.inc
> @@ -7,7 +7,6 @@ LICENSE = "GPLv2 & LGPLv2 & LGPLv2.1"
> SECTION = "multimedia"
>
> DEPENDS = "libfslcodec libfslparser virtual/kernel"
> -DEPENDS_append_mx5 = " imx-lib imx-vpu"
> DEPENDS_append_mx6q = " imx-lib imx-vpu libfslvpuwrap"
> DEPENDS_append_mx6dl = " imx-lib imx-vpu libfslvpuwrap"
> DEPENDS_append_mx6sl = " imx-lib"
> @@ -22,11 +21,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
>
> inherit autotools pkgconfig
>
> -PLATFORM_mx5 = "MX51"
> PLATFORM_mx6 = "MX6"
> PLATFORM_mx6sl = "MX6SL"
> PLATFORM_mx6sx = "MX6SX"
> -PLATFORM_mx28 = "MX28"
>
> # Todo add a mechanism to map posible build targets
> EXTRA_OECONF = "PLATFORM=${PLATFORM} \
> diff --git a/recipes-multimedia/gstreamer/gst-fsl-plugin/Remove-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch b/recipes-multimedia/gstreamer/gst-fsl-plugin/Remove-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch
> deleted file mode 100644
> index 5635275..0000000
> --- a/recipes-multimedia/gstreamer/gst-fsl-plugin/Remove-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch
> +++ /dev/null
> @@ -1,69 +0,0 @@
> -From ce90794a3458af0aed43b8570cf44cd87900185d Mon Sep 17 00:00:00 2001
> -From: Gary Bisson <bisson.gary at gmail.com>
> -Date: Fri, 25 Jul 2014 16:44:53 -0700
> -Subject: [PATCH] Remove use of obsolete VIDIOC_DBG_G_CHIP_IDENT
> -
> -This ioctl should never be used in application as
> -stated in videodev2.h header.
> -Moreover, its use in this plugin was very limited.
> -
> -Signed-off-by: Gary Bisson <bisson.gary at gmail.com>
> ----
> - src/misc/tvsrc/src/mfw_gst_tvsrc.c | 8 --------
> - src/misc/v4l_source/src/mfw_gst_v4lsrc.c | 7 -------
> - 2 files changed, 15 deletions(-)
> -
> -diff --git a/src/misc/tvsrc/src/mfw_gst_tvsrc.c b/src/misc/tvsrc/src/mfw_gst_tvsrc.c
> -index 67e0cd2..f495b6f 100755
> ---- a/src/misc/tvsrc/src/mfw_gst_tvsrc.c
> -+++ b/src/misc/tvsrc/src/mfw_gst_tvsrc.c
> -@@ -450,7 +450,6 @@ mfw_gst_tvsrc_capture_setup (MFWGstTVSRC * v4l_src)
> - struct v4l2_format fmt;
> - struct v4l2_control ctrl;
> - struct v4l2_streamparm parm;
> -- struct v4l2_dbg_chip_ident chip;
> - gint fd_v4l = 0;
> - struct v4l2_mxc_offset off;
> - gint in_width = 0, in_height = 0;
> -@@ -461,13 +460,6 @@ mfw_gst_tvsrc_capture_setup (MFWGstTVSRC * v4l_src)
> - return 0;
> - }
> -
> -- if (ioctl (fd_v4l, VIDIOC_DBG_G_CHIP_IDENT, &chip)) {
> -- g_print ("VIDIOC_DBG_G_CHIP_IDENT failed.\n");
> -- } else
> -- g_print ("sensor chip is %s\n", chip.match.name);
> --
> --
> --
> - if (ioctl (fd_v4l, VIDIOC_G_STD, &id) < 0) {
> - g_print ("VIDIOC_G_STD failed\n");
> - close (fd_v4l);
> -diff --git a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
> -index 2c2e838..85e7ff0 100755
> ---- a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
> -+++ b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
> -@@ -464,7 +464,6 @@ mfw_gst_v4lsrc_capture_setup (MFWGstV4LSrc * v4l_src)
> - struct v4l2_format fmt = {0};
> - struct v4l2_control ctrl = {0};
> - struct v4l2_streamparm parm = {0};
> -- struct v4l2_dbg_chip_ident chip = {0};
> - struct v4l2_frmsizeenum fszenum = {0};
> - gint input;
> - gint fd_v4l = 0;
> -@@ -476,12 +475,6 @@ mfw_gst_v4lsrc_capture_setup (MFWGstV4LSrc * v4l_src)
> - return 0;
> - }
> -
> -- if (ioctl (fd_v4l, VIDIOC_DBG_G_CHIP_IDENT, &chip)) {
> -- GST_ERROR ("VIDIOC_DBG_G_CHIP_IDENT failed.");
> -- } else
> -- GST_INFO ("sensor chip is %s", chip.match.name);
> --
> --
> - if (v4l_src->crop_pixel) {
> - in_width = v4l_src->capture_width - (2 * v4l_src->crop_pixel);
> - in_height = v4l_src->capture_height - (2 * v4l_src->crop_pixel);
> ---
> -2.0.1
> -
> diff --git a/recipes-multimedia/gstreamer/gst-fsl-plugin/configure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch b/recipes-multimedia/gstreamer/gst-fsl-plugin/configure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch
> deleted file mode 100644
> index 16a75fc..0000000
> --- a/recipes-multimedia/gstreamer/gst-fsl-plugin/configure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -From 3312c9fbc80b7b7fe3e28b24c4b8955aa3d5bf18 Mon Sep 17 00:00:00 2001
> -From: Otavio Salvador <otavio at ossystems.com.br>
> -Date: Mon, 27 Apr 2015 15:36:06 -0300
> -Subject: [PATCH] configure.ac: Fix query of CFLAGS to pkgconfig
> -Organization: O.S. Systems Software LTDA.
> -
> -The pkgconfig queries cannot be appended without explicit spaces as
> -pkgconfig does not print trailing spaces by itself.
> -
> -Upstream-Status: Pending
> -
> -Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
> ----
> - configure.ac | 14 +++++++-------
> - 1 file changed, 7 insertions(+), 7 deletions(-)
> -
> -diff --git a/configure.ac b/configure.ac
> -index 86da399..276728f 100755
> ---- a/configure.ac
> -+++ b/configure.ac
> -@@ -175,15 +175,15 @@ AC_CHECK_LIB(rt, clock_gettime)
> - AC_SUBST(RT_CFLAGS)
> - AC_SUBST(RT_LIBS)
> -
> --FSL_MM_CORE_CFLAGS=`$PKG_CONFIG --cflags libfslaudiocodec 2>/dev/null`
> --FSL_MM_CORE_CFLAGS+=`$PKG_CONFIG --cflags libfslvideocodec 2>/dev/null`
> --FSL_MM_CORE_CFLAGS+=`$PKG_CONFIG --cflags libfslparser 2>/dev/null`
> --FSL_MM_CORE_CFLAGS+=`$PKG_CONFIG --cflags libfslvpuwrap 2>/dev/null`
> -+FSL_MM_CORE_CFLAGS="`$PKG_CONFIG --cflags libfslaudiocodec 2>/dev/null` \
> -+ `$PKG_CONFIG --cflags libfslvideocodec 2>/dev/null` \
> -+ `$PKG_CONFIG --cflags libfslparser 2>/dev/null` \
> -+ `$PKG_CONFIG --cflags libfslvpuwrap 2>/dev/null`"
> - AC_SUBST(FSL_MM_CORE_CFLAGS)
> -
> --FSL_MM_CORE_LIBS=`$PKG_CONFIG --libs libfslaudiocodec 2>/dev/null`
> --FSL_MM_CORE_LIBS+=`$PKG_CONFIG --libs libfslvideocodec 2>/dev/null`
> --FSL_MM_CORE_LIBS+=`$PKG_CONFIG --libs libfslparser 2>/dev/null`
> -+FSL_MM_CORE_LIBS="`$PKG_CONFIG --libs libfslaudiocodec 2>/dev/null` \
> -+ `$PKG_CONFIG --libs libfslvideocodec 2>/dev/null` \
> -+ `$PKG_CONFIG --libs libfslparser 2>/dev/null`"
> - AC_SUBST(FSL_MM_CORE_LIBS)
> -
> - EXTRAPLATFORMCFLAGS="-DARM -D_GNUC_"
> ---
> -2.1.4
> -
> diff --git a/recipes-multimedia/gstreamer/gst-fsl-plugin_4.0.3.bb b/recipes-multimedia/gstreamer/gst-fsl-plugin_4.0.3.bb
> deleted file mode 100644
> index 2e23e98..0000000
> --- a/recipes-multimedia/gstreamer/gst-fsl-plugin_4.0.3.bb
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -# Copyright (C) 2013-2015 Freescale Semiconductor
> -# Released under the MIT license (see COPYING.MIT for the terms)
> -
> -require gst-fsl-plugin.inc
> -
> -EXTRA_OECONF += " CROSS_ROOT=${PKG_CONFIG_SYSROOT_DIR}"
> -
> -SRC_URI = "${FSL_MIRROR}/gst-fsl-plugins-${PV}.tar.gz \
> - file://Remove-use-of-obsolete-VIDIOC_DBG_G_CHIP_IDENT.patch \
> - file://configure.ac-Fix-query-of-CFLAGS-to-pkgconfig.patch \
> -"
> -
> -S = "${WORKDIR}/gst-fsl-plugins-${PV}"
> -
> -SRC_URI[md5sum] = "0d69606242ecda0b1c8e397084bb2277"
> -SRC_URI[sha256sum] = "568883b2a1d8d32e4004cb3f123790d0b4286c91c1fac38c9dc8e20bd1250764"
> -
> -DEPENDS_append = " gstreamer gst-plugins-base"
> -RDEPENDS_${PN} += "gst-plugins-good-id3demux"
> -
> -# FIXME: Add all features
> -# feature from excluded mm packages
> -PACKAGECONFIG[ac3] += "--enable-ac3dec,--disable-ac3dec,libfslac3codec,libfslac3codec"
> -# feature from special mm packages
> -PACKAGECONFIG[aacp] += "--enable-aacpdec,--disable-aacpdec,libfslaacpcodec,libfslaacpcodec"
> -MSDEPENDS = "libfslmsparser libfslmscodec"
> -PACKAGECONFIG[wma10dec] +="--enable-wma10dec,--disable-wma10dec,${MSDEPENDS},${MSDEPENDS}"
> -PACKAGECONFIG[wma8enc] +="--enable-wma8enc,--disable-wma8enc,${MSDEPENDS},${MSDEPENDS}"
> -PACKAGECONFIG[wmv9mpdec] +="--enable-wmv9mpdec,--disable-wmv9mpdec,${MSDEPENDS},${MSDEPENDS}"
> -PACKAGECONFIG[wmv78dec] +="--enable-wmv78dec,--disable-wmv78dec,${MSDEPENDS},${MSDEPENDS}"
> -
> -FILES_${PN} = "${libdir}/gstreamer-0.10/*.so ${datadir}"
> -FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
> -FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/pkgconfig/*.pc"
> -FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/*.a"
> -FILES_${PN}-gplay = "${bindir}/gplay"
> -FILES_${PN}-libgplaycore = "${libdir}/libgplaycore${SOLIBS}"
> -FILES_${PN}-libgstfsl = "${libdir}/libgstfsl-0.10${SOLIBS}"
> -
> -COMPATIBLE_MACHINE = "(mx28|mx5|mx6)"
> diff --git a/recipes-multimedia/gstreamer/gst-plugins-base/gstplaybin2-rawvideo-support.patch b/recipes-multimedia/gstreamer/gst-plugins-base/gstplaybin2-rawvideo-support.patch
> deleted file mode 100644
> index 16d89b3..0000000
> --- a/recipes-multimedia/gstreamer/gst-plugins-base/gstplaybin2-rawvideo-support.patch
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -From cecba1668bc8607112a6a2b802c82b6313a0d2b4 Mon Sep 17 00:00:00 2001
> -From: Adrian Alonso <aalonso at freescale.com>
> -Date: Tue, 19 Jun 2012 15:37:56 -0500
> -Subject: [PATCH] gstplaybin2: rawvideo support
> -
> -* Enable support for rawvideo
> -* Support direct rendering for mfw_v4lsink plugin
> -
> -Signed-off-by: Adrian Alonso <aalonso at freescale.com>
> ----
> - gst/playback/gstplaybin2.c | 2 +-
> - 1 file changed, 1 insertion(+), 1 deletion(-)
> -
> -diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c
> -index e01ff6c..9c638ae 100644
> ---- a/gst/playback/gstplaybin2.c
> -+++ b/gst/playback/gstplaybin2.c
> -@@ -456,7 +456,7 @@ struct _GstPlayBinClass
> - #define DEFAULT_SUBURI NULL
> - #define DEFAULT_SOURCE NULL
> - #define DEFAULT_FLAGS GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | \
> -- GST_PLAY_FLAG_SOFT_VOLUME
> -+ GST_PLAY_FLAG_SOFT_VOLUME | GST_PLAY_FLAG_NATIVE_VIDEO
> - #define DEFAULT_N_VIDEO 0
> - #define DEFAULT_CURRENT_VIDEO -1
> - #define DEFAULT_N_AUDIO 0
> ---
> -1.7.10.2
> diff --git a/recipes-multimedia/gstreamer/gst-plugins-base_%.bbappend b/recipes-multimedia/gstreamer/gst-plugins-base_%.bbappend
> deleted file mode 100644
> index ecb2b54..0000000
> --- a/recipes-multimedia/gstreamer/gst-plugins-base_%.bbappend
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -# Freescale gstplaybin2 rawvideo support
> -
> -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
> -
> -SRC_URI_append_mxs = " file://gstplaybin2-rawvideo-support.patch"
> -SRC_URI_append_mx5 = " file://gstplaybin2-rawvideo-support.patch"
> -SRC_URI_append_mx6 = " file://gstplaybin2-rawvideo-support.patch"
> -
> -PACKAGE_ARCH_mxs = "${MACHINE_SOCARCH}"
> -PACKAGE_ARCH_mx5 = "${MACHINE_SOCARCH}"
> -PACKAGE_ARCH_mx6 = "${MACHINE_SOCARCH}"
> diff --git a/recipes-multimedia/gstreamer/gst-plugins-gl/IMX_MMCODEC_3.0.35_4.0.0.patch b/recipes-multimedia/gstreamer/gst-plugins-gl/IMX_MMCODEC_3.0.35_4.0.0.patch
> deleted file mode 100644
> index d4f5576..0000000
> --- a/recipes-multimedia/gstreamer/gst-plugins-gl/IMX_MMCODEC_3.0.35_4.0.0.patch
> +++ /dev/null
> @@ -1,2438 +0,0 @@
> -diff --git a/configure.ac b/configure.ac
> -index 6a4efe0..fa277fa 100644
> ---- a/configure.ac
> -+++ b/configure.ac
> -@@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file
> - dnl initialize autoconf
> - dnl releases only do -Wall, git and prerelease does -Werror too
> - dnl use a three digit version number for releases, and four for git/prerelease
> --AC_INIT(GStreamer OpenGL Plug-ins, 0.10.3,
> -+AC_INIT(GStreamer OpenGL Plug-ins, 0.10.3.1,
> - http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
> - gst-plugins-gl)
> -
> -@@ -61,7 +61,7 @@ dnl AS_LIBTOOL_TAGS
> -
> - AC_LIBTOOL_WIN32_DLL
> - AM_PROG_LIBTOOL
> --AS_PROG_OBJC
> -+AC_PROG_OBJC
> -
> - dnl *** required versions of GStreamer stuff ***
> - GST_REQ=0.10.35
> -@@ -83,6 +83,8 @@ AG_GST_GETTEXT([gst-plugins-gl-$GST_MAJORMINOR])
> -
> - dnl *** check for arguments to configure ***
> -
> -+AG_GST_ARG_DISABLE_FATAL_WARNINGS
> -+
> - AG_GST_ARG_DEBUG
> - AG_GST_ARG_PROFILING
> - AG_GST_ARG_VALGRIND
> -@@ -160,36 +162,48 @@ AG_GST_CHECK_FUNCTION
> - dnl *** checks for dependency libraries ***
> -
> - dnl GLib is required
> --AG_GST_GLIB_CHECK([2.6])
> -+AG_GST_GLIB_CHECK([2.22])
> -
> - #dnl Check for OpenGL, GLU and GLEW
> - echo host is $host
> - case $host in
> - *-linux* | *-cygwin* | *-solaris* | *-netbsd* | *-freebsd* | *-openbsd* | *-kfreebsd* | *-dragonflybsd* | *-gnu* )
> -- AG_GST_CHECK_X
> - save_CPPFLAGS="$CPPFLAGS"
> - save_LIBS="$LIBS"
> -- CPPFLAGS="$CPPFLAGS $X_CFLAGS"
> -- LIBS="$LIBS $X_LIBS"
> -- #PKG_CHECK_MODULES(GL, gl, HAVE_GL=yes, HAVE_GL=no)
> -- AC_CHECK_HEADERS([GL/gl.h], [HAVE_GL=yes], [HAVE_GL=no])
> -- if test "x$HAVE_GL" = "xyes"; then
> -- AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h,, AC_MSG_ERROR([OpenGL is required]))
> -- AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h,, AC_MSG_ERROR([GLU is required]))
> -- AG_GST_CHECK_LIBHEADER(GLEW, GLEW, glewInit,, GL/glew.h,, AC_MSG_ERROR([GLEW is required]))
> -- GL_LIBS="$LIBS $X_LIBS -lGL -lGLU -lGLEW"
> -- GL_BACKEND=x11
> -- GL_TYPE=gl
> -+ AC_CHECK_LIB(EGL, fbGetDisplay, HAVE_EGL_FB=yes, HAVE_EGL_FB=no)
> -+ if test "x$HAVE_EGL_FB" = "xyes"; then
> -+ GL_LIBS="$LIBS -lGLESv2 -lEGL"
> -+ GL_BACKEND=fbES2
> -+ GL_TYPE=gles
> -+ save_CPPFLAGS="$save_CPPFLAGS -DLINUX -DEGL_API_FB"
> - else
> -+ AG_GST_CHECK_X
> -+ CPPFLAGS="$CPPFLAGS $X_CFLAGS -DLINUX"
> -+ LIBS="$LIBS $X_LIBS"
> - AC_CHECK_HEADERS([EGL/egl.h], [HAVE_EGL=yes], [HAVE_EGL=no])
> - if test "x$HAVE_EGL" = "xyes"; then
> - AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h,, AC_MSG_ERROR([EGL is required]))
> -+ s_LIBS="$LIBS"
> -+ LIBS="-lEGL $LIBS"
> - AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h,, AC_MSG_ERROR([OpenGLES2 is required]))
> -- GL_LIBS="$LIBS $X_LIBS -lEGL -lGLESv2"
> -+ LIBS="$s_LIBS"
> -+ GL_LIBS="$LIBS -lGLESv2 -lEGL"
> - GL_BACKEND=x11ES2
> - GL_TYPE=gles
> -+ save_CPPFLAGS="$save_CPPFLAGS -DLINUX"
> - else
> -- AC_MSG_ERROR([GL or EGL is required, consider installing libgl1-mesa-dev])
> -+ #PKG_CHECK_MODULES(GL, gl, HAVE_GL=yes, HAVE_GL=no)
> -+ AC_CHECK_HEADERS([GL/gl.h], [HAVE_GL=yes], [HAVE_GL=no])
> -+ if test "x$HAVE_GL" = "xyes"; then
> -+ AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h,, AC_MSG_ERROR([OpenGL is required]))
> -+ AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h,, AC_MSG_ERROR([GLU is required]))
> -+ AG_GST_CHECK_LIBHEADER(GLEW, GLEW, glewInit,, GL/glew.h,, AC_MSG_ERROR([GLEW is required]))
> -+ GL_LIBS="$LIBS $X_LIBS -lGL -lGLU -lGLEW"
> -+ GL_BACKEND=x11
> -+ GL_TYPE=gl
> -+ else
> -+ AC_MSG_ERROR([GL or EGL is required, consider installing libgl1-mesa-dev])
> -+ fi
> - fi
> - fi
> - CPPFLAGS="$save_CPPFLAGS"
> -@@ -230,6 +244,7 @@ AC_SUBST(GL_BACKEND)
> - AC_SUBST(OPENGL_ES2)
> - AM_CONDITIONAL(GL_BACKEND_X11, test "x$GL_BACKEND" = "xx11")
> - AM_CONDITIONAL(GL_BACKEND_X11ES2, test "x$GL_BACKEND" = "xx11ES2")
> -+AM_CONDITIONAL(GL_BACKEND_FBES2, test "x$GL_BACKEND" = "xfbES2")
> - AM_CONDITIONAL(GL_BACKEND_COCOA, test "x$GL_BACKEND" = "xcocoa")
> - AM_CONDITIONAL(GL_BACKEND_WIN32, test "x$GL_BACKEND" = "xwin32")
> - AM_CONDITIONAL(GL_IS_OPENGL, test "x$GL_TYPE" = "xgl")
> -@@ -251,6 +266,18 @@ AC_SUBST(GLIB_PREFIX)
> - AC_SUBST(GST_PREFIX)
> - AC_SUBST(GSTPB_PREFIX)
> -
> -+GST_FSL_CFLAGS="`$PKG_CONFIG --cflags gstreamer-fsl-$GST_MAJORMINOR`"
> -+GST_FSL_LIBS="`$PKG_CONFIG --libs gstreamer-fsl-$GST_MAJORMINOR`"
> -+AC_CHECK_HEADERS([EGL/eglvivante.h], HAVE_VIVANTE=[yes], HAVE_VIVANTE=[no])
> -+if test "x$HAVE_VIVANTE" = "xyes"; then
> -+ if test "x$GST_FSL_CFLAGS" = "x"; then
> -+ AC_MSG_ERROR([gstreamer-fsl is required])
> -+ fi
> -+ AC_DEFINE(GPU_VIVANTE, [1], [Use Vivante GPU])
> -+fi
> -+AM_CONDITIONAL(USE_VIVANTE, test "x$HAVE_VIVANTE" = "xyes")
> -+AC_SUBST(GST_FSL_CFLAGS)
> -+AC_SUBST(GST_FSL_LIBS)
> -
> - dnl libpng is optional
> - PKG_CHECK_MODULES(LIBPNG, libpng >= 1.0, HAVE_PNG=yes, HAVE_PNG=no)
> -@@ -269,12 +296,15 @@ if test x$with_jpeg_mmx != x; then
> - LIBS="$LIBS -L$with_jpeg_mmx"
> - fi
> - AC_CHECK_LIB(jpeg-mmx, jpeg_set_defaults, HAVE_JPEG="yes", HAVE_JPEG="no")
> --JPEG_LIBS="$LIBS -ljpeg-mmx"
> --LIBS="$OLD_LIBS"
> - if test x$HAVE_JPEG != xyes; then
> - AC_CHECK_LIB(jpeg, jpeg_set_defaults, HAVE_JPEG="yes", HAVE_JPEG="no")
> -- JPEG_LIBS="-ljpeg"
> -- AC_DEFINE(HAVE_JPEG, [1] , [Use libjpeg])
> -+ if test x$HAVE_JPEG = xyes; then
> -+ JPEG_LIBS="-ljpeg"
> -+ AC_DEFINE(HAVE_JPEG, [1] , [Use libjpeg])
> -+ fi
> -+else
> -+ JPEG_LIBS="$LIBS -ljpeg-mmx"
> -+ LIBS="$OLD_LIBS"
> - fi
> - AC_SUBST(HAVE_JPEG)
> - AC_SUBST(JPEG_LIBS)
> -@@ -383,8 +413,14 @@ AG_GST_SET_PACKAGE_RELEASE_DATETIME_WITH_NANO([$PACKAGE_VERSION_NANO],
> - [$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO])
> -
> - dnl define an ERROR_CFLAGS Makefile variable
> --AG_GST_SET_ERROR_CFLAGS($GST_GIT)
> --AG_GST_SET_ERROR_CXXFLAGS($GST_GIT)
> -+AG_GST_SET_ERROR_CFLAGS($FATAL_WARNINGS)
> -+AG_GST_SET_ERROR_CXXFLAGS($FATAL_WARNINGS)
> -+dnl define an ERROR_OBJCFLAGS Makefile variable
> -+AG_GST_SET_ERROR_OBJCFLAGS($FATAL_WARNINGS, [
> -+ -Wmissing-declarations -Wmissing-prototypes -Wredundant-decls
> -+ -Wwrite-strings -Wold-style-definition
> -+ -Winit-self -Wmissing-include-dirs -Wno-multichar
> -+ -Wnested-externs $NO_WARNINGS])
> -
> - dnl define correct level for debugging messages
> - AG_GST_SET_LEVEL_DEFAULT($GST_GIT)
> -@@ -460,8 +496,10 @@ AC_SUBST(DEPRECATED_CFLAGS)
> - dnl every flag in GST_OPTION_CFLAGS can be overridden at make time
> - GST_OPTION_CFLAGS="\$(WARNING_CFLAGS) \$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
> - GST_OPTION_CXXFLAGS="\$(WARNING_CXXFLAGS) \$(ERROR_CXXFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
> -+GST_OPTION_OBJCFLAGS="\$(WARNING_OBJCFLAGS) \$(ERROR_OBJCFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
> - AC_SUBST(GST_OPTION_CFLAGS)
> - AC_SUBST(GST_OPTION_CXXFLAGS)
> -+AC_SUBST(GST_OPTION_OBJCFLAGS)
> -
> - dnl our libraries need to be versioned correctly
> - AC_SUBST(GST_LT_LDFLAGS)
> -@@ -474,10 +512,12 @@ AC_SUBST(GST_PLUGINS_GL_CFLAGS)
> -
> - dnl FIXME: do we want to rename to GST_ALL_* ?
> - dnl add GST_OPTION_CFLAGS, but overridable
> -+GST_OBJCFLAGS="-I\$(top_srcdir)/gst-libs $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_OBJCFLAGS)"
> - GST_CXXFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS $GST_CXXFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CXXFLAGS)"
> - GST_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs $GST_CFLAGS $GLIB_EXTRA_CFLAGS \$(GST_OPTION_CFLAGS)"
> - AC_SUBST(GST_CFLAGS)
> - AC_SUBST(GST_CXXFLAGS)
> -+AC_SUBST(GST_OBJCFLAGS)
> -
> - dnl add GCOV libs because libtool strips -fprofile-arcs -ftest-coverage
> - GST_LIBS="$GST_LIBS \$(GCOV_LIBS)"
> -diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
> -index defa340..18016cf 100644
> ---- a/docs/libs/Makefile.am
> -+++ b/docs/libs/Makefile.am
> -@@ -50,7 +50,7 @@ extra_files =
> - # CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
> - # contains GtkObjects/GObjects and you want to document signals and properties.
> - GTKDOC_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
> -- -I$(top_srcdir)/gst-libs/gst/gl
> -+ -I$(top_srcdir)/gst-libs/gst/gl -I$(top_srcdir) -DHAVE_CONFIG_H -DLINUX
> - GTKDOC_LIBS = \
> - $(top_builddir)/gst-libs/gst/gl/libgstgl- at GST_MAJORMINOR@.la \
> - $(GST_BASE_LIBS)
> -diff --git a/docs/plugins/inspect/plugin-libvisual-gl.xml b/docs/plugins/inspect/plugin-libvisual-gl.xml
> -index da5a3d5..477c811 100644
> ---- a/docs/plugins/inspect/plugin-libvisual-gl.xml
> -+++ b/docs/plugins/inspect/plugin-libvisual-gl.xml
> -@@ -3,10 +3,10 @@
> - <description>libvisual-gl visualization plugins</description>
> - <filename>../../ext/libvisual/.libs/libgstlibvisualgl.so</filename>
> - <basename>libgstlibvisualgl.so</basename>
> -- <version>0.10.3</version>
> -+ <version>0.10.3.1</version>
> - <license>LGPL</license>
> - <source>gst-plugins-gl</source>
> -- <package>GStreamer OpenGL Plug-ins source release</package>
> -+ <package>GStreamer OpenGL Plug-ins git</package>
> - <origin>Unknown package origin</origin>
> - <elements>
> - <element>
> -diff --git a/docs/plugins/inspect/plugin-opengl.xml b/docs/plugins/inspect/plugin-opengl.xml
> -index dbfa9fb..9b7b663 100644
> ---- a/docs/plugins/inspect/plugin-opengl.xml
> -+++ b/docs/plugins/inspect/plugin-opengl.xml
> -@@ -3,10 +3,10 @@
> - <description>OpenGL plugin</description>
> - <filename>../../gst/gl/.libs/libgstopengl.so</filename>
> - <basename>libgstopengl.so</basename>
> -- <version>0.10.3</version>
> -+ <version>0.10.3.1</version>
> - <license>LGPL</license>
> - <source>gst-plugins-gl</source>
> -- <package>GStreamer OpenGL Plug-ins source release</package>
> -+ <package>GStreamer OpenGL Plug-ins git</package>
> - <origin>Unknown package origin</origin>
> - <elements>
> - <element>
> -diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am
> -index 2ef7afc..d55a513 100644
> ---- a/gst-libs/gst/gl/Makefile.am
> -+++ b/gst-libs/gst/gl/Makefile.am
> -@@ -4,6 +4,7 @@ lib_LTLIBRARIES = libgstgl- at GST_MAJORMINOR@.la
> - EXTRA_DIST = \
> - gstglwindow_x11.c \
> - gstglwindow_x11ES2.c \
> -+ gstglwindow_fbES2.c \
> - gstglwindow_win32.c \
> - gstglwindow_winCE.c \
> - gstglwindow_cocoa.m
> -@@ -28,6 +29,13 @@ endif
> - if GL_BACKEND_X11ES2
> - libgstgl_ at GST_MAJORMINOR@_la_SOURCES += gstglwindow_x11ES2.c
> - endif
> -+if GL_BACKEND_FBES2
> -+libgstgl_ at GST_MAJORMINOR@_la_SOURCES += gstglwindow_fbES2.c
> -+endif
> -+
> -+if USE_VIVANTE
> -+libgstgl_ at GST_MAJORMINOR@_la_SOURCES += gstglvivante.c
> -+endif
> -
> - libgstgl_ at GST_MAJORMINOR@includedir = $(includedir)/gstreamer- at GST_MAJORMINOR@/gst/gl
> - libgstgl_ at GST_MAJORMINOR@include_HEADERS = \
> -@@ -41,13 +49,19 @@ libgstgl_ at GST_MAJORMINOR@include_HEADERS = \
> - gstglshadervariables.h \
> - gstglshader.h
> -
> -+if USE_VIVANTE
> -+libgstgl_ at GST_MAJORMINOR@include_HEADERS += gstglvivante.h
> -+endif
> -+
> - libgstgl_ at GST_MAJORMINOR@_la_LIBADD = \
> - $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) -lgstcontroller-$(GST_MAJORMINOR) \
> -+ $(GST_FSL_LIBS) \
> - $(GST_BASE_LIBS) $(GST_LIBS) \
> - $(GL_LIBS)
> -
> - libgstgl_ at GST_MAJORMINOR@_la_CFLAGS = \
> - $(GL_CFLAGS) $(X_CFLAGS) \
> -+ $(GST_FSL_CFLAGS) \
> - $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
> - libgstgl_ at GST_MAJORMINOR@_la_OBJCFLAGS = \
> - $(GL_CFLAGS) $(X_CFLAGS) \
> -diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
> -index 64c6c2c..da2e602 100644
> ---- a/gst-libs/gst/gl/gstgldisplay.c
> -+++ b/gst-libs/gst/gl/gstgldisplay.c
> -@@ -28,6 +28,9 @@
> -
> - #include <gst/video/gstvideosink.h>
> - #include "gstgldisplay.h"
> -+#ifdef GPU_VIVANTE
> -+#include "gstglvivante.h"
> -+#endif
> -
> - #ifndef GLEW_VERSION_MAJOR
> - #define GLEW_VERSION_MAJOR 4
> -@@ -468,6 +471,10 @@ gst_gl_display_init (GstGLDisplay * display, GstGLDisplayClass * klass)
> - #endif
> -
> - display->error_message = NULL;
> -+
> -+#ifdef GPU_VIVANTE
> -+ display->gpu_priv = gst_gl_vivante_new ();
> -+#endif
> - }
> -
> - static void
> -@@ -539,6 +546,12 @@ gst_gl_display_finalize (GObject * object)
> - g_free (display->error_message);
> - display->error_message = NULL;
> - }
> -+#ifdef GPU_VIVANTE
> -+ if (display->gpu_priv) {
> -+ gst_gl_vivante_delete (display->gpu_priv);
> -+ display->gpu_priv = NULL;
> -+ }
> -+#endif
> - }
> -
> -
> -@@ -1135,6 +1148,17 @@ gst_gl_display_thread_init_upload (GstGLDisplay * display)
> - void
> - gst_gl_display_thread_do_upload (GstGLDisplay * display)
> - {
> -+ if (display->gpu_priv &&
> -+ display->upload_width == display->upload_data_width &&
> -+ display->upload_height == display->upload_data_height) {
> -+#ifdef GPU_VIVANTE
> -+ if (gst_gl_vivante_tex_upload (display->gpu_priv, display))
> -+ return;
> -+#endif
> -+ }
> -+
> -+ GST_WARNING ("%s: Fall into non direct uploading", __func__);
> -+
> - gst_gl_display_thread_do_upload_fill (display);
> -
> - switch (display->upload_video_format) {
> -@@ -1950,14 +1974,13 @@ gst_gl_display_on_draw (GstGLDisplay * display)
> -
> - glBegin (GL_QUADS);
> - /* gst images are top-down while opengl plane is bottom-up */
> -- glTexCoord2i (display->redisplay_texture_width, 0);
> -+ glTexCoord2i (1, 0);
> - glVertex2f (1.0f, 1.0f);
> - glTexCoord2i (0, 0);
> - glVertex2f (-1.0f, 1.0f);
> -- glTexCoord2i (0, display->redisplay_texture_height);
> -+ glTexCoord2i (0, 1);
> - glVertex2f (-1.0f, -1.0f);
> -- glTexCoord2i (display->redisplay_texture_width,
> -- display->redisplay_texture_height);
> -+ glTexCoord2i (1, 1);
> - glVertex2f (1.0f, -1.0f);
> - /*glTexCoord2i (display->redisplay_texture_width, 0);
> - glVertex2i (1, -1);
> -@@ -1974,7 +1997,8 @@ gst_gl_display_on_draw (GstGLDisplay * display)
> -
> - #else //OPENGL_ES2
> -
> -- const GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
> -+ GLfloat left, right, top, bottom;
> -+ GLfloat vVertices[] = { 1.0f, 1.0f, 0.0f,
> - 1.0f, 0.0f,
> - -1.0f, 1.0f, 0.0f,
> - 0.0f, 0.0f,
> -@@ -1986,6 +2010,17 @@ gst_gl_display_on_draw (GstGLDisplay * display)
> -
> - GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
> -
> -+#ifdef GPU_VIVANTE
> -+ if (display->gpu_priv) {
> -+ gst_gl_vivante_get_sampler_rect (display->gpu_priv, &left, &right, &top,
> -+ &bottom);
> -+ vVertices[3] = vVertices[18] = right;
> -+ vVertices[4] = vVertices[9] = bottom;
> -+ vVertices[8] = vVertices[13] = left;
> -+ vVertices[14] = vVertices[19] = top;
> -+ }
> -+#endif
> -+
> - glClear (GL_COLOR_BUFFER_BIT);
> -
> - gst_gl_shader_use (display->redisplay_shader);
> -@@ -2067,6 +2102,9 @@ gst_gl_display_glgen_texture (GstGLDisplay * display, GLuint * pTexture,
> - case GST_VIDEO_FORMAT_I420:
> - case GST_VIDEO_FORMAT_YV12:
> - case GST_VIDEO_FORMAT_AYUV:
> -+#ifdef GPU_VIVANTE
> -+ case GST_VIDEO_FORMAT_NV12:
> -+#endif
> - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8,
> - width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
> - break;
> -@@ -2177,11 +2215,11 @@ gst_gl_display_check_framebuffer_status (void)
> - GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
> - break;
> -
> --#if defined(GL_ARB_framebuffer_object)
> -+/*
> - case GL_FRAMEBUFFER_UNDEFINED:
> - GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
> - break;
> --#endif
> -+*/
> -
> - default:
> - GST_ERROR ("General FBO error");
> -@@ -2350,8 +2388,13 @@ gst_gl_display_init_upload (GstGLDisplay * display, GstVideoFormat video_format,
> - display->upload_height = gl_height;
> - display->upload_data_width = video_width;
> - display->upload_data_height = video_height;
> -- gst_gl_window_send_message (display->gl_window,
> -- GST_GL_WINDOW_CB (gst_gl_display_thread_init_upload), display);
> -+
> -+#ifdef GPU_VIVANTE
> -+ if (!gst_gl_vivante_check_format (display->gpu_priv, video_format,
> -+ video_width, video_height))
> -+#endif
> -+ gst_gl_window_send_message (display->gl_window,
> -+ GST_GL_WINDOW_CB (gst_gl_display_thread_init_upload), display);
> - isAlive = display->isAlive;
> - gst_gl_display_unlock (display);
> -
> -@@ -2364,6 +2407,14 @@ gboolean
> - gst_gl_display_do_upload (GstGLDisplay * display, GLuint texture,
> - gint data_width, gint data_height, gpointer data)
> - {
> -+ return gst_gl_display_do_upload_with_meta (display, texture, data_width,
> -+ data_height, data, NULL);
> -+}
> -+
> -+gboolean
> -+gst_gl_display_do_upload_with_meta (GstGLDisplay * display, GLuint texture,
> -+ gint data_width, gint data_height, gpointer data, gpointer meta)
> -+{
> - gboolean isAlive = TRUE;
> -
> - gst_gl_display_lock (display);
> -@@ -2373,6 +2424,7 @@ gst_gl_display_do_upload (GstGLDisplay * display, GLuint texture,
> - display->upload_data_width = data_width;
> - display->upload_data_height = data_height;
> - display->upload_data = data;
> -+ display->upload_meta = meta;
> - gst_gl_window_send_message (display->gl_window,
> - GST_GL_WINDOW_CB (gst_gl_display_thread_do_upload), display);
> - isAlive = display->isAlive;
> -@@ -2975,11 +3027,11 @@ gst_gl_display_thread_do_upload_draw (GstGLDisplay * display)
> -
> - #ifdef OPENGL_ES2
> - GLint viewport_dim[4];
> --
> -- const GLfloat vVertices[] = { 1.0f, -1.0f, 0.0f,
> -+ GLfloat left, right, top, bottom;
> -+ GLfloat vVertices[] = { 1.0f, -1.0f, 0.0f,
> - 1.0f, 0.0f,
> - -1.0f, -1.0f, 0.0f,
> -- 0.0f, .0f,
> -+ 0.0f, 0.0f,
> - -1.0f, 1.0f, 0.0f,
> - 0.0f, 1.0f,
> - 1.0f, 1.0f, 0.0f,
> -@@ -2987,6 +3039,18 @@ gst_gl_display_thread_do_upload_draw (GstGLDisplay * display)
> - };
> -
> - GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
> -+
> -+#ifdef GPU_VIVANTE
> -+ if (display->gpu_priv) {
> -+ gst_gl_vivante_get_sampler_rect (display->gpu_priv, &left, &right, &top,
> -+ &bottom);
> -+ vVertices[3] = vVertices[18] = right;
> -+ vVertices[4] = vVertices[9] = bottom;
> -+ vVertices[8] = vVertices[13] = left;
> -+ vVertices[14] = vVertices[19] = top;
> -+ }
> -+#endif
> -+
> - #endif
> -
> - glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, display->upload_fbo);
> -@@ -3260,13 +3324,13 @@ gst_gl_display_thread_do_upload_draw (GstGLDisplay * display)
> -
> - #ifndef OPENGL_ES2
> - glBegin (GL_QUADS);
> -- glTexCoord2i (display->upload_data_width, 0);
> -+ glTexCoord2i (1, 0);
> - glVertex2f (1.0f, -1.0f);
> - glTexCoord2i (0, 0);
> - glVertex2f (-1.0f, -1.0f);
> -- glTexCoord2i (0, display->upload_data_height);
> -+ glTexCoord2i (0, 1);
> - glVertex2f (-1.0f, 1.0f);
> -- glTexCoord2i (display->upload_data_width, display->upload_data_height);
> -+ glTexCoord2i (1, 1);
> - glVertex2f (1.0f, 1.0f);
> - glEnd ();
> -
> -@@ -3554,11 +3618,11 @@ gst_gl_display_thread_do_download_draw_yuv (GstGLDisplay * display)
> - glBegin (GL_QUADS);
> - glTexCoord2i (0, 0);
> - glVertex2f (-1.0f, -1.0f);
> -- glTexCoord2i (width, 0);
> -+ glTexCoord2i (1, 0);
> - glVertex2f (1.0f, -1.0f);
> -- glTexCoord2i (width, height);
> -+ glTexCoord2i (1, 1);
> - glVertex2f (1.0f, 1.0f);
> -- glTexCoord2i (0, height);
> -+ glTexCoord2i (0, 1);
> - glVertex2f (-1.0f, 1.0f);
> - glEnd ();
> -
> -diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h
> -index f657e1e..31dfe26 100644
> ---- a/gst-libs/gst/gl/gstgldisplay.h
> -+++ b/gst-libs/gst/gl/gstgldisplay.h
> -@@ -229,6 +229,9 @@ struct _GstGLDisplay
> -
> - gchar *error_message;
> -
> -+ gpointer gpu_priv;
> -+ gpointer upload_meta;
> -+ gboolean upload_buf_mapped;
> - };
> -
> -
> -@@ -264,6 +267,8 @@ gboolean gst_gl_display_init_upload (GstGLDisplay * display,
> - gint video_width, gint video_height);
> - gboolean gst_gl_display_do_upload (GstGLDisplay * display, GLuint texture,
> - gint data_width, gint data_height, gpointer data);
> -+gboolean gst_gl_display_do_upload_with_meta (GstGLDisplay * display, GLuint texture,
> -+ gint data_width, gint data_height, gpointer data, gpointer meta);
> - gboolean gst_gl_display_init_download (GstGLDisplay * display,
> - GstVideoFormat video_format, gint width, gint height);
> - gboolean gst_gl_display_do_download (GstGLDisplay * display, GLuint texture,
> -diff --git a/gst-libs/gst/gl/gstglshader.h b/gst-libs/gst/gl/gstglshader.h
> -index ddeb99c..aec69f1 100644
> ---- a/gst-libs/gst/gl/gstglshader.h
> -+++ b/gst-libs/gst/gl/gstglshader.h
> -@@ -21,6 +21,10 @@
> - #ifndef __GST_GL_SHADER_H__
> - #define __GST_GL_SHADER_H__
> -
> -+#ifdef HAVE_CONFIG_H
> -+#include "config.h"
> -+#endif
> -+
> - /* OpenGL 2.0 for Embedded Systems */
> - #ifdef OPENGL_ES2
> - #include <GLES2/gl2.h>
> -diff --git a/gst-libs/gst/gl/gstglshadervariables.c b/gst-libs/gst/gl/gstglshadervariables.c
> -index 69d5b75..be6e58c 100644
> ---- a/gst-libs/gst/gl/gstglshadervariables.c
> -+++ b/gst-libs/gst/gl/gstglshadervariables.c
> -@@ -550,6 +550,7 @@ gst_gl_shadervariable_set (GstGLShader * shader,
> - (float *) ret->value);
> - break;
> -
> -+#ifndef OPENGL_ES2
> - case _mat2x3:
> - gst_gl_shader_set_uniform_matrix_2x3fv (shader, ret->name, ret->count, 0,
> - (float *) ret->value);
> -@@ -569,6 +570,7 @@ gst_gl_shadervariable_set (GstGLShader * shader,
> - gst_gl_shader_set_uniform_matrix_4x2fv (shader, ret->name, ret->count, 0,
> - (float *) ret->value);
> - break;
> -+#endif
> -
> - case _mat3:
> - case _mat3x3:
> -@@ -576,6 +578,7 @@ gst_gl_shadervariable_set (GstGLShader * shader,
> - (float *) ret->value);
> - break;
> -
> -+#ifndef OPENGL_ES2
> - case _mat3x4:
> - gst_gl_shader_set_uniform_matrix_3x4fv (shader, ret->name, ret->count, 0,
> - (float *) ret->value);
> -@@ -585,6 +588,7 @@ gst_gl_shadervariable_set (GstGLShader * shader,
> - gst_gl_shader_set_uniform_matrix_4x3fv (shader, ret->name, ret->count, 0,
> - (float *) ret->value);
> - break;
> -+#endif
> -
> - case _mat4:
> - case _mat4x4:
> -diff --git a/gst-libs/gst/gl/gstglvivante.c b/gst-libs/gst/gl/gstglvivante.c
> -new file mode 100644
> -index 0000000..2b8c9ae
> ---- /dev/null
> -+++ b/gst-libs/gst/gl/gstglvivante.c
> -@@ -0,0 +1,218 @@
> -+/*
> -+ * Copyright (c) 2012, Freescale Semiconductor, Inc. All rights reserved.
> -+ *
> -+ * This library is free software; you can redistribute it and/or
> -+ * modify it under the terms of the GNU Lesser General Public
> -+ * License as published by the Free Software Foundation; either
> -+ * version 2.1 of the License, or (at your option) any later version.
> -+ *
> -+ * This library is distributed in the hope that it will be useful,
> -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> -+ * Lesser General Public License for more details.
> -+ *
> -+ * You should have received a copy of the GNU Lesser General Public
> -+ * License along with this library; if not, write to the Free Software
> -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> -+ */
> -+
> -+#ifdef HAVE_CONFIG_H
> -+#include "config.h"
> -+#endif
> -+
> -+#include <string.h>
> -+
> -+#include "gstglvivante.h"
> -+#include <gstbufmeta.h>
> -+
> -+#define GL_GLEXT_PROTOTYPES
> -+#include <GLES2/gl2ext.h>
> -+
> -+typedef struct
> -+{
> -+ gfloat sampler_left;
> -+ gfloat sampler_right;
> -+ gfloat sampler_top;
> -+ gfloat sampler_bottom;
> -+} GstGLVivante;
> -+
> -+gpointer
> -+gst_gl_vivante_new ()
> -+{
> -+ GstGLVivante *viv = g_new (GstGLVivante, 1);
> -+
> -+ viv->sampler_left = 0.0f;
> -+ viv->sampler_right = 1.0f;
> -+ viv->sampler_top = 1.0f;
> -+ viv->sampler_bottom = 0.0f;
> -+
> -+ return viv;
> -+}
> -+
> -+void
> -+gst_gl_vivante_delete (gpointer gpu)
> -+{
> -+ g_free (gpu);
> -+}
> -+
> -+gboolean
> -+gst_gl_vivante_check_format (gpointer gpu, GstVideoFormat format, gint width,
> -+ gint height)
> -+{
> -+ switch (format) {
> -+ case GST_VIDEO_FORMAT_YV12:
> -+ case GST_VIDEO_FORMAT_NV12:
> -+ if ((width & 15) == 0)
> -+ return TRUE;
> -+ break;
> -+ default:
> -+ GST_WARNING ("GstVideoFormat %d not supported by vivante", format);
> -+ }
> -+ GST_WARNING
> -+ ("Check format %d, width,height [%d, %d] failed, can't direct render",
> -+ format, width, height);
> -+ return FALSE;
> -+}
> -+
> -+GLenum
> -+gst_gl_vivante_get_gl_format (gpointer gpu, GstVideoFormat format)
> -+{
> -+ switch (format) {
> -+ case GST_VIDEO_FORMAT_YV12:
> -+ return GL_VIV_YV12;
> -+ case GST_VIDEO_FORMAT_NV12:
> -+ return GL_VIV_NV12;
> -+ default:
> -+ GST_WARNING ("GstVideoFormat %d not supported by vivante", format);
> -+ }
> -+ return GL_NONE;
> -+}
> -+
> -+static gboolean
> -+format_is_yuv (GstVideoFormat format)
> -+{
> -+ switch (format) {
> -+ case GST_VIDEO_FORMAT_YV12:
> -+ case GST_VIDEO_FORMAT_NV12:
> -+ return TRUE;
> -+ default:
> -+ return FALSE;
> -+ }
> -+}
> -+
> -+static void
> -+copy_data_to_gpu (gpointer gpu, GstVideoFormat format, gpointer data,
> -+ gpointer planes[], gint width, gint height)
> -+{
> -+ gint src_height;
> -+ gint src_y_size, src_uv_size;
> -+ gint dst_y_size, dst_uv_size;
> -+
> -+ /* width is already 16 aligned */
> -+ switch (format) {
> -+ case GST_VIDEO_FORMAT_YV12:
> -+ src_height = GST_ROUND_UP_2 (height);
> -+ src_y_size = width * src_height;
> -+ src_uv_size = src_y_size / 4;
> -+ dst_y_size = width * height;
> -+ dst_uv_size = dst_y_size / 4;
> -+ memcpy (planes[0], data, dst_y_size);
> -+ memcpy (planes[1], (gchar *) data + src_y_size, dst_uv_size);
> -+ memcpy (planes[2], (gchar *) data + src_y_size + src_uv_size,
> -+ dst_uv_size);
> -+ break;
> -+ case GST_VIDEO_FORMAT_NV12:
> -+ src_height = GST_ROUND_UP_2 (height);
> -+ src_y_size = width * src_height;
> -+ dst_y_size = width * height;
> -+ dst_uv_size = dst_y_size / 2;
> -+ memcpy (planes[0], data, dst_y_size);
> -+ memcpy (planes[1], (gchar *) data + src_y_size, dst_uv_size);
> -+ break;
> -+ default:
> -+ return;
> -+ }
> -+}
> -+
> -+gboolean
> -+gst_gl_vivante_tex_upload (gpointer gpu, GstGLDisplay * display)
> -+{
> -+ GstVideoFormat format = display->upload_video_format;
> -+ gint width = display->upload_data_width;
> -+ gint height = display->upload_data_height;
> -+ gpointer data = display->upload_data;
> -+ GstBufferMeta *meta = GST_BUFFER_META (display->upload_meta);
> -+ gpointer planes[3];
> -+ GLuint physical = meta ? (GLuint) (meta->physical_data) : ~0U;
> -+
> -+ GST_INFO ("gst_gl_vivante_tex_upload physical address 0x%x, data %p, tex %d",
> -+ physical, data, display->upload_outtex);
> -+
> -+ if (!gst_gl_vivante_check_format (gpu, format, width, height))
> -+ return FALSE;
> -+
> -+ glBindTexture (GL_TEXTURE_2D, display->upload_outtex);
> -+
> -+ if (((guint) data & 0x3F) != 0) { /* not aligned, need additional copy */
> -+ if (!format_is_yuv (format)) { /* rgb is left to default handler */
> -+ GST_WARNING ("Format %d unaligned data is not supported for"
> -+ " direct rendering", format);
> -+ return FALSE;
> -+ }
> -+
> -+ GST_WARNING ("Data not aligned, need additional copy");
> -+
> -+ glTexDirectVIV (GL_TEXTURE_2D, width, height,
> -+ gst_gl_vivante_get_gl_format (gpu, format), (GLvoid **) & planes);
> -+ if (glGetError () != GL_NO_ERROR)
> -+ return FALSE;
> -+
> -+ copy_data_to_gpu (gpu, format, data, planes, width, height);
> -+ } else {
> -+ glTexDirectVIVMap (GL_TEXTURE_2D, width, height,
> -+ gst_gl_vivante_get_gl_format (gpu, format), &data, &physical);
> -+ if (glGetError () != GL_NO_ERROR)
> -+ return FALSE;
> -+ display->upload_buf_mapped = TRUE;
> -+ }
> -+
> -+ glTexDirectInvalidateVIV (GL_TEXTURE_2D);
> -+
> -+ return TRUE;
> -+}
> -+
> -+void
> -+gst_gl_vivante_set_caps (gpointer gpu, GstCaps * caps)
> -+{
> -+ GstVideoFormat format;
> -+ gint width;
> -+ gint height;
> -+ GstStructure *s;
> -+ gint left = 0, right = 0, top = 0, bottom = 0;
> -+ GstGLVivante *viv = (GstGLVivante *) gpu;
> -+
> -+ s = gst_caps_get_structure (caps, 0);
> -+ gst_structure_get_int (s, "crop-left", &left);
> -+ gst_structure_get_int (s, "crop-top", &top);
> -+ gst_structure_get_int (s, "crop-right", &right);
> -+ gst_structure_get_int (s, "crop-bottom", &bottom);
> -+
> -+ gst_video_format_parse_caps (caps, &format, &width, &height);
> -+
> -+ viv->sampler_left = ((gfloat) left) / width;
> -+ viv->sampler_right = ((gfloat) (width - right)) / width;
> -+ viv->sampler_top = ((gfloat) (height - bottom)) / height;
> -+ viv->sampler_bottom = ((gfloat) top) / height;
> -+}
> -+
> -+void
> -+gst_gl_vivante_get_sampler_rect (gpointer gpu, gfloat * left, gfloat * right,
> -+ gfloat * top, gfloat * bottom)
> -+{
> -+ GstGLVivante *viv = (GstGLVivante *) gpu;
> -+
> -+ *left = viv->sampler_left;
> -+ *right = viv->sampler_right;
> -+ *top = viv->sampler_top;
> -+ *bottom = viv->sampler_bottom;
> -+}
> -diff --git a/gst-libs/gst/gl/gstglvivante.h b/gst-libs/gst/gl/gstglvivante.h
> -new file mode 100644
> -index 0000000..f763f80
> ---- /dev/null
> -+++ b/gst-libs/gst/gl/gstglvivante.h
> -@@ -0,0 +1,41 @@
> -+/*
> -+ * Copyright (c) 2012, Freescale Semiconductor, Inc. All rights reserved.
> -+ *
> -+ * This library is free software; you can redistribute it and/or
> -+ * modify it under the terms of the GNU Library General Public
> -+ * License as published by the Free Software Foundation; either
> -+ * version 2 of the License, or (at your option) any later version.
> -+ *
> -+ * This library is distributed in the hope that it will be useful,
> -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> -+ * Library General Public License for more details.
> -+ *
> -+ * You should have received a copy of the GNU Library General Public
> -+ * License along with this library; if not, write to the
> -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
> -+ * Boston, MA 02111-1307, USA.
> -+ */
> -+
> -+#ifndef __GST_GL_VIVANTE_H__
> -+#define __GST_GL_VIVANTE_H__
> -+
> -+#include "gstgldisplay.h"
> -+#include <GLES2/gl2.h>
> -+
> -+G_BEGIN_DECLS
> -+
> -+gpointer gst_gl_vivante_new();
> -+void gst_gl_vivante_delete(gpointer gpu);
> -+
> -+gboolean gst_gl_vivante_check_format(gpointer gpu, GstVideoFormat format, gint width, gint height);
> -+GLenum gst_gl_vivante_get_gl_format(gpointer gpu, GstVideoFormat format);
> -+
> -+gboolean gst_gl_vivante_tex_upload (gpointer gpu, GstGLDisplay * display);
> -+void gst_gl_vivante_set_caps (gpointer gpu, GstCaps * caps);
> -+
> -+void gst_gl_vivante_get_sampler_rect (gpointer gpu, gfloat *left, gfloat *right, gfloat *top, gfloat *bottom);
> -+
> -+G_END_DECLS
> -+
> -+#endif /* __GST_GL_VIVANTE_H__ */
> -diff --git a/gst-libs/gst/gl/gstglwindow.h b/gst-libs/gst/gl/gstglwindow.h
> -index 499d47a..c3cafb2 100644
> ---- a/gst-libs/gst/gl/gstglwindow.h
> -+++ b/gst-libs/gst/gl/gstglwindow.h
> -@@ -21,6 +21,10 @@
> - #ifndef __GST_GL_WINDOW_H__
> - #define __GST_GL_WINDOW_H__
> -
> -+#ifdef HAVE_CONFIG_H
> -+#include "config.h"
> -+#endif
> -+
> - /* OpenGL 2.0 for Embedded Systems */
> - #ifdef OPENGL_ES2
> - #undef UNICODE
> -diff --git a/gst-libs/gst/gl/gstglwindow_fbES2.c b/gst-libs/gst/gl/gstglwindow_fbES2.c
> -new file mode 100644
> -index 0000000..57c02e1
> ---- /dev/null
> -+++ b/gst-libs/gst/gl/gstglwindow_fbES2.c
> -@@ -0,0 +1,709 @@
> -+/*
> -+ * GStreamer
> -+ * Copyright (C) 2008 Julien Isorce <julien.isorce at gmail.com>
> -+ *
> -+ * This library is free software; you can redistribute it and/or
> -+ * modify it under the terms of the GNU Library General Public
> -+ * License as published by the Free Software Foundation; either
> -+ * version 2 of the License, or (at your option) any later version.
> -+ *
> -+ * This library is distributed in the hope that it will be useful,
> -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> -+ * Library General Public License for more details.
> -+ *
> -+ * You should have received a copy of the GNU Library General Public
> -+ * License along with this library; if not, write to the
> -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
> -+ * Boston, MA 02111-1307, USA.
> -+ */
> -+
> -+#ifdef HAVE_CONFIG_H
> -+#include "config.h"
> -+#endif
> -+
> -+#include "gstglwindow.h"
> -+#include "EGL/eglvivante.h"
> -+
> -+#include <locale.h>
> -+#include <stdio.h>
> -+#include <stdlib.h>
> -+
> -+#define GST_GL_WINDOW_GET_PRIVATE(o) \
> -+ (G_TYPE_INSTANCE_GET_PRIVATE((o), GST_GL_TYPE_WINDOW, GstGLWindowPrivate))
> -+
> -+/* A gl window is created and deleted in a thread dedicated to opengl calls
> -+ The name contains "window" because an opengl context is used in cooperation
> -+ with a window */
> -+
> -+const gchar *EGLErrorString ();
> -+
> -+enum
> -+{
> -+ ARG_0,
> -+ ARG_DISPLAY
> -+};
> -+
> -+enum GstGLFbEventType
> -+{
> -+ FB_EVENT_DRAW,
> -+ FB_EVENT_CALLBACK,
> -+ FB_EVENT_QUIT,
> -+};
> -+
> -+typedef struct _GstGLFbEvent
> -+{
> -+ enum GstGLFbEventType type;
> -+ GstGLWindowCB callback;
> -+ gpointer data;
> -+} GstGLFbEvent;
> -+
> -+struct _GstGLWindowPrivate
> -+{
> -+ /* X is not thread safe */
> -+ GMutex *lock;
> -+ GCond *cond_send_message;
> -+ GCond *cond_queue_message;
> -+ gboolean running;
> -+ gboolean allow_extra_expose_events;
> -+
> -+ /* fb queue */
> -+ GList *queue;
> -+
> -+ /* X context */
> -+ gchar *display_name;
> -+ gint device_width;
> -+ gint device_height;
> -+
> -+ EGLNativeWindowType internal_win_id;
> -+ EGLNativeDisplayType device;
> -+
> -+ /* EGL */
> -+ EGLContext gl_context;
> -+ EGLDisplay gl_display;
> -+ EGLSurface gl_surface;
> -+
> -+ /* frozen callbacks */
> -+ GstGLWindowCB draw_cb;
> -+ gpointer draw_data;
> -+ GstGLWindowCB2 resize_cb;
> -+ gpointer resize_data;
> -+ GstGLWindowCB close_cb;
> -+ gpointer close_data;
> -+};
> -+
> -+G_DEFINE_TYPE (GstGLWindow, gst_gl_window, G_TYPE_OBJECT);
> -+
> -+#undef G_LOG_DOMAIN
> -+#define G_LOG_DOMAIN "GstGLWindow"
> -+
> -+gboolean _gst_gl_window_debug = FALSE;
> -+
> -+void
> -+gst_gl_window_init_platform ()
> -+{
> -+}
> -+
> -+static void
> -+free_event (gpointer event, gpointer data)
> -+{
> -+ g_slice_free (GstGLFbEvent, event);
> -+}
> -+
> -+/* Must be called in the gl thread */
> -+static void
> -+gst_gl_window_finalize (GObject * object)
> -+{
> -+ GstGLWindow *window = GST_GL_WINDOW (object);
> -+ GstGLWindowPrivate *priv = window->priv;
> -+ gboolean ret = TRUE;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ g_debug ("about to finalize gl window\n");
> -+
> -+ if (priv->gl_context) {
> -+ ret =
> -+ eglMakeCurrent (priv->gl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
> -+ EGL_NO_CONTEXT);
> -+ if (!ret)
> -+ g_debug ("failed to release opengl context\n");
> -+
> -+ eglDestroyContext (priv->gl_display, priv->gl_context);
> -+ }
> -+
> -+ if (priv->gl_display)
> -+ eglTerminate (priv->gl_display);
> -+
> -+ if (priv->device)
> -+ fbDestroyDisplay (priv->device);
> -+
> -+ g_list_foreach (priv->queue, free_event, NULL);
> -+ g_list_free (priv->queue);
> -+ priv->queue = NULL;
> -+
> -+ if (priv->cond_send_message) {
> -+ g_cond_free (priv->cond_send_message);
> -+ priv->cond_send_message = NULL;
> -+ }
> -+
> -+ if (priv->cond_queue_message) {
> -+ g_cond_free (priv->cond_queue_message);
> -+ priv->cond_queue_message = NULL;
> -+ }
> -+
> -+ g_mutex_unlock (priv->lock);
> -+
> -+ if (priv->lock) {
> -+ g_mutex_free (priv->lock);
> -+ priv->lock = NULL;
> -+ }
> -+
> -+ G_OBJECT_CLASS (gst_gl_window_parent_class)->finalize (object);
> -+}
> -+
> -+static void
> -+gst_gl_window_set_property (GObject * object, guint prop_id,
> -+ const GValue * value, GParamSpec * pspec)
> -+{
> -+ GstGLWindow *window;
> -+ GstGLWindowPrivate *priv;
> -+
> -+ g_return_if_fail (GST_GL_IS_WINDOW (object));
> -+
> -+ window = GST_GL_WINDOW (object);
> -+
> -+ priv = window->priv;
> -+
> -+ switch (prop_id) {
> -+ case ARG_DISPLAY:
> -+ priv->display_name = g_strdup (g_value_get_string (value));
> -+ break;
> -+ default:
> -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
> -+ break;
> -+ }
> -+}
> -+
> -+static void
> -+gst_gl_window_get_property (GObject * object, guint prop_id,
> -+ GValue * value, GParamSpec * pspec)
> -+{
> -+ GstGLWindow *window;
> -+ GstGLWindowPrivate *priv;
> -+
> -+ g_return_if_fail (GST_GL_IS_WINDOW (object));
> -+
> -+ window = GST_GL_WINDOW (object);
> -+
> -+ priv = window->priv;
> -+
> -+ switch (prop_id) {
> -+ case ARG_DISPLAY:
> -+ g_value_set_string (value, priv->display_name);
> -+ break;
> -+ default:
> -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
> -+ break;
> -+ }
> -+}
> -+
> -+static void
> -+gst_gl_window_log_handler (const gchar * domain, GLogLevelFlags flags,
> -+ const gchar * message, gpointer user_data)
> -+{
> -+ if (_gst_gl_window_debug) {
> -+ g_log_default_handler (domain, flags, message, user_data);
> -+ }
> -+}
> -+
> -+static void
> -+gst_gl_window_class_init (GstGLWindowClass * klass)
> -+{
> -+ GObjectClass *obj_class = G_OBJECT_CLASS (klass);
> -+
> -+ g_type_class_add_private (klass, sizeof (GstGLWindowPrivate));
> -+
> -+ obj_class->finalize = gst_gl_window_finalize;
> -+ obj_class->set_property = gst_gl_window_set_property;
> -+ obj_class->get_property = gst_gl_window_get_property;
> -+
> -+ g_object_class_install_property (obj_class, ARG_DISPLAY,
> -+ g_param_spec_string ("display", "Display", "X Display name", NULL,
> -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
> -+}
> -+
> -+static void
> -+gst_gl_window_init (GstGLWindow * window)
> -+{
> -+ GstGLWindowPrivate *priv = NULL;
> -+ window->priv = GST_GL_WINDOW_GET_PRIVATE (window);
> -+ priv = window->priv;
> -+
> -+ if (g_getenv ("GST_GL_WINDOW_DEBUG") != NULL)
> -+ _gst_gl_window_debug = TRUE;
> -+
> -+ g_log_set_handler ("GstGLWindow", G_LOG_LEVEL_DEBUG,
> -+ gst_gl_window_log_handler, NULL);
> -+
> -+ priv->lock = NULL;
> -+ priv->cond_send_message = NULL;
> -+ priv->running = FALSE;
> -+ priv->allow_extra_expose_events = FALSE;
> -+
> -+ priv->queue = NULL;
> -+
> -+ /* X context */
> -+ priv->display_name = NULL;
> -+ priv->device_width = 0;
> -+ priv->device_height = 0;
> -+
> -+ /* EGL */
> -+ priv->gl_context = EGL_NO_CONTEXT;
> -+ priv->gl_display = 0;
> -+ priv->gl_surface = EGL_NO_SURFACE;
> -+
> -+ /* frozen callbacks */
> -+ priv->draw_cb = NULL;
> -+ priv->draw_data = NULL;
> -+ priv->resize_cb = NULL;
> -+ priv->resize_data = NULL;
> -+ priv->close_cb = NULL;
> -+ priv->close_data = NULL;
> -+}
> -+
> -+/* Must be called in the gl thread */
> -+GstGLWindow *
> -+gst_gl_window_new (gulong external_gl_context)
> -+{
> -+ GstGLWindow *window = g_object_new (GST_GL_TYPE_WINDOW, NULL);
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ EGLint config_attrib[] = {
> -+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
> -+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
> -+ EGL_DEPTH_SIZE, 16,
> -+ EGL_NONE
> -+ };
> -+
> -+ EGLint context_attrib[] = {
> -+ EGL_CONTEXT_CLIENT_VERSION, 2,
> -+ EGL_NONE
> -+ };
> -+
> -+ EGLint majorVersion;
> -+ EGLint minorVersion;
> -+ EGLint numConfigs;
> -+ EGLConfig config;
> -+
> -+ int index = 0;
> -+
> -+ setlocale (LC_NUMERIC, "C");
> -+
> -+ priv->lock = g_mutex_new ();
> -+ priv->cond_send_message = g_cond_new ();
> -+ priv->cond_queue_message = g_cond_new ();
> -+ priv->running = TRUE;
> -+ priv->allow_extra_expose_events = TRUE;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ if (priv->display_name)
> -+ index = strtol (priv->display_name, NULL, 0);
> -+
> -+ priv->device = fbGetDisplayByIndex (index);
> -+
> -+ if (!priv->device) {
> -+ g_debug ("failed to get fb display by index %d\n", index);
> -+ goto failure;
> -+ }
> -+
> -+ priv->internal_win_id = fbCreateWindow (priv->device, -1, -1, 0, 0);
> -+
> -+ fbGetDisplayGeometry (priv->device, &priv->device_width,
> -+ &priv->device_height);
> -+
> -+ priv->gl_display = eglGetDisplay (priv->device);
> -+
> -+ if (eglInitialize (priv->gl_display, &majorVersion, &minorVersion))
> -+ g_debug ("egl initialized: %d.%d\n", majorVersion, minorVersion);
> -+ else {
> -+ g_debug ("failed to initialize egl %ld, %s\n", (gulong) priv->gl_display,
> -+ EGLErrorString ());
> -+ goto failure;
> -+ }
> -+
> -+ if (eglChooseConfig (priv->gl_display, config_attrib, &config, 1,
> -+ &numConfigs))
> -+ g_debug ("config set: %ld, %ld\n", (gulong) config, (gulong) numConfigs);
> -+ else {
> -+ g_debug ("failed to set config %ld, %s\n", (gulong) priv->gl_display,
> -+ EGLErrorString ());
> -+ goto failure;
> -+ }
> -+
> -+ priv->gl_surface =
> -+ eglCreateWindowSurface (priv->gl_display, config, priv->internal_win_id,
> -+ NULL);
> -+ if (priv->gl_surface != EGL_NO_SURFACE)
> -+ g_debug ("surface created: %ld\n", (gulong) priv->gl_surface);
> -+ else {
> -+ g_debug ("failed to create surface %ld, %ld, %ld, %s\n",
> -+ (gulong) priv->gl_display, (gulong) priv->gl_surface,
> -+ (gulong) priv->gl_display, EGLErrorString ());
> -+ goto failure;
> -+ }
> -+
> -+ g_debug ("about to create gl context\n");
> -+
> -+ priv->gl_context =
> -+ eglCreateContext (priv->gl_display, config,
> -+ (EGLContext) (guint) external_gl_context, context_attrib);
> -+
> -+ if (priv->gl_context != EGL_NO_CONTEXT)
> -+ g_debug ("gl context created: %ld\n", (gulong) priv->gl_context);
> -+ else {
> -+ g_debug ("failed to create glcontext %ld, %ld, %s\n",
> -+ (gulong) priv->gl_context, (gulong) priv->gl_display,
> -+ EGLErrorString ());
> -+ goto failure;
> -+ }
> -+
> -+ if (!eglMakeCurrent (priv->gl_display, priv->gl_surface, priv->gl_surface,
> -+ priv->gl_context)) {
> -+ g_debug ("failed to make opengl context current %ld, %s\n",
> -+ (gulong) priv->gl_display, EGLErrorString ());
> -+ goto failure;
> -+ }
> -+
> -+ g_mutex_unlock (priv->lock);
> -+ printf ("device WxH:%dx%d\n", priv->device_width, priv->device_height);
> -+ return window;
> -+
> -+failure:
> -+ g_mutex_unlock (priv->lock);
> -+ g_object_unref (G_OBJECT (window));
> -+ return NULL;
> -+}
> -+
> -+GQuark
> -+gst_gl_window_error_quark (void)
> -+{
> -+ return g_quark_from_static_string ("gst-gl-window-error");
> -+}
> -+
> -+gulong
> -+gst_gl_window_get_internal_gl_context (GstGLWindow * window)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+ return (gulong) priv->gl_context;
> -+}
> -+
> -+void
> -+callback_activate_gl_context (GstGLWindowPrivate * priv)
> -+{
> -+ if (!eglMakeCurrent (priv->gl_display, priv->gl_surface, priv->gl_surface,
> -+ priv->gl_context))
> -+ g_debug ("failed to activate opengl context %lud\n",
> -+ (gulong) priv->gl_context);
> -+}
> -+
> -+void
> -+callback_inactivate_gl_context (GstGLWindowPrivate * priv)
> -+{
> -+ if (!eglMakeCurrent (priv->device, EGL_NO_SURFACE, EGL_NO_SURFACE,
> -+ EGL_NO_CONTEXT))
> -+ g_debug ("failed to inactivate opengl context %lud\n",
> -+ (gulong) priv->gl_context);
> -+}
> -+
> -+void
> -+gst_gl_window_activate_gl_context (GstGLWindow * window, gboolean activate)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+ if (activate)
> -+ gst_gl_window_send_message (window,
> -+ GST_GL_WINDOW_CB (callback_activate_gl_context), priv);
> -+ else
> -+ gst_gl_window_send_message (window,
> -+ GST_GL_WINDOW_CB (callback_inactivate_gl_context), priv);
> -+}
> -+
> -+/* Not called by the gl thread */
> -+void
> -+gst_gl_window_set_external_window_id (GstGLWindow * window, gulong id)
> -+{
> -+}
> -+
> -+void
> -+gst_gl_window_set_draw_callback (GstGLWindow * window, GstGLWindowCB callback,
> -+ gpointer data)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ priv->draw_cb = callback;
> -+ priv->draw_data = data;
> -+
> -+ g_mutex_unlock (priv->lock);
> -+}
> -+
> -+void
> -+gst_gl_window_set_resize_callback (GstGLWindow * window,
> -+ GstGLWindowCB2 callback, gpointer data)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ priv->resize_cb = callback;
> -+ priv->resize_data = data;
> -+
> -+ g_mutex_unlock (priv->lock);
> -+}
> -+
> -+void
> -+gst_gl_window_set_close_callback (GstGLWindow * window, GstGLWindowCB callback,
> -+ gpointer data)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ priv->close_cb = callback;
> -+ priv->close_data = data;
> -+
> -+ g_mutex_unlock (priv->lock);
> -+}
> -+
> -+/* Called in the gl thread */
> -+void
> -+gst_gl_window_draw_unlocked (GstGLWindow * window, gint width, gint height)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ if (priv->running && priv->allow_extra_expose_events) {
> -+ GstGLFbEvent *event = g_slice_new0 (GstGLFbEvent);
> -+ event->type = FB_EVENT_DRAW;
> -+ priv->queue = g_list_append (priv->queue, event);
> -+ g_cond_signal (priv->cond_queue_message);
> -+ /* block until opengl calls have been executed in the gl thread */
> -+ g_cond_wait (priv->cond_send_message, priv->lock);
> -+ }
> -+}
> -+
> -+/* Not called by the gl thread */
> -+void
> -+gst_gl_window_draw (GstGLWindow * window, gint width, gint height)
> -+{
> -+ if (window) {
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ if (priv->running) {
> -+ GstGLFbEvent *event = g_slice_new0 (GstGLFbEvent);
> -+ event->type = FB_EVENT_DRAW;
> -+ priv->queue = g_list_append (priv->queue, event);
> -+ g_cond_signal (priv->cond_queue_message);
> -+ /* block until opengl calls have been executed in the gl thread */
> -+ g_cond_wait (priv->cond_send_message, priv->lock);
> -+ }
> -+
> -+ g_mutex_unlock (priv->lock);
> -+ }
> -+}
> -+
> -+static void
> -+gst_gl_fb_queue_flush (GList * queue, GCond * cond)
> -+{
> -+ GstGLFbEvent *event;
> -+ GList *first;
> -+
> -+ while ((first = g_list_first (queue))) {
> -+ event = first->data;
> -+ queue = g_list_delete_link (queue, first);
> -+
> -+ if (event->type == FB_EVENT_CALLBACK) {
> -+ g_debug ("execute last pending custom x events\n");
> -+
> -+ if (!event->callback || !event->data)
> -+ g_debug ("custom cb not initialized\n");
> -+
> -+ event->callback (event->data);
> -+
> -+ g_cond_signal (cond);
> -+ }
> -+
> -+ g_slice_free (GstGLFbEvent, event);
> -+ }
> -+}
> -+
> -+/* Called in the gl thread */
> -+void
> -+gst_gl_window_run_loop (GstGLWindow * window)
> -+{
> -+ GstGLWindowPrivate *priv = window->priv;
> -+ GstGLFbEvent *event;
> -+ GList *first;
> -+
> -+ g_debug ("begin loop\n");
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ while (priv->running) {
> -+
> -+ if (!priv->queue)
> -+ g_cond_wait (priv->cond_queue_message, priv->lock);
> -+
> -+ first = g_list_first (priv->queue);
> -+ event = first->data;
> -+ priv->queue = g_list_delete_link (priv->queue, first);
> -+
> -+ // use in generic/cube and other related uses
> -+ priv->allow_extra_expose_events = g_list_length (priv->queue) <= 2;
> -+
> -+ switch (event->type) {
> -+ case FB_EVENT_CALLBACK:
> -+ {
> -+ if (priv->running) {
> -+ if (!event->callback || !event->data)
> -+ g_debug ("custom cb not initialized\n");
> -+ event->callback (event->data);
> -+ g_cond_signal (priv->cond_send_message);
> -+ }
> -+ break;
> -+ }
> -+
> -+ case FB_EVENT_QUIT:
> -+ {
> -+ g_debug ("Quit loop message %lud\n", (gulong) priv->internal_win_id);
> -+
> -+ /* exit loop */
> -+ priv->running = FALSE;
> -+
> -+ /* make sure last pendings send message calls are executed */
> -+ gst_gl_fb_queue_flush (priv->queue, priv->cond_send_message);
> -+ priv->queue = NULL;
> -+
> -+ /* Finally we can destroy opengl ressources (texture/shaders/fbo) */
> -+ if (!event->callback || !event->data)
> -+ g_debug ("destroy cb not correclty set\n");
> -+
> -+ event->callback (event->data);
> -+ g_cond_signal (priv->cond_send_message);
> -+ break;
> -+ }
> -+
> -+ case FB_EVENT_DRAW:
> -+ if (priv->draw_cb) {
> -+ priv->draw_cb (priv->draw_data);
> -+ glFlush ();
> -+ eglSwapBuffers (priv->gl_display, priv->gl_surface);
> -+ g_cond_signal (priv->cond_send_message);
> -+ }
> -+ break;
> -+
> -+ default:
> -+ g_debug ("unknown GstGLFbEvent type: %ud\n", event->type);
> -+ break;
> -+ } // switch
> -+
> -+ g_slice_free (GstGLFbEvent, event);
> -+
> -+ } // while running
> -+
> -+ g_mutex_unlock (priv->lock);
> -+
> -+ g_debug ("end loop\n");
> -+}
> -+
> -+/* Not called by the gl thread */
> -+void
> -+gst_gl_window_quit_loop (GstGLWindow * window, GstGLWindowCB callback,
> -+ gpointer data)
> -+{
> -+ if (window) {
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ if (priv->running) {
> -+ GstGLFbEvent *event = g_slice_new0 (GstGLFbEvent);
> -+ event->type = FB_EVENT_QUIT;
> -+ event->callback = callback;
> -+ event->data = data;
> -+ priv->queue = g_list_append (priv->queue, event);
> -+
> -+ g_cond_signal (priv->cond_queue_message);
> -+ g_cond_wait (priv->cond_send_message, priv->lock);
> -+ }
> -+
> -+ g_mutex_unlock (priv->lock);
> -+ }
> -+}
> -+
> -+/* Not called by the gl thread */
> -+void
> -+gst_gl_window_send_message (GstGLWindow * window, GstGLWindowCB callback,
> -+ gpointer data)
> -+{
> -+ if (window) {
> -+ GstGLWindowPrivate *priv = window->priv;
> -+
> -+ g_mutex_lock (priv->lock);
> -+
> -+ if (priv->running) {
> -+ GstGLFbEvent *event = g_slice_new0 (GstGLFbEvent);
> -+ event->type = FB_EVENT_CALLBACK;
> -+ event->callback = callback;
> -+ event->data = data;
> -+ priv->queue = g_list_append (priv->queue, event);
> -+ g_cond_signal (priv->cond_queue_message);
> -+
> -+ /* block until opengl calls have been executed in the gl thread */
> -+ g_cond_wait (priv->cond_send_message, priv->lock);
> -+ }
> -+
> -+ g_mutex_unlock (priv->lock);
> -+ }
> -+}
> -+
> -+const gchar *
> -+EGLErrorString ()
> -+{
> -+ EGLint nErr = eglGetError ();
> -+ switch (nErr) {
> -+ case EGL_SUCCESS:
> -+ return "EGL_SUCCESS";
> -+ case EGL_BAD_DISPLAY:
> -+ return "EGL_BAD_DISPLAY";
> -+ case EGL_NOT_INITIALIZED:
> -+ return "EGL_NOT_INITIALIZED";
> -+ case EGL_BAD_ACCESS:
> -+ return "EGL_BAD_ACCESS";
> -+ case EGL_BAD_ALLOC:
> -+ return "EGL_BAD_ALLOC";
> -+ case EGL_BAD_ATTRIBUTE:
> -+ return "EGL_BAD_ATTRIBUTE";
> -+ case EGL_BAD_CONFIG:
> -+ return "EGL_BAD_CONFIG";
> -+ case EGL_BAD_CONTEXT:
> -+ return "EGL_BAD_CONTEXT";
> -+ case EGL_BAD_CURRENT_SURFACE:
> -+ return "EGL_BAD_CURRENT_SURFACE";
> -+ case EGL_BAD_MATCH:
> -+ return "EGL_BAD_MATCH";
> -+ case EGL_BAD_NATIVE_PIXMAP:
> -+ return "EGL_BAD_NATIVE_PIXMAP";
> -+ case EGL_BAD_NATIVE_WINDOW:
> -+ return "EGL_BAD_NATIVE_WINDOW";
> -+ case EGL_BAD_PARAMETER:
> -+ return "EGL_BAD_PARAMETER";
> -+ case EGL_BAD_SURFACE:
> -+ return "EGL_BAD_SURFACE";
> -+ default:
> -+ return "unknown";
> -+ }
> -+}
> -diff --git a/gst-libs/gst/gl/gstglwindow_x11ES2.c b/gst-libs/gst/gl/gstglwindow_x11ES2.c
> -index 260fd2e..65afb50 100644
> ---- a/gst-libs/gst/gl/gstglwindow_x11ES2.c
> -+++ b/gst-libs/gst/gl/gstglwindow_x11ES2.c
> -@@ -116,16 +116,16 @@ gst_gl_window_finalize (GObject * object)
> -
> - if (priv->gl_context) {
> - ret =
> -- eglMakeCurrent (priv->device, EGL_NO_SURFACE, EGL_NO_SURFACE,
> -+ eglMakeCurrent (priv->gl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
> - EGL_NO_CONTEXT);
> - if (!ret)
> - g_debug ("failed to release opengl context\n");
> -
> -- eglDestroyContext (priv->device, priv->gl_context);
> -+ eglDestroyContext (priv->gl_display, priv->gl_context);
> - }
> -
> -- if (priv->device)
> -- eglTerminate (priv->device);
> -+ if (priv->gl_display)
> -+ eglTerminate (priv->gl_display);
> -
> - XFree (priv->visual_info);
> -
> -@@ -510,7 +510,7 @@ callback_activate_gl_context (GstGLWindowPrivate * priv)
> - void
> - callback_inactivate_gl_context (GstGLWindowPrivate * priv)
> - {
> -- if (!eglMakeCurrent (priv->device, EGL_NO_SURFACE, EGL_NO_SURFACE,
> -+ if (!eglMakeCurrent (priv->gl_display, EGL_NO_SURFACE, EGL_NO_SURFACE,
> - EGL_NO_CONTEXT))
> - g_debug ("failed to inactivate opengl context %lud\n",
> - (gulong) priv->gl_context);
> -@@ -622,7 +622,7 @@ gst_gl_window_draw_unlocked (GstGLWindow * window, gint width, gint height)
> -
> - XSendEvent (priv->device, priv->internal_win_id, FALSE, ExposureMask,
> - &event);
> -- XSync (priv->disp_send, FALSE);
> -+ XSync (priv->device, FALSE);
> - }
> - }
> -
> -diff --git a/gst/gl/gstglbumper.c b/gst/gl/gstglbumper.c
> -index 12efe7d..2daec5b 100644
> ---- a/gst/gl/gstglbumper.c
> -+++ b/gst/gl/gstglbumper.c
> -@@ -157,7 +157,6 @@ gst_gl_bumper_init_resources (GstGLFilter * filter)
> -
> - png_structp png_ptr;
> - png_infop info_ptr;
> -- guint sig_read = 0;
> - png_uint_32 width = 0;
> - png_uint_32 height = 0;
> - gint bit_depth = 0;
> -@@ -209,7 +208,7 @@ gst_gl_bumper_init_resources (GstGLFilter * filter)
> -
> - png_init_io (png_ptr, fp);
> -
> -- png_set_sig_bytes (png_ptr, sig_read);
> -+ png_set_sig_bytes (png_ptr, sizeof (magic));
> -
> - png_read_info (png_ptr, info_ptr);
> -
> -diff --git a/gst/gl/gstglimagesink.c b/gst/gl/gstglimagesink.c
> -index d57f5b5..369d7f1 100644
> ---- a/gst/gl/gstglimagesink.c
> -+++ b/gst/gl/gstglimagesink.c
> -@@ -1,6 +1,6 @@
> - /*
> -- * GStreamer
> -- * Copyright (C) 2003 Julien Moutte <julien at moutte.net>
> -+ * GStreamerfor
> -+ * Copyright (C) 2003 Julien Moutte <julien at moutte.net>for
> - * Copyright (C) 2005,2006,2007 David A. Schleef <ds at schleef.org>
> - * Copyright (C) 2008 Julien Isorce <julien.isorce at gmail.com>
> - *
> -@@ -86,6 +86,9 @@
> - #include <gst/interfaces/xoverlay.h>
> -
> - #include "gstglimagesink.h"
> -+#ifdef GPU_VIVANTE
> -+#include "gstglvivante.h"
> -+#endif
> -
> - GST_DEBUG_CATEGORY (gst_debug_glimage_sink);
> - #define GST_CAT_DEFAULT gst_debug_glimage_sink
> -@@ -137,11 +140,13 @@ static GstStaticPadTemplate gst_glimage_sink_template =
> - GST_PAD_SINK,
> - GST_PAD_ALWAYS,
> - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS ";"
> -- GST_VIDEO_CAPS_RGB ";"
> -- GST_VIDEO_CAPS_RGBx ";"
> -- GST_VIDEO_CAPS_RGBA ";"
> -- GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, AYUV }"))
> -- );
> -+ GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_RGBA ";"
> -+#ifdef GPU_VIVANTE
> -+ GST_VIDEO_CAPS_YUV ("{ NV12, I420, YV12, YUY2, UYVY, AYUV }")
> -+#else
> -+ GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, AYUV }")
> -+#endif
> -+ ));
> - #endif
> -
> - enum
> -@@ -152,7 +157,8 @@ enum
> - PROP_CLIENT_DRAW_CALLBACK,
> - PROP_CLIENT_DATA,
> - PROP_FORCE_ASPECT_RATIO,
> -- PROP_PIXEL_ASPECT_RATIO
> -+ PROP_PIXEL_ASPECT_RATIO,
> -+ PROP_RENDERED_FRAMES
> - };
> -
> - GST_BOILERPLATE_FULL (GstGLImageSink, gst_glimage_sink, GstVideoSink,
> -@@ -241,6 +247,10 @@ gst_glimage_sink_class_init (GstGLImageSinkClass * klass)
> - "The pixel aspect ratio of the device", "1/1",
> - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
> -
> -+ g_object_class_install_property (gobject_class, PROP_RENDERED_FRAMES,
> -+ g_param_spec_int ("rendered", "rendered",
> -+ "Get the total rendered frames", 0, G_MAXINT, 0, G_PARAM_READABLE));
> -+
> - gobject_class->finalize = gst_glimage_sink_finalize;
> -
> - gstelement_class->change_state = gst_glimage_sink_change_state;
> -@@ -261,6 +271,7 @@ gst_glimage_sink_init (GstGLImageSink * glimage_sink,
> - glimage_sink->new_window_id = 0;
> - glimage_sink->display = NULL;
> - glimage_sink->stored_buffer = NULL;
> -+ glimage_sink->stored_input_buffer = NULL;
> - glimage_sink->clientReshapeCallback = NULL;
> - glimage_sink->clientDrawCallback = NULL;
> - glimage_sink->client_data = NULL;
> -@@ -370,6 +381,9 @@ gst_glimage_sink_get_property (GObject * object, guint prop_id,
> - if (!g_value_transform (glimage_sink->par, value))
> - g_warning ("Could not transform string to aspect ratio");
> - break;
> -+ case PROP_RENDERED_FRAMES:
> -+ g_value_set_int (value, glimage_sink->rendered);
> -+ break;
> - default:
> - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
> - break;
> -@@ -435,6 +449,7 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
> -
> - return GST_STATE_CHANGE_FAILURE;
> - }
> -+ glimage_sink->rendered = 0;
> - }
> - break;
> - case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
> -@@ -456,6 +471,10 @@ gst_glimage_sink_change_state (GstElement * element, GstStateChange transition)
> - gst_buffer_unref (GST_BUFFER_CAST (glimage_sink->stored_buffer));
> - glimage_sink->stored_buffer = NULL;
> - }
> -+ if (glimage_sink->stored_input_buffer) {
> -+ gst_buffer_unref (glimage_sink->stored_input_buffer);
> -+ glimage_sink->stored_input_buffer = NULL;
> -+ }
> - if (glimage_sink->display) {
> - g_object_unref (glimage_sink->display);
> - glimage_sink->display = NULL;
> -@@ -533,6 +552,14 @@ gst_glimage_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
> - if (!ok)
> - return FALSE;
> -
> -+#ifdef GPU_VIVANTE
> -+ /* special case for format that vivante can't handle */
> -+ if (format == GST_VIDEO_FORMAT_NV12 &&
> -+ !gst_gl_vivante_check_format (glimage_sink->display->gpu_priv, format,
> -+ width, height))
> -+ return FALSE;
> -+#endif
> -+
> - /* init colorspace conversion if needed */
> - ok = gst_gl_display_init_upload (glimage_sink->display, format,
> - width, height, width, height);
> -@@ -609,6 +636,11 @@ gst_glimage_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
> - if (!glimage_sink->window_id && !glimage_sink->new_window_id)
> - gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (glimage_sink));
> -
> -+#ifdef GPU_VIVANTE
> -+ if (glimage_sink->display->gpu_priv)
> -+ gst_gl_vivante_set_caps (glimage_sink->display->gpu_priv, caps);
> -+#endif
> -+
> - return TRUE;
> - }
> -
> -@@ -617,11 +649,18 @@ gst_glimage_sink_render (GstBaseSink * bsink, GstBuffer * buf)
> - {
> - GstGLImageSink *glimage_sink = NULL;
> - GstGLBuffer *gl_buffer = NULL;
> -+ gint index;
> -+ GstFlowReturn res;
> -
> - glimage_sink = GST_GLIMAGE_SINK (bsink);
> -
> - GST_INFO ("buffer size: %d", GST_BUFFER_SIZE (buf));
> -
> -+ if (buf == glimage_sink->stored_input_buffer)
> -+ return GST_FLOW_OK;
> -+
> -+ glimage_sink->display->upload_buf_mapped = FALSE;
> -+
> - //is gl
> - if (glimage_sink->is_gl) {
> - //increment gl buffer ref before storage
> -@@ -633,9 +672,16 @@ gst_glimage_sink_render (GstBaseSink * bsink, GstBuffer * buf)
> - gl_buffer = gst_gl_buffer_new (glimage_sink->display,
> - glimage_sink->width, glimage_sink->height);
> -
> -- //blocking call
> -- gst_gl_display_do_upload (glimage_sink->display, gl_buffer->texture,
> -- glimage_sink->width, glimage_sink->height, GST_BUFFER_DATA (buf));
> -+ index = G_N_ELEMENTS (buf->_gst_reserved) - 1;
> -+
> -+ if (index >= 0)
> -+ //blocking call
> -+ gst_gl_display_do_upload_with_meta (glimage_sink->display,
> -+ gl_buffer->texture, glimage_sink->width, glimage_sink->height,
> -+ GST_BUFFER_DATA (buf), buf->_gst_reserved[index]);
> -+ else
> -+ gst_gl_display_do_upload (glimage_sink->display, gl_buffer->texture,
> -+ glimage_sink->width, glimage_sink->height, GST_BUFFER_DATA (buf));
> -
> - //gl_buffer is created in this block, so the gl buffer is already referenced
> - }
> -@@ -645,26 +691,36 @@ gst_glimage_sink_render (GstBaseSink * bsink, GstBuffer * buf)
> - gst_gl_display_set_window_id (glimage_sink->display,
> - glimage_sink->window_id);
> - }
> -- //the buffer is cleared when an other comes in
> -- if (glimage_sink->stored_buffer) {
> -- gst_buffer_unref (GST_BUFFER_CAST (glimage_sink->stored_buffer));
> -- glimage_sink->stored_buffer = NULL;
> -- }
> -- //store current buffer
> -- glimage_sink->stored_buffer = gl_buffer;
> --
> - //redisplay opengl scene
> - if (gl_buffer->texture &&
> - gst_gl_display_redisplay (glimage_sink->display,
> - gl_buffer->texture, gl_buffer->width, gl_buffer->height,
> - glimage_sink->window_width, glimage_sink->window_height,
> - glimage_sink->keep_aspect_ratio))
> -- return GST_FLOW_OK;
> -+ res = GST_FLOW_OK;
> - else {
> - GST_ELEMENT_ERROR (glimage_sink, RESOURCE, NOT_FOUND,
> - GST_GL_DISPLAY_ERR_MSG (glimage_sink->display), (NULL));
> -- return GST_FLOW_ERROR;
> -+ res = GST_FLOW_ERROR;
> - }
> -+
> -+ //the buffer is cleared when an other comes in
> -+ if (glimage_sink->stored_buffer) {
> -+ gst_buffer_unref (GST_BUFFER_CAST (glimage_sink->stored_buffer));
> -+ glimage_sink->stored_buffer = NULL;
> -+ }
> -+ if (glimage_sink->stored_input_buffer) {
> -+ gst_buffer_unref (glimage_sink->stored_input_buffer);
> -+ glimage_sink->stored_input_buffer = NULL;
> -+ }
> -+ //store current buffer
> -+ glimage_sink->stored_buffer = gl_buffer;
> -+ if (glimage_sink->display->upload_buf_mapped)
> -+ glimage_sink->stored_input_buffer = gst_buffer_ref (buf);
> -+
> -+ glimage_sink->rendered++;
> -+
> -+ return res;
> - }
> -
> -
> -diff --git a/gst/gl/gstglimagesink.h b/gst/gl/gstglimagesink.h
> -index c61b5c5..bd40bc4 100644
> ---- a/gst/gl/gstglimagesink.h
> -+++ b/gst/gl/gstglimagesink.h
> -@@ -51,6 +51,7 @@ struct _GstGLImageSink
> -
> - //properties
> - gchar *display_name;
> -+ gint rendered;
> -
> - gulong window_id;
> - gulong new_window_id;
> -@@ -67,6 +68,7 @@ struct _GstGLImageSink
> -
> - GstGLDisplay *display;
> - GstGLBuffer *stored_buffer;
> -+ GstBuffer *stored_input_buffer;
> -
> - CRCB clientReshapeCallback;
> - CDCB clientDrawCallback;
> -diff --git a/gst/gl/gstglupload.c b/gst/gl/gstglupload.c
> -index 09bc96d..8e12532 100644
> ---- a/gst/gl/gstglupload.c
> -+++ b/gst/gl/gstglupload.c
> -@@ -70,6 +70,9 @@
> -
> - #include "gstglupload.h"
> -
> -+#ifdef GPU_VIVANTE
> -+#include "gstglvivante.h"
> -+#endif
> -
> - #define GST_CAT_DEFAULT gst_gl_upload_debug
> - GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
> -@@ -106,10 +109,13 @@ static GstStaticPadTemplate gst_gl_upload_sink_pad_template =
> - GST_PAD_SINK,
> - GST_PAD_ALWAYS,
> - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB ";"
> -- GST_VIDEO_CAPS_RGBx ";"
> -- GST_VIDEO_CAPS_RGBA ";"
> -- GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, AYUV }"))
> -- );
> -+ GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_RGBA ";"
> -+#ifdef GPU_VIVANTE
> -+ GST_VIDEO_CAPS_YUV ("{ NV12, I420, YV12, YUY2, UYVY, AYUV }")
> -+#else
> -+ GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, AYUV }")
> -+#endif
> -+ ));
> - #endif
> -
> - /* Properties */
> -@@ -504,6 +510,14 @@ gst_gl_upload_set_caps (GstBaseTransform * bt, GstCaps * incaps,
> - GST_DEBUG ("caps connot be parsed");
> - return FALSE;
> - }
> -+#ifdef GPU_VIVANTE
> -+ /* special case for format that vivante can't handle */
> -+ if (upload->video_format == GST_VIDEO_FORMAT_NV12 &&
> -+ !gst_gl_vivante_check_format (upload->display->gpu_priv,
> -+ upload->video_format, upload->video_width, upload->video_height))
> -+ return FALSE;
> -+#endif
> -+
> - //init colorspace conversion if needed
> - ret = gst_gl_display_init_upload (upload->display, upload->video_format,
> - upload->gl_width, upload->gl_height,
> -diff --git a/tests/examples/cocoa/videoxoverlay/Makefile.am b/tests/examples/cocoa/videoxoverlay/Makefile.am
> -index 5a85bb4..b4a4932 100755
> ---- a/tests/examples/cocoa/videoxoverlay/Makefile.am
> -+++ b/tests/examples/cocoa/videoxoverlay/Makefile.am
> -@@ -4,7 +4,7 @@ noinst_PROGRAMS = videoxoverlay
> -
> - videoxoverlay_SOURCES = main.m
> -
> --videoxoverlay_OBJCFLAGS=$(GST_PLUGINS_GL_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
> -+videoxoverlay_OBJCFLAGS=$(GST_PLUGINS_GL_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_OBJCFLAGS) \
> - $(GL_CFLAGS) -I/usr/local/include/gstreamer-0.10
> - videoxoverlay_LDADD=$(GST_PLUGINS_GL_LIBS) $(GST_PLUGINS_BASE_LIBS) $(GST_LIBS) \
> - $(GL_LIBS) -lgstinterfaces-$(GST_MAJORMINOR)
> -diff --git a/common/check.mak b/common/check.mak
> -index 30487f1..bc44620 100644
> ---- a/common/check.mak
> -+++ b/common/check.mak
> -@@ -24,6 +24,12 @@ LOOPS = 10
> - CK_DEFAULT_TIMEOUT=20 \
> - $*
> -
> -+# just like 'check', but don't run it again if it fails (useful for debugging)
> -+%.check-norepeat: %
> -+ @$(TESTS_ENVIRONMENT) \
> -+ CK_DEFAULT_TIMEOUT=20 \
> -+ $*
> -+
> - # run any given test in a loop
> - %.torture: %
> - @for i in `seq 1 $(LOOPS)`; do \
> -@@ -152,7 +158,8 @@ help:
> - @echo
> - @echo "make check -- run all checks"
> - @echo "make torture -- run all checks $(LOOPS) times"
> -- @echo "make (dir)/(test).check -- run the given check once"
> -+ @echo "make (dir)/(test).check -- run the given check once, repeat with GST_DEBUG=*:2 if it fails"
> -+ @echo "make (dir)/(test).check-norepeat -- run the given check once, but don't run it again if it fails"
> - @echo "make (dir)/(test).forever -- run the given check forever"
> - @echo "make (dir)/(test).torture -- run the given check $(LOOPS) times"
> - @echo
> -diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
> -index 8cc42e7..084f9ae 100644
> ---- a/common/gtk-doc-plugins.mak
> -+++ b/common/gtk-doc-plugins.mak
> -@@ -13,8 +13,7 @@ help:
> - @echo
> -
> - # update the stuff maintained by doc maintainers
> --update:
> -- $(MAKE) scanobj-update
> -+update: scanobj-update
> - $(MAKE) check-outdated-docs
> -
> - # We set GPATH here; this gives us semantics for GNU make
> -@@ -130,7 +129,7 @@ scanobj-build.stamp: $(SCANOBJ_DEPS) $(basefiles)
> - --module=$(DOC_MODULE) --source=$(PACKAGE) --inspect-dir=$(INSPECT_DIR) && \
> - echo " DOC Merging introspection data" && \
> - $(PYTHON) \
> -- $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE); \
> -+ $(top_srcdir)/common/scangobj-merge.py $(DOC_MODULE) || exit 1; \
> - if test x"$(srcdir)" != x. ; then \
> - for f in $(SCANOBJ_FILES); \
> - do \
> -diff --git a/common/m4/Makefile.am b/common/m4/Makefile.am
> -index 2ddb8a7..856d6e3 100644
> ---- a/common/m4/Makefile.am
> -+++ b/common/m4/Makefile.am
> -@@ -8,7 +8,6 @@ EXTRA_DIST = \
> - as-gcc-inline-assembly.m4 \
> - as-libtool.m4 \
> - as-libtool-tags.m4 \
> -- as-objc.m4 \
> - as-python.m4 \
> - as-scrub-include.m4 \
> - as-version.m4 \
> -diff --git a/common/m4/as-compiler-flag.m4 b/common/m4/as-compiler-flag.m4
> -index 882a4c7..8bb853a 100644
> ---- a/common/m4/as-compiler-flag.m4
> -+++ b/common/m4/as-compiler-flag.m4
> -@@ -62,3 +62,35 @@ AC_DEFUN([AS_CXX_COMPILER_FLAG],
> - AC_MSG_RESULT([$flag_ok])
> - ])
> -
> -+dnl AS_OBJC_COMPILER_FLAG(CPPFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
> -+dnl Tries to compile with the given CPPFLAGS.
> -+dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
> -+dnl and ACTION-IF-NOT-ACCEPTED otherwise.
> -+
> -+AC_DEFUN([AS_OBJC_COMPILER_FLAG],
> -+[
> -+ AC_REQUIRE([AC_PROG_OBJC])
> -+
> -+ AC_MSG_CHECKING([to see if Objective C compiler understands $1])
> -+
> -+ save_CPPFLAGS="$CPPFLAGS"
> -+ CPPFLAGS="$CPPFLAGS $1"
> -+
> -+ AC_LANG_PUSH([Objective C])
> -+
> -+ AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
> -+ CPPFLAGS="$save_CPPFLAGS"
> -+
> -+ if test "X$flag_ok" = Xyes ; then
> -+ $2
> -+ true
> -+ else
> -+ $3
> -+ true
> -+ fi
> -+
> -+ AC_LANG_POP([Objective C])
> -+
> -+ AC_MSG_RESULT([$flag_ok])
> -+])
> -+
> -diff --git a/common/m4/as-objc.m4 b/common/m4/as-objc.m4
> -deleted file mode 100644
> -index 1e7066a..0000000
> ---- a/common/m4/as-objc.m4
> -+++ /dev/null
> -@@ -1,56 +0,0 @@
> --
> --
> --# AC_PROG_OBJC([LIST-OF-COMPILERS])
> --#
> --AC_DEFUN([AS_PROG_OBJC],
> --[
> --AC_CHECK_TOOLS(OBJC,
> -- [m4_default([$1], [objcc objc gcc cc CC])],
> -- none)
> --AC_SUBST(OBJC)
> --OBJC_LDFLAGS="-lobjc"
> --AC_SUBST(OBJC_LDFLAGS)
> --if test "x$OBJC" != xnone ; then
> -- _AM_DEPENDENCIES(OBJC)
> -- AC_MSG_CHECKING([if Objective C compiler works])
> -- cat >>conftest.m <<EOF
> --#include <objc/Object.h>
> -- at interface Moo:Object
> --{
> --}
> --- moo;
> --int main();
> -- at end
> --
> -- at implementation Moo
> --- moo
> --{
> -- exit(0);
> --}
> --
> --int main()
> --{
> -- id moo;
> -- moo = [[Moo new]];
> -- [[moo moo]];
> -- return 1;
> --}
> -- at end
> --EOF
> -- ${OBJC} conftest.m ${OBJC_LDFLAGS} >&5 2>&5
> -- if test -f a.out -o -f a.exe ; then
> -- result=yes
> -- else
> -- result=no
> -- echo failed program is: >&5
> -- cat conftest.m >&5
> -- fi
> -- rm -f conftest.m a.out a.exe
> -- AC_MSG_RESULT([$result])
> --else
> -- _AM_DEPENDENCIES(OBJC)
> --fi
> --
> --])
> --
> --
> -diff --git a/common/m4/gst-arch.m4 b/common/m4/gst-arch.m4
> -index 2e935d2..077a20b 100644
> ---- a/common/m4/gst-arch.m4
> -+++ b/common/m4/gst-arch.m4
> -@@ -5,32 +5,30 @@ dnl defines HOST_CPU
> -
> - AC_DEFUN([AG_GST_ARCH],
> - [
> -- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
> --
> - dnl Determine CPU
> -- case "x${host_cpu}" in
> -+ case "x${target_cpu}" in
> - xi?86 | xk? | xi?86_64)
> -- case $host_os in
> -+ case $target_os in
> - solaris*)
> - AC_CHECK_DECL([__i386], [I386_ABI="yes"], [I386_ABI="no"])
> - AC_CHECK_DECL([__amd64], [AMD64_ABI="yes"], [AMD64_ABI="no"])
> -
> - if test "x$I386_ABI" = "xyes" ; then
> - HAVE_CPU_I386=yes
> -- AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86])
> -+ AC_DEFINE(HAVE_CPU_I386, 1, [Define if the target CPU is an x86])
> - fi
> - if test "x$AMD64_ABI" = "xyes" ; then
> - HAVE_CPU_X86_64=yes
> -- AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64])
> -+ AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the target CPU is a x86_64])
> - fi
> - ;;
> - *)
> - HAVE_CPU_I386=yes
> -- AC_DEFINE(HAVE_CPU_I386, 1, [Define if the host CPU is an x86])
> -+ AC_DEFINE(HAVE_CPU_I386, 1, [Define if the target CPU is an x86])
> -
> - dnl FIXME could use some better detection
> - dnl (ie CPUID)
> -- case "x${host_cpu}" in
> -+ case "x${target_cpu}" in
> - xi386 | xi486) ;;
> - *)
> - AC_DEFINE(HAVE_RDTSC, 1, [Define if RDTSC is available]) ;;
> -@@ -40,43 +38,43 @@ AC_DEFUN([AG_GST_ARCH],
> - ;;
> - xpowerpc)
> - HAVE_CPU_PPC=yes
> -- AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the host CPU is a PowerPC]) ;;
> -+ AC_DEFINE(HAVE_CPU_PPC, 1, [Define if the target CPU is a PowerPC]) ;;
> - xpowerpc64)
> - HAVE_CPU_PPC64=yes
> -- AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the host CPU is a 64 bit PowerPC]) ;;
> -+ AC_DEFINE(HAVE_CPU_PPC64, 1, [Define if the target CPU is a 64 bit PowerPC]) ;;
> - xalpha*)
> - HAVE_CPU_ALPHA=yes
> -- AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the host CPU is an Alpha]) ;;
> -+ AC_DEFINE(HAVE_CPU_ALPHA, 1, [Define if the target CPU is an Alpha]) ;;
> - xarm*)
> - HAVE_CPU_ARM=yes
> -- AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the host CPU is an ARM]) ;;
> -+ AC_DEFINE(HAVE_CPU_ARM, 1, [Define if the target CPU is an ARM]) ;;
> - xsparc*)
> - HAVE_CPU_SPARC=yes
> -- AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the host CPU is a SPARC]) ;;
> -+ AC_DEFINE(HAVE_CPU_SPARC, 1, [Define if the target CPU is a SPARC]) ;;
> - xmips*)
> - HAVE_CPU_MIPS=yes
> -- AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the host CPU is a MIPS]) ;;
> -+ AC_DEFINE(HAVE_CPU_MIPS, 1, [Define if the target CPU is a MIPS]) ;;
> - xhppa*)
> - HAVE_CPU_HPPA=yes
> -- AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the host CPU is a HPPA]) ;;
> -+ AC_DEFINE(HAVE_CPU_HPPA, 1, [Define if the target CPU is a HPPA]) ;;
> - xs390*)
> - HAVE_CPU_S390=yes
> -- AC_DEFINE(HAVE_CPU_S390, 1, [Define if the host CPU is a S390]) ;;
> -+ AC_DEFINE(HAVE_CPU_S390, 1, [Define if the target CPU is a S390]) ;;
> - xia64*)
> - HAVE_CPU_IA64=yes
> -- AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the host CPU is a IA64]) ;;
> -+ AC_DEFINE(HAVE_CPU_IA64, 1, [Define if the target CPU is a IA64]) ;;
> - xm68k*)
> - HAVE_CPU_M68K=yes
> -- AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the host CPU is a M68K]) ;;
> -+ AC_DEFINE(HAVE_CPU_M68K, 1, [Define if the target CPU is a M68K]) ;;
> - xx86_64)
> - HAVE_CPU_X86_64=yes
> -- AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the host CPU is a x86_64]) ;;
> -+ AC_DEFINE(HAVE_CPU_X86_64, 1, [Define if the target CPU is a x86_64]) ;;
> - xcris)
> - HAVE_CPU_CRIS=yes
> -- AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the host CPU is a CRIS]) ;;
> -+ AC_DEFINE(HAVE_CPU_CRIS, 1, [Define if the target CPU is a CRIS]) ;;
> - xcrisv32)
> - HAVE_CPU_CRISV32=yes
> -- AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the host CPU is a CRISv32]) ;;
> -+ AC_DEFINE(HAVE_CPU_CRISV32, 1, [Define if the target CPU is a CRISv32]) ;;
> - esac
> -
> - dnl Determine endianness
> -@@ -98,6 +96,7 @@ AC_DEFUN([AG_GST_ARCH],
> - AM_CONDITIONAL(HAVE_CPU_CRISV32, test "x$HAVE_CPU_CRISV32" = "xyes")
> -
> - AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu", [the host CPU])
> -+ AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu", [the target CPU])
> - ])
> -
> - dnl check if unaligned memory access works correctly
> -diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4
> -index 030e7ac..e011ed4 100644
> ---- a/common/m4/gst-args.m4
> -+++ b/common/m4/gst-args.m4
> -@@ -19,6 +19,7 @@ dnl AG_GST_ARG_ENABLE_EXTERNAL
> - dnl AG_GST_ARG_ENABLE_EXPERIMENTAL
> - dnl AG_GST_ARG_ENABLE_BROKEN
> -
> -+dnl AG_GST_ARG_DISABLE_FATAL_WARNINGS
> - AC_DEFUN([AG_GST_ARG_DEBUG],
> - [
> - dnl debugging stuff
> -@@ -110,13 +111,13 @@ AC_DEFUN([AG_GST_ARG_GCOV],
> - dnl if gcov is used, we do not want default -O2 CFLAGS
> - if test "x$GST_GCOV_ENABLED" = "xyes"
> - then
> -- CFLAGS="-O0"
> -+ CFLAGS="$CFLAGS -O0"
> - AC_SUBST(CFLAGS)
> -- CXXFLAGS="-O0"
> -+ CXXFLAGS="$CXXFLAGS -O0"
> - AC_SUBST(CXXFLAGS)
> -- FFLAGS="-O0"
> -+ FFLAGS="$FFLAGS -O0"
> - AC_SUBST(FFLAGS)
> -- CCASFLAGS="-O0"
> -+ CCASFLAGS="$CCASFLAGS -O0"
> - AC_SUBST(CCASFLAGS)
> - AC_MSG_NOTICE([gcov enabled, setting CFLAGS and friends to $CFLAGS])
> - fi
> -@@ -325,3 +326,20 @@ AC_DEFUN([AG_GST_ARG_ENABLE_BROKEN],
> - AC_MSG_NOTICE([not building broken plug-ins])
> - ])
> - ])
> -+
> -+dnl allow people (or build tools) to override default behaviour
> -+dnl for fatal compiler warnings
> -+AC_DEFUN([AG_GST_ARG_DISABLE_FATAL_WARNINGS],
> -+[
> -+ AC_ARG_ENABLE(fatal-warnings,
> -+ AC_HELP_STRING([--disable-fatal-warnings],
> -+ [Don't turn compiler warnings into fatal errors]),
> -+ [
> -+ case "${enableval}" in
> -+ yes) FATAL_WARNINGS=yes ;;
> -+ no) FATAL_WARNINGS=no ;;
> -+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-fatal-warnings) ;;
> -+ esac
> -+ ],
> -+ [FATAL_WARNINGS=$GST_GIT]) dnl Default value
> -+])
> -diff --git a/common/m4/gst-check.m4 b/common/m4/gst-check.m4
> -index 3fd3acf..f3f39b4 100644
> ---- a/common/m4/gst-check.m4
> -+++ b/common/m4/gst-check.m4
> -@@ -117,6 +117,38 @@ AC_DEFUN([AG_GST_CHECK_GST_CHECK],
> - ])
> -
> - dnl ===========================================================================
> -+dnl AG_GST_CHECK_UNINSTALLED_SETUP([ACTION-IF-UNINSTALLED], [ACTION-IF-NOT])
> -+dnl
> -+dnl ACTION-IF-UNINSTALLED (optional) extra actions to perform if the setup
> -+dnl is an uninstalled setup
> -+dnl ACTION-IF-NOT (optional) extra actions to perform if the setup
> -+dnl is not an uninstalled setup
> -+dnl ===========================================================================
> -+AC_DEFUN([AG_GST_CHECK_UNINSTALLED_SETUP],
> -+[
> -+ AC_MSG_CHECKING([whether this is an uninstalled GStreamer setup])
> -+ AC_CACHE_VAL(gst_cv_is_uninstalled_setup,[
> -+ gst_cv_is_uninstalled_setup=no
> -+ if (set -u; : $GST_PLUGIN_SYSTEM_PATH) 2>/dev/null ; then
> -+ if test -z "$GST_PLUGIN_SYSTEM_PATH" \
> -+ -a -n "$GST_PLUGIN_SCANNER" \
> -+ -a -n "$GST_PLUGIN_PATH" \
> -+ -a -n "$GST_REGISTRY" \
> -+ -a -n "$DYLD_LIBRARY_PATH" \
> -+ -a -n "$LD_LIBRARY_PATH"; then
> -+ gst_cv_is_uninstalled_setup=yes;
> -+ fi
> -+ fi
> -+ ])
> -+ AC_MSG_RESULT($gst_cv_is_uninstalled_setup)
> -+ if test "x$gst_cv_is_uninstalled_setup" = "xyes"; then
> -+ ifelse([$1], , :, [$1])
> -+ else
> -+ ifelse([$2], , :, [$2])
> -+ fi
> -+])
> -+
> -+dnl ===========================================================================
> - dnl AG_GST_CHECK_GST_PLUGINS_BASE([GST-MAJORMINOR], [MIN-VERSION], [REQUIRED])
> - dnl
> - dnl Sets GST_PLUGINS_BASE_CFLAGS and GST_PLUGINS_BASE_LIBS.
> -diff --git a/common/m4/gst-error.m4 b/common/m4/gst-error.m4
> -index f8f2364..e12a04c 100644
> ---- a/common/m4/gst-error.m4
> -+++ b/common/m4/gst-error.m4
> -@@ -196,6 +196,91 @@ AC_DEFUN([AG_GST_SET_ERROR_CXXFLAGS],
> - AC_MSG_NOTICE([set ERROR_CXXFLAGS to $ERROR_CXXFLAGS])
> - ])
> -
> -+dnl Sets WARNING_OBJCFLAGS and ERROR_OBJCFLAGS to something the compiler
> -+dnl will accept and AC_SUBST them so they are available in Makefile
> -+dnl
> -+dnl WARNING_OBJCFLAGS will contain flags to make the compiler emit more
> -+dnl warnings.
> -+dnl ERROR_OBJCFLAGS will contain flags to make those warnings fatal,
> -+dnl unless ADD-WERROR is set to "no"
> -+dnl
> -+dnl If MORE_FLAGS is set, tries to add each of the given flags
> -+dnl to WARNING_CFLAGS if the compiler supports them. Each flag is
> -+dnl tested separately.
> -+dnl
> -+dnl These flags can be overridden at make time:
> -+dnl make ERROR_OBJCFLAGS=
> -+AC_DEFUN([AG_GST_SET_ERROR_OBJCFLAGS],
> -+[
> -+ AC_REQUIRE([AC_PROG_OBJC])
> -+ AC_REQUIRE([AS_OBJC_COMPILER_FLAG])
> -+
> -+ ERROR_OBJCFLAGS=""
> -+ WARNING_OBJCFLAGS=""
> -+
> -+ dnl if we support -Wall, set it unconditionally
> -+ AS_OBJC_COMPILER_FLAG(-Wall, WARNING_OBJCFLAGS="$WARNING_OBJCFLAGS -Wall")
> -+
> -+ dnl if asked for, add -Werror if supported
> -+ if test "x$1" != "xno"
> -+ then
> -+ AS_OBJC_COMPILER_FLAG(-Werror, ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -Werror")
> -+
> -+ if test "x$ERROR_OBJCFLAGS" != "x"
> -+ then
> -+ dnl Add -fno-strict-aliasing for GLib versions before 2.19.8
> -+ dnl as before G_LOCK and friends caused strict aliasing compiler
> -+ dnl warnings.
> -+ PKG_CHECK_EXISTS([glib-2.0 < 2.19.8], [
> -+ AS_OBJC_COMPILER_FLAG([-fno-strict-aliasing],
> -+ ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -fno-strict-aliasing")
> -+ ])
> -+ else
> -+ dnl if -Werror isn't suported, try -errwarn=%all
> -+ AS_OBJC_COMPILER_FLAG([-errwarn=%all], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS -errwarn=%all")
> -+ if test "x$ERROR_OBJCFLAGS" != "x"; then
> -+ dnl try -errwarn=%all,no%E_EMPTY_DECLARATION,
> -+ dnl no%E_STATEMENT_NOT_REACHED,no%E_ARGUEMENT_MISMATCH,
> -+ dnl no%E_MACRO_REDEFINED (Sun Forte case)
> -+ dnl For Forte we need disable "empty declaration" warning produced by un-needed semicolon
> -+ dnl "statement not reached" disabled because there is g_assert_not_reached () in some places
> -+ dnl "macro redefined" because of gst/gettext.h
> -+ dnl FIXME: is it really supposed to be 'ARGUEMENT' and not 'ARGUMENT'?
> -+ dnl FIXME: do any of these work with the c++ compiler? if not, why
> -+ dnl do we check at all?
> -+ for f in 'no%E_EMPTY_DECLARATION' \
> -+ 'no%E_STATEMENT_NOT_REACHED' \
> -+ 'no%E_ARGUEMENT_MISMATCH' \
> -+ 'no%E_MACRO_REDEFINED' \
> -+ 'no%E_LOOP_NOT_ENTERED_AT_TOP'
> -+ do
> -+ AS_OBJC_COMPILER_FLAG([-errwarn=%all,$f], ERROR_OBJCFLAGS="$ERROR_OBJCFLAGS,$f")
> -+ done
> -+ fi
> -+ fi
> -+ fi
> -+
> -+ if test "x$2" != "x"
> -+ then
> -+ UNSUPPORTED=""
> -+ list="$2"
> -+ for each in $list
> -+ do
> -+ AS_OBJC_COMPILER_FLAG($each,
> -+ WARNING_OBJCFLAGS="$WARNING_OBJCFLAGS $each",
> -+ UNSUPPORTED="$UNSUPPORTED $each")
> -+ done
> -+ if test "X$UNSUPPORTED" != X ; then
> -+ AC_MSG_NOTICE([unsupported compiler flags: $UNSUPPORTED])
> -+ fi
> -+ fi
> -+
> -+ AC_SUBST(WARNING_OBJCFLAGS)
> -+ AC_SUBST(ERROR_OBJCFLAGS)
> -+ AC_MSG_NOTICE([set WARNING_OBJCFLAGS to $WARNING_OBJCFLAGS])
> -+ AC_MSG_NOTICE([set ERROR_OBJCFLAGS to $ERROR_OBJCFLAGS])
> -+])
> -+
> - dnl Sets the default error level for debugging messages
> - AC_DEFUN([AG_GST_SET_LEVEL_DEFAULT],
> - [
> -diff --git a/common/m4/gst-feature.m4 b/common/m4/gst-feature.m4
> -index c072c79..cff7f30 100644
> ---- a/common/m4/gst-feature.m4
> -+++ b/common/m4/gst-feature.m4
> -@@ -232,10 +232,11 @@ AC_DEFUN([AG_GST_CHECK_GST_DEBUG_DISABLED],
> - save_CFLAGS="$CFLAGS"
> - CFLAGS="$GST_CFLAGS $CFLAGS"
> - AC_COMPILE_IFELSE([
> -+ AC_LANG_SOURCE([[
> - #include <gst/gstconfig.h>
> - #ifdef GST_DISABLE_GST_DEBUG
> - #error "debugging disabled, make compiler fail"
> -- #endif], [ debug_system_enabled=yes], [debug_system_enabled=no])
> -+ #endif]])], [ debug_system_enabled=yes], [debug_system_enabled=no])
> - CFLAGS="$save_CFLAGS"
> - AC_LANG_POP([C])
> -
> -diff --git a/common/m4/gst.m4 b/common/m4/gst.m4
> -index ddfde51..d4c53cb 100644
> ---- a/common/m4/gst.m4
> -+++ b/common/m4/gst.m4
> -@@ -3,10 +3,15 @@ dnl sets up use of GStreamer configure.ac macros
> - dnl all GStreamer autoconf macros are prefixed
> - dnl with AG_GST_ for public macros
> - dnl with _AG_GST_ for private macros
> -+dnl
> -+dnl We call AC_CANONICAL_TARGET and AC_CANONICAL_HOST so that
> -+dnl it is valid before AC_ARG_PROGRAM is called
> -
> - AC_DEFUN([AG_GST_INIT],
> - [
> - m4_pattern_forbid(^_?AG_GST_)
> -+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use host_ variables
> -+ AC_REQUIRE([AC_CANONICAL_TARGET]) dnl we use target_ variables
> - ])
> -
> - dnl AG_GST_PKG_CONFIG_PATH
> diff --git a/recipes-multimedia/gstreamer/gst-plugins-gl_%.bbappend b/recipes-multimedia/gstreamer/gst-plugins-gl_%.bbappend
> deleted file mode 100644
> index ab89cc8..0000000
> --- a/recipes-multimedia/gstreamer/gst-plugins-gl_%.bbappend
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -# gst-plugins-gl for imx6 Vivante
> -
> -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
> -
> -DEPENDS_append_mx6 = " gst-fsl-plugin imx-gpu-viv"
> -
> -SRC_URI_append_mx6 = " file://IMX_MMCODEC_3.0.35_4.0.0.patch"
> -
> -CFLAGS_append_mx6 = " -DGLIB_DISABLE_DEPRECATION_WARNINGS -UG_DISABLE_DEPRECATED"
> -
> -PACKAGE_ARCH_mx6 = "${MACHINE_ARCH}"
> diff --git a/recipes-multimedia/libfslcodec/libfslcodec_4.0.3.bb b/recipes-multimedia/libfslcodec/libfslcodec_4.0.3.bb
> index f4f6d58..4f105d4 100644
> --- a/recipes-multimedia/libfslcodec/libfslcodec_4.0.3.bb
> +++ b/recipes-multimedia/libfslcodec/libfslcodec_4.0.3.bb
> @@ -6,4 +6,4 @@ require recipes-multimedia/libfslcodec/libfslcodec.inc
> SRC_URI[md5sum] = "829f88758622eab85b7427e5b488c8a0"
> SRC_URI[sha256sum] = "0d0ff933eed0a021763115b9c8ae812c6376a19bbd95e555d89ea7404f6c8f2f"
>
> -COMPATIBLE_MACHINE = "(mxs|mx5|mx6)"
> +COMPATIBLE_MACHINE = "(mx6)"
> diff --git a/recipes-multimedia/libfslparser/libfslparser_4.0.3.bb b/recipes-multimedia/libfslparser/libfslparser_4.0.3.bb
> index f4217e1..790cb95 100644
> --- a/recipes-multimedia/libfslparser/libfslparser_4.0.3.bb
> +++ b/recipes-multimedia/libfslparser/libfslparser_4.0.3.bb
> @@ -7,4 +7,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=acdb807ac7275fe32f9f64992e111241"
> SRC_URI[md5sum] = "a0b0779edc543536de71898657072275"
> SRC_URI[sha256sum] = "9db10ca6a61c8fdbe91b55b65d084dcbb5f9cfb58b088996c7dd2d6dc8385730"
>
> -COMPATIBLE_MACHINE = "(mxs|mx5|mx6)"
> +COMPATIBLE_MACHINE = "(mx6)"
>
Is this change going to affect also Fido?
Regards,
Nikolay
More information about the meta-freescale
mailing list