]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
audio: fix size calculation in AUD_get_buffer_size_out()
authorVolker Rümelin <vr_qemu@t-online.de>
Thu, 15 May 2025 05:44:25 +0000 (07:44 +0200)
committerMichael Tokarev <mjt@tls.msk.ru>
Thu, 5 Jun 2025 12:10:30 +0000 (15:10 +0300)
The buffer size calculated by AUD_get_buffer_size_out() is often
incorrect. sw->hw->samples * sw->hw->info.bytes_per_frame is the
size of the mixing engine buffer in audio frames multiplied by
the size of one frame of the audio backend. Due to resampling or
format conversion, the size of the frontend buffer can differ
significantly.

Return the correct buffer size when the mixing engine is used.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20250515054429.7385-3-vr_qemu@t-online.de>
(cherry picked from commit ccb4fec0e5f233cb61a83b3af59ae11716ea06c0)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
audio/audio.c

index 0caf41fff64ee13fad0dee34f2de69038328425e..82f06b17e4c4014d124684bff8ea37b47a751375 100644 (file)
@@ -898,6 +898,10 @@ int AUD_get_buffer_size_out(SWVoiceOut *sw)
         return 0;
     }
 
+    if (audio_get_pdo_out(sw->s->dev)->mixing_engine) {
+        return sw->resample_buf.size * sw->info.bytes_per_frame;
+    }
+
     return sw->hw->samples * sw->hw->info.bytes_per_frame;
 }