[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 14/17] audio: wire up st_rate_frames_out()
From: |
Volker Rümelin |
Subject: |
[PATCH 14/17] audio: wire up st_rate_frames_out() |
Date: |
Sun, 15 Jan 2023 14:12:21 +0100 |
From: Volker Rümelin <vr_qemu@t-online.de>
Wire up the st_rate_frames_out() function and replace
audio_frontend_frames_in() to make audio packet length
calculation exact.
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
audio/audio.c | 29 ++++++++---------------------
1 file changed, 8 insertions(+), 21 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index b660569928..ecd5d31260 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -577,7 +577,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) {
@@ -588,12 +588,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);
@@ -977,18 +975,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;
@@ -1005,9 +991,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;
@@ -1312,8 +1298,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
- [PATCH 02/17] audio: change type and name of the resample buffer, (continued)
- [PATCH 02/17] audio: change type and name of the resample buffer, Volker Rümelin, 2023/01/15
- [PATCH 04/17] audio: replace the resampling loop in audio_pcm_sw_write(), Volker Rümelin, 2023/01/15
- [PATCH 05/17] audio: remove sw == NULL check, Volker Rümelin, 2023/01/15
- [PATCH 07/17] audio: don't misuse audio_pcm_sw_write(), Volker Rümelin, 2023/01/15
- [PATCH 06/17] audio: rename variables in audio_pcm_sw_write(), Volker Rümelin, 2023/01/15
- [PATCH 08/17] audio: remove unused noop_conv() function, Volker Rümelin, 2023/01/15
- [PATCH 09/17] audio/mixeng: calculate number of input frames, Volker Rümelin, 2023/01/15
- [PATCH 10/17] audio: wire up st_rate_frames_in(), Volker Rümelin, 2023/01/15
- [PATCH 11/17] audio: replace the resampling loop in audio_pcm_sw_read(), Volker Rümelin, 2023/01/15
- [PATCH 12/17] audio: rename variables in audio_pcm_sw_read(), Volker Rümelin, 2023/01/15
- [PATCH 14/17] audio: wire up st_rate_frames_out(),
Volker Rümelin <=
- [PATCH 16/17] audio/audio_template: substitute sw->hw with hw, Volker Rümelin, 2023/01/15
- [PATCH 13/17] audio/mixeng: calculate number of output frames, Volker Rümelin, 2023/01/15
- [PATCH 15/17] audio: handle leftover audio frame from upsampling, Volker Rümelin, 2023/01/15
- [PATCH 17/17] audio: remove sw->ratio, Volker Rümelin, 2023/01/15
- Re: [PATCH 00/17] audio: improve callback interface for audio frontends, Volker Rümelin, 2023/01/15
- Re: [PATCH 00/17] audio: improve callback interface for audio frontends, Marc-André Lureau, 2023/01/31