vdpau: switch hue to float
authorRémi Denis-Courmont <remi@remlab.net>
Tue, 19 Aug 2014 18:56:01 +0000 (21:56 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Tue, 19 Aug 2014 19:00:36 +0000 (22:00 +0300)
modules/hw/vdpau/adjust.c

index d150579..0db8ee6 100644 (file)
@@ -84,19 +84,22 @@ static int SaturationCallback(vlc_object_t *obj, const char *varname,
     return VLC_SUCCESS;
 }
 
-static float vlc_to_vdp_hue(int hue)
+static float vlc_to_vdp_hue(float hue)
 {
-    hue %= 360;
-    if (hue > 180)
-        hue -= 360;
-    return (float)hue * (float)(M_PI / 180.);
+    float dummy;
+
+    hue /= 360.f;
+    hue = modff(hue, &dummy);
+    if (hue > .5f)
+        hue -= 1.f;
+    return hue * (float)(2. * M_PI);
 }
 
 static int HueCallback(vlc_object_t *obj, const char *varname,
                               vlc_value_t prev, vlc_value_t cur, void *data)
 {
 
-    vlc_atomic_store_float(data, vlc_to_vdp_hue(cur.i_int));
+    vlc_atomic_store_float(data, vlc_to_vdp_hue(cur.f_float));
     (void) obj; (void) varname; (void) prev;
     return VLC_SUCCESS;
 }
@@ -158,7 +161,7 @@ static int Open(vlc_object_t *obj)
                     &sys->saturation);
     vlc_atomic_init_float(&sys->saturation, vlc_to_vdp_saturation(f));
 
-    i = var_CreateGetIntegerCommand(filter, "hue");
+    i = var_CreateGetFloatCommand(filter, "hue");
     var_AddCallback(filter, "hue", HueCallback, &sys->hue);
     vlc_atomic_init_float(&sys->hue, vlc_to_vdp_hue(i));