qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fix video playback slowdown when spice client no audio enabl


From: Volker Rümelin
Subject: Re: [PATCH] Fix video playback slowdown when spice client no audio enabled
Date: Sun, 13 Sep 2020 14:27:32 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0

Am 10.09.20 um 13:17 schrieb zhou qi:
> From e8c2e283f0954de255a32ea70d577d5e61992399 Mon Sep 17 00:00:00 2001
> From: Qi Zhou <atmgnd@outlook.com>
> Date: Thu, 10 Sep 2020 19:09:29 +0800
> Subject: [PATCH] Fix video playback slowdown when spice client no audio 
> enabled
>
> You will get video playback slowdown on the following cases
>
> 1. use official spice client with audio channel disabled, use 
> --spice-disable-audio
>    option
> 2. thirtpart client doesn't implement audio channel
>
> ref: 
> https://github.com/qemu/qemu/commit/fb35c2cec58985f0b8d2733f1b91927542eeb3fd
> Signed-off-by: Qi Zhou <atmgnd@outlook.com>
> ---
>  audio/audio.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index ce8c6dec5f..50febe190f 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -1091,7 +1091,11 @@ static size_t audio_pcm_hw_run_out(HWVoiceOut *hw, 
> size_t live)
>      while (live) {
>          size_t size, decr, proc;
>          void *buf = hw->pcm_ops->get_buffer_out(hw, &size);
> -        if (!buf || size == 0) {
> +
> +        if (!buf) {
> +            hw->mix_buf->pos = (hw->mix_buf->pos + live) % hw->mix_buf->size;
> +            return clipped + live;
> +        } else if ( size == 0) {
>              break;
>          }
>  

Hello Qi,

your patch breaks audio playback with the dsoundaudio backend.

I suggest you make the following changes:

- Test for size == 0 first and leave the loop in that case.
- For buf == NULL drop size bytes. Don't leave the loop with break or return.
- Verify all audio backends adhere to the new rules and fix them if necessary. 
It's quite possible no patches are needed.
- Rate limit the audio stream in function line_out_get_buffer() in 
audio/spiceaudio.c for the noaudio case too. Have a look at audio/spiceaudio.c 
at version v4.1.0. The code there was correct.

Please don't forget to run scripts/checkpatch.pl on your next patches and don't 
forget to CC the maintainer.

With best regards,

Volker



reply via email to

[Prev in Thread] Current Thread [Next in Thread]