Multimedia "session instance" session for drivers [2/3]

Eric Pouech eric.pouech at wanadoo.fr
Fri May 10 16:08:45 CDT 2002


see previous patch

A+
-------------- next part --------------
Name:          msacm2load
ChangeLog:     moved session instance loading to winmm
License:       X11
GenDate:       2002/05/10 20:49:48 UTC
ModifiedFiles: dlls/msacm/driver.c
AddedFiles:    
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/msacm/driver.c,v
retrieving revision 1.15
diff -u -u -r1.15 driver.c
--- dlls/msacm/driver.c	9 Mar 2002 23:39:08 -0000	1.15
+++ dlls/msacm/driver.c	23 Apr 2002 19:11:40 -0000
@@ -240,70 +240,13 @@
     return MMSYSERR_INVALPARAM;
 }
 
-static	MMRESULT	MSACM_DriverOpenHelper(PWINE_ACMDRIVER* ppad, PWINE_ACMDRIVERID padid, DWORD fdwOpen, BOOL useDesc)
-{
-    MMRESULT		ret = MMSYSERR_ERROR;
-    PWINE_ACMDRIVER	pad;
-
-    *ppad = NULL;
-
-    pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));
-    if (!pad) return MMSYSERR_NOMEM;
-
-    pad->obj.dwType = WINE_ACMOBJ_DRIVER;
-    pad->obj.pACMDriverID = padid;
-
-    if (!(pad->hDrvr = padid->hInstModule)) {
-	/* this is not an externally added driver... need to load it */
-	if (!padid->pszDriverAlias) goto gotError;
-
-	if (useDesc) {
-	    ACMDRVOPENDESCW	adod;
-	    int			len;
-
-	    adod.cbStruct = sizeof(adod);
-	    adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
-	    adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
-	    adod.dwVersion = acmGetVersion();
-	    adod.dwFlags = fdwOpen;
-	    adod.dwError = 0;
-	    len = strlen("Drivers32") + 1;
-	    adod.pszSectionName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR));
-	    MultiByteToWideChar(CP_ACP, 0, "Drivers32", -1, (LPWSTR)adod.pszSectionName, len);
-	    len = strlen(padid->pszDriverAlias) + 1;
-	    adod.pszAliasName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR));
-	    MultiByteToWideChar(CP_ACP, 0, padid->pszDriverAlias, -1, (LPWSTR)adod.pszAliasName, len);
-	    adod.dnDevNode = 0;
-
-	    pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, (DWORD)&adod);
-
-	    HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszSectionName);
-	    HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszAliasName);
-	    if (!pad->hDrvr) {
-		ret = adod.dwError;
-		goto gotError;
-	    }
-	} else {
-	    if (!(pad->hDrvr = OpenDriverA(padid->pszDriverAlias, 0L, 0L))) {
-		ret = MMSYSERR_ERROR;
-		goto gotError;
-	    }
-	}
-    }
-    *ppad = pad;
-    return MMSYSERR_NOERROR;
- gotError:
-    HeapFree(MSACM_hHeap, 0, pad);
-    return ret;
-}
-
 /***********************************************************************
  *           acmDriverOpen (MSACM32.@)
  */
 MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen)
 {
     PWINE_ACMDRIVERID	padid;
-    PWINE_ACMDRIVER	pad = NULL, first_pad = NULL;
+    PWINE_ACMDRIVER	pad = NULL;
     MMRESULT		ret;
 
     TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen);
@@ -318,22 +261,48 @@
     if (!padid)
 	return MMSYSERR_INVALHANDLE;
 
-    /* first driver to be loaded ? */
-    if (!padid->pACMDriverList && !padid->hInstModule) {
-	ret = MSACM_DriverOpenHelper(&first_pad, padid, fdwOpen, FALSE);
-	if (ret) goto gotError;
-
-	
-	/* insert new pad at beg of list */
-	first_pad->pNextACMDriver = NULL;
-	padid->pACMDriverList = first_pad;
-    }
-
-    ret = MSACM_DriverOpenHelper(&pad, padid, fdwOpen, TRUE);
-    if (ret) {
-	if (first_pad)
-	    acmDriverClose((HACMDRIVER)first_pad, 0L);
-	goto gotError;
+    pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));
+    if (!pad) 
+        return MMSYSERR_NOMEM;
+
+    pad->obj.dwType = WINE_ACMOBJ_DRIVER;
+    pad->obj.pACMDriverID = padid;
+
+    if (!(pad->hDrvr = padid->hInstModule)) 
+    {
+        ACMDRVOPENDESCW	adod;
+        int		len;
+
+	/* this is not an externally added driver... need to actually load it */
+	if (!padid->pszDriverAlias) 
+        {       
+            ret = MMSYSERR_ERROR;
+            goto gotError;
+        }       
+
+        adod.cbStruct = sizeof(adod);
+        adod.fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC;
+        adod.fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED;
+        adod.dwVersion = acmGetVersion();
+        adod.dwFlags = fdwOpen;
+        adod.dwError = 0;
+        len = strlen("Drivers32") + 1;
+        adod.pszSectionName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, "Drivers32", -1, (LPWSTR)adod.pszSectionName, len);
+        len = strlen(padid->pszDriverAlias) + 1;
+        adod.pszAliasName = HeapAlloc(MSACM_hHeap, 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, padid->pszDriverAlias, -1, (LPWSTR)adod.pszAliasName, len);
+        adod.dnDevNode = 0;
+
+        pad->hDrvr = OpenDriverA(padid->pszDriverAlias, NULL, (DWORD)&adod);
+
+        HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszSectionName);
+        HeapFree(MSACM_hHeap, 0, (LPWSTR)adod.pszAliasName);
+        if (!pad->hDrvr) 
+        {
+            ret = adod.dwError;
+            goto gotError;
+        }
     }
 
     /* insert new pad at beg of list */


More information about the wine-patches mailing list