Unit purge
[melted] / src / miracle / miracle_unit.c
index f784d3a..2fe0c7a 100644 (file)
@@ -246,7 +246,7 @@ void miracle_unit_report_list( miracle_unit unit, valerie_response response )
        {
                mlt_playlist_clip_info info;
                mlt_playlist_get_clip_info( playlist , &info, i );
-               valerie_response_printf( response, 10240, "%d \"%s\" %lld %lld %lld %lld %.2f\n", 
+               valerie_response_printf( response, 10240, "%d \"%s\" %d %d %d %d %.2f\n", 
                                                                 i, 
                                                                 strip_root( unit, info.resource ), 
                                                                 info.frame_in, 
@@ -255,6 +255,7 @@ void miracle_unit_report_list( miracle_unit unit, valerie_response response )
                                                                 info.length, 
                                                                 info.fps );
        }
+       valerie_response_printf( response, 1024, "\n" );
 }
 
 /** Load a clip into the unit clearing existing play list.
@@ -266,7 +267,7 @@ void miracle_unit_report_list( miracle_unit unit, valerie_response response )
        \param out  The ending frame (-1 for maximum)
 */
 
-valerie_error_code miracle_unit_load( miracle_unit unit, char *clip, int64_t in, int64_t out, int flush )
+valerie_error_code miracle_unit_load( miracle_unit unit, char *clip, int32_t in, int32_t out, int flush )
 {
        // Now try to create an producer
        mlt_producer instance = create_producer( clip );
@@ -277,6 +278,8 @@ valerie_error_code miracle_unit_load( miracle_unit unit, char *clip, int64_t in,
                mlt_properties properties = unit->properties;
                mlt_properties_set_data( unit->producers, clip, instance, 0, ( mlt_destructor )mlt_producer_close, NULL );
                mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL );
+               mlt_consumer consumer = mlt_properties_get_data( unit->properties, "consumer", NULL );
+               mlt_consumer_purge( consumer );
                mlt_playlist_append_io( playlist, instance, in, out );
                miracle_log( LOG_DEBUG, "loaded clip %s", clip );
                miracle_unit_status_communicate( unit );
@@ -286,7 +289,7 @@ valerie_error_code miracle_unit_load( miracle_unit unit, char *clip, int64_t in,
        return valerie_invalid_file;
 }
 
-valerie_error_code miracle_unit_insert( miracle_unit unit, char *clip, int index, int64_t in, int64_t out )
+valerie_error_code miracle_unit_insert( miracle_unit unit, char *clip, int index, int32_t in, int32_t out )
 {
        mlt_producer instance = locate_producer( unit, clip );
 
@@ -324,6 +327,16 @@ valerie_error_code miracle_unit_clean( miracle_unit unit )
        return valerie_ok;
 }
 
+valerie_error_code miracle_unit_clear( miracle_unit unit )
+{
+       mlt_consumer consumer = mlt_properties_get_data( unit->properties, "consumer", NULL );
+       clear_unit( unit );
+       mlt_consumer_purge( consumer );
+       miracle_log( LOG_DEBUG, "Cleared playlist" );
+       miracle_unit_status_communicate( unit );
+       return valerie_ok;
+}
+
 valerie_error_code miracle_unit_move( miracle_unit unit, int src, int dest )
 {
        mlt_properties properties = unit->properties;
@@ -344,7 +357,7 @@ valerie_error_code miracle_unit_move( miracle_unit unit, int src, int dest )
        \param out  The ending frame (-1 for maximum)
 */
 
-valerie_error_code miracle_unit_append( miracle_unit unit, char *clip, int64_t in, int64_t out )
+valerie_error_code miracle_unit_append( miracle_unit unit, char *clip, int32_t in, int32_t out )
 {
        mlt_producer instance = locate_producer( unit, clip );
 
@@ -391,6 +404,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_playlist playlist = mlt_properties_get_data( unit->properties, "playlist", NULL );
+       mlt_producer producer = mlt_playlist_producer( playlist );
+       mlt_producer_set_speed( producer, 0 );
        mlt_consumer_stop( consumer );
        miracle_unit_status_communicate( unit );
 }
@@ -507,7 +523,7 @@ int miracle_unit_get_status( miracle_unit unit, valerie_status status )
 /** Change position in the playlist.
 */
 
-void miracle_unit_change_position( miracle_unit unit, int clip, int64_t position )
+void miracle_unit_change_position( miracle_unit unit, int clip, int32_t position )
 {
        mlt_properties properties = unit->properties;
        mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL );
@@ -527,8 +543,8 @@ void miracle_unit_change_position( miracle_unit unit, int clip, int64_t position
 
        if ( mlt_playlist_get_clip_info( playlist, &info, clip ) == 0 )
        {
-               int64_t frame_start = info.start;
-               int64_t frame_offset = position;
+               int32_t frame_start = info.start;
+               int32_t frame_offset = position;
 
                if ( frame_offset < 0 )
                        frame_offset = info.frame_out;
@@ -557,7 +573,7 @@ int miracle_unit_get_current_clip( miracle_unit unit )
 /** Set a clip's in point
 */
 
-int miracle_unit_set_clip_in( miracle_unit unit, int index, int64_t position )
+int miracle_unit_set_clip_in( miracle_unit unit, int index, int32_t position )
 {
        mlt_properties properties = unit->properties;
        mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL );
@@ -578,7 +594,7 @@ int miracle_unit_set_clip_in( miracle_unit unit, int index, int64_t position )
 /** Set a clip's out point.
 */
 
-int miracle_unit_set_clip_out( miracle_unit unit, int index, int64_t position )
+int miracle_unit_set_clip_out( miracle_unit unit, int index, int32_t position )
 {
        mlt_properties properties = unit->properties;
        mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL );
@@ -600,7 +616,7 @@ int miracle_unit_set_clip_out( miracle_unit unit, int index, int64_t position )
 /** Step by specified position.
 */
 
-void miracle_unit_step( miracle_unit unit, int64_t offset )
+void miracle_unit_step( miracle_unit unit, int32_t offset )
 {
        mlt_properties properties = unit->properties;
        mlt_playlist playlist = mlt_properties_get_data( properties, "playlist", NULL );
@@ -685,6 +701,7 @@ void miracle_unit_close( miracle_unit unit )
        if ( unit != NULL )
        {
                miracle_log( LOG_DEBUG, "closing unit..." );
+               miracle_unit_terminate( unit );
                if ( unit->old_producers != NULL )
                        mlt_properties_close( unit->old_producers );
                mlt_properties_close( unit->properties );