[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