Commit da87f0fe authored by JP Dinger's avatar JP Dinger

Refactor libvlc_video_{get,set}_{marquee,logo}_{int,string}.

parent 3a6c32a6
......@@ -81,10 +81,11 @@ typedef struct libvlc_rectangle_t
} libvlc_rectangle_t;
/**
* Marq int options definition
* Marq options definition
*/
typedef enum libvlc_video_marquee_int_option_t {
typedef enum libvlc_video_marquee_option_t {
libvlc_marquee_Enable = 0,
libvlc_marquee_Text, /** string argument */
libvlc_marquee_Color,
libvlc_marquee_Opacity,
libvlc_marquee_Position,
......@@ -93,15 +94,7 @@ typedef enum libvlc_video_marquee_int_option_t {
libvlc_marquee_Timeout,
libvlc_marquee_X,
libvlc_marquee_Y
} libvlc_video_marquee_int_option_t;
/**
* Marq string options definition
*/
typedef enum libvlc_video_marquee_string_option_t {
libvlc_marquee_Text = 0
} libvlc_video_marquee_string_option_t;
} libvlc_video_marquee_option_t;
/**
* Create an empty Media Player object
......@@ -807,7 +800,7 @@ VLC_PUBLIC_API void libvlc_video_set_deinterlace( libvlc_media_player_t *,
libvlc_exception_t *);
/**
* Get an integer option value
* Get an integer marquee option value
*
* \param p_mi libvlc media player
* \param option marq option to get \see libvlc_video_marquee_int_option_t
......@@ -817,7 +810,7 @@ VLC_PUBLIC_API int libvlc_video_get_marquee_int( libvlc_media_player_t *,
unsigned, libvlc_exception_t * );
/**
* Get a string option value
* Get a string marquee option value
*
* \param p_mi libvlc media player
* \param option marq option to get \see libvlc_video_marquee_string_option_t
......@@ -827,7 +820,7 @@ VLC_PUBLIC_API char *libvlc_video_get_marquee_string( libvlc_media_player_t *,
unsigned, libvlc_exception_t * );
/**
* Enable, disable or set an integer marq option
* Enable, disable or set an integer marquee option
*
* Setting libvlc_marquee_Enable has the side effect of enabling (arg !0)
* or disabling (arg 0) the marq filter.
......@@ -841,7 +834,7 @@ VLC_PUBLIC_API void libvlc_video_set_marquee_int( libvlc_media_player_t *,
unsigned, int, libvlc_exception_t * );
/**
* Set a marq string option
* Set a marquee string option
*
* \param p_mi libvlc media player
* \param option marq option to set \see libvlc_video_marquee_string_option_t
......@@ -851,6 +844,7 @@ VLC_PUBLIC_API void libvlc_video_set_marquee_int( libvlc_media_player_t *,
VLC_PUBLIC_API void libvlc_video_set_marquee_string( libvlc_media_player_t *,
unsigned, const char *, libvlc_exception_t * );
/** option values for libvlc_video_{get,set}_logo_{int,string} */
enum libvlc_video_logo_option_t {
libvlc_logo_enable,
libvlc_logo_file, /**< string argument, "file,d,t;file,d,t;..." */
......@@ -898,6 +892,7 @@ VLC_PUBLIC_API void libvlc_video_set_logo_int( libvlc_media_player_t *p_mi,
VLC_PUBLIC_API void libvlc_video_set_logo_string( libvlc_media_player_t *p_mi,
unsigned option, const char *psz_value, libvlc_exception_t *p_e );
/** @} video */
/** \defgroup libvlc_audio libvlc_audio
......
......@@ -572,215 +572,228 @@ void libvlc_video_set_deinterlace( libvlc_media_player_t *p_mi, int b_enable,
vlc_object_release( p_vout );
}
/*****************************************************************************
* Marquee: FIXME: That implementation has no persistent state and requires
* a vout
*****************************************************************************/
static const char *get_marquee_int_option_identifier(unsigned option)
{
static const char tab[][16] =
{
"marq",
"marq-color",
"marq-opacity",
"marq-position",
"marq-refresh",
"marq-size",
"marq-timeout",
"marq-x",
"marq-y",
};
if( option >= sizeof( tab ) / sizeof( tab[0] ) )
return NULL;
return tab[option];
}
/* ************** */
/* module helpers */
/* ************** */
static const char *get_marquee_string_option_identifier(unsigned option)
static vlc_object_t *get_object( libvlc_media_player_t * p_mi,
const char *name, libvlc_exception_t *p_e )
{
static const char tab[][16] =
vlc_object_t *object = NULL;
vout_thread_t *vout = GetVout( p_mi, p_e );
libvlc_exception_clear( p_e );
if( vout )
{
"marq-marquee",
};
if( option >= sizeof( tab ) / sizeof( tab[0] ) )
return NULL;
return tab[option];
object = vlc_object_find_name( vout, name, FIND_CHILD );
vlc_object_release(vout);
}
if( !object )
{
libvlc_exception_raise( p_e );
libvlc_printerr( "%s not enabled", name );
}
return object;
}
static vlc_object_t *get_marquee_object( libvlc_media_player_t * p_mi )
{
libvlc_exception_t e;
libvlc_exception_init(&e);
vout_thread_t * vout = GetVout( p_mi, &e );
libvlc_exception_clear(&e);
if( !vout )
return NULL;
vlc_object_t * object = vlc_object_find_name( vout, "marq", FIND_CHILD );
vlc_object_release(vout);
return object;
}
typedef const struct {
const char name[20]; /* probably will become a const char * sometime */
unsigned type;
} opt_t;
/*****************************************************************************
* libvlc_video_get_marquee_int : get a marq option value
*****************************************************************************/
int libvlc_video_get_marquee_int( libvlc_media_player_t *p_mi,
unsigned option, libvlc_exception_t *p_e )
static void
set_int( libvlc_media_player_t *p_mi, const char *name,
const opt_t *opt, int value, libvlc_exception_t *p_e )
{
const char * identifier = get_marquee_int_option_identifier(option);
if(!identifier)
if( !opt ) return;
if( !opt->type ) /* the enabler */
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Unknown marquee option" );
return 0;
vout_thread_t *vout = GetVout( p_mi, p_e );
libvlc_exception_clear( p_e );
if (vout)
{
vout_EnableFilter( vout, opt->name, value, false );
vlc_object_release( vout );
}
return;
}
vlc_object_t * marquee = get_marquee_object(p_mi);
/* Handle the libvlc_marquee_Enable separately */
if(option == libvlc_marquee_Enable)
vlc_object_t *object = get_object( p_mi, name, p_e );
if( !object ) return;
switch( opt->type )
{
bool isEnabled = marquee != NULL;
vlc_object_release(marquee);
return isEnabled;
case VLC_VAR_INTEGER:
var_SetInteger(object, opt->name, value);
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Invalid argument for %s in %s", name, "set int" );
break;
}
vlc_object_release( object );
}
static int
get_int( libvlc_media_player_t *p_mi, const char *name,
const opt_t *opt, libvlc_exception_t *p_e )
{
if( !opt ) return 0;
/* Generic case */
if(!identifier)
vlc_object_t *object = get_object( p_mi, name, p_e );
if( !object ) return 0;
int ret;
switch( opt->type )
{
case 0: /* the enabler */
ret = NULL != object;
break;
case VLC_VAR_INTEGER:
ret = var_GetInteger(object, opt->name);
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Marquee not enabled" );
return 0;
libvlc_printerr( "Invalid argument for %s in %s", name, "get int" );
ret = 0;
break;
}
#warning This and the next function may crash due to type checking!
int ret = var_GetInteger(marquee, identifier);
vlc_object_release(marquee);
vlc_object_release( object );
return ret;
}
/*****************************************************************************
* libvlc_video_get_marquee_string : get a marq option value
*****************************************************************************/
char * libvlc_video_get_marquee_string( libvlc_media_player_t *p_mi,
unsigned option, libvlc_exception_t *p_e )
static void
set_string( libvlc_media_player_t *p_mi, const char *name, const opt_t *opt,
const char *psz_value, libvlc_exception_t *p_e )
{
const char * identifier = get_marquee_string_option_identifier(option);
if(!identifier)
if( !opt ) return;
vlc_object_t *object = get_object( p_mi, name, p_e );
if( !object ) return;
switch( opt->type )
{
case VLC_VAR_STRING:
var_SetString( object, opt->name, psz_value );
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Unknown marquee option" );
return NULL;
libvlc_printerr( "Invalid argument for %s in %s", name, "set string" );
break;
}
vlc_object_release( object );
}
vlc_object_t * marquee = get_marquee_object(p_mi);
if(!marquee)
static char *
get_string( libvlc_media_player_t *p_mi, const char *name,
const opt_t *opt, libvlc_exception_t *p_e )
{
if( !opt ) return NULL;
vlc_object_t *object = get_object( p_mi, name, p_e );
if( !object ) return NULL;
char *ret;
switch( opt->type )
{
case VLC_VAR_STRING:
ret = var_GetString( object, opt->name );
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Marquee not enabled" );
return NULL;
libvlc_printerr( "Invalid argument for %s in %s", name, "get string" );
ret = NULL;
break;
}
char *ret = var_GetString(marquee, identifier);
vlc_object_release(marquee);
vlc_object_release( object );
return ret;
}
/*****************************************************************************
* libvlc_video_set_marquee_int: enable, disable or set an int option
* Marquee: FIXME: That implementation has no persistent state and requires
* a vout
*****************************************************************************/
void libvlc_video_set_marquee_int( libvlc_media_player_t *p_mi,
unsigned option, int value, libvlc_exception_t *p_e )
{
const char * identifier = get_marquee_int_option_identifier(option);
if(!identifier)
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Unknown marquee option" );
return;
}
/* Handle the libvlc_marquee_Enable separately */
if(option == libvlc_marquee_Enable)
{
libvlc_exception_t e;
libvlc_exception_init(&e);
vout_thread_t * vout = GetVout( p_mi, &e );
libvlc_exception_clear(&e);
if (vout)
{
vout_EnableFilter(vout, identifier, value, false);
vlc_object_release(vout);
}
return;
}
static const opt_t *
marq_option_bynumber(unsigned option, libvlc_exception_t *p_e)
{
opt_t optlist[] =
{
{ "marq", 0 },
{ "marq-marquee", VLC_VAR_STRING },
{ "marq-color", VLC_VAR_INTEGER },
{ "marq-opacity", VLC_VAR_INTEGER },
{ "marq-position", VLC_VAR_INTEGER },
{ "marq-refresh", VLC_VAR_INTEGER },
{ "marq-size", VLC_VAR_INTEGER },
{ "marq-timeout", VLC_VAR_INTEGER },
{ "marq-x", VLC_VAR_INTEGER },
{ "marq-y", VLC_VAR_INTEGER },
};
enum { num_opts = sizeof(optlist) / sizeof(*optlist) };
vlc_object_t * marquee = get_marquee_object(p_mi);
if(!marquee)
opt_t *r = option < num_opts ? optlist+option : NULL;
if( !r )
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Marquee not enabled" );
return;
libvlc_printerr( "Unknown marquee option" );
}
var_SetInteger(marquee, identifier, value);
vlc_object_release(marquee);
return r;
}
static vlc_object_t *get_object( libvlc_media_player_t *,
const char *, libvlc_exception_t *);
/*****************************************************************************
* libvlc_video_set_marquee_string: set a string option
* libvlc_video_get_marquee_int : get a marq option value
*****************************************************************************/
void libvlc_video_set_marquee_string( libvlc_media_player_t *p_mi,
unsigned option, const char * value, libvlc_exception_t *p_e )
int libvlc_video_get_marquee_int( libvlc_media_player_t *p_mi,
unsigned option, libvlc_exception_t *p_e )
{
const char * identifier = get_marquee_string_option_identifier(option);
if(!identifier)
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Unknown marquee option" );
return;
}
vlc_object_t * marquee = get_marquee_object(p_mi);
if(!marquee)
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Marquee not enabled" );
return;
}
var_SetString(marquee, identifier, value);
vlc_object_release(marquee);
return get_int( p_mi, "marq", marq_option_bynumber(option,p_e), p_e );
}
/*****************************************************************************
* libvlc_video_get_marquee_string : get a marq option value
*****************************************************************************/
char * libvlc_video_get_marquee_string( libvlc_media_player_t *p_mi,
unsigned option, libvlc_exception_t *p_e )
{
return get_string( p_mi, "marq", marq_option_bynumber(option,p_e), p_e );
}
/* logo module support */
/*****************************************************************************
* libvlc_video_set_marquee_int: enable, disable or set an int option
*****************************************************************************/
void libvlc_video_set_marquee_int( libvlc_media_player_t *p_mi,
unsigned option, int value, libvlc_exception_t *p_e )
{
set_int( p_mi, "marq", marq_option_bynumber(option,p_e), value, p_e );
}
static vlc_object_t *get_logo_object( libvlc_media_player_t * p_mi,
libvlc_exception_t *p_e )
/*****************************************************************************
* libvlc_video_set_marquee_string: set a string option
*****************************************************************************/
void libvlc_video_set_marquee_string( libvlc_media_player_t *p_mi,
unsigned option, const char * value, libvlc_exception_t *p_e )
{
vlc_object_t *object = NULL;
vout_thread_t *vout = GetVout( p_mi, p_e );
libvlc_exception_clear( p_e );
if( vout )
{
object = vlc_object_find_name( vout, "logo", FIND_CHILD );
vlc_object_release(vout);
}
if( !object )
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Logo not enabled" );
}
return object;
set_string( p_mi, "marq", marq_option_bynumber(option,p_e), value, p_e );
}
typedef const struct vlogo_opt {
const char name[16];
unsigned type;
} vlogo_opt_t;
/* logo module support */
static vlogo_opt_t *
static opt_t *
logo_option_bynumber( unsigned option, libvlc_exception_t *p_e )
{
# define CFG_PREFIX "logo-"
vlogo_opt_t vlogo_optlist[] = /* depends on libvlc_video_logo_option_t */
opt_t vlogo_optlist[] = /* depends on libvlc_video_logo_option_t */
{
{ "logo", 0 },
{ "logo-file", VLC_VAR_STRING },
......@@ -791,14 +804,13 @@ logo_option_bynumber( unsigned option, libvlc_exception_t *p_e )
{ "logo-opacity", VLC_VAR_INTEGER },
{ "logo-position", VLC_VAR_INTEGER },
};
# undef CFG_PREFIX
enum { num_vlogo_opts = sizeof(vlogo_optlist) / sizeof(*vlogo_optlist) };
vlogo_opt_t *r = option < num_vlogo_opts ? vlogo_optlist+option : NULL;
opt_t *r = option < num_vlogo_opts ? vlogo_optlist+option : NULL;
if( !r )
{
libvlc_exception_raise( p_e );
libvlc_printerr( "Unknown marquee option" );
libvlc_printerr( "Unknown logo option" );
}
return r;
}
......@@ -808,22 +820,7 @@ void libvlc_video_set_logo_string( libvlc_media_player_t *p_mi,
unsigned option, const char *psz_value,
libvlc_exception_t *p_e )
{
vlogo_opt_t *opt = logo_option_bynumber( option, p_e );
if( !opt ) return;
vlc_object_t *logo = get_logo_object( p_mi, p_e );
if( !logo ) return;
switch( opt->type )
{
case VLC_VAR_STRING:
var_SetString( logo, opt->name, psz_value );
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Invalid argument" );
break;
}
vlc_object_release(logo);
set_string( p_mi,"logo",logo_option_bynumber(option,p_e),psz_value,p_e );
}
......@@ -831,62 +828,14 @@ void libvlc_video_set_logo_int( libvlc_media_player_t *p_mi,
unsigned option, int value,
libvlc_exception_t *p_e )
{
vlogo_opt_t *opt = logo_option_bynumber( option, p_e );
if( !opt ) return;
if( !opt->type ) /* libvlc_logo_enable */
{
vout_thread_t *vout = GetVout( p_mi, p_e );
libvlc_exception_clear( p_e );
if (vout)
{
vout_EnableFilter(vout, opt->name, value, false);
vlc_object_release(vout);
}
return;
}
vlc_object_t *logo = get_logo_object( p_mi, p_e );
if( !logo ) return;
switch( opt->type )
{
case VLC_VAR_INTEGER:
var_SetInteger(logo, opt->name, value);
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Invalid argument" );
break;
}
vlc_object_release(logo);
set_int( p_mi, "logo", logo_option_bynumber(option, p_e), value, p_e );
}
int libvlc_video_get_logo_int( libvlc_media_player_t *p_mi,
unsigned option, libvlc_exception_t *p_e )
{
vlogo_opt_t *opt = logo_option_bynumber( option, p_e );
if( !opt ) return 0;
return get_int( p_mi, "logo", logo_option_bynumber(option,p_e), p_e );
}
vlc_object_t *logo = get_logo_object( p_mi, p_e );
if( !logo ) return 0;
int ret;
switch( opt->type )
{
case 0: /* libvlc_logo_enable */
ret = NULL != logo;
break;
case VLC_VAR_INTEGER:
ret = var_GetInteger(logo, opt->name);
break;
default:
libvlc_exception_raise( p_e );
libvlc_printerr( "Invalid argument" );
ret = 0;
break;
}
vlc_object_release(logo);
return ret;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment