X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=mlt%2B%2B%2Fsrc%2FMltConsumer.cpp;h=a36b63eda4ef5c992c9b21732c9ab4b76d243b69;hb=505120124a01a3fe71a676cde73ae855b805a69e;hp=c882d4b0832b72e5411c940c17619863b86e287d;hpb=8283ca2eb4e3b523e04a46578a19a985d3b2af3c;p=melted diff --git a/mlt++/src/MltConsumer.cpp b/mlt++/src/MltConsumer.cpp index c882d4b..a36b63e 100644 --- a/mlt++/src/MltConsumer.cpp +++ b/mlt++/src/MltConsumer.cpp @@ -21,14 +21,28 @@ #include #include #include "MltConsumer.h" +#include "MltEvent.h" +#include "MltProfile.h" using namespace Mlt; -Consumer::Consumer( char *id, char *arg ) : +Consumer::Consumer( ) : instance( NULL ) { - if ( arg != NULL ) + instance = mlt_factory_consumer( NULL, NULL, NULL ); +} + +Consumer::Consumer( Profile& profile ) : + instance( NULL ) +{ + instance = mlt_factory_consumer( profile.get_profile(), NULL, NULL ); +} + +Consumer::Consumer( Profile& profile, char *id, char *arg ) : + instance( NULL ) +{ + if ( id == NULL || arg != NULL ) { - instance = mlt_factory_consumer( id, arg ); + instance = mlt_factory_consumer( profile.get_profile(), id, arg ); } else { @@ -37,16 +51,26 @@ Consumer::Consumer( char *id, char *arg ) : char *temp = strdup( id ); char *arg = strchr( temp, ':' ) + 1; *( arg - 1 ) = '\0'; - instance = mlt_factory_consumer( temp, arg ); + instance = mlt_factory_consumer( profile.get_profile(), temp, arg ); free( temp ); } else { - instance = mlt_factory_consumer( id, NULL ); + instance = mlt_factory_consumer( profile.get_profile(), id, NULL ); } } } +Consumer::Consumer( Service &consumer ) : + instance( NULL ) +{ + if ( consumer.type( ) == consumer_type ) + { + instance = ( mlt_consumer )consumer.get_service( ); + inc_ref( ); + } +} + Consumer::Consumer( Consumer &consumer ) : instance( consumer.get_consumer( ) ) { @@ -99,3 +123,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; +}