]> git.proxmox.com Git - mirror_qemu.git/commit - audio/mixeng.h
audio: make playback packet length calculation exact
authorVolker Rümelin <vr_qemu@t-online.de>
Fri, 24 Feb 2023 19:05:49 +0000 (20:05 +0100)
committerMarc-André Lureau <marcandre.lureau@redhat.com>
Mon, 6 Mar 2023 06:30:23 +0000 (10:30 +0400)
commit1a01df3db89010d40eb43889c3272d864b3b9430
treefba00f749f3ac1013c6ae9ae726dbd7d5eb25153
parent1fe3cae39f059c9fc2010e3c51c0bbd696cbf880
audio: make playback packet length calculation exact

Introduce the new function st_rate_frames_in() to calculate the
exact number of audio input frames needed to get a given number
of audio output frames. The exact number of frames depends only
on the difference of opos - ipos and the number of output frames.
When downsampling, this function returns the maximum number of
input frames needed.

This new function replaces the audio_frontend_frames_out() function,
which calculated the average number of input frames rounded down
to the nearest integer. Because audio_frontend_frames_out() also
limited the number of input frames to the size of the resample
buffer, st_rate_frames_in() is not a direct replacement and two
additional MIN() functions are needed. One to prevent resample
buffer overflows and one to limit the available bytes for the audio
frontends.

After this patch the audio packet length calculation for playback is
exact. When upsampling, it's still possible that the audio frontends
can't write the last audio frame. This will be fixed later.

Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20230224190555.7409-9-vr_qemu@t-online.de>
audio/audio.c
audio/mixeng.c
audio/mixeng.h