Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=3d853209f83e21c2aace4be23d51ee5b32221a32

commit 3d853209f83e21c2aace4be23d51ee5b32221a32
Author: DeX77 <[email protected]>
Date:   Thu Oct 8 12:35:54 2015 +0200

crystalhd-20110314-40-x86_64

+ add patch to fix build with gcc 5
+ move lib from gst to gst1

diff --git a/source/xmultimedia/crystalhd/FrugalBuild 
b/source/xmultimedia/crystalhd/FrugalBuild
index 110fafa..89a34fb 100644
--- a/source/xmultimedia/crystalhd/FrugalBuild
+++ b/source/xmultimedia/crystalhd/FrugalBuild
@@ -3,7 +3,7 @@

pkgname=crystalhd
pkgver=20110314
-pkgrel=39
+pkgrel=40
_name="Broadcom Crystal HD 70012/70015"
pkgdesc="Kernel module and firmware for $_name."
url="http://linuxtv.org";
@@ -17,18 +17,22 @@ 
source=(http://ftp.frugalware.org/pub/other/sources/$pkgname/$pkgname-$pkgver.ta
kernel-module-udev.patch                                                        
   \
kernel-3.8.patch                                                                
   \
kernel4x.patch \
-       fixes.patch)
+       fixes.patch \
+       crystalhd-gst-Port-to-GStreamer-1.0-API.patch \
+       fix_build_with_gcc5.patch)
sha1sums=('85c4a045deeebdcebeb0b3b6cb674e0d1c774538' \
'cddd94c608a1ff5621ef5b67c0cc611337bb38b9' \
'6c7c30537f0dede06bcb1d488a051fb982e6f4f5' \
'546ccf18830df825edfca19b8ee700fefe280082' \
'e5f034a098a6ce6fae2c810a0d8ff8fd16845e1d' \
'df9b0f89ee750b4e168e46cadeb9ece2e66a5839' \
-          'ebd51f71f32903cf47ec2552f3687964001f72a4')
+          'ebd51f71f32903cf47ec2552f3687964001f72a4' \
+          'a434fd31214b887c18ae4e49bbeaa93bde273879' \
+          '5e4613c199fe9aa8fff673bb21af2e4f08068905')
Finclude kernel-module

Faddsubpkg "lib$pkgname" "Library for $_name." "libstdc++"
-Faddsubpkg "gst-plugins-$pkgname" "GStreamer plugin for $_name." 
"gst-plugins-base" "lib$pkgname=$pkgver"
+Faddsubpkg "gst1-plugins-$pkgname" "GStreamer 1.x plugin for $_name." 
"gst1-plugins-base" "lib$pkgname=$pkgver" "" "gst-plugins-$pkgname" 
"gst-plugins-$pkgname" "gst-plugins-$pkgname"

build()
{
@@ -39,6 +43,8 @@ build()
Fexec cd $_src_path/driver/linux || Fdie
Fsed '"\?$(\(shell \)\?uname -r)"\?' "$_F_kernelmod_uname" configure.ac 
Makefile.in
Fsed '-O2' "$CFLAGS" Makefile.in
+       Fsed 'bool                b422mode;' 'uint32_t                
b422mode;' crystalhd_misc.h
+
Fautoreconf
Fconf
Fmake
@@ -56,7 +62,7 @@ build()
Fmake
Fmakeinstall

-       Fsplit gst-plugins-$pkgname /usr/lib/gstreamer-0.10
+       Fsplit gst1-plugins-$pkgname /usr/lib/gstreamer-1.0
Fsplit lib$pkgname /usr/include /usr/lib

Fkernelver_compress_modules
diff --git 
a/source/xmultimedia/crystalhd/crystalhd-gst-Port-to-GStreamer-1.0-API.patch 
b/source/xmultimedia/crystalhd/crystalhd-gst-Port-to-GStreamer-1.0-API.patch
new file mode 100644
index 0000000..f5ef218
--- /dev/null
+++ b/source/xmultimedia/crystalhd/crystalhd-gst-Port-to-GStreamer-1.0-API.patch
@@ -0,0 +1,1087 @@
+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__ */
diff --git a/source/xmultimedia/crystalhd/fix_build_with_gcc5.patch 
b/source/xmultimedia/crystalhd/fix_build_with_gcc5.patch
new file mode 100644
index 0000000..1b5ed45
--- /dev/null
+++ b/source/xmultimedia/crystalhd/fix_build_with_gcc5.patch
@@ -0,0 +1,22 @@
+--- crystalhd/driver/linux/crystalhd_misc.h    2015-10-08 12:23:52.000000000 
+0200
++++ crystalhd.new/driver/linux/crystalhd_misc.h        2015-10-08 
12:25:25.000000000 +0200
+@@ -73,7 +73,7 @@
+       uint32_t                y_done_sz;
+       uint32_t                uv_done_sz;
+       uint32_t                comp_flags;
+-      bool                    b422mode;
++      uint32_t                b422mode;
+ };
+
+ struct crystalhd_dio_req {
+--- crystalhd/driver/linux/crystalhd_cmds.c    2015-10-08 12:23:52.000000000 
+0200
++++ crystalhd.new/driver/linux/crystalhd_cmds.c        2015-10-08 
12:31:30.000000000 +0200
+@@ -85,7 +85,7 @@
+               return BC_STS_ERR_USAGE;
+       }
+
+-      if ((idata->udata.u.NotifyMode.Mode && 0xFF) == DTS_MONITOR_MODE) {
++      if ((idata->udata.u.NotifyMode.Mode & 0xFF) == DTS_MONITOR_MODE) {
+               ctx->user[idata->u_id].mode = idata->udata.u.NotifyMode.Mode;
+               return BC_STS_SUCCESS;
+       }
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to