From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by yocto-www.yoctoproject.org (Postfix, from userid 118) id 7359EE00B11; Thu, 11 Jun 2015 07:20:00 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on yocto-www.yoctoproject.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-HAM-Report: * -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low * trust * [193.201.172.119 listed in list.dnswl.org] * 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider * (picmaster[at]mail.bg) * -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] * -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's * domain * 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily * valid * -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature Received: from mx3.mail.bg (mx3.mail.bg [193.201.172.119]) by yocto-www.yoctoproject.org (Postfix) with ESMTP id EB22EE00A92 for ; Thu, 11 Jun 2015 07:17:43 -0700 (PDT) Received: from [192.168.0.62] (unknown [93.152.143.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx3.mail.bg (Postfix) with ESMTPSA id 1D3D720387BD; Thu, 11 Jun 2015 17:17:43 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mail.bg; s=default; t=1434032263; bh=bmp2P82BkkyTLAwoy69VQ0HClN7wbZC0ocMTKY8wHHc=; h=Message-ID:Date:From:MIME-Version:To:Subject:References: In-Reply-To:Content-Type:Content-Transfer-Encoding; b=YZcv/vnasBtaMNs9TdWz/uBKWFzsYKLCufdnhVlgpIapLgE0JRHF5tHNoetvmn0La +EoU/a4FW1+8CA32FpcyJlaqAzKm3Xg/xEUgsfMoHC2IsQUrQpWn/Drvf44wWMbKV7 5ftQLLo0AFLDe8dHHoJd1Z+DrJoJyGo5epq7u1Ok= Message-ID: <55799886.7040907@mail.bg> Date: Thu, 11 Jun 2015 17:17:42 +0300 From: Nikolay Dimitrov User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-Version: 1.0 To: Otavio Salvador , meta-freescale Mailing List References: <1433977152-16089-1-git-send-email-otavio@ossystems.com.br> In-Reply-To: <1433977152-16089-1-git-send-email-otavio@ossystems.com.br> Subject: Re: [meta-fsl-arm][PATCH 1/2] Remove GStreamer 0.10 support X-BeenThere: meta-freescale@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Usage and development list for the meta-fsl-* layers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2015 14:20:00 -0000 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit 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 > --- > 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 > -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 > ---- > - 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 > -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 > ---- > - 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 > -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 > ---- > - 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-@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 @@ > - libvisual-gl visualization plugins > - ../../ext/libvisual/.libs/libgstlibvisualgl.so > - libgstlibvisualgl.so > -- 0.10.3 > -+ 0.10.3.1 > - LGPL > - gst-plugins-gl > -- GStreamer OpenGL Plug-ins source release > -+ GStreamer OpenGL Plug-ins git > - Unknown package origin > - > - > -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 @@ > - OpenGL plugin > - ../../gst/gl/.libs/libgstopengl.so > - libgstopengl.so > -- 0.10.3 > -+ 0.10.3.1 > - LGPL > - gst-plugins-gl > -- GStreamer OpenGL Plug-ins source release > -+ GStreamer OpenGL Plug-ins git > - Unknown package origin > - > - > -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-@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_@GST_MAJORMINOR@_la_SOURCES += gstglwindow_x11ES2.c > - endif > -+if GL_BACKEND_FBES2 > -+libgstgl_@GST_MAJORMINOR@_la_SOURCES += gstglwindow_fbES2.c > -+endif > -+ > -+if USE_VIVANTE > -+libgstgl_@GST_MAJORMINOR@_la_SOURCES += gstglvivante.c > -+endif > - > - libgstgl_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/gl > - libgstgl_@GST_MAJORMINOR@include_HEADERS = \ > -@@ -41,13 +49,19 @@ libgstgl_@GST_MAJORMINOR@include_HEADERS = \ > - gstglshadervariables.h \ > - gstglshader.h > - > -+if USE_VIVANTE > -+libgstgl_@GST_MAJORMINOR@include_HEADERS += gstglvivante.h > -+endif > -+ > - libgstgl_@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_@GST_MAJORMINOR@_la_CFLAGS = \ > - $(GL_CFLAGS) $(X_CFLAGS) \ > -+ $(GST_FSL_CFLAGS) \ > - $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) > - libgstgl_@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 > - #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 > -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 > -+ > -+#include "gstglvivante.h" > -+#include > -+ > -+#define GL_GLEXT_PROTOTYPES > -+#include > -+ > -+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 > -+ > -+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 > -+ * > -+ * 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 > -+#include > -+#include > -+ > -+#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 > -+ * GStreamerfor > -+ * Copyright (C) 2003 Julien Moutte for > - * Copyright (C) 2005,2006,2007 David A. Schleef > - * Copyright (C) 2008 Julien Isorce > - * > -@@ -86,6 +86,9 @@ > - #include > - > - #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 < --#include > --@interface Moo:Object > --{ > --} > --- moo; > --int main(); > --@end > -- > --@implementation Moo > --- moo > --{ > -- exit(0); > --} > -- > --int main() > --{ > -- id moo; > -- moo = [[Moo new]]; > -- [[moo moo]]; > -- return 1; > --} > --@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 > - #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