public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in media-sound/banshee/files: banshee-1.5.5-volume-reset-fix.patch banshee-1.5.5-volume-slider-fix.patch
@ 2010-03-17 18:58 Arun Raghavan (ford_prefect)
  0 siblings, 0 replies; only message in thread
From: Arun Raghavan (ford_prefect) @ 2010-03-17 18:58 UTC (permalink / raw
  To: gentoo-commits

ford_prefect    10/03/17 18:58:32

  Added:                banshee-1.5.5-volume-reset-fix.patch
                        banshee-1.5.5-volume-slider-fix.patch
  Log:
  Bump to 1.5.5 (1.6 RC1). Drops some flags in favour of depending on gst-plugins-meta, makes CD ripping support optional, and adds USE-flag controlled support for the Youtube plugin.
  (Portage version: 2.2_rc67/cvs/Linux x86_64)

Revision  Changes    Path
1.1                  media-sound/banshee/files/banshee-1.5.5-volume-reset-fix.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/media-sound/banshee/files/banshee-1.5.5-volume-reset-fix.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/media-sound/banshee/files/banshee-1.5.5-volume-reset-fix.patch?rev=1.1&content-type=text/plain

Index: banshee-1.5.5-volume-reset-fix.patch
===================================================================
diff --git a/libbanshee/banshee-player-pipeline.c b/libbanshee/banshee-player-pipeline.c
index 376300a..90b968d 100644
--- a/libbanshee/banshee-player-pipeline.c
+++ b/libbanshee/banshee-player-pipeline.c
@@ -234,6 +234,19 @@ static void bp_about_to_finish_callback (GstElement *playbin, BansheePlayer *pla
 }
 #endif //ENABLE_GAPLESS
 
+static void bp_volume_changed_callback (GstElement *playbin, GParamSpec *spec, BansheePlayer *player)
+{
+    g_return_if_fail (IS_BANSHEE_PLAYER (player));
+    g_return_if_fail (GST_IS_ELEMENT (playbin));
+
+    gdouble volume;
+    g_object_get (G_OBJECT (playbin), "volume", &volume, NULL);
+
+    if (player->volume_changed_cb != NULL) {
+        player->volume_changed_cb (player, volume);
+    }
+}
+
 // ---------------------------------------------------------------------------
 // Internal Functions
 // ---------------------------------------------------------------------------
@@ -262,6 +275,8 @@ _bp_pipeline_construct (BansheePlayer *player)
 
     g_return_val_if_fail (player->playbin != NULL, FALSE);
 
+    g_signal_connect (player->playbin, "notify::volume", G_CALLBACK (bp_volume_changed_callback), player);
+
     // Try to find an audio sink, prefer gconf, which typically is set to auto these days,
     // fall back on auto, which should work on windows, and as a last ditch, try alsa
     audiosink = gst_element_factory_make ("gconfaudiosink", "audiosink");
diff --git a/libbanshee/banshee-player-private.h b/libbanshee/banshee-player-private.h
index 1edd375..68c6bf4 100644
--- a/libbanshee/banshee-player-private.h
+++ b/libbanshee/banshee-player-private.h
@@ -79,6 +79,7 @@ typedef void (* BansheePlayerVisDataCallback)      (BansheePlayer *player, gint
 typedef void (* BansheePlayerNextTrackStartingCallback)     (BansheePlayer *player);
 typedef void (* BansheePlayerAboutToFinishCallback)         (BansheePlayer *player);
 typedef GstElement * (* BansheePlayerVideoPipelineSetupCallback) (BansheePlayer *player, GstBus *bus);
+typedef void (* BansheePlayerVolumeChangedCallback) (BansheePlayer *player, gdouble new_volume);
 
 typedef enum {
     BP_VIDEO_DISPLAY_CONTEXT_UNSUPPORTED = 0,
@@ -98,6 +99,7 @@ struct BansheePlayer {
     BansheePlayerNextTrackStartingCallback next_track_starting_cb;
     BansheePlayerAboutToFinishCallback about_to_finish_cb;
     BansheePlayerVideoPipelineSetupCallback video_pipeline_setup_cb;
+    BansheePlayerVolumeChangedCallback volume_changed_cb;
 
     // Pipeline Elements
     GstElement *playbin;
@@ -113,7 +115,6 @@ struct BansheePlayer {
     gboolean   rgvolume_in_pipeline;
 
     gint equalizer_status;
-    gdouble current_volume;
     
     // Pipeline/Playback State
     GMutex *mutex;
diff --git a/libbanshee/banshee-player-replaygain.c b/libbanshee/banshee-player-replaygain.c
index 238333b..8c870f1 100644
--- a/libbanshee/banshee-player-replaygain.c
+++ b/libbanshee/banshee-player-replaygain.c
@@ -165,12 +165,14 @@ void _bp_rgvolume_print_volume(BansheePlayer *player)
     g_return_if_fail (IS_BANSHEE_PLAYER (player));
     if (player->replaygain_enabled && (player->rgvolume != NULL)) {
         gdouble scale;
+        gdouble volume;
 
         g_object_get (G_OBJECT (player->rgvolume), "result-gain", &scale, NULL);
+        g_object_get (G_OBJECT (player->playbin), "volume", &volume, NULL);
 
         bp_debug ("scaled volume: %.2f (ReplayGain) * %.2f (User) = %.2f",
-                  bp_replaygain_db_to_linear (scale), player->current_volume,
-                  bp_replaygain_db_to_linear (scale) * player->current_volume);
+                  bp_replaygain_db_to_linear (scale), volume,
+                  bp_replaygain_db_to_linear (scale) * volume);
     }
 }
 
diff --git a/libbanshee/banshee-player.c b/libbanshee/banshee-player.c
index 2c0cfb0..28266aa 100644
--- a/libbanshee/banshee-player.c
+++ b/libbanshee/banshee-player.c
@@ -299,8 +299,7 @@ bp_set_volume (BansheePlayer *player, gdouble volume)
     g_return_if_fail (IS_BANSHEE_PLAYER (player));
     g_return_if_fail (GST_IS_ELEMENT (player->playbin));
 
-    player->current_volume = CLAMP (volume, 0.0, 1.0);
-    g_object_set (player->playbin, "volume", player->current_volume, NULL);
+    g_object_set (player->playbin, "volume", CLAMP (volume, 0.0, 1.0), NULL);
     _bp_rgvolume_print_volume (player);
 }
 
@@ -308,7 +307,16 @@ P_INVOKE gdouble
 bp_get_volume (BansheePlayer *player)
 {
     g_return_val_if_fail (IS_BANSHEE_PLAYER (player), 0.0);
-    return player->current_volume;
+    g_return_val_if_fail (GST_IS_ELEMENT (player->playbin), 0.0);
+    gdouble volume;
+    g_object_get (player->playbin, "volume", &volume, NULL);
+    return volume;
+}
+
+P_INVOKE void
+bp_set_volume_changed_callback (BansheePlayer *player, BansheePlayerVolumeChangedCallback cb)
+{
+    SET_CALLBACK (volume_changed_cb);
 }
 
 P_INVOKE gboolean
diff --git a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
index 1a48c63..3d203bd 100644
--- a/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
+++ b/src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
@@ -61,6 +61,7 @@ namespace Banshee.GStreamer
     internal delegate void BansheePlayerNextTrackStartingCallback (IntPtr player);
     internal delegate void BansheePlayerAboutToFinishCallback (IntPtr player);
     internal delegate IntPtr VideoPipelineSetupHandler (IntPtr player, IntPtr bus);
+    internal delegate void BansheePlayerVolumeChangedCallback (IntPtr player, double newVolume);
 
     internal delegate void GstTaggerTagFoundCallback (IntPtr player, string tagName, ref GLib.Value value);
 
@@ -76,7 +77,6 @@ namespace Banshee.GStreamer
         private uint GST_STREAM_ERROR = 0;
 
         private HandleRef handle;
-        private bool initialized;
 
         private BansheePlayerEosCallback eos_callback;
         private BansheePlayerErrorCallback error_callback;
@@ -88,12 +88,12 @@ namespace Banshee.GStreamer
         private GstTaggerTagFoundCallback tag_found_callback;
         private BansheePlayerNextTrackStartingCallback next_track_starting_callback;
         private BansheePlayerAboutToFinishCallback about_to_finish_callback;
+        private BansheePlayerVolumeChangedCallback volume_changed_callback;
 
         private bool next_track_pending;
         private SafeUri pending_uri;
 
         private bool buffering_finished;
-        private int pending_volume = -1;
         private bool xid_is_set = false;
 
         private bool gapless_enabled;
@@ -152,6 +152,7 @@ namespace Banshee.GStreamer
             tag_found_callback = new GstTaggerTagFoundCallback (OnTagFound);
             next_track_starting_callback = new BansheePlayerNextTrackStartingCallback (OnNextTrackStarting);
             about_to_finish_callback = new BansheePlayerAboutToFinishCallback (OnAboutToFinish);
+            volume_changed_callback = new BansheePlayerVolumeChangedCallback (OnVolumeChanged);
             bp_set_eos_callback (handle, eos_callback);
 #if !WIN32
             bp_set_iterate_callback (handle, iterate_callback);
@@ -162,6 +163,7 @@ namespace Banshee.GStreamer
             bp_set_tag_found_callback (handle, tag_found_callback);
             bp_set_next_track_starting_callback (handle, next_track_starting_callback);
             bp_set_video_pipeline_setup_callback (handle, video_pipeline_setup_callback);
+            bp_set_volume_changed_callback (handle, volume_changed_callback);
 
             next_track_set = new EventWaitHandle (false, EventResetMode.ManualReset);
         }
@@ -174,12 +176,9 @@ namespace Banshee.GStreamer
                 throw new ApplicationException (Catalog.GetString ("Could not initialize GStreamer library"));
             }
 
-            initialized = true;
             OnStateChanged (PlayerState.Ready);
 
-            if (pending_volume >= 0) {
-                Volume = (ushort)pending_volume;
-            }
+            Volume = (ushort)PlayerEngineService.VolumeSchema.Get ();
 
             InstallPreferences ();
             ReplayGainEnabled = ReplayGainEnabledSchema.Get ();
@@ -480,6 +479,11 @@ namespace Banshee.GStreamer
             }
         }
 
+        private void OnVolumeChanged (IntPtr player, double newVolume)
+        {
+            OnEventChanged (PlayerEvent.Volume);
+        }
+
         private static StreamTag ProcessNativeTagResult (string tagName, ref GLib.Value valueRaw)
         {
             if (tagName == String.Empty || tagName == null) {
@@ -508,11 +512,6 @@ namespace Banshee.GStreamer
         public override ushort Volume {
             get { return (ushort)Math.Round (bp_get_volume (handle) * 100.0); }
             set {
-                if (!initialized) {
-                    pending_volume = value;
-                    return;
-                }
-
                 bp_set_volume (handle, value / 100.0);
                 OnEventChanged (PlayerEvent.Volume);
             }
@@ -815,6 +814,10 @@ namespace Banshee.GStreamer
         private static extern double bp_get_volume (HandleRef player);
 
         [DllImport ("libbanshee.dll")]
+        private static extern void bp_set_volume_changed_callback (HandleRef player,
+            BansheePlayerVolumeChangedCallback cb);
+
+        [DllImport ("libbanshee.dll")]
         private static extern bool bp_can_seek (HandleRef player);
 
         [DllImport ("libbanshee.dll")]
diff --git a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
index 1d46a58..7e1c7f1 100644
--- a/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
+++ b/src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngineService.cs
@@ -196,7 +196,6 @@ namespace Banshee.MediaEngine
         private void HandleStateChange (PlayerEventStateChangeArgs args)
         {
             if (args.Current == PlayerState.Loaded && CurrentTrack != null) {
-                active_engine.Volume = (ushort) VolumeSchema.Get ();
                 MetadataService.Instance.Lookup (CurrentTrack);
             } else if (args.Current == PlayerState.Ready) {
                 // Enable our preferred equalizer if it exists and was enabled last time.
@@ -535,8 +534,8 @@ namespace Banshee.MediaEngine
 
         private void CheckPending ()
         {
-            if(pending_engine != null && pending_engine != active_engine) {
-                if(active_engine.CurrentState == PlayerState.Idle) {
+            if (pending_engine != null && pending_engine != active_engine) {
+                if (active_engine.CurrentState == PlayerState.Idle) {
                     Close ();
                 }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
index c34ddf4..f654244 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/ConnectedVolumeButton.cs
@@ -37,9 +37,11 @@ namespace Banshee.Gui.Widgets
     {
         private bool emit_lock = false;
 
-        public ConnectedVolumeButton () : base ()
+        public ConnectedVolumeButton () : base()
         {
+            emit_lock = true;
             Volume = PlayerEngineService.VolumeSchema.Get ();
+            emit_lock = false;
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.Volume);
         }
 
@@ -57,12 +59,13 @@ namespace Banshee.Gui.Widgets
 
         protected override void OnVolumeChanged ()
         {
+            PlayerEngineService.VolumeSchema.Set (Volume);
+
             if (emit_lock) {
                 return;
             }
 
             ServiceManager.PlayerEngine.Volume = (ushort)Volume;
-            PlayerEngineService.VolumeSchema.Set(Volume);
 
             base.OnVolumeChanged ();
         }



1.1                  media-sound/banshee/files/banshee-1.5.5-volume-slider-fix.patch

file : http://sources.gentoo.org/viewcvs.py/gentoo-x86/media-sound/banshee/files/banshee-1.5.5-volume-slider-fix.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewcvs.py/gentoo-x86/media-sound/banshee/files/banshee-1.5.5-volume-slider-fix.patch?rev=1.1&content-type=text/plain

Index: banshee-1.5.5-volume-slider-fix.patch
===================================================================
From 6c51f4e0adb8ca3a52f478553d10887c0eb256ec Mon Sep 17 00:00:00 2001
From: Arun Raghavan <arun.raghavan@collabora.co.uk>
Date: Wed, 17 Mar 2010 17:41:34 +0000
Subject: [PATCH] [libbanshee] Make the volume slider smooth with PulseAudio

PulseAudio maps linear stream volumes to "actual" volumes as a cubic
function. This change reflects that in the volume slider, making it feel
more natural. This also makes the slider values correspond to other
apps, such as GNOME volume preferences.

Ref: https://tango.0pointer.de/pipermail/pulseaudio-discuss/2009-May/003898.html
---
 libbanshee/banshee-player.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/libbanshee/banshee-player.c b/libbanshee/banshee-player.c
index 28266aa..d304ce8 100644
--- a/libbanshee/banshee-player.c
+++ b/libbanshee/banshee-player.c
@@ -31,6 +31,9 @@
 #include "banshee-player-cdda.h"
 #include "banshee-player-missing-elements.h"
 #include "banshee-player-replaygain.h"
+#if GST_CHECK_VERSION(0,10,25)
+#include <gst/interfaces/streamvolume.h>
+#endif
 
 // ---------------------------------------------------------------------------
 // Private Functions
@@ -299,7 +302,14 @@ bp_set_volume (BansheePlayer *player, gdouble volume)
     g_return_if_fail (IS_BANSHEE_PLAYER (player));
     g_return_if_fail (GST_IS_ELEMENT (player->playbin));
 
+#if GST_CHECK_VERSION(0,10,25)
+    if (gst_element_implements_interface (player->playbin, GST_TYPE_STREAM_VOLUME))
+      gst_stream_volume_set_volume (GST_STREAM_VOLUME (player->playbin), GST_STREAM_VOLUME_FORMAT_CUBIC, volume);
+    else
+      g_object_set (player->playbin, "volume", CLAMP (volume, 0.0, 1.0), NULL);
+#else
     g_object_set (player->playbin, "volume", CLAMP (volume, 0.0, 1.0), NULL);
+#endif
     _bp_rgvolume_print_volume (player);
 }
 
@@ -309,7 +319,14 @@ bp_get_volume (BansheePlayer *player)
     g_return_val_if_fail (IS_BANSHEE_PLAYER (player), 0.0);
     g_return_val_if_fail (GST_IS_ELEMENT (player->playbin), 0.0);
     gdouble volume;
+#if GST_CHECK_VERSION(0,10,25)
+    if (gst_element_implements_interface (player->playbin, GST_TYPE_STREAM_VOLUME))
+      volume = gst_stream_volume_get_volume (GST_STREAM_VOLUME (player->playbin), GST_STREAM_VOLUME_FORMAT_CUBIC);
+    else
+      g_object_get (player->playbin, "volume", &volume, NULL);
+#else
     g_object_get (player->playbin, "volume", &volume, NULL);
+#endif
     return volume;
 }
 
-- 
1.7.0.2







^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2010-03-17 18:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-17 18:58 [gentoo-commits] gentoo-x86 commit in media-sound/banshee/files: banshee-1.5.5-volume-reset-fix.patch banshee-1.5.5-volume-slider-fix.patch Arun Raghavan (ford_prefect)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox