X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fsdl%2Fconsumer_sdl_preview.c;h=12b78782707f4c58195318f78bb4b412eda4de4e;hb=1f2e5621296c35af5d2e2e0756087d2e214e7430;hp=fb96d6af5276b7bb6b2288df900aab38dc50f931;hpb=7abf52c63a1ad0acd2c3b2e490c768e112480e63;p=melted diff --git a/src/modules/sdl/consumer_sdl_preview.c b/src/modules/sdl/consumer_sdl_preview.c index fb96d6a..12b7878 100644 --- a/src/modules/sdl/consumer_sdl_preview.c +++ b/src/modules/sdl/consumer_sdl_preview.c @@ -3,22 +3,22 @@ * Copyright (C) 2004-2005 Ushodaya Enterprises Limited * Author: Charles Yates * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "consumer_sdl.h" +#include #include #include #include @@ -60,10 +60,10 @@ static void consumer_frame_show_cb( mlt_consumer sdl, mlt_consumer this, mlt_fra static void consumer_sdl_event_cb( mlt_consumer sdl, mlt_consumer this, SDL_Event *event ); static void consumer_refresh_cb( mlt_consumer sdl, mlt_consumer this, char *name ); -mlt_consumer consumer_sdl_preview_init( char *arg ) +mlt_consumer consumer_sdl_preview_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ) { consumer_sdl this = calloc( sizeof( struct consumer_sdl_s ), 1 ); - if ( this != NULL && mlt_consumer_init( &this->parent, this ) == 0 ) + if ( this != NULL && mlt_consumer_init( &this->parent, this, profile ) == 0 ) { // Get the parent consumer object mlt_consumer parent = &this->parent; @@ -83,8 +83,8 @@ mlt_consumer consumer_sdl_preview_init( char *arg ) } // Create child consumers - this->play = mlt_factory_consumer( "sdl", arg ); - this->still = mlt_factory_consumer( "sdl_still", arg ); + this->play = mlt_factory_consumer( profile, "sdl", arg ); + this->still = mlt_factory_consumer( profile, "sdl_still", arg ); mlt_properties_set( MLT_CONSUMER_PROPERTIES( parent ), "real_time", "0" ); mlt_properties_set( MLT_CONSUMER_PROPERTIES( parent ), "rescale", "nearest" ); parent->close = consumer_close; @@ -142,6 +142,9 @@ static int consumer_start( mlt_consumer parent ) char *window_id = mlt_properties_get( properties, "window_id" ); char *audio_driver = mlt_properties_get( properties, "audio_driver" ); + char *video_driver = mlt_properties_get( properties, "video_driver" ); + char *audio_device = mlt_properties_get( properties, "audio_device" ); + char *output_display = mlt_properties_get( properties, "output_display" ); int progressive = mlt_properties_get_int( properties, "progressive" ) | mlt_properties_get_int( properties, "deinterlace" ); consumer_stop( parent ); @@ -150,12 +153,21 @@ static int consumer_start( mlt_consumer parent ) this->joined = 0; this->last_speed = 1; + if ( output_display != NULL ) + setenv( "DISPLAY", output_display, 1 ); + if ( window_id != NULL ) setenv( "SDL_WINDOWID", window_id, 1 ); + if ( video_driver != NULL ) + setenv( "SDL_VIDEODRIVER", video_driver, 1 ); + if ( audio_driver != NULL ) setenv( "SDL_AUDIODRIVER", audio_driver, 1 ); + if ( audio_device != NULL ) + setenv( "AUDIODEV", audio_device, 1 ); + if ( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE ) < 0 ) { fprintf( stderr, "Failed to initialize SDL: %s\n", SDL_GetError() ); @@ -170,23 +182,16 @@ static int consumer_start( mlt_consumer parent ) mlt_properties_set_data( still, "transport_producer", mlt_properties_get_data( properties, "transport_producer", NULL ), 0, NULL, NULL ); mlt_properties_set_data( play, "transport_callback", mlt_properties_get_data( properties, "transport_callback", NULL ), 0, NULL, NULL ); mlt_properties_set_data( still, "transport_callback", mlt_properties_get_data( properties, "transport_callback", NULL ), 0, NULL, NULL ); - mlt_properties_set_int( play, "resize", mlt_properties_get_int( properties, "resize" ) ); - mlt_properties_set_int( still, "resize", mlt_properties_get_int( properties, "resize" ) ); - mlt_properties_set( play, "rescale", mlt_properties_get( properties, "rescale" ) ); - mlt_properties_set( still, "rescale", mlt_properties_get( properties, "rescale" ) ); - mlt_properties_set_int( play, "width", mlt_properties_get_int( properties, "width" ) ); - mlt_properties_set_int( still, "width", mlt_properties_get_int( properties, "width" ) ); - mlt_properties_set_int( play, "height", mlt_properties_get_int( properties, "height" ) ); - mlt_properties_set_int( still, "height", mlt_properties_get_int( properties, "height" ) ); - mlt_properties_set_double( play, "aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) ); - mlt_properties_set_double( still, "aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) ); - mlt_properties_set_double( play, "display_ratio", mlt_properties_get_double( properties, "display_ratio" ) ); - mlt_properties_set_double( still, "display_ratio", mlt_properties_get_double( properties, "display_ratio" ) ); mlt_properties_set_int( play, "progressive", progressive ); mlt_properties_set_int( still, "progressive", progressive ); - mlt_properties_set( play, "deinterlace_method", mlt_properties_get( properties, "deinterlace_method" ) ); - mlt_properties_set( still, "deinterlace_method", mlt_properties_get( properties, "deinterlace_method" ) ); + + mlt_properties_pass_list( play, properties, "resize,rescale,width,height,aspect_ratio,display_ratio,volume" ); + mlt_properties_pass_list( still, properties, "resize,rescale,width,height,aspect_ratio,display_ratio" ); + mlt_properties_pass_list( play, properties, "deinterlace_method" ); + mlt_properties_pass_list( still, properties, "deinterlace_method" ); + mlt_properties_pass_list( play, properties, "preview_off,preview_format,window_background" ); + mlt_properties_pass_list( still, properties, "preview_off,preview_format,window_background" ); mlt_properties_pass( play, properties, "play." ); mlt_properties_pass( still, properties, "still." ); @@ -267,6 +272,9 @@ static void *consumer_thread( void *arg ) mlt_frame frame = NULL; int last_position = -1; + // Determine if the application is dealing with the preview + int preview_off = mlt_properties_get_int( properties, "preview_off" ); + this->refresh_count = 0; // Loop until told not to @@ -355,7 +363,7 @@ static void *consumer_thread( void *arg ) } // Copy the rectangle info from the active consumer - if ( this->running ) + if ( this->running && preview_off == 0 ) { mlt_properties active = MLT_CONSUMER_PROPERTIES( this->active ); mlt_service_lock( MLT_CONSUMER_SERVICE( consumer ) );