diff options
author | Peter Maydell | 2021-01-15 23:21:21 +0100 |
---|---|---|
committer | Peter Maydell | 2021-01-15 23:21:21 +0100 |
commit | 825a215c003cd028e26c7d19aa5049d957345f43 (patch) | |
tree | a3bedcc1d73490abbe5994b065289147f8d0b10e /audio/audio_win_int.c | |
parent | Merge remote-tracking branch 'remotes/kraxel/tags/ui-20210115-pull-request' i... (diff) | |
parent | audio: space prohibited between function name and parenthesis'(' (diff) | |
download | qemu-825a215c003cd028e26c7d19aa5049d957345f43.tar.gz qemu-825a215c003cd028e26c7d19aa5049d957345f43.tar.xz qemu-825a215c003cd028e26c7d19aa5049d957345f43.zip |
Merge remote-tracking branch 'remotes/kraxel/tags/audio-20210115-pull-request' into staging
audio: improvements for sdl, pulse, fsound.
audio: cleanups & codestyle fixes.
# gpg: Signature made Fri 15 Jan 2021 13:20:56 GMT
# gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full]
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full]
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full]
# Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138
* remotes/kraxel/tags/audio-20210115-pull-request: (30 commits)
audio: space prohibited between function name and parenthesis'('
audio: Suspect code indent for conditional statements
audio: Don't use '%#' in format strings
audio: Fix lines over 90 characters
audio: foo* bar" should be "foo *bar".
audio: Add spaces around operator/delete redundant spaces
audio: Add braces for statements/fix braces' position
dsoundaudio: fix log message
dsoundaudio: enable f32 audio sample format
dsoundaudio: rename dsound_open()
dsoundaudio: replace GetForegroundWindow()
paaudio: send recorded data in smaller chunks
paaudio: limit minreq to 75% of audio timer_rate
paaudio: comment bugs in functions qpa_init_*
paaudio: remove unneeded code
paaudio: wait until the playback stream is ready
paaudio: wait for PA_STREAM_READY in qpa_write()
paaudio: avoid to clip samples multiple times
audio: remove remaining unused plive code
sdlaudio: enable (in|out).mixing-engine=off
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'audio/audio_win_int.c')
-rw-r--r-- | audio/audio_win_int.c | 73 |
1 files changed, 48 insertions, 25 deletions
diff --git a/audio/audio_win_int.c b/audio/audio_win_int.c index b938fd667b..5ea8157dfc 100644 --- a/audio/audio_win_int.c +++ b/audio/audio_win_int.c @@ -5,6 +5,7 @@ #define AUDIO_CAP "win-int" #include <windows.h> +#include <mmreg.h> #include <mmsystem.h> #include "audio.h" @@ -16,7 +17,6 @@ int waveformat_from_audio_settings (WAVEFORMATEX *wfx, { 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); @@ -26,11 +26,13 @@ int waveformat_from_audio_settings (WAVEFORMATEX *wfx, switch (as->fmt) { case AUDIO_FORMAT_S8: case AUDIO_FORMAT_U8: + wfx->wFormatTag = WAVE_FORMAT_PCM; wfx->wBitsPerSample = 8; break; case AUDIO_FORMAT_S16: case AUDIO_FORMAT_U16: + wfx->wFormatTag = WAVE_FORMAT_PCM; wfx->wBitsPerSample = 16; wfx->nAvgBytesPerSec <<= 1; wfx->nBlockAlign <<= 1; @@ -38,13 +40,21 @@ int waveformat_from_audio_settings (WAVEFORMATEX *wfx, case AUDIO_FORMAT_S32: case AUDIO_FORMAT_U32: + wfx->wFormatTag = WAVE_FORMAT_PCM; + wfx->wBitsPerSample = 32; + wfx->nAvgBytesPerSec <<= 2; + wfx->nBlockAlign <<= 2; + break; + + case AUDIO_FORMAT_F32: + wfx->wFormatTag = WAVE_FORMAT_IEEE_FLOAT; wfx->wBitsPerSample = 32; wfx->nAvgBytesPerSec <<= 2; wfx->nBlockAlign <<= 2; break; default: - dolog ("Internal logic error: Bad audio format %d\n", as->freq); + dolog("Internal logic error: Bad audio format %d\n", as->fmt); return -1; } @@ -54,12 +64,6 @@ int waveformat_from_audio_settings (WAVEFORMATEX *wfx, 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; @@ -83,23 +87,42 @@ int waveformat_to_audio_settings (WAVEFORMATEX *wfx, return -1; } - switch (wfx->wBitsPerSample) { - case 8: - as->fmt = AUDIO_FORMAT_U8; - break; - - case 16: - as->fmt = AUDIO_FORMAT_S16; - break; - - case 32: - as->fmt = AUDIO_FORMAT_S32; - break; - - default: - dolog ("Invalid wave format, bits per sample is not " - "8, 16 or 32, but %d\n", - wfx->wBitsPerSample); + if (wfx->wFormatTag == WAVE_FORMAT_PCM) { + switch (wfx->wBitsPerSample) { + case 8: + as->fmt = AUDIO_FORMAT_U8; + break; + + case 16: + as->fmt = AUDIO_FORMAT_S16; + break; + + case 32: + as->fmt = AUDIO_FORMAT_S32; + break; + + default: + dolog("Invalid PCM wave format, bits per sample is not " + "8, 16 or 32, but %d\n", + wfx->wBitsPerSample); + return -1; + } + } else if (wfx->wFormatTag == WAVE_FORMAT_IEEE_FLOAT) { + switch (wfx->wBitsPerSample) { + case 32: + as->fmt = AUDIO_FORMAT_F32; + break; + + default: + dolog("Invalid IEEE_FLOAT wave format, bits per sample is not " + "32, but %d\n", + wfx->wBitsPerSample); + return -1; + } + } else { + dolog("Invalid wave format, tag is not PCM and not IEEE_FLOAT, " + "but %d\n", + wfx->wFormatTag); return -1; } |