Commit 9dafca8e authored by Eric Pouech's avatar Eric Pouech Committed by Alexandre Julliard

Moved session instance loading to winmm.

parent 0143542c
...@@ -240,70 +240,13 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA ...@@ -240,70 +240,13 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA
return MMSYSERR_INVALPARAM; 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.@) * acmDriverOpen (MSACM32.@)
*/ */
MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen) MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen)
{ {
PWINE_ACMDRIVERID padid; PWINE_ACMDRIVERID padid;
PWINE_ACMDRIVER pad = NULL, first_pad = NULL; PWINE_ACMDRIVER pad = NULL;
MMRESULT ret; MMRESULT ret;
TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen); TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen);
...@@ -318,22 +261,48 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe ...@@ -318,22 +261,48 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe
if (!padid) if (!padid)
return MMSYSERR_INVALHANDLE; return MMSYSERR_INVALHANDLE;
/* first driver to be loaded ? */ pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));
if (!padid->pACMDriverList && !padid->hInstModule) { if (!pad)
ret = MSACM_DriverOpenHelper(&first_pad, padid, fdwOpen, FALSE); return MMSYSERR_NOMEM;
if (ret) goto gotError;
pad->obj.dwType = WINE_ACMOBJ_DRIVER;
/* insert new pad at beg of list */ pad->obj.pACMDriverID = padid;
first_pad->pNextACMDriver = NULL;
padid->pACMDriverList = first_pad;
}
ret = MSACM_DriverOpenHelper(&pad, padid, fdwOpen, TRUE); if (!(pad->hDrvr = padid->hInstModule))
if (ret) { {
if (first_pad) ACMDRVOPENDESCW adod;
acmDriverClose((HACMDRIVER)first_pad, 0L); int len;
goto gotError;
/* 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 */ /* insert new pad at beg of list */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment