[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 03/17] audio: make the resampling code greedy
From: |
Volker Rümelin |
Subject: |
[PATCH v2 03/17] audio: make the resampling code greedy |
Date: |
Mon, 6 Feb 2023 19:52:23 +0100 |
Read the maximum possible number of audio frames instead of the
minimum necessary number of frames when the audio stream is
downsampled and the output buffer is limited. This makes the
function symmetrical to upsampling when the input buffer is
limited. The maximum possible number of frames is written here.
With this change it's easier to calculate the exact number of
audio frames the resample function will read or write. These two
functions will be introduced later.
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
---
audio/rate_template.h | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/audio/rate_template.h b/audio/rate_template.h
index b432719ebb..6648f0d2e5 100644
--- a/audio/rate_template.h
+++ b/audio/rate_template.h
@@ -40,8 +40,6 @@ void NAME (void *opaque, struct st_sample *ibuf, struct
st_sample *obuf,
int64_t t;
#endif
- ilast = rate->ilast;
-
istart = ibuf;
iend = ibuf + *isamp;
@@ -59,15 +57,17 @@ void NAME (void *opaque, struct st_sample *ibuf, struct
st_sample *obuf,
return;
}
- while (obuf < oend) {
+ /* without input samples, there's nothing to do */
+ if (ibuf >= iend) {
+ *osamp = 0;
+ return;
+ }
- /* Safety catch to make sure we have input samples. */
- if (ibuf >= iend) {
- break;
- }
+ ilast = rate->ilast;
- /* read as many input samples so that ipos > opos */
+ while (true) {
+ /* read as many input samples so that ipos > opos */
while (rate->ipos <= (rate->opos >> 32)) {
ilast = *ibuf++;
rate->ipos++;
@@ -78,6 +78,11 @@ void NAME (void *opaque, struct st_sample *ibuf, struct
st_sample *obuf,
}
}
+ /* make sure that the next output sample can be written */
+ if (obuf >= oend) {
+ break;
+ }
+
icur = *ibuf;
/* wrap ipos and opos around long before they overflow */
--
2.35.3
- [PATCH v2 00/17] audio: improve callback interface for audio frontends, Volker Rümelin, 2023/02/06
- [PATCH v2 01/17] audio: change type of mix_buf and conv_buf, Volker Rümelin, 2023/02/06
- [PATCH v2 02/17] audio: change type and name of the resample buffer, Volker Rümelin, 2023/02/06
- [PATCH v2 03/17] audio: make the resampling code greedy,
Volker Rümelin <=
- [PATCH v2 06/17] audio: rename variables in audio_pcm_sw_write(), Volker Rümelin, 2023/02/06
- [PATCH v2 05/17] audio: remove sw == NULL check, Volker Rümelin, 2023/02/06
- [PATCH v2 07/17] audio: don't misuse audio_pcm_sw_write(), Volker Rümelin, 2023/02/06
- [PATCH v2 08/17] audio: remove unused noop_conv() function, Volker Rümelin, 2023/02/06
- [PATCH v2 09/17] audio/mixeng: calculate number of input frames, Volker Rümelin, 2023/02/06