[Spice-devel] [spice-server 09/17] sound: Add separate SND_MUTE_MASK

Christophe Fergeau cfergeau at redhat.com
Wed Jan 11 08:48:23 UTC 2017


Currently MUTE and VOLUME commands use the same VOLUME mask. This commit
introduces a separate SND_MUTE_MASK for MUTE commands to make things
a bit more clear.

Based on a patch from Frediano Ziglio <fziglio at redhat.com>

Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
---
 server/sound.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/server/sound.c b/server/sound.c
index e1d6805..7941ea2 100644
--- a/server/sound.c
+++ b/server/sound.c
@@ -55,6 +55,7 @@ enum SndCommand {
     SND_MIGRATE,
     SND_CTRL,
     SND_VOLUME,
+    SND_MUTE,
     SND_END_COMMAND,
 };
 
@@ -67,6 +68,8 @@ enum PlaybackCommand {
 #define SND_MIGRATE_MASK (1 << SND_MIGRATE)
 #define SND_CTRL_MASK (1 << SND_CTRL)
 #define SND_VOLUME_MASK (1 << SND_VOLUME)
+#define SND_MUTE_MASK (1 << SND_MUTE)
+#define SND_VOLUME_MUTE_MASK (SND_VOLUME_MASK|SND_MUTE_MASK)
 
 #define SND_PLAYBACK_MODE_MASK (1 << SND_PLAYBACK_MODE)
 #define SND_PLAYBACK_PCM_MASK (1 << SND_PLAYBACK_PCM)
@@ -872,12 +875,17 @@ static void snd_playback_send(void* data)
             client->command &= ~SND_CTRL_MASK;
         }
         if (client->command & SND_VOLUME_MASK) {
-            if (!snd_playback_send_volume(playback_client) ||
-                !snd_playback_send_mute(playback_client)) {
+            if (!snd_playback_send_volume(playback_client)) {
                 return;
             }
             client->command &= ~SND_VOLUME_MASK;
         }
+        if (client->command & SND_MUTE_MASK) {
+            if (!snd_playback_send_mute(playback_client)) {
+                return;
+            }
+            client->command &= ~SND_MUTE_MASK;
+        }
         if (client->command & SND_MIGRATE_MASK) {
             if (!snd_playback_send_migrate(playback_client)) {
                 return;
@@ -910,12 +918,17 @@ static void snd_record_send(void* data)
             client->command &= ~SND_CTRL_MASK;
         }
         if (client->command & SND_VOLUME_MASK) {
-            if (!snd_record_send_volume(record_client) ||
-                !snd_record_send_mute(record_client)) {
+            if (!snd_record_send_volume(record_client)) {
                 return;
             }
             client->command &= ~SND_VOLUME_MASK;
         }
+        if (client->command & SND_MUTE_MASK) {
+            if (!snd_record_send_mute(record_client)) {
+                return;
+            }
+            client->command &= ~SND_MUTE_MASK;
+        }
         if (client->command & SND_MIGRATE_MASK) {
             if (!snd_record_send_migrate(record_client)) {
                 return;
@@ -1259,7 +1272,7 @@ static void on_new_playback_channel_client(SndChannel *channel, SndChannelClient
         snd_set_command(client, SND_CTRL_MASK);
     }
     if (channel->volume.volume_nchannels) {
-        snd_set_command(client, SND_VOLUME_MASK);
+        snd_set_command(client, SND_VOLUME_MUTE_MASK);
     }
     if (client->active) {
         reds_disable_mm_time(reds);
@@ -1515,7 +1528,7 @@ static void on_new_record_channel_client(SndChannel *channel, SndChannelClient *
 
     channel->connection = client;
     if (channel->volume.volume_nchannels) {
-        snd_set_command(client, SND_VOLUME_MASK);
+        snd_set_command(client, SND_VOLUME_MUTE_MASK);
     }
     if (client->active) {
         snd_set_command(client, SND_CTRL_MASK);
-- 
2.9.3



More information about the Spice-devel mailing list