All of lore.kernel.org
 help / color / mirror / Atom feed
* [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
@ 2015-03-03 15:59 Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 1/4] gstreamer1.0-plugins-base: Add DMA Buf support Karthik Ramanan
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Karthik Ramanan @ 2015-03-03 15:59 UTC (permalink / raw)
  To: meta-arago

Difference from v1:
 * Add gst-plugins-ducati for GST 1.x
 * Add gst-plugins-vpe for GST 1.x
 * Add FILES_PN explicitly for all GST 1.x recipes

Karthik Ramanan (4):
  gstreamer1.0-plugins-base: Add DMA Buf support
  gstreamer1.0-plugins-good: Add DMABuf support v4l2src
  gstreamer1.0-plugins-bad: Add various features
  gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins

 .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
 .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
 .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
 .../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 +
 .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
 .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
 .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
 ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
 .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
 13 files changed, 4137 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend

-- 
1.7.9.5



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [meta-arago 1/4] gstreamer1.0-plugins-base: Add DMA Buf support
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
@ 2015-03-03 15:59 ` Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 2/4] gstreamer1.0-plugins-good: Add DMABuf support v4l2src Karthik Ramanan
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Karthik Ramanan @ 2015-03-03 15:59 UTC (permalink / raw)
  To: meta-arago

This patch adds the DMA Buf functionality into the
GST Base. This is required for all the TI specific
GST plugins and also for a certain good and bad
plugins.

Signed-off-by: Karthik Ramanan <a0393906@ti.com>
---
 .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++++++++++++++++
 .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
 2 files changed, 449 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend

diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
new file mode 100644
index 0000000..ff1d471
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
@@ -0,0 +1,441 @@
+From e6c027962e2415439571b96ee148934827430a2b Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+Date: Wed, 10 Dec 2014 14:05:35 +0530
+Subject: [PATCH] Added GstMetaDmaBuf features
+
+GstMetaDmaBuf metadata can be attached to a buffer
+for storing file descriptor value as a metadata.
+The support function enables adding the metadata to buffer,
+retrieving the metadata from buffer and
+retrieving file descriptor from a GstMetaDmaBuf metadata.
+---
+ configure.ac                                       |    3 +
+ gst-libs/gst/Makefile.am                           |    1 +
+ gst-libs/gst/dmabuf/Makefile.am                    |   21 +++
+ gst-libs/gst/dmabuf/dmabuf.c                       |  184 ++++++++++++++++++++
+ gst-libs/gst/dmabuf/dmabuf.h                       |   58 ++++++
+ pkgconfig/Makefile.am                              |    3 +
+ pkgconfig/gstreamer-dmabuf-uninstalled.pc.in       |   16 ++
+ pkgconfig/gstreamer-dmabuf.pc.in                   |   16 ++
+ pkgconfig/gstreamer-plugins-base-uninstalled.pc.in |    4 +-
+ pkgconfig/gstreamer-plugins-base.pc.in             |    2 +-
+ 10 files changed, 305 insertions(+), 3 deletions(-)
+ create mode 100644 gst-libs/gst/dmabuf/Makefile.am
+ create mode 100644 gst-libs/gst/dmabuf/dmabuf.c
+ create mode 100644 gst-libs/gst/dmabuf/dmabuf.h
+ create mode 100644 pkgconfig/gstreamer-dmabuf-uninstalled.pc.in
+ create mode 100644 pkgconfig/gstreamer-dmabuf.pc.in
+
+diff --git a/configure.ac b/configure.ac
+index cb29045..7eeca12 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -868,6 +868,7 @@ gst-libs/gst/tag/Makefile
+ gst-libs/gst/pbutils/Makefile
+ gst-libs/gst/pbutils/gstpluginsbaseversion.h
+ gst-libs/gst/video/Makefile
++gst-libs/gst/dmabuf/Makefile
+ tools/Makefile
+ pkgconfig/Makefile
+ pkgconfig/gstreamer-allocators.pc
+@@ -876,6 +877,8 @@ pkgconfig/gstreamer-audio.pc
+ pkgconfig/gstreamer-audio-uninstalled.pc
+ pkgconfig/gstreamer-app.pc
+ pkgconfig/gstreamer-app-uninstalled.pc
++pkgconfig/gstreamer-dmabuf.pc
++pkgconfig/gstreamer-dmabuf-uninstalled.pc
+ pkgconfig/gstreamer-fft.pc
+ pkgconfig/gstreamer-fft-uninstalled.pc
+ pkgconfig/gstreamer-pbutils.pc
+diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
+index 0634d15..383e62f 100644
+--- a/gst-libs/gst/Makefile.am
++++ b/gst-libs/gst/Makefile.am
+@@ -5,6 +5,7 @@ SUBDIRS = \
+ 	sdp \
+ 	rtsp \
+ 	video \
++        dmabuf\
+ 	audio \
+ 	pbutils \
+ 	riff \
+diff --git a/gst-libs/gst/dmabuf/Makefile.am b/gst-libs/gst/dmabuf/Makefile.am
+new file mode 100644
+index 0000000..dbac1e4
+--- /dev/null
++++ b/gst-libs/gst/dmabuf/Makefile.am
+@@ -0,0 +1,21 @@
++lib_LTLIBRARIES = libgstdmabuf-@GST_API_VERSION@.la
++
++libgstdmabuf_@GST_API_VERSION@_la_SOURCES = \
++	dmabuf.c
++libgstdmabuf_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/dmabuf
++libgstdmabuf_@GST_API_VERSION@include_HEADERS = \
++	dmabuf.h
++
++libgstdmabuf_@GST_API_VERSION@_la_CFLAGS = \
++	$(GST_PLUGINS_BASE_CFLAGS)\
++	$(GST_BASE_CFLAGS) \
++	$(GST_CFLAGS)
++
++libgstdmabuf_@GST_API_VERSION@_la_LIBADD = $(GST_BASE_LIBS) \
++	$(GST_LIBS)
++
++libgstdmabuf_@GST_API_VERSION@_la_LDFLAGS = \
++	$(GST_LIB_LDFLAGS) \
++	$(GST_ALL_LDFLAGS) \
++	$(GST_LT_LDFLAGS)
++
+diff --git a/gst-libs/gst/dmabuf/dmabuf.c b/gst-libs/gst/dmabuf/dmabuf.c
+new file mode 100644
+index 0000000..583740e
+--- /dev/null
++++ b/gst-libs/gst/dmabuf/dmabuf.c
+@@ -0,0 +1,184 @@
++/* GStreamer dmabuf
++ *
++ * Copyright (c) 2012, Texas Instruments Incorporated
++ *
++ * 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.
++ */
++
++/**
++ * SECTION:gstdmabuf
++ * @short_description: GStreamer dmabuf metadata support
++ *
++ * Since: 1.2.?
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <unistd.h>
++
++#include "dmabuf.h"
++
++
++static GType gst_meta_dma_buf_api_get_type (void);
++#define GST_META_DMA_BUF_API_TYPE (gst_meta_dma_buf_api_get_type())
++
++static const GstMetaInfo *gst_meta_dma_buf_get_info (void);
++#define GST_META_DMA_BUF_INFO (gst_meta_dma_buf_get_info())
++
++#define GST_META_DMA_BUF_GET(buf) ((GstMetaDmaBuf *)gst_buffer_get_meta(buf,GST_META_DMA_BUF_API_TYPE))
++#define GST_META_DMA_BUF_ADD(buf) ((GstMetaDmaBuf *)gst_buffer_add_meta(buf,GST_META_DMA_BUF_INFO,NULL))
++
++
++static gboolean
++dmabuf_init_func (GstMeta * meta, gpointer params, GstBuffer * buffer)
++{
++   GST_DEBUG ("init called on buffer %p, meta %p", buffer, meta);
++  /* nothing to init really, the init function is mostly for allocating
++   * additional memory or doing special setup as part of adding the metadata to
++   * the buffer*/
++  return TRUE;
++}
++
++static void
++dmabuf_free_func (GstMeta * meta, GstBuffer * buffer)
++{
++   /* close the file descriptor associated with the buffer, 
++    * that is stored as metadata*/
++   GstMetaDmaBuf *dmabuf = (GstMetaDmaBuf *) meta;
++   GST_DEBUG ("free called on buffer %p, meta %p", buffer, meta);
++   close (dmabuf->fd);
++}
++
++static gboolean
++dmabuf_transform_func (GstBuffer * transbuf, GstMeta * meta,
++    GstBuffer * buffer, GQuark type, gpointer data)
++{
++  GstMetaDmaBuf *transmeta, *tmeta = (GstMetaDmaBuf *) meta;
++
++  GST_DEBUG ("transform %s called from buffer %p to %p, meta %p",
++     g_quark_to_string (type), buffer, transbuf, meta);
++
++  if (GST_META_TRANSFORM_IS_COPY (type)) {
++    GstMetaTransformCopy *copy_data = data;
++    
++    if (!copy_data->region){
++    /* only copy if the complete data is copied as well */
++       transmeta = GST_META_DMA_BUF_ADD (transbuf);
++       if(!transmeta) {
++          return FALSE;
++       }
++    /* create a copy of the file descriptor*/
++       transmeta->fd = dup(tmeta->fd);
++    }
++  }
++  return TRUE;
++}
++
++static GType
++gst_meta_dma_buf_api_get_type (void)
++{
++  static volatile GType type;
++  static const gchar *tags[] = { "dmabuf", NULL };
++
++  if (g_once_init_enter (&type)) {
++    GType _type = gst_meta_api_type_register ("GstMetaDmaBufAPI", tags);
++    g_once_init_leave (&type, _type);
++  }
++  return type;
++}
++
++static const GstMetaInfo *
++gst_meta_dma_buf_get_info (void)
++{
++  static const GstMetaInfo *meta_dma_buf_info = NULL;
++
++  if (g_once_init_enter (&meta_dma_buf_info)) {
++    const GstMetaInfo *mi = gst_meta_register (GST_META_DMA_BUF_API_TYPE,
++        "GstMetaDmaBuf",
++        sizeof (GstMetaDmaBuf),
++        dmabuf_init_func, dmabuf_free_func, dmabuf_transform_func);
++    g_once_init_leave (&meta_dma_buf_info, mi);
++  }
++  return meta_dma_buf_info;
++}
++
++
++
++/**
++ * gst_buffer_add_dma_buf_meta:
++ * @buf: a #GstBuffer
++ * @fd: the associated file descriptor to be added as metadata
++ *
++ * Adds a GstMetaDmaBuf metadata to the buffer. The @fd is also set in the metadata added 
++ * 
++ * Returns: the #GstMetaDmaBuf on @buf
++ *
++ * Since: 1.2.?
++ */
++
++GstMetaDmaBuf *
++gst_buffer_add_dma_buf_meta (GstBuffer * buf, int fd)
++{
++  GstMetaDmaBuf *dmabuf;
++  dmabuf = GST_META_DMA_BUF_ADD (buf);
++  if (dmabuf) 
++     dmabuf->fd = fd;
++  return dmabuf;
++}
++
++/**
++ * gst_buffer_get_dma_buf_meta:
++ * @buf: a #GstBuffer
++ *
++ * Get the GstMetaDmaBuf metadata that has previously been attached to a buffer
++ * with gst_buffer_add_dma_buf_meta(), usually by another element
++ * upstream.
++ *
++ * Returns: the #GstMetaDmaBuf attached to @buf
++ *
++ * Since: 1.2.?
++ */
++GstMetaDmaBuf *
++gst_buffer_get_dma_buf_meta (GstBuffer * buf)
++{
++  GstMetaDmaBuf * dmabuf;
++  dmabuf = GST_META_DMA_BUF_GET (buf);
++  return dmabuf;
++}
++
++
++/**
++ * gst_dma_buf_meta_get_fd:
++ * @dmabuf: a #GstMetaDmaBuf
++ *
++ * Returns: the file descriptor set as GstMetaDmaBuf metadata 
++ * that has previously been attached to a buffer
++ * with gst_buffer_add_dma_buf_meta()
++ *
++ * Since: 1.2.?
++ */
++int
++gst_dma_buf_meta_get_fd (GstMetaDmaBuf * dmabuf)
++{
++  if(dmabuf) {
++    return dmabuf->fd;
++  } else {
++    GST_DEBUG("Received Null parameter for GstMetaDmaBuf ");
++    return 0;
++  }
++}
+diff --git a/gst-libs/gst/dmabuf/dmabuf.h b/gst-libs/gst/dmabuf/dmabuf.h
+new file mode 100644
+index 0000000..d49042e
+--- /dev/null
++++ b/gst-libs/gst/dmabuf/dmabuf.h
+@@ -0,0 +1,58 @@
++/* GStreamer dmabuf
++ *
++ * Copyright (c) 2012, Texas Instruments Incorporated
++ *
++ * 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_DMA_BUF_H__
++#define __GST_DMA_BUF_H__
++
++#include <gst/gst.h>
++
++
++G_BEGIN_DECLS
++
++/**
++ * GstMetaDmaBuf:
++ *
++ * A structure that enables setting file descriptor as a metadata on a buffer.
++ *
++ * Since: 1.2.?
++ */
++
++
++typedef struct
++{
++  GstMeta meta;
++
++  int fd;
++} GstMetaDmaBuf;
++
++
++
++/* attach GstMetaDmaBuf metadata to buffers */
++GstMetaDmaBuf * gst_buffer_add_dma_buf_meta (GstBuffer * buf, int fd);
++
++/* retrieve GstMetaDmaBuf metadata from buffers */
++GstMetaDmaBuf * gst_buffer_get_dma_buf_meta (GstBuffer * buf);
++
++/* retrieve file descriptor value from a GstMetaDmaBuf metadata */
++int gst_dma_buf_meta_get_fd (GstMetaDmaBuf * buf);
++
++G_END_DECLS
++
++#endif /* __GST_DMA_BUF_H__ */
+diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am
+index 9976f95..c68d492 100644
+--- a/pkgconfig/Makefile.am
++++ b/pkgconfig/Makefile.am
+@@ -3,6 +3,7 @@ pcverfiles =  \
+ 	gstreamer-allocators-@GST_API_VERSION@.pc \
+ 	gstreamer-audio-@GST_API_VERSION@.pc \
+ 	gstreamer-app-@GST_API_VERSION@.pc \
++	gstreamer-dmabuf-@GST_API_VERSION@.pc \
+ 	gstreamer-fft-@GST_API_VERSION@.pc \
+ 	gstreamer-pbutils-@GST_API_VERSION@.pc \
+ 	gstreamer-riff-@GST_API_VERSION@.pc \
+@@ -16,6 +17,7 @@ pcverfiles_uninstalled = \
+ 	gstreamer-allocators-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-audio-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-app-@GST_API_VERSION@-uninstalled.pc \
++	gstreamer-dmabuf-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-fft-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-pbutils-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-riff-@GST_API_VERSION@-uninstalled.pc \
+@@ -46,6 +48,7 @@ pcinfiles = \
+ 		   gstreamer-allocators.pc.in gstreamer-allocators-uninstalled.pc.in \
+            gstreamer-audio.pc.in gstreamer-audio-uninstalled.pc.in \
+            gstreamer-app.pc.in gstreamer-app-uninstalled.pc.in \
++           gstreamer-dmabuf.pc.in gstreamer-dmabuf-uninstalled.pc.in \
+            gstreamer-fft.pc.in gstreamer-fft-uninstalled.pc.in \
+            gstreamer-pbutils.pc.in gstreamer-pbutils-uninstalled.pc.in \
+            gstreamer-riff.pc.in gstreamer-riff-uninstalled.pc.in \
+diff --git a/pkgconfig/gstreamer-dmabuf-uninstalled.pc.in b/pkgconfig/gstreamer-dmabuf-uninstalled.pc.in
+new file mode 100644
+index 0000000..863175f
+--- /dev/null
++++ b/pkgconfig/gstreamer-dmabuf-uninstalled.pc.in
+@@ -0,0 +1,16 @@
++# the standard variables don't make sense for an uninstalled copy
++prefix=
++exec_prefix=
++libdir=
++# includedir is builddir because it is used to find gstconfig.h in places
++includedir=@abs_top_builddir@/gst-libs
++girdir=@abs_top_builddir@/gst-libs/gst/video
++typelibdir=@abs_top_builddir@/gst-libs/gst/video
++
++Name: GStreamer DMA-BUF Library, Uninstalled
++Description: Video base classes and helper functions, uninstalled
++Version: @VERSION@
++Requires: gstreamer-@GST_API_VERSION@ gstreamer-base-@GST_API_VERSION@
++Libs: @abs_top_builddir@/gst-libs/gst/dmabuf/libgstdmabuf-@GST_API_VERSION@.la
++Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
++
+diff --git a/pkgconfig/gstreamer-dmabuf.pc.in b/pkgconfig/gstreamer-dmabuf.pc.in
+new file mode 100644
+index 0000000..1a44f19
+--- /dev/null
++++ b/pkgconfig/gstreamer-dmabuf.pc.in
+@@ -0,0 +1,16 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@/gstreamer-@GST_API_VERSION@
++datarootdir=${prefix}/share
++datadir=${datarootdir}
++girdir=${datadir}/gir-1.0
++typelibdir=${libdir}/girepository-1.0
++
++Name: GStreamer DMA-BUF Library
++Description: Video base classes and helper functions
++Requires: gstreamer-@GST_API_VERSION@ gstreamer-base-@GST_API_VERSION@
++Version: @VERSION@
++Libs: -L${libdir} -lgstdmabuf-@GST_API_VERSION@
++Cflags: -I${includedir}
++
+diff --git a/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in b/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in
+index 970c051..ebf2be6 100644
+--- a/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in
++++ b/pkgconfig/gstreamer-plugins-base-uninstalled.pc.in
+@@ -10,7 +10,7 @@ Name: GStreamer Base Plugins Libraries, Uninstalled
+ Description: Streaming media framework, base plugins libraries, uninstalled
+ Version: @VERSION@
+ Requires: gstreamer-@GST_API_VERSION@
+-Libs: -L@abs_top_builddir@/gst-libs/gst/allocators -L@abs_top_builddir@/gst-libs/gst/app -L@abs_top_builddir@/gst-libs/gst/audio -L@abs_top_builddir@/gst-libs/gst/fft -L@abs_top_builddir@/gst-libs/gst/pbutils -L@abs_top_builddir@/gst-libs/gst/riff -L@abs_top_builddir@/gst-libs/gst/rtp -L@abs_top_builddir@/gst-libs/gst/rtsp -L@abs_top_builddir@/gst-libs/gst/sdp -L@abs_top_builddir@/gst-libs/gst/tag -L@abs_top_builddir@/gst-libs/gst/video
++Libs: -L@abs_top_builddir@/gst-libs/gst/allocators -L@abs_top_builddir@/gst-libs/gst/app -L@abs_top_builddir@/gst-libs/gst/audio -L@abs_top_builddir@/gst-libs/gst/dmabuf -L@abs_top_builddir@/gst-libs/gst/fft -L@abs_top_builddir@/gst-libs/gst/pbutils -L@abs_top_builddir@/gst-libs/gst/riff -L@abs_top_builddir@/gst-libs/gst/rtp -L@abs_top_builddir@/gst-libs/gst/rtsp -L@abs_top_builddir@/gst-libs/gst/sdp -L@abs_top_builddir@/gst-libs/gst/tag -L@abs_top_builddir@/gst-libs/gst/video
+ Cflags: -I@abs_top_srcdir@/gst-libs -I@abs_top_builddir@/gst-libs
+ 
+-libraries=allocators app audio fft pbutils riff rtp rtsp sdp tag video
++libraries=allocators app audio dmabuf fft pbutils riff rtp rtsp sdp tag video
+diff --git a/pkgconfig/gstreamer-plugins-base.pc.in b/pkgconfig/gstreamer-plugins-base.pc.in
+index e817746..3d3bc94 100644
+--- a/pkgconfig/gstreamer-plugins-base.pc.in
++++ b/pkgconfig/gstreamer-plugins-base.pc.in
+@@ -11,4 +11,4 @@ Version: @VERSION@
+ Libs: -L${libdir}
+ Cflags: -I${includedir}
+ 
+-libraries=allocators app audio fft pbutils riff rtp rtsp sdp tag video
++libraries=allocators app audio dmabuf fft pbutils riff rtp rtsp sdp tag video
+-- 
+1.7.9.5
+
diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
new file mode 100644
index 0000000..c76cb20
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI_append = " \
+        file://0001-Added-GstMetaDmaBuf-features.patch"
+
+PR = "r2"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [meta-arago 2/4] gstreamer1.0-plugins-good: Add DMABuf support v4l2src
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 1/4] gstreamer1.0-plugins-base: Add DMA Buf support Karthik Ramanan
@ 2015-03-03 15:59 ` Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 3/4] gstreamer1.0-plugins-bad: Add various features Karthik Ramanan
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Karthik Ramanan @ 2015-03-03 15:59 UTC (permalink / raw)
  To: meta-arago

Signed-off-by: Karthik Ramanan <a0393906@ti.com>
---
 ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++++++++++++++++++
 .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
 2 files changed, 306 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend

diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
new file mode 100644
index 0000000..3913208
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
@@ -0,0 +1,298 @@
+From 25936e8f703ebe99c00e083cec317231b17d503b Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+Date: Thu, 29 Jan 2015 21:10:49 +0530
+Subject: [PATCH 1/2] Adds GST_V4L2_IO_DMABUF mode support in capture
+
+Enables v4l2src to accept pool from peer and allocate buffers from
+them in GST_V4L2_IO_DMABUF mode.
+---
+ sys/v4l2/Makefile.am         |    1 +
+ sys/v4l2/gstv4l2bufferpool.c |   93 +++++++++++++++++++++++++++++++++++-------
+ sys/v4l2/gstv4l2object.h     |    1 +
+ sys/v4l2/gstv4l2src.c        |   13 ++++--
+ 4 files changed, 90 insertions(+), 18 deletions(-)
+
+diff --git a/sys/v4l2/Makefile.am b/sys/v4l2/Makefile.am
+index da138ae..6ff4e18 100644
+--- a/sys/v4l2/Makefile.am
++++ b/sys/v4l2/Makefile.am
+@@ -37,6 +37,7 @@ libgstvideo4linux2_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS)
+ libgstvideo4linux2_la_LIBADD =   $(GST_PLUGINS_BASE_LIBS) \
+ 				 -lgstallocators-$(GST_API_VERSION) \
+ 				 -lgstvideo-$(GST_API_VERSION) \
++				 -lgstdmabuf-$(GST_API_VERSION) \
+ 				 $(GST_BASE_LIBS) \
+ 				 $(GST_LIBS) \
+ 				 $(xv_libs) \
+diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
+index 463dd44..5a108eb 100644
+--- a/sys/v4l2/gstv4l2bufferpool.c
++++ b/sys/v4l2/gstv4l2bufferpool.c
+@@ -41,6 +41,7 @@
+ #include "gst/video/gstvideometa.h"
+ #include "gst/video/gstvideopool.h"
+ #include "gst/allocators/gstdmabuf.h"
++#include <gst/dmabuf/dmabuf.h>
+ 
+ #include <gstv4l2bufferpool.h>
+ 
+@@ -112,7 +113,16 @@ gst_v4l2_buffer_pool_free_buffer (GstBufferPool * bpool, GstBuffer * buffer)
+   switch (obj->mode) {
+     case GST_V4L2_IO_RW:
+     case GST_V4L2_IO_DMABUF:
++    {
++      GstV4l2Meta *meta;
++      gint index;
++
++      meta = GST_V4L2_META_GET (buffer);
++      g_assert (meta != NULL);
++      index = meta->vbuffer.index;
++      pool->buffers[index] = NULL;
+       break;
++    }
+     case GST_V4L2_IO_MMAP:
+     {
+       GstV4l2Meta *meta;
+@@ -147,6 +157,7 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+   GstV4l2Meta *meta;
+   GstV4l2Object *obj;
+   GstVideoInfo *info;
++  GstMetaDmaBuf *dmabuf;
+   guint index;
+ 
+   obj = pool->obj;
+@@ -168,7 +179,12 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+ 
+         memset (&create_bufs, 0, sizeof (struct v4l2_create_buffers));
+         create_bufs.count = 1;
+-        create_bufs.memory = V4L2_MEMORY_MMAP;
++        if (obj->mode == GST_V4L2_IO_MMAP)
++          create_bufs.memory = V4L2_MEMORY_MMAP;
++
++        if (obj->mode == GST_V4L2_IO_DMABUF)
++          create_bufs.memory = V4L2_MEMORY_DMABUF;
++
+         create_bufs.format.type = obj->type;
+ 
+         if (v4l2_ioctl (pool->video_fd, VIDIOC_G_FMT, &create_bufs.format) < 0)
+@@ -184,7 +200,24 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+         pool->buffers[pool->num_buffers - 1] = NULL;
+       }
+ #endif
+-      newbuf = gst_buffer_new ();
++      if (obj->externalpool && obj->mode==GST_V4L2_IO_DMABUF) {
++         GstFlowReturn ret = gst_buffer_pool_acquire_buffer (GST_BUFFER_POOL (obj->externalpool), &newbuf,
++           NULL);
++         if (ret != GST_FLOW_OK)
++           goto external_acquire_failed;
++         dmabuf = gst_buffer_get_dma_buf_meta (newbuf);
++
++        /* 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 (pool, "not importing non dmabuf buffer");
++             return GST_FLOW_ERROR;
++          }
++
++      } else {
++        newbuf = gst_buffer_new ();
++      }
+       meta = GST_V4L2_META_ADD (newbuf);
+ 
+       index = pool->num_allocated;
+@@ -194,8 +227,12 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+       memset (&meta->vbuffer, 0x0, sizeof (struct v4l2_buffer));
+       meta->vbuffer.index = index;
+       meta->vbuffer.type = obj->type;
+-      meta->vbuffer.memory = V4L2_MEMORY_MMAP;
+-
++      if (obj->mode == GST_V4L2_IO_MMAP)
++         meta->vbuffer.memory = V4L2_MEMORY_MMAP;
++      if (obj->mode == GST_V4L2_IO_DMABUF) {
++         meta->vbuffer.memory = V4L2_MEMORY_DMABUF;
++         meta->vbuffer.m.fd = gst_dma_buf_meta_get_fd (dmabuf);
++      }
+       if (v4l2_ioctl (pool->video_fd, VIDIOC_QUERYBUF, &meta->vbuffer) < 0)
+         goto querybuf_failed;
+ 
+@@ -220,6 +257,11 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+                 meta->mem, meta->vbuffer.length, 0, meta->vbuffer.length, NULL,
+                 NULL));
+       }
++     if (obj->externalpool && obj->mode==GST_V4L2_IO_DMABUF) {
++        meta->vbuffer.memory = V4L2_MEMORY_DMABUF;
++        meta->vbuffer.m.fd = gst_dma_buf_meta_get_fd (dmabuf);
++        goto skipped_native_dmabuf;
++     }
+ #if HAVE_DECL_V4L2_MEMORY_DMABUF
+       if (obj->mode == GST_V4L2_IO_DMABUF) {
+         struct v4l2_exportbuffer expbuf;
+@@ -237,6 +279,8 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+                 meta->vbuffer.length));
+       }
+ #endif
++
++skipped_native_dmabuf:
+       /* add metadata to raw video buffers */
+       if (pool->add_videometa && info->finfo) {
+         const GstVideoFormatInfo *finfo = info->finfo;
+@@ -328,6 +372,11 @@ mmap_failed:
+     errno = errnosave;
+     return GST_FLOW_ERROR;
+   }
++external_acquire_failed:
++  {
++    GST_WARNING ("External pool acquire failed ");
++    return GST_FLOW_ERROR;
++  }
+ #if HAVE_DECL_V4L2_MEMORY_DMABUF
+ expbuf_failed:
+   {
+@@ -407,7 +456,11 @@ gst_v4l2_buffer_pool_set_config (GstBufferPool * bpool, GstStructure * config)
+       memset (&breq, 0, sizeof (struct v4l2_requestbuffers));
+       breq.type = obj->type;
+       breq.count = num_buffers;
+-      breq.memory = V4L2_MEMORY_MMAP;
++      if (obj->mode == GST_V4L2_IO_MMAP)
++         breq.memory = V4L2_MEMORY_MMAP;
++
++      if (obj->mode == GST_V4L2_IO_DMABUF)
++         breq.memory = V4L2_MEMORY_DMABUF;
+ 
+       if (v4l2_ioctl (pool->video_fd, VIDIOC_REQBUFS, &breq) < 0)
+         goto reqbufs_failed;
+@@ -566,7 +619,11 @@ gst_v4l2_buffer_pool_free_buffers (GstV4l2BufferPool * pool)
+     memset (&breq, 0, sizeof (struct v4l2_requestbuffers));
+     breq.type = pool->obj->type;
+     breq.count = 0;
+-    breq.memory = V4L2_MEMORY_MMAP;
++    if (pool->obj->mode == GST_V4L2_IO_MMAP)
++      breq.memory = V4L2_MEMORY_MMAP;
++
++    if (pool->obj->mode == GST_V4L2_IO_DMABUF)
++      breq.memory = V4L2_MEMORY_DMABUF;
+     if (v4l2_ioctl (pool->video_fd, VIDIOC_REQBUFS, &breq) < 0) {
+       GST_ERROR_OBJECT (pool, "error releasing buffers: %s",
+           g_strerror (errno));
+@@ -732,12 +789,12 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer)
+ 
+   memset (&vbuffer, 0x00, sizeof (vbuffer));
+   vbuffer.type = obj->type;
+-#if HAVE_DECL_V4L2_MEMORY_DMABUF
++
++  if (obj->mode == GST_V4L2_IO_MMAP)
++    vbuffer.memory = V4L2_MEMORY_MMAP;
++
+   if (obj->mode == GST_V4L2_IO_DMABUF)
+     vbuffer.memory = V4L2_MEMORY_DMABUF;
+-  else
+-#endif
+-    vbuffer.memory = V4L2_MEMORY_MMAP;
+ 
+   GST_LOG_OBJECT (pool, "doing DQBUF");
+   if (v4l2_ioctl (pool->video_fd, VIDIOC_DQBUF, &vbuffer) < 0)
+@@ -779,10 +836,14 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer)
+    * no share, so if it's not there, it's not used at all.
+    */
+   if (obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
+-    gst_buffer_remove_all_memory (outbuf);
+-    gst_buffer_append_memory (outbuf,
+-        gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
+-            meta->mem, vbuffer.length, 0, vbuffer.bytesused, NULL, NULL));
++    if (obj->mode == GST_V4L2_IO_DMABUF) {
++      GST_LOG_OBJECT (pool, " Assuming size doesn't change");
++    } else {
++      gst_buffer_remove_all_memory (outbuf);
++      gst_buffer_append_memory (outbuf,
++          gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE,
++              meta->mem, vbuffer.length, 0, vbuffer.bytesused, NULL, NULL));
++    }
+   }
+ 
+   GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+@@ -1207,6 +1268,10 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer * buf)
+           /* capture into the buffer */
+           ret = gst_v4l2_do_read (pool, buf);
+           break;
++        case GST_V4L2_IO_DMABUF:
++            /* nothing, data was inside the buffer when we did _acquire() */
++          if (buf->pool == obj->externalpool)
++            goto done;
+ 
+         case GST_V4L2_IO_MMAP:
+         {
+diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
+index fbfff92..645e016 100644
+--- a/sys/v4l2/gstv4l2object.h
++++ b/sys/v4l2/gstv4l2object.h
+@@ -127,6 +127,7 @@ struct _GstV4l2Object {
+ 
+   /* optional pool */
+   GstBufferPool *pool;
++  GstBufferPool *externalpool;
+ 
+   /* the video device's capabilities */
+   struct v4l2_capability vcap;
+diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
+index 8e1b754..7a19e5f 100644
+--- a/sys/v4l2/gstv4l2src.c
++++ b/sys/v4l2/gstv4l2src.c
+@@ -467,6 +467,7 @@ gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+   GstV4l2Src *src;
+   GstV4l2Object *obj;
+   GstBufferPool *pool;
++  GstBufferPool *externalpool;
+   guint size, min, max;
+   gboolean update;
+ 
+@@ -474,17 +475,17 @@ gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+   obj = src->v4l2object;
+ 
+   if (gst_query_get_n_allocation_pools (query) > 0) {
+-    gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
++    gst_query_parse_nth_allocation_pool (query, 0, &externalpool, &size, &min, &max);
+     update = TRUE;
+   } else {
+-    pool = NULL;
++    externalpool = NULL;
+     min = max = 0;
+     size = 0;
+     update = FALSE;
+   }
+ 
+   GST_DEBUG_OBJECT (src, "allocation: size:%u min:%u max:%u pool:%"
+-      GST_PTR_FORMAT, size, min, max, pool);
++      GST_PTR_FORMAT, size, min, max, externalpool);
+ 
+   if (min != 0) {
+     /* if there is a min-buffers suggestion, use it. We add 1 because we need 1
+@@ -497,7 +498,7 @@ gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+   /* select a pool */
+   switch (obj->mode) {
+     case GST_V4L2_IO_RW:
+-      if (pool == NULL) {
++      if (externalpool == NULL) {
+         /* no downstream pool, use our own then */
+         GST_DEBUG_OBJECT (src,
+             "read/write mode: no downstream pool, using our own");
+@@ -510,12 +511,16 @@ gst_v4l2src_decide_allocation (GstBaseSrc * bsrc, GstQuery * query)
+         /* use the bigest size, when we use our own pool we can't really do any
+          * other size than what the hardware gives us but for downstream pools
+          * we can try */
++        pool = externalpool;
+         size = MAX (size, obj->sizeimage);
+       }
+       break;
+     case GST_V4L2_IO_MMAP:
+     case GST_V4L2_IO_USERPTR:
+     case GST_V4L2_IO_DMABUF:
++      if (externalpool) {
++           obj->externalpool =  GST_BUFFER_POOL_CAST (externalpool);
++      }
+       /* in streaming mode, prefer our own pool */
+       pool = GST_BUFFER_POOL_CAST (obj->pool);
+       size = obj->sizeimage;
+-- 
+1.7.9.5
+
diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
new file mode 100644
index 0000000..1d6ceb4
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI_append = " \
+        file://0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch"
+
+PR = "r2"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [meta-arago 3/4] gstreamer1.0-plugins-bad: Add various features
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 1/4] gstreamer1.0-plugins-base: Add DMA Buf support Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 2/4] gstreamer1.0-plugins-good: Add DMABuf support v4l2src Karthik Ramanan
@ 2015-03-03 15:59 ` Karthik Ramanan
  2015-03-03 15:59 ` [meta-arago 4/4] gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins Karthik Ramanan
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Karthik Ramanan @ 2015-03-03 15:59 UTC (permalink / raw)
  To: meta-arago

The following feature will be enabled by this patch
 * Add GST DRM Buffer Pool suppport.
 * Add support for waylandsink to accept NV12 buffers.
   This is required for interworking with TI specific GST plugins
   for hardware acclerated encode/decode
 * Add support for KMS Sink.
   This is required for customers who will need native rendering
   support without the use of wayland (wayland-sink)
 * Fix incorrect dependency on dri2 for the wayland sink.
 * Increase the rank for vc1parse and jpegparse.

Signed-off-by: Karthik Ramanan <a0393906@ti.com>
---
 .../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 +
 .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
 6 files changed, 3342 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
 create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend

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
new file mode 100644
index 0000000..c7015b2
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
@@ -0,0 +1,774 @@
+From 1df02c3320d74c0f36e0ea7021b033da5d4d891e Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+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-@GST_API_VERSION@.la
++
++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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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-@GST_API_VERSION@.pc \
+ 	gstreamer-codecparsers-@GST_API_VERSION@.pc \
++        gstreamer-drm-@GST_API_VERSION@.pc \
+ 	gstreamer-insertbin-@GST_API_VERSION@.pc \
+ 	gstreamer-mpegts-@GST_API_VERSION@.pc
+ 
+ pcverfiles_uninstalled = \
+ 	gstreamer-plugins-bad-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-codecparsers-@GST_API_VERSION@-uninstalled.pc \
++        gstreamer-drm-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-insertbin-@GST_API_VERSION@-uninstalled.pc \
+ 	gstreamer-mpegts-@GST_API_VERSION@-uninstalled.pc
+ 
+@@ -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-@GST_MAJORMINOR@.la
++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
new file mode 100644
index 0000000..875ff0b
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
@@ -0,0 +1,1017 @@
+From 4aba7f1afbd6c364e649f4c0e539c9a93d59bce6 Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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
new file mode 100644
index 0000000..8c19fa6
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
@@ -0,0 +1,1457 @@
+From efe7189ee13e78664bbe373c6fd890280c9dee50 Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+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 <alessandro.decina@collabora.co.uk>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ *  Rob Clark <rob.clark@linaro.org>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ *
++ * 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 <alessandro.decina@collabora.co.uk>
++ */
++
++#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 <alessandro.d@gmail.com>");
++
++  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 <alessandro.decina@collabora.co.uk>
++ *
++ * 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
new file mode 100644
index 0000000..8c2e887
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
@@ -0,0 +1,26 @@
+From dbaac14600fd88988aa676634849b137376de397 Mon Sep 17 00:00:00 2001
+From: Karthik Ramanan <a0393906@ti.com>
+Date: Thu, 15 Jan 2015 12:47:31 +0530
+Subject: [PATCH] waylandsink: Removed dependency on dri2
+
+Signed-off-by: Karthik Ramanan <a0393906@ti.com>
+---
+ 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
new file mode 100644
index 0000000..8ae79b5
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
@@ -0,0 +1,54 @@
+From 7083e7ee50130bf41a0ec0d1634577d4bf9ef9cf Mon Sep 17 00:00:00 2001
+From: Pooja Prajod <a0132412@ti.com>
+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) <arnout@mind.be>");
+ 
+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_1.2.3.bbappend b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
new file mode 100644
index 0000000..33b0048
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
@@ -0,0 +1,14 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+PACKAGECONFIG = "faad wayland"
+
+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"
+
+PR = "r9"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [meta-arago 4/4] gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
                   ` (2 preceding siblings ...)
  2015-03-03 15:59 ` [meta-arago 3/4] gstreamer1.0-plugins-bad: Add various features Karthik Ramanan
@ 2015-03-03 15:59 ` Karthik Ramanan
  2015-03-10 16:53 ` [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Denys Dmytriyenko
  2015-03-17 15:45 ` Denys Dmytriyenko
  5 siblings, 0 replies; 11+ messages in thread
From: Karthik Ramanan @ 2015-03-03 15:59 UTC (permalink / raw)
  To: meta-arago

Signed-off-by: Karthik Ramanan <a0393906@ti.com>
---
 .../gstreamer1.0-plugins-ducati_git.bb             |   10 ++++++++++
 .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +++++++++++++++++++
 .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +++++++++++
 3 files changed, 40 insertions(+)
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
 create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb

diff --git a/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
new file mode 100644
index 0000000..7f65284
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "GStreamer elements to use the multimedia accelerators available on some TI parts"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+require gstreamer1.0-plugins-ti.inc
+
+PR = "${INC_PR}.1"
+SRCREV = "59fb5be20da72a2f5fb4f25587be668532a90c3b"
+
+SRC_URI = "git://git.ti.com/glsdk/gst-plugin-ducati.git;protocol=git"
diff --git a/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
new file mode 100644
index 0000000..b5bb501
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
@@ -0,0 +1,19 @@
+# Include file for common build settings for TI GStreamer plugins
+DEPENDS += "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad libdrm libdce"
+
+inherit autotools pkgconfig gettext
+
+INC_PR = "r0"
+
+S = "${WORKDIR}/git"
+
+do_configure() {
+	cd ${S}
+	chmod +x autogen.sh
+	./autogen.sh --host=arm-linux --with-libtool-sysroot=${STAGING_DIR_TARGET} --prefix=/usr
+}
+
+EXTRA_OECONF += "--enable-maintainer-mode"
+EXTRA_OEMAKE += "'ERROR_CFLAGS=-Wno-deprecated-declarations'"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
diff --git a/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
new file mode 100644
index 0000000..74d5c77
--- /dev/null
+++ b/meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "GStreamer elements to use the Video Processing Engine (VPE) found on some TI devices"
+
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+require gstreamer1.0-plugins-ti.inc
+
+PR = "${INC_PR}.1"
+SRCREV = "6083aeb7d2caedb57cd62ab34c2ab0cd59664da5"
+
+SRC_URI = "git://git.ti.com/glsdk/gst-plugin-vpe.git;protocol=git"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
                   ` (3 preceding siblings ...)
  2015-03-03 15:59 ` [meta-arago 4/4] gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins Karthik Ramanan
@ 2015-03-10 16:53 ` Denys Dmytriyenko
  2015-03-17 15:45 ` Denys Dmytriyenko
  5 siblings, 0 replies; 11+ messages in thread
From: Denys Dmytriyenko @ 2015-03-10 16:53 UTC (permalink / raw)
  To: Karthik Ramanan; +Cc: meta-arago

Vivek, Jake,

Do you have any comments for these 2 sets of GST 1.x patches?


On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
> Difference from v1:
>  * Add gst-plugins-ducati for GST 1.x
>  * Add gst-plugins-vpe for GST 1.x
>  * Add FILES_PN explicitly for all GST 1.x recipes
> 
> Karthik Ramanan (4):
>   gstreamer1.0-plugins-base: Add DMA Buf support
>   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>   gstreamer1.0-plugins-bad: Add various features
>   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
> 
>  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>  .../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 +
>  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>  13 files changed, 4137 insertions(+)
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
> 
> -- 
> 1.7.9.5
> 
> _______________________________________________
> meta-arago mailing list
> meta-arago@arago-project.org
> http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
                   ` (4 preceding siblings ...)
  2015-03-10 16:53 ` [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Denys Dmytriyenko
@ 2015-03-17 15:45 ` Denys Dmytriyenko
  2015-03-17 16:07   ` R, Karthik
  5 siblings, 1 reply; 11+ messages in thread
From: Denys Dmytriyenko @ 2015-03-17 15:45 UTC (permalink / raw)
  To: Karthik Ramanan; +Cc: meta-arago

Ok, I'm fine with these patches, except one thing:

FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"

What is the specific reason for this? I'm going to drop it when applying 
these patches later today...


On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
> Difference from v1:
>  * Add gst-plugins-ducati for GST 1.x
>  * Add gst-plugins-vpe for GST 1.x
>  * Add FILES_PN explicitly for all GST 1.x recipes
> 
> Karthik Ramanan (4):
>   gstreamer1.0-plugins-base: Add DMA Buf support
>   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>   gstreamer1.0-plugins-bad: Add various features
>   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
> 
>  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>  .../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 +
>  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>  13 files changed, 4137 insertions(+)
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
> 
> -- 
> 1.7.9.5
> 
> _______________________________________________
> meta-arago mailing list
> meta-arago@arago-project.org
> http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-17 15:45 ` Denys Dmytriyenko
@ 2015-03-17 16:07   ` R, Karthik
  2015-03-17 16:22     ` Denys Dmytriyenko
  0 siblings, 1 reply; 11+ messages in thread
From: R, Karthik @ 2015-03-17 16:07 UTC (permalink / raw)
  To: Dmytriyenko, Denys; +Cc: meta-arago

[-- Attachment #1: Type: text/plain, Size: 4269 bytes --]

Denys,

If I recall correctly, that line is required because the required .so's of the various get plugins do not get populated into the targetfs. There are a lot of them that we need, both default and TI added plugins.

I had earlier made the change in the oe-core recipe and sent it to you for requesting upstream submission but I reworked it to have them in the individual recipes.

This is tested on dra7xx and I can confirm that it's needed. Please include it.

Regards
Karthik

________________________________
From: Dmytriyenko, Denys<mailto:denys@ti.com>
Sent: ‎3/‎17/‎2015 9:15 PM
To: R, Karthik<mailto:karthik.ramanan@ti.com>
Cc: meta-arago@arago-project.org<mailto:meta-arago@arago-project.org>
Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms

Ok, I'm fine with these patches, except one thing:

FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"

What is the specific reason for this? I'm going to drop it when applying
these patches later today...


On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
> Difference from v1:
>  * Add gst-plugins-ducati for GST 1.x
>  * Add gst-plugins-vpe for GST 1.x
>  * Add FILES_PN explicitly for all GST 1.x recipes
>
> Karthik Ramanan (4):
>   gstreamer1.0-plugins-base: Add DMA Buf support
>   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>   gstreamer1.0-plugins-bad: Add various features
>   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
>
>  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>  .../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 +
>  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>  13 files changed, 4137 insertions(+)
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>  create mode 100644 meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>  create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
>
> --
> 1.7.9.5
>
> _______________________________________________
> meta-arago mailing list
> meta-arago@arago-project.org
> http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago

[-- Attachment #2: Type: text/html, Size: 6981 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-17 16:07   ` R, Karthik
@ 2015-03-17 16:22     ` Denys Dmytriyenko
  2015-03-17 16:28       ` R, Karthik
  0 siblings, 1 reply; 11+ messages in thread
From: Denys Dmytriyenko @ 2015-03-17 16:22 UTC (permalink / raw)
  To: R, Karthik; +Cc: meta-arago

Karthik,

As I explained the last time around - all the plugins get split out into 
individual subpackages and you can decide which ones you want to pull into the 
rootfs. Alternatively, there is an empty -meta package, that automatically 
RDEPENDS on all the individual plugin subpackages, so if you want to pull in 
all the plugins, all you have to do is pull the -meta package. And that's what 
we already do:

$ cat tisdk-rootfs-image-am335x-*.rootfs.manifest|sort|grep gst-plugins|cut -f1 -d' '
gst-plugins-bad-adpcmdec
gst-plugins-bad-adpcmenc
gst-plugins-bad-aiff
gst-plugins-bad-asfmux
gst-plugins-bad-audiovisualizers
gst-plugins-bad-autoconvert
gst-plugins-bad-bayer
gst-plugins-bad-bz2
gst-plugins-bad-camerabin2
gst-plugins-bad-camerabin
gst-plugins-bad-cdxaparse
gst-plugins-bad-coloreffects
gst-plugins-bad-colorspace
gst-plugins-bad
gst-plugins-bad-curl
gst-plugins-bad-dataurisrc
gst-plugins-bad-dccp
gst-plugins-bad-debugutilsbad
gst-plugins-bad-decklink
gst-plugins-bad-dtmf
gst-plugins-bad-dvb
gst-plugins-bad-dvbsuboverlay
gst-plugins-bad-dvdspu
gst-plugins-bad-faad
gst-plugins-bad-faceoverlay
gst-plugins-bad-fbdevsink
gst-plugins-bad-festival
gst-plugins-bad-fieldanalysis
gst-plugins-bad-fragmented
gst-plugins-bad-freeverb
gst-plugins-bad-freeze
gst-plugins-bad-frei0r
gst-plugins-bad-gaudieffects
gst-plugins-bad-geometrictransform
gst-plugins-bad-gsettingselements
gst-plugins-bad-h264parse
gst-plugins-bad-hdvparse
gst-plugins-bad-id3tag
gst-plugins-bad-inter
gst-plugins-bad-interlace
gst-plugins-bad-ivfparse
gst-plugins-bad-jp2kdecimator
gst-plugins-bad-jpegformat
gst-plugins-bad-legacyresample
gst-plugins-bad-linsys
gst-plugins-bad-liveadder
gst-plugins-bad-meta
gst-plugins-bad-mpegdemux
gst-plugins-bad-mpegpsmux
gst-plugins-bad-mpegtsdemux
gst-plugins-bad-mpegtsmux
gst-plugins-bad-mpegvideoparse
gst-plugins-bad-mve
gst-plugins-bad-mxf
gst-plugins-bad-nsf
gst-plugins-bad-nuvdemux
gst-plugins-bad-patchdetect
gst-plugins-bad-pcapparse
gst-plugins-bad-pnm
gst-plugins-bad-rawparse
gst-plugins-bad-removesilence
gst-plugins-bad-rfbsrc
gst-plugins-bad-rtpmux
gst-plugins-bad-rtpvp8
gst-plugins-bad-scaletempoplugin
gst-plugins-bad-sdi
gst-plugins-bad-sdpelem
gst-plugins-bad-segmentclip
gst-plugins-bad-shm
gst-plugins-bad-siren
gst-plugins-bad-smooth
gst-plugins-bad-speed
gst-plugins-bad-stereo
gst-plugins-bad-subenc
gst-plugins-bad-tta
gst-plugins-bad-vcdsrc
gst-plugins-bad-videofiltersbad
gst-plugins-bad-videomaxrate
gst-plugins-bad-videomeasure
gst-plugins-bad-videoparsersbad
gst-plugins-bad-videosignal
gst-plugins-bad-vmnc
gst-plugins-bad-y4mdec
gst-plugins-base-adder
gst-plugins-base-alsa
gst-plugins-base-app
gst-plugins-base-apps
gst-plugins-base-audioconvert
gst-plugins-base-audiorate
gst-plugins-base-audioresample
gst-plugins-base-audiotestsrc
gst-plugins-base
gst-plugins-base-decodebin2
gst-plugins-base-decodebin
gst-plugins-base-encodebin
gst-plugins-base-ffmpegcolorspace
gst-plugins-base-gdp
gst-plugins-base-gio
gst-plugins-base-ivorbisdec
gst-plugins-base-meta
gst-plugins-base-ogg
gst-plugins-base-playbin
gst-plugins-base-subparse
gst-plugins-base-tcp
gst-plugins-base-theora
gst-plugins-base-typefindfunctions
gst-plugins-base-videorate
gst-plugins-base-videoscale
gst-plugins-base-videotestsrc
gst-plugins-base-volume
gst-plugins-base-vorbis
gst-plugins-good-alaw
gst-plugins-good-alphacolor
gst-plugins-good-alpha
gst-plugins-good-annodex
gst-plugins-good-apetag
gst-plugins-good-audiofx
gst-plugins-good-audioparsers
gst-plugins-good-auparse
gst-plugins-good-autodetect
gst-plugins-good-avi
gst-plugins-good-cairo
gst-plugins-good
gst-plugins-good-cutter
gst-plugins-good-debug
gst-plugins-good-deinterlace
gst-plugins-good-efence
gst-plugins-good-effectv
gst-plugins-good-equalizer
gst-plugins-good-flac
gst-plugins-good-flv
gst-plugins-good-flxdec
gst-plugins-good-goom2k1
gst-plugins-good-goom
gst-plugins-good-icydemux
gst-plugins-good-id3demux
gst-plugins-good-imagefreeze
gst-plugins-good-interleave
gst-plugins-good-isomp4
gst-plugins-good-jpeg
gst-plugins-good-level
gst-plugins-good-matroska
gst-plugins-good-meta
gst-plugins-good-mulaw
gst-plugins-good-multifile
gst-plugins-good-multipart
gst-plugins-good-navigationtest
gst-plugins-good-oss4audio
gst-plugins-good-ossaudio
gst-plugins-good-png
gst-plugins-good-pulse
gst-plugins-good-replaygain
gst-plugins-good-rtp
gst-plugins-good-rtpmanager
gst-plugins-good-rtsp
gst-plugins-good-shapewipe
gst-plugins-good-smpte
gst-plugins-good-souphttpsrc
gst-plugins-good-spectrum
gst-plugins-good-speex
gst-plugins-good-udp
gst-plugins-good-video4linux2
gst-plugins-good-videobox
gst-plugins-good-videocrop
gst-plugins-good-videofilter
gst-plugins-good-videomixer
gst-plugins-good-wavenc
gst-plugins-good-wavparse
gst-plugins-good-y4menc



On Tue, Mar 17, 2015 at 12:07:20PM -0400, R, Karthik wrote:
>    Denys,
> 
>    If I recall correctly, that line is required because the required .so's of
>    the various get plugins do not get populated into the targetfs. There are
>    a lot of them that we need, both default and TI added plugins.
> 
>    I had earlier made the change in the oe-core recipe and sent it to you for
>    requesting upstream submission but I reworked it to have them in the
>    individual recipes.
> 
>    This is tested on dra7xx and I can confirm that it's needed. Please
>    include it.
> 
>    Regards
>    Karthik
> 
>      ----------------------------------------------------------------------
> 
>    From: Dmytriyenko, Denys
>    Sent: (->)3/(->)17/(->)2015 9:15 PM
>    To: R, Karthik
>    Cc: meta-arago@arago-project.org
>    Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for
>    TI Platforms
> 
>    Ok, I'm fine with these patches, except one thing:
> 
>    FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
> 
>    What is the specific reason for this? I'm going to drop it when applying
>    these patches later today...
> 
>    On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
>    > Difference from v1:
>    >  * Add gst-plugins-ducati for GST 1.x
>    >  * Add gst-plugins-vpe for GST 1.x
>    >  * Add FILES_PN explicitly for all GST 1.x recipes
>    >
>    > Karthik Ramanan (4):
>    >   gstreamer1.0-plugins-base: Add DMA Buf support
>    >   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>    >   gstreamer1.0-plugins-bad: Add various features
>    >   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
>    >
>    >  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>    >  .../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 +
>    >  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>    >  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>    >  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>    >  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>    >  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>    >  13 files changed, 4137 insertions(+)
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
>    >
>    > --
>    > 1.7.9.5
>    >
>    > _______________________________________________
>    > meta-arago mailing list
>    > meta-arago@arago-project.org
>    > http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-17 16:22     ` Denys Dmytriyenko
@ 2015-03-17 16:28       ` R, Karthik
  2015-03-18 12:16         ` R, Karthik
  0 siblings, 1 reply; 11+ messages in thread
From: R, Karthik @ 2015-03-17 16:28 UTC (permalink / raw)
  To: Dmytriyenko, Denys; +Cc: meta-arago

[-- Attachment #1: Type: text/plain, Size: 10190 bytes --]

Ok Denys, thanks for this additional pointer. I will take a look at this and let you know if I need some additional inputs.

You can drop the line and merge the patch.

Regards
Karthik

________________________________
From: Dmytriyenko, Denys<mailto:denys@ti.com>
Sent: ‎3/‎17/‎2015 9:52 PM
To: R, Karthik<mailto:karthik.ramanan@ti.com>
Cc: meta-arago@arago-project.org<mailto:meta-arago@arago-project.org>
Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms

Karthik,

As I explained the last time around - all the plugins get split out into
individual subpackages and you can decide which ones you want to pull into the
rootfs. Alternatively, there is an empty -meta package, that automatically
RDEPENDS on all the individual plugin subpackages, so if you want to pull in
all the plugins, all you have to do is pull the -meta package. And that's what
we already do:

$ cat tisdk-rootfs-image-am335x-*.rootfs.manifest|sort|grep gst-plugins|cut -f1 -d' '
gst-plugins-bad-adpcmdec
gst-plugins-bad-adpcmenc
gst-plugins-bad-aiff
gst-plugins-bad-asfmux
gst-plugins-bad-audiovisualizers
gst-plugins-bad-autoconvert
gst-plugins-bad-bayer
gst-plugins-bad-bz2
gst-plugins-bad-camerabin2
gst-plugins-bad-camerabin
gst-plugins-bad-cdxaparse
gst-plugins-bad-coloreffects
gst-plugins-bad-colorspace
gst-plugins-bad
gst-plugins-bad-curl
gst-plugins-bad-dataurisrc
gst-plugins-bad-dccp
gst-plugins-bad-debugutilsbad
gst-plugins-bad-decklink
gst-plugins-bad-dtmf
gst-plugins-bad-dvb
gst-plugins-bad-dvbsuboverlay
gst-plugins-bad-dvdspu
gst-plugins-bad-faad
gst-plugins-bad-faceoverlay
gst-plugins-bad-fbdevsink
gst-plugins-bad-festival
gst-plugins-bad-fieldanalysis
gst-plugins-bad-fragmented
gst-plugins-bad-freeverb
gst-plugins-bad-freeze
gst-plugins-bad-frei0r
gst-plugins-bad-gaudieffects
gst-plugins-bad-geometrictransform
gst-plugins-bad-gsettingselements
gst-plugins-bad-h264parse
gst-plugins-bad-hdvparse
gst-plugins-bad-id3tag
gst-plugins-bad-inter
gst-plugins-bad-interlace
gst-plugins-bad-ivfparse
gst-plugins-bad-jp2kdecimator
gst-plugins-bad-jpegformat
gst-plugins-bad-legacyresample
gst-plugins-bad-linsys
gst-plugins-bad-liveadder
gst-plugins-bad-meta
gst-plugins-bad-mpegdemux
gst-plugins-bad-mpegpsmux
gst-plugins-bad-mpegtsdemux
gst-plugins-bad-mpegtsmux
gst-plugins-bad-mpegvideoparse
gst-plugins-bad-mve
gst-plugins-bad-mxf
gst-plugins-bad-nsf
gst-plugins-bad-nuvdemux
gst-plugins-bad-patchdetect
gst-plugins-bad-pcapparse
gst-plugins-bad-pnm
gst-plugins-bad-rawparse
gst-plugins-bad-removesilence
gst-plugins-bad-rfbsrc
gst-plugins-bad-rtpmux
gst-plugins-bad-rtpvp8
gst-plugins-bad-scaletempoplugin
gst-plugins-bad-sdi
gst-plugins-bad-sdpelem
gst-plugins-bad-segmentclip
gst-plugins-bad-shm
gst-plugins-bad-siren
gst-plugins-bad-smooth
gst-plugins-bad-speed
gst-plugins-bad-stereo
gst-plugins-bad-subenc
gst-plugins-bad-tta
gst-plugins-bad-vcdsrc
gst-plugins-bad-videofiltersbad
gst-plugins-bad-videomaxrate
gst-plugins-bad-videomeasure
gst-plugins-bad-videoparsersbad
gst-plugins-bad-videosignal
gst-plugins-bad-vmnc
gst-plugins-bad-y4mdec
gst-plugins-base-adder
gst-plugins-base-alsa
gst-plugins-base-app
gst-plugins-base-apps
gst-plugins-base-audioconvert
gst-plugins-base-audiorate
gst-plugins-base-audioresample
gst-plugins-base-audiotestsrc
gst-plugins-base
gst-plugins-base-decodebin2
gst-plugins-base-decodebin
gst-plugins-base-encodebin
gst-plugins-base-ffmpegcolorspace
gst-plugins-base-gdp
gst-plugins-base-gio
gst-plugins-base-ivorbisdec
gst-plugins-base-meta
gst-plugins-base-ogg
gst-plugins-base-playbin
gst-plugins-base-subparse
gst-plugins-base-tcp
gst-plugins-base-theora
gst-plugins-base-typefindfunctions
gst-plugins-base-videorate
gst-plugins-base-videoscale
gst-plugins-base-videotestsrc
gst-plugins-base-volume
gst-plugins-base-vorbis
gst-plugins-good-alaw
gst-plugins-good-alphacolor
gst-plugins-good-alpha
gst-plugins-good-annodex
gst-plugins-good-apetag
gst-plugins-good-audiofx
gst-plugins-good-audioparsers
gst-plugins-good-auparse
gst-plugins-good-autodetect
gst-plugins-good-avi
gst-plugins-good-cairo
gst-plugins-good
gst-plugins-good-cutter
gst-plugins-good-debug
gst-plugins-good-deinterlace
gst-plugins-good-efence
gst-plugins-good-effectv
gst-plugins-good-equalizer
gst-plugins-good-flac
gst-plugins-good-flv
gst-plugins-good-flxdec
gst-plugins-good-goom2k1
gst-plugins-good-goom
gst-plugins-good-icydemux
gst-plugins-good-id3demux
gst-plugins-good-imagefreeze
gst-plugins-good-interleave
gst-plugins-good-isomp4
gst-plugins-good-jpeg
gst-plugins-good-level
gst-plugins-good-matroska
gst-plugins-good-meta
gst-plugins-good-mulaw
gst-plugins-good-multifile
gst-plugins-good-multipart
gst-plugins-good-navigationtest
gst-plugins-good-oss4audio
gst-plugins-good-ossaudio
gst-plugins-good-png
gst-plugins-good-pulse
gst-plugins-good-replaygain
gst-plugins-good-rtp
gst-plugins-good-rtpmanager
gst-plugins-good-rtsp
gst-plugins-good-shapewipe
gst-plugins-good-smpte
gst-plugins-good-souphttpsrc
gst-plugins-good-spectrum
gst-plugins-good-speex
gst-plugins-good-udp
gst-plugins-good-video4linux2
gst-plugins-good-videobox
gst-plugins-good-videocrop
gst-plugins-good-videofilter
gst-plugins-good-videomixer
gst-plugins-good-wavenc
gst-plugins-good-wavparse
gst-plugins-good-y4menc



On Tue, Mar 17, 2015 at 12:07:20PM -0400, R, Karthik wrote:
>    Denys,
>
>    If I recall correctly, that line is required because the required .so's of
>    the various get plugins do not get populated into the targetfs. There are
>    a lot of them that we need, both default and TI added plugins.
>
>    I had earlier made the change in the oe-core recipe and sent it to you for
>    requesting upstream submission but I reworked it to have them in the
>    individual recipes.
>
>    This is tested on dra7xx and I can confirm that it's needed. Please
>    include it.
>
>    Regards
>    Karthik
>
>      ----------------------------------------------------------------------
>
>    From: Dmytriyenko, Denys
>    Sent: (->)3/(->)17/(->)2015 9:15 PM
>    To: R, Karthik
>    Cc: meta-arago@arago-project.org
>    Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for
>    TI Platforms
>
>    Ok, I'm fine with these patches, except one thing:
>
>    FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
>
>    What is the specific reason for this? I'm going to drop it when applying
>    these patches later today...
>
>    On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
>    > Difference from v1:
>    >  * Add gst-plugins-ducati for GST 1.x
>    >  * Add gst-plugins-vpe for GST 1.x
>    >  * Add FILES_PN explicitly for all GST 1.x recipes
>    >
>    > Karthik Ramanan (4):
>    >   gstreamer1.0-plugins-base: Add DMA Buf support
>    >   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>    >   gstreamer1.0-plugins-bad: Add various features
>    >   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
>    >
>    >  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>    >  .../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 +
>    >  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>    >  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>    >  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>    >  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>    >  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>    >  13 files changed, 4137 insertions(+)
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
>    >
>    > --
>    > 1.7.9.5
>    >
>    > _______________________________________________
>    > meta-arago mailing list
>    > meta-arago@arago-project.org
>    > http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago

[-- Attachment #2: Type: text/html, Size: 15344 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
  2015-03-17 16:28       ` R, Karthik
@ 2015-03-18 12:16         ` R, Karthik
  0 siblings, 0 replies; 11+ messages in thread
From: R, Karthik @ 2015-03-18 12:16 UTC (permalink / raw)
  To: Dmytriyenko, Denys; +Cc: meta-arago

[-- Attachment #1: Type: text/plain, Size: 10705 bytes --]

Hi Denys,

I was able to verify that the files get populated if you include the –meta package.
Thanks for the inputs.

Regards
Karthik

From: meta-arago-bounces@arago-project.org [mailto:meta-arago-bounces@arago-project.org] On Behalf Of R, Karthik
Sent: Tuesday, March 17, 2015 9:58 PM
To: Dmytriyenko, Denys
Cc: meta-arago@arago-project.org
Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms

Ok Denys, thanks for this additional pointer. I will take a look at this and let you know if I need some additional inputs.

You can drop the line and merge the patch.

Regards
Karthik
________________________________
From: Dmytriyenko, Denys<mailto:denys@ti.com>
Sent: ‎3/‎17/‎2015 9:52 PM
To: R, Karthik<mailto:karthik.ramanan@ti.com>
Cc: meta-arago@arago-project.org<mailto:meta-arago@arago-project.org>
Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms
Karthik,

As I explained the last time around - all the plugins get split out into
individual subpackages and you can decide which ones you want to pull into the
rootfs. Alternatively, there is an empty -meta package, that automatically
RDEPENDS on all the individual plugin subpackages, so if you want to pull in
all the plugins, all you have to do is pull the -meta package. And that's what
we already do:

$ cat tisdk-rootfs-image-am335x-*.rootfs.manifest|sort|grep gst-plugins|cut -f1 -d' '
gst-plugins-bad-adpcmdec
gst-plugins-bad-adpcmenc
gst-plugins-bad-aiff
gst-plugins-bad-asfmux
gst-plugins-bad-audiovisualizers
gst-plugins-bad-autoconvert
gst-plugins-bad-bayer
gst-plugins-bad-bz2
gst-plugins-bad-camerabin2
gst-plugins-bad-camerabin
gst-plugins-bad-cdxaparse
gst-plugins-bad-coloreffects
gst-plugins-bad-colorspace
gst-plugins-bad
gst-plugins-bad-curl
gst-plugins-bad-dataurisrc
gst-plugins-bad-dccp
gst-plugins-bad-debugutilsbad
gst-plugins-bad-decklink
gst-plugins-bad-dtmf
gst-plugins-bad-dvb
gst-plugins-bad-dvbsuboverlay
gst-plugins-bad-dvdspu
gst-plugins-bad-faad
gst-plugins-bad-faceoverlay
gst-plugins-bad-fbdevsink
gst-plugins-bad-festival
gst-plugins-bad-fieldanalysis
gst-plugins-bad-fragmented
gst-plugins-bad-freeverb
gst-plugins-bad-freeze
gst-plugins-bad-frei0r
gst-plugins-bad-gaudieffects
gst-plugins-bad-geometrictransform
gst-plugins-bad-gsettingselements
gst-plugins-bad-h264parse
gst-plugins-bad-hdvparse
gst-plugins-bad-id3tag
gst-plugins-bad-inter
gst-plugins-bad-interlace
gst-plugins-bad-ivfparse
gst-plugins-bad-jp2kdecimator
gst-plugins-bad-jpegformat
gst-plugins-bad-legacyresample
gst-plugins-bad-linsys
gst-plugins-bad-liveadder
gst-plugins-bad-meta
gst-plugins-bad-mpegdemux
gst-plugins-bad-mpegpsmux
gst-plugins-bad-mpegtsdemux
gst-plugins-bad-mpegtsmux
gst-plugins-bad-mpegvideoparse
gst-plugins-bad-mve
gst-plugins-bad-mxf
gst-plugins-bad-nsf
gst-plugins-bad-nuvdemux
gst-plugins-bad-patchdetect
gst-plugins-bad-pcapparse
gst-plugins-bad-pnm
gst-plugins-bad-rawparse
gst-plugins-bad-removesilence
gst-plugins-bad-rfbsrc
gst-plugins-bad-rtpmux
gst-plugins-bad-rtpvp8
gst-plugins-bad-scaletempoplugin
gst-plugins-bad-sdi
gst-plugins-bad-sdpelem
gst-plugins-bad-segmentclip
gst-plugins-bad-shm
gst-plugins-bad-siren
gst-plugins-bad-smooth
gst-plugins-bad-speed
gst-plugins-bad-stereo
gst-plugins-bad-subenc
gst-plugins-bad-tta
gst-plugins-bad-vcdsrc
gst-plugins-bad-videofiltersbad
gst-plugins-bad-videomaxrate
gst-plugins-bad-videomeasure
gst-plugins-bad-videoparsersbad
gst-plugins-bad-videosignal
gst-plugins-bad-vmnc
gst-plugins-bad-y4mdec
gst-plugins-base-adder
gst-plugins-base-alsa
gst-plugins-base-app
gst-plugins-base-apps
gst-plugins-base-audioconvert
gst-plugins-base-audiorate
gst-plugins-base-audioresample
gst-plugins-base-audiotestsrc
gst-plugins-base
gst-plugins-base-decodebin2
gst-plugins-base-decodebin
gst-plugins-base-encodebin
gst-plugins-base-ffmpegcolorspace
gst-plugins-base-gdp
gst-plugins-base-gio
gst-plugins-base-ivorbisdec
gst-plugins-base-meta
gst-plugins-base-ogg
gst-plugins-base-playbin
gst-plugins-base-subparse
gst-plugins-base-tcp
gst-plugins-base-theora
gst-plugins-base-typefindfunctions
gst-plugins-base-videorate
gst-plugins-base-videoscale
gst-plugins-base-videotestsrc
gst-plugins-base-volume
gst-plugins-base-vorbis
gst-plugins-good-alaw
gst-plugins-good-alphacolor
gst-plugins-good-alpha
gst-plugins-good-annodex
gst-plugins-good-apetag
gst-plugins-good-audiofx
gst-plugins-good-audioparsers
gst-plugins-good-auparse
gst-plugins-good-autodetect
gst-plugins-good-avi
gst-plugins-good-cairo
gst-plugins-good
gst-plugins-good-cutter
gst-plugins-good-debug
gst-plugins-good-deinterlace
gst-plugins-good-efence
gst-plugins-good-effectv
gst-plugins-good-equalizer
gst-plugins-good-flac
gst-plugins-good-flv
gst-plugins-good-flxdec
gst-plugins-good-goom2k1
gst-plugins-good-goom
gst-plugins-good-icydemux
gst-plugins-good-id3demux
gst-plugins-good-imagefreeze
gst-plugins-good-interleave
gst-plugins-good-isomp4
gst-plugins-good-jpeg
gst-plugins-good-level
gst-plugins-good-matroska
gst-plugins-good-meta
gst-plugins-good-mulaw
gst-plugins-good-multifile
gst-plugins-good-multipart
gst-plugins-good-navigationtest
gst-plugins-good-oss4audio
gst-plugins-good-ossaudio
gst-plugins-good-png
gst-plugins-good-pulse
gst-plugins-good-replaygain
gst-plugins-good-rtp
gst-plugins-good-rtpmanager
gst-plugins-good-rtsp
gst-plugins-good-shapewipe
gst-plugins-good-smpte
gst-plugins-good-souphttpsrc
gst-plugins-good-spectrum
gst-plugins-good-speex
gst-plugins-good-udp
gst-plugins-good-video4linux2
gst-plugins-good-videobox
gst-plugins-good-videocrop
gst-plugins-good-videofilter
gst-plugins-good-videomixer
gst-plugins-good-wavenc
gst-plugins-good-wavparse
gst-plugins-good-y4menc



On Tue, Mar 17, 2015 at 12:07:20PM -0400, R, Karthik wrote:
>    Denys,
>
>    If I recall correctly, that line is required because the required .so's of
>    the various get plugins do not get populated into the targetfs. There are
>    a lot of them that we need, both default and TI added plugins.
>
>    I had earlier made the change in the oe-core recipe and sent it to you for
>    requesting upstream submission but I reworked it to have them in the
>    individual recipes.
>
>    This is tested on dra7xx and I can confirm that it's needed. Please
>    include it.
>
>    Regards
>    Karthik
>
>      ----------------------------------------------------------------------
>
>    From: Dmytriyenko, Denys
>    Sent: (->)3/(->)17/(->)2015 9:15 PM
>    To: R, Karthik
>    Cc: meta-arago@arago-project.org<mailto:meta-arago@arago-project.org>
>    Subject: Re: [meta-arago] [meta-arago 0/4] GStreamer 1.0 adapatations for
>    TI Platforms
>
>    Ok, I'm fine with these patches, except one thing:
>
>    FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
>
>    What is the specific reason for this? I'm going to drop it when applying
>    these patches later today...
>
>    On Tue, Mar 03, 2015 at 09:29:21PM +0530, Karthik Ramanan wrote:
>    > Difference from v1:
>    >  * Add gst-plugins-ducati for GST 1.x
>    >  * Add gst-plugins-vpe for GST 1.x
>    >  * Add FILES_PN explicitly for all GST 1.x recipes
>    >
>    > Karthik Ramanan (4):
>    >   gstreamer1.0-plugins-base: Add DMA Buf support
>    >   gstreamer1.0-plugins-good: Add DMABuf support v4l2src
>    >   gstreamer1.0-plugins-bad: Add various features
>    >   gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins
>    >
>    >  .../gstreamer1.0-plugins-ducati_git.bb             |   10 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-ti.inc     |   19 +
>    >  .../gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb |   11 +
>    >  .../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 +
>    >  .../gstreamer1.0-plugins-bad_1.2.3.bbappend        |   14 +
>    >  .../0001-Added-GstMetaDmaBuf-features.patch        |  441 ++++++
>    >  .../gstreamer1.0-plugins-base_1.2.3.bbappend       |    8 +
>    >  ...ST_V4L2_IO_DMABUF-mode-support-in-capture.patch |  298 ++++
>    >  .../gstreamer1.0-plugins-good_1.2.3.bbappend       |    8 +
>    >  13 files changed, 4137 insertions(+)
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ducati_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-ti.inc
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gst-plugins-ti/gstreamer1.0-plugins-vpe_git.bb
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Added-GstDRMBufferPool-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-Modified-waylandsink-to-accept-NV12-format.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-Added-KMSsink-support.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-waylandsink-Removed-dependency-on-dri2.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-vc1parse-and-jpegparse-Fixes-plugin-ranks.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Added-GstMetaDmaBuf-features.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-Adds-GST_V4L2_IO_DMABUF-mode-support-in-capture.patch
>    >  create mode 100644
>    meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend
>    >
>    > --
>    > 1.7.9.5
>    >
>    > _______________________________________________
>    > meta-arago mailing list
>    > meta-arago@arago-project.org<mailto:meta-arago@arago-project.org>
>    > http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago

[-- Attachment #2: Type: text/html, Size: 19828 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-03-18 12:16 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-03 15:59 [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Karthik Ramanan
2015-03-03 15:59 ` [meta-arago 1/4] gstreamer1.0-plugins-base: Add DMA Buf support Karthik Ramanan
2015-03-03 15:59 ` [meta-arago 2/4] gstreamer1.0-plugins-good: Add DMABuf support v4l2src Karthik Ramanan
2015-03-03 15:59 ` [meta-arago 3/4] gstreamer1.0-plugins-bad: Add various features Karthik Ramanan
2015-03-03 15:59 ` [meta-arago 4/4] gstreamer1.0-plugins-ti: Add ducati and vpe GST plugins Karthik Ramanan
2015-03-10 16:53 ` [meta-arago 0/4] GStreamer 1.0 adapatations for TI Platforms Denys Dmytriyenko
2015-03-17 15:45 ` Denys Dmytriyenko
2015-03-17 16:07   ` R, Karthik
2015-03-17 16:22     ` Denys Dmytriyenko
2015-03-17 16:28       ` R, Karthik
2015-03-18 12:16         ` R, Karthik

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.