// Aspect ratio and other jiggery pokery
mlt_properties_set_double( frame_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) );
- if ( mlt_properties_get_int( properties, "progressive" ) || mlt_properties_get_int( properties, "deinterlace" ) )
- mlt_properties_set_int( frame_properties, "consumer_deinterlace", 1 );
+ mlt_properties_set_int( frame_properties, "consumer_deinterlace", mlt_properties_get_int( properties, "progressive" ) | mlt_properties_get_int( properties, "deinterlace" ) );
}
// Return the frame
{
samples = mlt_sample_calculator( fps, frequency, counter++ );
mlt_frame_get_audio( frame, &pcm, &afmt, &frequency, &channels, &samples );
- frame->get_audio = NULL;
}
mlt_properties_set_int( MLT_FRAME_PROPERTIES( frame ), "rendered", 1 );
{
samples = mlt_sample_calculator( fps, frequency, counter++ );
mlt_frame_get_audio( frame, &pcm, &afmt, &frequency, &channels, &samples );
- frame->get_audio = NULL;
}
// Increment the time take for this frame
// Get the childs close function
void ( *consumer_close )( ) = this->close;
- // Just in case...
- mlt_consumer_stop( this );
-
- // Make sure it only gets called once
- this->close = NULL;
- this->parent.close = NULL;
-
- // Destroy the push mutex and condition
- pthread_cond_broadcast( &this->put_cond );
- pthread_mutex_destroy( &this->put_mutex );
- pthread_cond_destroy( &this->put_cond );
+ if ( consumer_close )
+ {
+ // Just in case...
+ mlt_consumer_stop( this );
- // Call the childs close if available
- if ( consumer_close != NULL )
+ this->close = NULL;
consumer_close( this );
+ }
else
+ {
+
+ // Make sure it only gets called once
+ this->parent.close = NULL;
+
+ // Destroy the push mutex and condition
+ pthread_cond_broadcast( &this->put_cond );
+ pthread_mutex_destroy( &this->put_mutex );
+ pthread_cond_destroy( &this->put_cond );
+
mlt_service_close( &this->parent );
+ }
}
}