mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
asc: generate silence if FIFO empty but engine still running
MacOS (un)helpfully leaves the FIFO engine running even when all the samples have been written to the hardware, and expects the FIFO status flags and IRQ to be updated continuously. There is an additional problem in that not all audio backends guarantee an all-zero output when there is no FIFO data available, in particular the Windows dsound backend which re-uses its internal circular buffer causing the last played sound to loop indefinitely. Whilst this is effectively a bug in the Windows dsound backend, work around it for now using a simple heuristic: if the FIFO remains empty for half a cycle (~23ms) then continuously fill the generated buffer with empty silence. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-ID: <20231004083806.757242-9-mark.cave-ayland@ilande.co.uk> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
ac13a6b3fd
commit
5243e5543e
2 changed files with 21 additions and 0 deletions
|
@ -68,6 +68,8 @@ struct ASCState {
|
|||
int samples;
|
||||
int shift;
|
||||
|
||||
uint8_t *silentbuf;
|
||||
|
||||
/* Time when we were last able to generate samples */
|
||||
int64_t fifo_empty_ns;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue