From 86a10fbb9faa43f3a98c40b52eadf0e14e4e8637 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 4 Aug 2011 18:08:49 +0200 Subject: [PATCH] baseaudiosrc: call parent alloc function Call the parent alloc function to allocate buffers. --- gst-libs/gst/audio/gstbaseaudiosrc.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/audio/gstbaseaudiosrc.c b/gst-libs/gst/audio/gstbaseaudiosrc.c index f8e2b29..b56c5d4 100644 --- a/gst-libs/gst/audio/gstbaseaudiosrc.c +++ b/gst-libs/gst/audio/gstbaseaudiosrc.c @@ -749,6 +749,7 @@ static GstFlowReturn gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer ** outbuf) { + GstFlowReturn ret; GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc); GstBuffer *buf; guchar *data, *ptr; @@ -789,13 +790,17 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length, sample = gst_base_audio_src_get_offset (src); } - GST_DEBUG_OBJECT (src, "reading from sample %" G_GUINT64_FORMAT, sample); + GST_DEBUG_OBJECT (src, "reading from sample %" G_GUINT64_FORMAT " length %u", + sample, length); /* get the number of samples to read */ total_samples = samples = length / bps; - /* FIXME, using a bufferpool would be nice here */ - buf = gst_buffer_new_and_alloc (length); + /* use the basesrc allocation code to use bufferpools or custom allocators */ + ret = GST_BASE_SRC_CLASS (parent_class)->alloc (bsrc, offset, length, &buf); + if (G_UNLIKELY (ret != GST_FLOW_OK)) + goto alloc_failed; + data = ptr = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE); do { read = gst_ring_buffer_read (ringbuffer, sample, ptr, samples); @@ -1025,6 +1030,11 @@ wrong_offset: G_GUINT64_FORMAT " was given", offset)); return GST_FLOW_ERROR; } +alloc_failed: + { + GST_DEBUG_OBJECT (src, "alloc failed: %s", gst_flow_get_name (ret)); + return ret; + } stopped: { gst_buffer_unref (buf); -- 2.7.4