[Spice-commits] server/sound.cpp

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 14 10:29:52 UTC 2021


 server/sound.cpp |   53 ++++++++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 25 deletions(-)

New commits:
commit cc4d6559b2cedc7cd83e8b7d9389f17ceee9428e
Author: Frediano Ziglio <freddy77 at gmail.com>
Date:   Mon Jun 14 07:19:42 2021 +0100

    sound: Use SpiceAudioDataMode type for audio mode
    
    Signed-off-by: Frediano Ziglio <freddy77 at gmail.com>
    Acked-by: Marc-André Lureau <marcandre.lureau at redhat.com>

diff --git a/server/sound.cpp b/server/sound.cpp
index d976992e..ef6e69d5 100644
--- a/server/sound.cpp
+++ b/server/sound.cpp
@@ -152,7 +152,7 @@ public:
     AudioFrame *free_frames = nullptr;
     AudioFrame *in_progress = nullptr;   /* Frame being sent to the client */
     AudioFrame *pending_frame = nullptr; /* Next frame to send to the client */
-    uint32_t mode = SPICE_AUDIO_DATA_MODE_RAW;
+    SpiceAudioDataMode mode = SPICE_AUDIO_DATA_MODE_RAW;
     uint32_t latency = 0;
     SndCodec codec = nullptr;
     uint8_t  encode_buf[SND_CODEC_MAX_COMPRESSED_BYTES];
@@ -211,7 +211,7 @@ public:
     uint32_t samples[RECORD_SAMPLES_SIZE];
     uint32_t write_pos = 0;
     uint32_t read_pos = 0;
-    uint32_t mode = SPICE_AUDIO_DATA_MODE_RAW;
+    SpiceAudioDataMode mode = SPICE_AUDIO_DATA_MODE_RAW;
     uint32_t mode_time = 0;
     uint32_t start_time = 0;
     SndCodec codec = nullptr;
@@ -310,21 +310,23 @@ static bool snd_record_handle_write(RecordChannelClient *record_client, size_t s
     return true;
 }
 
-static
-const char* spice_audio_data_mode_to_string(gint mode)
+static const char*
+spice_audio_data_mode_to_string(SpiceAudioDataMode mode)
 {
+    switch (mode) {
+    case SPICE_AUDIO_DATA_MODE_INVALID:
+        return "invalid";
+    case SPICE_AUDIO_DATA_MODE_RAW:
+        return "raw";
     G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-    static const char * const str[] = {
-        [ SPICE_AUDIO_DATA_MODE_INVALID ] = "invalid",
-        [ SPICE_AUDIO_DATA_MODE_RAW ] = "raw",
-        [ SPICE_AUDIO_DATA_MODE_CELT_0_5_1 ] = "celt",
-        [ SPICE_AUDIO_DATA_MODE_OPUS ] = "opus",
-    };
+    case SPICE_AUDIO_DATA_MODE_CELT_0_5_1:
+        return "celt";
     G_GNUC_END_IGNORE_DEPRECATIONS
-    if (mode >= 0 && mode < G_N_ELEMENTS(str)) {
-        return str[mode];
+    case SPICE_AUDIO_DATA_MODE_OPUS:
+        return "opus";
+    case SPICE_AUDIO_DATA_MODE_ENUM_END:
+        break;
     }
-
     return "unknown audio codec";
 }
 
@@ -339,23 +341,23 @@ bool RecordChannelClient::handle_message(uint16_t type, uint32_t size, void *mes
         auto msg_mode = (SpiceMsgcRecordMode *)message;
         SndChannel *channel = get_channel();
         mode_time = msg_mode->time;
-        if (msg_mode->mode != SPICE_AUDIO_DATA_MODE_RAW) {
-            if (snd_codec_is_capable((SpiceAudioDataMode) msg_mode->mode, channel->frequency)) {
-                if (snd_codec_create(&codec, (SpiceAudioDataMode) msg_mode->mode,
+        auto new_mode = static_cast<SpiceAudioDataMode>(msg_mode->mode);
+        if (new_mode != SPICE_AUDIO_DATA_MODE_RAW) {
+            if (snd_codec_is_capable(new_mode, channel->frequency)) {
+                if (snd_codec_create(&codec, new_mode,
                                      channel->frequency, SND_CODEC_DECODE) == SND_CODEC_OK) {
-                    mode = msg_mode->mode;
+                    mode = new_mode;
                 } else {
                     red_channel_warning(channel, "create decoder failed");
                     return false;
                 }
-            }
-            else {
+            } else {
                 red_channel_warning(channel, "unsupported mode %d", mode);
                 return false;
             }
+        } else {
+            mode = new_mode;
         }
-        else
-            mode = msg_mode->mode;
 
         spice_debug("record client %p using mode %s", this,
                     spice_audio_data_mode_to_string(mode));
@@ -961,8 +963,8 @@ void snd_set_playback_latency(RedClient *client, uint32_t latency)
     }
 }
 
-static int snd_desired_audio_mode(bool playback_compression, int frequency,
-                                  bool client_can_opus)
+static SpiceAudioDataMode
+snd_desired_audio_mode(bool playback_compression, int frequency, bool client_can_opus)
 {
     if (!playback_compression)
         return SPICE_AUDIO_DATA_MODE_RAW;
@@ -1002,7 +1004,8 @@ PlaybackChannelClient::PlaybackChannelClient(PlaybackChannel *channel,
     bool client_can_opus = test_remote_cap(SPICE_PLAYBACK_CAP_OPUS);
     bool playback_compression =
         reds_config_get_playback_compression(channel->get_server());
-    int desired_mode = snd_desired_audio_mode(playback_compression, channel->frequency, client_can_opus);
+    auto desired_mode =
+        snd_desired_audio_mode(playback_compression, channel->frequency, client_can_opus);
     if (desired_mode != SPICE_AUDIO_DATA_MODE_RAW) {
         if (snd_codec_create(&codec, (SpiceAudioDataMode) desired_mode, channel->frequency,
                              SND_CODEC_ENCODE) == SND_CODEC_OK) {
@@ -1283,7 +1286,7 @@ void snd_set_playback_compression(bool on)
             PlaybackChannelClient* playback = PLAYBACK_CHANNEL_CLIENT(client);
             RedChannelClient *rcc = playback;
             bool client_can_opus = rcc->test_remote_cap(SPICE_PLAYBACK_CAP_OPUS);
-            int desired_mode = snd_desired_audio_mode(on, now->frequency, client_can_opus);
+            auto desired_mode = snd_desired_audio_mode(on, now->frequency, client_can_opus);
             if (playback->mode != desired_mode) {
                 playback->mode = desired_mode;
                 snd_set_command(client, SND_PLAYBACK_MODE_MASK);


More information about the Spice-commits mailing list