pthread_cond_t audio_cond;
int window_width;
int window_height;
+ int width;
+ int height;
};
/** Forward references to static functions.
via the argument, but keep it simple.
*/
-mlt_consumer consumer_sdl_init( void *dummy )
+mlt_consumer consumer_sdl_init( char *arg )
{
// Create the consumer object
consumer_sdl this = calloc( sizeof( struct consumer_sdl_s ), 1 );
pthread_mutex_init( &this->audio_mutex, NULL );
pthread_cond_init( &this->audio_cond, NULL);
- // TODO: process actual param
-
+ // process actual param
+ if ( arg == NULL || !strcmp( arg, "PAL" ) )
+ {
+ this->width = 720;
+ this->height = 576;
+ }
+ else if ( !strcmp( arg, "NTSC" ) )
+ {
+ this->width = 720;
+ this->height = 480;
+ }
+ else if ( sscanf( arg, "%dx%d", &this->width, &this->height ) != 2 )
+ {
+ this->width = 720;
+ this->height = 576;
+ }
+
+
// Create the the thread
pthread_create( &this->thread, NULL, consumer_thread, this );
// Get the service assoicated to the consumer
mlt_service service = mlt_consumer_service( consumer );
+ // Get the properties of this consumer
+ mlt_properties properties = this->properties;
+
// Define a frame pointer
mlt_frame frame;
if ( mlt_service_get_frame( service, &frame, 0 ) == 0 )
{
mlt_image_format vfmt = mlt_image_yuv422;
- int width, height;
+ int width = this->width, height = this->height;
uint8_t *image;
mlt_audio_format afmt = mlt_audio_pcm;
request.freq = frequency;
request.format = AUDIO_S16;
request.channels = channels;
- request.samples = 1024;
+ request.samples = 512;
request.callback = sdl_fill_audio;
request.userdata = (void *)this;
if ( SDL_OpenAudio( &request, NULL ) < 0 )
this->window_height = event.resize.h;
changed = 1;
break;
+ case SDL_KEYDOWN:
+ {
+ mlt_producer producer = mlt_properties_get_data( properties, "transport_producer", NULL );
+ void (*callback)( mlt_producer, char * ) = mlt_properties_get_data( properties, "transport_callback", NULL );
+ if ( callback != NULL && producer != NULL )
+ callback( producer, SDL_GetKeyName(event.key.keysym.sym) );
+ }
+ break;
}
}
}
if ( sdl_overlay != NULL )
SDL_FreeYUVOverlay( sdl_overlay );
sdl_lock_display();
- sdl_overlay = SDL_CreateYUVOverlay( width, height, SDL_YUY2_OVERLAY, sdl_screen );
+ sdl_overlay = SDL_CreateYUVOverlay( this->width, this->height, SDL_YUY2_OVERLAY, sdl_screen );
sdl_unlock_display();
}
}
{
if ( SDL_LockYUVOverlay( sdl_overlay ) >= 0 )
{
- memcpy( buffer, image, width * height * 2 );
+ mlt_resize_yuv422( buffer, this->width, this->height, image, width, height );
SDL_UnlockYUVOverlay( sdl_overlay );
SDL_DisplayYUVOverlay( sdl_overlay, &sdl_screen->clip_rect );
}