X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fsdl%2Fproducer_sdl_image.c;h=19f4f4b0e2e37d1bd763f9e9b3794ec689ca49c7;hb=125e716b9306d8743294e996522abe3b6f00fab4;hp=ee881023f83defdfbfd955778e0023cf32fda5f1;hpb=d33f444d4ef4c7bc4074d07a49eca0ab7d108394;p=melted diff --git a/src/modules/sdl/producer_sdl_image.c b/src/modules/sdl/producer_sdl_image.c index ee88102..19f4f4b 100644 --- a/src/modules/sdl/producer_sdl_image.c +++ b/src/modules/sdl/producer_sdl_image.c @@ -150,23 +150,28 @@ static SDL_Surface *load_image( mlt_producer producer ) mlt_properties_set_data( properties, "_surface", surface, 0, ( mlt_destructor )SDL_FreeSurface, 0 ); } - image_idx = ( int )floor( ( double )position / ttl ) % mlt_properties_count( filenames ); - this_resource = mlt_properties_get_value( filenames, image_idx ); - - if ( last_resource == NULL || strcmp( last_resource, this_resource ) ) + if ( mlt_properties_count( filenames ) ) { - surface = IMG_Load( this_resource ); - if ( surface != NULL ) + image_idx = ( int )floor( ( double )position / ttl ) % mlt_properties_count( filenames ); + this_resource = mlt_properties_get_value( filenames, image_idx ); + + if ( surface == NULL || last_resource == NULL || strcmp( last_resource, this_resource ) ) + { + surface = IMG_Load( this_resource ); + if ( surface != NULL ) + { + surface->refcount ++; + mlt_properties_set_data( properties, "_surface", surface, 0, ( mlt_destructor )SDL_FreeSurface, 0 ); + mlt_properties_set( properties, "_last_resource", this_resource ); + mlt_properties_set_int( properties, "_real_width", surface->w ); + mlt_properties_set_int( properties, "_real_height", surface->h ); + } + } + else if ( surface != NULL ) { surface->refcount ++; - mlt_properties_set_data( properties, "_surface", surface, 0, ( mlt_destructor )SDL_FreeSurface, 0 ); - mlt_properties_set( properties, "_last_resource", this_resource ); } } - else if ( surface != NULL ) - { - surface->refcount ++; - } return surface; } @@ -236,6 +241,18 @@ mlt_producer producer_sdl_image_init( mlt_profile profile, mlt_service_type type mlt_properties_set_int( properties, "ttl", 25 ); mlt_properties_set_int( properties, "progressive", 1 ); + // Validate the resource + SDL_Surface *surface = NULL; + if ( file && ( surface = load_image( producer ) ) ) + { + SDL_FreeSurface( surface ); + mlt_properties_set_data( properties, "_surface", NULL, 0, NULL, NULL ); + } + else + { + producer_close( producer ); + producer = NULL; + } return producer; } free( producer );