mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-30 04:13:33 +00:00
Sync to Wine-20040813:
Alexandre Julliard - Avoid some non-portable makefile constructs, and get rid of the ALTNAMES variable. Robert Reif <[email protected]> - Change MIXER_GetDev to take pointer to returned address pointer and return one of 3 possible return values rather than an address or NULL. - Adds *GetDevCapsW bad pointer check. - Adds waveOutGetDevCapsW test. Filip Navara <[email protected]> - Implementation of mmTaskCreate. Based on patch by Eric Pouech. - Fallback implementation in waveOut[Un]PrepareHeader. Marcelo Duarte <[email protected]> - Localization of devenum to Portuguese and minor corrections. svn path=/trunk/; revision=10539
This commit is contained in:
@@ -5,9 +5,6 @@ SRCDIR = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
MODULE = winmm.dll
|
||||
IMPORTS = user32 advapi32 kernel32 ntdll
|
||||
ALTNAMES = mmsystem.dll sound.dll
|
||||
|
||||
SPEC_SRCS16 = $(ALTNAMES:.dll=.spec)
|
||||
|
||||
C_SRCS = \
|
||||
driver.c \
|
||||
@@ -24,6 +21,10 @@ C_SRCS16 = \
|
||||
mmsystem.c \
|
||||
sound16.c
|
||||
|
||||
SPEC_SRCS16 = \
|
||||
mmsystem.spec \
|
||||
sound.spec
|
||||
|
||||
RC_SRCS = winmm_res.rc
|
||||
|
||||
SUBDIRS = tests
|
||||
|
||||
@@ -4,7 +4,7 @@ RCS file: /home/wine/wine/dlls/winmm/lolvldrv.c,v
|
||||
retrieving revision 1.58
|
||||
diff -u -r1.58 lolvldrv.c
|
||||
--- lolvldrv.c 1 Jun 2004 19:40:48 -0000 1.58
|
||||
+++ lolvldrv.c 8 Aug 2004 21:46:41 -0000
|
||||
+++ lolvldrv.c 14 Aug 2004 20:50:50 -0000
|
||||
@@ -510,10 +510,12 @@
|
||||
case DRV_QUERYDEVICEINTERFACESIZE:
|
||||
return MMDRV_Message(mld, uMsg, dwParam1, dwParam2, TRUE);
|
||||
@@ -45,7 +45,7 @@ RCS file: /home/wine/wine/dlls/winmm/time.c,v
|
||||
retrieving revision 1.26
|
||||
diff -u -r1.26 time.c
|
||||
--- time.c 12 Jan 2004 21:03:10 -0000 1.26
|
||||
+++ time.c 8 Aug 2004 21:46:42 -0000
|
||||
+++ time.c 14 Aug 2004 20:50:50 -0000
|
||||
@@ -175,14 +175,19 @@
|
||||
volatile HANDLE *pActive = (volatile HANDLE *)&TIME_hMMTimer;
|
||||
DWORD last_time, cur_time;
|
||||
@@ -69,22 +69,11 @@ diff -u -r1.26 time.c
|
||||
Index: winmm.c
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/winmm/winmm.c,v
|
||||
retrieving revision 1.38
|
||||
diff -u -r1.38 winmm.c
|
||||
--- winmm.c 30 Jun 2004 18:12:20 -0000 1.38
|
||||
+++ winmm.c 8 Aug 2004 21:46:43 -0000
|
||||
@@ -102,8 +102,9 @@
|
||||
* inside WINMM_IData */
|
||||
CloseHandle(WINMM_IData->psStopEvent);
|
||||
CloseHandle(WINMM_IData->psLastEvent);
|
||||
+ WINMM_IData->cs.DebugInfo = NULL;
|
||||
DeleteCriticalSection(&WINMM_IData->cs);
|
||||
- HeapFree(GetProcessHeap(), 0, WINMM_IData);
|
||||
+ HeapFree(GetProcessHeap(), 0, WINMM_IData);
|
||||
WINMM_IData = NULL;
|
||||
}
|
||||
}
|
||||
@@ -126,10 +127,12 @@
|
||||
retrieving revision 1.41
|
||||
diff -u -r1.41 winmm.c
|
||||
--- winmm.c 9 Aug 2004 18:45:05 -0000 1.41
|
||||
+++ winmm.c 14 Aug 2004 20:50:51 -0000
|
||||
@@ -126,10 +126,12 @@
|
||||
loaded = -1;
|
||||
if (h)
|
||||
{
|
||||
@@ -97,133 +86,13 @@ diff -u -r1.38 winmm.c
|
||||
loaded = 1;
|
||||
}
|
||||
}
|
||||
@@ -2658,6 +2661,7 @@
|
||||
WAVEHDR* lpWaveOutHdr, UINT uSize)
|
||||
{
|
||||
LPWINE_MLD wmld;
|
||||
+ UINT result;
|
||||
|
||||
TRACE("(%p, %p, %u);\n", hWaveOut, lpWaveOutHdr, uSize);
|
||||
|
||||
@@ -2667,7 +2671,17 @@
|
||||
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, FALSE)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
|
||||
- return MMDRV_Message(wmld, WODM_PREPARE, (DWORD_PTR)lpWaveOutHdr, uSize, TRUE);
|
||||
+ if ((result = MMDRV_Message(wmld, WODM_PREPARE, (DWORD_PTR)lpWaveOutHdr,
|
||||
+ uSize, TRUE)) != MMSYSERR_NOTSUPPORTED)
|
||||
+ return result;
|
||||
+
|
||||
+ if (lpWaveOutHdr->dwFlags & WHDR_INQUEUE)
|
||||
+ return WAVERR_STILLPLAYING;
|
||||
+
|
||||
+ lpWaveOutHdr->dwFlags |= WHDR_PREPARED;
|
||||
+ lpWaveOutHdr->dwFlags &= ~WHDR_DONE;
|
||||
+
|
||||
+ return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@@ -2677,6 +2691,7 @@
|
||||
LPWAVEHDR lpWaveOutHdr, UINT uSize)
|
||||
{
|
||||
LPWINE_MLD wmld;
|
||||
+ UINT result;
|
||||
|
||||
TRACE("(%p, %p, %u);\n", hWaveOut, lpWaveOutHdr, uSize);
|
||||
|
||||
@@ -2690,7 +2705,17 @@
|
||||
if ((wmld = MMDRV_Get(hWaveOut, MMDRV_WAVEOUT, FALSE)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
|
||||
- return MMDRV_Message(wmld, WODM_UNPREPARE, (DWORD_PTR)lpWaveOutHdr, uSize, TRUE);
|
||||
+ if ((result = MMDRV_Message(wmld, WODM_UNPREPARE, (DWORD_PTR)lpWaveOutHdr,
|
||||
+ uSize, TRUE)) != MMSYSERR_NOTSUPPORTED)
|
||||
+ return result;
|
||||
+
|
||||
+ if (lpWaveOutHdr->dwFlags & WHDR_INQUEUE)
|
||||
+ return WAVERR_STILLPLAYING;
|
||||
+
|
||||
+ lpWaveOutHdr->dwFlags &= ~WHDR_PREPARED;
|
||||
+ lpWaveOutHdr->dwFlags |= WHDR_DONE;
|
||||
+
|
||||
+ return MMSYSERR_NOERROR;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@@ -3173,4 +3198,50 @@
|
||||
|
||||
|
||||
return MMDRV_Message(wmld, uMessage, dwParam1, dwParam2, TRUE);
|
||||
+}
|
||||
+
|
||||
+struct mm_starter
|
||||
+{
|
||||
+ LPTASKCALLBACK cb;
|
||||
+ DWORD client;
|
||||
+ HANDLE event;
|
||||
+};
|
||||
+
|
||||
+DWORD WINAPI mmTaskRun(void* pmt)
|
||||
+{
|
||||
+ struct mm_starter mms;
|
||||
+
|
||||
+ memcpy(&mms, pmt, sizeof(struct mm_starter));
|
||||
+ HeapFree(GetProcessHeap(), 0, pmt);
|
||||
+ mms.cb(mms.client);
|
||||
+ if (mms.event) SetEvent(mms.event);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK cb, HANDLE* ph, DWORD client)
|
||||
+{
|
||||
+ HANDLE hThread;
|
||||
+ HANDLE hEvent;
|
||||
+ struct mm_starter *mms;
|
||||
+
|
||||
+ mms = HeapAlloc(GetProcessHeap(), 0, sizeof(struct mm_starter));
|
||||
+ if (mms == NULL) { return TASKERR_OUTOFMEMORY; }
|
||||
+
|
||||
+ mms->cb = cb;
|
||||
+ mms->client = client;
|
||||
+ if (ph) {
|
||||
+ mms->event = hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
+ } else {
|
||||
+ mms->event = NULL;
|
||||
+ }
|
||||
+
|
||||
+ hThread = CreateThread(0, 0, mmTaskRun, (LPVOID)mms, 0, NULL);
|
||||
+ if (!hThread) {
|
||||
+ HeapFree(GetProcessHeap(), 0, mms);
|
||||
+ CloseHandle(hEvent);
|
||||
+ return TASKERR_OUTOFMEMORY;
|
||||
+ }
|
||||
+ if (ph) *ph = hEvent;
|
||||
+ CloseHandle(hThread);
|
||||
+ return 0;
|
||||
}
|
||||
Index: winmm.spec
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/winmm/winmm.spec,v
|
||||
retrieving revision 1.20
|
||||
diff -u -r1.20 winmm.spec
|
||||
--- winmm.spec 15 Sep 2003 20:13:30 -0000 1.20
|
||||
+++ winmm.spec 8 Aug 2004 21:46:43 -0000
|
||||
@@ -135,6 +135,7 @@
|
||||
@ stdcall mmioStringToFOURCCW(wstr long)
|
||||
@ stdcall mmioWrite(long ptr long)
|
||||
@ stdcall mmsystemGetVersion()
|
||||
+@ stdcall mmTaskCreate(ptr ptr long)
|
||||
@ stdcall sndPlaySoundA(ptr long)
|
||||
@ stdcall sndPlaySoundW(ptr long)
|
||||
@ stdcall timeBeginPeriod(long)
|
||||
Index: winmm_res.rc
|
||||
===================================================================
|
||||
RCS file: /home/wine/wine/dlls/winmm/winmm_res.rc,v
|
||||
retrieving revision 1.15
|
||||
diff -u -r1.15 winmm_res.rc
|
||||
--- winmm_res.rc 13 Jul 2004 23:36:37 -0000 1.15
|
||||
+++ winmm_res.rc 8 Aug 2004 21:46:43 -0000
|
||||
retrieving revision 1.16
|
||||
diff -u -r1.16 winmm_res.rc
|
||||
--- winmm_res.rc 29 Jul 2004 02:40:15 -0000 1.16
|
||||
+++ winmm_res.rc 14 Aug 2004 20:50:51 -0000
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "winmm_Es.rc"
|
||||
#include "winmm_Fr.rc"
|
||||
|
||||
+57
-32
@@ -83,7 +83,7 @@ static BOOL WINMM_CreateIData(HINSTANCE hInstDLL)
|
||||
return FALSE;
|
||||
WINMM_IData->hWinMM32Instance = hInstDLL;
|
||||
InitializeCriticalSection(&WINMM_IData->cs);
|
||||
WINMM_IData->cs.DebugInfo = (void*)__FILE__ ": WinMM";
|
||||
WINMM_IData->cs.DebugInfo->Spare[1] = (DWORD)"WINMM_IData";
|
||||
WINMM_IData->psStopEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
WINMM_IData->psLastEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
TRACE("Created IData (%p)\n", WINMM_IData);
|
||||
@@ -102,7 +102,6 @@ static void WINMM_DeleteIData(void)
|
||||
* inside WINMM_IData */
|
||||
CloseHandle(WINMM_IData->psStopEvent);
|
||||
CloseHandle(WINMM_IData->psLastEvent);
|
||||
WINMM_IData->cs.DebugInfo = NULL;
|
||||
DeleteCriticalSection(&WINMM_IData->cs);
|
||||
HeapFree(GetProcessHeap(), 0, WINMM_IData);
|
||||
WINMM_IData = NULL;
|
||||
@@ -210,9 +209,10 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID fImpLoad)
|
||||
/**************************************************************************
|
||||
* find out the real mixer ID depending on hmix (depends on dwFlags)
|
||||
*/
|
||||
static LPWINE_MIXER MIXER_GetDev(HMIXEROBJ hmix, DWORD dwFlags)
|
||||
static UINT MIXER_GetDev(HMIXEROBJ hmix, DWORD dwFlags, LPWINE_MIXER * lplpwm)
|
||||
{
|
||||
LPWINE_MIXER lpwm = NULL;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
switch (dwFlags & 0xF0000000ul) {
|
||||
case MIXER_OBJECTF_MIXER:
|
||||
@@ -249,10 +249,15 @@ static LPWINE_MIXER MIXER_GetDev(HMIXEROBJ hmix, DWORD dwFlags)
|
||||
lpwm = (LPWINE_MIXER)MMDRV_GetRelated(hmix, MMDRV_AUX, TRUE, MMDRV_MIXER);
|
||||
break;
|
||||
default:
|
||||
FIXME("Unsupported flag (%08lx)\n", dwFlags & 0xF0000000ul);
|
||||
WARN("Unsupported flag (%08lx)\n", dwFlags & 0xF0000000ul);
|
||||
lpwm = 0;
|
||||
uRet = MMSYSERR_INVALFLAG;
|
||||
break;
|
||||
}
|
||||
return lpwm;
|
||||
*lplpwm = lpwm;
|
||||
if (lpwm == 0 && uRet == MMSYSERR_NOERROR)
|
||||
uRet = MMSYSERR_INVALPARAM;
|
||||
return uRet;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@@ -284,8 +289,11 @@ UINT WINAPI mixerGetDevCapsA(UINT_PTR uDeviceID, LPMIXERCAPSA lpCaps, UINT uSize
|
||||
UINT WINAPI mixerGetDevCapsW(UINT_PTR uDeviceID, LPMIXERCAPSW lpCaps, UINT uSize)
|
||||
{
|
||||
MIXERCAPSA micA;
|
||||
UINT ret = mixerGetDevCapsA(uDeviceID, &micA, sizeof(micA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = mixerGetDevCapsA(uDeviceID, &micA, sizeof(micA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
MIXERCAPSW micW;
|
||||
micW.wMid = micA.wMid;
|
||||
@@ -364,17 +372,17 @@ UINT WINAPI mixerClose(HMIXER hMix)
|
||||
UINT WINAPI mixerGetID(HMIXEROBJ hmix, LPUINT lpid, DWORD fdwID)
|
||||
{
|
||||
LPWINE_MIXER lpwm;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
TRACE("(%p %p %08lx)\n", hmix, lpid, fdwID);
|
||||
|
||||
if ((lpwm = MIXER_GetDev(hmix, fdwID)) == NULL) {
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
}
|
||||
if ((uRet = MIXER_GetDev(hmix, fdwID, &lpwm)) != MMSYSERR_NOERROR)
|
||||
return uRet;
|
||||
|
||||
if (lpid)
|
||||
*lpid = lpwm->mld.uDeviceID;
|
||||
|
||||
return MMSYSERR_NOERROR;
|
||||
return uRet;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@@ -384,11 +392,12 @@ UINT WINAPI mixerGetControlDetailsA(HMIXEROBJ hmix, LPMIXERCONTROLDETAILS lpmcdA
|
||||
DWORD fdwDetails)
|
||||
{
|
||||
LPWINE_MIXER lpwm;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
TRACE("(%p, %p, %08lx)\n", hmix, lpmcdA, fdwDetails);
|
||||
|
||||
if ((lpwm = MIXER_GetDev(hmix, fdwDetails)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
if ((uRet = MIXER_GetDev(hmix, fdwDetails, &lpwm)) != MMSYSERR_NOERROR)
|
||||
return uRet;
|
||||
|
||||
if (lpmcdA == NULL || lpmcdA->cbStruct != sizeof(*lpmcdA))
|
||||
return MMSYSERR_INVALPARAM;
|
||||
@@ -462,11 +471,12 @@ UINT WINAPI mixerGetLineControlsA(HMIXEROBJ hmix, LPMIXERLINECONTROLSA lpmlcA,
|
||||
DWORD fdwControls)
|
||||
{
|
||||
LPWINE_MIXER lpwm;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
TRACE("(%p, %p, %08lx)\n", hmix, lpmlcA, fdwControls);
|
||||
|
||||
if ((lpwm = MIXER_GetDev(hmix, fdwControls)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
if ((uRet = MIXER_GetDev(hmix, fdwControls, &lpwm)) != MMSYSERR_NOERROR)
|
||||
return uRet;
|
||||
|
||||
if (lpmlcA == NULL || lpmlcA->cbStruct != sizeof(*lpmlcA))
|
||||
return MMSYSERR_INVALPARAM;
|
||||
@@ -542,11 +552,12 @@ UINT WINAPI mixerGetLineControlsW(HMIXEROBJ hmix, LPMIXERLINECONTROLSW lpmlcW,
|
||||
UINT WINAPI mixerGetLineInfoA(HMIXEROBJ hmix, LPMIXERLINEA lpmliW, DWORD fdwInfo)
|
||||
{
|
||||
LPWINE_MIXER lpwm;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
TRACE("(%p, %p, %08lx)\n", hmix, lpmliW, fdwInfo);
|
||||
|
||||
if ((lpwm = MIXER_GetDev(hmix, fdwInfo)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
if ((uRet = MIXER_GetDev(hmix, fdwInfo, &lpwm)) != MMSYSERR_NOERROR)
|
||||
return uRet;
|
||||
|
||||
return MMDRV_Message(&lpwm->mld, MXDM_GETLINEINFO, (DWORD_PTR)lpmliW,
|
||||
fdwInfo, TRUE);
|
||||
@@ -589,7 +600,8 @@ UINT WINAPI mixerGetLineInfoW(HMIXEROBJ hmix, LPMIXERLINEW lpmliW,
|
||||
WideCharToMultiByte( CP_ACP, 0, lpmliW->Target.szPname, -1, mliA.Target.szPname, sizeof(mliA.Target.szPname), NULL, NULL);
|
||||
break;
|
||||
default:
|
||||
FIXME("Unsupported fdwControls=0x%08lx\n", fdwInfo);
|
||||
WARN("Unsupported fdwControls=0x%08lx\n", fdwInfo);
|
||||
return MMSYSERR_INVALFLAG;
|
||||
}
|
||||
|
||||
ret = mixerGetLineInfoA(hmix, &mliA, fdwInfo);
|
||||
@@ -625,11 +637,12 @@ UINT WINAPI mixerSetControlDetails(HMIXEROBJ hmix, LPMIXERCONTROLDETAILS lpmcdA,
|
||||
DWORD fdwDetails)
|
||||
{
|
||||
LPWINE_MIXER lpwm;
|
||||
UINT uRet = MMSYSERR_NOERROR;
|
||||
|
||||
TRACE("(%p, %p, %08lx)\n", hmix, lpmcdA, fdwDetails);
|
||||
|
||||
if ((lpwm = MIXER_GetDev(hmix, fdwDetails)) == NULL)
|
||||
return MMSYSERR_INVALHANDLE;
|
||||
if ((uRet = MIXER_GetDev(hmix, fdwDetails, &lpwm)) != MMSYSERR_NOERROR)
|
||||
return uRet;
|
||||
|
||||
return MMDRV_Message(&lpwm->mld, MXDM_SETCONTROLDETAILS, (DWORD_PTR)lpmcdA,
|
||||
fdwDetails, TRUE);
|
||||
@@ -665,8 +678,11 @@ UINT WINAPI auxGetNumDevs(void)
|
||||
UINT WINAPI auxGetDevCapsW(UINT_PTR uDeviceID, LPAUXCAPSW lpCaps, UINT uSize)
|
||||
{
|
||||
AUXCAPSA acA;
|
||||
UINT ret = auxGetDevCapsA(uDeviceID, &acA, sizeof(acA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = auxGetDevCapsA(uDeviceID, &acA, sizeof(acA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
AUXCAPSW acW;
|
||||
acW.wMid = acA.wMid;
|
||||
@@ -1217,8 +1233,11 @@ UINT WINAPI midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps,
|
||||
UINT uSize)
|
||||
{
|
||||
MIDIOUTCAPSA mocA;
|
||||
UINT ret = midiOutGetDevCapsA(uDeviceID, &mocA, sizeof(mocA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = midiOutGetDevCapsA(uDeviceID, &mocA, sizeof(mocA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
MIDIOUTCAPSW mocW;
|
||||
mocW.wMid = mocA.wMid;
|
||||
@@ -1594,8 +1613,11 @@ UINT WINAPI midiInGetNumDevs(void)
|
||||
UINT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW lpCaps, UINT uSize)
|
||||
{
|
||||
MIDIINCAPSA micA;
|
||||
UINT ret = midiInGetDevCapsA(uDeviceID, &micA, sizeof(micA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = midiInGetDevCapsA(uDeviceID, &micA, sizeof(micA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
MIDIINCAPSW micW;
|
||||
micW.wMid = micA.wMid;
|
||||
@@ -2559,8 +2581,11 @@ UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps,
|
||||
UINT uSize)
|
||||
{
|
||||
WAVEOUTCAPSA wocA;
|
||||
UINT ret = waveOutGetDevCapsA(uDeviceID, &wocA, sizeof(wocA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = waveOutGetDevCapsA(uDeviceID, &wocA, sizeof(wocA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
WAVEOUTCAPSW wocW;
|
||||
wocW.wMid = wocA.wMid;
|
||||
@@ -2951,8 +2976,11 @@ UINT WINAPI waveInGetNumDevs(void)
|
||||
UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize)
|
||||
{
|
||||
WAVEINCAPSA wicA;
|
||||
UINT ret = waveInGetDevCapsA(uDeviceID, &wicA, sizeof(wicA));
|
||||
UINT ret;
|
||||
|
||||
if (lpCaps == NULL) return MMSYSERR_INVALPARAM;
|
||||
|
||||
ret = waveInGetDevCapsA(uDeviceID, &wicA, sizeof(wicA));
|
||||
if (ret == MMSYSERR_NOERROR) {
|
||||
WAVEINCAPSW wicW;
|
||||
wicW.wMid = wicA.wMid;
|
||||
@@ -3221,7 +3249,7 @@ DWORD WINAPI mmTaskRun(void* pmt)
|
||||
MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK cb, HANDLE* ph, DWORD client)
|
||||
{
|
||||
HANDLE hThread;
|
||||
HANDLE hEvent;
|
||||
HANDLE hEvent = 0;
|
||||
struct mm_starter *mms;
|
||||
|
||||
mms = HeapAlloc(GetProcessHeap(), 0, sizeof(struct mm_starter));
|
||||
@@ -3229,16 +3257,13 @@ MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK cb, HANDLE* ph, DWORD client)
|
||||
|
||||
mms->cb = cb;
|
||||
mms->client = client;
|
||||
if (ph) {
|
||||
mms->event = hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
} else {
|
||||
mms->event = NULL;
|
||||
}
|
||||
if (ph) hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
mms->event = hEvent;
|
||||
|
||||
hThread = CreateThread(0, 0, mmTaskRun, (LPVOID)mms, 0, NULL);
|
||||
hThread = CreateThread(0, 0, mmTaskRun, mms, 0, NULL);
|
||||
if (!hThread) {
|
||||
HeapFree(GetProcessHeap(), 0, mms);
|
||||
CloseHandle(hEvent);
|
||||
if (hEvent) CloseHandle(hEvent);
|
||||
return TASKERR_OUTOFMEMORY;
|
||||
}
|
||||
if (ph) *ph = hEvent;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Multimedia resources (MMSYSTEM.DLL & WINMM.DLL
|
||||
/* Multimedia resources (MMSYSTEM.DLL & WINMM.DLL)
|
||||
*
|
||||
* Copyright (c) 1999, Eric Pouech
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user