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;

Reply via email to