[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 19/27] audio: don't misuse audio_pcm_sw_write()
From: |
marcandre . lureau |
Subject: |
[PULL 19/27] audio: don't misuse audio_pcm_sw_write() |
Date: |
Mon, 6 Mar 2023 10:51:54 +0400 |
From: Volker Rümelin <vr_qemu@t-online.de>
The audio_pcm_sw_write() function is intended to convert a
PCM audio stream to the internal representation, adjust the
volume, and then mix it with the other audio streams with a
possibly changed sample rate in mix_buf. In order for the
audio_capture_mix_and_clear() function to use audio_pcm_sw_write(),
it must bypass the first two tasks of audio_pcm_sw_write().
Since patch "audio: split out the resampling loop in
audio_pcm_sw_write()" this is no longer necessary, because now
the audio_pcm_sw_resample_out() function can be used instead of
audio_pcm_sw_write().
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20230224190555.7409-7-vr_qemu@t-online.de>
---
audio/audio.c | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/audio/audio.c b/audio/audio.c
index cd10f1ec10..44eb7b63b4 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -1056,26 +1056,33 @@ static void audio_capture_mix_and_clear(HWVoiceOut *hw,
size_t rpos,
for (sc = hw->cap_head.lh_first; sc; sc = sc->entries.le_next) {
SWVoiceOut *sw = &sc->sw;
- int rpos2 = rpos;
+ size_t rpos2 = rpos;
n = samples;
while (n) {
size_t till_end_of_hw = hw->mix_buf.size - rpos2;
- size_t to_write = MIN(till_end_of_hw, n);
- size_t bytes = to_write * hw->info.bytes_per_frame;
- size_t written;
+ size_t to_read = MIN(till_end_of_hw, n);
+ size_t live, frames_in, frames_out;
sw->resample_buf.buffer = hw->mix_buf.buffer + rpos2;
- sw->resample_buf.size = to_write;
- written = audio_pcm_sw_write (sw, NULL, bytes);
- if (written - bytes) {
- dolog("Could not mix %zu bytes into a capture "
+ sw->resample_buf.size = to_read;
+ live = sw->total_hw_samples_mixed;
+
+ audio_pcm_sw_resample_out(sw,
+ to_read, sw->hw->mix_buf.size - live,
+ &frames_in, &frames_out);
+
+ sw->total_hw_samples_mixed += frames_out;
+ sw->empty = sw->total_hw_samples_mixed == 0;
+
+ if (to_read - frames_in) {
+ dolog("Could not mix %zu frames into a capture "
"buffer, mixed %zu\n",
- bytes, written);
+ to_read, frames_in);
break;
}
- n -= to_write;
- rpos2 = (rpos2 + to_write) % hw->mix_buf.size;
+ n -= to_read;
+ rpos2 = (rpos2 + to_read) % hw->mix_buf.size;
}
}
}
--
2.39.2
- [PULL 10/27] audio: remove audio_calloc() function, (continued)
- [PULL 10/27] audio: remove audio_calloc() function, marcandre . lureau, 2023/03/06
- [PULL 08/27] audio/audio_template: use g_malloc0() to replace audio_calloc(), marcandre . lureau, 2023/03/06
- [PULL 11/27] alsaaudio: change default playback settings, marcandre . lureau, 2023/03/06
- [PULL 12/27] alsaaudio: reintroduce default recording settings, marcandre . lureau, 2023/03/06
- [PULL 13/27] audio: change type of mix_buf and conv_buf, marcandre . lureau, 2023/03/06
- [PULL 14/27] audio: change type and name of the resample buffer, marcandre . lureau, 2023/03/06
- [PULL 15/27] audio: make the resampling code greedy, marcandre . lureau, 2023/03/06
- [PULL 16/27] audio: replace the resampling loop in audio_pcm_sw_write(), marcandre . lureau, 2023/03/06
- [PULL 17/27] audio: remove sw == NULL check, marcandre . lureau, 2023/03/06
- [PULL 18/27] audio: rename variables in audio_pcm_sw_write(), marcandre . lureau, 2023/03/06
- [PULL 19/27] audio: don't misuse audio_pcm_sw_write(),
marcandre . lureau <=
- [PULL 20/27] audio: remove unused noop_conv() function, marcandre . lureau, 2023/03/06
- [PULL 22/27] audio: replace the resampling loop in audio_pcm_sw_read(), marcandre . lureau, 2023/03/06
- [PULL 21/27] audio: make playback packet length calculation exact, marcandre . lureau, 2023/03/06
- [PULL 23/27] audio: rename variables in audio_pcm_sw_read(), marcandre . lureau, 2023/03/06
- [PULL 24/27] audio: make recording packet length calculation exact, marcandre . lureau, 2023/03/06
- [PULL 25/27] audio: handle leftover audio frame from upsampling, marcandre . lureau, 2023/03/06
- [PULL 26/27] audio/audio_template: substitute sw->hw with hw, marcandre . lureau, 2023/03/06
- [PULL 27/27] audio: remove sw->ratio, marcandre . lureau, 2023/03/06
- Re: [PULL 00/27] Audio patches, Peter Maydell, 2023/03/06