Index: gvc-mixer-dialog.c
===================================================================
--- gvc-mixer-dialog.c	(revision 4201)
+++ gvc-mixer-dialog.c	(working copy)
@@ -586,11 +586,13 @@
 static GtkWidget *
 create_bar (GvcMixerDialog *dialog,
             GtkSizeGroup   *size_group,
-            gboolean        symmetric)
+            gboolean        symmetric,
+            gboolean        is_input)
 {
         GtkWidget *bar;
 
         bar = gvc_channel_bar_new ();
+        gvc_channel_bar_set_is_amplified (GVC_CHANNEL_BAR (bar), is_input);
         gtk_widget_set_sensitive (bar, FALSE);
         if (size_group != NULL) {
                 gvc_channel_bar_set_size_group (GVC_CHANNEL_BAR (bar),
@@ -675,7 +677,7 @@
                    && !gvc_mixer_stream_is_event_stream (stream)
                    && g_strcmp0 (id, "org.gnome.VolumeControl") != 0
                    && g_strcmp0 (id, "org.PulseAudio.pavucontrol") != 0) {
-                bar = create_bar (dialog, dialog->priv->apps_size_group, FALSE);
+                bar = create_bar (dialog, dialog->priv->apps_size_group, FALSE, FALSE);
                 gvc_channel_bar_set_name (GVC_CHANNEL_BAR (bar),
                                           gvc_mixer_stream_get_name (stream));
                 gvc_channel_bar_set_icon_name (GVC_CHANNEL_BAR (bar),
@@ -1004,7 +1006,7 @@
         gtk_box_pack_start (GTK_BOX (main_vbox),
                             self->priv->output_stream_box,
                             FALSE, FALSE, 12);
-        self->priv->output_bar = create_bar (self, self->priv->size_group, TRUE);
+        self->priv->output_bar = create_bar (self, self->priv->size_group, TRUE, FALSE);
         gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->output_bar),
                                   _("Output volume: "));
         gtk_widget_set_sensitive (self->priv->output_bar, FALSE);
@@ -1024,7 +1026,7 @@
                                   self->priv->sound_effects_box,
                                   label);
 
-        self->priv->effects_bar = create_bar (self, self->priv->size_group, TRUE);
+        self->priv->effects_bar = create_bar (self, self->priv->size_group, TRUE, FALSE);
         gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->effects_bar),
                                   _("Alert Volume: "));
         gtk_widget_set_sensitive (self->priv->effects_bar, FALSE);
@@ -1044,7 +1046,7 @@
                                   self->priv->input_box,
                                   label);
 
-        self->priv->input_bar = create_bar (self, self->priv->size_group, TRUE);
+        self->priv->input_bar = create_bar (self, self->priv->size_group, TRUE, TRUE);
         gvc_channel_bar_set_name (GVC_CHANNEL_BAR (self->priv->input_bar),
                                   _("Input volume: "));
         gvc_channel_bar_set_low_icon_name (GVC_CHANNEL_BAR (self->priv->input_bar),
Index: gvc-channel-bar.c
===================================================================
--- gvc-channel-bar.c	(revision 4197)
+++ gvc-channel-bar.c	(working copy)
@@ -32,6 +32,9 @@
 #include "gvc-channel-bar.h"
 
 #define SCALE_SIZE 128
+#define ADJUSTMENT_MAX_NORMAL 65536.0 /* PA_VOLUME_NORM */
+#define ADJUSTMENT_MAX_AMPLIFIED 98304.0 /* 1.5 * ADJUSTMENT_MAX_NORMAL */
+#define ADJUSTMENT_MAX (bar->priv->is_amplified ? ADJUSTMENT_MAX_AMPLIFIED : ADJUSTMENT_MAX_NORMAL)
 
 #define GVC_CHANNEL_BAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_BAR, GvcChannelBarPrivate))
 
@@ -59,6 +62,7 @@
         GtkSizeGroup  *size_group;
         gboolean       symmetric;
         gboolean       click_lock;
+        gboolean       is_amplified;
 };
 
 enum
@@ -72,6 +76,7 @@
         PROP_ICON_NAME,
         PROP_LOW_ICON_NAME,
         PROP_HIGH_ICON_NAME,
+        PROP_IS_AMPLIFIED,
 };
 
 static void     gvc_channel_bar_class_init    (GvcChannelBarClass *klass);
@@ -425,16 +430,16 @@
         value = gtk_adjustment_get_value (bar->priv->adjustment);
 
         if (event->direction == GDK_SCROLL_UP) {
-                if (value + 65536.0/100.0 > 65536.0)
-                        value = 65536.0;
+                if (value + ADJUSTMENT_MAX/100.0 > ADJUSTMENT_MAX)
+                        value = ADJUSTMENT_MAX;
                 else
-                        value = value + 65536.0/100.0;
+                        value = value + ADJUSTMENT_MAX/100.0;
                 gtk_adjustment_set_value (bar->priv->adjustment, value);
         } else if (event->direction == GDK_SCROLL_DOWN) {
-                if (value - 65536.0/100.0 < 0)
+                if (value - ADJUSTMENT_MAX/100.0 < 0)
                         value = 0.0;
                 else
-                        value = value - 65536.0/100.0;
+                        value = value - ADJUSTMENT_MAX/100.0;
                 gtk_adjustment_set_value (bar->priv->adjustment, value);
         }
 
@@ -531,6 +536,16 @@
         return bar->priv->show_mute;
 }
 
+void
+gvc_channel_bar_set_is_amplified (GvcChannelBar *bar, gboolean amplified)
+{
+        g_return_if_fail (GVC_IS_CHANNEL_BAR (bar));
+
+        bar->priv->is_amplified = amplified;
+        gtk_adjustment_set_upper (bar->priv->adjustment, ADJUSTMENT_MAX);
+        gtk_adjustment_set_upper (bar->priv->zero_adjustment, ADJUSTMENT_MAX);
+}
+
 static void
 gvc_channel_bar_set_property (GObject       *object,
                               guint          prop_id,
@@ -564,6 +579,9 @@
         case PROP_ADJUSTMENT:
                 gvc_channel_bar_set_adjustment (self, g_value_get_object (value));
                 break;
+        case PROP_IS_AMPLIFIED:
+                gvc_channel_bar_set_is_amplified (self, g_value_get_boolean (value));
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                 break;
@@ -604,6 +622,9 @@
         case PROP_ADJUSTMENT:
                 g_value_set_object (value, gvc_channel_bar_get_adjustment (self));
                 break;
+        case PROP_IS_AMPLIFIED:
+                g_value_set_boolean (value, priv->is_amplified);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                 break;
@@ -695,6 +716,13 @@
                                                               "Name of icon to display for this stream",
                                                               "audio-volume-high",
                                                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+        g_object_class_install_property (object_class,
+                                         PROP_IS_AMPLIFIED,
+                                         g_param_spec_boolean ("is-amplified",
+                                                               "is amplified",
+                                                               "Whether the stream is digitally amplified",
+                                                               FALSE,
+                                                               G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
 
         g_type_class_add_private (klass, sizeof (GvcChannelBarPrivate));
 }
@@ -721,17 +749,17 @@
         bar->priv->orientation = GTK_ORIENTATION_VERTICAL;
         bar->priv->adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
                                                                     0.0,
-                                                                    65536.0,
-                                                                    65536.0/100.0,
-                                                                    65536.0/10.0,
+                                                                    ADJUSTMENT_MAX_NORMAL,
+                                                                    ADJUSTMENT_MAX_NORMAL/100.0,
+                                                                    ADJUSTMENT_MAX_NORMAL/10.0,
                                                                     0.0));
         g_object_ref_sink (bar->priv->adjustment);
 
         bar->priv->zero_adjustment = GTK_ADJUSTMENT (gtk_adjustment_new (0.0,
                                                                          0.0,
-                                                                         65536.0,
-                                                                         65536.0/100.0,
-                                                                         65536.0/10.0,
+                                                                         ADJUSTMENT_MAX_NORMAL,
+                                                                         ADJUSTMENT_MAX_NORMAL/100.0,
+                                                                         ADJUSTMENT_MAX_NORMAL/10.0,
                                                                          0.0));
         g_object_ref_sink (bar->priv->zero_adjustment);
 
Index: gvc-channel-bar.h
===================================================================
--- gvc-channel-bar.h	(revision 4197)
+++ gvc-channel-bar.h	(working copy)
@@ -73,6 +73,8 @@
 void                gvc_channel_bar_set_size_group      (GvcChannelBar *bar,
                                                          GtkSizeGroup  *group,
                                                          gboolean       symmetric);
+void                gvc_channel_bar_set_is_amplified    (GvcChannelBar *bar,
+                                                         gboolean amplified);
 
 G_END_DECLS
 
