[Spice-devel] [PATCH 16/16] audio: Remove global 'playback_state' variable

Jonathon Jongsma jjongsma at redhat.com
Tue Apr 19 21:42:51 UTC 2016


Commit log should say "playback_compression" instead of "playback_state".
Otherwise looks find.

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


On Tue, 2016-04-19 at 11:00 -0500, Jonathon Jongsma wrote:
> From: Christophe Fergeau <cfergeau at redhat.com>
> 
> This variable belongs to SpiceServerConfig rather than being a static
> global variable hidden in sound.c
> ---
>  server/reds.c  |  8 ++++++++
>  server/reds.h  |  2 ++
>  server/sound.c | 13 +++++++------
>  3 files changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/server/reds.c b/server/reds.c
> index 337d90b..60d8903 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -177,6 +177,7 @@ struct SpiceServerConfig {
>      gboolean ticketing_enabled;
>      uint32_t streaming_video;
>      SpiceImageCompression image_compression;
> +    uint32_t playback_compression;
>      spice_wan_compression_t jpeg_state;
>      spice_wan_compression_t zlib_glz_state;
>  
> @@ -677,6 +678,11 @@ static void reds_mig_disconnect(RedsState *reds)
>      }
>  }
>  
> +int reds_config_get_playback_compression(RedsState *reds)
> +{
> +    return reds->config->playback_compression;
> +}
> +
>  int reds_get_mouse_mode(RedsState *reds)
>  {
>      return reds->mouse_mode;
> @@ -3534,6 +3540,7 @@ SPICE_GNUC_VISIBLE SpiceServer *spice_server_new(void)
>      reds->config->ticketing_enabled = TRUE; /* ticketing enabled by default
> */
>      reds->config->streaming_video = SPICE_STREAM_VIDEO_FILTER;
>      reds->config->image_compression = SPICE_IMAGE_COMPRESSION_AUTO_GLZ;
> +    reds->config->playback_compression = TRUE;
>      reds->config->jpeg_state = SPICE_WAN_COMPRESSION_AUTO;
>      reds->config->zlib_glz_state = SPICE_WAN_COMPRESSION_AUTO;
>      reds->config->agent_mouse = TRUE;
> @@ -3892,6 +3899,7 @@ uint32_t reds_get_streaming_video(const RedsState *reds)
>  
>  SPICE_GNUC_VISIBLE int spice_server_set_playback_compression(SpiceServer
> *reds, int enable)
>  {
> +    reds->config->playback_compression = !!enable;
>      snd_set_playback_compression(enable);
>      return 0;
>  }
> diff --git a/server/reds.h b/server/reds.h
> index 9de506f..fbf7372 100644
> --- a/server/reds.h
> +++ b/server/reds.h
> @@ -60,6 +60,8 @@ void reds_unregister_channel(RedsState *reds, RedChannel
> *channel);
>  int reds_get_mouse_mode(RedsState *reds); // used by inputs_channel
>  gboolean reds_config_get_agent_mouse(const RedsState *reds); // used by
> inputs_channel
>  int reds_has_vdagent(RedsState *reds); // used by inputs channel
> +int reds_config_get_playback_compression(RedsState *reds); // used by
> playback channel
> +
>  void reds_handle_agent_mouse_event(RedsState *reds, const VDAgentMouseState
> *mouse_state); // used by inputs_channel
>  
>  GArray* reds_get_renderers(RedsState *reds);
> diff --git a/server/sound.c b/server/sound.c
> index 453e42a..b95e7e7 100644
> --- a/server/sound.c
> +++ b/server/sound.c
> @@ -183,7 +183,6 @@ typedef struct RecordChannel {
>  
>  /* A list of all Spice{Playback,Record}State objects */
>  static SndWorker *workers;
> -static uint32_t playback_compression = TRUE;
>  
>  static void snd_receive(SndChannel *channel);
>  
> @@ -1157,7 +1156,8 @@ void snd_set_playback_latency(RedClient *client,
> uint32_t latency)
>      }
>  }
>  
> -static int snd_desired_audio_mode(int frequency, int client_can_celt, int
> client_can_opus)
> +static int snd_desired_audio_mode(int playback_compression, int frequency,
> +                                  int client_can_celt, int client_can_opus)
>  {
>      if (! playback_compression)
>          return SPICE_AUDIO_DATA_MODE_RAW;
> @@ -1236,7 +1236,9 @@ static void snd_set_playback_peer(RedChannel *channel,
> RedClient *client, RedsSt
>                                            SPICE_PLAYBACK_CAP_CELT_0_5_1);
>      int client_can_opus = red_channel_client_test_remote_cap(playback_channel
> ->base.channel_client,
>                                            SPICE_PLAYBACK_CAP_OPUS);
> -    int desired_mode = snd_desired_audio_mode(st->frequency, client_can_celt,
> client_can_opus);
> +    int playback_compression = reds_config_get_playback_compression(channel
> ->reds);
> +    int desired_mode = snd_desired_audio_mode(playback_compression, st
> ->frequency,
> +                                              client_can_celt,
> client_can_opus);
>      playback_channel->mode = SPICE_AUDIO_DATA_MODE_RAW;
>      if (desired_mode != SPICE_AUDIO_DATA_MODE_RAW) {
>          if (snd_codec_create(&playback_channel->codec, desired_mode, st
> ->frequency, SND_CODEC_ENCODE) == SND_CODEC_OK) {
> @@ -1617,8 +1619,6 @@ void snd_set_playback_compression(int on)
>  {
>      SndWorker *now = workers;
>  
> -    playback_compression = !!on;
> -
>      for (; now; now = now->next) {
>          g_critical("untested code path");
>          if (now->base_channel->type == SPICE_CHANNEL_PLAYBACK && now
> ->connection) {
> @@ -1628,7 +1628,8 @@ void snd_set_playback_compression(int on)
>                                      SPICE_PLAYBACK_CAP_CELT_0_5_1);
>              int client_can_opus = red_channel_client_test_remote_cap(playback
> ->base.channel_client,
>                                      SPICE_PLAYBACK_CAP_OPUS);
> -            int desired_mode = snd_desired_audio_mode(st->frequency,
> client_can_opus, client_can_celt);
> +            int desired_mode = snd_desired_audio_mode(on, st->frequency,
> +                                                      client_can_opus,
> client_can_celt);
>              if (playback->mode != desired_mode) {
>                  playback->mode = desired_mode;
>                  snd_set_command(now->connection, SND_PLAYBACK_MODE_MASK);


More information about the Spice-devel mailing list