gnome-media r4087 - in trunk/gnome-volume-control: . src
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-media r4087 - in trunk/gnome-volume-control: . src
- Date: Fri, 12 Dec 2008 05:37:23 +0000 (UTC)
Author: mccann
Date: Fri Dec 12 05:37:23 2008
New Revision: 4087
URL: http://svn.gnome.org/viewvc/gnome-media?rev=4087&view=rev
Log:
2008-12-12 William Jon McCann <jmccann redhat com>
* src/gvc-mixer-control.c (update_sink), (update_source):
* src/gvc-mixer-stream.c (gvc_mixer_stream_get_decibel),
(gvc_mixer_stream_set_decibel), (gvc_mixer_stream_get_can_decibel),
(gvc_mixer_stream_set_can_decibel),
(gvc_mixer_stream_set_property), (gvc_mixer_stream_get_property),
(gvc_mixer_stream_class_init):
* src/gvc-mixer-stream.h:
* src/gvc-stream-status-icon.c (update_icon):
Add decibel level support.
Modified:
trunk/gnome-volume-control/ChangeLog
trunk/gnome-volume-control/src/gvc-mixer-control.c
trunk/gnome-volume-control/src/gvc-mixer-stream.c
trunk/gnome-volume-control/src/gvc-mixer-stream.h
trunk/gnome-volume-control/src/gvc-stream-status-icon.c
Modified: trunk/gnome-volume-control/src/gvc-mixer-control.c
==============================================================================
--- trunk/gnome-volume-control/src/gvc-mixer-control.c (original)
+++ trunk/gnome-volume-control/src/gvc-mixer-control.c Fri Dec 12 05:37:23 2008
@@ -525,6 +525,12 @@
gvc_mixer_stream_set_icon_name (stream, "audio-card");
gvc_mixer_stream_set_volume (stream, (guint)avg_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute);
+ gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME));
+ if (!!(info->flags & PA_SINK_DECIBEL_VOLUME)) {
+ gdouble db;
+ db = pa_sw_volume_to_dB (avg_volume);
+ gvc_mixer_stream_set_decibel (stream, db);
+ }
if (is_new) {
g_hash_table_insert (control->priv->sinks,
@@ -547,6 +553,7 @@
GvcMixerStream *stream;
gboolean is_new;
pa_volume_t avg_volume;
+
#if 1
g_debug ("Updating source: index=%u name='%s' description='%s'",
info->index,
@@ -577,6 +584,12 @@
gvc_mixer_stream_set_icon_name (stream, "audio-input-microphone");
gvc_mixer_stream_set_volume (stream, (guint)avg_volume);
gvc_mixer_stream_set_is_muted (stream, info->mute);
+ gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SOURCE_DECIBEL_VOLUME));
+ if (!!(info->flags & PA_SINK_DECIBEL_VOLUME)) {
+ gdouble db;
+ db = pa_sw_volume_to_dB (avg_volume);
+ gvc_mixer_stream_set_decibel (stream, db);
+ }
if (is_new) {
g_hash_table_insert (control->priv->sources,
Modified: trunk/gnome-volume-control/src/gvc-mixer-stream.c
==============================================================================
--- trunk/gnome-volume-control/src/gvc-mixer-stream.c (original)
+++ trunk/gnome-volume-control/src/gvc-mixer-stream.c Fri Dec 12 05:37:23 2008
@@ -42,10 +42,12 @@
guint index;
guint num_channels;
guint volume;
+ gdouble decibel;
char *name;
char *description;
char *icon_name;
gboolean is_muted;
+ gboolean can_decibel;
};
enum
@@ -59,7 +61,9 @@
PROP_DESCRIPTION,
PROP_ICON_NAME,
PROP_VOLUME,
+ PROP_DECIBEL,
PROP_IS_MUTED,
+ PROP_CAN_DECIBEL
};
static void gvc_mixer_stream_class_init (GvcMixerStreamClass *klass);
@@ -117,6 +121,13 @@
return stream->priv->volume;
}
+gdouble
+gvc_mixer_stream_get_decibel (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), 0);
+ return stream->priv->decibel;
+}
+
gboolean
gvc_mixer_stream_set_volume (GvcMixerStream *stream,
pa_volume_t volume)
@@ -132,6 +143,20 @@
}
gboolean
+gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
+ gdouble db)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (db != stream->priv->decibel) {
+ stream->priv->decibel = db;
+ g_object_notify (G_OBJECT (stream), "decibel");
+ }
+
+ return TRUE;
+}
+
+gboolean
gvc_mixer_stream_get_is_muted (GvcMixerStream *stream)
{
g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
@@ -139,6 +164,13 @@
}
gboolean
+gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+ return stream->priv->can_decibel;
+}
+
+gboolean
gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
gboolean is_muted)
{
@@ -152,6 +184,20 @@
return TRUE;
}
+gboolean
+gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
+ gboolean can_decibel)
+{
+ g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE);
+
+ if (can_decibel != stream->priv->can_decibel) {
+ stream->priv->can_decibel = can_decibel;
+ g_object_notify (G_OBJECT (stream), "can-decibel");
+ }
+
+ return TRUE;
+}
+
const char *
gvc_mixer_stream_get_name (GvcMixerStream *stream)
{
@@ -245,9 +291,15 @@
case PROP_VOLUME:
gvc_mixer_stream_set_volume (self, g_value_get_ulong (value));
break;
+ case PROP_DECIBEL:
+ gvc_mixer_stream_set_decibel (self, g_value_get_double (value));
+ break;
case PROP_IS_MUTED:
gvc_mixer_stream_set_is_muted (self, g_value_get_boolean (value));
break;
+ case PROP_CAN_DECIBEL:
+ gvc_mixer_stream_set_can_decibel (self, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -287,9 +339,15 @@
case PROP_VOLUME:
g_value_set_ulong (value, self->priv->volume);
break;
+ case PROP_DECIBEL:
+ g_value_set_double (value, self->priv->decibel);
+ break;
case PROP_IS_MUTED:
g_value_set_boolean (value, self->priv->is_muted);
break;
+ case PROP_CAN_DECIBEL:
+ g_value_set_boolean (value, self->priv->can_decibel);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -394,6 +452,13 @@
"The volume for this stream",
0, G_MAXULONG, 0,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_DECIBEL,
+ g_param_spec_double ("decibel",
+ "Decibel",
+ "The decibel level for this stream",
+ -G_MAXDOUBLE, G_MAXDOUBLE, 0,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
g_object_class_install_property (gobject_class,
PROP_NAME,
@@ -423,6 +488,13 @@
"Whether stream is muted",
FALSE,
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
+ g_object_class_install_property (gobject_class,
+ PROP_CAN_DECIBEL,
+ g_param_spec_boolean ("can-decibel",
+ "can decibel",
+ "Whether stream volume can be converted to decibel units",
+ FALSE,
+ G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate));
}
Modified: trunk/gnome-volume-control/src/gvc-mixer-stream.h
==============================================================================
--- trunk/gnome-volume-control/src/gvc-mixer-stream.h (original)
+++ trunk/gnome-volume-control/src/gvc-mixer-stream.h Fri Dec 12 05:37:23 2008
@@ -60,10 +60,12 @@
guint gvc_mixer_stream_get_num_channels (GvcMixerStream *stream);
guint gvc_mixer_stream_get_volume (GvcMixerStream *stream);
+gdouble gvc_mixer_stream_get_decibel (GvcMixerStream *stream);
gboolean gvc_mixer_stream_change_volume (GvcMixerStream *stream,
guint volume);
gboolean gvc_mixer_stream_get_is_muted (GvcMixerStream *stream);
+gboolean gvc_mixer_stream_get_can_decibel (GvcMixerStream *stream);
gboolean gvc_mixer_stream_change_is_muted (GvcMixerStream *stream,
gboolean is_muted);
const char * gvc_mixer_stream_get_name (GvcMixerStream *stream);
@@ -73,8 +75,12 @@
/* private */
gboolean gvc_mixer_stream_set_volume (GvcMixerStream *stream,
guint volume);
+gboolean gvc_mixer_stream_set_decibel (GvcMixerStream *stream,
+ gdouble db);
gboolean gvc_mixer_stream_set_is_muted (GvcMixerStream *stream,
gboolean is_muted);
+gboolean gvc_mixer_stream_set_can_decibel (GvcMixerStream *stream,
+ gboolean can_decibel);
gboolean gvc_mixer_stream_set_name (GvcMixerStream *stream,
const char *name);
gboolean gvc_mixer_stream_set_description (GvcMixerStream *stream,
Modified: trunk/gnome-volume-control/src/gvc-stream-status-icon.c
==============================================================================
--- trunk/gnome-volume-control/src/gvc-stream-status-icon.c (original)
+++ trunk/gnome-volume-control/src/gvc-stream-status-icon.c Fri Dec 12 05:37:23 2008
@@ -361,6 +361,8 @@
gboolean is_muted;
guint n;
char *markup;
+ gboolean can_decibel;
+ gdouble db;
if (icon->priv->mixer_stream == NULL) {
return;
@@ -368,6 +370,8 @@
volume = gvc_mixer_stream_get_volume (icon->priv->mixer_stream);
is_muted = gvc_mixer_stream_get_is_muted (icon->priv->mixer_stream);
+ db = gvc_mixer_stream_get_decibel (icon->priv->mixer_stream);
+ can_decibel = gvc_mixer_stream_get_can_decibel (icon->priv->mixer_stream);
/* select image */
if (volume <= 0 || is_muted) {
@@ -389,10 +393,28 @@
icon->priv->current_icon = n;
}
- markup = g_strdup_printf ("<b>%s: %.0f%%</b>\n<small>%s</small>",
- icon->priv->display_name,
- 100 * (float)volume / PA_VOLUME_NORM,
- gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ if (is_muted) {
+ markup = g_strdup_printf ("<b>%s: %s</b>\n<small>%s</small>",
+ icon->priv->display_name,
+ _("Muted"),
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else if (can_decibel && (db > PA_DECIBEL_MININFTY)) {
+ markup = g_strdup_printf ("<b>%s: %.0f%%</b>\n<small>%0.2f dB\n%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ db,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else if (can_decibel) {
+ markup = g_strdup_printf ("<b>%s: %.0f%%</b>\n<small>-∞ dB\n%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ } else {
+ markup = g_strdup_printf ("<b>%s: %.0f%%</b>\n<small>%s</small>",
+ icon->priv->display_name,
+ 100 * (float)volume / PA_VOLUME_NORM,
+ gvc_mixer_stream_get_description (icon->priv->mixer_stream));
+ }
gtk_status_icon_set_tooltip_markup (GTK_STATUS_ICON (icon),
markup);
g_free (markup);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]