]> code.delx.au - pulseaudio/commitdiff
dbus: Always accept mono volumes when setting device or stream volume.
authorTanu Kaskinen <tanu.kaskinen@digia.com>
Fri, 11 Mar 2011 11:40:34 +0000 (13:40 +0200)
committerTanu Kaskinen <tanu.kaskinen@digia.com>
Fri, 11 Mar 2011 11:40:34 +0000 (13:40 +0200)
pa_sink_set_volume() and friends accept mono volumes too, so no need to impose
unneeded restrictions in the D-Bus API.

src/modules/dbus/iface-device.c
src/modules/dbus/iface-stream.c

index a8652df9ef3c5766a0c83be5102136b36f8aa8cc..c5ba88e0859690aa87cb1723457868bb68aef45f 100644 (file)
@@ -422,21 +422,20 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessag
     pa_assert(iter);
     pa_assert(d);
 
-    pa_cvolume_init(&new_vol);
-
     device_channels = (d->type == DEVICE_TYPE_SINK) ? d->sink->channel_map.channels : d->source->channel_map.channels;
 
-    new_vol.channels = device_channels;
-
     dbus_message_iter_recurse(iter, &array_iter);
     dbus_message_iter_get_fixed_array(&array_iter, &volume, &n_volume_entries);
 
-    if (n_volume_entries != device_channels) {
+    if (n_volume_entries != device_channels && n_volume_entries != 1) {
         pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
                            "Expected %u volume entries, got %i.", device_channels, n_volume_entries);
         return;
     }
 
+    pa_cvolume_init(&new_vol);
+    new_vol.channels = n_volume_entries;
+
     for (i = 0; i < n_volume_entries; ++i) {
         if (!PA_VOLUME_IS_VALID(volume[i])) {
             pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Too large volume value: %u", volume[i]);
index 6b46fa914c5fc871f7fd25b40868eb04aa60bf41..e3464fdf40287f38688fb883a1b599dda0ca4ee9 100644 (file)
@@ -381,21 +381,20 @@ static void handle_set_volume(DBusConnection *conn, DBusMessage *msg, DBusMessag
         return;
     }
 
-    pa_cvolume_init(&new_vol);
-
     stream_channels = s->sink_input->channel_map.channels;
 
-    new_vol.channels = stream_channels;
-
     dbus_message_iter_recurse(iter, &array_iter);
     dbus_message_iter_get_fixed_array(&array_iter, &volume, &n_volume_entries);
 
-    if (n_volume_entries != stream_channels) {
+    if (n_volume_entries != stream_channels && n_volume_entries != 1) {
         pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS,
                            "Expected %u volume entries, got %u.", stream_channels, n_volume_entries);
         return;
     }
 
+    pa_cvolume_init(&new_vol);
+    new_vol.channels = n_volume_entries;
+
     for (i = 0; i < n_volume_entries; ++i) {
         if (!PA_VOLUME_IS_VALID(volume[i])) {
             pa_dbus_send_error(conn, msg, DBUS_ERROR_INVALID_ARGS, "Invalid volume: %u", volume[i]);