diff options
author | malc <av1474@comtv.ru> | 2009-10-10 01:13:41 +0400 |
---|---|---|
committer | malc <av1474@comtv.ru> | 2009-10-10 01:18:24 +0400 |
commit | d56316388d09c976ba2ac2ab67a400f98a11116f (patch) | |
tree | 3e46a425c5d9f4fbaead918bc07aa7bf59e53cef /audio/dsoundaudio.c | |
parent | ad323081aa0e20d3d573ea64e88a893d576c05e0 (diff) | |
download | qemu-d56316388d09c976ba2ac2ab67a400f98a11116f.tar.gz qemu-d56316388d09c976ba2ac2ab67a400f98a11116f.tar.bz2 qemu-d56316388d09c976ba2ac2ab67a400f98a11116f.zip |
Windows Waveform Audio driver (no ADC support yet)
Signed-off-by: malc <av1474@comtv.ru>
Diffstat (limited to 'audio/dsoundaudio.c')
-rw-r--r-- | audio/dsoundaudio.c | 97 |
1 files changed, 2 insertions, 95 deletions
diff --git a/audio/dsoundaudio.c b/audio/dsoundaudio.c index 5b255acd02..e5479555fa 100644 --- a/audio/dsoundaudio.c +++ b/audio/dsoundaudio.c @@ -37,6 +37,8 @@ #include <objbase.h> #include <dsound.h> +#include "audio_win_int.h" + /* #define DEBUG_DSOUND */ static struct { @@ -304,101 +306,6 @@ static int dsound_restore_out (LPDIRECTSOUNDBUFFER dsb) return -1; } -static int waveformat_from_audio_settings (WAVEFORMATEX *wfx, - struct audsettings *as) -{ - memset (wfx, 0, sizeof (*wfx)); - - wfx->wFormatTag = WAVE_FORMAT_PCM; - wfx->nChannels = as->nchannels; - wfx->nSamplesPerSec = as->freq; - wfx->nAvgBytesPerSec = as->freq << (as->nchannels == 2); - wfx->nBlockAlign = 1 << (as->nchannels == 2); - wfx->cbSize = 0; - - switch (as->fmt) { - case AUD_FMT_S8: - case AUD_FMT_U8: - wfx->wBitsPerSample = 8; - break; - - case AUD_FMT_S16: - case AUD_FMT_U16: - wfx->wBitsPerSample = 16; - wfx->nAvgBytesPerSec <<= 1; - wfx->nBlockAlign <<= 1; - break; - - case AUD_FMT_S32: - case AUD_FMT_U32: - wfx->wBitsPerSample = 32; - wfx->nAvgBytesPerSec <<= 2; - wfx->nBlockAlign <<= 2; - break; - - default: - dolog ("Internal logic error: Bad audio format %d\n", as->freq); - return -1; - } - - return 0; -} - -static int waveformat_to_audio_settings (WAVEFORMATEX *wfx, - struct audsettings *as) -{ - if (wfx->wFormatTag != WAVE_FORMAT_PCM) { - dolog ("Invalid wave format, tag is not PCM, but %d\n", - wfx->wFormatTag); - return -1; - } - - if (!wfx->nSamplesPerSec) { - dolog ("Invalid wave format, frequency is zero\n"); - return -1; - } - as->freq = wfx->nSamplesPerSec; - - switch (wfx->nChannels) { - case 1: - as->nchannels = 1; - break; - - case 2: - as->nchannels = 2; - break; - - default: - dolog ( - "Invalid wave format, number of channels is not 1 or 2, but %d\n", - wfx->nChannels - ); - return -1; - } - - switch (wfx->wBitsPerSample) { - case 8: - as->fmt = AUD_FMT_U8; - break; - - case 16: - as->fmt = AUD_FMT_S16; - break; - - case 32: - as->fmt = AUD_FMT_S32; - break; - - default: - dolog ("Invalid wave format, bits per sample is not " - "8, 16 or 32, but %d\n", - wfx->wBitsPerSample); - return -1; - } - - return 0; -} - #include "dsound_template.h" #define DSBTYPE_IN #include "dsound_template.h" |