qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] Re: OSS audio debugging
@ 2004-06-14  7:57 Mike Nordell
  2004-06-14  9:02 ` malc
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Mike Nordell @ 2004-06-14  7:57 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 3946 bytes --]

malc wrote:

> And while im figuring this out you can
> try experimental SDL output driver(but see caveats):

I've made some quite heavy modifications to your SDL audio patch, and from
where I stand it now seems to work. It might seem a bit bloated in places,
and it contains quite a lot of experimental code for tweaking. As the diff
became larger than the file itself, I attached the file.

I'd appreciate reports from both Win32'ers and *nix land using SDL, to see
if there are any SDL differences between platforms not handled.

I've done some testing to validate correctness of not only this SDL audio
"driver" implementation, but QEMU as a whole. Tests have been performed on
Windows 2000 host, therefore obviously only softmmu. I also only tested with
"set SDL_VIDEODRIVER=windib", since DX (the SDL default) is for some reason
for me way slower (and did interfere with keymappings - I haven't bothered
to test pckbd.c CVS, since current setup works for me).
All software tested works on real h/w, and on other emu's.


Comanche: Maximum Overkill - DOS game from 1992.
Tested with all combinations of pci, cirrus-vga and enable-audio.
Works. Fully playable. Audio latency seems to be in the 50-100ms range,
which seems like an acceptable tradeoff between latency and host overhead.


Syndicate - DOS + DOS4WG Game from 1993. Sound works partially during the
introduction sequence (lacking FM-emulation it sounds a bit strange though).
Gets a bit "choppy" and "cracles/pops" due to the fact it changes sample
rate of the SB16 DSP frequently, and closing+opening the audio device is a
quite expensive operation.
Mouse queue is never drained by guest program, why interaction doesn't work
since kbd input hangs when mouse/kbd queue is full. Works with both real h/w
and other emu's. PIC problem?


DOOM Shareware - this one needs no introduction.
Crashes, hangs and plays really "choppy" sound.
The crashes and hangs (depending on moon-phase) seems to be due to
incomplete detection of self-modifying code. When it does run for more than
1 second, the choppy sound I suspect might be, as for many cases here, due
to timing or incorrect SB16, PIC or DMA emulation. That it also run as in
molasses (the seconds I got it to run) further strengthen my suspicions of
timing or PIC - even that it could be a large amount of self-modifying code
invalidating the TB all the time too. I haven't dug deeper into it.


Transport Tycoon
With -cirrus-vga it fails to start with error "Unable to set up SVGA
display".
Without cirrus it switches video mode, but then seems to just hang.


Windows 2000 sp4. Works, except every sound buffer sent (from host to
emulator, I suspect) seems to play twice. Even the "tick" sound when moving
from one folder to another in the Explorer is "echoed". CPU load is not high
during audio playback, why I suspect
timing, PIC, DMA or SB16 emulation problems. Other, larger, waveform
playback sounds horrible due to this echo/reverb effect - and the fact it
seems to not even play at the full speed it should, seems to suggest PIC
problems (interrupt not delivered to guest?).
With my slirp DHCP networking patch, and addition of the NE2000 ASIC writeb
(neither yet committed it seems) it even got an IP from slirp DHCP on every
boot. Never been able to access anything but the host machine itself though,
and then only with a ICMP ping (which slirp rewrites as a UDP ping). DNS
queries do leave host machine and passes through a gateway, and returns, but
never seems to reach the guest OS. TCP socket has never been opened by QEMU
despite attempts.


Windows 98.
Only tested with -enable-audio -cirrusvga -pci -nics 0.
Claims the SB16 device is not functional. The usual suspects. Nothing else
tested.


Even with these problems, I'd say QEMU is starting to become possibly the
best PC emulator there is. As a sidenote I can mention I tested one of the
DOS programs under VMWare. Yep, VMWare crashed allright. ;-P


/Mike

[-- Attachment #2: oss.c.gz --]
[-- Type: application/x-gzip, Size: 7541 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread
* [Qemu-devel] Re: OSS audio debugging
@ 2004-06-10 22:59 Mike Nordell
  2004-06-11  5:23 ` malc
  0 siblings, 1 reply; 11+ messages in thread
From: Mike Nordell @ 2004-06-10 22:59 UTC (permalink / raw)
  To: qemu-devel

malc wrote:

> ... while im figuring this out you can
> try experimental SDL output driver(but see caveats):
> http://www.boblycat.org/~malc/code/patches/qemu/5_aqemu.patch.gz
[snip]
> b. it was hacked in an hour or so and therefore i can not claim that it
>    works all that well, in fact it contains a deadlock

Indeed.

> P.S. Can someone on Windows try this?

Done, and it fails miserably. It hangs QEMU due to the deadlock (NT5sp4 both
host and guest).

One thread is waiting in for the semaphore "s" in audio_callback, called
from SDL_RunAudio in SDL's audio thread, while another thread is doing some
seriously wicked:

dsp_write (sb16.c)
complete (sb16.c)
dma_cmd (sb16.c)
AUD_reset (oss.c)
maybe_open (oss.c)
do_open (oss.c)
SDL_CloseAudio
SDL_QuitSubSystem
SDL_AudioQuit
SDL_WaitThread

The deadlock is of course that the callback thread is hanging in sem_wait()
in oss.c, while the requested shutdown of SDL's audio subsystem is waiting
for that very audio thread to die. Yep, instant deadlock (not to mention a
possibly very slow and heavy-weight operation in response to a virtual SB16
DSP DMA transfer).

Another thing I found odd was the use of AUDIO_S16/copy_u16_to_s16 in
response to a request for AUD_FMT_U16. Any particular reason to not request
AUDIO_U16 and use copy_no_conversion?

Problems set aside, this is a giant leap forward for Win32 host audio and is
something I really want to see get into CVS once cleaned up and debugged.
I'll do some more debugging on my side too.

Thanks!

/Mike

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2004-06-15 22:01 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-14  7:57 [Qemu-devel] Re: OSS audio debugging Mike Nordell
2004-06-14  9:02 ` malc
2004-06-14 15:56 ` malc
2004-06-14 19:01 ` Fabrice Bellard
2004-06-14 19:24   ` [Qemu-devel] compile error (current CVS) Grzegorz Kulewski
2004-06-15 11:39     ` vaise
2004-06-15 14:09       ` [OK NOW] " Grzegorz Kulewski
2004-06-15 21:59         ` [Qemu-devel] Re: [OK NOW] " Gabriel Ebner
2004-06-14 19:29   ` [Qemu-devel] Re: OSS audio debugging Jean-Michel POURE
  -- strict thread matches above, loose matches on Subject: below --
2004-06-10 22:59 Mike Nordell
2004-06-11  5:23 ` malc

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).