Monday, January 19, 2009

Waveforms \o/

There you have it: fast, asynchronously-loaded waveforms for pitivi. It turns out it was useful to get thumbnails working first. Essentially the waveform is stored as a series of thumbails, and nearly the same drawing code is used to draw the waveform segment as to draw the thumbnails. The waveform segments are drawn into cairo surfaces directly from the sample data, which is fetched using a gstreamer segment seek.

Right now this branch is based off pitivi 0.11 so this could make it into the next minor release. Adding it to the current master branch will require a bit of refactoring. I might also be able to speed up rendering of waveforms a bit, which would mean that the previews will take less time to appear.

As for the cache, I haven't yet decided what scheme I want to use yet. I think LRU or MFU would be good enough, but it's possible that direct mapping would work as well and be much more efficient.

An interesting issue

I have been experiencing choppy audio within pitivi. What's interesting to note is that when you zoom in far enough, the audio waveform has gaps in it. And these visual gaps in the waveform seem to roughly co-incide with the auditory ones.


George said...

Very Cool Brandon, it would be great to see this in .11. More bug testing would occur I'm sure. At any rate thanks.

BTW any news on .13, feature set, that sort of thing?


brandon lewis said...

For .13 we're hoping to get into the advanced stuff: multi-layer and multi-track projects, effects, compositing. There will be UI enhancements as well, such as ripple/roll editing, the ability to synchronize arbitrary sources, and undo/redo support. Ultimately all the things we want to go into pitivi will go into .13 or later. What might make it into a future .11 release are thumbnails and a few cosmetic enhancements. Unfortunately we are re-inventing the a lot of things that we already had working in 0_11. It's just that they weren't done flexibly enough to allow the newer features.

Anonymous said...

Do the gnonlin ranges exclude the end, as in [start, end), for seamless playback if the next segment's start is the same as the previous segment's end?

What happened to your gnonlin wiki? It says I'm unauthorized to view.