[Spice-devel] [PATCH v2] sndworker: add AudioVolume/AudioMute messages
Marc-André Lureau
marcandre.lureau at gmail.com
Tue Jun 21 06:32:58 PDT 2011
Hi
On Tue, Jun 21, 2011 at 3:22 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
> Hi,
>
> I finally read the patch in full ;) You'll find a few minor comments
> inline.
>
> On Mon, Jun 20, 2011 at 11:40:01PM +0200, Marc-André Lureau wrote:
>> @@ -141,14 +145,22 @@ struct SndWorker {
>> int active;
>> };
>>
>> +typedef struct SpiceVolumeState {
>> + uint8_t volume_nchannels;
>> + uint16_t *volume;
>> + int mute;
>
> It's the only place where mute is an int, why not make it a uint8_t as
> everywhere else?
> Another issue I have with mute is that I assume it's a boolean, however
> there is no place at all where it's made obvious, it could very well be a 0
> to 255 value and me making bad assumptions about it. If it's actually a
> boolean, maybe we could use bool here instead (though "bool" is only used
> in one other place in server/), or maybe it could be treated more like a
> boolean ? Eg use msg->mute = !!mute when sending the value to the server.
> Or naming it is_muted. Or simply adding a comment :) But I really think it
> would be nice to make this slightly more obvious.
I fully agree with you, but to be consistent with the code around, I
used int (like "celt_allowed", which I will remove in a following
patch in favour a caps check function).
>> @@ -823,6 +912,38 @@ static void snd_set_command(SndChannel *channel, uint32_t command)
>> channel->command |= command;
>> }
>>
>> +__visible__ void spice_server_playback_set_volume(SpicePlaybackInstance *sin,
>> + uint8_t nchannels,
>> + uint16_t *volume)
>> +{
>> + SpiceVolumeState *st = &sin->st->volume;
>> + SndChannel *channel = sin->st->worker.connection;
>> + PlaybackChannel *playback_channel = SPICE_CONTAINEROF(channel, PlaybackChannel, base);
>> +
>> + st->volume_nchannels = nchannels;
>> + free(st->volume);
>> + st->volume = spice_memdup(volume, sizeof(uint16_t) * nchannels);
>> +
>> + if (!channel)
>> + return;
>> +
>> + snd_playback_send_volume(playback_channel);
>> +}
>
> snd_playback_send_volume has a return value to indicate failure. For now it
> won't happen: the only case when this could happen is if channel is NULL,
> which is tested here, and anyway the code would crash before. But maybe we
> should be robust against future changes and start by trying to call this
> function, and then update sin->st->volume if it succeeded, otherwise report
> an error? (same comment for the other public _set_ functions)
We need to save current volume unconditionnaly so that later client
connections can receive it.
--
Marc-André Lureau
More information about the Spice-devel
mailing list