From 4760e1902a12d13f2bcd3d88ab9ce15c3da38703 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 10 Nov 2011 13:36:10 +0100 Subject: [PATCH] pushsrc: make alloc method a vmethod --- libs/gst/base/gstpushsrc.c | 21 +++++++++++++++++++++ libs/gst/base/gstpushsrc.h | 8 +++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/libs/gst/base/gstpushsrc.c b/libs/gst/base/gstpushsrc.c index 6faec86..0369234 100644 --- a/libs/gst/base/gstpushsrc.c +++ b/libs/gst/base/gstpushsrc.c @@ -72,6 +72,8 @@ G_DEFINE_TYPE_WITH_CODE (GstPushSrc, gst_push_src, GST_TYPE_BASE_SRC, _do_init); static gboolean gst_push_src_query (GstBaseSrc * src, GstQuery * query); static GstFlowReturn gst_push_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer ** ret); +static GstFlowReturn gst_push_src_alloc (GstBaseSrc * bsrc, guint64 offset, + guint length, GstBuffer ** ret); static GstFlowReturn gst_push_src_fill (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer * ret); @@ -81,6 +83,7 @@ gst_push_src_class_init (GstPushSrcClass * klass) GstBaseSrcClass *gstbasesrc_class = (GstBaseSrcClass *) klass; gstbasesrc_class->create = GST_DEBUG_FUNCPTR (gst_push_src_create); + gstbasesrc_class->alloc = GST_DEBUG_FUNCPTR (gst_push_src_alloc); gstbasesrc_class->fill = GST_DEBUG_FUNCPTR (gst_push_src_fill); gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_push_src_query); } @@ -133,6 +136,24 @@ gst_push_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, } static GstFlowReturn +gst_push_src_alloc (GstBaseSrc * bsrc, guint64 offset, guint length, + GstBuffer ** ret) +{ + GstFlowReturn fret; + GstPushSrc *src; + GstPushSrcClass *pclass; + + src = GST_PUSH_SRC (bsrc); + pclass = GST_PUSH_SRC_GET_CLASS (src); + if (pclass->alloc) + fret = pclass->alloc (src, ret); + else + fret = GST_BASE_SRC_CLASS (parent_class)->alloc (bsrc, offset, length, ret); + + return fret; +} + +static GstFlowReturn gst_push_src_fill (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer * ret) { diff --git a/libs/gst/base/gstpushsrc.h b/libs/gst/base/gstpushsrc.h index e48ffb1..b936d83 100644 --- a/libs/gst/base/gstpushsrc.h +++ b/libs/gst/base/gstpushsrc.h @@ -54,11 +54,13 @@ struct _GstPushSrc { struct _GstPushSrcClass { GstBaseSrcClass parent_class; - /* ask the subclass to create a buffer */ + /* ask the subclass to create a buffer, the default implementation + * uses alloc and fill */ GstFlowReturn (*create) (GstPushSrc *src, GstBuffer **buf); - + /* allocate memory for a buffer */ + GstFlowReturn (*alloc) (GstPushSrc *src, GstBuffer **buf); /* ask the subclass to fill a buffer */ - GstFlowReturn (*fill) (GstPushSrc *src, GstBuffer *buf); + GstFlowReturn (*fill) (GstPushSrc *src, GstBuffer *buf); /*< private >*/ gpointer _gst_reserved[GST_PADDING]; -- 2.7.4