[Spice-devel] [opus 2/qemu] Add the ability to vary Spice playback and record rates, to facilitate Opus support.
Jeremy White
jwhite at codeweavers.com
Tue Oct 15 20:23:41 CEST 2013
My apologies; this was an error - I sent this one twice. The 'correct'
one is opus 5/qemu.
Cheers,
Jeremy
On 10/15/2013 09:29 AM, Jeremy White wrote:
> Signed-off-by: Jeremy White <jwhite at codeweavers.com>
> ---
> audio/spiceaudio.c | 27 +++++++++++++++++++++++++--
> 1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/audio/spiceaudio.c b/audio/spiceaudio.c
> index bc24557..1a94d8e 100644
> --- a/audio/spiceaudio.c
> +++ b/audio/spiceaudio.c
> @@ -25,8 +25,17 @@
> #include "audio.h"
> #include "audio_int.h"
>
> -#define LINE_IN_SAMPLES 1024
> -#define LINE_OUT_SAMPLES 1024
> +#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
> +#define LINE_OUT_SAMPLES (480 * 4)
> +#else
> +#define LINE_OUT_SAMPLES (256 * 4)
> +#endif
> +
> +#if SPICE_INTERFACE_RECORD_MAJOR > 1 || SPICE_INTERFACE_RECORD_MINOR >= 3
> +#define LINE_IN_SAMPLES (480 * 4)
> +#else
> +#define LINE_IN_SAMPLES (256 * 4)
> +#endif
>
> typedef struct SpiceRateCtl {
> int64_t start_ticks;
> @@ -111,7 +120,11 @@ static int line_out_init (HWVoiceOut *hw, struct audsettings *as)
> SpiceVoiceOut *out = container_of (hw, SpiceVoiceOut, hw);
> struct audsettings settings;
>
> +#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
> + settings.freq = spice_server_get_best_playback_rate(NULL);
> +#else
> settings.freq = SPICE_INTERFACE_PLAYBACK_FREQ;
> +#endif
> settings.nchannels = SPICE_INTERFACE_PLAYBACK_CHAN;
> settings.fmt = AUD_FMT_S16;
> settings.endianness = AUDIO_HOST_ENDIANNESS;
> @@ -122,6 +135,9 @@ static int line_out_init (HWVoiceOut *hw, struct audsettings *as)
>
> out->sin.base.sif = &playback_sif.base;
> qemu_spice_add_interface (&out->sin.base);
> +#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
> + spice_server_set_playback_rate(&out->sin, settings.freq);
> +#endif
> return 0;
> }
>
> @@ -232,7 +248,11 @@ static int line_in_init (HWVoiceIn *hw, struct audsettings *as)
> SpiceVoiceIn *in = container_of (hw, SpiceVoiceIn, hw);
> struct audsettings settings;
>
> +#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
> + settings.freq = spice_server_get_best_record_rate(NULL);
> +#else
> settings.freq = SPICE_INTERFACE_RECORD_FREQ;
> +#endif
> settings.nchannels = SPICE_INTERFACE_RECORD_CHAN;
> settings.fmt = AUD_FMT_S16;
> settings.endianness = AUDIO_HOST_ENDIANNESS;
> @@ -243,6 +263,9 @@ static int line_in_init (HWVoiceIn *hw, struct audsettings *as)
>
> in->sin.base.sif = &record_sif.base;
> qemu_spice_add_interface (&in->sin.base);
> +#if SPICE_INTERFACE_PLAYBACK_MAJOR > 1 || SPICE_INTERFACE_PLAYBACK_MINOR >= 3
> + spice_server_set_record_rate(&in->sin, settings.freq);
> +#endif
> return 0;
> }
>
More information about the Spice-devel
mailing list