]> git.sesse.net Git - mlt/blobdiff - src/mlt++/MltProducer.cpp
Avoid unnecessary compilation when running "./configure; make; make install" multiple...
[mlt] / src / mlt++ / MltProducer.cpp
index f73c1696aceb7c4357fe170af16705309a1954ca..0e3842a1e6a431d064b5823e818df8b67a99a00c 100644 (file)
@@ -22,6 +22,7 @@
 #include "MltFilter.h"
 #include "MltProfile.h"
 #include "MltEvent.h"
+#include "MltConsumer.h"
 using namespace Mlt;
 
 Producer::Producer( ) :
@@ -110,6 +111,11 @@ int Producer::seek( int position )
        return mlt_producer_seek( get_producer( ), position );
 }
 
+int Producer::seek( const char *time )
+{
+       return mlt_producer_seek_time( get_producer( ), time );
+}
+
 int Producer::position( )
 {
        return mlt_producer_position( get_producer( ) );
@@ -120,18 +126,30 @@ int Producer::frame( )
        return mlt_producer_frame( get_producer( ) );
 }
 
+char* Producer::frame_time( mlt_time_format format )
+{
+       return mlt_producer_frame_time( get_producer(), format );
+}
+
 int Producer::set_speed( double speed )
 {
-       double current = get_speed();
+       return mlt_producer_set_speed( get_producer( ), speed );
+}
+
+int Producer::pause()
+{
        int result = 0;
-       Service *consumer = this->consumer();
-       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 );
-       delete event;
+
+       if ( get_speed() != 0 )
+       {
+               Consumer consumer( ( mlt_consumer ) mlt_service_consumer( get_service( ) ) );
+               Event *event = consumer.setup_wait_for( "consumer-sdl-paused" );
+               
+               result = mlt_producer_set_speed( get_producer( ), 0 );
+               if ( result == 0 && consumer.is_valid() && !consumer.is_stopped() )
+                       consumer.wait_for( event );
+               delete event;
+       }
        
        return result;
 }
@@ -166,6 +184,11 @@ int Producer::get_length( )
        return mlt_producer_get_length( get_producer( ) );
 }
 
+char* Producer::get_length_time( mlt_time_format format )
+{
+       return mlt_producer_get_length_time( get_producer( ), format );
+}
+
 int Producer::get_playtime( )
 {
        return mlt_producer_get_playtime( get_producer( ) );