=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: winealsa: Unify the checks for wBitsPerSample.

Alexandre Julliard julliard at winehq.org
Fri Jan 6 15:31:36 CST 2012


Module: wine
Branch: master
Commit: 76f655dbb0382cc18976be10c49d2346fb0c88c4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=76f655dbb0382cc18976be10c49d2346fb0c88c4

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Thu Jan  5 00:26:29 2012 +0100

winealsa: Unify the checks for wBitsPerSample.

---

 dlls/winealsa.drv/mmdevdrv.c |  123 +++++++++++++-----------------------------
 1 files changed, 38 insertions(+), 85 deletions(-)

diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
index cb118cff..09be694 100644
--- a/dlls/winealsa.drv/mmdevdrv.c
+++ b/dlls/winealsa.drv/mmdevdrv.c
@@ -718,6 +718,38 @@ static WAVEFORMATEX *clone_format(const WAVEFORMATEX *fmt)
     return ret;
 }
 
+static snd_pcm_format_t alsa_format(const WAVEFORMATEX *fmt)
+{
+    snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
+    const WAVEFORMATEXTENSIBLE *fmtex = (const WAVEFORMATEXTENSIBLE *)fmt;
+
+    if(fmt->wFormatTag == WAVE_FORMAT_PCM ||
+      (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
+       IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))){
+        if(fmt->wBitsPerSample == 8)
+            format = SND_PCM_FORMAT_U8;
+        else if(fmt->wBitsPerSample == 16)
+            format = SND_PCM_FORMAT_S16_LE;
+        else if(fmt->wBitsPerSample == 24)
+            format = SND_PCM_FORMAT_S24_3LE;
+        else if(fmt->wBitsPerSample == 32)
+            format = SND_PCM_FORMAT_S32_LE;
+        else
+            WARN("Unsupported bit depth: %u\n", fmt->wBitsPerSample);
+    }else if(fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT ||
+            (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
+             IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))){
+        if(fmt->wBitsPerSample == 32)
+            format = SND_PCM_FORMAT_FLOAT_LE;
+        else if(fmt->wBitsPerSample == 64)
+            format = SND_PCM_FORMAT_FLOAT64_LE;
+        else
+            WARN("Unsupported float size: %u\n", fmt->wBitsPerSample);
+    }else
+        WARN("Unknown wave format: %04x\n", fmt->wFormatTag);
+    return format;
+}
+
 static void session_init_vols(AudioSession *session, UINT channels)
 {
     if(session->channel_count < channels){
@@ -808,7 +840,6 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
     ACImpl *This = impl_from_IAudioClient(iface);
     snd_pcm_sw_params_t *sw_params = NULL;
     snd_pcm_format_t format;
-    const WAVEFORMATEXTENSIBLE *fmtex = (const WAVEFORMATEXTENSIBLE *)fmt;
     unsigned int rate, alsa_period_us;
     int err, i;
     HRESULT hr = S_OK;
@@ -878,36 +909,8 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
         goto exit;
     }
 
-    if(fmt->wFormatTag == WAVE_FORMAT_PCM ||
-            (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
-             IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))){
-        if(fmt->wBitsPerSample == 8)
-            format = SND_PCM_FORMAT_U8;
-        else if(fmt->wBitsPerSample == 16)
-            format = SND_PCM_FORMAT_S16_LE;
-        else if(fmt->wBitsPerSample == 24)
-            format = SND_PCM_FORMAT_S24_3LE;
-        else if(fmt->wBitsPerSample == 32)
-            format = SND_PCM_FORMAT_S32_LE;
-        else{
-            WARN("Unsupported bit depth: %u\n", fmt->wBitsPerSample);
-            hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-            goto exit;
-        }
-    }else if(fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT ||
-            (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
-             IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))){
-        if(fmt->wBitsPerSample == 32)
-            format = SND_PCM_FORMAT_FLOAT_LE;
-        else if(fmt->wBitsPerSample == 64)
-            format = SND_PCM_FORMAT_FLOAT64_LE;
-        else{
-            WARN("Unsupported float size: %u\n", fmt->wBitsPerSample);
-            hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-            goto exit;
-        }
-    }else{
-        WARN("Unknown wave format: %04x\n", fmt->wFormatTag);
+    format = alsa_format(fmt);
+    if (format == SND_PCM_FORMAT_UNKNOWN){
         hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
         goto exit;
     }
@@ -1205,6 +1208,7 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
 {
     ACImpl *This = impl_from_IAudioClient(iface);
     snd_pcm_format_mask_t *formats = NULL;
+    snd_pcm_format_t format;
     HRESULT hr = S_OK;
     WAVEFORMATEX *closest = NULL;
     const WAVEFORMATEXTENSIBLE *fmtex = (const WAVEFORMATEXTENSIBLE *)fmt;
@@ -1246,60 +1250,9 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
     }
 
     snd_pcm_hw_params_get_format_mask(This->hw_params, formats);
-
-    if(fmt->wFormatTag == WAVE_FORMAT_PCM ||
-            (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
-             IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))){
-        switch(fmt->wBitsPerSample){
-        case 8:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_U8)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        case 16:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_S16_LE)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        case 24:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_S24_3LE)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        case 32:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_S32_LE)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        default:
-            hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-            goto exit;
-        }
-    }else if(fmt->wFormatTag == WAVE_FORMAT_IEEE_FLOAT ||
-            (fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE &&
-             IsEqualGUID(&fmtex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))){
-        switch(fmt->wBitsPerSample){
-        case 32:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_FLOAT_LE)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        case 64:
-            if(!snd_pcm_format_mask_test(formats, SND_PCM_FORMAT_FLOAT64_LE)){
-                hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-                goto exit;
-            }
-            break;
-        default:
-            hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
-            goto exit;
-        }
-    }else{
+    format = alsa_format(fmt);
+    if (format == SND_PCM_FORMAT_UNKNOWN ||
+        !snd_pcm_format_mask_test(formats, format)){
         hr = AUDCLNT_E_UNSUPPORTED_FORMAT;
         goto exit;
     }




More information about the wine-cvs mailing list