Cairo Cairo Cairo

26 Aug 2005 » permalink

I ported my whole drawing to Cairo:

Diva cairo timeline

It’s slightly slower than the pixbuf sprite-based drawing I used before, but hopefully this will improve in future (Glitz?). It’s also much more sane in programming terms, since all the pixel-grain anomalies are gone.

Screenshots are cool, but I feel a need to elaborate on the technology behind Diva. Here is the first issue of the series.


In it’s quest to be scalable & universal, Diva is backend-based. Backend is a glue between your media files & the output device(s). Think — DV Backend, MJPEG Zoran Hardware Backend etc. . Basically, backend is a workspace format in which you want to work (however — actually it’s the backends that provide formats, ie. DV Backend provides Full-PAL format and Half-PAL format). Backends don’t really do any data processing (they can though) but they merely “instruct” the engine how the data should be handled.

A real life example: You’re editing a movie of your wedding. You’re working in a Full-PAL DV Backend since you've got your files/media captured from a camcorder in this format (768x576 25 frames per second, 48kHz 2channel 16 bit audio). Now — you'd like to mix-over this cool David Bowie’s song that was aired in the background when you first met your future wife at the pub. The mp3 file is 44kHz audio. The backend will decide that this format difference (44kHz vs. 48kHz) can be handled real-time via converting. No extra interaction at your side necessary, you can just import the file.

Later on you realize, that this kind of boring wedding-videos are interesting only to your mam & dad. So you decide to spice the thing up with some cool photos you've got on your digital camcorder. These are 4000 x 2000 JPEG files. Because the CPU cost of quality down-scaling is too big, the backend will offer an option to recompress the photos to the native format (more or less automagically).

Summarizing, the whole idea behind backends is to:

Backends, like everything else in Diva, are pluginable.