On Fri, Sep 23, 2022 at 10:51 PM Volker Rümelin <vr_qemu@t-online.de> wrote:
> Split out the code in audio_get_avail() that calculates the
> buffer size that the audio frontend can read. This is similar
> to the code changes in audio_get_free().
>
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> audio/audio.c | 24 +++++++++++++++++++-----
> 1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index dd66b745e5..ba0c62b120 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -986,6 +986,18 @@ void AUD_set_active_in (SWVoiceIn *sw, int on)
> }
> }
>
> +/**
> + * audio_frontend_frames_in() - returns the number of frames the
> resampling
> + * code generates from frames_in frames
> + *
> + * @sw: audio recording frontend
> + * @frames_in: number of frames
> + */
> +static size_t audio_frontend_frames_in(SWVoiceIn *sw, size_t frames_in)
> +{
> + return ((int64_t)frames_in << 32) / sw->ratio;
> +}
> +
> static size_t audio_get_avail (SWVoiceIn *sw)
> {
> size_t live;
> @@ -1002,12 +1014,12 @@ static size_t audio_get_avail (SWVoiceIn *sw)
> }
>
> ldebug (
> - "%s: get_avail live %zu ret %" PRId64 "\n",
> + "%s: get_avail live %zu frontend frames %zu\n",
> SW_NAME (sw),
> - live, (((int64_t) live << 32) / sw->ratio) *
> sw->info.bytes_per_frame
> + live, audio_frontend_frames_in(sw, live)
> );
>
> - return (((int64_t) live << 32) / sw->ratio) *
> sw->info.bytes_per_frame;
> + return live;
> }
>
> /**
> @@ -1309,11 +1321,13 @@ static void audio_run_in (AudioState *s)
> sw->total_hw_samples_acquired -= min;
>
> if (sw->active) {
> + size_t sw_avail = audio_get_avail(sw);
> size_t avail;
>
> - avail = audio_get_avail (sw);
> + avail = audio_frontend_frames_in(sw, sw_avail);
> if (avail > 0) {
> - sw->callback.fn (sw->callback.opaque, avail);
> + sw->callback.fn(sw->callback.opaque,
> + avail * sw->info.bytes_per_frame);
> }
> }
> }
> --
> 2.35.3
>
>
>
--
Marc-André Lureau