[gthumb] media player: smoother volume change
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] media player: smoother volume change
- Date: Wed, 1 Apr 2015 11:48:35 +0000 (UTC)
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]