Robert Reif : winejack: Fix driver load and initialization.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Dec 6 14:27:15 CST 2005


Module: wine
Branch: refs/heads/master
Commit: 18441ac0273247e8f837be840c166023b2853cbf
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=18441ac0273247e8f837be840c166023b2853cbf

Author: Robert Reif <reif at earthlink.net>
Date:   Tue Dec  6 21:22:08 2005 +0100

winejack: Fix driver load and initialization.
Move wave in/out initialization from wave out to driver.
Add index number to device names.
Fix memset bug where only first wave in caps was zeroed.

---

 dlls/winmm/winejack/audio.c |   25 ++++++++-----------------
 dlls/winmm/winejack/jack.c  |    4 +++-
 2 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/dlls/winmm/winejack/audio.c b/dlls/winmm/winejack/audio.c
index 2ef0acb..146d0bc 100644
--- a/dlls/winmm/winejack/audio.c
+++ b/dlls/winmm/winejack/audio.c
@@ -890,9 +890,7 @@ LONG	JACK_WaveRelease(void)
 LONG JACK_WaveInit(void)
 {
     int i;
-
-    static const WCHAR ini_out[] = {'J','A','C','K',' ','W','a','v','e','O','u','t',' ','D','r','i','v','e','r',0};
-    static const WCHAR ini_in [] = {'J','A','C','K',' ','W','a','v','e','I','n',' ',' ','D','r','i','v','e','r',0};
+    CHAR szPname[MAXPNAMELEN];
 
     TRACE("called\n");
 
@@ -930,8 +928,8 @@ LONG JACK_WaveInit(void)
 
       WOutDev[i].caps.wMid = 0x00FF; 	/* Manufac ID */
       WOutDev[i].caps.wPid = 0x0001; 	/* Product ID */
-      strcpyW(WOutDev[i].caps.szPname, ini_out);
-
+      snprintf(szPname, sizeof(szPname), "JACK WaveOut %d", i);
+      MultiByteToWideChar(CP_ACP, 0, szPname, -1, WOutDev[i].caps.szPname, sizeof(WOutDev[i].caps.szPname)/sizeof(WCHAR));
       snprintf(WOutDev[i].interface_name, sizeof(WOutDev[i].interface_name), "winejack: %d", i);
 
       WOutDev[i].caps.vDriverVersion = 0x0100;
@@ -959,12 +957,13 @@ LONG JACK_WaveInit(void)
     /* then do input device */
     for (i = 0; i < MAX_WAVEINDRV; ++i)
     {
-      /* TODO: we should initialize read stuff here */
-      memset(&WInDev[0].caps, 0, sizeof(WInDev[0].caps));
+        /* TODO: we should initialize read stuff here */
+        memset(&WInDev[i].caps, 0, sizeof(WInDev[i].caps));
 
 	WInDev[i].caps.wMid = 0x00FF;
 	WInDev[i].caps.wPid = 0x0001;
-        strcpyW(WInDev[i].caps.szPname, ini_in);
+        snprintf(szPname, sizeof(szPname), "JACK WaveIn %d", i);
+        MultiByteToWideChar(CP_ACP, 0, szPname, -1, WInDev[i].caps.szPname, sizeof(WInDev[i].caps.szPname)/sizeof(WCHAR));
         snprintf(WInDev[i].interface_name, sizeof(WInDev[i].interface_name), "winejack: %d", i);
 
 	WInDev[i].caps.vDriverVersion = 0x0100;
@@ -1666,18 +1665,10 @@ DWORD WINAPI JACK_wodMessage(UINT wDevID
     
   switch (wMsg) {
   case DRVM_INIT:
-    TRACE("DRVM_INIT\n");
-    return JACK_WaveInit();
   case DRVM_EXIT:
-    TRACE("DRVM_EXIT\n");
-    return JACK_WaveRelease();
   case DRVM_ENABLE:
-  /* FIXME: Pretend this is supported */
-    TRACE("DRVM_ENABLE\n");
-    return 0;
   case DRVM_DISABLE:
-  /* FIXME: Pretend this is supported */
-    TRACE("DRVM_DISABLE\n");
+    /* FIXME: Pretend this is supported */
     return 0;
   case WODM_OPEN:             return wodOpen(wDevID, (LPWAVEOPENDESC)dwParam1,	dwParam2);
   case WODM_CLOSE:            return wodClose(wDevID);
diff --git a/dlls/winmm/winejack/jack.c b/dlls/winmm/winejack/jack.c
index d5e12ba..c712634 100644
--- a/dlls/winmm/winejack/jack.c
+++ b/dlls/winmm/winejack/jack.c
@@ -66,7 +66,7 @@ static LRESULT JACK_drvLoad(void)
     }
   }
 
-  return 1;
+  return JACK_WaveInit();
 }
 
 /**************************************************************************
@@ -79,6 +79,8 @@ static LRESULT JACK_drvFree(void)
 
   if(jackhandle && (jackhandle != (void*)-1))
   {
+    JACK_WaveRelease();
+
     TRACE("calling wine_dlclose() on jackhandle\n");
     wine_dlclose(jackhandle, NULL, 0);
     jackhandle = NULL;




More information about the wine-cvs mailing list