On 31-Jul-15 5:42 AM, Denys Dmytriyenko wrote:
Karthik,

This patch seems to use --irreversible-delete flag, which prevents it from
being applied to the git tree. Can you please resubmit it. Thanks.

Denys,

I have attached the patch without the -D option, I sent the earlier one on purpose to aid the review.

Regards
Karthik
>From 39a43a2a1a93e8940b68226e99d01fc5c88a08ce Mon Sep 17 00:00:00 2001
From: Karthik Ramanan <[email protected]>
Date: Thu, 9 Jul 2015 19:36:47 +0530
Subject: [daisy, master 1/2] gstreamer1.0-plugins-bad: recipe revamp and bug
 fixes

The recipe update switches to a TI GLSDK hosted git repository.
All the previously used private patches are updated on the git.

The following bug fixes have been done:
 * Modify parser to interpolate pts
 * drm buffer pool:
  * Improved to fix memory leak
  * GstDRMBufferPool support fix
 * waylandsink:
  * Remove drm bufferpool instance to fix socket leaks
  * Fix memleak due to unfreed hash-table
  * Cleanup buffer in NULL state
  * Enable mouse pointer movement
  * Workaround partial frame delay artifacts
  * Solve segmentation fault in drm_handle_format

Signed-off-by: Karthik Ramanan <[email protected]>
---
 .../0001-Added-GstDRMBufferPool-support.patch      |  774 -----------
 ...odified-waylandsink-to-accept-NV12-format.patch | 1017 --------------
 .../0003-Added-KMSsink-support.patch               | 1457 --------------------
 ...04-waylandsink-Removed-dependency-on-dri2.patch |   26 -
 ...vc1parse-and-jpegparse-Fixes-plugin-ranks.patch |   54 -
 .../0006-GstDRMBufferPool-support-fix.patch        |   36 -
 .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   17 +-
 7 files changed, 8 insertions(+), 3373 deletions(-)
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
 delete mode 100644 
meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0006-GstDRMBufferPool-support-fix.patch

diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
deleted file mode 100644
index c7015b2..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
+++ /dev/null
@@ -1,774 +0,0 @@
-From 1df02c3320d74c0f36e0ea7021b033da5d4d891e Mon Sep 17 00:00:00 2001
-From: Pooja Prajod <[email protected]>
-Date: Thu, 11 Dec 2014 15:42:39 +0530
-Subject: [PATCH] Added GstDRMBufferPool support
-
-GstDRMBufferPool enabled creation of a bufferpool with extended features.
-The pool stores the element that created it, device for drm allocation,
-height, width and size of buffers.
-All the buffers allocated are through drm. The buffers have dmabuf, crop
-and video metadata set.
----
- configure.ac                                      |    6 +
- gst-libs/gst/Makefile.am                          |    2 +-
- gst-libs/gst/drm/Makefile.am                      |   36 ++
- gst-libs/gst/drm/gstdrmbufferpool.c               |  434 +++++++++++++++++++++
- gst-libs/gst/drm/gstdrmbufferpool.h               |  138 +++++++
- pkgconfig/Makefile.am                             |    3 +
- pkgconfig/gstreamer-drm-uninstalled.pc.in         |   12 +
- pkgconfig/gstreamer-drm.pc.in                     |   12 +
- pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in |    2 +-
- 9 files changed, 643 insertions(+), 2 deletions(-)
- create mode 100644 gst-libs/gst/drm/Makefile.am
- create mode 100644 gst-libs/gst/drm/gstdrmbufferpool.c
- create mode 100644 gst-libs/gst/drm/gstdrmbufferpool.h
- create mode 100644 pkgconfig/gstreamer-drm-uninstalled.pc.in
- create mode 100644 pkgconfig/gstreamer-drm.pc.in
-
-diff --git a/configure.ac b/configure.ac
-index 8f1a4cb..edf8ea8 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -457,6 +457,9 @@ AC_ARG_WITH([egl-window-system],
-               [EGL_WINDOW_SYSTEM="$withval"],
-               [EGL_WINDOW_SYSTEM="auto"])
- 
-+dnl *** gst-libs/gst/egl ***
-+PKG_CHECK_MODULES([DRM], [libdrm libdrm_omap], HAVE_KMS=yes, HAVE_KMS=no)
-+
- if test x"$EGL_WINDOW_SYSTEM" = x"auto"; then
-   dnl Mali
-   old_LIBS=$LIBS
-@@ -2404,6 +2407,7 @@ gst/yadif/Makefile
- gst-libs/Makefile
- gst-libs/gst/Makefile
- gst-libs/gst/basecamerabinsrc/Makefile
-+gst-libs/gst/drm/Makefile
- gst-libs/gst/egl/Makefile
- gst-libs/gst/insertbin/Makefile
- gst-libs/gst/interfaces/Makefile
-@@ -2523,6 +2527,8 @@ pkgconfig/gstreamer-plugins-bad.pc
- pkgconfig/gstreamer-plugins-bad-uninstalled.pc
- pkgconfig/gstreamer-codecparsers.pc
- pkgconfig/gstreamer-codecparsers-uninstalled.pc
-+pkgconfig/gstreamer-drm.pc
-+pkgconfig/gstreamer-drm-uninstalled.pc
- pkgconfig/gstreamer-insertbin.pc
- pkgconfig/gstreamer-insertbin-uninstalled.pc
- pkgconfig/gstreamer-egl.pc
-diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
-index 1d6cc35..b915d07 100644
---- a/gst-libs/gst/Makefile.am
-+++ b/gst-libs/gst/Makefile.am
-@@ -2,7 +2,7 @@ if HAVE_EGL
- EGL_DIR = egl
- endif
- 
--SUBDIRS = interfaces basecamerabinsrc codecparsers \
-+SUBDIRS = interfaces basecamerabinsrc codecparsers drm \
-        insertbin uridownloader mpegts $(EGL_DIR)
- 
- noinst_HEADERS = gst-i18n-plugin.h gettext.h glib-compat-private.h
-diff --git a/gst-libs/gst/drm/Makefile.am b/gst-libs/gst/drm/Makefile.am
-new file mode 100644
-index 0000000..4808009
---- /dev/null
-+++ b/gst-libs/gst/drm/Makefile.am
-@@ -0,0 +1,36 @@
-+
-+lib_LTLIBRARIES = libgstdrm-@[email protected]
-+
-+CLEANFILES = $(BUILT_SOURCES)
-+
-+libgstdrm_@GST_API_VERSION@_la_SOURCES = \
-+      gstdrmbufferpool.c
-+
-+libgstdrm_@GST_API_VERSION@includedir = \
-+      $(includedir)/gstreamer-@GST_API_VERSION@/gst/drm
-+
-+libgstdrm_@GST_API_VERSION@include_HEADERS = \
-+      gstdrmbufferpool.h
-+
-+libgstdrm_@GST_API_VERSION@_la_CFLAGS = \
-+      $(DRM_CFLAGS) \
-+      $(OMAPDRM_CFLAGS) \
-+      $(GST_PLUGINS_BAD_CFLAGS) \
-+      $(GST_PLUGINS_BASE_CFLAGS) \
-+      -DGST_USE_UNSTABLE_API \
-+      $(GST_CFLAGS)
-+
-+libgstdrm_@GST_API_VERSION@_la_LIBADD = \
-+      $(DRM_LIBS) \
-+      -lgstdmabuf-@GST_API_VERSION@ \
-+      $(GST_PLUGINS_BASE_LIBS) \
-+      $(GST_BASE_LIBS) \
-+      $(GST_LIBS) \
-+      -lgstdmabuf-@GST_API_VERSION@
-+
-+libgstdrm_@GST_API_VERSION@_la_LDFLAGS = \
-+      $(DRM_LDFLAGS) \
-+      $(GST_LIB_LDFLAGS) \
-+      $(GST_ALL_LDFLAGS) \
-+      $(GST_LT_LDFLAGS)
-+
-diff --git a/gst-libs/gst/drm/gstdrmbufferpool.c 
b/gst-libs/gst/drm/gstdrmbufferpool.c
-new file mode 100644
-index 0000000..6ac8044
---- /dev/null
-+++ b/gst-libs/gst/drm/gstdrmbufferpool.c
-@@ -0,0 +1,434 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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
-+ */
-+
-+/**
-+ * SECTION:GstDRMBufferPool
-+ * @short_description: GStreamer DRM buffer pool support
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include <string.h>
-+
-+#include <gst/dmabuf/dmabuf.h>
-+
-+#include "gstdrmbufferpool.h"
-+
-+GST_DEBUG_CATEGORY (drmbufferpool_debug);
-+#define GST_CAT_DEFAULT drmbufferpool_debug
-+
-+static GstFlowReturn gst_drm_alloc_new_buffer (GstBufferPool * pool, 
GstBuffer ** buffer,
-+    GstBufferPoolAcquireParams * params);
-+
-+
-+#define gst_drm_buffer_pool_parent_class parent_class
-+G_DEFINE_TYPE (GstDRMBufferPool, gst_drm_buffer_pool, GST_TYPE_BUFFER_POOL);
-+
-+
-+/**
-+ * gst_drm_buffer_pool_set_config:
-+ * @pool: a #GstBufferPool
-+ * @config: a #GstStructure
-+ *
-+ * Parses the @config to retrieve the caps that is set by 
gst_buffer_pool_config_set_params().
-+ * This caps is then parsed to retrieve the video info. This function can be 
called to
-+ * change the caps of the buffer pool. 
-+ * 
-+ * Returns: the boolean value, TRUE for success and FALSE in case of an errors
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+gboolean
-+gst_drm_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
-+{
-+  GstDRMBufferPool *drmpool = GST_DRM_BUFFER_POOL (pool);
-+  GstCaps *caps;
-+
-+  /* get the caps param already set in the config */
-+  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL))
-+    goto wrong_config;
-+
-+  if (caps == NULL)
-+    goto no_caps;
-+
-+  /* now parse the caps from the config to get the video info */
-+  if (!gst_video_info_from_caps (&drmpool->info, caps))
-+    goto wrong_caps;
-+
-+  GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, drmpool->info.width, 
drmpool->info.height,
-+      caps);
-+
-+  /* Set caps related variables of the pool */
-+  drmpool->caps = gst_caps_ref (caps);
-+  drmpool->width = drmpool->info.width;
-+  drmpool->height = drmpool->info.height;
-+
-+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
-+
-+  /* ERRORS */
-+wrong_config:
-+  {
-+    GST_WARNING_OBJECT (pool, "invalid config");
-+    return FALSE;
-+  }
-+no_caps:
-+  {
-+    GST_WARNING_OBJECT (pool, "no caps in config");
-+    return FALSE;
-+  }
-+wrong_caps:
-+  {
-+    GST_WARNING_OBJECT (pool,
-+        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
-+    return FALSE;
-+  }
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_initialize:
-+ * @pool: a #GstBufferPool
-+ * @element: a #GstElement
-+ * @fd: a file descriptor
-+ * @caps: a #GstCaps
-+ * @size: the padded size of buffers
-+ *
-+ * Initializes the device related info. Sets the params for buffer pool 
config.
-+ * Sets the config of the pool by calling gst_buffer_pool_set_config(). 
-+ * 
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+
-+void
-+gst_drm_buffer_pool_initialize (GstDRMBufferPool * self,
-+    GstElement * element, int fd, GstCaps * caps, guint size)
-+{
-+  GstStructure *conf;
-+
-+  /* store the element that requested for the pool */
-+  if(element)
-+   self->element = gst_object_ref (element);
-+
-+  /* initialize device info */
-+  self->fd = fd;
-+  self->dev = omap_device_new (fd);
-+
-+  /* Padded size of buffers. Can be used for testing requested-buffer-size vs 
obtained-buffer-size */
-+  self->size = size;
-+ 
-+
-+  /* get the present config of the buffer pool */
-+  conf = gst_buffer_pool_get_config (GST_BUFFER_POOL(self));
-+  if(conf == NULL) {
-+   GST_WARNING_OBJECT(self, "NULL config obtained after get_config on the 
pool");
-+   }
-+
-+  /* set the config params : caps, size of the buffers, min number of buffers,
-+     max number of buffers (0 for unlimited) */
-+  gst_buffer_pool_config_set_params (conf, caps, size, 0, 0);
-+  if(conf == NULL){
-+    GST_WARNING_OBJECT(self, "NULL config after set_params");
-+   }
-+
-+  /* set config of the pool */
-+  gst_buffer_pool_set_config (GST_BUFFER_POOL(self), conf);
-+
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_new:
-+ * @element: a #GstElement
-+ * @fd: a file descriptor
-+ * @caps: a #GstCaps
-+ * @size: the padded size of buffers
-+ *
-+ * Creates a GstDRMBufferPool and initializes it through 
gst_drm_buffer_pool_initialize()
-+ *
-+ * Returns: the #GstDRMBufferPool created and initialized.
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+GstDRMBufferPool *
-+gst_drm_buffer_pool_new (GstElement * element,
-+    int fd, GstCaps * caps, guint size)
-+{
-+  GstDRMBufferPool *self = g_object_new (GST_TYPE_DRM_BUFFER_POOL, NULL);
-+
-+  GST_DEBUG_OBJECT (element,
-+      "Creating DRM buffer pool with caps %" GST_PTR_FORMAT, caps);
-+
-+  gst_drm_buffer_pool_initialize (self, element, fd, caps, size);
-+  
-+  return self;
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_size:
-+ * @self: a #GstDRMBufferPool
-+ *
-+ * Obtain the padded size of buffers set during bufferpool creation
-+ *
-+ * Returns: the size of individual buffers within the bufferpool.
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+guint
-+gst_drm_buffer_pool_size (GstDRMBufferPool * self)
-+{
-+  return self->size;
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_check_caps:
-+ * @self: a #GstDRMBufferPool
-+ * @caps: a #GstCaps
-+ *
-+ * Check if the @caps and the caps of the @self is strictly equal
-+ *
-+ * Returns: the boolean value obtained from gst_caps_is_strictly_equal()
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+gboolean
-+gst_drm_buffer_pool_check_caps (GstDRMBufferPool * self, GstCaps * caps)
-+{
-+  return gst_caps_is_strictly_equal (self->caps, caps);
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_destroy:
-+ * @self: a #GstDRMBufferPool
-+ *
-+ * destroy existing bufferpool by gst_object_unref()
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+void
-+gst_drm_buffer_pool_destroy (GstDRMBufferPool * self)
-+{
-+  g_return_if_fail (self);
-+
-+  GST_DEBUG_OBJECT (self->element, "destroy pool (contains: %d buffers)",
-+      self->nbbufs);
-+
-+ /* Sets the buffer pool active to FALSE. Unrefs the buffer pool.
-+    If the the ref_count becomes zero, all buffers are freed and the 
bufferpool is destroyed */  
-+ if(GST_OBJECT_REFCOUNT(self)) {
-+  gst_buffer_pool_set_active (GST_BUFFER_POOL(self), FALSE);
-+  gst_object_unref (self);
-+  }
-+}
-+
-+
-+
-+/**
-+ * gst_drm_buffer_pool_get:
-+ * @self: a #GstDRMBufferPool
-+ * @force_alloc: a boolean indicating if a buffer should be acquired from 
already queued buffers of pool.
-+ *
-+ * Get a buffer from the #GstDRMBufferPool
-+ *
-+ * Returns: the #GstBuffer
-+ *
-+ * Since: 1.2.?
-+ */
-+
-+GstBuffer *
-+gst_drm_buffer_pool_get (GstDRMBufferPool * self, gboolean force_alloc)
-+{
-+  GstBuffer *buf = NULL; 
-+  g_return_val_if_fail (self, NULL);
-+
-+  /* Set the buffer pool to active so that acquire_buffer() is not blocked */
-+  gst_buffer_pool_set_active (GST_BUFFER_POOL(self), TRUE);
-+
-+  /* re-use a buffer off the queued buffers of pool if any are available */
-+  if (!force_alloc) {
-+     gst_buffer_pool_acquire_buffer (GST_BUFFER_POOL (self), &buf, NULL);
-+  } else {
-+     GST_BUFFER_POOL_CLASS(GST_DRM_BUFFER_POOL_GET_CLASS 
(self))->alloc_buffer(GST_BUFFER_POOL (self), &buf, NULL);
-+
-+  }
-+    
-+  /* Set the buffer pool active to FALSE */
-+  gst_buffer_pool_set_active (GST_BUFFER_POOL(self), FALSE);
-+    
-+  GST_LOG_OBJECT (self->element, "returning buf %p", buf);
-+
-+  return GST_BUFFER (buf);
-+}
-+
-+
-+/**
-+ * gst_drm_buffer_pool_put:
-+ * @self: a #GstDRMBufferPool
-+ * @force_alloc: a boolean indicating if a buffer should be acquired from 
already queued buffers of pool.
-+ *
-+ * Get a buffer from the #GstDRMBufferPool
-+ *
-+ * Returns: the boolean value corresponding to success (TRUE)
-+ *
-+ * Since: 1.2.?
-+ */
-+gboolean
-+gst_drm_buffer_pool_put (GstDRMBufferPool * self, GstBuffer * buf)
-+{
-+  gboolean reuse = gst_buffer_pool_is_active (GST_BUFFER_POOL (self));
-+   if(reuse){
-+       gst_buffer_pool_release_buffer(GST_BUFFER_POOL(self) , buf);
-+   }
-+  return reuse;
-+}
-+
-+static void
-+gst_drm_buffer_pool_finalize (GObject * pool)
-+{
-+  GstDRMBufferPool *self = GST_DRM_BUFFER_POOL (pool);
-+  GST_DEBUG_OBJECT (self->element, "finalize");
-+
-+  if (self->caps)
-+    gst_caps_unref (self->caps);
-+  if (self->element)
-+    gst_object_unref (self->element);
-+  if (self->dev)
-+   omap_device_del (self->dev);
-+  G_OBJECT_CLASS (gst_drm_buffer_pool_parent_class)->finalize(pool);
-+}
-+
-+static void
-+gst_drm_buffer_pool_class_init (GstDRMBufferPoolClass * klass)
-+{
-+  GObjectClass *object_class;
-+  GstBufferPoolClass *bclass = GST_BUFFER_POOL_CLASS (klass);
-+  GST_DEBUG_CATEGORY_INIT (drmbufferpool_debug, "drmbufferpool", 0,
-+      "DRM buffer pool");
-+  parent_class = g_type_class_peek_parent (klass);
-+  object_class = G_OBJECT_CLASS (klass);
-+  bclass->set_config = gst_drm_buffer_pool_set_config;
-+  bclass->alloc_buffer = gst_drm_alloc_new_buffer;
-+  object_class->finalize = gst_drm_buffer_pool_finalize;
-+}
-+
-+static void
-+gst_drm_buffer_pool_init (GstDRMBufferPool * self)
-+{
-+#ifndef GST_DISABLE_GST_DEBUG
-+  self->nbbufs = 0;
-+#endif /* DEBUG */
-+}
-+
-+/**
-+ * gst_drm_alloc_new_buffer:
-+ * @bufpool: a #GstBufferPool
-+ * @buffer: a pointer to #GstBuffer
-+ * @params: a #GstBufferPoolAcquireParams
-+ *
-+ * Allocate a new buffer to the #GstDRMBufferPool
-+ *
-+ * Returns: the #GstFlowReturn
-+ *
-+ * Since: 1.2.?
-+ */
-+static GstFlowReturn
-+gst_drm_alloc_new_buffer (GstBufferPool * bufpool, GstBuffer ** buffer,
-+    GstBufferPoolAcquireParams * params)
-+{
-+
-+  /* create a buffer with ref_count = 1 */
-+  GstBuffer *buf = gst_buffer_new ();
-+  GstDRMBufferPool *pool = GST_DRM_BUFFER_POOL(bufpool);
-+  GstVideoCropMeta *crop;
-+  GstMetaDmaBuf *dmabuf;
-+  GstVideoMeta *videometa;
-+
-+  /* TODO: if allocation could be handled via libkms then this
-+   * bufferpool implementation could be completely generic..
-+   * otherwise we might want some support for various different
-+   * drm drivers here:
-+   */
-+
-+  struct omap_bo *bo = omap_bo_new (pool->dev, pool->size, OMAP_BO_WC);
-+  if (!bo) {
-+    GST_WARNING_OBJECT (pool->element, "Failed to create bo");
-+    return GST_FLOW_ERROR;;
-+  }
-+
-+  /* allocating a memory to the buffer we created */
-+  gst_buffer_append_memory (buf,
-+      gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, omap_bo_map (bo),
-+          pool->size, 0, pool->size, NULL, NULL));
-+  
-+  /* Adding the necessary metadatas with initialization*/
-+
-+  dmabuf = gst_buffer_add_dma_buf_meta (GST_BUFFER (buf), omap_bo_dmabuf 
(bo));
-+  if(!dmabuf){
-+    GST_DEBUG_OBJECT (pool, "Failed to add dmabuf meta to buffer");
-+  }
-+
-+  videometa = gst_buffer_add_video_meta(buf,GST_VIDEO_FRAME_FLAG_NONE, 
GST_VIDEO_INFO_FORMAT(&pool->info), pool->width, pool->height);
-+  if(!videometa){
-+    GST_DEBUG_OBJECT (pool, "Failed to add video meta to buffer");
-+  }
-+
-+  crop = gst_buffer_add_video_crop_meta(buf);
-+  if(!crop){
-+    GST_DEBUG_OBJECT (pool, "Failed to add crop meta to buffer");
-+  } else {
-+  crop->x = 0;
-+  crop->y = 0;
-+  crop->height = pool->height;
-+  crop->width = pool->width;
-+  }
-+
-+  /* Pointer to the buffer (passed as argument) should now point to the 
buffer we created */
-+  *buffer = buf;
-+
-+#ifndef GST_DISABLE_GST_DEBUG
-+      {
-+        GST_DEBUG_OBJECT (pool, "Creating new buffer (living buffer: %i)",
-+            ++pool->nbbufs);
-+      }
-+#endif
-+
-+  return GST_FLOW_OK;
-+
-+}
-+
-diff --git a/gst-libs/gst/drm/gstdrmbufferpool.h 
b/gst-libs/gst/drm/gstdrmbufferpool.h
-new file mode 100644
-index 0000000..a9f3fba
---- /dev/null
-+++ b/gst-libs/gst/drm/gstdrmbufferpool.h
-@@ -0,0 +1,138 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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
-+ */
-+
-+#ifndef __GSTDRMBUFFERPOOL_H__
-+#define __GSTDRMBUFFERPOOL_H__
-+
-+#include <gst/gst.h>
-+#include <gst/video/gstvideometa.h>
-+G_BEGIN_DECLS
-+
-+/* TODO replace dependency on libdrm_omap w/ libdrm.. the only thing
-+ * missing is way to allocate buffers, but this should probably be
-+ * done via libdrm?
-+ *
-+ * NOTE: this dependency is only for those who want to subclass us,
-+ * so we could perhaps move the struct definitions into a separate
-+ * header or split out private ptr and move that into the .c file..
-+ */
-+#include <stdint.h>
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+
-+#define GST_TYPE_DRM_BUFFER_POOL (gst_drm_buffer_pool_get_type())
-+#define GST_IS_DRM_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GST_TYPE_DRM_BUFFER_POOL))
-+#define GST_DRM_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GST_TYPE_DRM_BUFFER_POOL, GstDRMBufferPool))
-+#define GST_DRM_BUFFER_POOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GST_TYPE_DRM_BUFFER_POOL, GstDRMBufferPoolClass))
-+#define GST_DRM_BUFFER_POOL_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), 
GST_TYPE_DRM_BUFFER_POOL, GstDRMBufferPoolClass))
-+
-+
-+typedef struct _GstDRMBufferPool GstDRMBufferPool;
-+typedef struct _GstDRMBufferPoolClass GstDRMBufferPoolClass;
-+
-+
-+/*
-+ * GstDRMBufferPool:
-+ */
-+
-+struct _GstDRMBufferPool {
-+  GstBufferPool parent;
-+
-+  int fd;
-+  struct omap_device *dev;
-+
-+  /* output (padded) size including any codec padding: */
-+  guint size;
-+  gint width, height;
-+
-+  /* Video info obtained from caps */
-+  GstVideoInfo info;
-+  
-+  GstCaps         *caps;
-+  GstElement      *element;  /* the element that owns us.. */
-+
-+#ifndef GST_DISABLE_GST_DEBUG
-+  guint            nbbufs;
-+#endif /* DEBUG */
-+
-+  /* TODO add reserved */
-+};
-+
-+struct _GstDRMBufferPoolClass {
-+  GstBufferPoolClass klass;
-+
-+  /* allow the subclass to allocate it's own buffers that extend
-+   * GstDRMBuffer:
-+   */
-+  GstFlowReturn  (*alloc_buffer)(GstBufferPool * pool, GstBuffer ** buffer,
-+    GstBufferPoolAcquireParams * params);
-+
-+  /* The a buffer subclass should not override finalize, as that
-+   * would interfere with reviving the buffer and returning to the
-+   * pool.  Instead you can implement this vmethod to cleanup a
-+   * buffer.
-+   */
-+  void (*buffer_cleanup)(GstDRMBufferPool * pool, GstBuffer *buf);
-+
-+  /* Called when a buffer is added back to the pool after its last
-+   * ref has been removed.
-+   */
-+  void (*buffer_pooled)(GstDRMBufferPool * pool, GstBuffer *buf);
-+
-+  /* TODO add reserved */
-+};
-+
-+GType gst_drm_buffer_pool_get_type (void);
-+
-+void gst_drm_buffer_pool_initialize (GstDRMBufferPool * self,
-+    GstElement * element, int fd, GstCaps * caps, guint size);
-+
-+/* to set/change the config of pool */
-+gboolean gst_drm_buffer_pool_set_config (GstBufferPool * pool, GstStructure * 
config);
-+
-+/* create a new drm buffer pool */
-+GstDRMBufferPool * gst_drm_buffer_pool_new (GstElement * element,
-+    int fd, GstCaps * caps, guint size);
-+
-+/* unref the drm buffer pool */
-+void gst_drm_buffer_pool_destroy (GstDRMBufferPool * self);
-+
-+/* size of buffers in the pool */
-+guint gst_drm_buffer_pool_size (GstDRMBufferPool * self);
-+
-+/* check the present caps of the pool */
-+gboolean gst_drm_buffer_pool_check_caps (GstDRMBufferPool * self,
-+    GstCaps * caps);
-+
-+/* get a buffer from the pool */
-+GstBuffer * gst_drm_buffer_pool_get (GstDRMBufferPool * self,
-+    gboolean force_alloc);
-+
-+/* release a buffer to the pool */
-+gboolean gst_drm_buffer_pool_put (GstDRMBufferPool * self, GstBuffer * buf);
-+
-+G_END_DECLS
-+
-+#endif /* __GSTDRMBUFFERPOOL_H__ */
-diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am
-index 430e123..3fde657 100644
---- a/pkgconfig/Makefile.am
-+++ b/pkgconfig/Makefile.am
-@@ -3,12 +3,14 @@
- pcverfiles =  \
-       gstreamer-plugins-bad-@[email protected] \
-       gstreamer-codecparsers-@[email protected] \
-+        gstreamer-drm-@[email protected] \
-       gstreamer-insertbin-@[email protected] \
-       gstreamer-mpegts-@[email protected]
- 
- pcverfiles_uninstalled = \
-       gstreamer-plugins-bad-@[email protected] \
-       gstreamer-codecparsers-@[email protected] \
-+        gstreamer-drm-@[email protected] \
-       gstreamer-insertbin-@[email protected] \
-       gstreamer-mpegts-@[email protected]
- 
-@@ -36,6 +38,7 @@ CLEANFILES = $(pcverfiles) $(pcverfiles_uninstalled)
- pcinfiles = \
-            gstreamer-plugins-bad.pc.in 
gstreamer-plugins-bad-uninstalled.pc.in \
-            gstreamer-codecparsers.pc.in 
gstreamer-codecparsers-uninstalled.pc.in \
-+           gstreamer-drm.pc.in gstreamer-drm-uninstalled.pc.in \
-            gstreamer-insertbin.pc.in gstreamer-insertbin-uninstalled.pc.in \
-            gstreamer-egl.pc.in gstreamer-egl-uninstalled.pc.in \
-            gstreamer-mpegts.pc.in gstreamer-mpegts-uninstalled.pc.in
-diff --git a/pkgconfig/gstreamer-drm-uninstalled.pc.in 
b/pkgconfig/gstreamer-drm-uninstalled.pc.in
-new file mode 100644
-index 0000000..fc0e3f2
---- /dev/null
-+++ b/pkgconfig/gstreamer-drm-uninstalled.pc.in
-@@ -0,0 +1,12 @@
-+prefix=
-+exec_prefix=
-+libdir=${pcfiledir}/../gst-libs/gst/drm
-+includedir=${pcfiledir}/../gst-libs
-+
-+Name: GStreamer DRM buffer pool, Uninstalled
-+Description: DRM buffer pool for GStreamer elements, uninstalled
-+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
-+Version: @VERSION@
-+Libs: -L${libdir} ${libdir}/libgstdrm-@[email protected]
-+Cflags: -I${includedir}
-+
-diff --git a/pkgconfig/gstreamer-drm.pc.in b/pkgconfig/gstreamer-drm.pc.in
-new file mode 100644
-index 0000000..8182b4f
---- /dev/null
-+++ b/pkgconfig/gstreamer-drm.pc.in
-@@ -0,0 +1,12 @@
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+libdir=@libdir@
-+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
-+
-+Name: GStreamer DRM buffer pool
-+Description: DRM buffer pool for GStreamer elements
-+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
-+Version: @VERSION@
-+Libs: -L${libdir} -lgstdrm-@GST_MAJORMINOR@
-+Cflags: -I${includedir}
-+
-diff --git a/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in 
b/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
-index 6fcf773..ed0e5b0 100644
---- a/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
-+++ b/pkgconfig/gstreamer-plugins-bad-uninstalled.pc.in
-@@ -10,5 +10,5 @@ Name: GStreamer Bad Plugin libraries, Uninstalled
- Description: Streaming media framework, bad plugins libraries, uninstalled
- Version: @VERSION@
- Requires: gstreamer-@GST_API_VERSION@
--Libs: -L@abs_top_builddir@/gst-libs/gst/basecamerabinsrc 
-L@abs_top_builddir@/gst-libs/gst/codecparsers 
-L@abs_top_builddir@/gst-libs/gst/egl 
-L@abs_top_builddir@/gst-libs/gst/insertbin 
-L@abs_top_builddir@/gst-libs/gst/interfaces 
-L@abs_top_builddir@/gst-libs/gst/mpegts 
-L@abs_top_builddir@/gst-libs/gst/signalprocessor 
-L@abs_top_builddir@/gst-libs/gst/video
-+Libs: -L@abs_top_builddir@/gst-libs/gst/basecamerabinsrc 
-L@abs_top_builddir@/gst-libs/gst/codecparsers 
-L@abs_top_builddir@/gst-libs/gst/drm -L@abs_top_builddir@/gst-libs/gst/egl 
-L@abs_top_builddir@/gst-libs/gst/insertbin 
-L@abs_top_builddir@/gst-libs/gst/interfaces 
-L@abs_top_builddir@/gst-libs/gst/mpegts 
-L@abs_top_builddir@/gst-libs/gst/signalprocessor 
-L@abs_top_builddir@/gst-libs/gst/video
- Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
deleted file mode 100644
index 875ff0b..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
+++ /dev/null
@@ -1,1017 +0,0 @@
-From 4aba7f1afbd6c364e649f4c0e539c9a93d59bce6 Mon Sep 17 00:00:00 2001
-From: Pooja Prajod <[email protected]>
-Date: Fri, 12 Dec 2014 12:57:22 +0530
-Subject: [PATCH] Modified waylandsink to accept NV12 format
-
-Wayland sink now accepts NV12 format buffers. A support function 
gst_wl_buffer_priv
-has been added to check if it is a buffer with GstMetaDmabuf metadata set and
-create a wl_buffer. A hashtable is also maintained with GstMetaDmabuf fd as key
----
- configure.ac                 |    6 +-
- ext/wayland/Makefile.am      |   11 +-
- ext/wayland/gstwaylandsink.c |  203 +++++++++++++++++--
- ext/wayland/gstwaylandsink.h |   18 ++
- .../ext/wayland/gstwlbufferpriv.c                  |  156 ++++++++++++++
- .../ext/wayland/gstwlbufferpriv.h                  |   56 +++++
- .../ext/wayland/wayland-drm-client-protocol.h      |  213 ++++++++++++++++++++
- .../ext/wayland/wayland-drm-protocol.c             |   74 +++++++
- 8 files changed, 717 insertions(+), 20 deletions(-)
- create mode 100644 ext/wayland/gstwlbufferpriv.c
- create mode 100644 ext/wayland/gstwlbufferpriv.h
- create mode 100644 ext/wayland/wayland-drm-client-protocol.h
- create mode 100644 ext/wayland/wayland-drm-protocol.c
-
-diff --git a/configure.ac b/configure.ac
-index edf8ea8..b94bd5d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1219,8 +1219,10 @@ AG_GST_CHECK_FEATURE(DIRECTFB, [directfb], dfbvideosink 
, [
- dnl **** Wayland ****
- translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true)
- AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [
--  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0, [
--    HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
-+  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0 dri2 libdrm libdrm_omap, 
[
-+     AC_SUBST(DRM_CFLAGS)
-+     AC_SUBST(DRM_LIBS)
-+     HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
-   ])
- ])
- 
-diff --git a/ext/wayland/Makefile.am b/ext/wayland/Makefile.am
-index e8edf73..2c7a12f 100644
---- a/ext/wayland/Makefile.am
-+++ b/ext/wayland/Makefile.am
-@@ -1,12 +1,15 @@
- plugin_LTLIBRARIES = libgstwaylandsink.la
- 
--libgstwaylandsink_la_SOURCES =  gstwaylandsink.c waylandpool.c
-+libgstwaylandsink_la_SOURCES =  gstwaylandsink.c waylandpool.c 
gstwlbufferpriv.c wayland-drm-protocol.c
- libgstwaylandsink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
--                               $(WAYLAND_CFLAGS)
-+                                $(GST_PLUGINS_BAD_CFLAGS) \
-+                               $(WAYLAND_CFLAGS) $(DRM_CFLAGS)
- libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
-                                -lgstvideo-$(GST_API_VERSION) \
--                               $(WAYLAND_LIBS)
-+                               $(WAYLAND_LIBS) \
-+                               -lgstdmabuf-$(GST_API_VERSION) \
-+                               
$(top_builddir)/gst-libs/gst/drm/libgstdrm-$(GST_API_VERSION).la
- libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
- libgstwaylandsink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
- 
--noinst_HEADERS = gstwaylandsink.h waylandpool.h
-+noinst_HEADERS = gstwaylandsink.h waylandpool.h gstwlbufferpriv.h  
wayland-drm-client-protocol.h
-diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
-index cabf310..bb7d838 100644
---- a/ext/wayland/gstwaylandsink.c
-+++ b/ext/wayland/gstwaylandsink.c
-@@ -41,6 +41,13 @@
- #endif
- 
- #include "gstwaylandsink.h"
-+#include "gstwlbufferpriv.h"
-+
-+#include <wayland-client-protocol.h>
-+#include "wayland-drm-client-protocol.h"
-+
-+#include <linux/input.h>
-+
- 
- /* signals */
- enum
-@@ -60,9 +67,9 @@ GST_DEBUG_CATEGORY (gstwayland_debug);
- #define GST_CAT_DEFAULT gstwayland_debug
- 
- #if G_BYTE_ORDER == G_BIG_ENDIAN
--#define CAPS "{xRGB, ARGB}"
-+#define CAPS "{xRGB, ARGB, NV21}"
- #else
--#define CAPS "{BGRx, BGRA}"
-+#define CAPS "{BGRx, BGRA, NV12, I420, YUY2, UYVY}"
- #endif
- 
- static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
-@@ -181,6 +188,15 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
-           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- }
- 
-+/* Free function for key destruction for the hashtable we are using*/ 
-+static void
-+wlbufferpriv_free_func (GstWLBufferPriv *priv)
-+{
-+  wl_buffer_destroy (priv->buffer);
-+  omap_bo_del (priv->bo);
-+  g_free(priv);
-+}
-+
- static void
- gst_wayland_sink_init (GstWaylandSink * sink)
- {
-@@ -188,7 +204,10 @@ gst_wayland_sink_init (GstWaylandSink * sink)
-   sink->window = NULL;
-   sink->shm_pool = NULL;
-   sink->pool = NULL;
--
-+  sink->drm_pool = NULL;
-+  /* Initialising the hastable for storing map between dmabuf fd and 
GstWLBufferPriv */
-+  sink->wlbufferpriv = g_hash_table_new_full (g_direct_hash, g_direct_equal,
-+      NULL, (GDestroyNotify) wlbufferpriv_free_func);
-   g_mutex_init (&sink->wayland_lock);
- }
- 
-@@ -230,6 +249,9 @@ destroy_display (struct display *display)
-   if (display->shm)
-     wl_shm_destroy (display->shm);
- 
-+  if (display->drm)
-+    wl_drm_destroy (display->drm);
-+
-   if (display->shell)
-     wl_shell_destroy (display->shell);
- 
-@@ -280,6 +302,14 @@ gst_wayland_sink_finalize (GObject * object)
-     destroy_display (sink->display);
-   if (sink->shm_pool)
-     shm_pool_destroy (sink->shm_pool);
-+  if (sink->drm_pool) {
-+    gst_drm_buffer_pool_destroy (sink->drm_pool);
-+    sink->drm_pool = NULL;
-+  }
-+  if (sink->wlbufferpriv){
-+    g_hash_table_destroy (sink->wlbufferpriv);
-+    sink->wlbufferpriv = NULL;
-+  }
- 
-   g_mutex_clear (&sink->wayland_lock);
- 
-@@ -318,6 +348,56 @@ struct wl_shm_listener shm_listenter = {
-   shm_format
- };
- 
-+/* For wl_drm_listener */
-+static void
-+drm_handle_device (void *data, struct wl_drm *drm, const char *device)
-+{
-+  struct display *d = data;
-+  drm_magic_t magic;
-+
-+  d->fd = open (device, O_RDWR | O_CLOEXEC);
-+  if (d->fd == -1) {
-+    GST_ERROR ("could not open %s: %m", device);
-+    // XXX hmm, probably need to throw up some error now??
-+    return;
-+  }
-+
-+  drmGetMagic (d->fd, &magic);
-+  wl_drm_authenticate (d->drm, magic);
-+}
-+
-+
-+static void
-+drm_handle_format (void *data, struct wl_drm *drm, uint32_t format)
-+{
-+  struct display *d = data;
-+  GST_DEBUG ("got format: %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (format));
-+  if (d->drm_format_count < 50) {
-+    d->drm_formats[d->drm_format_count++] = format;
-+  } else {
-+    GST_WARNING ("drm_handle_formats (no room for more formats): %" 
-+                GST_FOURCC_FORMAT, GST_FOURCC_ARGS (format));
-+  }
-+}
-+
-+static void
-+drm_handle_authenticated (void *data, struct wl_drm *drm)
-+{
-+  struct display *d = data;
-+  GST_DEBUG ("authenticated");
-+  d->dev = omap_device_new (d->fd);
-+  d->authenticated = 1;
-+  GST_DEBUG("drm_handle_authenticated: dev: %p, d->authenticated: %d\n", 
d->dev, d->authenticated);
-+}
-+
-+static const struct wl_drm_listener drm_listener = {
-+  drm_handle_device,
-+  drm_handle_format,
-+  drm_handle_authenticated
-+};
-+
-+
-+
- static void
- registry_handle_global (void *data, struct wl_registry *registry,
-     uint32_t id, const char *interface, uint32_t version)
-@@ -332,6 +412,9 @@ registry_handle_global (void *data, struct wl_registry 
*registry,
-   } else if (strcmp (interface, "wl_shm") == 0) {
-     d->shm = wl_registry_bind (registry, id, &wl_shm_interface, 1);
-     wl_shm_add_listener (d->shm, &shm_listenter, d);
-+  } else if (strcmp (interface, "wl_drm") == 0) {
-+    d->drm = wl_registry_bind (registry, id, &wl_drm_interface, 1);
-+    wl_drm_add_listener (d->drm, &drm_listener, d);
-   }
- }
- 
-@@ -351,13 +434,14 @@ create_display (void)
-     free (display);
-     return NULL;
-   }
-+  display->authenticated = 0;
- 
-   display->registry = wl_display_get_registry (display->display);
-   wl_registry_add_listener (display->registry, &registry_listener, display);
- 
-   wl_display_roundtrip (display->display);
--  if (display->shm == NULL) {
--    GST_ERROR ("No wl_shm global..");
-+  if (display->shm == NULL && display->drm == NULL) {
-+    GST_ERROR ("No wl_shm global and wl_drm global..");
-     return NULL;
-   }
- 
-@@ -384,6 +468,61 @@ gst_wayland_sink_format_from_caps (uint32_t * wl_format, 
GstCaps * caps)
-   return (*wl_format != -1);
- }
- 
-+static void
-+wait_authentication (GstWaylandSink * sink)
-+{
-+  GST_DEBUG_OBJECT (sink, "Before wait aunthenticated value is %d : \n", 
sink->display->authenticated );
-+  while (!sink->display->authenticated) {
-+    GST_DEBUG_OBJECT (sink, "waiting for authentication");
-+    wl_display_roundtrip (sink->display->display);
-+  }
-+  GST_DEBUG_OBJECT (sink, "After wait aunthenticated value is %d : \n", 
sink->display->authenticated );
-+}
-+
-+/* create a drm buffer pool if the video format is NV12 */
-+static gboolean
-+create_pool (GstWaylandSink * sink, GstCaps * caps)
-+{
-+
-+  GstVideoInfo info;
-+
-+  wait_authentication (sink);
-+
-+  while (!sink->display->authenticated) {
-+    GST_DEBUG_OBJECT (sink, "not authenticated yet");
-+  }
-+
-+  if (!gst_video_info_from_caps (&info, caps))
-+    goto invalid_format;
-+
-+  
-+
-+  if (sink->drm_pool) {
-+    GST_INFO_OBJECT (sink, "recreating pool");
-+    gst_drm_buffer_pool_destroy (sink->drm_pool);
-+    sink->drm_pool = NULL;
-+  }
-+
-+  sink->video_width = info.width;
-+  sink->video_height = info.height;
-+
-+  sink->drm_pool = gst_drm_buffer_pool_new (GST_ELEMENT (sink),
-+      sink->display->fd, caps, info.size);
-+  if(sink->drm_pool){
-+    return TRUE;
-+   }
-+  else {
-+    return FALSE;
-+   }
-+
-+invalid_format:
-+  {
-+    GST_DEBUG_OBJECT (sink,
-+        "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
-+    return FALSE;
-+  }
-+}
-+
- static gboolean
- gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
- {
-@@ -393,6 +532,7 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * 
caps)
-   GstStructure *structure;
-   static GstAllocationParams params = { 0, 0, 0, 15, };
-   guint size;
-+ GstVideoFormat fmt;
- 
-   sink = GST_WAYLAND_SINK (bsink);
- 
-@@ -401,15 +541,23 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps 
* caps)
-   if (!gst_video_info_from_caps (&info, caps))
-     goto invalid_format;
- 
-+  fmt = GST_VIDEO_INFO_FORMAT(&info);
-+  if (fmt == GST_VIDEO_FORMAT_NV12 ||  fmt == GST_VIDEO_FORMAT_I420 || fmt == 
GST_VIDEO_FORMAT_YUY2 || fmt == GST_VIDEO_FORMAT_UYVY){
-+    create_pool(sink, caps);
-+    return TRUE;
-+  } 
-+
-   if (!gst_wayland_sink_format_from_caps (&sink->format, caps))
-     goto invalid_format;
- 
-+
-   if (!(sink->display->formats & (1 << sink->format))) {
-     GST_DEBUG_OBJECT (sink, "%s not available",
-         gst_wayland_format_to_string (sink->format));
-     return FALSE;
-   }
- 
-+
-   sink->video_width = info.width;
-   sink->video_height = info.height;
-   size = info.size;
-@@ -417,6 +565,7 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * 
caps)
-   /* create a new pool for the new configuration */
-   newpool = gst_wayland_buffer_pool_new (sink);
- 
-+
-   if (!newpool) {
-     GST_DEBUG_OBJECT (sink, "Failed to create new pool");
-     return FALSE;
-@@ -532,6 +681,7 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, 
GstQuery * query)
- {
-   GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
-   GstBufferPool *pool;
-+  GstDRMBufferPool *drm_pool;
-   GstStructure *config;
-   GstCaps *caps;
-   guint size;
-@@ -562,6 +712,7 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, 
GstQuery * query)
-     gst_structure_free (config);
-   }
- 
-+
-   if (pool == NULL && need_pool) {
-     GstVideoInfo info;
- 
-@@ -583,7 +734,6 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, 
GstQuery * query)
-     gst_query_add_allocation_pool (query, pool, size, 2, 0);
-     gst_object_unref (pool);
-   }
--
-   return TRUE;
- 
-   /* ERRORS */
-@@ -624,35 +774,54 @@ static const struct wl_callback_listener 
frame_callback_listener = {
-   frame_redraw_callback
- };
- 
-+
- static GstFlowReturn
- gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
- {
-   GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
-   GstVideoRectangle src, dst, res;
--  GstBuffer *to_render;
-+  GstBuffer *to_render = NULL;
-   GstWlMeta *meta;
-   GstFlowReturn ret;
-   struct window *window;
-   struct display *display;
--
-+  GstWLBufferPriv *priv;
-+  GstMapInfo mapsrc;
-+  
-   GST_LOG_OBJECT (sink, "render buffer %p", buffer);
--  if (!sink->window)
--    create_window (sink, sink->display, sink->video_width, 
sink->video_height);
-+  if (!sink->window){
-+    gint video_width = sink->video_width;
-+    gint video_height = sink->video_height;
-+    GstVideoCropMeta* crop = gst_buffer_get_video_crop_meta (buffer);
-+    if(crop){
-+       if (crop->width) {
-+         video_width = crop->width;
-+       } 
-+      if (crop->height) {  
-+         video_height = crop->height;
-+       }
-+    }
-+    create_window (sink, sink->display, video_width, video_height);
-+   }
- 
-   window = sink->window;
-   display = sink->display;
- 
-   meta = gst_buffer_get_wl_meta (buffer);
-+  priv = gst_wl_buffer_priv (sink, buffer);
- 
-   if (window->redraw_pending) {
-     wl_display_dispatch (display->display);
-   }
- 
-+  
-   if (meta && meta->sink == sink) {
-     GST_LOG_OBJECT (sink, "buffer %p from our pool, writing directly", 
buffer);
-     to_render = buffer;
-+  } else if(priv) {
-+    to_render = buffer;
-+    GST_LOG_OBJECT (sink, " priv buffer %p from drm pool, writing directly", 
buffer);
-   } else {
--    GstMapInfo src;
-     GST_LOG_OBJECT (sink, "buffer %p not from our pool, copying", buffer);
- 
-     if (!sink->pool)
-@@ -665,9 +834,9 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * 
buffer)
-     if (ret != GST_FLOW_OK)
-       goto no_buffer;
- 
--    gst_buffer_map (buffer, &src, GST_MAP_READ);
--    gst_buffer_fill (to_render, 0, src.data, src.size);
--    gst_buffer_unmap (buffer, &src);
-+    gst_buffer_map (buffer, &mapsrc, GST_MAP_READ);
-+    gst_buffer_fill (to_render, 0, mapsrc.data, mapsrc.size);
-+    gst_buffer_unmap (buffer, &mapsrc);
- 
-     meta = gst_buffer_get_wl_meta (to_render);
-   }
-@@ -679,7 +848,13 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * 
buffer)
- 
-   gst_video_sink_center_rect (src, dst, &res, FALSE);
- 
-+  /* display the buffer stored in priv, if the buffer obtained returns a priv 
*/
-+  if(priv){
-+   wl_surface_attach (sink->window->surface, priv->buffer, res.x, res.y);
-+  } else {
-   wl_surface_attach (sink->window->surface, meta->wbuffer, 0, 0);
-+  }
-+  
-   wl_surface_damage (sink->window->surface, 0, 0, res.w, res.h);
-   window->redraw_pending = TRUE;
-   window->callback = wl_surface_frame (window->surface);
-diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
-index cb3383e..b3fbbac 100644
---- a/ext/wayland/gstwaylandsink.h
-+++ b/ext/wayland/gstwaylandsink.h
-@@ -39,9 +39,11 @@
- #include <gst/video/video.h>
- #include <gst/video/gstvideosink.h>
- #include <gst/video/gstvideometa.h>
-+#include <gst/drm/gstdrmbufferpool.h>
- 
- #include <wayland-client.h>
- 
-+
- #define GST_TYPE_WAYLAND_SINK \
-           (gst_wayland_sink_get_type())
- #define GST_WAYLAND_SINK(obj) \
-@@ -62,7 +64,19 @@ struct  display
-   struct wl_compositor *compositor;
-   struct wl_shell *shell;
-   struct wl_shm *shm;
-+  struct wl_drm *drm;
-   uint32_t formats;
-+
-+  uint32_t drm_formats[50];
-+  int drm_format_count;
-+  /* the drm device.. needed for sharing direct-render buffers..
-+   * TODO nothing about this should really be omapdrm specific.  But some
-+   * of the code, like hashtable of imported buffers in libdrm_omap should
-+   * be refactored out into some generic libdrm code..
-+   */
-+  struct omap_device *dev;
-+  int fd;
-+  int authenticated;
- };
- 
- struct window
-@@ -99,6 +113,10 @@ struct _GstWaylandSink
- 
-   GstBufferPool *pool;
- 
-+  /* for NV12 buffers on wl_drm_buffer */
-+  GstDRMBufferPool *drm_pool;
-+  GHashTable *wlbufferpriv;
-+
-   GMutex wayland_lock;
- 
-   gint video_width;
-diff --git a/ext/wayland/gstwlbufferpriv.c b/ext/wayland/gstwlbufferpriv.c
-new file mode 100644
-index 0000000..07fdf70
---- /dev/null
-+++ b/ext/wayland/gstwlbufferpriv.c
-@@ -0,0 +1,156 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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 <stdint.h>
-+#include <gst/gst.h>
-+#include <gst/dmabuf/dmabuf.h>
-+#include <gst/video/gstvideometa.h>
-+
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+
-+#include "gstwaylandsink.h"
-+#include "gstwlbufferpriv.h"
-+#include "wayland-drm-client-protocol.h"
-+
-+
-+/* Create planar wl_buffer that can be given to waylandsink.
-+ * Crop info is also used */
-+static int
-+create_wl_buffer (GstWLBufferPriv * priv, GstWaylandSink * sink,
-+    GstBuffer * buf)
-+{
-+  GstVideoCropMeta *crop;
-+  gint video_width = sink->video_width;
-+  gint video_height = sink->video_height;
-+
-+  /* TODO get format, etc from caps.. and query device for
-+   * supported formats, and make this all more flexible to
-+   * cope with various formats:
-+   */
-+  uint32_t fourcc = GST_MAKE_FOURCC ('N', 'V', '1', '2');
-+  uint32_t name;
-+
-+  /* note: wayland and mesa use the terminology:
-+   *    stride - rowstride in bytes
-+   *    pitch  - rowstride in pixels
-+   */
-+  uint32_t strides[3] = {
-+    GST_ROUND_UP_4 (sink->video_width), GST_ROUND_UP_4 (sink->video_width), 0,
-+  };
-+  uint32_t offsets[3] = {
-+    0, strides[0] * sink->video_height, 0
-+  };
-+
-+  crop = gst_buffer_get_video_crop_meta (buf);
-+  if (crop) {
-+    guint left, top;
-+    left = crop->y;
-+    top = crop->x;
-+
-+    offsets[0] = left;
-+    offsets[1] += (video_width * top / 2) + left;
-+    if(crop->width)
-+     video_width = crop->width;
-+  }
-+
-+  if (omap_bo_get_name (priv->bo, &name)) {
-+    GST_WARNING_OBJECT (sink, "could not get name");
-+    return -1;
-+  }
-+
-+ GST_LOG_OBJECT (sink,"width = %d , height = %d , fourcc = %d ",  
video_width, video_height, fourcc );
-+
-+  priv->buffer = wl_drm_create_planar_buffer (sink->display->drm, name,
-+      video_width, video_height, fourcc,
-+      offsets[0], strides[0],
-+      offsets[1], strides[1],
-+      offsets[2], strides[2]);
-+
-+  GST_DEBUG_OBJECT (sink, "create planar buffer: %p (name=%d)",
-+      priv->buffer, name);
-+
-+  return priv->buffer ? 0 : -1;
-+}
-+
-+
-+/**
-+ * gst_wl_buffer_priv:
-+ * @sink: a #GstWaylandSink
-+ * @buf: a pointer to #GstBuffer
-+ *
-+ * Checks if the @buf has a GstMetaDmaBuf metadata set. If it doesn't we 
return a NULL
-+ * indicating its not a dmabuf buffer. We maintain a hashtable with dmabuf fd 
as key and 
-+ * the GstWLBufferPriv structure as value
-+ *
-+ * Returns: the #GstWLBufferPriv
-+ *
-+ * Since: 1.2.?
-+ */
-+GstWLBufferPriv *
-+gst_wl_buffer_priv (GstWaylandSink * sink, GstBuffer * buf)
-+{
-+  
-+    GstMetaDmaBuf *dmabuf = gst_buffer_get_dma_buf_meta (buf);
-+    GstWLBufferPriv *priv;
-+    int fd,fd_copy;
-+
-+    /* if it isn't a dmabuf buffer that we can import, then there
-+     * is nothing we can do with it:
-+     */
-+    if (!dmabuf) {
-+      GST_DEBUG_OBJECT (sink, "not importing non dmabuf buffer");
-+      return NULL;
-+    }
-+    fd = gst_dma_buf_meta_get_fd (dmabuf);
-+    fd_copy =fd;
-+
-+     /* lookup the hashtable with fd as key. If present return bo & buffer 
structure */
-+    priv = g_hash_table_lookup (sink->wlbufferpriv, (gpointer)fd_copy);
-+    if(priv) {
-+       return priv;
-+     }
-+
-+    priv = g_malloc0 (sizeof (GstWLBufferPriv));
-+    priv->bo = omap_bo_from_dmabuf (sink->display->dev, fd);
-+
-+    if (create_wl_buffer (priv, sink, buf)) {
-+      GST_WARNING_OBJECT (sink, "could not create framebuffer: %s",
-+          strerror (errno));
-+      g_free(priv);
-+      return NULL;
-+    }
-+
-+    /* if fd not present, write to hash table fd and the corresponding priv. 
*/
-+    g_hash_table_insert(sink->wlbufferpriv, (gpointer)fd_copy, priv);    
-+    
-+   
-+  return priv;
-+}
-+
-diff --git a/ext/wayland/gstwlbufferpriv.h b/ext/wayland/gstwlbufferpriv.h
-new file mode 100644
-index 0000000..fbce4a2
---- /dev/null
-+++ b/ext/wayland/gstwlbufferpriv.h
-@@ -0,0 +1,56 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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
-+ */
-+
-+#ifndef __GSTWLBUFFERPRIV_H__
-+#define __GSTWLBUFFERPRIV_H__
-+
-+#include <stdint.h>
-+#include <gst/gst.h>
-+
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+
-+#include <wayland-client.h>
-+
-+G_BEGIN_DECLS
-+
-+
-+typedef struct
-+{
-+  struct omap_bo *bo;
-+  struct wl_buffer *buffer;
-+
-+}GstWLBufferPriv;
-+
-+
-+GType gst_wl_buffer_priv_get_type (void);
-+
-+/* Returns a GstWLBufferPriv, if it has a dmabuf fd meatadata */
-+GstWLBufferPriv * gst_wl_buffer_priv (GstWaylandSink *sink, GstBuffer * buf);
-+
-+G_END_DECLS
-+
-+
-+#endif /* __GSTWLBUFFERPRIV_H__ */
-diff --git a/ext/wayland/wayland-drm-client-protocol.h 
b/ext/wayland/wayland-drm-client-protocol.h
-new file mode 100644
-index 0000000..7ddb614
---- /dev/null
-+++ b/ext/wayland/wayland-drm-client-protocol.h
-@@ -0,0 +1,213 @@
-+/* 
-+ * Copyright © 2008-2011 Kristian Høgsberg
-+ * Copyright © 2010-2011 Intel Corporation
-+ * 
-+ * Permission to use, copy, modify, distribute, and sell this
-+ * software and its documentation for any purpose is hereby granted
-+ * without fee, provided that\n the above copyright notice appear in
-+ * all copies and that both that copyright notice and this permission
-+ * notice appear in supporting documentation, and that the name of
-+ * the copyright holders not be used in advertising or publicity
-+ * pertaining to distribution of the software without specific,
-+ * written prior permission.  The copyright holders make no
-+ * representations about the suitability of this software for any
-+ * purpose.  It is provided "as is" without express or implied
-+ * warranty.
-+ * 
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
-+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-+ * THIS SOFTWARE.
-+ */
-+
-+#ifndef DRM_CLIENT_PROTOCOL_H
-+#define DRM_CLIENT_PROTOCOL_H
-+
-+#ifdef  __cplusplus
-+extern "C" {
-+#endif
-+
-+#include <stdint.h>
-+#include <stddef.h>
-+#include "wayland-util.h"
-+
-+struct wl_client;
-+struct wl_resource;
-+
-+struct wl_drm;
-+
-+extern const struct wl_interface wl_drm_interface;
-+
-+#ifndef WL_DRM_ERROR_ENUM
-+#define WL_DRM_ERROR_ENUM
-+enum wl_drm_error {
-+      WL_DRM_ERROR_AUTHENTICATE_FAIL = 0,
-+      WL_DRM_ERROR_INVALID_FORMAT = 1,
-+      WL_DRM_ERROR_INVALID_NAME = 2,
-+};
-+#endif /* WL_DRM_ERROR_ENUM */
-+
-+#ifndef WL_DRM_FORMAT_ENUM
-+#define WL_DRM_FORMAT_ENUM
-+enum wl_drm_format {
-+      WL_DRM_FORMAT_C8 = 0x20203843,
-+      WL_DRM_FORMAT_RGB332 = 0x38424752,
-+      WL_DRM_FORMAT_BGR233 = 0x38524742,
-+      WL_DRM_FORMAT_XRGB4444 = 0x32315258,
-+      WL_DRM_FORMAT_XBGR4444 = 0x32314258,
-+      WL_DRM_FORMAT_RGBX4444 = 0x32315852,
-+      WL_DRM_FORMAT_BGRX4444 = 0x32315842,
-+      WL_DRM_FORMAT_ARGB4444 = 0x32315241,
-+      WL_DRM_FORMAT_ABGR4444 = 0x32314241,
-+      WL_DRM_FORMAT_RGBA4444 = 0x32314152,
-+      WL_DRM_FORMAT_BGRA4444 = 0x32314142,
-+      WL_DRM_FORMAT_XRGB1555 = 0x35315258,
-+      WL_DRM_FORMAT_XBGR1555 = 0x35314258,
-+      WL_DRM_FORMAT_RGBX5551 = 0x35315852,
-+      WL_DRM_FORMAT_BGRX5551 = 0x35315842,
-+      WL_DRM_FORMAT_ARGB1555 = 0x35315241,
-+      WL_DRM_FORMAT_ABGR1555 = 0x35314241,
-+      WL_DRM_FORMAT_RGBA5551 = 0x35314152,
-+      WL_DRM_FORMAT_BGRA5551 = 0x35314142,
-+      WL_DRM_FORMAT_RGB565 = 0x36314752,
-+      WL_DRM_FORMAT_BGR565 = 0x36314742,
-+      WL_DRM_FORMAT_RGB888 = 0x34324752,
-+      WL_DRM_FORMAT_BGR888 = 0x34324742,
-+      WL_DRM_FORMAT_XRGB8888 = 0x34325258,
-+      WL_DRM_FORMAT_XBGR8888 = 0x34324258,
-+      WL_DRM_FORMAT_RGBX8888 = 0x34325852,
-+      WL_DRM_FORMAT_BGRX8888 = 0x34325842,
-+      WL_DRM_FORMAT_ARGB8888 = 0x34325241,
-+      WL_DRM_FORMAT_ABGR8888 = 0x34324241,
-+      WL_DRM_FORMAT_RGBA8888 = 0x34324152,
-+      WL_DRM_FORMAT_BGRA8888 = 0x34324142,
-+      WL_DRM_FORMAT_XRGB2101010 = 0x30335258,
-+      WL_DRM_FORMAT_XBGR2101010 = 0x30334258,
-+      WL_DRM_FORMAT_RGBX1010102 = 0x30335852,
-+      WL_DRM_FORMAT_BGRX1010102 = 0x30335842,
-+      WL_DRM_FORMAT_ARGB2101010 = 0x30335241,
-+      WL_DRM_FORMAT_ABGR2101010 = 0x30334241,
-+      WL_DRM_FORMAT_RGBA1010102 = 0x30334152,
-+      WL_DRM_FORMAT_BGRA1010102 = 0x30334142,
-+      WL_DRM_FORMAT_YUYV = 0x56595559,
-+      WL_DRM_FORMAT_YVYU = 0x55595659,
-+      WL_DRM_FORMAT_UYVY = 0x59565955,
-+      WL_DRM_FORMAT_VYUY = 0x59555956,
-+      WL_DRM_FORMAT_AYUV = 0x56555941,
-+      WL_DRM_FORMAT_NV12 = 0x3231564e,
-+      WL_DRM_FORMAT_NV21 = 0x3132564e,
-+      WL_DRM_FORMAT_NV16 = 0x3631564e,
-+      WL_DRM_FORMAT_NV61 = 0x3136564e,
-+      WL_DRM_FORMAT_YUV410 = 0x39565559,
-+      WL_DRM_FORMAT_YVU410 = 0x39555659,
-+      WL_DRM_FORMAT_YUV411 = 0x31315559,
-+      WL_DRM_FORMAT_YVU411 = 0x31315659,
-+      WL_DRM_FORMAT_YUV420 = 0x32315559,
-+      WL_DRM_FORMAT_YVU420 = 0x32315659,
-+      WL_DRM_FORMAT_YUV422 = 0x36315559,
-+      WL_DRM_FORMAT_YVU422 = 0x36315659,
-+      WL_DRM_FORMAT_YUV444 = 0x34325559,
-+      WL_DRM_FORMAT_YVU444 = 0x34325659,
-+};
-+#endif /* WL_DRM_FORMAT_ENUM */
-+
-+struct wl_drm_listener {
-+      /**
-+       * device - (none)
-+       * @name: (none)
-+       */
-+      void (*device)(void *data,
-+                     struct wl_drm *wl_drm,
-+                     const char *name);
-+      /**
-+       * format - (none)
-+       * @format: (none)
-+       */
-+      void (*format)(void *data,
-+                     struct wl_drm *wl_drm,
-+                     uint32_t format);
-+      /**
-+       * authenticated - (none)
-+       */
-+      void (*authenticated)(void *data,
-+                            struct wl_drm *wl_drm);
-+};
-+
-+static inline int
-+wl_drm_add_listener(struct wl_drm *wl_drm,
-+                  const struct wl_drm_listener *listener, void *data)
-+{
-+      return wl_proxy_add_listener((struct wl_proxy *) wl_drm,
-+                                   (void (**)(void)) listener, data);
-+}
-+
-+#define WL_DRM_AUTHENTICATE   0
-+#define WL_DRM_CREATE_BUFFER  1
-+#define WL_DRM_CREATE_PLANAR_BUFFER   2
-+
-+static inline void
-+wl_drm_set_user_data(struct wl_drm *wl_drm, void *user_data)
-+{
-+      wl_proxy_set_user_data((struct wl_proxy *) wl_drm, user_data);
-+}
-+
-+static inline void *
-+wl_drm_get_user_data(struct wl_drm *wl_drm)
-+{
-+      return wl_proxy_get_user_data((struct wl_proxy *) wl_drm);
-+}
-+
-+static inline void
-+wl_drm_destroy(struct wl_drm *wl_drm)
-+{
-+      wl_proxy_destroy((struct wl_proxy *) wl_drm);
-+}
-+
-+static inline void
-+wl_drm_authenticate(struct wl_drm *wl_drm, uint32_t id)
-+{
-+      wl_proxy_marshal((struct wl_proxy *) wl_drm,
-+                       WL_DRM_AUTHENTICATE, id);
-+}
-+
-+static inline struct wl_buffer *
-+wl_drm_create_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t width, 
int32_t height, uint32_t stride, uint32_t format)
-+{
-+      struct wl_proxy *id;
-+
-+      id = wl_proxy_create((struct wl_proxy *) wl_drm,
-+                           &wl_buffer_interface);
-+      if (!id)
-+              return NULL;
-+
-+      wl_proxy_marshal((struct wl_proxy *) wl_drm,
-+                       WL_DRM_CREATE_BUFFER, id, name, width, height, stride, 
format);
-+
-+      return (struct wl_buffer *) id;
-+}
-+
-+static inline struct wl_buffer *
-+wl_drm_create_planar_buffer(struct wl_drm *wl_drm, uint32_t name, int32_t 
width, int32_t height, uint32_t format, int32_t offset0, int32_t stride0, 
int32_t offset1, int32_t stride1, int32_t offset2, int32_t stride2)
-+{
-+      struct wl_proxy *id;
-+
-+      id = wl_proxy_create((struct wl_proxy *) wl_drm,
-+                           &wl_buffer_interface);
-+      if (!id)
-+              return NULL;
-+
-+      wl_proxy_marshal((struct wl_proxy *) wl_drm,
-+                       WL_DRM_CREATE_PLANAR_BUFFER, id, name, width, height, 
format, offset0, stride0, offset1, stride1, offset2, stride2);
-+
-+      return (struct wl_buffer *) id;
-+}
-+
-+#ifdef  __cplusplus
-+}
-+#endif
-+
-+#endif
-diff --git a/ext/wayland/wayland-drm-protocol.c 
b/ext/wayland/wayland-drm-protocol.c
-new file mode 100644
-index 0000000..939af53
---- /dev/null
-+++ b/ext/wayland/wayland-drm-protocol.c
-@@ -0,0 +1,74 @@
-+/* 
-+ * Copyright © 2008-2011 Kristian Høgsberg
-+ * Copyright © 2010-2011 Intel Corporation
-+ * 
-+ * Permission to use, copy, modify, distribute, and sell this
-+ * software and its documentation for any purpose is hereby granted
-+ * without fee, provided that\n the above copyright notice appear in
-+ * all copies and that both that copyright notice and this permission
-+ * notice appear in supporting documentation, and that the name of
-+ * the copyright holders not be used in advertising or publicity
-+ * pertaining to distribution of the software without specific,
-+ * written prior permission.  The copyright holders make no
-+ * representations about the suitability of this software for any
-+ * purpose.  It is provided "as is" without express or implied
-+ * warranty.
-+ * 
-+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
-+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
-+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-+ * THIS SOFTWARE.
-+ */
-+
-+#include <stdlib.h>
-+#include <stdint.h>
-+#include "wayland-util.h"
-+
-+#define ARRAY_LENGTH(a) (sizeof (a) /sizeof (a)[0])
-+
-+extern const struct wl_interface wl_buffer_interface;
-+extern const struct wl_interface wl_buffer_interface;
-+
-+static const struct wl_interface *types[] = {
-+      NULL,
-+      &wl_buffer_interface,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      &wl_buffer_interface,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+      NULL,
-+};
-+
-+static const struct wl_message wl_drm_requests[] = {
-+      { "authenticate", "u", types + 0 },
-+      { "create_buffer", "nuiiuu", types + 1 },
-+      { "create_planar_buffer", "nuiiuiiiiii", types + 7 },
-+};
-+
-+static const struct wl_message wl_drm_events[] = {
-+      { "device", "s", types + 0 },
-+      { "format", "u", types + 0 },
-+      { "authenticated", "", types + 0 },
-+};
-+
-+WL_EXPORT const struct wl_interface wl_drm_interface = {
-+      "wl_drm", 1,
-+      ARRAY_LENGTH(wl_drm_requests), wl_drm_requests,
-+      ARRAY_LENGTH(wl_drm_events), wl_drm_events,
-+};
-+
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
deleted file mode 100644
index 8c19fa6..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
+++ /dev/null
@@ -1,1457 +0,0 @@
-From efe7189ee13e78664bbe373c6fd890280c9dee50 Mon Sep 17 00:00:00 2001
-From: Pooja Prajod <[email protected]>
-Date: Fri, 12 Dec 2014 13:28:10 +0530
-Subject: [PATCH] Added KMSsink support
-
----
- configure.ac               |   12 +
- sys/Makefile.am            |   10 +-
- sys/kms/Makefile.am        |   29 +
- sys/kms/gstdrmutils.c      |  292 +++++++++
- sys/kms/gstdrmutils.h      |   40 ++
- sys/kms/gstkmsbufferpriv.c |  124 ++++
- sys/kms/gstkmsbufferpriv.h |   64 ++
- sys/kms/gstkmssink.c       |  682 ++++++++++++++++++++++
- sys/kms/gstkmssink.h       |   91 +++
- 9 files changed, 1342 insertions(+), 2 deletions(-)
- create mode 100644 sys/kms/Makefile.am
- create mode 100644 sys/kms/gstdrmutils.c
- create mode 100644 sys/kms/gstdrmutils.h
- create mode 100644 sys/kms/gstkmsbufferpriv.c
- create mode 100644 sys/kms/gstkmsbufferpriv.h
- create mode 100644 sys/kms/gstkmssink.c
- create mode 100644 sys/kms/gstkmssink.h
-
-diff --git a/configure.ac b/configure.ac
-index b94bd5d..8cdf972 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1400,6 +1400,16 @@ AG_GST_CHECK_FEATURE(KATE, [Kate], kate, [
-   AC_SUBST(TIGER_LIBS)
- ],,,[AM_CONDITIONAL(USE_TIGER, false)])
- 
-+dnl *** kms ***
-+translit(dnm, m, l) AM_CONDITIONAL(USE_KMS, true)
-+AG_GST_CHECK_FEATURE(KMS, [kmssink], kms, [
-+  PKG_CHECK_MODULES([DRM], [libdrm libdrm_omap], HAVE_KMS=yes, HAVE_KMS=no)
-+  PKG_CHECK_MODULES(LIBDCE, [libdce >= 1.0.0], HAVE_KMS=yes, HAVE_KMS=no)
-+  AC_SUBST(DRM_CFLAGS)
-+  AC_SUBST(DRM_LIBS)
-+])
-+
-+
- dnl *** ladspa ***
- translit(dnm, m, l) AM_CONDITIONAL(USE_LADSPA, true)
- AG_GST_CHECK_FEATURE(LADSPA, [ladspa], ladspa, [
-@@ -2212,6 +2222,7 @@ AM_CONDITIONAL(USE_GSM, false)
- AM_CONDITIONAL(USE_HLS, false)
- AM_CONDITIONAL(USE_KATE, false)
- AM_CONDITIONAL(USE_TIGER, false)
-+AM_CONDITIONAL(USE_KMS, false)
- AM_CONDITIONAL(USE_LADSPA, false)
- AM_CONDITIONAL(USE_LV2, false)
- AM_CONDITIONAL(USE_LIBMMS, false)
-@@ -2439,6 +2450,7 @@ sys/osxvideo/Makefile
- sys/qtwrapper/Makefile
- sys/mfc/Makefile
- sys/shm/Makefile
-+sys/kms/Makefile
- sys/uvch264/Makefile
- sys/vcd/Makefile
- sys/vdpau/Makefile
-diff --git a/sys/Makefile.am b/sys/Makefile.am
-index b1abda6..b87a1ca 100644
---- a/sys/Makefile.am
-+++ b/sys/Makefile.am
-@@ -106,6 +106,12 @@ else
- PVR_DIR=
- endif
- 
-+if USE_KMS
-+KMS_DIR=kms
-+else
-+KMS_DIR=
-+endif
-+
- if USE_SHM
- SHM_DIR=shm
- else
-@@ -166,9 +172,9 @@ else
- MFC_DIR=
- endif
- 
--SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) 
$(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) 
$(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) 
$(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) 
$(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) $(WASAPI_DIR) 
$(MFC_DIR)
-+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) 
$(BLUEZ_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) 
$(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) 
$(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(KMS_DIR) $(SHM_DIR) 
$(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) 
$(WASAPI_DIR) $(MFC_DIR)
- 
- DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia applemedia-nonpublic 
avc bluez d3dvideosink decklink directdraw directsound dvb linsys fbdev 
dshowdecwrapper dshowsrcwrapper dshowvideosink \
--              opensles osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi 
wininet winks winscreencap mfc
-+              opensles osxvideo pvr2d qtwrapper kms shm uvch264 vcd vdpau 
wasapi wininet winks winscreencap mfc
- 
- include $(top_srcdir)/common/parallel-subdirs.mak
-diff --git a/sys/kms/Makefile.am b/sys/kms/Makefile.am
-new file mode 100644
-index 0000000..035efef
---- /dev/null
-+++ b/sys/kms/Makefile.am
-@@ -0,0 +1,29 @@
-+plugin_LTLIBRARIES = libgstkmssink.la
-+
-+libgstkmssink_la_SOURCES = \
-+      gstkmssink.c \
-+      gstkmsbufferpriv.c \
-+      gstdrmutils.c
-+
-+libgstkmssink_la_CFLAGS = \
-+      $(GST_PLUGINS_BAD_CFLAGS) \
-+      $(GST_PLUGINS_BASE_CFLAGS) \
-+      $(GST_BASE_CFLAGS) \
-+      $(LIBDCE_CFLAGS) \
-+      $(GST_CFLAGS) \
-+      $(DRM_CFLAGS)
-+
-+libgstkmssink_la_LIBADD = \
-+      $(GST_PLUGINS_BASE_LIBS) \
-+      $(GST_BASE_LIBS) \
-+      $(GST_LIBS) \
-+      $(LIBDCE_LIBS) \
-+      $(DRM_LIBS) \
-+      -lgstvideo-$(GST_API_VERSION) \
-+      -lgstdmabuf-$(GST_API_VERSION) \
-+      $(top_builddir)/gst-libs/gst/drm/libgstdrm-$(GST_API_VERSION).la
-+
-+libgstkmssink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-+libgstkmssink_la_LIBTOOLFLAGS = --tag=disable-static
-+
-+noinst_HEADERS = gstkmssink.h gstdrmutils.h gstkmsbufferpriv.h
-diff --git a/sys/kms/gstdrmutils.c b/sys/kms/gstdrmutils.c
-new file mode 100644
-index 0000000..d7a8dd6
---- /dev/null
-+++ b/sys/kms/gstdrmutils.c
-@@ -0,0 +1,292 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *
-+ * 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.
-+ */
-+
-+#include <gst/gst.h>
-+#include "gstdrmutils.h"
-+
-+GST_DEBUG_CATEGORY_EXTERN (gst_debug_kms_sink);
-+#define GST_CAT_DEFAULT gst_debug_kms_sink
-+
-+void
-+gst_drm_connector_cleanup (int fd, struct connector *c)
-+{
-+  if (c->connector) {
-+    drmModeFreeConnector (c->connector);
-+    c->connector = NULL;
-+  }
-+  if (c->encoder) {
-+    drmModeFreeEncoder (c->encoder);
-+    c->encoder = NULL;
-+  }
-+  if (c->fb_id) {
-+    drmModeRmFB (fd, c->fb_id);
-+    c->fb_id = 0;
-+  }
-+  if (c->fb_bo) {
-+    omap_bo_del (c->fb_bo);
-+    c->fb_bo = NULL;
-+  }
-+}
-+
-+static gboolean
-+gst_drm_connector_find_mode_and_plane_helper (int fd,
-+    struct omap_device *dev, int width, int height,
-+    drmModeRes * resources, drmModePlaneRes * plane_resources,
-+    struct connector *c, drmModePlane ** out_plane)
-+{
-+  int i, best_area = 0, ret;
-+
-+  /* free old stuff: */
-+  if (*out_plane) {             /* TODO maybe move into 'struct connector'?? 
*/
-+    drmModeFreePlane (*out_plane);
-+    *out_plane = NULL;
-+  }
-+  gst_drm_connector_cleanup (fd, c);
-+
-+  /* First, find the connector & mode */
-+  c->connector = drmModeGetConnector (fd, c->id);
-+  if (!c->connector)
-+    goto error_no_connector;
-+
-+  if (!c->connector->count_modes)
-+    goto error_no_mode;
-+
-+  /* just look for the highest resolution: */
-+  for (i = 0; i < c->connector->count_modes; i++) {
-+    drmModeModeInfo *mode = &c->connector->modes[i];
-+    int area = mode->hdisplay * mode->vdisplay;
-+
-+    if (area > best_area) {
-+      c->mode = mode;
-+      best_area = area;
-+    }
-+  }
-+
-+  if (c->mode == NULL) {
-+    /* XXX: just pick the first available mode. Not sure this is correct... */
-+    c->mode = &c->connector->modes[0];
-+#if 0
-+    goto error_no_mode;
-+#endif
-+  }
-+
-+  /* Now get the encoder */
-+  c->encoder = drmModeGetEncoder (fd, c->connector->encoder_id);
-+  if (!c->encoder)
-+    goto error_no_encoder;
-+
-+  if (c->crtc == -1)
-+    c->crtc = c->encoder->crtc_id;
-+
-+  /* and figure out which crtc index it is: */
-+  c->pipe = -1;
-+  for (i = 0; i < resources->count_crtcs; i++) {
-+    if (c->crtc == (int) resources->crtcs[i]) {
-+      c->pipe = i;
-+      break;
-+    }
-+  }
-+
-+  if (c->pipe == -1)
-+    goto error_no_crtc;
-+
-+  *out_plane = NULL;
-+  for (i = 0; i < plane_resources->count_planes; i++) {
-+    drmModePlane *plane = drmModeGetPlane (fd, plane_resources->planes[i]);
-+    if (plane->possible_crtcs & (1 << c->pipe)) {
-+      *out_plane = plane;
-+      break;
-+    }
-+  }
-+
-+  if (*out_plane == NULL)
-+    goto error_no_plane;
-+
-+  c->fb_bo = omap_bo_new (dev, best_area * 2, OMAP_BO_WC);
-+  if (c->fb_bo) {
-+    uint32_t fourcc = DRM_FORMAT_RGB565;
-+    uint32_t handles[4] = { omap_bo_handle (c->fb_bo) };
-+    uint32_t pitches[4] = { c->mode->hdisplay * 2 };
-+    uint32_t offsets[4] = { 0 };
-+    ret = drmModeAddFB2 (fd, c->mode->hdisplay, c->mode->vdisplay,
-+        fourcc, handles, pitches, offsets, &c->fb_id, 0);
-+    if (ret) {
-+      /* TODO */
-+    }
-+  }
-+
-+  /* now set the desired mode: */
-+  ret = drmModeSetCrtc (fd, c->crtc, c->fb_id, 0, 0, &c->id, 1, c->mode);
-+  if (ret) {
-+    /* TODO */
-+  }
-+
-+  return TRUE;
-+
-+fail:
-+  gst_drm_connector_cleanup (fd, c);
-+
-+  return FALSE;
-+
-+error_no_connector:
-+  GST_DEBUG ("could not get connector %s", strerror (errno));
-+  goto fail;
-+
-+error_no_mode:
-+  GST_DEBUG ("could not find mode %dx%d (count_modes %d)",
-+      width, height, c->connector->count_modes);
-+  goto fail;
-+
-+error_no_encoder:
-+  GST_DEBUG ("could not get encoder: %s", strerror (errno));
-+  goto fail;
-+
-+error_no_crtc:
-+  GST_DEBUG ("couldn't find a crtc");
-+  goto fail;
-+
-+error_no_plane:
-+  GST_DEBUG ("couldn't find a plane");
-+  goto fail;
-+}
-+
-+gboolean
-+gst_drm_connector_find_mode_and_plane (int fd,
-+    struct omap_device *dev, int width, int height,
-+    drmModeRes * resources, drmModePlaneRes * plane_resources,
-+    struct connector *c, drmModePlane ** out_plane)
-+{
-+  int i;
-+  gboolean found = FALSE;
-+
-+  /* First, find the connector & mode */
-+  if (c->id == 0) {
-+    /* Any connector */
-+    GST_DEBUG ("Any connector, %d available", resources->count_connectors);
-+    for (i = 0; i < resources->count_connectors; i++) {
-+      GST_DEBUG ("  %d", resources->connectors[i]);
-+    }
-+    for (i = 0; i < resources->count_connectors; i++) {
-+      GST_DEBUG ("Trying connector %d: %d", i, resources->connectors[i]);
-+      c->id = resources->connectors[i];
-+      if (gst_drm_connector_find_mode_and_plane_helper (fd, dev, width, 
height,
-+              resources, plane_resources, c, out_plane)) {
-+        GST_DEBUG ("Found suitable connector");
-+        found = TRUE;
-+        break;
-+      }
-+      GST_DEBUG ("Connector not suitable");
-+    }
-+  } else {
-+    /* A specific connector */
-+    GST_DEBUG ("Connector %d", c->id);
-+    found =
-+        gst_drm_connector_find_mode_and_plane_helper (fd, dev, width, height,
-+        resources, plane_resources, c, out_plane);
-+  }
-+
-+  return found;
-+}
-+
-+/* table nicked off libdrm's modetest.c */
-+/* *INDENT-OFF* */
-+static const struct {
-+  int type_id;
-+  const char *type_name;
-+} connector_type_names[] = {
-+  { DRM_MODE_CONNECTOR_Unknown, "unknown" },
-+  { DRM_MODE_CONNECTOR_VGA, "VGA" },
-+  { DRM_MODE_CONNECTOR_DVII, "DVI-I" },
-+  { DRM_MODE_CONNECTOR_DVID, "DVI-D" },
-+  { DRM_MODE_CONNECTOR_DVIA, "DVI-A" },
-+  { DRM_MODE_CONNECTOR_Composite, "composite" },
-+  { DRM_MODE_CONNECTOR_SVIDEO, "s-video" },
-+  { DRM_MODE_CONNECTOR_LVDS, "LVDS" },
-+  { DRM_MODE_CONNECTOR_Component, "component" },
-+  { DRM_MODE_CONNECTOR_9PinDIN, "9-pin-DIN" },
-+  { DRM_MODE_CONNECTOR_DisplayPort, "displayport" },
-+  { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" },
-+  { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" },
-+  { DRM_MODE_CONNECTOR_TV, "TV" },
-+  { DRM_MODE_CONNECTOR_eDP, "embedded-displayport" },
-+};
-+/* *INDENT-ON* */
-+
-+gboolean
-+gst_drm_connector_find_mode_and_plane_by_name (int fd,
-+    struct omap_device * dev, int width, int height,
-+    drmModeRes * resources, drmModePlaneRes * plane_resources,
-+    struct connector * c, const char *name, drmModePlane ** out_plane)
-+{
-+  int i, n;
-+  char tmp[64];
-+  const char *type_name;
-+  int found[G_N_ELEMENTS (connector_type_names)] = { 0 };
-+
-+  /* Find connector from name */
-+  for (i = 0; i < resources->count_connectors; i++) {
-+    GST_DEBUG ("Trying connector %d: %d", i, resources->connectors[i]);
-+    c->id = resources->connectors[i];
-+    c->connector = drmModeGetConnector (fd, c->id);
-+    if (!c->connector)
-+      continue;
-+
-+    /* Find type name from this connector */
-+    for (n = 0; n < G_N_ELEMENTS (connector_type_names); n++)
-+      if (connector_type_names[n].type_id == c->connector->connector_type)
-+        break;
-+    if (n == G_N_ELEMENTS (connector_type_names))
-+      continue;
-+
-+    type_name = connector_type_names[n].type_name;
-+    GST_DEBUG ("Connector %d has type %s", i, type_name);
-+    ++found[n];
-+
-+    drmModeFreeConnector (c->connector);
-+    c->connector = NULL;
-+
-+    /* Try a few different matches, such as modetest and xrandr
-+       output, and also a indexless one matching first found */
-+    snprintf (tmp, sizeof (tmp), "%s-%u", type_name, found[n]);
-+    if (!g_ascii_strcasecmp (tmp, name))
-+      goto found;
-+    snprintf (tmp, sizeof (tmp), "%s%u", type_name, found[n]);
-+    if (!g_ascii_strcasecmp (tmp, name))
-+      goto found;
-+    if (!g_ascii_strcasecmp (name, type_name))
-+      goto found;
-+
-+    continue;
-+
-+  found:
-+    if (gst_drm_connector_find_mode_and_plane_helper (fd, dev, width, height,
-+            resources, plane_resources, c, out_plane)) {
-+      GST_DEBUG ("Found suitable connector");
-+      return TRUE;
-+    }
-+    GST_DEBUG ("Connector not suitable");
-+  }
-+
-+  return FALSE;
-+}
-diff --git a/sys/kms/gstdrmutils.h b/sys/kms/gstdrmutils.h
-new file mode 100644
-index 0000000..053a245
---- /dev/null
-+++ b/sys/kms/gstdrmutils.h
-@@ -0,0 +1,40 @@
-+#ifndef __GST_DRMUTILS_H__
-+#define __GST_DRMUTILS_H__
-+
-+#include <stdio.h>
-+#include <stdint.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <assert.h>
-+#include <xf86drmMode.h>
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+#include <drm_fourcc.h>
-+#include <gst/gst.h>
-+
-+struct connector {
-+      uint32_t id;
-+      char mode_str[64];
-+      drmModeConnector *connector;
-+      drmModeModeInfo *mode;
-+      drmModeEncoder *encoder;
-+      uint32_t fb_id;
-+      struct omap_bo *fb_bo;
-+      int crtc;
-+      int pipe;
-+};
-+
-+void gst_drm_connector_cleanup (int fd, struct connector * c);
-+gboolean gst_drm_connector_find_mode_and_plane (int fd,
-+    struct omap_device * dev, int width, int height,
-+    drmModeRes * resources, drmModePlaneRes * plane_resources,
-+    struct connector *c, drmModePlane ** out_plane);
-+gboolean gst_drm_connector_find_mode_and_plane_by_name (int fd,
-+    struct omap_device *dev, int width, int height,
-+    drmModeRes * resources, drmModePlaneRes * plane_resources,
-+    struct connector *c, const char *name,
-+    drmModePlane ** out_plane);
-+
-+#endif /* __GST_DRMUTILS_H__ */
-diff --git a/sys/kms/gstkmsbufferpriv.c b/sys/kms/gstkmsbufferpriv.c
-new file mode 100644
-index 0000000..ffa7e46
---- /dev/null
-+++ b/sys/kms/gstkmsbufferpriv.c
-@@ -0,0 +1,124 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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 <stdint.h>
-+#include <gst/gst.h>
-+#include <gst/dmabuf/dmabuf.h>
-+
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+#include <xf86drmMode.h>
-+
-+#include "gstkmssink.h"
-+#include "gstkmsbufferpriv.h"
-+
-+static int
-+create_fb (GstKMSBufferPriv * priv, GstKMSSink * sink)
-+{
-+  /* TODO get format, etc from caps.. and query device for
-+   * supported formats, and make this all more flexible to
-+   * cope with various formats:
-+   */
-+  uint32_t fourcc = GST_MAKE_FOURCC ('N', 'V', '1', '2');
-+
-+  uint32_t handles[4] = {
-+    omap_bo_handle (priv->bo), omap_bo_handle (priv->bo),
-+  };
-+  uint32_t pitches[4] = {
-+    GST_ROUND_UP_4 (sink->input_width), GST_ROUND_UP_4 (sink->input_width),
-+  };
-+  uint32_t offsets[4] = {
-+    0, pitches[0] * sink->input_height
-+  };
-+
-+  return drmModeAddFB2 (priv->fd, sink->input_width, sink->input_height,
-+      fourcc, handles, pitches, offsets, &priv->fb_id, 0);
-+}
-+
-+/**
-+ * gst_kms_buffer_priv:
-+ * @sink: a #GstKMSSink
-+ * @buf: a pointer to #GstBuffer
-+ *
-+ * Checks if the @buf has a GstMetaDmaBuf metadata set. If it doesn't we 
return a NULL
-+ * indicating its not a dmabuf buffer. We maintain a hashtable with dmabuf fd 
as key and 
-+ * the GstKMSBufferPriv structure as value
-+ *
-+ * Returns: the #GstKMSBufferPriv
-+ *
-+ * Since: 1.2.?
-+ */
-+GstKMSBufferPriv *
-+gst_kms_buffer_priv (GstKMSSink * sink, GstBuffer * buf)
-+{
-+    GstMetaDmaBuf *dmabuf = gst_buffer_get_dma_buf_meta (buf);
-+
-+
-+    struct omap_bo *bo;
-+    int fd;
-+    int fd_copy;
-+    GstKMSBufferPriv * priv;
-+
-+    /* if it isn't a dmabuf buffer that we can import, then there
-+     * is nothing we can do with it:
-+     */
-+   
-+    if (!dmabuf) {
-+      GST_DEBUG_OBJECT (sink, "not importing non dmabuf buffer");
-+      return NULL;
-+    }
-+
-+    fd_copy = gst_dma_buf_meta_get_fd (dmabuf);
-+
-+    /* lookup the hashtable with fd as key. If present return bo & buffer 
structure */
-+    priv = g_hash_table_lookup (sink->kmsbufferpriv, (gpointer)fd_copy);
-+    if(priv) {
-+       return priv;
-+     }
-+
-+    priv = g_malloc0 (sizeof (GstKMSBufferPriv));
-+    bo = omap_bo_from_dmabuf (sink->dev, fd_copy);
-+    fd = sink->fd;
-+
-+      priv->bo = bo;
-+      priv->fd = fd;
-+
-+    if (create_fb (priv, sink)) {
-+      GST_WARNING_OBJECT (sink, "could not create framebuffer: %s",
-+          strerror (errno));
-+      g_free(priv);
-+      return NULL;
-+    }
-+
-+    /* if fd not present, write to hash table fd and the corresponding priv. 
*/
-+    g_hash_table_insert(sink->kmsbufferpriv, (gpointer)fd_copy, priv); 
-+   
-+  
-+  return priv;
-+}
-diff --git a/sys/kms/gstkmsbufferpriv.h b/sys/kms/gstkmsbufferpriv.h
-new file mode 100644
-index 0000000..a1070da
---- /dev/null
-+++ b/sys/kms/gstkmsbufferpriv.h
-@@ -0,0 +1,64 @@
-+/*
-+ * GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *  Rob Clark <[email protected]>
-+ *
-+ * 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
-+ * version 2.1 of the License.
-+ *
-+ * 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
-+ */
-+
-+#ifndef __GSTKMSBUFFERPRIV_H__
-+#define __GSTKMSBUFFERPRIV_H__
-+
-+#include <stdint.h>
-+#include <gst/gst.h>
-+
-+G_BEGIN_DECLS
-+
-+/*
-+ * per-buffer private data so kmssink can attach a drm_framebuffer
-+ * handle (fb_id) to a buffer, which gets deleted when the buffer
-+ * is finalized
-+ */
-+
-+#define GST_TYPE_KMS_BUFFER_PRIV      \
-+  (gst_kms_buffer_priv_get_type ())
-+#define GST_KMS_BUFFER_PRIV(obj)      \
-+  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_KMS_BUFFER_PRIV, 
GstKMSBufferPriv))
-+#define GST_IS_KMS_BUFFER_PRIV(obj)     \
-+  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_KMS_BUFFER_PRIV))
-+
-+
-+typedef struct
-+{
-+  struct omap_bo *bo;
-+  int fd;
-+  uint32_t fb_id;
-+}GstKMSBufferPriv;
-+
-+
-+GType gst_kms_buffer_priv_get_type (void);
-+
-+/* Returns a GstKMSBufferPriv, if it has a dmabuf fd metadata */
-+GstKMSBufferPriv * gst_kms_buffer_priv (GstKMSSink *sink, GstBuffer * buf);
-+
-+G_END_DECLS
-+
-+
-+#endif /* __GSTKMSBUFFERPRIV_H__ */
-diff --git a/sys/kms/gstkmssink.c b/sys/kms/gstkmssink.c
-new file mode 100644
-index 0000000..b9c9095
---- /dev/null
-+++ b/sys/kms/gstkmssink.c
-@@ -0,0 +1,682 @@
-+/* GStreamer
-+ * Copyright (C) 2012 Texas Instruments
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *
-+ * 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.
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "gstkmssink.h"
-+#include "gstkmsbufferpriv.h"
-+
-+#include <libdce.h>
-+#include <omap_drm.h>
-+#include <omap_drmif.h>
-+#include <xf86drmMode.h>
-+
-+GST_DEBUG_CATEGORY (gst_debug_kms_sink);
-+#define GST_CAT_DEFAULT gst_debug_kms_sink
-+
-+G_DEFINE_TYPE (GstKMSSink, gst_kms_sink, GST_TYPE_VIDEO_SINK);
-+
-+static void gst_kms_sink_reset (GstKMSSink * sink);
-+
-+static GstStaticPadTemplate gst_kms_sink_template_factory =
-+GST_STATIC_PAD_TEMPLATE ("sink",
-+    GST_PAD_SINK,
-+    GST_PAD_ALWAYS,
-+    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE("NV12"))
-+    );
-+
-+enum
-+{
-+  PROP_0,
-+  PROP_PIXEL_ASPECT_RATIO,
-+  PROP_FORCE_ASPECT_RATIO,
-+  PROP_SCALE,
-+  PROP_CONNECTOR,
-+  PROP_CONNECTOR_NAME,
-+};
-+
-+static inline void
-+display_bufs_queue (GstKMSSink * sink, GstBuffer * buf)
-+{
-+  int i;
-+  for (i = 0; i < (NUM_DISPLAY_BUFS - 1); i++)
-+    gst_buffer_replace (&sink->display_bufs[i], sink->display_bufs[i + 1]);
-+  gst_buffer_replace (&sink->display_bufs[i], buf);
-+}
-+
-+static inline void
-+display_bufs_free (GstKMSSink * sink)
-+{
-+  int i;
-+  for (i = 0; i < NUM_DISPLAY_BUFS; i++)
-+    gst_buffer_replace (&sink->display_bufs[i], NULL);
-+}
-+
-+static gboolean
-+gst_kms_sink_calculate_aspect_ratio (GstKMSSink * sink, gint width,
-+    gint height, gint video_par_n, gint video_par_d)
-+{
-+  guint calculated_par_n;
-+  guint calculated_par_d;
-+
-+  if (!gst_video_calculate_display_ratio (&calculated_par_n, 
&calculated_par_d,
-+          width, height, video_par_n, video_par_d, 1, 1)) {
-+    GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, (NULL),
-+        ("Error calculating the output display ratio of the video."));
-+    return FALSE;
-+  }
-+  GST_DEBUG_OBJECT (sink,
-+      "video width/height: %dx%d, calculated display ratio: %d/%d",
-+      width, height, calculated_par_n, calculated_par_d);
-+
-+  /* now find a width x height that respects this display ratio.
-+   * prefer those that have one of w/h the same as the incoming video
-+   * using wd / hd = calculated_pad_n / calculated_par_d */
-+
-+  /* start with same height, because of interlaced video */
-+  /* check hd / calculated_par_d is an integer scale factor, and scale wd 
with the PAR */
-+  if (height % calculated_par_d == 0) {
-+    GST_DEBUG_OBJECT (sink, "keeping video height");
-+    GST_VIDEO_SINK_WIDTH (sink) = (guint)
-+        gst_util_uint64_scale_int (height, calculated_par_n, 
calculated_par_d);
-+    GST_VIDEO_SINK_HEIGHT (sink) = height;
-+  } else if (width % calculated_par_n == 0) {
-+    GST_DEBUG_OBJECT (sink, "keeping video width");
-+    GST_VIDEO_SINK_WIDTH (sink) = width;
-+    GST_VIDEO_SINK_HEIGHT (sink) = (guint)
-+        gst_util_uint64_scale_int (width, calculated_par_d, calculated_par_n);
-+  } else {
-+    GST_DEBUG_OBJECT (sink, "approximating while keeping video height");
-+    GST_VIDEO_SINK_WIDTH (sink) = (guint)
-+        gst_util_uint64_scale_int (height, calculated_par_n, 
calculated_par_d);
-+    GST_VIDEO_SINK_HEIGHT (sink) = height;
-+  }
-+  GST_DEBUG_OBJECT (sink, "scaling to %dx%d",
-+      GST_VIDEO_SINK_WIDTH (sink), GST_VIDEO_SINK_HEIGHT (sink));
-+
-+  return TRUE;
-+}
-+
-+static gboolean
-+gst_kms_sink_setcaps (GstBaseSink * bsink, GstCaps * caps)
-+{
-+  GstKMSSink *sink;
-+  gboolean ret = TRUE;
-+  gint width, height;
-+  gint fps_n, fps_d;
-+  gint par_n, par_d;
-+  GstVideoFormat format;
-+  GstVideoInfo info;
-+
-+  sink = GST_KMS_SINK (bsink);
-+
-+  ret = gst_video_info_from_caps (&info, caps);
-+  format = GST_VIDEO_INFO_FORMAT(&info);
-+  width = GST_VIDEO_INFO_WIDTH(&info);
-+  height = GST_VIDEO_INFO_HEIGHT(&info);
-+  fps_n = GST_VIDEO_INFO_FPS_N(&info);
-+  fps_d = GST_VIDEO_INFO_FPS_D(&info);
-+  par_n = GST_VIDEO_INFO_PAR_N(&info);
-+  par_d = GST_VIDEO_INFO_PAR_D(&info);
-+
-+  if (!ret)
-+    return FALSE;
-+
-+  if (width <= 0 || height <= 0) {
-+    GST_ELEMENT_ERROR (sink, CORE, NEGOTIATION, (NULL),
-+        ("Invalid image size."));
-+    return FALSE;
-+  }
-+
-+  sink->format = format;
-+  sink->par_n = par_n;
-+  sink->par_d = par_d;
-+  sink->src_rect.x = sink->src_rect.y = 0;
-+  sink->src_rect.w = width;
-+  sink->src_rect.h = height;
-+  sink->input_width = width;
-+  sink->input_height = height;
-+
-+  if (!sink->pool || !gst_drm_buffer_pool_check_caps (sink->pool, caps)) {
-+    int size;
-+
-+    if (sink->pool) {
-+      gst_drm_buffer_pool_destroy (sink->pool);
-+      sink->pool = NULL;
-+    }
-+
-+    size = GST_VIDEO_INFO_SIZE(&info);
-+    sink->pool = gst_drm_buffer_pool_new (GST_ELEMENT (sink),
-+        sink->fd, caps, size);
-+  }
-+
-+  sink->conn.crtc = -1;
-+  sink->plane = NULL;
-+
-+  return TRUE;
-+}
-+
-+static void
-+gst_kms_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
-+    GstClockTime * start, GstClockTime * end)
-+{
-+  GstKMSSink *sink;
-+
-+  sink = GST_KMS_SINK (bsink);
-+
-+  if (GST_BUFFER_PTS_IS_VALID (buf)) {
-+    *start = GST_BUFFER_PTS (buf);
-+    if (GST_BUFFER_DURATION_IS_VALID (buf)) {
-+      *end = *start + GST_BUFFER_DURATION (buf);
-+    } else {
-+      if (sink->fps_n > 0) {
-+        *end = *start +
-+            gst_util_uint64_scale_int (GST_SECOND, sink->fps_d, sink->fps_n);
-+      }
-+    }
-+  }
-+}
-+
-+static GstFlowReturn
-+gst_kms_sink_show_frame (GstVideoSink * vsink, GstBuffer * inbuf)
-+{
-+  GstKMSSink *sink = GST_KMS_SINK (vsink);
-+  GstBuffer *buf = NULL;
-+  GstKMSBufferPriv *priv;
-+  GstFlowReturn flow_ret = GST_FLOW_OK;
-+  int ret;
-+  gint width, height;
-+  GstVideoRectangle *c = &sink->src_rect;
-+
-+ GstVideoCropMeta* crop = gst_buffer_get_video_crop_meta (inbuf);
-+ if (crop){
-+  c->y = crop->y;
-+  c->x = crop->x;
-+
-+ if (crop->width >= 0) {
-+     width = crop->width;
-+ }
-+ else {
-+     width = GST_VIDEO_SINK_WIDTH (sink);
-+  }
-+ if (crop->height >= 0){
-+        height = crop->height;
-+ }
-+ else {
-+        height = GST_VIDEO_SINK_HEIGHT (sink);
-+  }
-+}
-+
-+
-+ c->w = width;
-+ c->h = height;
-+
-+
-+if (!gst_kms_sink_calculate_aspect_ratio (sink, width, height,
-+              sink->par_n, sink->par_d))
-+  GST_DEBUG_OBJECT (sink, "calculate aspect ratio failed");
-+
-+
-+  GST_INFO_OBJECT (sink, "enter");
-+
-+  if (sink->conn.crtc == -1) {
-+    GstVideoRectangle dest = { 0 };
-+
-+    if (sink->conn_name) {
-+      if (!gst_drm_connector_find_mode_and_plane_by_name (sink->fd,
-+              sink->dev, sink->src_rect.w, sink->src_rect.h,
-+              sink->resources, sink->plane_resources, &sink->conn,
-+              sink->conn_name, &sink->plane))
-+        goto connector_not_found;
-+    } else {
-+      sink->conn.id = sink->conn_id;
-+      if (!gst_drm_connector_find_mode_and_plane (sink->fd,
-+              sink->dev, sink->src_rect.w, sink->src_rect.h,
-+              sink->resources, sink->plane_resources, &sink->conn,
-+              &sink->plane))
-+        goto connector_not_found;
-+    }
-+
-+    dest.w = sink->conn.mode->hdisplay;
-+    dest.h = sink->conn.mode->vdisplay;
-+    gst_video_sink_center_rect (sink->src_rect, dest, &sink->dst_rect,
-+        sink->scale);
-+  }
-+
-+  priv = gst_kms_buffer_priv (sink, inbuf);
-+  if (priv) {
-+    buf = gst_buffer_ref (inbuf);
-+  } else {
-+    GST_LOG_OBJECT (sink, "not a KMS buffer, slow-path!");
-+    buf = gst_drm_buffer_pool_get (sink->pool, FALSE);
-+    if (buf) {
-+      GST_BUFFER_PTS (buf) = GST_BUFFER_PTS (inbuf);
-+      GST_BUFFER_DURATION (buf) = GST_BUFFER_DURATION (inbuf);
-+      gst_buffer_copy_into (buf, inbuf, GST_BUFFER_COPY_DEEP, 0 ,-1);
-+      priv = gst_kms_buffer_priv (sink, buf);
-+    }
-+    if (!priv)
-+      goto add_fb2_failed;
-+  }
-+
-+  ret = drmModeSetPlane (sink->fd, sink->plane->plane_id,
-+      sink->conn.crtc, priv->fb_id, 0,
-+      sink->dst_rect.x, sink->dst_rect.y, sink->dst_rect.w, sink->dst_rect.h,
-+      sink->src_rect.x << 16, sink->src_rect.y << 16,
-+      sink->src_rect.w << 16, sink->src_rect.h << 16);
-+  if (ret)
-+    goto set_plane_failed;
-+
-+  display_bufs_queue (sink, buf);
-+
-+out:
-+  GST_INFO_OBJECT (sink, "exit");
-+  if (buf)
-+    gst_buffer_unref (buf);
-+  return flow_ret;
-+
-+add_fb2_failed:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
-+      (NULL), ("drmModeAddFB2 failed: %s (%d)", strerror (errno), errno));
-+  flow_ret = GST_FLOW_ERROR;
-+  goto out;
-+
-+set_plane_failed:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
-+      (NULL), ("drmModeSetPlane failed: %s (%d)", strerror (errno), errno));
-+  flow_ret = GST_FLOW_ERROR;
-+  goto out;
-+
-+connector_not_found:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, NOT_FOUND,
-+      (NULL), ("connector not found", strerror (errno), errno));
-+  goto out;
-+}
-+
-+
-+static gboolean
-+gst_kms_sink_event (GstBaseSink * bsink, GstEvent * event)
-+{
-+  GstKMSSink *sink = GST_KMS_SINK (bsink);
-+
-+  switch (GST_EVENT_TYPE (event)) {
-+    default:
-+      break;
-+  }
-+  if (GST_BASE_SINK_CLASS (gst_kms_sink_parent_class)->event)
-+    return GST_BASE_SINK_CLASS (gst_kms_sink_parent_class)->event (bsink,
-+        event);
-+  else
-+    return TRUE;
-+}
-+
-+static void
-+gst_kms_sink_set_property (GObject * object, guint prop_id,
-+    const GValue * value, GParamSpec * pspec)
-+{
-+  GstKMSSink *sink;
-+
-+  g_return_if_fail (GST_IS_KMS_SINK (object));
-+
-+  sink = GST_KMS_SINK (object);
-+
-+  switch (prop_id) {
-+    case PROP_FORCE_ASPECT_RATIO:
-+      sink->keep_aspect = g_value_get_boolean (value);
-+      break;
-+    case PROP_SCALE:
-+      sink->scale = g_value_get_boolean (value);
-+      break;
-+    case PROP_CONNECTOR:
-+      sink->conn_id = g_value_get_uint (value);
-+      break;
-+    case PROP_CONNECTOR_NAME:
-+      g_free (sink->conn_name);
-+      sink->conn_name = g_strdup (g_value_get_string (value));
-+      break;
-+    case PROP_PIXEL_ASPECT_RATIO:
-+    {
-+      GValue *tmp;
-+
-+      tmp = g_new0 (GValue, 1);
-+      g_value_init (tmp, GST_TYPE_FRACTION);
-+
-+      if (!g_value_transform (value, tmp)) {
-+        GST_WARNING_OBJECT (sink, "Could not transform string to aspect 
ratio");
-+      } else {
-+        sink->par_n = gst_value_get_fraction_numerator (tmp);
-+        sink->par_d = gst_value_get_fraction_denominator (tmp);
-+        GST_DEBUG_OBJECT (sink, "set PAR to %d/%d", sink->par_n, sink->par_d);
-+      }
-+      g_free (tmp);
-+    }
-+      break;
-+    default:
-+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+      break;
-+  }
-+}
-+
-+static void
-+gst_kms_sink_get_property (GObject * object, guint prop_id,
-+    GValue * value, GParamSpec * pspec)
-+{
-+  GstKMSSink *sink;
-+
-+  g_return_if_fail (GST_IS_KMS_SINK (object));
-+
-+  sink = GST_KMS_SINK (object);
-+
-+  switch (prop_id) {
-+    case PROP_FORCE_ASPECT_RATIO:
-+      g_value_set_boolean (value, sink->keep_aspect);
-+      break;
-+    case PROP_SCALE:
-+      g_value_set_boolean (value, sink->scale);
-+      break;
-+    case PROP_CONNECTOR:
-+      g_value_set_uint (value, sink->conn.id);
-+      break;
-+    case PROP_PIXEL_ASPECT_RATIO:
-+    {
-+      char *v = g_strdup_printf ("%d/%d", sink->par_n, sink->par_d);
-+      g_value_take_string (value, v);
-+      break;
-+    }
-+    default:
-+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-+      break;
-+  }
-+}
-+
-+static void
-+gst_kms_sink_reset (GstKMSSink * sink)
-+{
-+  GST_DEBUG_OBJECT (sink, "reset");
-+
-+  if (sink->fd != -1) {
-+    gst_drm_connector_cleanup (sink->fd, &sink->conn);
-+  }
-+  memset (&sink->conn, 0, sizeof (struct connector));
-+
-+  if (sink->pool) {
-+    gst_drm_buffer_pool_destroy (sink->pool);
-+    sink->pool = NULL;
-+  }
-+
-+  if (sink->plane) {
-+    drmModeFreePlane (sink->plane);
-+    sink->plane = NULL;
-+  }
-+
-+  if (sink->plane_resources) {
-+    drmModeFreePlaneResources (sink->plane_resources);
-+    sink->plane_resources = NULL;
-+  }
-+
-+  if (sink->resources) {
-+    drmModeFreeResources (sink->resources);
-+    sink->resources = NULL;
-+  }
-+
-+  display_bufs_free (sink);
-+
-+  if (sink->dev) {
-+    dce_deinit (sink->dev);
-+    sink->dev = NULL;
-+    sink->fd = -1;
-+  }
-+
-+  sink->par_n = sink->par_d = 1;
-+  sink->src_rect.x = 0;
-+  sink->src_rect.y = 0;
-+  sink->src_rect.w = 0;
-+  sink->src_rect.h = 0;
-+  sink->input_width = 0;
-+  sink->input_height = 0;
-+  sink->format = GST_VIDEO_FORMAT_UNKNOWN;
-+
-+  memset (&sink->src_rect, 0, sizeof (GstVideoRectangle));
-+  memset (&sink->dst_rect, 0, sizeof (GstVideoRectangle));
-+}
-+
-+static gboolean
-+gst_kms_sink_start (GstBaseSink * bsink)
-+{
-+  GstKMSSink *sink;
-+
-+  sink = GST_KMS_SINK (bsink);
-+
-+  sink->dev = dce_init ();
-+  if (sink->dev == NULL)
-+    goto device_failed;
-+  else
-+    sink->fd = dce_get_fd ();
-+
-+  sink->resources = drmModeGetResources (sink->fd);
-+  if (sink->resources == NULL)
-+    goto resources_failed;
-+
-+  sink->plane_resources = drmModeGetPlaneResources (sink->fd);
-+  if (sink->plane_resources == NULL)
-+    goto plane_resources_failed;
-+
-+  return TRUE;
-+
-+fail:
-+  gst_kms_sink_reset (sink);
-+  return FALSE;
-+
-+device_failed:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
-+      (NULL), ("omap_device_new failed"));
-+  goto fail;
-+
-+resources_failed:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
-+      (NULL), ("drmModeGetResources failed: %s (%d)", strerror (errno), 
errno));
-+  goto fail;
-+
-+plane_resources_failed:
-+  GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
-+      (NULL), ("drmModeGetPlaneResources failed: %s (%d)",
-+          strerror (errno), errno));
-+  goto fail;
-+}
-+
-+static gboolean
-+gst_kms_sink_stop (GstBaseSink * bsink)
-+{
-+  GstKMSSink *sink;
-+
-+  sink = GST_KMS_SINK (bsink);
-+  gst_kms_sink_reset (sink);
-+
-+  return TRUE;
-+}
-+
-+static GstFlowReturn
-+gst_kms_sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size,
-+    GstCaps * caps, GstBuffer ** buf)
-+{
-+  GstKMSSink *sink;
-+  GstFlowReturn ret = GST_FLOW_OK;
-+
-+  sink = GST_KMS_SINK (bsink);
-+
-+  GST_DEBUG_OBJECT (sink, "begin");
-+
-+  if (G_UNLIKELY (!caps)) {
-+    GST_WARNING_OBJECT (sink, "have no caps, doing fallback allocation");
-+    *buf = NULL;
-+    ret = GST_FLOW_OK;
-+    goto beach;
-+  }
-+
-+  GST_LOG_OBJECT (sink,
-+      "a buffer of %d bytes was requested with caps %" GST_PTR_FORMAT
-+      " and offset %" G_GUINT64_FORMAT, size, caps, offset);
-+
-+  /* initialize the buffer pool if not initialized yet */
-+  if (G_UNLIKELY (!sink->pool || gst_drm_buffer_pool_size (sink->pool) != 
size)) {
-+    GstVideoFormat format;
-+    gint width, height;
-+    GstVideoInfo info;
-+
-+    if (sink->pool) {
-+      GST_INFO_OBJECT (sink, "in buffer alloc, pool->size != size");
-+      gst_drm_buffer_pool_destroy (sink->pool);
-+      sink->pool = NULL;
-+    }
-+
-+    gst_video_info_from_caps (&info, caps);
-+    format = GST_VIDEO_INFO_FORMAT(&info);
-+    width = GST_VIDEO_INFO_WIDTH(&info);
-+    height = GST_VIDEO_INFO_HEIGHT(&info);
-+    size = GST_VIDEO_INFO_SIZE(&info);
-+    sink->pool = gst_drm_buffer_pool_new (GST_ELEMENT (sink),
-+        sink->fd, caps, size);
-+  }
-+  *buf = GST_BUFFER_CAST (gst_drm_buffer_pool_get (sink->pool, FALSE));
-+
-+beach:
-+  return ret;
-+}
-+
-+static void
-+gst_kms_sink_finalize (GObject * object)
-+{
-+  GstKMSSink *sink;
-+
-+  sink = GST_KMS_SINK (object);
-+  gst_kms_sink_reset (sink);
-+  g_free (sink->conn_name);
-+  if (sink->kmsbufferpriv){
-+    g_hash_table_destroy (sink->kmsbufferpriv);
-+    sink->kmsbufferpriv = NULL;
-+}
-+
-+  G_OBJECT_CLASS (gst_kms_sink_parent_class)->finalize (object);
-+}
-+
-+static void
-+kmsbufferpriv_free_func (GstKMSBufferPriv *priv)
-+{
-+  drmModeRmFB (priv->fd, priv->fb_id);
-+  omap_bo_del (priv->bo);
-+  g_free(priv);
-+}
-+
-+
-+static void
-+gst_kms_sink_init (GstKMSSink * sink)
-+{
-+  sink->fd = -1;
-+  gst_kms_sink_reset (sink);
-+  sink->kmsbufferpriv = g_hash_table_new_full (g_direct_hash, g_direct_equal,
-+      NULL, (GDestroyNotify) kmsbufferpriv_free_func);
-+}
-+
-+static void
-+gst_kms_sink_class_init (GstKMSSinkClass * klass)
-+{
-+  GObjectClass *gobject_class;
-+  GstElementClass *gstelement_class;
-+  GstBaseSinkClass *gstbasesink_class;
-+  GstVideoSinkClass *videosink_class;
-+
-+  gobject_class = (GObjectClass *) klass;
-+  gstelement_class = (GstElementClass *) klass;
-+  gstbasesink_class = (GstBaseSinkClass *) klass;
-+  videosink_class = (GstVideoSinkClass *) klass;
-+
-+  gobject_class->finalize = gst_kms_sink_finalize;
-+  gobject_class->set_property = gst_kms_sink_set_property;
-+  gobject_class->get_property = gst_kms_sink_get_property;
-+
-+  g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
-+      g_param_spec_boolean ("force-aspect-ratio", "Force aspect ratio",
-+          "When enabled, reverse caps negotiation (scaling) will respect "
-+          "original aspect ratio", FALSE,
-+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+  g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO,
-+      g_param_spec_string ("pixel-aspect-ratio", "Pixel Aspect Ratio",
-+          "The pixel aspect ratio of the device", "1/1",
-+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+  g_object_class_install_property (gobject_class, PROP_SCALE,
-+      g_param_spec_boolean ("scale", "Scale",
-+          "When true, scale to render fullscreen", FALSE,
-+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-+  g_object_class_install_property (gobject_class, PROP_CONNECTOR,
-+      g_param_spec_uint ("connector", "Connector",
-+          "DRM connector id (0 for automatic selection)", 0, G_MAXUINT32, 0,
-+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT));
-+  g_object_class_install_property (gobject_class, PROP_CONNECTOR_NAME,
-+      g_param_spec_string ("connector-name", "Connector name",
-+          "DRM connector name (alternative to the connector property, "
-+          "use $type$index, $type-$index, or $type)", "",
-+          G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS));
-+
-+  gst_element_class_set_details_simple (gstelement_class,
-+      "Video sink", "Sink/Video",
-+      "A video sink using the linux kernel mode setting API",
-+      "Alessandro Decina <[email protected]>");
-+
-+  gst_element_class_add_pad_template (gstelement_class,
-+      gst_static_pad_template_get (&gst_kms_sink_template_factory));
-+
-+  gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_kms_sink_setcaps);
-+  gstbasesink_class->get_times = GST_DEBUG_FUNCPTR (gst_kms_sink_get_times);
-+  gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_kms_sink_event);
-+  gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_kms_sink_start);
-+  gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_kms_sink_stop);
-+
-+  /* disable preroll as it's called before GST_CROP_EVENT has been received, 
so
-+   * we end up configuring the wrong mode... (based on padded caps)
-+   */
-+  gstbasesink_class->preroll = NULL;
-+  videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_kms_sink_show_frame);
-+}
-+
-+static gboolean
-+plugin_init (GstPlugin * plugin)
-+{
-+  if (!gst_element_register (plugin, "kmssink",
-+          GST_RANK_PRIMARY + 1, GST_TYPE_KMS_SINK))
-+    return FALSE;
-+
-+  GST_DEBUG_CATEGORY_INIT (gst_debug_kms_sink, "kmssink", 0, "kmssink 
element");
-+
-+  return TRUE;
-+}
-+
-+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-+    GST_VERSION_MINOR,
-+    kms,
-+    "KMS video output element",
-+    plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
-diff --git a/sys/kms/gstkmssink.h b/sys/kms/gstkmssink.h
-new file mode 100644
-index 0000000..6c312bb
---- /dev/null
-+++ b/sys/kms/gstkmssink.h
-@@ -0,0 +1,91 @@
-+/* GStreamer
-+ *
-+ * Copyright (C) 2012 Texas Instruments 
-+ * Copyright (C) 2012 Collabora Ltd
-+ *
-+ * Authors:
-+ *  Alessandro Decina <[email protected]>
-+ *
-+ * 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_KMS_SINK_H__
-+#define __GST_KMS_SINK_H__
-+
-+#include <gst/video/video.h>
-+#include <gst/video/gstvideosink.h>
-+#include <gst/drm/gstdrmbufferpool.h>
-+
-+#include <stdio.h>
-+#include <stdint.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <assert.h>
-+
-+#include "gstdrmutils.h"
-+
-+G_BEGIN_DECLS
-+#define GST_TYPE_KMS_SINK \
-+  (gst_kms_sink_get_type())
-+#define GST_KMS_SINK(obj) \
-+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_KMS_SINK, GstKMSSink))
-+#define GST_KMS_SINK_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_KMS_SINK, GstKMSSinkClass))
-+#define GST_IS_KMS_SINK(obj) \
-+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_KMS_SINK))
-+#define GST_IS_KMS_SINK_CLASS(klass) \
-+  (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_KMS_SINK))
-+typedef struct _GstKMSSink GstKMSSink;
-+typedef struct _GstKMSSinkClass GstKMSSinkClass;
-+
-+#define NUM_DISPLAY_BUFS 4
-+
-+struct _GstKMSSink
-+{
-+  GstVideoSink videosink;
-+  gint input_width, input_height;
-+  GstVideoFormat format;
-+  gint par_n, par_d;
-+  gint fps_n, fps_d;
-+  gboolean keep_aspect;
-+  GstVideoRectangle src_rect;
-+  GstVideoRectangle dst_rect;
-+  int fd;
-+  struct omap_device *dev;
-+  drmModeRes *resources;
-+  drmModePlaneRes *plane_resources;
-+  struct connector conn;
-+  uint32_t conn_id;
-+  char *conn_name;
-+  drmModePlane *plane;
-+  GstDRMBufferPool *pool;
-+  GHashTable *kmsbufferpriv;
-+  /* current displayed buffer and last displayed buffer: */
-+  GstBuffer *display_bufs[NUM_DISPLAY_BUFS];
-+  gboolean scale;
-+};
-+
-+struct _GstKMSSinkClass
-+{
-+  GstVideoSinkClass parent_class;
-+};
-+
-+GType gst_kms_sink_get_type (void);
-+
-+G_END_DECLS
-+#endif /* __GST_KMS_SINK_H__ */
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
deleted file mode 100644
index 8c2e887..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From dbaac14600fd88988aa676634849b137376de397 Mon Sep 17 00:00:00 2001
-From: Karthik Ramanan <[email protected]>
-Date: Thu, 15 Jan 2015 12:47:31 +0530
-Subject: [PATCH] waylandsink: Removed dependency on dri2
-
-Signed-off-by: Karthik Ramanan <[email protected]>
----
- configure.ac |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index e3db68f..2741824 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -1219,7 +1219,7 @@ AG_GST_CHECK_FEATURE(DIRECTFB, [directfb], dfbvideosink 
, [
- dnl **** Wayland ****
- translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true)
- AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [
--  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0 dri2 libdrm libdrm_omap, 
[
-+  PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0 libdrm libdrm_omap, [
-      AC_SUBST(DRM_CFLAGS)
-      AC_SUBST(DRM_LIBS)
-      HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
deleted file mode 100644
index 8ae79b5..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 7083e7ee50130bf41a0ec0d1634577d4bf9ef9cf Mon Sep 17 00:00:00 2001
-From: Pooja Prajod <[email protected]>
-Date: Wed, 4 Feb 2015 18:12:58 +0530
-Subject: [PATCH] vc1parse and jpegparse : Fixes plugin ranks
-
-Fix plugin ranks so that they are picked by playbin
----
- gst/jpegformat/gstjpegformat.c |    2 +-
- gst/jpegformat/gstjpegparse.c  |    2 +-
- gst/videoparsers/plugin.c      |    2 +-
- 3 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/gst/jpegformat/gstjpegformat.c b/gst/jpegformat/gstjpegformat.c
-index b410466..ecb9311 100644
---- a/gst/jpegformat/gstjpegformat.c
-+++ b/gst/jpegformat/gstjpegformat.c
-@@ -30,7 +30,7 @@
- static gboolean
- plugin_init (GstPlugin * plugin)
- {
--  if (!gst_element_register (plugin, "jpegparse", GST_RANK_NONE,
-+  if (!gst_element_register (plugin, "jpegparse", GST_RANK_PRIMARY + 2,
-           GST_TYPE_JPEG_PARSE))
-     return FALSE;
-   if (!gst_element_register (plugin, "jifmux", GST_RANK_SECONDARY,
-diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
-index 9983f32..04d5b91 100644
---- a/gst/jpegformat/gstjpegparse.c
-+++ b/gst/jpegformat/gstjpegparse.c
-@@ -156,7 +156,7 @@ gst_jpeg_parse_class_init (GstJpegParseClass * klass)
- 
-   gst_element_class_set_static_metadata (gstelement_class,
-       "JPEG stream parser",
--      "Video/Parser",
-+      "Codec/Parser/Video",
-       "Parse JPEG images into single-frame buffers",
-       "Arnout Vandecappelle (Essensium/Mind) <[email protected]>");
- 
-diff --git a/gst/videoparsers/plugin.c b/gst/videoparsers/plugin.c
-index 485b0ed..a85550c 100644
---- a/gst/videoparsers/plugin.c
-+++ b/gst/videoparsers/plugin.c
-@@ -48,7 +48,7 @@ plugin_init (GstPlugin * plugin)
-   ret |= gst_element_register (plugin, "pngparse",
-       GST_RANK_PRIMARY, GST_TYPE_PNG_PARSE);
-   ret |= gst_element_register (plugin, "vc1parse",
--      GST_RANK_NONE, GST_TYPE_VC1_PARSE);
-+      GST_RANK_PRIMARY + 2, GST_TYPE_VC1_PARSE);
- 
-   return ret;
- }
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0006-GstDRMBufferPool-support-fix.patch
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0006-GstDRMBufferPool-support-fix.patch
deleted file mode 100644
index 0af1323..0000000
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0006-GstDRMBufferPool-support-fix.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 9e4d46611c4d4600a5abac81b619ae1489d4b8c1 Mon Sep 17 00:00:00 2001
-From: Jacob Stiffler <[email protected]>
-Date: Mon, 27 Apr 2015 08:27:59 -0400
-Subject: [PATCH 6/6] GstDRMBufferPool support fix:
-
-Conditionally build drm library based on if kmssink dependencies are
-by pkgconfig found.
-
-Signed-off-by: Jacob Stiffler <[email protected]>
----
- gst-libs/gst/Makefile.am |    8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
-index b915d07..52ff331 100644
---- a/gst-libs/gst/Makefile.am
-+++ b/gst-libs/gst/Makefile.am
-@@ -2,9 +2,13 @@ if HAVE_EGL
- EGL_DIR = egl
- endif
- 
--SUBDIRS = interfaces basecamerabinsrc codecparsers drm \
-+if USE_KMS
-+DRM_DIR = drm
-+endif
-+
-+SUBDIRS = interfaces basecamerabinsrc codecparsers $(DRM_DIR) \
-        insertbin uridownloader mpegts $(EGL_DIR)
- 
- noinst_HEADERS = gst-i18n-plugin.h gettext.h glib-compat-private.h
--DIST_SUBDIRS = interfaces egl basecamerabinsrc codecparsers \
-+DIST_SUBDIRS = interfaces egl basecamerabinsrc codecparsers drm \
-       insertbin uridownloader mpegts
--- 
-1.7.9.5
-
diff --git 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
index 2e91320..831b8ac 100644
--- 
a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
+++ 
b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
@@ -11,13 +11,12 @@ DEPENDS_append_omap-a15 = " \
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
 
-SRC_URI_append = " \
-        file://0001-Added-GstDRMBufferPool-support.patch \
-        file://0002-Modified-waylandsink-to-accept-NV12-format.patch \
-        file://0003-Added-KMSsink-support.patch \
-        file://0004-waylandsink-Removed-dependency-on-dri2.patch \
-        file://0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch \
-        file://0006-GstDRMBufferPool-support-fix.patch \
-"
+SRC_URI = "git://git.ti.com/glsdk/gstreamer1-0-plugins-bad.git;protocol=git \
+          "
+
+S = "${WORKDIR}/git"
+
+SRCREV = "12b0d2ac50aba19da53d2e1ac40d6ada70a79930"
+
+PR_append = "-arago5"
 
-PR_append = "-arago3"
-- 
1.7.9.5

_______________________________________________
meta-arago mailing list
[email protected]
http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago

Reply via email to