qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 03/17] audio: make the resampling code greedy


From: Marc-André Lureau
Subject: Re: [PATCH v2 03/17] audio: make the resampling code greedy
Date: Wed, 22 Feb 2023 14:49:38 +0400

Hi

On Mon, Feb 6, 2023 at 10:52 PM Volker Rümelin <vr_qemu@t-online.de> wrote:
>
> Read the maximum possible number of audio frames instead of the
> minimum necessary number of frames when the audio stream is
> downsampled and the output buffer is limited. This makes the
> function symmetrical to upsampling when the input buffer is
> limited. The maximum possible number of frames is written here.
>
> With this change it's easier to calculate the exact number of
> audio frames the resample function will read or write. These two
> functions will be introduced later.
>
> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>

a bit hard to review, but looks ok
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>




> ---
>  audio/rate_template.h | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/audio/rate_template.h b/audio/rate_template.h
> index b432719ebb..6648f0d2e5 100644
> --- a/audio/rate_template.h
> +++ b/audio/rate_template.h
> @@ -40,8 +40,6 @@ void NAME (void *opaque, struct st_sample *ibuf, struct 
> st_sample *obuf,
>      int64_t t;
>  #endif
>
> -    ilast = rate->ilast;
> -
>      istart = ibuf;
>      iend = ibuf + *isamp;
>
> @@ -59,15 +57,17 @@ void NAME (void *opaque, struct st_sample *ibuf, struct 
> st_sample *obuf,
>          return;
>      }
>
> -    while (obuf < oend) {
> +    /* without input samples, there's nothing to do */
> +    if (ibuf >= iend) {
> +        *osamp = 0;
> +        return;
> +    }
>
> -        /* Safety catch to make sure we have input samples.  */
> -        if (ibuf >= iend) {
> -            break;
> -        }
> +    ilast = rate->ilast;
>
> -        /* read as many input samples so that ipos > opos */
> +    while (true) {
>
> +        /* read as many input samples so that ipos > opos */
>          while (rate->ipos <= (rate->opos >> 32)) {
>              ilast = *ibuf++;
>              rate->ipos++;
> @@ -78,6 +78,11 @@ void NAME (void *opaque, struct st_sample *ibuf, struct 
> st_sample *obuf,
>              }
>          }
>
> +        /* make sure that the next output sample can be written */
> +        if (obuf >= oend) {
> +            break;
> +        }
> +
>          icur = *ibuf;
>
>          /* wrap ipos and opos around long before they overflow */
> --
> 2.35.3
>


--
Marc-André Lureau



reply via email to

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