+
+
+static int
+get_int( libvlc_media_player_t *p_mi, const char *restrict name,
+ const opt_t *restrict opt )
+{
+ if( !opt ) return 0;
+
+ switch( opt->type )
+ {
+ case 0: /* the enabler */
+ {
+ vlc_object_t *object = get_object( p_mi, name );
+ vlc_object_release( object );
+ return object != NULL;
+ }
+ case VLC_VAR_INTEGER:
+ return var_GetInteger(p_mi, opt->name);
+ default:
+ libvlc_printerr( "Invalid argument to %s in %s", name, "get int" );
+ return 0;
+ }
+}
+
+
+static void
+set_string( libvlc_media_player_t *p_mi, const char *restrict name,
+ const opt_t *restrict opt, const char *restrict psz_value )
+{
+ if( !opt ) return;
+
+ if( opt->type != VLC_VAR_STRING )
+ {
+ libvlc_printerr( "Invalid argument to %s in %s", name, "set string" );
+ return;
+ }
+
+ var_SetString( p_mi, opt->name, psz_value );
+
+ vlc_object_t *object = get_object( p_mi, name );
+ if( object )
+ {
+ var_SetString(object, opt->name, psz_value );
+ vlc_object_release( object );
+ }
+}
+
+
+static char *
+get_string( libvlc_media_player_t *p_mi, const char *restrict name,
+ const opt_t *restrict opt )
+{
+ if( !opt ) return NULL;
+
+ if( opt->type != VLC_VAR_STRING )
+ {
+ libvlc_printerr( "Invalid argument to %s in %s", name, "get string" );
+ return NULL;
+ }
+
+ return var_GetString( p_mi, opt->name );
+}
+
+
+static const opt_t *
+marq_option_bynumber(unsigned option)
+{
+ static const 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) };
+
+ opt_t *r = option < num_opts ? optlist+option : NULL;
+ if( !r )
+ libvlc_printerr( "Unknown marquee option" );
+ return r;
+}
+
+static vlc_object_t *get_object( libvlc_media_player_t *, const char *);
+
+/*****************************************************************************
+ * libvlc_video_get_marquee_int : get a marq option value
+ *****************************************************************************/
+int libvlc_video_get_marquee_int( libvlc_media_player_t *p_mi,
+ unsigned option )
+{
+ return get_int( p_mi, "marq", marq_option_bynumber(option) );
+}
+
+/*****************************************************************************
+ * libvlc_video_get_marquee_string : get a marq option value
+ *****************************************************************************/
+char * libvlc_video_get_marquee_string( libvlc_media_player_t *p_mi,
+ unsigned option )
+{
+ return get_string( p_mi, "marq", marq_option_bynumber(option) );
+}
+
+/*****************************************************************************
+ * 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 )
+{
+ set_int( p_mi, "marq", marq_option_bynumber(option), value );
+}
+
+/*****************************************************************************
+ * 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 )
+{
+ set_string( p_mi, "marq", marq_option_bynumber(option), value );
+}
+
+
+/* logo module support */
+
+
+static opt_t *
+logo_option_bynumber( unsigned option )
+{
+ static const opt_t vlogo_optlist[] =
+ /* depends on libvlc_video_logo_option_t */
+ {
+ { "logo", 0 },
+ { "logo-file", VLC_VAR_STRING },
+ { "logo-x", VLC_VAR_INTEGER },
+ { "logo-y", VLC_VAR_INTEGER },
+ { "logo-delay", VLC_VAR_INTEGER },
+ { "logo-repeat", VLC_VAR_INTEGER },
+ { "logo-opacity", VLC_VAR_INTEGER },
+ { "logo-position", VLC_VAR_INTEGER },
+ };
+ enum { num_vlogo_opts = sizeof(vlogo_optlist) / sizeof(*vlogo_optlist) };
+
+ opt_t *r = option < num_vlogo_opts ? vlogo_optlist+option : NULL;
+ if( !r )
+ libvlc_printerr( "Unknown logo option" );
+ return r;
+}
+
+
+void libvlc_video_set_logo_string( libvlc_media_player_t *p_mi,
+ unsigned option, const char *psz_value )
+{
+ set_string( p_mi,"logo",logo_option_bynumber(option),psz_value );
+}
+
+
+void libvlc_video_set_logo_int( libvlc_media_player_t *p_mi,
+ unsigned option, int value )
+{
+ set_int( p_mi, "logo", logo_option_bynumber(option), value );
+}
+
+
+int libvlc_video_get_logo_int( libvlc_media_player_t *p_mi,
+ unsigned option )
+{
+ return get_int( p_mi, "logo", logo_option_bynumber(option) );
+}
+
+