On Fri, Sep 23, 2022 at 10:51 PM Volker Rümelin <vr_q...@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_q...@t-online.de> > Reviewed-by: Marc-André Lureau <marcandre.lur...@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