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

Frediano Ziglio fziglio at redhat.com
Tue Jan 24 13:46:52 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>

Acked

> ---
>  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);

Frediano


More information about the Spice-devel mailing list