Message ID | 20220923183640.8314-10-vr_qemu@t-online.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | audio: misc. improvements and bug fixes | expand |
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 > > >
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); } } }
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> --- audio/audio.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-)