X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=mlt%2B%2B%2Fsrc%2FMltConsumer.cpp;h=0a0a402b08c36abaae619d4d3207538dcf35c2eb;hb=057979f3eddd93ebde7533000759829ffae50d74;hp=6fdcbc2127d316e3f968c67b16d803abbf96a176;hpb=1a4cf7f5285d16d0530ea03c2b524be7c1aa5dbc;p=melted diff --git a/mlt++/src/MltConsumer.cpp b/mlt++/src/MltConsumer.cpp index 6fdcbc2..0a0a402 100644 --- a/mlt++/src/MltConsumer.cpp +++ b/mlt++/src/MltConsumer.cpp @@ -21,13 +21,19 @@ #include #include #include "MltConsumer.h" +#include "MltEvent.h" using namespace Mlt; +Consumer::Consumer( ) : + instance( NULL ) +{ + instance = mlt_factory_consumer( NULL, NULL ); +} + Consumer::Consumer( char *id, char *arg ) : - destroy( true ), instance( NULL ) { - if ( arg != NULL ) + if ( id == NULL || arg != NULL ) { instance = mlt_factory_consumer( id, arg ); } @@ -48,25 +54,31 @@ Consumer::Consumer( char *id, char *arg ) : } } +Consumer::Consumer( Service &consumer ) : + instance( NULL ) +{ + if ( consumer.type( ) == consumer_type ) + { + instance = ( mlt_consumer )consumer.get_service( ); + inc_ref( ); + } +} + Consumer::Consumer( Consumer &consumer ) : - destroy( false ), instance( consumer.get_consumer( ) ) { + inc_ref( ); } Consumer::Consumer( mlt_consumer consumer ) : - destroy( false ), instance( consumer ) { + inc_ref( ); } Consumer::~Consumer( ) { - if ( destroy ) - { - stop( ); - mlt_consumer_close( instance ); - } + mlt_consumer_close( instance ); } mlt_consumer Consumer::get_consumer( ) @@ -104,3 +116,14 @@ bool Consumer::is_stopped( ) return mlt_consumer_is_stopped( get_consumer( ) ) != 0; } +int Consumer::run( ) +{ + int ret = start( ); + if ( !is_stopped( ) ) + { + Event *e = setup_wait_for( "consumer-stopped" ); + wait_for( e ); + delete e; + } + return ret; +}