[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 14/17] audio: wire up st_rate_frames_out()
From: |
Marc-André Lureau |
Subject: |
Re: [PATCH v2 14/17] audio: wire up st_rate_frames_out() |
Date: |
Wed, 22 Feb 2023 14:50:16 +0400 |
Hi
On Mon, Feb 6, 2023 at 10:53 PM Volker Rümelin <vr_qemu@t-online.de> wrote:
>
> Wire up the st_rate_frames_out() function and replace
> audio_frontend_frames_in() to make audio packet length
> calculation exact.
>
> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Same comments as st_rate_frames_in patches.
> ---
> audio/audio.c | 29 ++++++++---------------------
> 1 file changed, 8 insertions(+), 21 deletions(-)
>
> diff --git a/audio/audio.c b/audio/audio.c
> index 22c36d6660..dad17e59b8 100644
> --- a/audio/audio.c
> +++ b/audio/audio.c
> @@ -579,7 +579,7 @@ static void audio_pcm_sw_resample_in(SWVoiceIn *sw,
> static size_t audio_pcm_sw_read(SWVoiceIn *sw, void *buf, size_t buf_len)
> {
> HWVoiceIn *hw = sw->hw;
> - size_t live, frames_out_max, swlim, total_in, total_out;
> + size_t live, frames_out_max, total_in, total_out;
>
> live = hw->total_samples_captured - sw->total_hw_samples_acquired;
> if (!live) {
> @@ -590,12 +590,10 @@ static size_t audio_pcm_sw_read(SWVoiceIn *sw, void
> *buf, size_t buf_len)
> return 0;
> }
>
> - frames_out_max = buf_len / sw->info.bytes_per_frame;
> + frames_out_max = MIN(buf_len / sw->info.bytes_per_frame,
> + sw->resample_buf.size);
>
> - swlim = (live * sw->ratio) >> 32;
> - swlim = MIN(swlim, frames_out_max);
> -
> - audio_pcm_sw_resample_in(sw, live, swlim, &total_in, &total_out);
> + audio_pcm_sw_resample_in(sw, live, frames_out_max, &total_in,
> &total_out);
>
> if (!hw->pcm_ops->volume_in) {
> mixeng_volume(sw->resample_buf.buffer, total_out, &sw->vol);
> @@ -979,18 +977,6 @@ 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 * sw->ratio >> 32;
> -}
> -
> static size_t audio_get_avail (SWVoiceIn *sw)
> {
> size_t live;
> @@ -1007,9 +993,9 @@ static size_t audio_get_avail (SWVoiceIn *sw)
> }
>
> ldebug (
> - "%s: get_avail live %zu frontend frames %zu\n",
> + "%s: get_avail live %zu frontend frames %u\n",
> SW_NAME (sw),
> - live, audio_frontend_frames_in(sw, live)
> + live, st_rate_frames_out(sw->rate, live)
> );
>
> return live;
> @@ -1314,8 +1300,9 @@ static void audio_run_in (AudioState *s)
> size_t sw_avail = audio_get_avail(sw);
> size_t avail;
>
> - avail = audio_frontend_frames_in(sw, sw_avail);
> + avail = st_rate_frames_out(sw->rate, sw_avail);
> if (avail > 0) {
> + avail = MIN(avail, sw->resample_buf.size);
> sw->callback.fn(sw->callback.opaque,
> avail * sw->info.bytes_per_frame);
> }
> --
> 2.35.3
>
--
Marc-André Lureau
- [PATCH v2 11/17] audio: replace the resampling loop in audio_pcm_sw_read(), (continued)
- [PATCH v2 11/17] audio: replace the resampling loop in audio_pcm_sw_read(), Volker Rümelin, 2023/02/06
- [PATCH v2 04/17] audio: replace the resampling loop in audio_pcm_sw_write(), Volker Rümelin, 2023/02/06
- [PATCH v2 12/17] audio: rename variables in audio_pcm_sw_read(), Volker Rümelin, 2023/02/06
- [PATCH v2 13/17] audio/mixeng: calculate number of output frames, Volker Rümelin, 2023/02/06
- [PATCH v2 15/17] audio: handle leftover audio frame from upsampling, Volker Rümelin, 2023/02/06
- [PATCH v2 14/17] audio: wire up st_rate_frames_out(), Volker Rümelin, 2023/02/06
- Re: [PATCH v2 14/17] audio: wire up st_rate_frames_out(),
Marc-André Lureau <=
- [PATCH v2 17/17] audio: remove sw->ratio, Volker Rümelin, 2023/02/06
- [PATCH v2 16/17] audio/audio_template: substitute sw->hw with hw, Volker Rümelin, 2023/02/06