[Spice-devel] [spice opus support 3/6 (take 3)] Add support for the Opus codec
Jeremy White
jwhite at codeweavers.com
Tue Nov 26 12:30:14 PST 2013
>> +SPICE_GNUC_VISIBLE uint32_t spice_server_get_best_record_rate(SpiceRecordInstance *sin)
>> +{
>> + int client_can_opus = TRUE;
>> + if (sin && sin->st->worker.connection)
>> + {
>> + SndChannel *channel = sin->st->worker.connection;
>> + RecordChannel *record_channel = SPICE_CONTAINEROF(channel, RecordChannel, base);
>> + client_can_opus = red_channel_client_test_remote_cap(record_channel->base.channel_client,
>> + SPICE_RECORD_CAP_OPUS);
>> + }
>> +
>> + if (client_can_opus && snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_OPUS, SND_CODEC_ANY_FREQUENCY))
>
> Wouldn't it be better to use sin->st->frequency when sin is non-NULL?
No. Frequency is always set server side, never from the client.
At this point in the code, sin->st->frequency will be set to 44100 for
backwards compatibility reasons, so using it would be harmful.
>
>> + {
>> + return SND_CODEC_OPUS_PLAYBACK_FREQ;
>> + }
>
> spice_server_get_best_playback_rate does not have these {}, I'd make them
> consistent
Yah.
In looking at this, though, I also notice that I failed to use K&R
braces in a number of places.
That's disrespectful of me; I should fix it :-/.
>> @@ -1464,8 +1525,10 @@ void snd_attach_playback(SpicePlaybackInstance *sin)
>> red_channel_register_client_cbs(channel, &client_cbs);
>> red_channel_set_data(channel, playback_worker);
>>
>> - if (snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_CELT_0_5_1))
>> + if (snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_CELT_0_5_1, SND_CODEC_ANY_FREQUENCY))
>> red_channel_set_cap(channel, SPICE_PLAYBACK_CAP_CELT_0_5_1);
>> + if (snd_codec_is_capable(SPICE_AUDIO_DATA_MODE_OPUS, SND_CODEC_ANY_FREQUENCY))
>> + red_channel_set_cap(channel, SPICE_PLAYBACK_CAP_OPUS);
>
> I think I would have delayed this bit until
> spice_server_set_playback_rate() is called, but this works this way too.
I think you're right. As written, we'll advertise Opus support, even
when run with an old qemu. I think if I shift that logic into the
spice_server_set_xxx_rate functions, it will be cleaner.
The K&R fixes will require a respin of common/snd_codec.c. I may also
replace a certain true/false pair with a flag while I'm at it.
I'll try to put together another (hopefully final) round today or tomorrow.
Cheers,
Jeremy
More information about the Spice-devel
mailing list