[gnome-media] Fix crash on startup restoring the event-role stream



commit 44591b9a4dc3935f8f9bf02c16b19717b505fd3a
Author: Bastien Nocera <hadess hadess net>
Date:   Fri May 15 17:18:32 2009 +0100

    Fix crash on startup restoring the event-role stream
    
    The event-role stream is the only GvcMixerStream class that isn't
    attached to a sink or source per se, so, because of the recent
    volume changes by Lennart, we need to attach a fake channel map to it,
    so volume can be propagated.
---
 gnome-volume-control/src/gvc-mixer-control.c    |   16 ++++++++++++----
 gnome-volume-control/src/gvc-mixer-event-role.c |    4 +++-
 gnome-volume-control/src/gvc-mixer-event-role.h |    5 +++--
 3 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/gnome-volume-control/src/gvc-mixer-control.c b/gnome-volume-control/src/gvc-mixer-control.c
index a0816e3..d5a79f7 100644
--- a/gnome-volume-control/src/gvc-mixer-control.c
+++ b/gnome-volume-control/src/gvc-mixer-control.c
@@ -133,7 +133,7 @@ gvc_mixer_control_stream_restore_cb (pa_context *c,
 
         if (o == NULL) {
                 g_warning ("pa_ext_stream_restore_write() failed: %s",
-                	   pa_strerror (pa_context_errno (control->priv->pa_context)));
+                           pa_strerror (pa_context_errno (control->priv->pa_context)));
                 return;
         }
 
@@ -157,7 +157,7 @@ gvc_mixer_control_set_default_sink (GvcMixerControl *control,
                                          NULL);
         if (o == NULL) {
                 g_warning ("pa_context_set_default_sink() failed: %s",
-                	   pa_strerror (pa_context_errno (control->priv->pa_context)));
+                           pa_strerror (pa_context_errno (control->priv->pa_context)));
                 return FALSE;
         }
 
@@ -173,7 +173,7 @@ gvc_mixer_control_set_default_sink (GvcMixerControl *control,
 
         if (o == NULL) {
                 g_warning ("pa_ext_stream_restore_read() failed: %s",
-                	   pa_strerror (pa_context_errno (control->priv->pa_context)));
+                           pa_strerror (pa_context_errno (control->priv->pa_context)));
                 return FALSE;
         }
 
@@ -1045,8 +1045,16 @@ update_event_role_stream (GvcMixerControl                  *control,
         is_new = FALSE;
 
         if (!control->priv->event_sink_input_is_set) {
+                pa_channel_map pa_map;
+                GvcChannelMap *map;
+
+                pa_map.channels = 1;
+                pa_map.map[0] = PA_CHANNEL_POSITION_MONO;
+                map = gvc_channel_map_new_from_pa_channel_map (&pa_map);
+
                 stream = gvc_mixer_event_role_new (control->priv->pa_context,
-                                                   info->device);
+                                                   info->device,
+                                                   map);
                 control->priv->event_sink_input_id = gvc_mixer_stream_get_id (stream);
                 control->priv->event_sink_input_is_set = TRUE;
 
diff --git a/gnome-volume-control/src/gvc-mixer-event-role.c b/gnome-volume-control/src/gvc-mixer-event-role.c
index 51798e2..1dcd5ff 100644
--- a/gnome-volume-control/src/gvc-mixer-event-role.c
+++ b/gnome-volume-control/src/gvc-mixer-event-role.c
@@ -221,7 +221,8 @@ gvc_mixer_event_role_finalize (GObject *object)
 
 GvcMixerStream *
 gvc_mixer_event_role_new (pa_context *context,
-                          const char *device)
+                          const char *device,
+                          GvcChannelMap *channel_map)
 {
         GObject *object;
 
@@ -229,6 +230,7 @@ gvc_mixer_event_role_new (pa_context *context,
                                "pa-context", context,
                                "index", 0,
                                "device", device,
+                               "channel-map", channel_map,
                                NULL);
 
         return GVC_MIXER_STREAM (object);
diff --git a/gnome-volume-control/src/gvc-mixer-event-role.h b/gnome-volume-control/src/gvc-mixer-event-role.h
index 280c597..ab4c509 100644
--- a/gnome-volume-control/src/gvc-mixer-event-role.h
+++ b/gnome-volume-control/src/gvc-mixer-event-role.h
@@ -48,8 +48,9 @@ typedef struct
 
 GType               gvc_mixer_event_role_get_type      (void);
 
-GvcMixerStream *    gvc_mixer_event_role_new           (pa_context *context,
-                                                        const char *device);
+GvcMixerStream *    gvc_mixer_event_role_new           (pa_context    *context,
+                                                        const char    *device,
+                                                        GvcChannelMap *channel_map);
 
 G_END_DECLS
 



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