tag 702372 +patch
thanks

On Tue, Mar 05, 2013 at 08:38:22PM +0100, Guido Günther wrote:
> Package: gstreamer0.10-crystalhd
> Version: 1:0.0~git20110715.fdd2f19-9
> Severity: wishlist
> Tags: patch
> 
> Hi,
> I'd be great to have a version built against gstreamer 1.0 in
> experimental since GNOME/totem uses gstreamer 1.0 there already. I've
> added patches here:
> 
>       https://github.com/agx/crystalhd
> 
> Tested with totem and gst-launch it reduces CPU usage from 60% to <25% 
> when playing h264 video. It's a straight forward port of the gst0.10
> version you were previously tracking.
Attached patch updates the package.
 -- Guido
>From e52a6d036eba5af041cd148683a21fd2b0ac0428 Mon Sep 17 00:00:00 2001
Message-Id: <e52a6d036eba5af041cd148683a21fd2b0ac0428.1362599302.git....@sigxcpu.org>
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <[email protected]>
Date: Wed, 6 Mar 2013 18:28:20 +0100
Subject: [PATCH] Port to gstreamer 1.0 API

---
 debian/control                                     |    6 +-
 debian/gstreamer0.10-crystalhd.install             |    1 -
 debian/gstreamer1.0-crystalhd.install              |    1 +
 debian/patches/gst-Port-to-GStreamer-1.0-API.patch | 1177 ++++++++++++++++++++
 debian/patches/series                              |    1 +
 5 files changed, 1182 insertions(+), 4 deletions(-)
 delete mode 100644 debian/gstreamer0.10-crystalhd.install
 create mode 100644 debian/gstreamer1.0-crystalhd.install
 create mode 100644 debian/patches/gst-Port-to-GStreamer-1.0-API.patch

diff --git a/debian/control b/debian/control
index f5f5ea5..063ea86 100644
--- a/debian/control
+++ b/debian/control
@@ -2,8 +2,8 @@ Source: crystalhd
 Priority: optional
 Maintainer: Andres Mejia <[email protected]>
 Build-Depends: debhelper (>= 8.1.3~),
-               libgstreamer0.10-dev,
-               libgstreamer-plugins-base0.10-dev
+               libgstreamer1.0-dev,
+               libgstreamer-plugins-base1.0-dev
 Standards-Version: 3.9.3
 Section: libs
 Homepage: http://www.broadcom.com/support/crystal_hd/
@@ -36,7 +36,7 @@ Description: Crystal HD Video Decoder (shared library)
  .
  This package contains the shared library.
 
-Package: gstreamer0.10-crystalhd
+Package: gstreamer1.0-crystalhd
 Section: video
 Architecture: amd64 i386
 Depends: ${shlibs:Depends}, ${misc:Depends}
diff --git a/debian/gstreamer0.10-crystalhd.install b/debian/gstreamer0.10-crystalhd.install
deleted file mode 100644
index 76fe410..0000000
--- a/debian/gstreamer0.10-crystalhd.install
+++ /dev/null
@@ -1 +0,0 @@
-usr/lib/gstreamer-0.10/*.so
diff --git a/debian/gstreamer1.0-crystalhd.install b/debian/gstreamer1.0-crystalhd.install
new file mode 100644
index 0000000..542b13c
--- /dev/null
+++ b/debian/gstreamer1.0-crystalhd.install
@@ -0,0 +1 @@
+usr/lib/gstreamer-1.0/*.so
diff --git a/debian/patches/gst-Port-to-GStreamer-1.0-API.patch b/debian/patches/gst-Port-to-GStreamer-1.0-API.patch
new file mode 100644
index 0000000..51eabf1
--- /dev/null
+++ b/debian/patches/gst-Port-to-GStreamer-1.0-API.patch
@@ -0,0 +1,1177 @@
+From e147888475e1524b45c789a623a263064a2eec2f Mon Sep 17 00:00:00 2001
+Message-Id: <e147888475e1524b45c789a623a263064a2eec2f.1362590776.git....@sigxcpu.org>
+From: =?UTF-8?q?Guido=20G=C3=BCnther?= <[email protected]>
+Date: Sat, 23 Feb 2013 11:07:58 +0100
+Subject: [PATCH] gst: Port to GStreamer 1.0 API
+
+---
+ filters/gst/gst-plugin/configure.ac    |    8 +-
+ filters/gst/gst-plugin/src/gstbcmdec.c |  431 ++++++++++++++++----------------
+ filters/gst/gst-plugin/src/gstbcmdec.h |   68 ++---
+ 3 files changed, 248 insertions(+), 259 deletions(-)
+
+diff --git a/filters/gst/gst-plugin/configure.ac b/filters/gst/gst-plugin/configure.ac
+index 99b3713..a3c6467 100644
+--- a/filters/gst/gst-plugin/configure.ac
++++ b/filters/gst/gst-plugin/configure.ac
+@@ -1,9 +1,9 @@
+ AC_INIT
+ 
+ dnl versions of gstreamer and plugins-base
+-GST_MAJORMINOR=0.10
+-GST_REQUIRED=0.10.0
+-GSTPB_REQUIRED=0.10.0
++GST_MAJORMINOR=1.0
++GST_REQUIRED=1.0
++GSTPB_REQUIRED=1.0
+ 
+ dnl fill in your package name and version here
+ dnl the fourth (nano) number should be 0 for a release, 1 for CVS,
+@@ -56,7 +56,7 @@ dnl And we can also ask for the right version of gstreamer
+ 
+ PKG_CHECK_MODULES(GST, \
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10,
++  gstreamer-video-1.0,
+   HAVE_GST=yes,HAVE_GST=no)
+ 
+ dnl Give error and exit if we don't have gstreamer
+diff --git a/filters/gst/gst-plugin/src/gstbcmdec.c b/filters/gst/gst-plugin/src/gstbcmdec.c
+index ed01c14..a51bd59 100644
+--- a/filters/gst/gst-plugin/src/gstbcmdec.c
++++ b/filters/gst/gst-plugin/src/gstbcmdec.c
+@@ -8,6 +8,7 @@
+  *  AU
+  *
+  *  HISTORY:
++ *     Updated for 1.0 by Guido Guenther <[email protected]>
+  *
+  *******************************************************************
+  *
+@@ -40,6 +41,7 @@
+ #include <glib.h>
+ #include <gst/base/gstadapter.h>
+ #include <gst/video/video.h>
++#include <gst/video/gstvideopool.h>
+ 
+ #ifdef HAVE_CONFIG_H
+ #include <config.h>
+@@ -51,8 +53,8 @@
+ #include "parse.h"
+ #include "gstbcmdec.h"
+ 
+-GST_DEBUG_CATEGORY_STATIC (gst_bcmdec_debug);
+-#define GST_CAT_DEFAULT gst_bcmdec_debug
++GST_DEBUG_CATEGORY_STATIC (gst_bcm_dec_debug);
++#define GST_CAT_DEFAULT gst_bcm_dec_debug
+ 
+ //#define YV12__
+ 
+@@ -64,16 +66,18 @@ static GstFlowReturn bcmdec_send_buff_detect_error(GstBcmDec *bcmdec, GstBuffer
+ 						   guint8 flags)
+ {
+ 	BC_STATUS sts = BC_STS_SUCCESS;
++	GstMapInfo info;
+ 
+ 	GST_DEBUG_OBJECT(bcmdec, "Attempting to Send Buffer");
+ 
+ 	sts = decif_send_buffer(&bcmdec->decif, pbuffer, size, tCurrent, flags);
+ 
+ 	if (sts != BC_STS_SUCCESS) {
++	        gst_buffer_map(buf, &info, GST_MAP_READ);
+ 		GST_ERROR_OBJECT(bcmdec, "proc input failed sts = %d", sts);
+ 		GST_ERROR_OBJECT(bcmdec, "Chain: timeStamp = %llu size = %d data = %p",
+-				 GST_BUFFER_TIMESTAMP(buf), GST_BUFFER_SIZE(buf),
+-				 GST_BUFFER_DATA (buf));
++				 GST_BUFFER_DTS(buf), info.size, info.data);
++		gst_buffer_unmap(buf, &info);
+ 		return GST_FLOW_ERROR;
+ 	}
+ 
+@@ -92,7 +96,7 @@ enum {
+ };
+ 
+ 
+-GLB_INST_STS *g_inst_sts = NULL;
++static GLB_INST_STS *g_inst_sts = NULL;
+ 
+ /*
+  * the capabilities of the inputs and outputs.
+@@ -111,35 +115,29 @@ GstStaticPadTemplate sink_factory_bcm70012 = GST_STATIC_PAD_TEMPLATE("sink", GST
+ 
+ #ifdef YV12__
+ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+-		GST_STATIC_CAPS("video/x-raw-yuv, " "format = (fourcc) { YV12 }, " "width = (int) [ 1, MAX ], "
++		GST_STATIC_CAPS("video/x-raw, " "format = (string) { YV12 }, " "width = (int) [ 1, MAX ], "
+ 				"height = (int) [ 1, MAX ], " "framerate = (fraction) [ 0/1, 2147483647/1 ]"));
+ #define BUF_MULT (12 / 8)
+ #define BUF_MODE MODE420
+ #else
+ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+-		GST_STATIC_CAPS("video/x-raw-yuv, " "format = (fourcc) { YUY2 } , " "framerate = (fraction) [0,MAX], "
+-				"width = (int) [1,MAX], " "height = (int) [1,MAX]; " "video/x-raw-yuv, "
+-				"format = (fourcc) { UYVY } , " "framerate = (fraction) [0,MAX], " "width = (int) [1,MAX], "
++		GST_STATIC_CAPS("video/x-raw, " "format = (string) { YUY2 } , " "framerate = (fraction) [0,MAX], "
++				"width = (int) [1,MAX], " "height = (int) [1,MAX]; " "video/x-raw, "
++				"format = (string) { UYVY } , " "framerate = (fraction) [0,MAX], " "width = (int) [1,MAX], "
+ 				"height = (int) [1,MAX]; "));
+ #define BUF_MULT (16 / 8)
+ #define BUF_MODE MODE422_YUY2
+ #endif
+ 
+-GST_BOILERPLATE(GstBcmDec, gst_bcmdec, GstElement, GST_TYPE_ELEMENT);
++G_DEFINE_TYPE(GstBcmDec, gst_bcm_dec, GST_TYPE_ELEMENT);
+ 
+ /* GObject vmethod implementations */
+ 
+-static void gst_bcmdec_base_init(gpointer gclass)
++static void gst_bcm_dec_base_init(gpointer gclass)
+ {
+-	static GstElementDetails element_details;
+ 	BC_HW_CAPS hwCaps;
+ 
+-	GST_DEBUG_OBJECT(gclass, "gst_bcmdec_base_init");
+-
+-	element_details.klass = (gchar *)"Codec/Decoder/Video";
+-	element_details.longname = (gchar *)"Generic Video Decoder";
+-	element_details.description = (gchar *)"Decodes various Video Formats using CrystalHD Decoders";
+-	element_details.author = (gchar *)"Broadcom Corp.";
++	GST_DEBUG_OBJECT(gclass, "gst_bcm_dec_base_init");
+ 
+ 	GstElementClass *element_class = GST_ELEMENT_CLASS(gclass);
+ 
+@@ -153,11 +151,15 @@ static void gst_bcmdec_base_init(gpointer gclass)
+ 	}
+ 	else
+ 		gst_element_class_add_pad_template(element_class, gst_static_pad_template_get (&sink_factory_bcm70012));
+-	gst_element_class_set_details(element_class, &element_details);
++	gst_element_class_set_metadata(element_class,
++				      "Codec/Decoder/Video",
++				      "Generic Video Decoder",
++				      "Decodes various Video Formats using CrystalHD Decoders",
++				      "Broadcom Corp.");
+ }
+ 
+ /* initialize the bcmdec's class */
+-static void gst_bcmdec_class_init(GstBcmDecClass *klass)
++static void gst_bcm_dec_class_init(GstBcmDecClass *klass)
+ {
+ 	GObjectClass *gobject_class;
+ 	GstElementClass *gstelement_class;
+@@ -165,13 +167,15 @@ static void gst_bcmdec_class_init(GstBcmDecClass *klass)
+ 	gobject_class = (GObjectClass *)klass;
+ 	gstelement_class = (GstElementClass *)klass;
+ 
+-	GST_DEBUG_OBJECT(klass, "gst_bcmdec_class_init");
++	GST_DEBUG_OBJECT(klass, "gst_bcm_dec_class_init");
++
++	gst_bcm_dec_base_init(klass);
+ 
+-	gstelement_class->change_state = gst_bcmdec_change_state;
++	gstelement_class->change_state = gst_bcm_dec_change_state;
+ 
+-	gobject_class->set_property = gst_bcmdec_set_property;
+-	gobject_class->get_property = gst_bcmdec_get_property;
+-	gobject_class->finalize     = gst_bcmdec_finalize;
++	gobject_class->set_property = gst_bcm_dec_set_property;
++	gobject_class->get_property = gst_bcm_dec_get_property;
++	gobject_class->finalize     = gst_bcm_dec_finalize;
+ 
+ 	g_object_class_install_property(gobject_class, PROP_SILENT,
+ 					g_param_spec_boolean("silent", "Silent",
+@@ -185,14 +189,14 @@ static void gst_bcmdec_class_init(GstBcmDecClass *klass)
+  * set pad calback functions
+  * initialize instance structure
+  */
+-static void gst_bcmdec_init(GstBcmDec *bcmdec, GstBcmDecClass *gclass)
++static void gst_bcm_dec_init(GstBcmDec *bcmdec)
+ {
+ 	pid_t pid;
+ 	BC_STATUS sts = BC_STS_SUCCESS;
+ 	int shmid = 0;
+ 	BC_HW_CAPS hwCaps;
+ 
+-	GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_init");
++	GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_init");
+ 
+ 	bcmdec_reset(bcmdec);
+ 
+@@ -204,17 +208,16 @@ static void gst_bcmdec_init(GstBcmDec *bcmdec, GstBcmDecClass *gclass)
+ 	else
+ 		bcmdec->sinkpad = gst_pad_new_from_static_template(&sink_factory_bcm70012, "sink");
+ 
+-	gst_pad_set_event_function(bcmdec->sinkpad, GST_DEBUG_FUNCPTR(gst_bcmdec_sink_event));
++	gst_pad_set_event_function(bcmdec->sinkpad,
++				   GST_DEBUG_FUNCPTR(gst_bcm_dec_sink_event));
+ 
+-	gst_pad_set_setcaps_function(bcmdec->sinkpad, GST_DEBUG_FUNCPTR(gst_bcmdec_sink_set_caps));
+-	gst_pad_set_getcaps_function(bcmdec->sinkpad, GST_DEBUG_FUNCPTR(gst_bcmdec_getcaps));
+-	gst_pad_set_chain_function(bcmdec->sinkpad, GST_DEBUG_FUNCPTR(gst_bcmdec_chain));
++	gst_pad_set_chain_function(bcmdec->sinkpad,
++				   GST_DEBUG_FUNCPTR(gst_bcm_dec_chain));
+ 
+ 	bcmdec->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
+ 
+-	gst_pad_set_getcaps_function(bcmdec->srcpad, GST_DEBUG_FUNCPTR(gst_bcmdec_getcaps));
+-
+-	gst_pad_set_event_function(bcmdec->srcpad, GST_DEBUG_FUNCPTR(gst_bcmdec_src_event));
++	gst_pad_set_event_function(bcmdec->srcpad,
++				   GST_DEBUG_FUNCPTR(gst_bcm_dec_src_event));
+ 
+ 	gst_pad_use_fixed_caps(bcmdec->srcpad);
+ 	bcmdec_negotiate_format(bcmdec);
+@@ -223,7 +226,7 @@ static void gst_bcmdec_init(GstBcmDec *bcmdec, GstBcmDecClass *gclass)
+ 	gst_element_add_pad(GST_ELEMENT(bcmdec), bcmdec->srcpad);
+ 	bcmdec->silent = FALSE;
+ 	pid = getpid();
+-	GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_init _-- PID = %x",pid);
++	GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_init _-- PID = %x",pid);
+ 
+ 	sts = bcmdec_create_shmem(bcmdec, &shmid);
+ 
+@@ -231,25 +234,25 @@ static void gst_bcmdec_init(GstBcmDec *bcmdec, GstBcmDecClass *gclass)
+ }
+ 
+ /* plugin close function*/
+-static void gst_bcmdec_finalize(GObject *object)
++static void gst_bcm_dec_finalize(GObject *object)
+ {
+-	GstBcmDec *bcmdec = GST_BCMDEC(object);
++	GstBcmDec *bcmdec = GST_BCM_DEC(object);
+ 
+ 	bcmdec_del_shmem(bcmdec);
+-	/*gst_bcmdec_cleanup(bcmdec);*/
+-	GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_finalize");
+-	G_OBJECT_CLASS(parent_class)->finalize(object);
++	/*gst_bcm_dec_cleanup(bcmdec);*/
++	GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_finalize");
++	G_OBJECT_CLASS(gst_bcm_dec_parent_class)->finalize(object);
+ }
+ 
+-static void gst_bcmdec_set_property(GObject *object, guint prop_id,
++static void gst_bcm_dec_set_property(GObject *object, guint prop_id,
+ 				    const GValue *value, GParamSpec *pspec)
+ {
+-	GstBcmDec *bcmdec = GST_BCMDEC(object);
++	GstBcmDec *bcmdec = GST_BCM_DEC(object);
+ 
+ 	switch (prop_id) {
+ 	case PROP_SILENT:
+ 		bcmdec->silent = g_value_get_boolean (value);
+-		GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_set_property PROP_SILENT");
++		GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_set_property PROP_SILENT");
+ 		break;
+ 	default:
+ 		G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+@@ -257,18 +260,18 @@ static void gst_bcmdec_set_property(GObject *object, guint prop_id,
+ 	}
+ 
+ 	if (!bcmdec->silent)
+-		GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_set_property");
++		GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_set_property");
+ }
+ 
+-static void gst_bcmdec_get_property(GObject *object, guint prop_id,
++static void gst_bcm_dec_get_property(GObject *object, guint prop_id,
+ 				    GValue *value, GParamSpec *pspec)
+ {
+-	GstBcmDec *bcmdec = GST_BCMDEC(object);
++	GstBcmDec *bcmdec = GST_BCM_DEC(object);
+ 
+ 	switch (prop_id) {
+ 	case PROP_SILENT:
+ 		g_value_set_boolean (value, bcmdec->silent);
+-		GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_get_property PROP_SILENT");
++		GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_get_property PROP_SILENT");
+ 		break;
+ 	default:
+ 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+@@ -276,27 +279,33 @@ static void gst_bcmdec_get_property(GObject *object, guint prop_id,
+ 	}
+ 
+ 	if (!bcmdec->silent)
+-		GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_get_property");
++		GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_get_property");
+ }
+ 
+ /* GstElement vmethod implementations */
+-static gboolean gst_bcmdec_sink_event(GstPad* pad, GstEvent* event)
++static gboolean gst_bcm_dec_sink_event(GstPad* pad,
++				      GstObject* parent,
++				      GstEvent* event)
+ {
+ 	GstBcmDec *bcmdec;
+ 	BC_STATUS sts = BC_STS_SUCCESS;
+-	bcmdec = GST_BCMDEC(gst_pad_get_parent(pad));
++	bcmdec = GST_BCM_DEC(gst_pad_get_parent(pad));
+ 
+ 	gboolean result = TRUE;
+ 
+ 	switch (GST_EVENT_TYPE(event)) {
+-	case GST_EVENT_NEWSEGMENT:
+-		GstFormat newsegment_format;
+-		gint64 newsegment_start;
++	case GST_EVENT_CAPS:
++                 GstCaps *caps;
++		 gst_event_parse_caps (event, &caps);
++		 result = gst_bcm_dec_sink_set_caps (pad, caps);
++		 break;
++
++	case GST_EVENT_SEGMENT:
++	        const GstSegment *newsegment;
+ 
+-		gst_event_parse_new_segment(event, NULL, NULL, &newsegment_format,
+-					    &newsegment_start, NULL, NULL);
++		gst_event_parse_segment(event, &newsegment);
+ 
+-		bcmdec->base_clock_time = newsegment_start;
++		bcmdec->base_clock_time = newsegment->start;
+ 		bcmdec->cur_stream_time = 0;
+ 
+ 		if (!bcmdec->silent)
+@@ -356,30 +365,24 @@ static gboolean gst_bcmdec_sink_event(GstPad* pad, GstEvent* event)
+ 
+ 	gst_object_unref(bcmdec);
+ 	if (!bcmdec->silent)
+-		GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_sink_event %u", GST_EVENT_TYPE(event));
++		GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_sink_event %u", GST_EVENT_TYPE(event));
+ 	return result;
+ }
+ 
+-static GstCaps *gst_bcmdec_getcaps (GstPad * pad)
+-{
+-	return gst_caps_copy (gst_pad_get_pad_template_caps (pad));
+-}
+-
+ /* this function handles the link with other elements */
+-static gboolean gst_bcmdec_sink_set_caps(GstPad *pad, GstCaps *caps)
++static gboolean gst_bcm_dec_sink_set_caps(GstPad *pad, GstCaps *caps)
+ {
+ 	GstBcmDec *bcmdec;
+-	bcmdec = GST_BCMDEC(gst_pad_get_parent(pad));
++	bcmdec = GST_BCM_DEC(gst_pad_get_parent(pad));
+ 	GstStructure *structure;
++	GstMapInfo info;
+ 	GstCaps *intersection;
+ 	const gchar *mime;
+ 	guint num = 0;
+ 	guint den = 0;
+ 	const GValue *g_value;
+ 	int version = 0;
+-	GstBuffer *buffer;
+-	guint8 *data;
+-	guint size;
++	GstBuffer *buffer = NULL;
+ 	guint index;
+ 
+ 	GST_DEBUG_OBJECT (pad, "setcaps called");
+@@ -484,53 +487,66 @@ static gboolean gst_bcmdec_sink_set_caps(GstPad *pad, GstCaps *caps)
+ 				GST_DEBUG_OBJECT(bcmdec, "InFmt H.264 (AVC1)");
+ 
+ 				buffer = gst_value_get_buffer(g_value);
+-				data = GST_BUFFER_DATA(buffer);
+-				size = GST_BUFFER_SIZE(buffer);
+-
+-				GST_DEBUG_OBJECT(bcmdec, "codec_data size = %d", size);
++				if(!gst_buffer_map(buffer,
++						   &info,
++						   GST_MAP_READ))
++				   goto map_error;
++				GST_DEBUG_OBJECT(bcmdec,
++						 "codec_data size = %d",
++						 info.size);
+ 
+ 				/* parse the avcC data */
+-				if (size < 7) {
+-					GST_ERROR_OBJECT(bcmdec, "avcC size %u < 7", size);
+-					goto avcc_error;
++				if (info.size < 7) {
++					GST_ERROR_OBJECT(bcmdec,
++							 "avcC size %u < 7",
++							 info.size);
++					goto out;
+ 				}
+ 				/* parse the version, this must be 1 */
+-				if (data[0] != 1)
+-					goto wrong_version;
++				if (info.data[0] != 1) {
++				  GST_ERROR_OBJECT(bcmdec, "wrong avcC version");
++				  goto out;
++				}
+ 
+ 				if (bcmdec->codec_params.sps_pps_buf == NULL)
+-					bcmdec->codec_params.sps_pps_buf = (guint8 *)malloc(size * 2);
+-				if (bcmdec_insert_sps_pps(bcmdec, buffer) != BC_STS_SUCCESS) {
++					bcmdec->codec_params.sps_pps_buf = (guint8 *)malloc(info.size * 2);
++				if (bcmdec_insert_sps_pps(bcmdec, &info) != BC_STS_SUCCESS) {
+ 					bcmdec->codec_params.pps_size = 0;
+ 				}
+ 			} else if (!strcmp("video/x-wmv", mime)) {
+-				buffer = gst_value_get_buffer(g_value);
+-				data = GST_BUFFER_DATA(buffer);
+-				size = GST_BUFFER_SIZE(buffer);
+-
+-				GST_DEBUG_OBJECT(bcmdec, "codec_data size = %d", size);
+-				if (size == 4) {
++			        buffer = gst_value_get_buffer(g_value);
++				if(!gst_buffer_map(buffer,
++						   &info,
++						   GST_MAP_READ))
++				  goto map_error;
++
++				GST_DEBUG_OBJECT(bcmdec,
++						 "codec_data size = %d",
++						 info.size);
++				if (info.size == 4) {
+ 					// Simple or Main Profile
+ 					bcmdec->input_format = BC_MSUBTYPE_WMV3;
+ 					GST_DEBUG_OBJECT(bcmdec, "InFmt VC-1 (SP/MP)");
+ 					if (bcmdec->codec_params.sps_pps_buf == NULL)
+ 						bcmdec->codec_params.sps_pps_buf = (guint8 *)malloc(4);
+-					memcpy(bcmdec->codec_params.sps_pps_buf, data, 4);
++					memcpy(bcmdec->codec_params.sps_pps_buf,
++					       info.data, 4);
+ 					bcmdec->codec_params.pps_size = 4;
+ 				} else {
+ 					bcmdec->input_format = BC_MSUBTYPE_VC1;
+ 					GST_DEBUG_OBJECT(bcmdec, "InFmt VC-1 (AP)");
+-					for (index = 0; index < size; index++) {
+-						data += index;
+-						if (((size - index) >= 4) && (*data == 0x00) && (*(data + 1) == 0x00) &&
+-							(*(data + 2) == 0x01) && (*(data + 3) == 0x0f)) {
++					for (index = 0; index < info.size;
++					     index++) {
++						info.data += index;
++						if (((info.size - index) >= 4) && (*info.data == 0x00) && (*(info.data + 1) == 0x00) &&
++							(*(info.data + 2) == 0x01) && (*(info.data + 3) == 0x0f)) {
+ 							GST_DEBUG_OBJECT(bcmdec, "VC1 Sequence Header Found for Adv Profile");
+ 
+-							if ((size - index + 1) > MAX_ADV_PROF_SEQ_HDR_SZ)
++							if ((info.size - index + 1) > MAX_ADV_PROF_SEQ_HDR_SZ)
+ 								bcmdec->codec_params.pps_size = MAX_ADV_PROF_SEQ_HDR_SZ;
+ 							else
+-								bcmdec->codec_params.pps_size = size - index + 1;
+-							memcpy(bcmdec->codec_params.sps_pps_buf, data, bcmdec->codec_params.pps_size);
++								bcmdec->codec_params.pps_size = info.size - index + 1;
++							memcpy(bcmdec->codec_params.sps_pps_buf, info.data, bcmdec->codec_params.pps_size);
+ 							break;
+ 						}
+ 					}
+@@ -546,16 +562,16 @@ static gboolean gst_bcmdec_sink_set_caps(GstPad *pad, GstCaps *caps)
+ 		} else {
+ 			// No Codec data. So try with FourCC for VC1/WMV9
+ 			if (!strcmp("video/x-wmv", mime)) {
+-				guint32 fourcc;
+-				if (gst_structure_get_fourcc (structure, "format", &fourcc)) {
+-					if ((fourcc == GST_MAKE_FOURCC ('W', 'V', 'C', '1')) ||
+-						(fourcc == GST_MAKE_FOURCC ('W', 'M', 'V', 'A'))) {
++				if (gst_structure_has_field (structure, "format")) {
++				  const char* fourcc = gst_structure_get_string(structure, "format");
++
++				  if (!g_strcmp0(fourcc, "WVC1") ||
++				      !g_strcmp0(fourcc, "WMVA")) {
+ 						bcmdec->input_format = BC_MSUBTYPE_VC1;
+ 						GST_DEBUG_OBJECT(bcmdec, "InFmt VC-1 (AP)");
+ 					} else {
+ 						GST_DEBUG_OBJECT(bcmdec, "no codec_data. Don't know how to handle");
+-						gst_object_unref(bcmdec);
+-						return FALSE;
++						goto out;
+ 					}
+ 				}
+ 			}
+@@ -570,8 +586,7 @@ static gboolean gst_bcmdec_sink_set_caps(GstPad *pad, GstCaps *caps)
+ 			}
+ 			else {
+ 				GST_DEBUG_OBJECT(bcmdec, "no codec_data. Don't know how to handle");
+-				gst_object_unref(bcmdec);
+-				return FALSE;
++				goto out;
+ 			}
+ 		}
+ 	}
+@@ -581,54 +596,40 @@ static gboolean gst_bcmdec_sink_set_caps(GstPad *pad, GstCaps *caps)
+ 		bcmdec_process_play(bcmdec);
+ 	}
+ 
++        gst_buffer_unmap(buffer, &info);
+ 	gst_object_unref(bcmdec);
+ 
+ 	return TRUE;
+ 
+ 	/* ERRORS */
+-avcc_error:
+-	{
+-		gst_object_unref(bcmdec);
+-		return FALSE;
+-	}
+-
+-wrong_version:
+-	{
+-		GST_ERROR_OBJECT(bcmdec, "wrong avcC version");
+-		gst_object_unref(bcmdec);
+-		return FALSE;
+-	}
+-}
+-
+-void bcmdec_msleep(gint msec)
+-{
+-	gint cnt = msec;
+-
+-	while (cnt) {
+-		usleep(1000);
+-		cnt--;
+-	}
++out:
++	if (buffer)
++	  gst_buffer_unmap(buffer, &info);
++map_error:
++	gst_object_unref(bcmdec);
++	return FALSE;
+ }
+ 
+ /*
+  * chain function
+  * this function does the actual processing
+  */
+-static GstFlowReturn gst_bcmdec_chain(GstPad *pad, GstBuffer *buf)
++static GstFlowReturn gst_bcm_dec_chain(GstPad *pad,
++				      GstObject *parent,
++				      GstBuffer *buf)
+ {
+ 	GstBcmDec *bcmdec;
+-//	BC_STATUS sts = BC_STS_SUCCESS;
++	GstMapInfo info;
+ 	guint32 offset = 0;
+ 	GstClockTime tCurrent = 0;
+ 	guint8 *pbuffer;
+ 	guint32 size = 0;
+-//	guint32 vc1_buff_sz = 0;
+-
++	GstFlowReturn ret;
+ 
+ #ifdef FILE_DUMP__
+ 	guint32 bytes_written =0;
+ #endif
+-	bcmdec = GST_BCMDEC (GST_OBJECT_PARENT (pad));
++	bcmdec = GST_BCM_DEC (GST_OBJECT_PARENT (pad));
+ 
+ #ifdef FILE_DUMP__
+ 	if (bcmdec->fhnd == NULL)
+@@ -637,8 +638,8 @@ static GstFlowReturn gst_bcmdec_chain(GstPad *pad, GstBuffer *buf)
+ 
+ 	if (bcmdec->flushing) {
+ 		GST_DEBUG_OBJECT(bcmdec, "input while flushing");
+-		gst_buffer_unref(buf);
+-		return GST_FLOW_OK;
++		ret = GST_FLOW_OK;
++		goto out;
+ 	}
+ 
+ 	if (GST_CLOCK_TIME_NONE != GST_BUFFER_TIMESTAMP(buf)) {
+@@ -654,32 +655,44 @@ static GstFlowReturn gst_bcmdec_chain(GstPad *pad, GstBuffer *buf)
+ 		bcmdec_process_play(bcmdec);
+ 	} else if (!bcmdec->streaming) {
+ 		GST_DEBUG_OBJECT(bcmdec, "input while streaming is false");
+-		gst_buffer_unref(buf);
+-		return GST_FLOW_WRONG_STATE;
++		ret = GST_FLOW_FLUSHING;
++		goto out;
+ 	}
+ 
+-	pbuffer = GST_BUFFER_DATA (buf);
+-	size = GST_BUFFER_SIZE(buf);
++	if (!gst_buffer_map(buf, &info, GST_MAP_READ)) {
++	  ret = GST_FLOW_ERROR;
++	  goto out;
++	}
++	pbuffer = info.data;
++	size = info.size;
+ 
++	/* FIXME: better send mapinfo? */
+ 	if (GST_FLOW_OK != bcmdec_send_buff_detect_error(bcmdec, buf, pbuffer, size, offset, tCurrent, bcmdec->proc_in_flags)) {
+-		gst_buffer_unref(buf);
+-		return GST_FLOW_ERROR;
++		ret = GST_FLOW_ERROR;
++		goto unmapout;
+ 	}
+ 
+ #ifdef FILE_DUMP__
+ 	bytes_written = fwrite(GST_BUFFER_DATA(buf), sizeof(unsigned char), GST_BUFFER_SIZE(buf), bcmdec->fhnd);
+ #endif
+ 
++	ret = GST_FLOW_OK;
++
++unmapout:
++	gst_buffer_unmap(buf, &info);
++out:
+ 	gst_buffer_unref(buf);
+-	return GST_FLOW_OK;
++	return ret;
+ }
+ 
+-static gboolean gst_bcmdec_src_event(GstPad *pad, GstEvent *event)
++static gboolean gst_bcm_dec_src_event(GstPad *pad,
++				     GstObject *parent,
++				     GstEvent *event)
+ {
+ 	gboolean result;
+ 	GstBcmDec *bcmdec;
+ 
+-	bcmdec = GST_BCMDEC(GST_OBJECT_PARENT(pad));
++	bcmdec = GST_BCM_DEC(GST_OBJECT_PARENT(pad));
+ 
+ 	result = gst_pad_push_event(bcmdec->sinkpad, event);
+ 
+@@ -695,6 +708,7 @@ static gboolean bcmdec_negotiate_format(GstBcmDec *bcmdec)
+ 	GstStructure *s1;
+ 	const GValue *framerate_value;
+ 	GstVideoFormat vidFmt;
++	GstVideoInfo info;
+ 
+ #ifdef YV12__
+ 	vidFmt = GST_VIDEO_FORMAT_YV12;
+@@ -703,21 +717,21 @@ static gboolean bcmdec_negotiate_format(GstBcmDec *bcmdec)
+ #endif
+ 	GST_DEBUG_OBJECT(bcmdec, "framerate = %f", bcmdec->output_params.framerate);
+ 
+-	if(bcmdec->interlace) {
+-		caps = gst_video_format_new_caps_interlaced(vidFmt, bcmdec->output_params.width,
+-													bcmdec->output_params.height, num, den,
+-													bcmdec->output_params.aspectratio_x,
+-													bcmdec->output_params.aspectratio_y,
+-													TRUE);
+-	} else {
+-		caps = gst_video_format_new_caps(vidFmt, bcmdec->output_params.width,
+-													bcmdec->output_params.height, num, den,
+-													bcmdec->output_params.aspectratio_x,
+-													bcmdec->output_params.aspectratio_y);
+-	}
+-
++	gst_video_info_init (&info);
++	gst_video_info_set_format (&info,
++				   vidFmt,
++				   bcmdec->output_params.width,
++				   bcmdec->output_params.height);
++	info.fps_n = num;
++	info.fps_d = den;
++	info.par_n = bcmdec->output_params.aspectratio_x;
++	info.par_d = bcmdec->output_params.aspectratio_y;
++	info.interlace_mode = bcmdec->interlace ?
++	  GST_VIDEO_INTERLACE_MODE_INTERLEAVED :
++	  GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;
++	  caps = gst_video_info_to_caps (&info);
+ 	result = gst_pad_set_caps(bcmdec->srcpad, caps);
+-	GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_negotiate_format %d", result);
++	GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_negotiate_format %d", result);
+ 
+ 	if (bcmdec->output_params.clr_space == MODE422_YUY2) {
+ 		bcmdec->output_params.y_size = bcmdec->output_params.width * bcmdec->output_params.height * BUF_MULT;
+@@ -842,10 +856,10 @@ static gboolean bcmdec_process_play(GstBcmDec *bcmdec)
+ 	return TRUE;
+ }
+ 
+-static GstStateChangeReturn gst_bcmdec_change_state(GstElement *element, GstStateChange transition)
++static GstStateChangeReturn gst_bcm_dec_change_state(GstElement *element, GstStateChange transition)
+ {
+ 	GstStateChangeReturn result = GST_STATE_CHANGE_SUCCESS;
+-	GstBcmDec *bcmdec = GST_BCMDEC(element);
++	GstBcmDec *bcmdec = GST_BCM_DEC(element);
+ 	BC_STATUS sts = BC_STS_SUCCESS;
+ 	int ret = 0;
+ 
+@@ -960,7 +974,7 @@ static GstStateChangeReturn gst_bcmdec_change_state(GstElement *element, GstStat
+ 		GST_DEBUG_OBJECT(bcmdec, "default %d", transition);
+ 		break;
+ 	}
+-	result = GST_ELEMENT_CLASS(parent_class)->change_state(element, transition);
++	result = GST_ELEMENT_CLASS(gst_bcm_dec_parent_class)->change_state(element, transition);
+ 	if (result == GST_STATE_CHANGE_FAILURE) {
+ 		GST_ERROR_OBJECT(bcmdec, "parent class state change failed");
+ 		return result;
+@@ -968,7 +982,7 @@ static GstStateChangeReturn gst_bcmdec_change_state(GstElement *element, GstStat
+ 
+ 	if(transition == GST_STATE_CHANGE_READY_TO_NULL) {
+ 		GST_DEBUG_OBJECT(bcmdec, "GST_STATE_CHANGE_READY_TO_NULL");
+-		sts = gst_bcmdec_cleanup(bcmdec);
++		sts = gst_bcm_dec_cleanup(bcmdec);
+ 		if (sts == BC_STS_SUCCESS)
+ 			GST_DEBUG_OBJECT(bcmdec, "dev close success");
+ 		else
+@@ -978,38 +992,26 @@ static GstStateChangeReturn gst_bcmdec_change_state(GstElement *element, GstStat
+ 	return result;
+ }
+ 
+-
+-GstClockTime gst_get_current_timex (void)
+-{
+-	GTimeVal tv;
+-
+-	g_get_current_time(&tv);
+-	return GST_TIMEVAL_TO_TIME(tv);
+-}
+-
+-clock_t bcm_get_tick_count()
+-{
+-	tms tm;
+-	return times(&tm);
+-}
+-
+-static gboolean bcmdec_get_buffer(GstBcmDec *bcmdec, GstBuffer **obuf)
++static gboolean bcmdec_get_buffer(GstBcmDec *bcmdec,
++				  gint size,
++				  GstBuffer **obuf)
+ {
+ 	GstFlowReturn ret;
+-	GST_DEBUG_OBJECT(bcmdec, "gst_pad_alloc_buffer_and_set_caps ");
++	GST_DEBUG_OBJECT(bcmdec, "%s", __func__);
+ 
+-	ret = gst_pad_alloc_buffer_and_set_caps(bcmdec->srcpad,
+-						GST_BUFFER_OFFSET_NONE,
+-						bcmdec->output_params.width * bcmdec->output_params.height * BUF_MULT,
+-						GST_PAD_CAPS (bcmdec->srcpad), obuf);
+-	if (ret != GST_FLOW_OK) {
++	*obuf = gst_buffer_new_allocate (NULL,
++					size,
++					NULL);
++
++	if (obuf == NULL) {
+ 		GST_ERROR_OBJECT(bcmdec, "gst_pad_alloc_buffer_and_set_caps failed %d ",ret);
+ 		return FALSE;
+ 	}
+ 
++#if 0
+ 	if (((uintptr_t)GST_BUFFER_DATA(*obuf)) % 4)
+ 		GST_DEBUG_OBJECT(bcmdec, "buf is not aligned");
+-
++#endif
+ 	return TRUE;
+ }
+ 
+@@ -1382,6 +1384,7 @@ static void * bcmdec_process_output(void *ctx)
+ 	GstClockTime cur_stream_time_diff = 0;
+ 	int wait_cnt = 0;
+ 	guint32 nextPicNumFlags = 0;
++	GstMapInfo info;
+ 
+ 	gboolean is_paused = FALSE;
+ 
+@@ -1427,7 +1430,8 @@ static void * bcmdec_process_output(void *ctx)
+ 			guint8* data_ptr;
+ 			if (gstbuf == NULL) {
+ 				if (!bcmdec->rbuf_thread_running) {
+-					if (!bcmdec_get_buffer(bcmdec, &gstbuf)) {
++				        gint size = bcmdec->output_params.width * bcmdec->output_params.height * BUF_MULT;
++					if (!bcmdec_get_buffer(bcmdec, size, &gstbuf)) {
+ 						usleep(30 * 1000);
+ 						continue;
+ 					}
+@@ -1460,9 +1464,16 @@ static void * bcmdec_process_output(void *ctx)
+ 			else
+ 				GST_DEBUG_OBJECT(bcmdec, "re-using rbuf, going to proc output");
+ 
+-			data_ptr = GST_BUFFER_DATA(gstbuf);
+-
++			if(!gst_buffer_map(gstbuf,
++					   &info,
++					   GST_MAP_WRITE)) {
++			  GST_ERROR_OBJECT(bcmdec, "Failed to map buffer");
++			  continue;
++			}
++			data_ptr = info.data;
+ 			bcmdec_init_procout(bcmdec, &pout, data_ptr);
++			gst_buffer_unmap(gstbuf, &info);
++
+ 			rx_flush = TRUE;
+ 			pout.PicInfo.picture_number = 0;
+ 			// For interlaced content, if I am holding a buffer but the next buffer is not from the same picture
+@@ -1473,7 +1484,7 @@ static void * bcmdec_process_output(void *ctx)
+ 					if(pic_number == 0)
+ 						gst_buffer_unref(gstbuf);
+ 					else if (gst_queue_element) {
+-						GST_BUFFER_FLAG_SET(gstbuf, GST_VIDEO_BUFFER_ONEFIELD);
++						GST_BUFFER_FLAG_SET(gstbuf, GST_VIDEO_BUFFER_FLAG_ONEFIELD);
+ 						gst_queue_element->gstbuf = gstbuf;
+ 						bcmdec_ins_buf(bcmdec, gst_queue_element);
+ 						bcmdec->prev_pic = pic_number;
+@@ -1489,7 +1500,7 @@ static void * bcmdec_process_output(void *ctx)
+ 			}
+ 			if (bEOS) {
+ 				if (gstbuf) {
+-					gst_buffer_unref(gstbuf);
++				        gst_buffer_unref(gstbuf);
+ 					gstbuf = NULL;
+ 				}
+ 				if (gst_queue_element) {
+@@ -1561,14 +1572,6 @@ static void * bcmdec_process_output(void *ctx)
+ 						GST_DEBUG_OBJECT(bcmdec, "LOST PICTURE pic_no = %d, prev = %d", pic_number, bcmdec->prev_pic);
+ 				}
+ 
+-/*				if ((bcmdec->prev_pic == pic_number) && (bcmdec->ses_nbr  == pout.PicInfo.sess_num) && !bcmdec->interlace) {
+-					if (!bcmdec->silent)
+-						GST_DEBUG_OBJECT(bcmdec, "rp");
+-
+-					if (!(pout.PicInfo.flags &  VDEC_FLAG_LAST_PICTURE))
+-						continue;
+-				}*/
+-
+ 				if (!bcmdec->interlace || bcmdec->sec_field) {
+ 					GST_DEBUG_OBJECT(bcmdec, "Progressive or Second Field");
+ 					GST_BUFFER_OFFSET(gstbuf) = 0;
+@@ -1597,13 +1600,11 @@ static void * bcmdec_process_output(void *ctx)
+ 					}
+ 				}
+ 
+-				GST_BUFFER_SIZE(gstbuf) = bcmdec->output_params.width * bcmdec->output_params.height * BUF_MULT;
+-
+ 				if (!bcmdec->interlace || bcmdec->sec_field) {
+ 					if (gst_queue_element) {
+ 						// If interlaced, set the GST_VIDEO_BUFFER_TFF flags
+ 						if(bcmdec->sec_field)
+-							GST_BUFFER_FLAG_SET(gstbuf, GST_VIDEO_BUFFER_TFF);
++							GST_BUFFER_FLAG_SET(gstbuf, GST_VIDEO_BUFFER_FLAG_TFF);
+ 						gst_queue_element->gstbuf = gstbuf;
+ 						bcmdec_ins_buf(bcmdec, gst_queue_element);
+ 						bcmdec->prev_pic = pic_number;
+@@ -1674,7 +1675,7 @@ static void * bcmdec_process_output(void *ctx)
+ 		}
+ 		if (rx_flush) {
+ 			if (!bcmdec->flushing) {
+-// 				GST_DEBUG_OBJECT(bcmdec, "DtsFlushRxCapture called");
++ 				GST_DEBUG_OBJECT(bcmdec, "DtsFlushRxCapture called");
+ // 				sts = decif_flush_rxbuf(&bcmdec->decif, FALSE);
+ // 				if (sts != BC_STS_SUCCESS)
+ // 					GST_DEBUG_OBJECT(bcmdec, "DtsFlushRxCapture failed");
+@@ -1880,11 +1881,11 @@ static void bcmdec_process_flush_start(GstBcmDec *bcmdec)
+ 		GST_ERROR_OBJECT(bcmdec, "flush_dec failed sts %d", sts);
+ }
+ 
+-static BC_STATUS gst_bcmdec_cleanup(GstBcmDec *bcmdec)
++static BC_STATUS gst_bcm_dec_cleanup(GstBcmDec *bcmdec)
+ {
+ 	BC_STATUS sts = BC_STS_SUCCESS;
+ 
+-	GST_DEBUG_OBJECT(bcmdec, "gst_bcmdec_cleanup - enter");
++	GST_DEBUG_OBJECT(bcmdec, "gst_bcm_dec_cleanup - enter");
+ 	bcmdec->streaming = FALSE;
+ 
+ 	bcmdec_release_mem_buf_que_pool(bcmdec);
+@@ -2117,11 +2118,11 @@ static GSTBUF_LIST * bcmdec_rem_buf(GstBcmDec *bcmdec)
+ 	return temp;
+ }
+ 
+-static BC_STATUS bcmdec_insert_sps_pps(GstBcmDec *bcmdec, GstBuffer* gstbuf)
++static BC_STATUS bcmdec_insert_sps_pps(GstBcmDec *bcmdec, GstMapInfo* info)
+ {
+ 	BC_STATUS sts = BC_STS_SUCCESS;
+-	guint8 *data = GST_BUFFER_DATA(gstbuf);
+-	guint32 data_size = GST_BUFFER_SIZE(gstbuf);
++	guint8 *data = info->data;
++	guint32 data_size = info->size;
+ 	gint profile;
+ 	guint nal_size;
+ 	guint num_sps, num_pps, i;
+@@ -2436,7 +2437,6 @@ static void * bcmdec_process_get_rbuf(void *ctx)
+ 
+ 		while (bcmdec->streaming && get_buf_start)
+ 		{
+-			//GST_DEBUG_OBJECT(bcmdec, "process get rbuf start....");
+ 			gstbuf = NULL;
+ 
+ 			if (!bcmdec->recv_thread && !bcmdec->streaming) {
+@@ -2446,9 +2446,8 @@ static void * bcmdec_process_get_rbuf(void *ctx)
+ 				break;
+ 			}
+ 
+-			// If we have enough buffers from the renderer then don't get any more
+ 			if(bcmdec->gst_padbuf_que_cnt >= GST_RENDERER_BUF_POOL_SZ) {
+-				usleep(100 * 1000);
++			  usleep(100 * 1000); /* we have enought buffers from the renderer */
+ 				GST_DEBUG_OBJECT(bcmdec, "SLEEPING because we have enough buffers");
+ 				continue;
+ 			}
+@@ -2467,13 +2466,10 @@ static void * bcmdec_process_get_rbuf(void *ctx)
+ 			bufSz = bcmdec->output_params.width * bcmdec->output_params.height * BUF_MULT;
+ 
+ 			GST_DEBUG_OBJECT(bcmdec, "process get rbuf gst_pad_alloc_buffer_and_set_caps ....");
+-			ret = gst_pad_alloc_buffer_and_set_caps(bcmdec->srcpad, GST_BUFFER_OFFSET_NONE,
+-								bufSz, GST_PAD_CAPS(bcmdec->srcpad), &gstbuf);
+-			if (ret != GST_FLOW_OK) {
+-				if (!bcmdec->silent)
+-					GST_ERROR_OBJECT(bcmdec, "gst_pad_alloc_buffer_and_set_caps failed %d ",ret);
+-				usleep(30 * 1000);
+-				continue;
++			if (!bcmdec_get_buffer(bcmdec, bufSz, &gstbuf)) {
++			  GST_ERROR_OBJECT(bcmdec, "gst_pad_alloc_buffer_and_set_caps failed %d ",ret);
++			  usleep(30 * 1000);
++			  continue;
+ 			}
+ 
+ 			GST_DEBUG_OBJECT(bcmdec, "Got GST Buf RCnt:%d", bcmdec->gst_padbuf_que_cnt);
+@@ -2501,9 +2497,6 @@ static gboolean bcmdec_start_get_rbuf_thread(GstBcmDec *bcmdec)
+ 	gint ret = 0;
+ 	pthread_attr_t thread_attr;
+ 
+-// 	if (!bcmdec_alloc_mem_rbuf_que_pool(bcmdec))
+-// 		GST_ERROR_OBJECT(bcmdec, "rend pool alloc failed/n");
+-
+ 	bcmdec->gst_padbuf_que_hd = bcmdec->gst_padbuf_que_tl = NULL;
+ 
+ 	ret = sem_init(&bcmdec->rbuf_ins_event, 0, 0);
+@@ -2658,18 +2651,14 @@ static GSTBUF_LIST *bcmdec_rem_padbuf(GstBcmDec *bcmdec)
+  */
+ static gboolean plugin_init(GstPlugin *bcmdec)
+ {
+-	//printf("BcmDec_init");
+-
+ 	/*
+ 	 * debug category for fltering log messages
+-	 *
+-	 * exchange the string 'Template bcmdec' with your description
+ 	 */
+-	GST_DEBUG_CATEGORY_INIT(gst_bcmdec_debug, "bcmdec", 0, "Broadcom video decoder");
++	GST_DEBUG_CATEGORY_INIT(gst_bcm_dec_debug, "bcmdec", 0, "Broadcom video decoder");
+ 
+-	return gst_element_register(bcmdec, "bcmdec", GST_BCMDEC_RANK, GST_TYPE_BCMDEC);
++	return gst_element_register(bcmdec, "bcmdec", GST_BCM_DEC_RANK, GST_TYPE_BCM_DEC);
+ }
+ 
+ /* gstreamer looks for this structure to register bcmdec */
+-GST_PLUGIN_DEFINE(GST_VERSION_MAJOR, GST_VERSION_MINOR, "bcmdec", "Video decoder", plugin_init, VERSION, "LGPL", "bcmdec", "http://broadcom.com/";)
++GST_PLUGIN_DEFINE(GST_VERSION_MAJOR, GST_VERSION_MINOR, bcmdec, "Video decoder", plugin_init, VERSION, "LGPL", "bcmdec", "http://broadcom.com/";)
+ 
+diff --git a/filters/gst/gst-plugin/src/gstbcmdec.h b/filters/gst/gst-plugin/src/gstbcmdec.h
+index 6e5b100..5c02c8a 100644
+--- a/filters/gst/gst-plugin/src/gstbcmdec.h
++++ b/filters/gst/gst-plugin/src/gstbcmdec.h
+@@ -23,11 +23,11 @@
+  * along with this library.  If not, see <http://www.gnu.org/licenses/>.
+  *
+  *******************************************************************/
+-#ifndef __GST_BCMDEC_H__
+-#define __GST_BCMDEC_H__
++#ifndef __GST_BCM_DEC_H__
++#define __GST_BCM_DEC_H__
+ 
+ 
+-#define	GST_BCMDEC_RANK	0xffff
++#define	GST_BCM_DEC_RANK	0xffff
+ 
+ #define CLOCK_BASE 9LL
+ #define CLOC_FREQ_CLOC_BASE * 10000
+@@ -127,16 +127,16 @@ typedef struct {
+ 
+ G_BEGIN_DECLS
+ 
+-#define GST_TYPE_BCMDEC \
+-  (gst_bcmdec_get_type())
+-#define GST_BCMDEC(obj) \
+-  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BCMDEC,GstBcmDec))
+-#define GST_BCMDEC_CLASS(klass) \
+-  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BCMDEC,GstBcmDecClass))
+-#define GST_IS_BCMDEC(obj) \
+-  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BCMDEC))
+-#define GST_IS_BCMDEC_CLASS(klass) \
+-  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BCMDEC))
++#define GST_TYPE_BCM_DEC \
++  (gst_bcm_dec_get_type())
++#define GST_BCM_DEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_BCM_DEC,GstBcmDec))
++#define GST_BCM_DEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_BCM_DEC,GstBcmDecClass))
++#define GST_IS_BCM_DEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BCM_DEC))
++#define GST_IS_BCM_DEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BCM_DEC))
+ 
+ typedef struct _GstBcmDec      GstBcmDec;
+ typedef struct _GstBcmDecClass GstBcmDecClass;
+@@ -188,7 +188,7 @@ struct _GstBcmDec
+ 
+ 	gboolean flushing;
+ 	sem_t push_stop_event;
+-    sem_t push_start_event;
++  sem_t push_start_event;
+ 	sem_t recv_stop_event;
+ 	guint ses_nbr;
+ 	gboolean insert_pps;
+@@ -233,49 +233,50 @@ struct _GstBcmDecClass
+   GstElementClass parent_class;
+ };
+ 
+-GType gst_bcmdec_get_type (void);
++GType gst_bcm_dec_get_type (void);
+ 
+ static void
+-gst_bcmdec_base_init (gpointer gclass);
++gst_bcm_dec_base_init (gpointer gclass);
+ 
+ static void
+-gst_bcmdec_class_init(GstBcmDecClass * klass);
++gst_bcm_dec_class_init(GstBcmDecClass * klass);
+ 
+ static void
+-gst_bcmdec_init(GstBcmDec * bcmdec,
+-				GstBcmDecClass * gclass);
++gst_bcm_dec_init(GstBcmDec * bcmdec);
++
+ 
+ static void
+-gst_bcmdec_finalize(GObject * object);
++gst_bcm_dec_finalize(GObject * object);
+ 
+ static GstFlowReturn
+-gst_bcmdec_chain(GstPad * pad,
++gst_bcm_dec_chain(GstPad * pad,
++		 GstObject * parent,
+ 				 GstBuffer * buffer);
+ 
+ static GstStateChangeReturn
+-gst_bcmdec_change_state(GstElement * element,
++gst_bcm_dec_change_state(GstElement * element,
+ 						GstStateChange transition);
+ 
+ static gboolean
+-gst_bcmdec_sink_set_caps(GstPad * pad,
++gst_bcm_dec_sink_set_caps(GstPad * pad,
+ 						 GstCaps * caps);
+ 
+-static GstCaps *gst_bcmdec_getcaps (GstPad * pad);
+-
+ static gboolean
+-gst_bcmdec_src_event(GstPad * pad,
++gst_bcm_dec_src_event(GstPad * pad,
++		     GstObject * parent,
+ 					 GstEvent * event);
+ 
+ static gboolean
+-gst_bcmdec_sink_event(GstPad * pad,
++gst_bcm_dec_sink_event(GstPad * pad,
++		      GstObject * parent,
+ 					  GstEvent * event);
+ 
+ static void
+-gst_bcmdec_set_property (GObject * object, guint prop_id,
++gst_bcm_dec_set_property (GObject * object, guint prop_id,
+ 						const GValue * value, GParamSpec * pspec);
+ 
+ static void
+-gst_bcmdec_get_property (GObject * object, guint prop_id,
++gst_bcm_dec_get_property (GObject * object, guint prop_id,
+ 						GValue * value, GParamSpec * pspec);
+ 
+ static gboolean
+@@ -285,7 +286,7 @@ static void
+ bcmdec_reset(GstBcmDec * bcmdec);
+ 
+ static gboolean
+-bcmdec_get_buffer(GstBcmDec * bcmdec, GstBuffer ** obuf);
++bcmdec_get_buffer(GstBcmDec * bcmdec, gint size, GstBuffer ** obuf);
+ 
+ static void*
+ bcmdec_process_output(void * ctx);
+@@ -300,7 +301,7 @@ static gboolean
+ bcmdec_format_change(GstBcmDec * filter,BC_PIC_INFO_BLOCK* pic_info);
+ 
+ static BC_STATUS
+-gst_bcmdec_cleanup(GstBcmDec *filter);
++gst_bcm_dec_cleanup(GstBcmDec *filter);
+ 
+ static gboolean
+ bcmdec_start_recv_thread(GstBcmDec * bcmdec);
+@@ -339,7 +340,7 @@ bcmdec_start_push_thread(GstBcmDec * bcmdec);
+ //bcmdec_insert_startcode(GstBcmDec* filter,GstBuffer* gstbuf, guint8* dest_buf,guint32* sz);
+ 
+ static BC_STATUS
+-bcmdec_insert_sps_pps(GstBcmDec* filter,GstBuffer* gstbuf);
++bcmdec_insert_sps_pps(GstBcmDec* filter, GstMapInfo* gstbuf);
+ 
+ static void
+ bcmdec_set_aspect_ratio(GstBcmDec *filter,BC_PIC_INFO_BLOCK* pic_info);
+@@ -383,7 +384,6 @@ bcmdec_ins_padbuf(GstBcmDec *filter,GSTBUF_LIST	*gst_queue_element);
+ static GSTBUF_LIST*
+ bcmdec_rem_padbuf(GstBcmDec *filter);
+ 
+-
+ G_END_DECLS
+ 
+-#endif /* __GST_BCMDEC_H__ */
++#endif /* __GST_BCM_DEC_H__ */
+-- 
+1.7.10.4
+
+diff --git a/filters/gst/gst-plugin/configure b/filters/gst/gst-plugin/configure
+index 9541549..af5996b 100755
+--- a/filters/gst/gst-plugin/configure
++++ b/filters/gst/gst-plugin/configure
+@@ -2137,9 +2137,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ 
+ 
+ 
+-GST_MAJORMINOR=0.10
+-GST_REQUIRED=0.10.0
+-GSTPB_REQUIRED=0.10.0
++GST_MAJORMINOR=1.0
++GST_REQUIRED=1.0
++GSTPB_REQUIRED=1.0
+ 
+ 
+ 
+diff --git a/filters/gst/gst-plugin/configure b/filters/gst/gst-plugin/configure
+index 9541549..a064d73 100755
+--- a/filters/gst/gst-plugin/configure
++++ b/filters/gst/gst-plugin/configure
+@@ -11514,16 +11514,16 @@ if test -n "$GST_CFLAGS"; then
+     if test -n "$PKG_CONFIG" && \
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\\
+   gstreamer-\$GST_MAJORMINOR >= \$GST_REQUIRED
+-  gstreamer-video-0.10\""; } >&5
++  gstreamer-video-1.0\""; } >&5
+   ($PKG_CONFIG --exists --print-errors "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10") 2>&5
++  gstreamer-video-1.0") 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+   pkg_cv_GST_CFLAGS=`$PKG_CONFIG --cflags "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10" 2>/dev/null`
++  gstreamer-video-1.0" 2>/dev/null`
+ 		      test "x$?" != "x0" && pkg_failed=yes
+ else
+   pkg_failed=yes
+@@ -11537,16 +11537,16 @@ if test -n "$GST_LIBS"; then
+     if test -n "$PKG_CONFIG" && \
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\\
+   gstreamer-\$GST_MAJORMINOR >= \$GST_REQUIRED
+-  gstreamer-video-0.10\""; } >&5
++  gstreamer-video-1.0\""; } >&5
+   ($PKG_CONFIG --exists --print-errors "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10") 2>&5
++  gstreamer-video-1.0") 2>&5
+   ac_status=$?
+   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+   test $ac_status = 0; }; then
+   pkg_cv_GST_LIBS=`$PKG_CONFIG --libs "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10" 2>/dev/null`
++  gstreamer-video-1.0" 2>/dev/null`
+ 		      test "x$?" != "x0" && pkg_failed=yes
+ else
+   pkg_failed=yes
+@@ -11569,11 +11569,11 @@ fi
+         if test $_pkg_short_errors_supported = yes; then
+ 	        GST_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10" 2>&1`
++  gstreamer-video-1.0" 2>&1`
+         else
+ 	        GST_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "\
+   gstreamer-$GST_MAJORMINOR >= $GST_REQUIRED
+-  gstreamer-video-0.10" 2>&1`
++  gstreamer-video-1.0" 2>&1`
+         fi
+ 	# Put the nasty error message in config.log where it belongs
+ 	echo "$GST_PKG_ERRORS" >&5
diff --git a/debian/patches/series b/debian/patches/series
index be6d2f4..7fe3064 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,4 @@ exclude-firmware.patch
 driver-build-failure-fix.patch
 gcc-opts-fix.patch
 spelling-fix.patch
+gst-Port-to-GStreamer-1.0-API.patch
-- 
1.7.10.4

Reply via email to