[Spice-devel] [spice-server v2 04/10] sound: Remove SndChannelClient::send_data::marshaller

Christophe Fergeau cfergeau at redhat.com
Tue Jan 24 11:52:39 UTC 2017


We can use the marshaller provided by the dummy RedChannelClient
associated with SndChannelClient.

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

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

diff --git a/server/sound.c b/server/sound.c
index a53ebcd..604b1db 100644
--- a/server/sound.c
+++ b/server/sound.c
@@ -26,7 +26,6 @@
 #include <netinet/ip.h>
 #include <netinet/tcp.h>
 
-#include <common/marshaller.h>
 #include <common/generated_server_marshallers.h>
 #include <common/snd_codec.h>
 
@@ -41,7 +40,6 @@
 #include "red-channel-client-private.h"
 #include "red-client.h"
 #include "sound.h"
-#include "demarshallers.h"
 #include "main-channel-client.h"
 
 #ifndef IOV_MAX
@@ -108,7 +106,6 @@ struct SndChannelClient {
 
     struct {
         uint64_t serial;
-        SpiceMarshaller *marshaller;
         uint32_t size;
         uint32_t pos;
     } send_data;
@@ -275,7 +272,6 @@ static void snd_disconnect_channel(SndChannelClient *client)
     client->stream->watch = NULL;
     reds_stream_free(client->stream);
     client->stream = NULL;
-    spice_marshaller_destroy(client->send_data.marshaller);
     snd_channel_unref(client);
     channel->connection = NULL;
 }
@@ -306,6 +302,8 @@ static void snd_record_on_message_done(SndChannelClient *client)
 static int snd_send_data(SndChannelClient *client)
 {
     uint32_t n;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
 
     if (!client) {
         return FALSE;
@@ -330,7 +328,7 @@ static int snd_send_data(SndChannelClient *client)
             break;
         }
 
-        vec_size = spice_marshaller_fill_iovec(client->send_data.marshaller,
+        vec_size = spice_marshaller_fill_iovec(m,
                                                vec, IOV_MAX, client->send_data.pos);
         n = reds_stream_writev(client->stream, vec, vec_size);
         if (n == -1) {
@@ -562,17 +560,17 @@ static void snd_event(int fd, int event, void *data)
 static inline int snd_reset_send_data(SndChannelClient *client, uint16_t verb)
 {
     SpiceDataHeaderOpaque *header;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
 
     if (!client) {
         return FALSE;
     }
 
     header = &client->channel_client->priv->send_data.header;
-    spice_marshaller_reset(client->send_data.marshaller);
-    header->data = spice_marshaller_reserve_space(client->send_data.marshaller,
-                                                  header->header_size);
-    spice_marshaller_set_base(client->send_data.marshaller,
-                              header->header_size);
+    spice_marshaller_reset(m);
+    header->data = spice_marshaller_reserve_space(m, header->header_size);
+    spice_marshaller_set_base(m, header->header_size);
     client->send_data.pos = 0;
     header->set_msg_size(header, 0);
     header->set_msg_type(header, verb);
@@ -588,16 +586,19 @@ static inline int snd_reset_send_data(SndChannelClient *client, uint16_t verb)
 static int snd_begin_send_message(SndChannelClient *client)
 {
     SpiceDataHeaderOpaque *header = &client->channel_client->priv->send_data.header;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
 
-    spice_marshaller_flush(client->send_data.marshaller);
-    client->send_data.size = spice_marshaller_get_total_size(client->send_data.marshaller);
+    spice_marshaller_flush(m);
+    client->send_data.size = spice_marshaller_get_total_size(m);
     header->set_msg_size(header, client->send_data.size - header->header_size);
     return snd_send_data(client);
 }
 
 static int snd_channel_send_migrate(SndChannelClient *client)
 {
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceMsgMigrate migrate;
 
     if (!snd_reset_send_data(client, SPICE_MSG_MIGRATE)) {
@@ -619,8 +620,9 @@ static int snd_send_volume(SndChannelClient *client, uint32_t cap, int msg)
 {
     SpiceMsgAudioVolume *vol;
     uint8_t c;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceVolumeState *st = &client->channel->volume;
-    SpiceMarshaller *m = client->send_data.marshaller;
 
     if (!red_channel_client_test_remote_cap(client->channel_client, cap)) {
         return TRUE;
@@ -649,8 +651,9 @@ static int snd_playback_send_volume(PlaybackChannelClient *playback_client)
 static int snd_send_mute(SndChannelClient *client, uint32_t cap, int msg)
 {
     SpiceMsgAudioMute mute;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceVolumeState *st = &client->channel->volume;
-    SpiceMarshaller *m = client->send_data.marshaller;
 
     if (!red_channel_client_test_remote_cap(client->channel_client, cap)) {
         return TRUE;
@@ -674,7 +677,8 @@ static int snd_playback_send_mute(PlaybackChannelClient *playback_client)
 static int snd_playback_send_latency(PlaybackChannelClient *playback_client)
 {
     SndChannelClient *client = SND_CHANNEL_CLIENT(playback_client);
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceMsgPlaybackLatency latency_msg;
 
     spice_debug("latency %u", playback_client->latency);
@@ -689,7 +693,8 @@ static int snd_playback_send_latency(PlaybackChannelClient *playback_client)
 static int snd_playback_send_start(PlaybackChannelClient *playback_client)
 {
     SndChannelClient *client = (SndChannelClient *)playback_client;
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceMsgPlaybackStart start;
 
     if (!snd_reset_send_data(client, SPICE_MSG_PLAYBACK_START)) {
@@ -731,7 +736,8 @@ static int snd_playback_send_ctl(PlaybackChannelClient *playback_client)
 static int snd_record_send_start(RecordChannelClient *record_client)
 {
     SndChannelClient *client = (SndChannelClient *)record_client;
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceMsgRecordStart start;
 
     if (!snd_reset_send_data(client, SPICE_MSG_RECORD_START)) {
@@ -793,7 +799,8 @@ static int snd_record_send_migrate(RecordChannelClient *record_client)
 static int snd_playback_send_write(PlaybackChannelClient *playback_client)
 {
     SndChannelClient *client = (SndChannelClient *)playback_client;
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     AudioFrame *frame;
     SpiceMsgPlaybackPacket msg;
 
@@ -829,7 +836,8 @@ static int snd_playback_send_write(PlaybackChannelClient *playback_client)
 static int playback_send_mode(PlaybackChannelClient *playback_client)
 {
     SndChannelClient *client = (SndChannelClient *)playback_client;
-    SpiceMarshaller *m = client->send_data.marshaller;
+    RedChannelClient *rcc = client->channel_client;
+    SpiceMarshaller *m = red_channel_client_get_marshaller(rcc);
     SpiceMsgPlaybackMode mode;
 
     if (!snd_reset_send_data(client, SPICE_MSG_PLAYBACK_MODE)) {
@@ -966,7 +974,6 @@ static SndChannelClient *__new_channel(SndChannel *channel, int size, uint32_t c
     client->receive_data.message_start = client->receive_data.buf;
     client->receive_data.now = client->receive_data.buf;
     client->receive_data.end = client->receive_data.buf + sizeof(client->receive_data.buf);
-    client->send_data.marshaller = spice_marshaller_new();
 
     stream->watch = reds_core_watch_add(reds, stream->socket, SPICE_WATCH_EVENT_READ,
                                         snd_event, client);
-- 
2.9.3



More information about the Spice-devel mailing list