/** Initialise timecode related information.
*/
-static void mlt_multitrack_refresh( mlt_multitrack this )
+void mlt_multitrack_refresh( mlt_multitrack this )
{
int i = 0;
// Move on to the next frame
if ( index >= this->count )
mlt_producer_prepare_next( parent );
+
+ // Refresh our stats
+ mlt_multitrack_refresh( this );
}
return 0;
return producer;
}
+static mlt_producer mlt_playlist_virtual_set_out( mlt_playlist this )
+{
+ // Default producer to blank
+ mlt_producer producer = &this->blank;
+
+ // Map playlist position to real producer in virtual playlist
+ mlt_timecode position = mlt_producer_position( &this->parent );
+
+ // Loop through the virtual playlist
+ int i = 0;
+
+ for ( i = 0; i < this->count; i ++ )
+ {
+ if ( position < this->list[ i ]->playtime )
+ {
+ // Found it, now break
+ producer = this->list[ i ]->producer;
+ position += this->list[ i ]->in;
+ break;
+ }
+ else
+ {
+ // Decrement position by length of this entry
+ position -= this->list[ i ]->playtime;
+ }
+ }
+
+ // Seek in real producer to relative position
+ if ( i < this->count )
+ {
+ fprintf( stderr, "END OF CLIP %d AT %e\n", i, position );
+ this->list[ i ]->playtime = position - this->list[ i ]->in;
+ }
+
+ return producer;
+}
+
/** Append a producer to the playlist.
*/
// Get the frame
mlt_service_get_frame( mlt_producer_service( real ), frame, index );
+ // Check if we're at the end of the clip
+ mlt_properties properties = mlt_frame_properties( *frame );
+ if ( mlt_properties_get_int( properties, "end_of_clip" ) )
+ mlt_playlist_virtual_set_out( this );
+
// Update timecode on the frame we're creating
mlt_frame_set_timecode( *frame, mlt_producer_position( producer ) );
mlt_properties properties = mlt_service_properties( parent );
// Set the default properties
+ mlt_properties_set( properties, "mlt_type", "mlt_producer" );
mlt_properties_set_timecode( properties, "position", 0.0 );
mlt_properties_set_double( properties, "frame", 1 );
mlt_properties_set_double( properties, "fps", 25.0 );
mlt_properties_set_timecode( properties, "out", 36000.0 );
mlt_properties_set_timecode( properties, "playtime", 36000.0 );
mlt_properties_set_timecode( properties, "length", 36000.0 );
+ mlt_properties_set_int( properties, "known_length", 1 );
+ mlt_properties_set_double( properties, "aspect_ratio", 4.0 / 3.0 );
// Override service get_frame
parent->get_frame = producer_get_frame;
struct producer_ffmpeg_s
{
struct mlt_producer_s parent;
- char *command;
FILE *video;
FILE *audio;
uint64_t expected;
int open;
int width;
int height;
+ int end_of_video;
+ int end_of_audio;
};
static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int index );
static void producer_close( mlt_producer parent );
-mlt_producer producer_ffmpeg_init( char *command )
+/** Consutruct an ffmpeg producer.
+*/
+
+mlt_producer producer_ffmpeg_init( char *file )
{
producer_ffmpeg this = calloc( sizeof( struct producer_ffmpeg_s ), 1 );
if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 )
{
+ // Get the producer
mlt_producer producer = &this->parent;
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ // Override get_frame and close methods
producer->get_frame = producer_get_frame;
producer->close = producer_close;
- if ( command != NULL )
- this->command = strdup( command );
+ // Set the properties
+ mlt_properties_set( properties, "mlt_type", "producer_ffmpeg" );
+ mlt_properties_set_int( properties, "known_length", 0 );
+ mlt_properties_set( properties, "video_type", file );
+ if ( file != NULL && !strcmp( file, "v4l" ) )
+ {
+ mlt_properties_set( properties, "video_file", "/dev/video0" );
+ mlt_properties_set( properties, "audio_file", "/dev/dsp" );
+ }
+ else
+ {
+ mlt_properties_set( properties, "video_file", file );
+ mlt_properties_set( properties, "audio_file", file );
+ }
- this->buffer = malloc( 1024 * 1024 );
+ this->buffer = malloc( 1024 * 1024 * 2 );
return producer;
}
FILE *producer_ffmpeg_run_video( producer_ffmpeg this )
{
- if ( this->video == NULL && !this->open )
+ // Get the producer
+ mlt_producer producer = &this->parent;
+
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ char *video_type = mlt_properties_get( properties, "video_type" );
+ char *video_file = mlt_properties_get( properties, "video_file" );
+ int video_loop = mlt_properties_get_int( properties, "video_loop" );
+
+ if ( this->video == NULL )
{
- if ( this->command != NULL )
+ if ( !this->open || video_loop )
{
- char command[ 1024 ];
+ char command[ 1024 ] = "";
float fps = mlt_producer_get_fps( &this->parent );
float position = mlt_producer_position( &this->parent );
- sprintf( command, "ffmpeg -i \"%s\" -ss %f -f imagepipe -r %f -f yuv4mpegpipe - 2>/dev/null", this->command, position, fps );
- this->video = popen( command, "r" );
+
+ if ( video_loop ) position = 0;
+
+ if ( video_type != NULL && !strcmp( video_type, "v4l" ) )
+ sprintf( command, "ffmpeg -r %f -s 640x480 -vd \"%s\" -f imagepipe -f yuv4mpegpipe - 2>/dev/null", fps, video_file );
+ else if ( video_file != NULL && strcmp( video_file, "" ) )
+ sprintf( command, "ffmpeg -i \"%s\" -ss %f -f imagepipe -r %f -f yuv4mpegpipe - 2>/dev/null", video_file, position, fps );
+
+ if ( strcmp( command, "" ) )
+ this->video = popen( command, "r" );
}
}
return this->video;
FILE *producer_ffmpeg_run_audio( producer_ffmpeg this )
{
- if ( this->audio == NULL && !this->open )
+ // Get the producer
+ mlt_producer producer = &this->parent;
+
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ char *video_type = mlt_properties_get( properties, "video_type" );
+ char *audio_file = mlt_properties_get( properties, "audio_file" );
+ int audio_loop = mlt_properties_get_int( properties, "audio_loop" );
+
+ if ( this->audio == NULL )
{
- if ( this->command != NULL )
+ if ( !this->open || audio_loop )
{
- char command[ 1024 ];
+ char command[ 1024 ] = "";
float position = mlt_producer_position( &this->parent );
- sprintf( command, "ffmpeg -i \"%s\" -ss %f -f s16le -ar 48000 -ac 2 - 2>/dev/null", this->command, position );
- this->audio = popen( command, "r" );
+
+ if ( audio_loop ) position = 0;
+
+ if ( video_type != NULL && !strcmp( video_type, "v4l" ) )
+ sprintf( command, "ffmpeg -ad \"%s\" -f s16le -ar 48000 -ac 2 - 2>/dev/null", audio_file );
+ else if ( audio_file != NULL )
+ sprintf( command, "ffmpeg -i \"%s\" -ss %f -f s16le -ar 48000 -ac 2 - 2>/dev/null", audio_file, position );
+
+ if ( strcmp( command, "" ) )
+ this->audio = popen( command, "r" );
}
}
return this->audio;
}
-static void producer_ffmpeg_position( producer_ffmpeg this, uint64_t requested )
+static void producer_ffmpeg_position( producer_ffmpeg this, uint64_t requested, int *skip )
{
- if ( requested != this->expected )
+ if ( this->open && requested > this->expected )
+ {
+ // Skip the following n frames
+ *skip = requested - this->expected;
+ }
+ else if ( requested != this->expected )
{
+ // Close the video pipe
if ( this->video != NULL )
pclose( this->video );
this->video = NULL;
+
+ // Close the audio pipe
if ( this->audio != NULL )
pclose( this->audio );
this->audio = NULL;
// We should not be open now
this->open = 0;
+ this->end_of_video = 0;
+ this->end_of_audio = 0;
}
// This is the next frame we expect
producer_ffmpeg producer = mlt_properties_get_data( properties, "producer_ffmpeg", NULL );
+ int skip = mlt_properties_get_int( properties, "skip" );
+
*frequency = 48000;
*channels = 2;
*samples = 1920;
// Read it
if ( producer->audio != NULL )
{
- if ( fread( *buffer, size, 1, producer->audio ) != 1 )
+ do
{
- pclose( producer->audio );
- producer->audio = NULL;
+ if ( fread( *buffer, size, 1, producer->audio ) != 1 )
+ {
+ pclose( producer->audio );
+ producer->audio = NULL;
+ producer->end_of_audio = 1;
+ }
}
+ while( skip -- );
}
else
{
producer_ffmpeg this = producer->child;
int width;
int height;
+ int skip;
// Construct a test frame
*frame = mlt_frame_init( );
// Are we at the position expected?
- producer_ffmpeg_position( this, mlt_producer_frame( producer ) );
+ producer_ffmpeg_position( this, mlt_producer_frame( producer ), &skip );
// Get the frames properties
mlt_properties properties = mlt_frame_properties( *frame );
FILE *video = this->video;
+ mlt_properties_set_int( properties, "skip", skip );
+
// Read the video
if ( video != NULL && read_ffmpeg_header( this, &width, &height ) == 2 )
{
uint8_t *image = malloc( width * height * 2 );
// Read it
+ while( skip -- )
+ {
+ fread( this->buffer, width * height * 3 / 2, 1, video );
+ read_ffmpeg_header( this, &width, &height );
+ }
+
fread( this->buffer, width * height * 3 / 2, 1, video );
// Convert it
// Push the image callback
mlt_frame_push_get_image( *frame, producer_get_image );
+
}
else
{
// Clean up
if ( this->video != NULL )
{
+ // Inform caller that end of clip is reached
+ this->end_of_video = 1;
pclose( this->video );
this->video = NULL;
}
// Set the audio pipe
mlt_properties_set_data( properties, "producer_ffmpeg", this, 0, NULL, NULL );
+ mlt_properties_set_int( properties, "end_of_clip", this->end_of_video && this->end_of_audio );
// Hmm - register audio callback
( *frame )->get_audio = producer_get_audio;
+ // Get properties objects
+ mlt_properties producer_properties = mlt_producer_properties( &this->parent );
+
+ // Get the additional properties
+ double aspect_ratio = mlt_properties_get_double( producer_properties, "aspect_ratio" );
+ double speed = mlt_properties_get_double( producer_properties, "speed" );
+
+ // Set them on the frame
+ mlt_properties_set_double( properties, "aspect_ratio", aspect_ratio );
+ mlt_properties_set_double( properties, "speed", speed );
+
+ // Set the out point on the producer
+ mlt_producer_set_in_and_out( &this->parent, mlt_producer_get_in( &this->parent ), mlt_producer_position( &this->parent ) + 0.1 );
+
// Update timecode on the frame we're creating
mlt_frame_set_timecode( *frame, mlt_producer_position( producer ) );
pclose( this->video );
if ( this->audio )
pclose( this->audio );
- free( this->command );
parent->close = NULL;
mlt_producer_close( parent );
+ free( this->buffer );
free( this );
}
// process actual param
if ( arg == NULL || !strcmp( arg, "PAL" ) )
{
- this->width = 720;
- this->height = 576;
+ this->window_width = 720;
+ this->window_height = 576;
}
else if ( !strcmp( arg, "NTSC" ) )
{
- this->width = 720;
- this->height = 480;
+ this->window_width = 720;
+ this->window_height = 480;
}
- else if ( sscanf( arg, "%dx%d", &this->width, &this->height ) != 2 )
+ else if ( sscanf( arg, "%dx%d", &this->window_width, &this->window_height ) != 2 )
{
- this->width = 720;
- this->height = 576;
+ this->window_width = 720;
+ this->window_height = 576;
}
// Create the the thread
}
}
- if ( width != this->width || height != this->height )
- {
- this->width = width;
- this->height = height;
- changed = 1;
- }
+ }
+
+ if ( width != this->width || height != this->height )
+ {
+ this->width = width;
+ this->height = height;
+ changed = 1;
}
if ( sdl_screen == NULL || changed )
if ( mlt_properties_get_double( properties, "aspect_ratio" ) )
aspect_ratio = mlt_properties_get_double( properties, "aspect_ratio" );
- if ( this->window_width == 0 || this->window_height == 0 )
- {
- this->window_width = width;
- this->window_height = height;
- }
-
// open SDL window with video overlay, if possible
sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, sdl_flags );
/** Initialise timecode related information.
*/
-static void mlt_multitrack_refresh( mlt_multitrack this )
+void mlt_multitrack_refresh( mlt_multitrack this )
{
int i = 0;
// Move on to the next frame
if ( index >= this->count )
mlt_producer_prepare_next( parent );
+
+ // Refresh our stats
+ mlt_multitrack_refresh( this );
}
return 0;
return producer;
}
+static mlt_producer mlt_playlist_virtual_set_out( mlt_playlist this )
+{
+ // Default producer to blank
+ mlt_producer producer = &this->blank;
+
+ // Map playlist position to real producer in virtual playlist
+ mlt_timecode position = mlt_producer_position( &this->parent );
+
+ // Loop through the virtual playlist
+ int i = 0;
+
+ for ( i = 0; i < this->count; i ++ )
+ {
+ if ( position < this->list[ i ]->playtime )
+ {
+ // Found it, now break
+ producer = this->list[ i ]->producer;
+ position += this->list[ i ]->in;
+ break;
+ }
+ else
+ {
+ // Decrement position by length of this entry
+ position -= this->list[ i ]->playtime;
+ }
+ }
+
+ // Seek in real producer to relative position
+ if ( i < this->count )
+ {
+ fprintf( stderr, "END OF CLIP %d AT %e\n", i, position );
+ this->list[ i ]->playtime = position - this->list[ i ]->in;
+ }
+
+ return producer;
+}
+
/** Append a producer to the playlist.
*/
// Get the frame
mlt_service_get_frame( mlt_producer_service( real ), frame, index );
+ // Check if we're at the end of the clip
+ mlt_properties properties = mlt_frame_properties( *frame );
+ if ( mlt_properties_get_int( properties, "end_of_clip" ) )
+ mlt_playlist_virtual_set_out( this );
+
// Update timecode on the frame we're creating
mlt_frame_set_timecode( *frame, mlt_producer_position( producer ) );
mlt_properties properties = mlt_service_properties( parent );
// Set the default properties
+ mlt_properties_set( properties, "mlt_type", "mlt_producer" );
mlt_properties_set_timecode( properties, "position", 0.0 );
mlt_properties_set_double( properties, "frame", 1 );
mlt_properties_set_double( properties, "fps", 25.0 );
mlt_properties_set_timecode( properties, "out", 36000.0 );
mlt_properties_set_timecode( properties, "playtime", 36000.0 );
mlt_properties_set_timecode( properties, "length", 36000.0 );
+ mlt_properties_set_int( properties, "known_length", 1 );
+ mlt_properties_set_double( properties, "aspect_ratio", 4.0 / 3.0 );
// Override service get_frame
parent->get_frame = producer_get_frame;
struct producer_ffmpeg_s
{
struct mlt_producer_s parent;
- char *command;
FILE *video;
FILE *audio;
uint64_t expected;
int open;
int width;
int height;
+ int end_of_video;
+ int end_of_audio;
};
static int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int index );
static void producer_close( mlt_producer parent );
-mlt_producer producer_ffmpeg_init( char *command )
+/** Consutruct an ffmpeg producer.
+*/
+
+mlt_producer producer_ffmpeg_init( char *file )
{
producer_ffmpeg this = calloc( sizeof( struct producer_ffmpeg_s ), 1 );
if ( this != NULL && mlt_producer_init( &this->parent, this ) == 0 )
{
+ // Get the producer
mlt_producer producer = &this->parent;
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ // Override get_frame and close methods
producer->get_frame = producer_get_frame;
producer->close = producer_close;
- if ( command != NULL )
- this->command = strdup( command );
+ // Set the properties
+ mlt_properties_set( properties, "mlt_type", "producer_ffmpeg" );
+ mlt_properties_set_int( properties, "known_length", 0 );
+ mlt_properties_set( properties, "video_type", file );
+ if ( file != NULL && !strcmp( file, "v4l" ) )
+ {
+ mlt_properties_set( properties, "video_file", "/dev/video0" );
+ mlt_properties_set( properties, "audio_file", "/dev/dsp" );
+ }
+ else
+ {
+ mlt_properties_set( properties, "video_file", file );
+ mlt_properties_set( properties, "audio_file", file );
+ }
- this->buffer = malloc( 1024 * 1024 );
+ this->buffer = malloc( 1024 * 1024 * 2 );
return producer;
}
FILE *producer_ffmpeg_run_video( producer_ffmpeg this )
{
- if ( this->video == NULL && !this->open )
+ // Get the producer
+ mlt_producer producer = &this->parent;
+
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ char *video_type = mlt_properties_get( properties, "video_type" );
+ char *video_file = mlt_properties_get( properties, "video_file" );
+ int video_loop = mlt_properties_get_int( properties, "video_loop" );
+
+ if ( this->video == NULL )
{
- if ( this->command != NULL )
+ if ( !this->open || video_loop )
{
- char command[ 1024 ];
+ char command[ 1024 ] = "";
float fps = mlt_producer_get_fps( &this->parent );
float position = mlt_producer_position( &this->parent );
- sprintf( command, "ffmpeg -i \"%s\" -ss %f -f imagepipe -r %f -f yuv4mpegpipe - 2>/dev/null", this->command, position, fps );
- this->video = popen( command, "r" );
+
+ if ( video_loop ) position = 0;
+
+ if ( video_type != NULL && !strcmp( video_type, "v4l" ) )
+ sprintf( command, "ffmpeg -r %f -s 640x480 -vd \"%s\" -f imagepipe -f yuv4mpegpipe - 2>/dev/null", fps, video_file );
+ else if ( video_file != NULL && strcmp( video_file, "" ) )
+ sprintf( command, "ffmpeg -i \"%s\" -ss %f -f imagepipe -r %f -f yuv4mpegpipe - 2>/dev/null", video_file, position, fps );
+
+ if ( strcmp( command, "" ) )
+ this->video = popen( command, "r" );
}
}
return this->video;
FILE *producer_ffmpeg_run_audio( producer_ffmpeg this )
{
- if ( this->audio == NULL && !this->open )
+ // Get the producer
+ mlt_producer producer = &this->parent;
+
+ // Get the properties of the producer
+ mlt_properties properties = mlt_producer_properties( producer );
+
+ char *video_type = mlt_properties_get( properties, "video_type" );
+ char *audio_file = mlt_properties_get( properties, "audio_file" );
+ int audio_loop = mlt_properties_get_int( properties, "audio_loop" );
+
+ if ( this->audio == NULL )
{
- if ( this->command != NULL )
+ if ( !this->open || audio_loop )
{
- char command[ 1024 ];
+ char command[ 1024 ] = "";
float position = mlt_producer_position( &this->parent );
- sprintf( command, "ffmpeg -i \"%s\" -ss %f -f s16le -ar 48000 -ac 2 - 2>/dev/null", this->command, position );
- this->audio = popen( command, "r" );
+
+ if ( audio_loop ) position = 0;
+
+ if ( video_type != NULL && !strcmp( video_type, "v4l" ) )
+ sprintf( command, "ffmpeg -ad \"%s\" -f s16le -ar 48000 -ac 2 - 2>/dev/null", audio_file );
+ else if ( audio_file != NULL )
+ sprintf( command, "ffmpeg -i \"%s\" -ss %f -f s16le -ar 48000 -ac 2 - 2>/dev/null", audio_file, position );
+
+ if ( strcmp( command, "" ) )
+ this->audio = popen( command, "r" );
}
}
return this->audio;
}
-static void producer_ffmpeg_position( producer_ffmpeg this, uint64_t requested )
+static void producer_ffmpeg_position( producer_ffmpeg this, uint64_t requested, int *skip )
{
- if ( requested != this->expected )
+ if ( this->open && requested > this->expected )
+ {
+ // Skip the following n frames
+ *skip = requested - this->expected;
+ }
+ else if ( requested != this->expected )
{
+ // Close the video pipe
if ( this->video != NULL )
pclose( this->video );
this->video = NULL;
+
+ // Close the audio pipe
if ( this->audio != NULL )
pclose( this->audio );
this->audio = NULL;
// We should not be open now
this->open = 0;
+ this->end_of_video = 0;
+ this->end_of_audio = 0;
}
// This is the next frame we expect
producer_ffmpeg producer = mlt_properties_get_data( properties, "producer_ffmpeg", NULL );
+ int skip = mlt_properties_get_int( properties, "skip" );
+
*frequency = 48000;
*channels = 2;
*samples = 1920;
// Read it
if ( producer->audio != NULL )
{
- if ( fread( *buffer, size, 1, producer->audio ) != 1 )
+ do
{
- pclose( producer->audio );
- producer->audio = NULL;
+ if ( fread( *buffer, size, 1, producer->audio ) != 1 )
+ {
+ pclose( producer->audio );
+ producer->audio = NULL;
+ producer->end_of_audio = 1;
+ }
}
+ while( skip -- );
}
else
{
producer_ffmpeg this = producer->child;
int width;
int height;
+ int skip;
// Construct a test frame
*frame = mlt_frame_init( );
// Are we at the position expected?
- producer_ffmpeg_position( this, mlt_producer_frame( producer ) );
+ producer_ffmpeg_position( this, mlt_producer_frame( producer ), &skip );
// Get the frames properties
mlt_properties properties = mlt_frame_properties( *frame );
FILE *video = this->video;
+ mlt_properties_set_int( properties, "skip", skip );
+
// Read the video
if ( video != NULL && read_ffmpeg_header( this, &width, &height ) == 2 )
{
uint8_t *image = malloc( width * height * 2 );
// Read it
+ while( skip -- )
+ {
+ fread( this->buffer, width * height * 3 / 2, 1, video );
+ read_ffmpeg_header( this, &width, &height );
+ }
+
fread( this->buffer, width * height * 3 / 2, 1, video );
// Convert it
// Push the image callback
mlt_frame_push_get_image( *frame, producer_get_image );
+
}
else
{
// Clean up
if ( this->video != NULL )
{
+ // Inform caller that end of clip is reached
+ this->end_of_video = 1;
pclose( this->video );
this->video = NULL;
}
// Set the audio pipe
mlt_properties_set_data( properties, "producer_ffmpeg", this, 0, NULL, NULL );
+ mlt_properties_set_int( properties, "end_of_clip", this->end_of_video && this->end_of_audio );
// Hmm - register audio callback
( *frame )->get_audio = producer_get_audio;
+ // Get properties objects
+ mlt_properties producer_properties = mlt_producer_properties( &this->parent );
+
+ // Get the additional properties
+ double aspect_ratio = mlt_properties_get_double( producer_properties, "aspect_ratio" );
+ double speed = mlt_properties_get_double( producer_properties, "speed" );
+
+ // Set them on the frame
+ mlt_properties_set_double( properties, "aspect_ratio", aspect_ratio );
+ mlt_properties_set_double( properties, "speed", speed );
+
+ // Set the out point on the producer
+ mlt_producer_set_in_and_out( &this->parent, mlt_producer_get_in( &this->parent ), mlt_producer_position( &this->parent ) + 0.1 );
+
// Update timecode on the frame we're creating
mlt_frame_set_timecode( *frame, mlt_producer_position( producer ) );
pclose( this->video );
if ( this->audio )
pclose( this->audio );
- free( this->command );
parent->close = NULL;
mlt_producer_close( parent );
+ free( this->buffer );
free( this );
}
// process actual param
if ( arg == NULL || !strcmp( arg, "PAL" ) )
{
- this->width = 720;
- this->height = 576;
+ this->window_width = 720;
+ this->window_height = 576;
}
else if ( !strcmp( arg, "NTSC" ) )
{
- this->width = 720;
- this->height = 480;
+ this->window_width = 720;
+ this->window_height = 480;
}
- else if ( sscanf( arg, "%dx%d", &this->width, &this->height ) != 2 )
+ else if ( sscanf( arg, "%dx%d", &this->window_width, &this->window_height ) != 2 )
{
- this->width = 720;
- this->height = 576;
+ this->window_width = 720;
+ this->window_height = 576;
}
// Create the the thread
}
}
- if ( width != this->width || height != this->height )
- {
- this->width = width;
- this->height = height;
- changed = 1;
- }
+ }
+
+ if ( width != this->width || height != this->height )
+ {
+ this->width = width;
+ this->height = height;
+ changed = 1;
}
if ( sdl_screen == NULL || changed )
if ( mlt_properties_get_double( properties, "aspect_ratio" ) )
aspect_ratio = mlt_properties_get_double( properties, "aspect_ratio" );
- if ( this->window_width == 0 || this->window_height == 0 )
- {
- this->window_width = width;
- this->window_height = height;
- }
-
// open SDL window with video overlay, if possible
sdl_screen = SDL_SetVideoMode( this->window_width, this->window_height, 0, sdl_flags );