{
this->width = mlt_properties_get_int( this->properties, "width" );
this->height = mlt_properties_get_int( this->properties, "height" );
-
- // Default window size
- this->window_width = ( float )this->height * this->display_aspect;
- this->window_height = this->height;
- }
- else
- {
- if ( (int)( ( float )this->width / this->height * 1000 ) !=
- (int)( this->display_aspect * 1000 ) )
- {
- // Override these
- this->display_aspect = ( float )this->width / this->height;
- this->aspect_ratio = 1.0;
- mlt_properties_set_double( this->properties, "aspect_ratio", this->aspect_ratio );
- }
-
- // Set window size
- this->window_width = this->width;
- this->window_height = this->height;
}
+ // Default window size
+ this->window_width = ( float )this->height * this->display_aspect;
+ this->window_height = this->height;
+
// Set the sdl flags
this->sdl_flags = SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL | SDL_RESIZABLE | SDL_DOUBLEBUF;
}
if ( width != this->width || height != this->height ||
- ( int )( this->last_frame_aspect * 1000 ) != ( int )( mlt_frame_get_aspect_ratio( frame ) * 1000 ) )
+ ( ( int )( this->last_frame_aspect * 1000 ) != ( int )( mlt_frame_get_aspect_ratio( frame ) * 1000 ) &&
+ ( mlt_frame_get_aspect_ratio( frame ) != 1.0 || this->last_frame_aspect == 0.0 ) ) )
+
{
- if ( mlt_frame_get_aspect_ratio( frame ) != 1.0 || this->last_frame_aspect == 0.0 )
- {
- this->width = width;
- this->height = height;
- this->last_frame_aspect = mlt_frame_get_aspect_ratio( frame );
- changed = 1;
- }
+ this->width = width;
+ this->height = height;
+ this->last_frame_aspect = mlt_frame_get_aspect_ratio( frame );
+ changed = 1;
}
if ( this->sdl_screen == NULL || changed )
mlt_properties_set_int( this->properties, "rect_y", this->rect.y );
mlt_properties_set_int( this->properties, "rect_w", this->rect.w );
mlt_properties_set_int( this->properties, "rect_h", this->rect.h );
-
+
// Force an overlay recreation
if ( this->sdl_overlay != NULL )
SDL_FreeYUVOverlay( this->sdl_overlay );
sdl_lock_display();
this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, this->sdl_flags );
sdl_unlock_display();
-
+ if ( consumer_get_dimensions( &this->window_width, &this->window_height ) )
+ this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, this->sdl_flags );
+ SDL_Flip( this->sdl_screen );
+ mlt_properties_set_int( properties, "changed", 0 );
+
if ( this->sdl_screen != NULL )
{
SDL_SetClipRect( this->sdl_screen, &this->rect );
sdl_lock_display();
this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, this->sdl_flags );
SDL_SetClipRect( this->sdl_screen, &this->rect );
- SDL_Flip( this->sdl_screen );
sdl_unlock_display();
mlt_properties_set_int( properties, "changed", 0 );
}
int64_t playtime = 0;
struct timespec tm = { 0, 100000 };
- if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE ) < 0 )
+ if ( mlt_properties_get_int( mlt_consumer_properties( consumer ), "sdl_started" ) == 0 )
+ {
+ if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE ) < 0 )
+ {
+ fprintf( stderr, "Failed to initialize SDL: %s\n", SDL_GetError() );
+ return NULL;
+ }
+
+ SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL );
+ SDL_EnableUNICODE( 1 );
+ }
+ else
{
- fprintf( stderr, "Failed to initialize SDL: %s\n", SDL_GetError() );
- return NULL;
+ if ( SDL_GetVideoSurface( ) != NULL )
+ consumer_get_dimensions( &this->window_width, &this->window_height );
+ mlt_properties_set_int( mlt_consumer_properties( consumer ), "changed", 1 );
}
- SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL );
- SDL_EnableUNICODE( 1 );
+ SDL_InitSubSystem( SDL_INIT_AUDIO );
// Loop until told not to
while( this->running )
// internal cleanup
if ( this->sdl_overlay != NULL )
SDL_FreeYUVOverlay( this->sdl_overlay );
- SDL_Quit( );
+
+ SDL_QuitSubSystem( SDL_INIT_AUDIO );
+
+ if ( mlt_properties_get_int( mlt_consumer_properties( consumer ), "sdl_started" ) == 0 )
+ SDL_Quit( );
while( mlt_deque_count( this->queue ) )
mlt_frame_close( mlt_deque_pop_back( this->queue ) );