*****************************************************************************/
#include <errno.h> /* ENOMEM */
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/vlc.h>
#include <vlc_vout.h>
#ifdef OPENGL_MORE_EFFECT
static float Z_Compute ( float, int, float, float );
-static void Transform ( float, int, float, float, int, int, int, int, double *, double * );
+static void Transform ( int, float, float, int, int, int, int, double *, double * );
/*****************************************************************************
* Module descriptor
#define POV_Z_LONGTEXT N_("Point of view (Z coordinate) of the cube/cylinder "\
"effect, if enabled.")
#endif
+#define PROVIDER_TEXT N_("OpenGL Provider")
+#define PROVIDER_LONGTEXT N_("Allows you to modify what OpenGL provider should be used")
#define SPEED_TEXT N_( "OpenGL cube rotation speed" )
#define SPEED_LONGTEXT N_( "Rotation speed of the OpenGL cube effect, if " \
"enabled." )
RADIUS_LONGTEXT, VLC_TRUE );
#endif
+ /* Allow opengl provider plugin selection */
+ add_string( "opengl-provider", "default", NULL, PROVIDER_TEXT,
+ PROVIDER_LONGTEXT, VLC_TRUE );
set_callbacks( CreateVout, DestroyVout );
add_string( "opengl-effect", "none", NULL, EFFECT_TEXT,
EFFECT_LONGTEXT, VLC_FALSE );
{
vout_thread_t *p_vout = (vout_thread_t *)p_this;
vout_sys_t *p_sys;
+ char * psz;
/* Allocate structure */
p_vout->p_sys = p_sys = malloc( sizeof( vout_sys_t ) );
p_sys->p_vout->b_scale = p_vout->b_scale;
p_sys->p_vout->i_alignment = p_vout->i_alignment;
+ psz = config_GetPsz( p_vout, "opengl-provider" );
+
+ msg_Dbg( p_vout, "requesting \"%s\" opengl provider",
+ psz ? psz : "default" );
+
p_sys->p_vout->p_module =
- module_Need( p_sys->p_vout, "opengl provider", NULL, 0 );
+ module_Need( p_sys->p_vout, "opengl provider", psz, 0 );
+ free( psz );
if( p_sys->p_vout->p_module == NULL )
{
msg_Warn( p_vout, "No OpenGL provider found" );
vlc_object_detach( p_sys->p_vout );
- vlc_object_destroy( p_sys->p_vout );
+ vlc_object_release( p_sys->p_vout );
return VLC_ENOOBJ;
}
p_sys->i_effect = OPENGL_EFFECT_NONE;
#endif
}
- if( val.psz_string ) free( val.psz_string );
+ free( val.psz_string );
if( p_sys->i_effect & ( OPENGL_EFFECT_CUBE |
OPENGL_EFFECT_TRANSPARENT_CUBE ) )
/* Free the texture buffer*/
glDeleteTextures( 2, p_sys->p_textures );
- if( p_sys->pp_buffer[0] ) free( p_sys->pp_buffer[0] );
- if( p_sys->pp_buffer[1] ) free( p_sys->pp_buffer[1] );
+ free( p_sys->pp_buffer[0] );
+ free( p_sys->pp_buffer[1] );
if( p_sys->p_vout->pf_unlock )
{
module_Unneed( p_sys->p_vout, p_sys->p_vout->p_module );
vlc_object_detach( p_sys->p_vout );
- vlc_object_destroy( p_sys->p_vout );
+ vlc_object_release( p_sys->p_vout );
free( p_sys );
}
p_vout->i_changes = VOUT_CROP_CHANGE; //to force change
p_sys->p_vout->i_alignment = p_vout->i_alignment;
}
-
return i_ret;
}
*****************************************************************************/
static void Render( vout_thread_t *p_vout, picture_t *p_pic )
{
+ VLC_UNUSED(p_pic);
vout_sys_t *p_sys = p_vout->p_sys;
/* On Win32/GLX, we do this the usual way:
/*****************************************************************************
* Transform: Calculate the distorted grid coordinates
*****************************************************************************/
-static void Transform(float p, int distortion, float width, float height,int i, int j, int i_visible_width, int i_visible_height, double *ix,double *iy)
+static void Transform( int distortion, float width, float height,int i, int j, int i_visible_width, int i_visible_height, double *ix, double *iy )
{
double x,y,xnew,ynew;
double r,theta,rnew,thetanew;
*****************************************************************************/
static void DisplayVideo( vout_thread_t *p_vout, picture_t *p_pic )
{
+ VLC_UNUSED(p_pic);
vout_sys_t *p_sys = p_vout->p_sys;
float f_width, f_height, f_x, f_y;
int i_k = ((i_m % 4) == 1) || ((i_m % 4) == 2);
int i_l = ((i_m % 4) == 2) || ((i_m % 4) == 3);
- Transform(f_p, i_distortion, f_width, f_height, i_i + i_k * i_n_x, i_j + i_l * i_n_y, p_vout->fmt_out.i_visible_width, p_vout->fmt_out.i_visible_height, &d_x, &d_y);
+ Transform( i_distortion, f_width, f_height, i_i + i_k * i_n_x, i_j + i_l * i_n_y, p_vout->fmt_out.i_visible_width, p_vout->fmt_out.i_visible_height, &d_x, &d_y);
glTexCoord2f(f_x + d_x, f_y + d_y);
d_x = - 1.0 + 2.0 * ((double)(i_k * i_n_x + i_i) / (double)p_vout->fmt_out.i_visible_width);
d_y = 1.0 - 2.0 * (((double)i_l * i_n_y + i_j) / (double)p_vout->fmt_out.i_visible_height);
static int SendEvents( vlc_object_t *p_this, char const *psz_var,
vlc_value_t oldval, vlc_value_t newval, void *_p_vout )
{
+ VLC_UNUSED(p_this); VLC_UNUSED(oldval);
return var_Set( (vlc_object_t *)_p_vout, psz_var, newval );
}