On sre, 2006-03-22 at 04:32 +0100, Ichthyostega wrote:
> Hi all,
> 
> suddenly, I am struck with a strange issue affecting my dissolve transitions.
> Is there any known bug or problem in this area?
> 
> The speed at which the transitions proceeds doesn't honor the defined length 
> of the
> transition anymore. All transitions in a given project use sort of a "sticky 
> default speed",
> which seems to correspond to the transition length showing up when I add a 
> new dissolve transition.
> This leads up to a bunch of nasty behaviour: if a given transition is 
> shorter, then it
> proceeds too slow and thus the image just "jumps" to the next scene after the 
> end of the transition.
> If, on the other hand, a given transition is longer, then it proceeds too 
> fast and after the
> aforementioned "default transition duration" the image data just wraps around 
> leading to arbitrary
> strange colors showing up in the result until the end of the transition.


I've debugged the issue, and the fix is attached and also already
applied to the SVN, please test it and report back.

bye
andraž
--- hvirtual-cvs/cinelerra/module.C	2005-11-12 12:12:47.000000000 +0100
+++ hvirtual-2/cinelerra/module.C	2006-03-31 00:07:37.000000000 +0200
@@ -216,26 +216,26 @@
 	int direction)
 {
 SET_TRACE
-	Plugin *transition = track->get_current_transition(current_position, 
+	Plugin *prev_transition = transition;
+	transition = track->get_current_transition(current_position, 
 		direction,
 		0,
 		0); // position is already nudged in amodule.C and vmodule.C before calling update_transition!
 
 SET_TRACE
-	if((!transition && this->transition) || 
-		(transition && this->transition && strcmp(transition->title, this->transition->title)))
+// 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)))
 	{
-		this->transition = 0;
-
 		transition_server->close_plugin();
 		delete transition_server;
 		transition_server = 0;
 	}
 SET_TRACE
 
-	if(transition && !this->transition)
+	if(transition && !transition_server)
 	{
-		this->transition = transition;
 SET_TRACE
 
 		if(renderengine)

Reply via email to