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