From da87f0fe504c5c4126b6bed5f7c660ddf42d4a54 Mon Sep 17 00:00:00 2001 From: JP Dinger Date: Tue, 26 Jan 2010 16:06:14 +0100 Subject: [PATCH] Refactor libvlc_video_{get,set}_{marquee,logo}_{int,string}. --- include/vlc/libvlc_media_player.h | 25 +- src/control/video.c | 395 +++++++++++++----------------- 2 files changed, 182 insertions(+), 238 deletions(-) diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index 2897f07cc9..6b248fbbee 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -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 diff --git a/src/control/video.c b/src/control/video.c index 4f81e60cf5..3cec002964 100644 --- a/src/control/video.c +++ b/src/control/video.c @@ -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; -} -- 2.39.2