[gst-devel] question re: buffer handling

Thomas Vander Stichele thomas at urgent.rug.ac.be
Thu Aug 29 02:20:03 CEST 2002


Hi,

I've been tearing my hair out the last two days because I had some really 
weird issues with a program I was writing.

I finally tracked down what the problem was and realized I didn't really 
know what the best way was to fix it in gstreamer-land.

Here's the thing :

* I get audio data from an input pipe
* this data goes into a tee which feeds two analysis pipes
* the analysis pipe each use the same filter (bpwsinc) to filter data,
  then go through cutter and to fakesink

To be efficient, I coded the bpwsinc filter to do an in-place edit on the 
buffers.
Of course, tee sends out pointers to the buffer, and thus both filters 
work on the same data in-memory.  That's the root of my problem.

Now, two obvious ways to quickly fix it

a) have tee send out copies of the buffers instead of pointers to the same 
buffer (and maybe add a copy flag to tee so you can request this 
behaviour)

b) have bpwsinc not do an in-place edit.

Now, the problem here is a pretty general one, so, this should probably be 
solved on a higher level.  I know there are provisions in GStreamer to 
mark a buffer as read-only.

So, here are the questions :

a) should each plug-in that wants to do in-place editing for efficiency 
check if it's allowed to by himself and make a copy if necessary ?

b) if so, when does a buffer get marked read-only, and who should be doing 
this ? (ie, I could imagine tee making all of it's output buffers 
read-only by default if it is sending out more than one set of them)

c) should this change to tee be made ?

Any thoughts appreciated.  I might be overlooking something that's already 
there ;)

Thomas

-- 

The Dave/Dina Project : future TV today ! - http://davedina.apestaart.org/
<-*-                      -*->
Hold me in your arms
I want to be your only possession
<-*- thomas at apestaart.org -*->
URGent, the best radio on the Internet - 24/7 ! - http://urgent.rug.ac.be/





More information about the gstreamer-devel mailing list