]> git.sesse.net Git - vlc/blobdiff - src/control/video.c
Fix libvlc_video_set_scale()
[vlc] / src / control / video.c
index db90825c92744bdd3e4bbbbe25e959f900f6146b..ea10304fb7a02342e3a3a3531812557f446ca4f5 100644 (file)
@@ -38,7 +38,6 @@
 #include <vlc_vout.h>
 
 #include "media_player_internal.h"
-#include <vlc_osd.h>
 #include <assert.h>
 
 /*
@@ -158,6 +157,7 @@ libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num,
 int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num,
                            unsigned *restrict px, unsigned *restrict py )
 {
+#if 0
     vout_thread_t *p_vout = GetVout (p_mi, num);
     if (p_vout == NULL)
         return -1;
@@ -166,6 +166,9 @@ int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num,
     *py = p_vout->i_window_width;
     vlc_object_release (p_vout);
     return 0;
+#else
+    return -1;
+#endif
 }
 
 int libvlc_video_get_height( libvlc_media_player_t *p_mi )
@@ -187,14 +190,13 @@ int libvlc_video_get_width( libvlc_media_player_t *p_mi )
 }
 
 int libvlc_video_get_cursor( libvlc_media_player_t *mp, unsigned num,
-                             int *px, int *py )
+                             int *restrict px, int *restrict py )
 {
     vout_thread_t *p_vout = GetVout (mp, num);
     if (p_vout == NULL)
         return -1;
 
-    *px = var_GetInteger (p_vout, "mouse-x");
-    *py = var_GetInteger (p_vout, "mouse-y");
+    var_GetCoords (p_vout, "mouse-moved", px, py);
     vlc_object_release (p_vout);
     return 0;
 }
@@ -221,7 +223,7 @@ void libvlc_video_set_scale( libvlc_media_player_t *p_mp, float f_scale )
 {
     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;
@@ -232,7 +234,7 @@ void libvlc_video_set_scale( libvlc_media_player_t *p_mp, float f_scale )
 
         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);
@@ -669,6 +671,46 @@ get_int( libvlc_media_player_t *p_mi, const char *restrict name,
 }
 
 
+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 )
@@ -726,7 +768,7 @@ marq_option_bynumber(unsigned option)
     };
     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;
@@ -774,7 +816,7 @@ void libvlc_video_set_marquee_string( libvlc_media_player_t *p_mi,
 /* logo module support */
 
 
-static opt_t *
+static const opt_t *
 logo_option_bynumber( unsigned option )
 {
     static const opt_t vlogo_optlist[] =
@@ -791,7 +833,7 @@ logo_option_bynumber( unsigned option )
     };
     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;
@@ -819,3 +861,53 @@ int libvlc_video_get_logo_int( libvlc_media_player_t *p_mi,
 }
 
 
+/* 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) );
+}