[gst-devel] Problem choosing the right scheduling mode

Stefan Kost ensonic at hora-obscura.de
Sun Aug 6 20:58:53 CEST 2006


Just one idea - can't you use
src ! level ! fakesink
?

Stefan

Dominique Würtz wrote:
> Hi,
>
> I'm currently trying to implement an element which generates peak 
> information (min/max value pairs) from audio data to be used for 
> waveform drawing. Reading through the PWG and experimenting with the 
> various scheduling modes, I found each mode to be unsuitable for 
> different reasons I want to explain below. The main issue with my 
> element is the possibly significant input/ouput buffer size ratio:
> * For very low zoom factors, you take many audio samples and ouput a 
> relatively small number of peak values.
> * OTOH, a high zoo factor means taking only a bunch of samples and 
> render them into a large chunk of peaks (say 1 sample could be displayed 
> 50 pixels wide)
>
> So here is what I found when evaluating the scheduling modes:
>
> 1. chain-based: incoming (audio data) is pushed on the sink pad. This 
> works ok of low zoom factors, because I can collect the incoming buffers 
> (for ex. using a GstAdapter) push out the generated data once I have a 
> sufficient amount of samples at the input. However, for high zoom 
> factors, it won't work (well). In this case, I have to generate a large  
> number of peak data for a relatively low number of input samples. This 
> is bad, firstly because I think buffer sizes of maybe 100kbytes are 
> simply bad practice and secondly large buffers mean possible overhead, 
> because the downstream element could only need part of the data, 
> discarding the major part of the expensively calculated data.
>
> 2. GstTask-based: this would basically work well. Main problem here is 
> that it requires the upstream elements to provide random access, which 
> unfortunately not the case for elements like wavparse and actually not 
> required for my task.
>
> So to sum things up, at this point I see no way to get things done with 
> current GStreamer but I'd be glad if someone come up with an idea.
>
> Just as a suggestion, the optimal scheduling mode for this kind of 
> element would be an additional pull-based chain mode: a chain callback 
> is attached to a _source_ pad where data is pulled (no random access!) 
> from sink pads. The new gst_pad_pull() function could then also be used 
> as an alternative to get_range() in GstTask-based elements, making it 
> possible to connect chain-based elements upstream.
>
> I hope I explained myself properly and appreciate any comments!
>
> Cheers,
>
> Dominique
>
>
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys -- and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>   





More information about the gstreamer-devel mailing list