mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 20:15:39 +00:00
Moved session instance loading to winmm.
This commit is contained in:
parent
0143542c3a
commit
9dafca8ee0
|
@ -240,70 +240,13 @@ LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARA
|
|||
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 @@ MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpe
|
|||
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;
|
||||
pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));
|
||||
if (!pad)
|
||||
return MMSYSERR_NOMEM;
|
||||
|
||||
|
||||
/* insert new pad at beg of list */
|
||||
first_pad->pNextACMDriver = NULL;
|
||||
padid->pACMDriverList = first_pad;
|
||||
}
|
||||
pad->obj.dwType = WINE_ACMOBJ_DRIVER;
|
||||
pad->obj.pACMDriverID = padid;
|
||||
|
||||
ret = MSACM_DriverOpenHelper(&pad, padid, fdwOpen, TRUE);
|
||||
if (ret) {
|
||||
if (first_pad)
|
||||
acmDriverClose((HACMDRIVER)first_pad, 0L);
|
||||
goto gotError;
|
||||
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 */
|
||||
|
|
Loading…
Reference in a new issue