[Spice-devel] [PATCH spice-server v2 3/4] sound: Remove sin field from SpicePlaybackState and SpiceRecordState
Jonathon Jongsma
jjongsma at redhat.com
Mon Nov 14 21:01:23 UTC 2016
On Mon, 2016-11-14 at 09:32 +0000, Frediano Ziglio wrote:
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/sound.c | 63 ++++++++++++++++++++++++++++++++--------------
> ------------
> 1 file changed, 35 insertions(+), 28 deletions(-)
>
> diff --git a/server/sound.c b/server/sound.c
> index c078f28..915756f 100644
> --- a/server/sound.c
> +++ b/server/sound.c
> @@ -166,12 +166,10 @@ struct SndWorker {
>
> struct SpicePlaybackState {
> struct SndWorker worker;
> - SpicePlaybackInstance *sin;
> };
>
> struct SpiceRecordState {
> struct SndWorker worker;
> - SpiceRecordInstance *sin;
> };
>
> typedef struct RecordChannel {
> @@ -190,6 +188,8 @@ typedef struct RecordChannel {
> static SndWorker *workers;
>
> static void snd_receive(SndChannel *channel);
> +static void snd_playback_start(SpicePlaybackState *st);
> +static void snd_record_start(SpiceRecordState *st);
>
> static SndChannel *snd_channel_ref(SndChannel *channel)
> {
> @@ -393,11 +393,11 @@ static int snd_record_handle_message(SndChannel
> *channel, size_t size, uint32_t
> return snd_record_handle_write((RecordChannel *)channel,
> size, message);
> case SPICE_MSGC_RECORD_MODE: {
> SpiceMsgcRecordMode *mode = (SpiceMsgcRecordMode *)message;
> - SpiceRecordState *st = SPICE_CONTAINEROF(channel->worker,
> SpiceRecordState, worker);
> + SndWorker *worker = channel->worker;
> record_channel->mode_time = mode->time;
> if (mode->mode != SPICE_AUDIO_DATA_MODE_RAW) {
> - if (snd_codec_is_capable(mode->mode, st-
> >worker.frequency)) {
> - if (snd_codec_create(&record_channel->codec, mode-
> >mode, st->worker.frequency,
> + if (snd_codec_is_capable(mode->mode, worker->frequency))
> {
> + if (snd_codec_create(&record_channel->codec, mode-
> >mode, worker->frequency,
> SND_CODEC_DECODE) ==
> SND_CODEC_OK) {
> record_channel->mode = mode->mode;
> } else {
This hunk looks completely independant from the 'sin' field changes.
Split?
> @@ -1035,25 +1035,29 @@ SPICE_GNUC_VISIBLE void
> spice_server_playback_set_mute(SpicePlaybackInstance *si
> snd_playback_send_mute(playback_channel);
> }
>
> -SPICE_GNUC_VISIBLE void
> spice_server_playback_start(SpicePlaybackInstance *sin)
> +static void snd_playback_start(SpicePlaybackState *st)
> {
> - SndChannel *channel = sin->st->worker.connection;
> - PlaybackChannel *playback_channel = SPICE_CONTAINEROF(channel,
> PlaybackChannel, base);
> + SndChannel *channel = st->worker.connection;
>
> - sin->st->worker.active = 1;
> + st->worker.active = 1;
> if (!channel)
> return;
> - spice_assert(!playback_channel->base.active);
> + spice_assert(!channel->active);
> reds_disable_mm_time(snd_channel_get_server(channel));
> - playback_channel->base.active = TRUE;
> - if (!playback_channel->base.client_active) {
> - snd_set_command(&playback_channel->base,
> SND_PLAYBACK_CTRL_MASK);
> - snd_playback_send(&playback_channel->base);
> + channel->active = TRUE;
> + if (!channel->client_active) {
> + snd_set_command(channel, SND_PLAYBACK_CTRL_MASK);
> + snd_playback_send(channel);
> } else {
> - playback_channel->base.command &= ~SND_PLAYBACK_CTRL_MASK;
> + channel->command &= ~SND_PLAYBACK_CTRL_MASK;
> }
> }
>
> +SPICE_GNUC_VISIBLE void
> spice_server_playback_start(SpicePlaybackInstance *sin)
> +{
> + return snd_playback_start(sin->st);
> +}
> +
> SPICE_GNUC_VISIBLE void
> spice_server_playback_stop(SpicePlaybackInstance *sin)
> {
> SndChannel *channel = sin->st->worker.connection;
> @@ -1245,7 +1249,7 @@ static void snd_set_playback_peer(RedChannel
> *channel, RedClient *client, RedsSt
> }
>
> if (worker->active) {
> - spice_server_playback_start(st->sin);
> + snd_playback_start(st);
> }
> snd_playback_send(worker->connection);
> }
> @@ -1299,26 +1303,31 @@ SPICE_GNUC_VISIBLE void
> spice_server_record_set_mute(SpiceRecordInstance *sin, u
> snd_record_send_mute(record_channel);
> }
>
> -SPICE_GNUC_VISIBLE void
> spice_server_record_start(SpiceRecordInstance *sin)
> +static void snd_record_start(SpiceRecordState *st)
> {
> - SndChannel *channel = sin->st->worker.connection;
> + SndChannel *channel = st->worker.connection;
> RecordChannel *record_channel = SPICE_CONTAINEROF(channel,
> RecordChannel, base);
>
> - sin->st->worker.active = 1;
> + st->worker.active = 1;
> if (!channel)
> return;
> - spice_assert(!record_channel->base.active);
> - record_channel->base.active = TRUE;
> + spice_assert(!channel->active);
> record_channel->read_pos = record_channel->write_pos =
> 0; //todo: improve by
> //st
> ream generation
> - if (!record_channel->base.client_active) {
> - snd_set_command(&record_channel->base,
> SND_RECORD_CTRL_MASK);
> - snd_record_send(&record_channel->base);
> + channel->active = TRUE;
> + if (!channel->client_active) {
> + snd_set_command(channel, SND_RECORD_CTRL_MASK);
> + snd_record_send(channel);
> } else {
> - record_channel->base.command &= ~SND_RECORD_CTRL_MASK;
> + channel->command &= ~SND_RECORD_CTRL_MASK;
> }
> }
>
> +SPICE_GNUC_VISIBLE void
> spice_server_record_start(SpiceRecordInstance *sin)
> +{
> + snd_record_start(sin->st);
> +}
> +
> SPICE_GNUC_VISIBLE void spice_server_record_stop(SpiceRecordInstance
> *sin)
> {
> SndChannel *channel = sin->st->worker.connection;
> @@ -1465,7 +1474,7 @@ static void snd_set_record_peer(RedChannel
> *channel, RedClient *client, RedsStre
>
> on_new_record_channel(worker, &record_channel->base);
> if (worker->active) {
> - spice_server_record_start(st->sin);
> + snd_record_start(st);
> }
> snd_record_send(worker->connection);
> }
> @@ -1513,7 +1522,6 @@ void snd_attach_playback(RedsState *reds,
> SpicePlaybackInstance *sin)
> ClientCbs client_cbs = { NULL, };
>
> sin->st = spice_new0(SpicePlaybackState, 1);
> - sin->st->sin = sin;
> playback_worker = &sin->st->worker;
> playback_worker->frequency = SND_CODEC_CELT_PLAYBACK_FREQ; /*
> Default to the legacy rate */
>
> @@ -1543,7 +1551,6 @@ void snd_attach_record(RedsState *reds,
> SpiceRecordInstance *sin)
> ClientCbs client_cbs = { NULL, };
>
> sin->st = spice_new0(SpiceRecordState, 1);
> - sin->st->sin = sin;
> record_worker = &sin->st->worker;
> record_worker->frequency = SND_CODEC_CELT_PLAYBACK_FREQ; /*
> Default to the legacy rate */
>
The rest looks fine.
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
More information about the Spice-devel
mailing list