mlt_producer_close( this );
this = NULL;
}
+
+ // Close the file to release resources for large playlists - reopen later as needed
+ mlt_properties_set_data( properties, "dummy_context", NULL, 0, NULL, NULL );
+ mlt_properties_set_data( properties, "audio_context", NULL, 0, NULL, NULL );
+ mlt_properties_set_data( properties, "video_context", NULL, 0, NULL, NULL );
}
}
// Fetch the video_context
AVFormatContext *context = mlt_properties_get_data( properties, "video_context", NULL );
+ if ( !context )
+ {
+ // Reopen the file
+ mlt_events_block( properties, this );
+ producer_open( this, mlt_service_profile( MLT_PRODUCER_SERVICE(this) ),
+ mlt_properties_get( properties, "resource" ) );
+ context = mlt_properties_get_data( properties, "video_context", NULL );
+ mlt_properties_set_data( properties, "dummy_context", NULL, 0, NULL, NULL );
+ mlt_events_unblock( properties, this );
+ }
// Get the video_index
int index = mlt_properties_get_int( properties, "video_index" );
// Initialise the codec if necessary
if ( codec == NULL )
{
- // Initialise multi-threading
- int thread_count = mlt_properties_get_int( properties, "threads" );
- if ( thread_count == 0 && getenv( "MLT_AVFORMAT_THREADS" ) )
- thread_count = atoi( getenv( "MLT_AVFORMAT_THREADS" ) );
- if ( thread_count > 1 )
- {
- avcodec_thread_init( codec_context, thread_count );
- codec_context->thread_count = thread_count;
- }
-
// Find the codec
codec = avcodec_find_decoder( codec_context->codec_id );