From 4f208e6f68690417163418f182023cc4136c7413 Mon Sep 17 00:00:00 2001 From: Kevin Mitchell Date: Fri, 28 Nov 2014 06:02:26 -0800 Subject: ao/wasapi: check full GUID of KSDATAFORMAT to determine float --- audio/out/ao_wasapi_utils.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'audio/out/ao_wasapi_utils.c') diff --git a/audio/out/ao_wasapi_utils.c b/audio/out/ao_wasapi_utils.c index 818ab09205..441a3a04d5 100755 --- a/audio/out/ao_wasapi_utils.c +++ b/audio/out/ao_wasapi_utils.c @@ -182,7 +182,7 @@ static void set_format(WAVEFORMATEXTENSIBLE *wformat, WORD bytepersample, wformat->dwChannelMask = chanmask; } -static int format_set_bits(int old_format, int bits, int fp) +static int format_set_bits(int old_format, int bits, bool fp) { if (fp) { switch (bits) { @@ -199,15 +199,15 @@ static int set_ao_format(struct ao *ao, WAVEFORMATEXTENSIBLE wformat) { struct wasapi_state *state = (struct wasapi_state *)ao->priv; - if (wformat.SubFormat.Data1 != 1 && wformat.SubFormat.Data1 != 3) { - MP_ERR(ao, "Unknown SubFormat %"PRIu32"\n", - (uint32_t)wformat.SubFormat.Data1); + bool is_float = + !mp_GUID_compare(&mp_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, &wformat.SubFormat); + + if ( !is_float && + mp_GUID_compare(&mp_KSDATAFORMAT_SUBTYPE_PCM, &wformat.SubFormat) ) { + MP_ERR(ao, "Unknown SubFormat %s\n", mp_GUID_to_str(&wformat.SubFormat)); return 0; } - - // .Data1 == 1 is PCM, .Data1 == 3 is IEEE_FLOAT - int format = format_set_bits(ao->format, - wformat.Format.wBitsPerSample, wformat.SubFormat.Data1 == 3); + int format = format_set_bits(ao->format, wformat.Format.wBitsPerSample, is_float); if (!format) return 0; -- cgit v1.2.3