#include "video_init.h"
#include <GL/glu.h>
-#include <vlc/input.h>
-#include <vlc/vout.h>
-#include "aout_internal.h"
+#include <vlc_input.h>
+#include <vlc_playlist.h>
+#include <vlc_plugin.h>
/*****************************************************************************
* Module descriptor
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
-vlc_module_begin();
- set_description( _("GaLaktos visualization plugin") );
- set_capability( "visualization", 0 );
- set_callbacks( Open, Close );
- add_shortcut( "galaktos" );
-vlc_module_end();
+vlc_module_begin ()
+ set_description( N_("GaLaktos visualization") )
+ set_capability( "visualization", 0 )
+ set_callbacks( Open, Close )
+ add_shortcut( "galaktos" )
+vlc_module_end ()
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-typedef struct aout_filter_sys_t
+struct aout_filter_sys_t
{
galaktos_thread_t *p_thread;
-} aout_filter_sys_t;
+};
static void DoWork ( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
aout_buffer_t * );
-static void Thread ( vlc_object_t * );
+static void* Thread ( vlc_object_t * );
static char *TitleGet( vlc_object_t * );
aout_filter_sys_t *p_sys;
galaktos_thread_t *p_thread;
- if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2' )
- || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
+ if( p_filter->input.i_format != VLC_CODEC_FL32 ||
+ p_filter->output.i_format != VLC_CODEC_FL32 )
{
msg_Warn( p_filter, "bad input or output format" );
return VLC_EGENERIC;
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 ) )
{
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;
}
/*****************************************************************************
* Thread:
*****************************************************************************/
-static void Thread( vlc_object_t *p_this )
+static void* Thread( vlc_object_t *p_this )
{
galaktos_thread_t *p_thread = (galaktos_thread_t*)p_this;
int timed=0;
int timestart=0;
int mspf=0;
+ int canc = vlc_savecancel ();
/* Get on OpenGL provider */
p_thread->p_opengl =
- (vout_thread_t *)vlc_object_create( p_this, VLC_OBJECT_OPENGL );
+ (vout_thread_t *)vlc_object_create( p_this, sizeof( vout_thread_t ) );
if( p_thread->p_opengl == NULL )
{
- msg_Err( p_thread, "out of memory" );
- return;
+ vlc_restorecancel (canc);
+ return NULL;
}
vlc_object_attach( p_thread->p_opengl, p_this );
+ /* Initialize vout parameters */
+ vout_InitFormat( &p_thread->p_opengl->fmt_in,
+ VLC_CODEC_RGB32, 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 = VLC_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 );
+ module_need( p_thread->p_opengl, "opengl provider", NULL, false );
if( p_thread->p_module == NULL )
{
- msg_Err( p_thread, "no OpenGL provider found" );
+ msg_Err( p_thread, "unable to initialize OpenGL" );
vlc_object_detach( p_thread->p_opengl );
- vlc_object_destroy( p_thread->p_opengl );
- return;
+ vlc_object_release( p_thread->p_opengl );
+ vlc_restorecancel (canc);
+ return NULL;
}
p_thread->p_opengl->pf_init( p_thread->p_opengl );
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;
+ mtime_t now = mdate();
if (++count%100==0)
{
- realfps=100/((mdate()/1000-fpsstart)/1000);
+ realfps=100/((now/1000-fpsstart)/1000);
// printf("%f\n",realfps);
- fpsstart=mdate()/1000;
+ fpsstart=now/1000;
}
//framerate limiter
- timed=mspf-(mdate()/1000-timestart);
+ timed=mspf-(now/1000-timestart);
// printf("%d,%d\n",time,mspf);
if (timed>0) msleep(1000*timed);
// printf("Limiter %d\n",(mdate()/1000-timestart));
}
/* Free the openGL provider */
- module_Unneed( p_thread->p_opengl, p_thread->p_module );
+ module_unneed( p_thread->p_opengl, p_thread->p_module );
vlc_object_detach( p_thread->p_opengl );
- vlc_object_destroy( p_thread->p_opengl );
+ vlc_object_release( p_thread->p_opengl );
+ vlc_restorecancel (canc);
+ return NULL;
}
/*****************************************************************************
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 );
/* 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 );
}
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 )
{
}
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 );
}