]> git.sesse.net Git - mlt/commitdiff
Fix regression in Producer::set_speed when consumer stopped.
authorDan Dennedy <dan@dennedy.org>
Fri, 17 Dec 2010 07:14:51 +0000 (23:14 -0800)
committerDan Dennedy <dan@dennedy.org>
Fri, 17 Dec 2010 07:14:51 +0000 (23:14 -0800)
This was causing a deadlock in Kdenlive and any app that calls set_speed
when the consumer is stopped.

src/mlt++/MltProducer.cpp

index f73c1696aceb7c4357fe170af16705309a1954ca..172bc37c33c48393514db21bc21ddee9ec4e56a5 100644 (file)
@@ -22,6 +22,7 @@
 #include "MltFilter.h"
 #include "MltProfile.h"
 #include "MltEvent.h"
+#include "MltConsumer.h"
 using namespace Mlt;
 
 Producer::Producer( ) :
@@ -124,13 +125,13 @@ int Producer::set_speed( double speed )
 {
        double current = get_speed();
        int result = 0;
-       Service *consumer = this->consumer();
-       Event *event = consumer->setup_wait_for( "consumer-sdl-paused" );
+       Consumer consumer( ( mlt_consumer ) mlt_service_consumer( get_service( ) ) );
+       Event *event = consumer.setup_wait_for( "consumer-sdl-paused" );
 
        if ( current != speed )
                result = mlt_producer_set_speed( get_producer( ), speed );
-       if ( consumer->is_valid() && current != 0 && speed == 0 )
-               consumer->wait_for( event );
+       if ( current != 0 && speed == 0 && consumer.is_valid() && !consumer.is_stopped() )
+               consumer.wait_for( event );
        delete event;
        
        return result;