dsoundaudio: do not use global variables

Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
diff --git a/audio/dsound_template.h b/audio/dsound_template.h
index 98276fb..85ba858 100644
--- a/audio/dsound_template.h
+++ b/audio/dsound_template.h
@@ -67,7 +67,8 @@
     LPVOID *p2p,
     DWORD *blen1p,
     DWORD *blen2p,
-    int entire
+    int entire,
+    dsound *s
     )
 {
     HRESULT hr;
@@ -75,13 +76,14 @@
     LPVOID p1 = NULL, p2 = NULL;
     DWORD blen1 = 0, blen2 = 0;
     DWORD flag;
+    DSoundConf *conf = &s->conf;
 
 #ifdef DSBTYPE_IN
     flag = entire ? DSCBLOCK_ENTIREBUFFER : 0;
 #else
     flag = entire ? DSBLOCK_ENTIREBUFFER : 0;
 #endif
-    for (i = 0; i < conf.lock_retries; ++i) {
+    for (i = 0; i < conf->lock_retries; ++i) {
         hr = glue (IFACE, _Lock) (
             buf,
             pos,
@@ -96,7 +98,7 @@
         if (FAILED (hr)) {
 #ifndef DSBTYPE_IN
             if (hr == DSERR_BUFFERLOST) {
-                if (glue (dsound_restore_, TYPE) (buf)) {
+                if (glue (dsound_restore_, TYPE) (buf, s)) {
                     dsound_logerr (hr, "Could not lock " NAME "\n");
                     goto fail;
                 }
@@ -110,7 +112,7 @@
         break;
     }
 
-    if (i == conf.lock_retries) {
+    if (i == conf->lock_retries) {
         dolog ("%d attempts to lock " NAME " failed\n", i);
         goto fail;
     }
@@ -183,9 +185,10 @@
 {
     int err;
     HRESULT hr;
-    dsound *s = &glob_dsound;
+    dsound *s = drv_opaque;
     WAVEFORMATEX wfx;
     struct audsettings obt_as;
+    DSoundConf *conf = &s->conf;
 #ifdef DSBTYPE_IN
     const char *typ = "ADC";
     DSoundVoiceIn *ds = (DSoundVoiceIn *) hw;
@@ -212,7 +215,7 @@
     bd.dwSize = sizeof (bd);
     bd.lpwfxFormat = &wfx;
 #ifdef DSBTYPE_IN
-    bd.dwBufferBytes = conf.bufsize_in;
+    bd.dwBufferBytes = conf->bufsize_in;
     hr = IDirectSoundCapture_CreateCaptureBuffer (
         s->dsound_capture,
         &bd,
@@ -221,7 +224,7 @@
         );
 #else
     bd.dwFlags = DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2;
-    bd.dwBufferBytes = conf.bufsize_out;
+    bd.dwBufferBytes = conf->bufsize_out;
     hr = IDirectSound_CreateSoundBuffer (
         s->dsound,
         &bd,
@@ -271,6 +274,7 @@
             );
     }
     hw->samples = bc.dwBufferBytes >> hw->info.shift;
+    ds->s = s;
 
 #ifdef DEBUG_DSOUND
     dolog ("caps %ld, desc %ld\n",