int height;
int playing;
int sdl_flags;
- SDL_Surface *sdl_screen;
SDL_Overlay *sdl_overlay;
SDL_Rect rect;
uint8_t *buffer;
SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL );
SDL_EnableUNICODE( 1 );
}
- else if ( display_off == 0 )
- {
- pthread_mutex_lock( &mlt_sdl_mutex );
- this->sdl_screen = SDL_GetVideoSurface( );
- pthread_mutex_unlock( &mlt_sdl_mutex );
- }
if ( audio_off == 0 )
SDL_InitSubSystem( SDL_INIT_AUDIO );
this->window_height = this->height;
}
- if ( this->sdl_screen == NULL && display_off == 0 )
+ pthread_mutex_lock( &mlt_sdl_mutex );
+ if ( !SDL_GetVideoSurface() && display_off == 0 )
{
if ( mlt_properties_get_int( this->properties, "fullscreen" ) )
{
this->sdl_flags |= SDL_FULLSCREEN;
SDL_ShowCursor( SDL_DISABLE );
}
- pthread_mutex_lock( &mlt_sdl_mutex );
- this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, this->sdl_flags );
- pthread_mutex_unlock( &mlt_sdl_mutex );
+ SDL_SetVideoMode( this->window_width, this->window_height, 0, this->sdl_flags );
}
+ pthread_mutex_unlock( &mlt_sdl_mutex );
pthread_create( &this->thread, NULL, consumer_thread, this );
}
SDL_Quit( );
pthread_mutex_unlock( &mlt_sdl_mutex );
}
-
- pthread_mutex_lock( &mlt_sdl_mutex );
- this->sdl_screen = NULL;
- pthread_mutex_unlock( &mlt_sdl_mutex );
}
return 0;
void *pool = mlt_cocoa_autorelease_init();
// Handle events
- if ( this->sdl_screen != NULL )
+ if ( SDL_GetVideoSurface() )
{
SDL_Event event;
this->sdl_overlay = NULL;
}
- if ( this->running && ( this->sdl_screen == NULL || changed ) )
+ if ( this->running && ( !SDL_GetVideoSurface() || changed ) )
{
// Force an overlay recreation
if ( this->sdl_overlay != NULL )
// open SDL window with video overlay, if possible
pthread_mutex_lock( &mlt_sdl_mutex );
- this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, this->bpp, this->sdl_flags );
- if ( consumer_get_dimensions( &this->window_width, &this->window_height ) )
- this->sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, this->bpp, this->sdl_flags );
+ consumer_get_dimensions( &this->window_width, &this->window_height );
+ SDL_Surface *screen = SDL_SetVideoMode( this->window_width, this->window_height, this->bpp, this->sdl_flags );
pthread_mutex_unlock( &mlt_sdl_mutex );
- uint32_t color = mlt_properties_get_int( this->properties, "window_background" );
- SDL_FillRect( this->sdl_screen, NULL, color >> 8 );
- SDL_Flip( this->sdl_screen );
+ if ( screen )
+ {
+ uint32_t color = mlt_properties_get_int( this->properties, "window_background" );
+ SDL_FillRect( screen, NULL, color >> 8 );
+ SDL_Flip( screen );
+ }
}
if ( this->running )
mlt_properties_set_int( this->properties, "rect_w", this->rect.w );
mlt_properties_set_int( this->properties, "rect_h", this->rect.h );
- SDL_SetClipRect( this->sdl_screen, &this->rect );
+ SDL_SetClipRect( SDL_GetVideoSurface(), &this->rect );
}
- if ( this->running && this->sdl_screen != NULL && this->sdl_overlay == NULL )
+ if ( this->running && SDL_GetVideoSurface() && this->sdl_overlay == NULL )
{
- SDL_SetClipRect( this->sdl_screen, &this->rect );
- this->sdl_overlay = SDL_CreateYUVOverlay( width, height, SDL_YUY2_OVERLAY, this->sdl_screen );
+ SDL_SetClipRect( SDL_GetVideoSurface(), &this->rect );
+ this->sdl_overlay = SDL_CreateYUVOverlay( width, height, SDL_YUY2_OVERLAY, SDL_GetVideoSurface() );
}
- if ( this->running && this->sdl_screen != NULL && this->sdl_overlay != NULL )
+ if ( this->running && SDL_GetVideoSurface() && this->sdl_overlay != NULL )
{
this->buffer = this->sdl_overlay->pixels[ 0 ];
if ( SDL_LockYUVOverlay( this->sdl_overlay ) >= 0 )
if ( image != NULL )
memcpy( this->buffer, image, width * height * 2 );
SDL_UnlockYUVOverlay( this->sdl_overlay );
- SDL_DisplayYUVOverlay( this->sdl_overlay, &this->sdl_screen->clip_rect );
+ SDL_DisplayYUVOverlay( this->sdl_overlay, &SDL_GetVideoSurface()->clip_rect );
}
}
while( mlt_deque_count( this->queue ) )
mlt_frame_close( mlt_deque_pop_back( this->queue ) );
- pthread_mutex_lock( &mlt_sdl_mutex );
- this->sdl_screen = NULL;
- pthread_mutex_unlock( &mlt_sdl_mutex );
this->audio_avail = 0;
return NULL;