[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