diff options
Diffstat (limited to 'audio/out')
-rw-r--r-- | audio/out/ao_alsa.c | 32 | ||||
-rw-r--r-- | audio/out/ao_coreaudio_utils.c | 3 | ||||
-rw-r--r-- | audio/out/ao_dsound.c | 6 | ||||
-rw-r--r-- | audio/out/ao_oss.c | 58 | ||||
-rw-r--r-- | audio/out/ao_pcm.c | 21 | ||||
-rw-r--r-- | audio/out/ao_pulse.c | 9 | ||||
-rw-r--r-- | audio/out/ao_rsound.c | 42 | ||||
-rw-r--r-- | audio/out/ao_sdl.c | 76 | ||||
-rw-r--r-- | audio/out/ao_sndio.c | 42 | ||||
-rwxr-xr-x | audio/out/ao_wasapi_utils.c | 5 |
10 files changed, 134 insertions, 160 deletions
diff --git a/audio/out/ao_alsa.c b/audio/out/ao_alsa.c index 60b8338f9d..c344f6f20e 100644 --- a/audio/out/ao_alsa.c +++ b/audio/out/ao_alsa.c @@ -38,6 +38,7 @@ #include "options/options.h" #include "options/m_option.h" #include "common/msg.h" +#include "osdep/endian.h" #define ALSA_PCM_NEW_HW_PARAMS_API #define ALSA_PCM_NEW_SW_PARAMS_API @@ -208,22 +209,17 @@ alsa_error: static const int mp_to_alsa_format[][2] = { {AF_FORMAT_S8, SND_PCM_FORMAT_S8}, {AF_FORMAT_U8, SND_PCM_FORMAT_U8}, - {AF_FORMAT_U16_LE, SND_PCM_FORMAT_U16_LE}, - {AF_FORMAT_U16_BE, SND_PCM_FORMAT_U16_BE}, - {AF_FORMAT_S16_LE, SND_PCM_FORMAT_S16_LE}, - {AF_FORMAT_S16_BE, SND_PCM_FORMAT_S16_BE}, - {AF_FORMAT_U32_LE, SND_PCM_FORMAT_U32_LE}, - {AF_FORMAT_U32_BE, SND_PCM_FORMAT_U32_BE}, - {AF_FORMAT_S32_LE, SND_PCM_FORMAT_S32_LE}, - {AF_FORMAT_S32_BE, SND_PCM_FORMAT_S32_BE}, - {AF_FORMAT_U24_LE, SND_PCM_FORMAT_U24_3LE}, - {AF_FORMAT_U24_BE, SND_PCM_FORMAT_U24_3BE}, - {AF_FORMAT_S24_LE, SND_PCM_FORMAT_S24_3LE}, - {AF_FORMAT_S24_BE, SND_PCM_FORMAT_S24_3BE}, - {AF_FORMAT_FLOAT_LE, SND_PCM_FORMAT_FLOAT_LE}, - {AF_FORMAT_FLOAT_BE, SND_PCM_FORMAT_FLOAT_BE}, - {AF_FORMAT_AC3, SND_PCM_FORMAT_S16_LE}, - {AF_FORMAT_IEC61937, SND_PCM_FORMAT_S16_LE}, + {AF_FORMAT_U16, SND_PCM_FORMAT_U16}, + {AF_FORMAT_S16, SND_PCM_FORMAT_S16}, + {AF_FORMAT_U32, SND_PCM_FORMAT_U32}, + {AF_FORMAT_S32, SND_PCM_FORMAT_S32}, + {AF_FORMAT_U24, + MP_SELECT_LE_BE(SND_PCM_FORMAT_U24_3LE, SND_PCM_FORMAT_U24_3BE)}, + {AF_FORMAT_S24, + MP_SELECT_LE_BE(SND_PCM_FORMAT_S24_3LE, SND_PCM_FORMAT_S24_3BE)}, + {AF_FORMAT_FLOAT, SND_PCM_FORMAT_FLOAT}, + {AF_FORMAT_AC3, SND_PCM_FORMAT_S16}, + {AF_FORMAT_IEC61937, SND_PCM_FORMAT_S16}, {AF_FORMAT_MPEG2, SND_PCM_FORMAT_MPEG}, {AF_FORMAT_UNKNOWN, SND_PCM_FORMAT_UNKNOWN}, }; @@ -417,13 +413,13 @@ static int init(struct ao *ao) if (err < 0) { MP_INFO(ao, "Format %s is not supported by hardware, trying default.\n", af_fmt_to_str(ao->format)); - p->alsa_fmt = SND_PCM_FORMAT_S16_LE; + p->alsa_fmt = SND_PCM_FORMAT_S16; if (AF_FORMAT_IS_AC3(ao->format)) ao->format = AF_FORMAT_AC3; else if (AF_FORMAT_IS_IEC61937(ao->format)) ao->format = AF_FORMAT_IEC61937; else - ao->format = AF_FORMAT_S16_LE; + ao->format = AF_FORMAT_S16; } err = snd_pcm_hw_params_set_format(p->alsa, alsa_hwparams, p->alsa_fmt); diff --git a/audio/out/ao_coreaudio_utils.c b/audio/out/ao_coreaudio_utils.c index da06656e9d..b39323ce72 100644 --- a/audio/out/ao_coreaudio_utils.c +++ b/audio/out/ao_coreaudio_utils.c @@ -25,6 +25,7 @@ #include "audio/out/ao_coreaudio_utils.h" #include "audio/out/ao_coreaudio_properties.h" #include "osdep/timer.h" +#include "osdep/endian.h" #include "audio/format.h" void ca_print_device_list(struct ao *ao) @@ -142,7 +143,7 @@ void ca_fill_asbd(struct ao *ao, AudioStreamBasicDescription *asbd) if ((ao->format & AF_FORMAT_SIGN_MASK) == AF_FORMAT_SI) asbd->mFormatFlags |= kAudioFormatFlagIsSignedInteger; - if ((ao->format & AF_FORMAT_END_MASK) == AF_FORMAT_BE) + if (BYTE_ORDER == BIG_ENDIAN) asbd->mFormatFlags |= kAudioFormatFlagIsBigEndian; asbd->mFramesPerPacket = 1; diff --git a/audio/out/ao_dsound.c b/audio/out/ao_dsound.c index da1742e077..78b39b17b9 100644 --- a/audio/out/ao_dsound.c +++ b/audio/out/ao_dsound.c @@ -392,14 +392,14 @@ static int init(struct ao *ao) } switch (format) { case AF_FORMAT_AC3: - case AF_FORMAT_S24_LE: - case AF_FORMAT_S16_LE: + case AF_FORMAT_S24: + case AF_FORMAT_S16: case AF_FORMAT_U8: break; default: MP_VERBOSE(ao, "format %s not supported defaulting to Signed 16-bit Little-Endian\n", af_fmt_to_str(format)); - format = AF_FORMAT_S16_LE; + format = AF_FORMAT_S16; } //set our audio parameters ao->samplerate = rate; diff --git a/audio/out/ao_oss.c b/audio/out/ao_oss.c index b78f244a7b..de71017432 100644 --- a/audio/out/ao_oss.c +++ b/audio/out/ao_oss.c @@ -40,6 +40,7 @@ #include "options/options.h" #include "common/msg.h" #include "osdep/timer.h" +#include "osdep/endian.h" #if HAVE_SYS_SOUNDCARD_H #include <sys/soundcard.h> @@ -89,39 +90,46 @@ static const struct mp_chmap oss_layouts[MP_NUM_CHANNELS + 1] = { MP_CHMAP8(FL, FR, BL, BR, FC, LFE, SL, SR), // 7.1 }; -static const int format_table[][2] = { - {AFMT_U8, AF_FORMAT_U8}, - {AFMT_S8, AF_FORMAT_S8}, - {AFMT_U16_LE, AF_FORMAT_U16_LE}, - {AFMT_U16_BE, AF_FORMAT_U16_BE}, - {AFMT_S16_LE, AF_FORMAT_S16_LE}, - {AFMT_S16_BE, AF_FORMAT_S16_BE}, -#ifdef AFMT_S24_PACKED - {AFMT_S24_PACKED, AF_FORMAT_S24_LE}, +#if !defined(AFMT_S16_NE) && defined(AFMT_S16_LE) && defined(AFMT_S16_BE) +#define AFMT_S16_NE MP_SELECT_LE_BE(AFMT_S16_LE, AFMT_S16_BE) #endif -#ifdef AFMT_U24_LE - {AFMT_U24_LE, AF_FORMAT_U24_LE}, + +#if !defined(AFMT_U16_NE) && defined(AFMT_U16_LE) && defined(AFMT_U16_BE) +#define AFMT_U16_NE MP_SELECT_LE_BE(AFMT_U16_LE, AFMT_U16_BE) #endif -#ifdef AFMT_U24_BE - {AFMT_U24_BE, AF_FORMAT_U24_BE}, + +#if !defined(AFMT_U24_NE) && defined(AFMT_U24_LE) && defined(AFMT_U24_BE) +#define AFMT_U24_NE MP_SELECT_LE_BE(AFMT_U24_LE, AFMT_U24_BE) #endif -#ifdef AFMT_S24_LE - {AFMT_S24_LE, AF_FORMAT_S24_LE}, + +#if !defined(AFMT_S24_NE) && defined(AFMT_S24_LE) && defined(AFMT_S24_BE) +#define AFMT_S24_NE MP_SELECT_LE_BE(AFMT_S24_LE, AFMT_S24_BE) #endif -#ifdef AFMT_S24_BE - {AFMT_S24_BE, AF_FORMAT_S24_BE}, + +#if !defined(AFMT_U32_NE) && defined(AFMT_U32_LE) && defined(AFMT_U32_BE) +#define AFMT_U32MP_SELECT_LE_BE(AFMT_U32_LE, AFMT_U32_BE) #endif -#ifdef AFMT_U32_LE - {AFMT_U32_LE, AF_FORMAT_U32_LE}, + +#if !defined(AFMT_S32_NE) && defined(AFMT_S32_LE) && defined(AFMT_S32_BE) +#define AFMT_S32MP_SELECT_LE_BE(AFMT_S32_LE, AFMT_S32_BE) +#endif + +static const int format_table[][2] = { + {AFMT_U8, AF_FORMAT_U8}, + {AFMT_S8, AF_FORMAT_S8}, + {AFMT_U16_NE, AF_FORMAT_U16}, + {AFMT_S16_NE, AF_FORMAT_S16}, +#ifdef AFMT_U24_NE + {AFMT_U24_NE, AF_FORMAT_U24}, #endif -#ifdef AFMT_U32_BE - {AFMT_U32_BE, AF_FORMAT_U32_BE}, +#ifdef AFMT_S24_NE + {AFMT_S24_NE, AF_FORMAT_S24}, #endif -#ifdef AFMT_S32_LE - {AFMT_S32_LE, AF_FORMAT_S32_LE}, +#ifdef AFMT_U32_NE + {AFMT_U32_NE, AF_FORMAT_U32}, #endif -#ifdef AFMT_S32_BE - {AFMT_S32_BE, AF_FORMAT_S32_BE}, +#ifdef AFMT_S32_NE + {AFMT_S32_NE, AF_FORMAT_S32}, #endif #ifdef AFMT_FLOAT {AFMT_FLOAT, AF_FORMAT_FLOAT}, diff --git a/audio/out/ao_pcm.c b/audio/out/ao_pcm.c index 3c1f46409a..eb089c6c42 100644 --- a/audio/out/ao_pcm.c +++ b/audio/out/ao_pcm.c @@ -35,6 +35,7 @@ #include "ao.h" #include "internal.h" #include "common/msg.h" +#include "osdep/endian.h" #ifdef __MINGW32__ // for GetFileType to detect pipes @@ -72,8 +73,7 @@ static void fput32le(uint32_t val, FILE *fp) static void write_wave_header(struct ao *ao, FILE *fp, uint64_t data_length) { bool use_waveex = true; - uint16_t fmt = ao->format == AF_FORMAT_FLOAT_LE ? - WAV_ID_FLOAT_PCM : WAV_ID_PCM; + uint16_t fmt = ao->format == AF_FORMAT_FLOAT ? WAV_ID_FLOAT_PCM : WAV_ID_PCM; uint32_t fmt_chunk_size = use_waveex ? 40 : 16; int bits = af_fmt2bits(ao->format); @@ -124,16 +124,23 @@ static int init(struct ao *ao) if (priv->waveheader) { // WAV files must have one of the following formats + // And they don't work in big endian; fixing it would be simple, but + // nobody cares. + if (BYTE_ORDER == BIG_ENDIAN) { + MP_FATAL(ao, "Not supported on big endian.\n"); + return -1; + } + switch (ao->format) { case AF_FORMAT_U8: - case AF_FORMAT_S16_LE: - case AF_FORMAT_S24_LE: - case AF_FORMAT_S32_LE: - case AF_FORMAT_FLOAT_LE: + case AF_FORMAT_S16: + case AF_FORMAT_S24: + case AF_FORMAT_S32: + case AF_FORMAT_FLOAT: case AF_FORMAT_AC3: break; default: - ao->format = AF_FORMAT_S16_LE; + ao->format = AF_FORMAT_S16; break; } } diff --git a/audio/out/ao_pulse.c b/audio/out/ao_pulse.c index 790ecb23dc..fa8a6a46be 100644 --- a/audio/out/ao_pulse.c +++ b/audio/out/ao_pulse.c @@ -169,12 +169,9 @@ static const struct format_map { int mp_format; pa_sample_format_t pa_format; } format_maps[] = { - {AF_FORMAT_S16_LE, PA_SAMPLE_S16LE}, - {AF_FORMAT_S16_BE, PA_SAMPLE_S16BE}, - {AF_FORMAT_S32_LE, PA_SAMPLE_S32LE}, - {AF_FORMAT_S32_BE, PA_SAMPLE_S32BE}, - {AF_FORMAT_FLOAT_LE, PA_SAMPLE_FLOAT32LE}, - {AF_FORMAT_FLOAT_BE, PA_SAMPLE_FLOAT32BE}, + {AF_FORMAT_S16, PA_SAMPLE_S16NE}, + {AF_FORMAT_S32, PA_SAMPLE_S32NE}, + {AF_FORMAT_FLOAT, PA_SAMPLE_FLOAT32NE}, {AF_FORMAT_U8, PA_SAMPLE_U8}, {AF_FORMAT_UNKNOWN, 0} }; diff --git a/audio/out/ao_rsound.c b/audio/out/ao_rsound.c index e41a89ae37..fe187144a6 100644 --- a/audio/out/ao_rsound.c +++ b/audio/out/ao_rsound.c @@ -52,40 +52,26 @@ static int set_format(struct ao *ao) case AF_FORMAT_S8: rsd_format = RSD_S8; break; - case AF_FORMAT_S16_LE: - rsd_format = RSD_S16_LE; + case AF_FORMAT_S16: + rsd_format = RSD_S16_NE; break; - case AF_FORMAT_S16_BE: - rsd_format = RSD_S16_BE; + case AF_FORMAT_U16: + rsd_format = RSD_U16_NE; break; - case AF_FORMAT_U16_LE: - rsd_format = RSD_U16_LE; + case AF_FORMAT_S24: + case AF_FORMAT_U24: + rsd_format = RSD_S32_NE; + ao->format = AF_FORMAT_S32; break; - case AF_FORMAT_U16_BE: - rsd_format = RSD_U16_BE; + case AF_FORMAT_S32: + rsd_format = RSD_S32_NE; break; - case AF_FORMAT_S24_LE: - case AF_FORMAT_S24_BE: - case AF_FORMAT_U24_LE: - case AF_FORMAT_U24_BE: - rsd_format = RSD_S32_LE; - ao->format = AF_FORMAT_S32_LE; - break; - case AF_FORMAT_S32_LE: - rsd_format = RSD_S32_LE; - break; - case AF_FORMAT_S32_BE: - rsd_format = RSD_S32_BE; - break; - case AF_FORMAT_U32_LE: - rsd_format = RSD_U32_LE; - break; - case AF_FORMAT_U32_BE: - rsd_format = RSD_U32_BE; + case AF_FORMAT_U32: + rsd_format = RSD_U32_NE; break; default: - rsd_format = RSD_S16_LE; - ao->format = AF_FORMAT_S16_LE; + rsd_format = RSD_S16_NE; + ao->format = AF_FORMAT_S16; } return rsd_format; diff --git a/audio/out/ao_sdl.c b/audio/out/ao_sdl.c index 9af5db4021..d2362a723e 100644 --- a/audio/out/ao_sdl.c +++ b/audio/out/ao_sdl.c @@ -38,6 +38,20 @@ struct priv float buflen; }; +static int fmtmap[][2] = { + {AF_FORMAT_U8, AUDIO_U8}, + {AF_FORMAT_S8, AUDIO_S8}, + {AF_FORMAT_U16, AUDIO_U16SYS}, + {AF_FORMAT_S16, AUDIO_S16SYS}, +#ifdef AUDIO_S32SYS + {AF_FORMAT_S32, AUDIO_S32SYS}, +#endif +#ifdef AUDIO_F32SYS + {AF_FORMAT_FLOAT, AUDIO_F32SYS}, +#endif + {0} +}; + static void audio_callback(void *userdata, Uint8 *stream, int len) { struct ao *ao = userdata; @@ -104,26 +118,12 @@ static int init(struct ao *ao) SDL_AudioSpec desired, obtained; - switch (ao->format) { - case AF_FORMAT_U8: desired.format = AUDIO_U8; break; - case AF_FORMAT_S8: desired.format = AUDIO_S8; break; - case AF_FORMAT_U16_LE: desired.format = AUDIO_U16LSB; break; - case AF_FORMAT_U16_BE: desired.format = AUDIO_U16MSB; break; - default: - case AF_FORMAT_S16_LE: desired.format = AUDIO_S16LSB; break; - case AF_FORMAT_S16_BE: desired.format = AUDIO_S16MSB; break; -#ifdef AUDIO_S32LSB - case AF_FORMAT_S32_LE: desired.format = AUDIO_S32LSB; break; -#endif -#ifdef AUDIO_S32MSB - case AF_FORMAT_S32_BE: desired.format = AUDIO_S32MSB; break; -#endif -#ifdef AUDIO_F32LSB - case AF_FORMAT_FLOAT_LE: desired.format = AUDIO_F32LSB; break; -#endif -#ifdef AUDIO_F32MSB - case AF_FORMAT_FLOAT_BE: desired.format = AUDIO_F32MSB; break; -#endif + desired.format = AUDIO_S16SYS; + for (int n = 0; fmtmap[n][0]; n++) { + if (ao->format == fmtmap[n][0]) { + desired.format = fmtmap[n][1]; + break; + } } desired.freq = ao->samplerate; desired.channels = ao->channels.num; @@ -156,30 +156,18 @@ static int init(struct ao *ao) // large, this will help. ao->device_buffer = 3 * obtained.samples; - switch (obtained.format) { - case AUDIO_U8: ao->format = AF_FORMAT_U8; break; - case AUDIO_S8: ao->format = AF_FORMAT_S8; break; - case AUDIO_S16LSB: ao->format = AF_FORMAT_S16_LE; break; - case AUDIO_S16MSB: ao->format = AF_FORMAT_S16_BE; break; - case AUDIO_U16LSB: ao->format = AF_FORMAT_U16_LE; break; - case AUDIO_U16MSB: ao->format = AF_FORMAT_U16_BE; break; -#ifdef AUDIO_S32LSB - case AUDIO_S32LSB: ao->format = AF_FORMAT_S32_LE; break; -#endif -#ifdef AUDIO_S32MSB - case AUDIO_S32MSB: ao->format = AF_FORMAT_S32_BE; break; -#endif -#ifdef AUDIO_F32LSB - case AUDIO_F32LSB: ao->format = AF_FORMAT_FLOAT_LE; break; -#endif -#ifdef AUDIO_F32MSB - case AUDIO_F32MSB: ao->format = AF_FORMAT_FLOAT_BE; break; -#endif - default: - if (!ao->probing) - MP_ERR(ao, "could not find matching format\n"); - uninit(ao); - return -1; + ao->format = 0; + for (int n = 0; fmtmap[n][0]; n++) { + if (obtained.format == fmtmap[n][1]) { + ao->format = fmtmap[n][0]; + break; + } + } + if (!ao->format) { + if (!ao->probing) + MP_ERR(ao, "could not find matching format\n"); + uninit(ao); + return -1; } if (!ao_chmap_sel_get_def(ao, &sel, &ao->channels, obtained.channels)) { diff --git a/audio/out/ao_sndio.c b/audio/out/ao_sndio.c index c75027dffc..c1c4ef17ab 100644 --- a/audio/out/ao_sndio.c +++ b/audio/out/ao_sndio.c @@ -109,22 +109,16 @@ static int init(struct ao *ao) struct priv *p = ao->priv; struct af_to_par { - int format, bits, sig, le; + int format, bits, sig; } static const af_to_par[] = { - {AF_FORMAT_U8, 8, 0, 0}, - {AF_FORMAT_S8, 8, 1, 0}, - {AF_FORMAT_U16_LE, 16, 0, 1}, - {AF_FORMAT_U16_BE, 16, 0, 0}, - {AF_FORMAT_S16_LE, 16, 1, 1}, - {AF_FORMAT_S16_BE, 16, 1, 0}, - {AF_FORMAT_U24_LE, 16, 0, 1}, - {AF_FORMAT_U24_BE, 24, 0, 0}, - {AF_FORMAT_S24_LE, 24, 1, 1}, - {AF_FORMAT_S24_BE, 24, 1, 0}, - {AF_FORMAT_U32_LE, 32, 0, 1}, - {AF_FORMAT_U32_BE, 32, 0, 0}, - {AF_FORMAT_S32_LE, 32, 1, 1}, - {AF_FORMAT_S32_BE, 32, 1, 0} + {AF_FORMAT_U8, 8, 0}, + {AF_FORMAT_S8, 8, 1}, + {AF_FORMAT_U16, 16, 0}, + {AF_FORMAT_S16, 16, 1}, + {AF_FORMAT_U24, 16, 0}, + {AF_FORMAT_S24, 24, 1}, + {AF_FORMAT_U32, 32, 0}, + {AF_FORMAT_S32, 32, 1}, }, *ap; int i; @@ -149,7 +143,7 @@ static int init(struct ao *ao) p->par.bits = ap->bits; p->par.sig = ap->sig; if (ap->bits > 8) - p->par.le = ap->le; + p->par.le = SIO_LE_NATIVE; if (ap->bits != SIO_BPS(ap->bits)) p->par.bps = ap->bits / 8; break; @@ -175,20 +169,18 @@ static int init(struct ao *ao) MP_ERR(ao, "couldn't get params\n"); goto error; } + if (p->par.bps > 1 && p->par.le != SIO_LE_NATIVE) { + MP_ERR(ao, "swapped endian output not supported\n"); + goto error; + } if (p->par.bits == 8 && p->par.bps == 1) { ao->format = p->par.sig ? AF_FORMAT_S8 : AF_FORMAT_U8; } else if (p->par.bits == 16 && p->par.bps == 2) { - ao->format = p->par.sig ? - (p->par.le ? AF_FORMAT_S16_LE : AF_FORMAT_S16_BE) : - (p->par.le ? AF_FORMAT_U16_LE : AF_FORMAT_U16_BE); + ao->format = p->par.sig ? AF_FORMAT_S16 : AF_FORMAT_U16; } else if ((p->par.bits == 24 || p->par.msb) && p->par.bps == 3) { - ao->format = p->par.sig ? - (p->par.le ? AF_FORMAT_S24_LE : AF_FORMAT_S24_BE) : - (p->par.le ? AF_FORMAT_U24_LE : AF_FORMAT_U24_BE); + ao->format = p->par.sig ? AF_FORMAT_S24 : AF_FORMAT_U24; } else if ((p->par.bits == 32 || p->par.msb) && p->par.bps == 4) { - ao->format = p->par.sig ? - (p->par.le ? AF_FORMAT_S32_LE : AF_FORMAT_S32_BE) : - (p->par.le ? AF_FORMAT_U32_LE : AF_FORMAT_U32_BE); + ao->format = p->par.sig ? AF_FORMAT_S32 : AF_FORMAT_U32; } else { MP_ERR(ao, "couldn't set format\n"); goto error; diff --git a/audio/out/ao_wasapi_utils.c b/audio/out/ao_wasapi_utils.c index afa2ad6b40..c12f3baf61 100755 --- a/audio/out/ao_wasapi_utils.c +++ b/audio/out/ao_wasapi_utils.c @@ -292,14 +292,13 @@ static int try_passthrough(struct wasapi_state *state, union WAVEFMT u; u.extensible = &wformat; - MP_VERBOSE(ao, "trying passthrough for %s...\n", - af_fmt_to_str((ao->format&~AF_FORMAT_END_MASK) | AF_FORMAT_LE)); + MP_VERBOSE(ao, "trying passthrough for %s...\n", af_fmt_to_str(ao->format)); HRESULT hr = IAudioClient_IsFormatSupported(state->pAudioClient, state->share_mode, u.ex, NULL); if (!FAILED(hr)) { - ao->format = (ao->format&~AF_FORMAT_END_MASK) | AF_FORMAT_LE; + ao->format = ao->format; state->format = wformat; return 1; } |