From 7c524c3fc93c0f91d535265b83ec5b6a8eb9c801 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 26 Jul 2002 18:55:42 +0000 Subject: fix to adder: don't pull on unusable pads Original commit message from CVS: * fix to adder: don't pull on unusable pads * fix to ladspa: get output buffers first, so we can know how many frames to process - this breaks inplace buffer stuff, hmm * fix to float2int: add a bufferpool with the same nframes as the source pad's pool -> no extra latency --- ext/ladspa/gstladspa.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) (limited to 'ext/ladspa/gstladspa.c') diff --git a/ext/ladspa/gstladspa.c b/ext/ladspa/gstladspa.c index e1d4e915..d963ef71 100644 --- a/ext/ladspa/gstladspa.c +++ b/ext/ladspa/gstladspa.c @@ -772,10 +772,14 @@ gst_ladspa_loop(GstElement *element) buffers_out = g_new0(GstBuffer*, numsrcpads); bytestreams = g_new0(GstByteStream*, numsinkpads); - bufferbytesize = sizeof (LADSPA_Data) * ladspa->buffersize; - /* find a bufferpool */ - bufpool = gst_buffer_pool_get_default (bufferbytesize, ladspa->numbuffers); + if (numsrcpads > 0 && (bufpool = gst_pad_get_bufferpool (ladspa->srcpads[0]))) { + GST_DEBUG (0, "Got bufferpool from first source pad"); + } else { + bufferbytesize = sizeof (LADSPA_Data) * ladspa->buffersize; + bufpool = gst_buffer_pool_get_default (bufferbytesize, ladspa->numbuffers); + GST_DEBUG (0, "Created default bufferpool, %d x %d bytes", ladspa->numbuffers, bufferbytesize); + } /* get the bytestreams for each pad */ for (i=0 ; itimestamp; + data_out[i] = (LADSPA_Data *) GST_BUFFER_DATA(buffers_out[i]); + } + + bufferbytesize = GST_BUFFER_SIZE (buffers_out[0]); + ladspa->buffersize = bufferbytesize / sizeof (LADSPA_Data); + num_empty_pads = 0; /* first get all the necessary data from the input ports */ for (i=0 ; iinplace_broken){ - /* we can share buffers */ - buffers_out[i] = buffers_in[i]; - data_out[i] = data_in[i]; - } else { - buffers_out[i] = gst_buffer_new_from_pool (bufpool, 0, 0); - GST_BUFFER_TIMESTAMP(buffers_out[i]) = ladspa->timestamp; - data_out[i] = (LADSPA_Data *) GST_BUFFER_DATA(buffers_out[i]); - } - } - GST_DPMAN_PREPROCESS(ladspa->dpman, ladspa->buffersize, ladspa->timestamp); num_processed = 0; @@ -883,15 +883,14 @@ gst_ladspa_loop(GstElement *element) buffers_out[i] = NULL; } for (i=0 ; i numsrcpads || ladspa->inplace_broken){ - /* we have some buffers to unref */ - gst_buffer_unref(buffers_in[i]); - } + gst_buffer_unref(buffers_in[i]); data_in[i] = NULL; buffers_in[i] = NULL; } ladspa->timestamp += ladspa->buffersize * 10^9 / ladspa->samplerate; + + gst_element_yield (element); } while (TRUE); gst_buffer_pool_unref(bufpool); -- cgit v1.2.1