#include <vlc_vout.h>
#include "media_player_internal.h"
-#include <vlc_osd.h>
#include <assert.h>
/*
{
input_thread_t *p_input = libvlc_get_input_thread( p_mi );
if( !p_input )
+ {
+ *n = 0;
return NULL;
+ }
vout_thread_t **pp_vouts;
if (input_Control( p_input, INPUT_GET_VOUTS, &pp_vouts, n))
var_SetInteger( p_vout, "snapshot-height", i_height );
var_SetString( p_vout, "snapshot-path", psz_filepath );
var_SetString( p_vout, "snapshot-format", "png" );
- var_TriggerCallback (p_vout, "video-snapshot" );
+ var_TriggerCallback( p_vout, "video-snapshot" );
+ vlc_object_release( p_vout );
return 0;
}
{
if (f_scale != 0.)
var_SetFloat (p_mp, "scale", f_scale);
- var_SetBool (p_mp, "autoscale", f_scale != 0.);
+ var_SetBool (p_mp, "autoscale", f_scale == 0.);
/* Apply to current video outputs (if any) */
size_t n;
if (f_scale != 0.)
var_SetFloat (p_vout, "scale", f_scale);
- var_SetBool (p_mp, "autoscale", f_scale != 0.);
+ var_SetBool (p_vout, "autoscale", f_scale == 0.);
vlc_object_release (p_vout);
}
free (pp_vouts);
if( i_ret < 0 )
{
vlc_object_release( p_input_thread );
- libvlc_printerr( "Subtitle informations not found" );
+ libvlc_printerr( "Subtitle information not found" );
return -1;
}
for (size_t i = 0; i < n; i++)
{
vout_thread_t *p_vout = pp_vouts[i];
-
+ vlc_value_t val;
+
+ /* Make sure the geometry is in the choice list */
+ /* Earlier choices are removed to not grow a long list over time. */
+ /* FIXME: not atomic - lock? */
+ val.psz_string = (char *)psz_geometry;
+ var_Change (p_vout, "crop", VLC_VAR_CLEARCHOICES, NULL, NULL);
+ var_Change (p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &val);
var_SetString (p_vout, "crop", psz_geometry);
vlc_object_release (p_vout);
}
if (psz_mode == NULL)
psz_mode = "";
if (*psz_mode
- && strcmp (psz_mode, "blend") && strcmp (psz_mode, "bob")
- && strcmp (psz_mode, "discard") && strcmp (psz_mode, "linear")
- && strcmp (psz_mode, "mean") && strcmp (psz_mode, "x")
- && strcmp (psz_mode, "yadif") && strcmp (psz_mode, "yadif2x"))
+ && strcmp (psz_mode, "blend") && strcmp (psz_mode, "bob")
+ && strcmp (psz_mode, "discard") && strcmp (psz_mode, "linear")
+ && strcmp (psz_mode, "mean") && strcmp (psz_mode, "x")
+ && strcmp (psz_mode, "yadif") && strcmp (psz_mode, "yadif2x")
+ && strcmp (psz_mode, "phosphor") && strcmp (psz_mode, "ivtc"))
return;
if (*psz_mode)
if( vout )
{
- object = vlc_object_find_name( vout, name, FIND_CHILD );
+ object = vlc_object_find_name( vout, name );
vlc_object_release(vout);
}
else
}
+static void
+set_float( libvlc_media_player_t *p_mi, const char *restrict name,
+ const opt_t *restrict opt, float value )
+{
+ if( !opt ) return;
+
+ if( opt->type != VLC_VAR_FLOAT )
+ {
+ libvlc_printerr( "Invalid argument to %s in %s", name, "set float" );
+ return;
+ }
+
+ var_SetFloat( p_mi, opt->name, value );
+
+ vlc_object_t *object = get_object( p_mi, name );
+ if( object )
+ {
+ var_SetFloat(object, opt->name, value );
+ vlc_object_release( object );
+ }
+}
+
+
+static float
+get_float( libvlc_media_player_t *p_mi, const char *restrict name,
+ const opt_t *restrict opt )
+{
+ if( !opt ) return 0.0;
+
+
+ if( opt->type != VLC_VAR_FLOAT )
+ {
+ libvlc_printerr( "Invalid argument to %s in %s", name, "get float" );
+ return 0.0;
+ }
+
+ return var_GetFloat( p_mi, opt->name );
+}
+
+
static void
set_string( libvlc_media_player_t *p_mi, const char *restrict name,
const opt_t *restrict opt, const char *restrict psz_value )
};
enum { num_opts = sizeof(optlist) / sizeof(*optlist) };
- opt_t *r = option < num_opts ? optlist+option : NULL;
+ const opt_t *r = option < num_opts ? optlist+option : NULL;
if( !r )
libvlc_printerr( "Unknown marquee option" );
return r;
/* logo module support */
-static opt_t *
+static const opt_t *
logo_option_bynumber( unsigned option )
{
static const opt_t vlogo_optlist[] =
};
enum { num_vlogo_opts = sizeof(vlogo_optlist) / sizeof(*vlogo_optlist) };
- opt_t *r = option < num_vlogo_opts ? vlogo_optlist+option : NULL;
+ const opt_t *r = option < num_vlogo_opts ? vlogo_optlist+option : NULL;
if( !r )
libvlc_printerr( "Unknown logo option" );
return r;
}
+/* adjust module support */
+
+
+static const opt_t *
+adjust_option_bynumber( unsigned option )
+{
+ static const opt_t optlist[] =
+ {
+ { "adjust", 0 },
+ { "contrast", VLC_VAR_FLOAT },
+ { "brightness", VLC_VAR_FLOAT },
+ { "hue", VLC_VAR_INTEGER },
+ { "saturation", VLC_VAR_FLOAT },
+ { "gamma", VLC_VAR_FLOAT },
+ };
+ enum { num_opts = sizeof(optlist) / sizeof(*optlist) };
+
+ const opt_t *r = option < num_opts ? optlist+option : NULL;
+ if( !r )
+ libvlc_printerr( "Unknown adjust option" );
+ return r;
+}
+
+
+void libvlc_video_set_adjust_int( libvlc_media_player_t *p_mi,
+ unsigned option, int value )
+{
+ set_int( p_mi, "adjust", adjust_option_bynumber(option), value );
+}
+
+
+int libvlc_video_get_adjust_int( libvlc_media_player_t *p_mi,
+ unsigned option )
+{
+ return get_int( p_mi, "adjust", adjust_option_bynumber(option) );
+}
+
+
+void libvlc_video_set_adjust_float( libvlc_media_player_t *p_mi,
+ unsigned option, float value )
+{
+ set_float( p_mi, "adjust", adjust_option_bynumber(option), value );
+}
+
+
+float libvlc_video_get_adjust_float( libvlc_media_player_t *p_mi,
+ unsigned option )
+{
+ return get_float( p_mi, "adjust", adjust_option_bynumber(option) );
+}