This extensive patch implements true renderfarm rendering 'out of the box' support for ogg vorbis+theora video. No more you are left with multiple files that you have to mux yourself.
Basically what it does is special distribution of the workload among nodes and then it automatically muxes the results. - whole audio range is rendered as a single package by single node (due to non-packetnes of audio compression, it cannot gracefully be broaken into smaller packages) - video range is divided in number of packages specified in renderfarm preferences - when all packages are finished, cinelerra automatically muxes all the files together to get the final file (all the references in codecs are properly updated) - temporary files are deleted, and only final file is left To implement this, i've needed to make a new class hirarchy to be able to cleanly implement stuff... Everything is done in a way to support mpeg2 TS A+V distributed rendering in the same way in the future (as it is discussed currently on the mailing list) As a 'colateral damage' some bugs were found in fileogg.C and are also fixed by this patch... I haven't completely abstracted the PackatingEngine from the PackageDispatcher... i've just done it for single pass render farm mode, which leaves some work for PackageDispatcher. If there is a problem with this, i can fix it... adam? So have fun rendering to OGG _really_fast_ :) p.s.: this was direct need we have in Cyberpipe, since we do a lot of ogg vorbis+theora encoding... (http://video.kiberpipa.org) bye andraz
Index: module.C =================================================================== --- module.C (revision 800) +++ module.C (working copy) @@ -216,7 +216,6 @@ int direction) { SET_TRACE - Plugin *prev_transition = transition; transition = track->get_current_transition(current_position, direction, 0, @@ -226,7 +225,7 @@ // for situations where we had transition and have no more, we keep the server open: // maybe the same transition will follow and we won't need to reinit... (happens a lot while scrubbing over transitions left and right) // if((prev_transition && !transition) || - if ((transition && prev_transition && strcmp(transition->title, prev_transition->title))) + if ((transition && transition_server && strcmp(transition->title, transition_server->plugin->title))) { transition_server->close_plugin(); delete transition_server;