// Register our get_frame implementation
producer->get_frame = producer_get_frame;
+ // init mutexes
+ pthread_mutex_init( &self->audio_mutex, NULL );
+ pthread_mutex_init( &self->video_mutex, NULL );
+ pthread_mutex_init( &self->packets_mutex, NULL );
+ pthread_mutex_init( &self->open_mutex, NULL );
+
+ // init queues
+ self->apackets = mlt_deque_init();
+ self->vpackets = mlt_deque_init();
+
if ( strcmp( service, "avformat-novalidate" ) )
{
// Open the file
// Clean up
mlt_producer_close( producer );
producer = NULL;
+ producer_avformat_close( self );
}
else if ( self->seekable )
{
if ( ret >= 0 && pkt.stream_index == self->video_index && pkt.size > 0 )
{
get_aspect_ratio( properties, format->streams[ self->video_index ], codec_context, &pkt );
+ av_free_packet(&pkt);
break;
}
+ if ( ret >= 0 )
+ av_free_packet(&pkt);
}
}
else
// Lock the service
if ( take_lock )
{
- pthread_mutex_init( &self->audio_mutex, NULL );
- pthread_mutex_init( &self->video_mutex, NULL );
- pthread_mutex_init( &self->packets_mutex, NULL );
- pthread_mutex_init( &self->open_mutex, NULL );
pthread_mutex_lock( &self->audio_mutex );
pthread_mutex_lock( &self->video_mutex );
}
}
if ( filename )
free( filename );
- if ( !error )
- {
- self->apackets = mlt_deque_init();
- self->vpackets = mlt_deque_init();
- }
if ( self->dummy_context )
{