Maarten Lankhorst : winealsa: Implement IDsCaptureDriverImpl_Open.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 16 05:38:29 CDT 2007


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Wed Aug 15 16:02:36 2007 +0200

winealsa: Implement IDsCaptureDriverImpl_Open.

---

 dlls/winealsa.drv/dscapture.c |   39 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/dlls/winealsa.drv/dscapture.c b/dlls/winealsa.drv/dscapture.c
index 982242a..24871c7 100644
--- a/dlls/winealsa.drv/dscapture.c
+++ b/dlls/winealsa.drv/dscapture.c
@@ -123,8 +123,43 @@ static HRESULT WINAPI IDsCaptureDriverImpl_GetDriverDesc(PIDSCDRIVER iface, PDSD
 
 static HRESULT WINAPI IDsCaptureDriverImpl_Open(PIDSCDRIVER iface)
 {
-    FIXME("stub\n");
-    return DS_OK;
+    HRESULT hr = S_OK;
+    IDsCaptureDriverImpl *This = (IDsCaptureDriverImpl *)iface;
+    int err=0;
+    snd_pcm_t *pcm = NULL;
+    snd_pcm_hw_params_t *hw_params;
+
+    /* While this is not really needed, it is a good idea to do this,
+     * to see if sound can be initialized */
+
+    hw_params = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, snd_pcm_hw_params_sizeof());
+    if (!hw_params)
+    {
+        hr = DSERR_OUTOFMEMORY;
+        WARN("--> %08x\n", hr);
+        return hr;
+    }
+
+    err = snd_pcm_open(&pcm, WOutDev[This->wDevID].pcmname, SND_PCM_STREAM_CAPTURE, SND_PCM_NONBLOCK);
+    if (err < 0) goto err;
+    err = snd_pcm_hw_params_any(pcm, hw_params);
+    if (err < 0) goto err;
+    err = snd_pcm_hw_params_set_access (pcm, hw_params, SND_PCM_ACCESS_MMAP_INTERLEAVED);
+    if (err < 0) goto err;
+
+    TRACE("Success\n");
+    snd_pcm_close(pcm);
+    HeapFree(GetProcessHeap(), 0, hw_params);
+    return hr;
+
+    err:
+    hr = DSERR_GENERIC;
+    WARN("Failed to open device: %s\n", snd_strerror(err));
+    if (pcm)
+        snd_pcm_close(pcm);
+    HeapFree(GetProcessHeap(), 0, hw_params);
+    WARN("--> %08x\n", hr);
+    return hr;
 }
 
 static HRESULT WINAPI IDsCaptureDriverImpl_Close(PIDSCDRIVER iface)




More information about the wine-cvs mailing list