X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvisualization%2Fgalaktos%2Fplugin.c;h=3808bbada4478dedf38922fd24d8533bcded9ac6;hb=6cc9595de6e94e5f56242a7b605fc30fa3369081;hp=a62bea1ce2ac4c5480a8d4f34e9cb53c84fbbfc7;hpb=bb13e2278049b34b5d8400f3887a5f2356e2cf4b;p=vlc diff --git a/modules/visualization/galaktos/plugin.c b/modules/visualization/galaktos/plugin.c index a62bea1ce2..3808bbada4 100644 --- a/modules/visualization/galaktos/plugin.c +++ b/modules/visualization/galaktos/plugin.c @@ -1,7 +1,7 @@ /***************************************************************************** * plugin.c: ***************************************************************************** - * Copyright (C) 2004 VideoLAN + * Copyright (C) 2004 the VideoLAN team * $Id$ * * Authors: Cyril Deguet @@ -21,7 +21,7 @@ * * 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, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** @@ -34,9 +34,9 @@ #include "video_init.h" #include -#include -#include -#include "aout_internal.h" +#include +#include +#include /***************************************************************************** * Module descriptor @@ -45,8 +45,8 @@ static int Open ( vlc_object_t * ); static void Close ( vlc_object_t * ); vlc_module_begin(); - set_description( _("GaLaktos visualization plugin") ); - set_capability( "audio filter", 0 ); + set_description( N_("GaLaktos visualization plugin") ); + set_capability( "visualization", 0 ); set_callbacks( Open, Close ); add_shortcut( "galaktos" ); vlc_module_end(); @@ -82,7 +82,7 @@ static int Open( vlc_object_t *p_this ) if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2' ) || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') ) { - msg_Warn( p_filter, "Bad input or output format" ); + msg_Warn( p_filter, "bad input or output format" ); return VLC_EGENERIC; } if ( !AOUT_FMTS_SIMILAR( &p_filter->input, &p_filter->output ) ) @@ -121,12 +121,12 @@ static int Open( vlc_object_t *p_this ) p_thread->psz_title = TitleGet( VLC_OBJECT( p_filter ) ); if( vlc_thread_create( p_thread, "galaktos update thread", Thread, - VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) + VLC_THREAD_PRIORITY_LOW, false ) ) { msg_Err( p_filter, "cannot lauch galaktos thread" ); - if( p_thread->psz_title ) free( p_thread->psz_title ); + free( p_thread->psz_title ); vlc_object_detach( p_thread ); - vlc_object_destroy( p_thread ); + vlc_object_release( p_thread ); free( p_sys ); return VLC_EGENERIC; } @@ -206,41 +206,50 @@ static void Thread( vlc_object_t *p_this ) msg_Err( p_thread, "out of memory" ); return; } + vlc_object_attach( p_thread->p_opengl, p_this ); + /* Initialize vout parameters */ + vout_InitFormat( &p_thread->p_opengl->fmt_in, + VLC_FOURCC('R','V','3','2'), + p_thread->i_width, p_thread->i_height, 1 ); p_thread->p_opengl->i_window_width = p_thread->i_width; p_thread->p_opengl->i_window_height = p_thread->i_height; p_thread->p_opengl->render.i_width = p_thread->i_width; p_thread->p_opengl->render.i_height = p_thread->i_width; p_thread->p_opengl->render.i_aspect = VOUT_ASPECT_FACTOR; + p_thread->p_opengl->b_scale = true; + p_thread->p_opengl->b_fullscreen = false; + p_thread->p_opengl->i_alignment = 0; + p_thread->p_opengl->fmt_in.i_sar_num = 1; + p_thread->p_opengl->fmt_in.i_sar_den = 1; + p_thread->p_opengl->fmt_render = p_thread->p_opengl->fmt_in; p_thread->p_module = module_Need( p_thread->p_opengl, "opengl provider", NULL, 0 ); if( p_thread->p_module == NULL ) { - msg_Err( p_thread, "No OpenGL provider found" ); - vlc_object_destroy( p_thread->p_opengl ); + msg_Err( p_thread, "unable to initialize OpenGL" ); + vlc_object_detach( p_thread->p_opengl ); + vlc_object_release( p_thread->p_opengl ); return; } - vlc_object_attach( p_thread->p_opengl, p_this ); + p_thread->p_opengl->pf_init( p_thread->p_opengl ); setup_opengl( p_thread->i_width, p_thread->i_height ); CreateRenderTarget(512, &RenderTargetTextureID, NULL); timestart=mdate()/1000; - while( !p_thread->b_die ) + while( vlc_object_alive (p_thread) ) { mspf = 1000 / 60; if( galaktos_update( p_thread ) == 1 ) { - p_thread->b_die = 1; - } - if( p_thread->psz_title ) - { - free( p_thread->psz_title ); - p_thread->psz_title = NULL; + vlc_object_kill( p_thread ); } + free( p_thread->psz_title ); + p_thread->psz_title = NULL; if (++count%100==0) { @@ -255,6 +264,11 @@ static void Thread( vlc_object_t *p_this ) // printf("Limiter %d\n",(mdate()/1000-timestart)); timestart=mdate()/1000; } + + /* Free the openGL provider */ + module_Unneed( p_thread->p_opengl, p_thread->p_module ); + vlc_object_detach( p_thread->p_opengl ); + vlc_object_release( p_thread->p_opengl ); } /***************************************************************************** @@ -266,21 +280,15 @@ static void Close( vlc_object_t *p_this ) aout_filter_sys_t *p_sys = p_filter->p_sys; /* Stop galaktos Thread */ - p_sys->p_thread->b_die = VLC_TRUE; + vlc_object_kill( p_sys->p_thread ); galaktos_done( p_sys->p_thread ); vlc_thread_join( p_sys->p_thread ); - /* Free the openGL provider */ - module_Unneed( p_sys->p_thread->p_opengl, p_sys->p_thread->p_module ); - vlc_object_detach( p_sys->p_thread->p_opengl ); - vlc_object_destroy( p_sys->p_thread->p_opengl ); - /* Free data */ vlc_object_detach( p_sys->p_thread ); - - vlc_object_destroy( p_sys->p_thread ); + vlc_object_release( p_sys->p_thread ); free( p_sys ); } @@ -293,7 +301,8 @@ static char *TitleGet( vlc_object_t *p_this ) if( p_input ) { - char *psz = strrchr( p_input->input.p_item->psz_uri, '/' ); + char *psz_orig = input_item_GetURI( input_GetItem( p_input ) ); + char *psz = strrchr( psz_orig, '/' ); if( psz ) { @@ -301,12 +310,13 @@ static char *TitleGet( vlc_object_t *p_this ) } else { - psz = p_input->input.p_item->psz_uri; + psz = psz_orig; } if( psz && *psz ) { psz_title = strdup( psz ); } + free( psz_orig ); vlc_object_release( p_input ); }