[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