uint8_t *buffer;
int last_position;
mlt_producer last_producer;
+ int filtered;
};
/** Forward references to static functions.
// Get the parent consumer object
mlt_consumer parent = &this->parent;
- // Attach a colour space converter
- mlt_filter filter = mlt_factory_filter( "avcolour_space", NULL );
- mlt_properties_set_int( mlt_filter_properties( filter ), "forced", mlt_image_yuv422 );
- mlt_service_attach( mlt_consumer_service( &this->parent ), filter );
- mlt_filter_close( filter );
-
// We have stuff to clean up, so override the close method
parent->close = consumer_close;
if ( !this->running )
{
pthread_attr_t thread_attributes;
-
+
+ // Attach a colour space converter
+ if ( !this->filtered )
+ {
+ mlt_filter filter = mlt_factory_filter( "avcolour_space", NULL );
+ mlt_properties_set_int( mlt_filter_properties( filter ), "forced", mlt_image_yuv422 );
+ mlt_service_attach( mlt_consumer_service( &this->parent ), filter );
+ mlt_filter_close( filter );
+ this->filtered = 1;
+ }
+
consumer_stop( parent );
this->last_position = -1;
mlt_frame_get_image( frame, &image, &vfmt, &width, &height, 0 );
}
- if ( 1 )
+ if ( image != NULL )
{
char *rescale = mlt_properties_get( properties, "rescale" );
if ( rescale != NULL && strcmp( rescale, "none" ) )
if ( unlock != NULL ) unlock( );
- return 0;
+ return 1;
}
/** Threaded wrapper for pipe.
// internal intialization
mlt_frame frame = NULL;
- struct timespec tm = { 0, 400000 };
+ struct timespec tm = { 0, 1000000 };
if ( mlt_properties_get_int( mlt_consumer_properties( consumer ), "sdl_started" ) == 0 )
{
// Ensure that we have a frame
if ( frame != NULL )
{
- consumer_play_video( this, frame );
+ if ( consumer_play_video( this, frame ) == 0 )
+ nanosleep( &tm, NULL );
mlt_frame_close( frame );
- nanosleep( &tm, NULL );
}
}