X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmiracle%2Fmiracle_unit.c;h=b194e7c225a341e286072cad5d64b8c032dd05e0;hb=b259419feda1b8edc162a0d827e71c26b85bc392;hp=32ab8bec108884716f970210ebc92c2798f41540;hpb=8691b6464c35a77ae001b9843891a90dd9fd3d50;p=melted diff --git a/src/miracle/miracle_unit.c b/src/miracle/miracle_unit.c index 32ab8be..b194e7c 100644 --- a/src/miracle/miracle_unit.c +++ b/src/miracle/miracle_unit.c @@ -146,6 +146,8 @@ static mlt_producer create_producer( miracle_unit unit, char *file ) char *args[ 2 ] = { file, NULL }; result = mlt_factory_producer( "inigo", args ); } + else if ( strstr( file, ".westley" ) ) + result = mlt_factory_producer( "westley", file ); else if ( strstr( file, ".mpg" ) ) result = mlt_factory_producer( "mcmpeg", file ); else if ( strstr( file, ".mpeg" ) ) @@ -162,7 +164,13 @@ static mlt_producer create_producer( miracle_unit unit, char *file ) result = mlt_factory_producer( "pixbuf", file ); else if ( strstr( file, ".png" ) ) result = mlt_factory_producer( "pixbuf", file ); - + else if ( strstr( file, ".tga" ) ) + result = mlt_factory_producer( "pixbuf", file ); + else if ( strstr( file, ".txt" ) ) + result = mlt_factory_producer( "pango", file ); + else if ( strstr( file, ".ogg" ) ) + result = mlt_factory_producer( "vorbis", file ); + // 2nd Line fallbacks if ( result == NULL && strstr( file, ".dv" ) ) result = mlt_factory_producer( "libdv", file ); @@ -171,6 +179,10 @@ static mlt_producer create_producer( miracle_unit unit, char *file ) // 3rd line fallbacks if ( result == NULL ) + result = mlt_factory_producer( "avformat", file ); + + // 4th line fallbacks + if ( result == NULL ) result = mlt_factory_producer( "ffmpeg", file ); // Now store the result @@ -299,6 +311,7 @@ valerie_error_code miracle_unit_clean( miracle_unit unit ) { clear_unit( unit ); miracle_log( LOG_DEBUG, "Cleaned playlist" ); + miracle_unit_status_communicate( unit ); return valerie_ok; } @@ -340,9 +353,7 @@ valerie_error_code miracle_unit_append( miracle_unit unit, char *clip, int64_t i return valerie_invalid_file; } -/** Start playing the clip. - - Start a dv-pump and commence dv1394 transmission. +/** Start playing the unit. \todo error handling \param unit A miracle_unit handle. @@ -355,7 +366,9 @@ void miracle_unit_play( miracle_unit_t *unit, int speed ) mlt_properties properties = unit->properties; mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL ); mlt_producer producer = mlt_playlist_producer( playlist ); + mlt_consumer consumer = mlt_properties_get_data( unit->properties, "consumer", NULL ); mlt_producer_set_speed( producer, ( double )speed / 1000 ); + mlt_consumer_start( consumer ); miracle_unit_status_communicate( unit ); } @@ -368,6 +381,9 @@ void miracle_unit_play( miracle_unit_t *unit, int speed ) void miracle_unit_terminate( miracle_unit unit ) { + mlt_consumer consumer = mlt_properties_get_data( unit->properties, "consumer", NULL ); + mlt_consumer_stop( consumer ); + miracle_unit_status_communicate( unit ); } /** Query the status of unit playback. @@ -378,7 +394,8 @@ void miracle_unit_terminate( miracle_unit unit ) int miracle_unit_has_terminated( miracle_unit unit ) { - return 0; + mlt_consumer consumer = mlt_properties_get_data( unit->properties, "consumer", NULL ); + return mlt_consumer_is_stopped( consumer ); } /** Transfer the currently loaded clip to another unit @@ -437,7 +454,9 @@ int miracle_unit_get_status( miracle_unit unit, valerie_status status ) status->generation = mlt_properties_get_int( properties, "generation" ); - if ( !strcmp( status->clip, "" ) ) + if ( miracle_unit_has_terminated( unit ) ) + status->status = unit_stopped; + else if ( !strcmp( status->clip, "" ) ) status->status = unit_not_loaded; else if ( status->speed == 0 ) status->status = unit_paused;