[gthumb] media player: smoother volume change



commit 9a60752f0ea02c0b8636867aa4469226106f6ea5
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Wed Apr 1 13:42:22 2015 +0200

    media player: smoother volume change
    
    use a cubic scale when in [0,1] and a linear scale in [1,inf)

 extensions/gstreamer_tools/data/ui/mediabar.ui     |    9 +++---
 extensions/gstreamer_tools/gth-media-viewer-page.c |   28 ++++++++++++++-----
 2 files changed, 25 insertions(+), 12 deletions(-)
---
diff --git a/extensions/gstreamer_tools/data/ui/mediabar.ui b/extensions/gstreamer_tools/data/ui/mediabar.ui
index 9cca9f0..2faf89d 100644
--- a/extensions/gstreamer_tools/data/ui/mediabar.ui
+++ b/extensions/gstreamer_tools/data/ui/mediabar.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.1 -->
+<!-- Generated with glade 3.18.3 -->
 <interface>
   <requires lib="gtk+" version="3.0"/>
   <object class="GtkAdjustment" id="position_adjustment">
@@ -8,9 +8,10 @@
     <property name="page_increment">10</property>
   </object>
   <object class="GtkAdjustment" id="volume_adjustment">
-    <property name="upper">50</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
+    <property name="upper">1.5</property>
+    <property name="value">1</property>
+    <property name="step_increment">0.10000000000000001</property>
+    <property name="page_increment">0.10000000000000001</property>
   </object>
   <object class="GtkBox" id="mediabar">
     <property name="visible">True</property>
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c 
b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 3ec58d7..74b12ca 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -56,7 +56,6 @@ struct _GthMediaViewerPagePrivate {
        gboolean        visible;
        gboolean        playing;
        gboolean        paused;
-       gdouble         last_volume;
        gint64          duration;
        int             video_fps_n;
        int             video_fps_d;
@@ -293,12 +292,19 @@ volume_value_changed_cb (GtkAdjustment *adjustment,
                         gpointer       user_data)
 {
        GthMediaViewerPage *self = user_data;
+       double              v;
 
-       if (self->priv->playbin != NULL)
-               g_object_set (self->priv->playbin,
-                             "volume",
-                             gtk_adjustment_get_value (adjustment) / 100.0,
-                             NULL);
+       if (self->priv->playbin == NULL)
+               return;
+
+       /* cubic in [0,1], linear in [1,2] */
+       v = gtk_adjustment_get_value (adjustment);
+       if (v <= 1.0)
+               v = (v * v * v);
+
+       g_object_set (self->priv->playbin,
+                     "volume", v,
+                     NULL);
 }
 
 
@@ -514,7 +520,7 @@ play_faster_button_clicked_cb (GtkButton *button,
 static gboolean
 update_volume_from_playbin (GthMediaViewerPage *self)
 {
-       double volume;
+       double volume, v;
 
        if (self->priv->update_volume_id != 0) {
                g_source_remove (self->priv->update_volume_id);
@@ -526,8 +532,14 @@ update_volume_from_playbin (GthMediaViewerPage *self)
 
        g_object_get (self->priv->playbin, "volume", &volume, NULL);
 
+       /* cubic in [0,1], linear in [1,2] */
+       if (volume <= 1.0)
+               v = exp (1.0 / 3.0 * log (volume)); /* cube root of volume */
+       else
+               v = volume;
+
        g_signal_handlers_block_by_func (GET_WIDGET ("volume_adjustment"), volume_value_changed_cb, self);
-       gtk_adjustment_set_value (GTK_ADJUSTMENT (GET_WIDGET ("volume_adjustment")), volume * 100.0);
+       gtk_adjustment_set_value (GTK_ADJUSTMENT (GET_WIDGET ("volume_adjustment")), v);
        g_signal_handlers_unblock_by_func (GET_WIDGET ("volume_adjustment"), volume_value_changed_cb, self);
 
        return FALSE;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]