87 TRACE(
"In thread before async command (%08x,%08lx,%08lx)\n",
90 TRACE(
"In thread after async command (%08x,%08lx,%08lx)\n",
124 WARN(
"Couldn't allocate thread for async command handling, sending synchronously\n");
154 if (modp ==
NULL)
return 0xFFFFFFFF;
167 wmw->wfxRef.nChannels = 1;
168 wmw->wfxRef.nSamplesPerSec = 11025;
169 wmw->wfxRef.nAvgBytesPerSec = 11025;
170 wmw->wfxRef.nBlockAlign = 1;
171 wmw->wfxRef.wBitsPerSample = 8;
172 wmw->wfxRef.cbSize = 0;
189 return (dwDevID == 0xFFFFFFFF) ? 1 : 0;
287 TRACE(
"Chunk Found ckid=%.4s fccType=%.4s cksize=%08X\n",
298 TRACE(
"wFormatTag=%04X !\n", pwfx->wFormatTag);
299 TRACE(
"nChannels=%d\n", pwfx->nChannels);
300 TRACE(
"nSamplesPerSec=%d\n", pwfx->nSamplesPerSec);
301 TRACE(
"nAvgBytesPerSec=%d\n", pwfx->nAvgBytesPerSec);
302 TRACE(
"nBlockAlign=%d\n", pwfx->nBlockAlign);
303 TRACE(
"wBitsPerSample=%u !\n", pwfx->wBitsPerSample);
305 TRACE(
"cbSize=%u !\n", pwfx->cbSize);
316 TRACE(
"can't find data chunk\n");
319 TRACE(
"Chunk Found ckid=%.4s fccType=%.4s cksize=%08X\n",
371 WARN(
"Incorrect nBlockAlign (%d), setting it to %d\n",
379 WARN(
"Incorrect nAvgBytesPerSec (%d), setting it to %d\n",
430 WARN(
"can't retrieve temp path!\n");
431 *pszTmpFileName =
NULL;
439 WARN(
"can't retrieve temp file name!\n");
446 if (*pszTmpFileName && (*pszTmpFileName)[0]) {
479 if (wmw->
hFile == 0) {
494 TRACE(
"ParentChunk ckid=%.4s fccType=%.4s cksize=%08X\n",
677 if (wmw->
hFile != 0) {
716 ERR(
"Unknown uMsg=%d\n", uMsg);
755 if (wmw->
hFile == 0) {
774 if (dwRet)
return dwRet;
780 WARN(
"Incorrect nBlockAlign (%d), setting it to %d\n",
790 WARN(
"Incorrect nAvgBytesPerSec (%d), setting it to %d\n",
833 #define WAVE_ALIGN_ON_BLOCK(wmw,v) \ 834 ((((v) + (wmw)->lpWaveFormat->nBlockAlign - 1) / (wmw)->lpWaveFormat->nBlockAlign) * (wmw)->lpWaveFormat->nBlockAlign) 848 TRACE(
"Can't open low level audio device %d\n", dwRet);
876 wmw->dwEventCount = 1
L;
878 TRACE(
"Playing (normalized) from byte=%u for %u bytes\n", wmw->dwPosition,
left);
892 TRACE(
"before WODM_WRITE lpWaveHdr=%p dwBufferLength=%u\n",
893 &waveHdr[whidx], waveHdr[whidx].dwBufferLength);
896 ERR(
"Aborting play loop, WODM_WRITE error %d\n", dwRet);
901 wmw->dwPosition +=
count;
902 TRACE(
"after WODM_WRITE dwPosition=%u\n", wmw->dwPosition);
977 ERR(
"Unknown uMsg=%d\n", uMsg);
1043 if (dwRet != 0)
return dwRet;
1047 if (dwRet != 0)
return dwRet;
1051 }
else end = 0xFFFFFFFF;
1069 #define WAVE_ALIGN_ON_BLOCK(wmw,v) \ 1070 ((((v) + (wmw)->lpWaveFormat->nBlockAlign - 1) / (wmw)->lpWaveFormat->nBlockAlign) * (wmw)->lpWaveFormat->nBlockAlign) 1086 TRACE(
"Can't open low level audio device %d\n", dwRet);
1116 wmw->dwEventCount = 1
L;
1118 TRACE(
"Recording (normalized) from byte=%u for %u bytes\n", wmw->dwPosition,
end - wmw->dwPosition);
1180 ERR(
"waveOutPause error %d\n",dwRet);
1188 ERR(
"waveInStop error %d\n",dwRet);
1222 ERR(
"waveInStart error %d\n",dwRet);
1229 ERR(
"waveOutRestart error %d\n",dwRet);
1252 DWORD position, dwRet;
1282 TRACE(
"Seeking to position=%u bytes\n", position);
1305 TRACE(
"MCI_FORMAT_MILLISECONDS !\n");
1309 TRACE(
"MCI_FORMAT_BYTES !\n");
1313 TRACE(
"MCI_FORMAT_SAMPLES !\n");
1322 TRACE(
"No support for video !\n");
1326 TRACE(
"No support for door open !\n");
1330 TRACE(
"No support for door close !\n");
1335 TRACE(
"MCI_SET_ON audio !\n");
1337 TRACE(
"MCI_SET_OFF audio !\n");
1339 WARN(
"MCI_SET_AUDIO without SET_ON or SET_OFF\n");
1348 default:
WARN(
"Unknown audio channel %u\n", lpParms->
dwAudio);
break;
1368 TRACE(
"MCI_WAVE_SET_ANYINPUT\n");
1374 TRACE(
"MCI_WAVE_SET_ANYOUTPUT\n");
1430 FIXME(
"MCI_WAIT not implemented\n");
1482 switch (lpParms->
dwItem) {
1485 TRACE(
"MCI_STATUS_CURRENT_TRACK => %lu\n", lpParms->
dwReturn);
1502 TRACE(
"MCI_STATUS_MEDIA_PRESENT => TRUE!\n");
1509 TRACE(
"MCI_STATUS_NUMBER_OF_TRACKS => %lu\n", lpParms->
dwReturn);
1519 TRACE(
"MCI_STATUS_POSITION %s => %lu\n",
1530 TRACE(
"MCI_STATUS_TIME_FORMAT => %lu\n", lpParms->
dwReturn);
1540 TRACE(
"MCI_WAVE_INPUT => %d\n", (
signed)wmw->
wInput);
1549 TRACE(
"MCI_WAVE_OUTPUT => %d\n", (
signed)wmw->
wOutput);
1564 TRACE(
"MCI_WAVE_STATUS_AVGBYTESPERSEC => %lu\n", lpParms->
dwReturn);
1568 TRACE(
"MCI_WAVE_STATUS_BITSPERSAMPLE => %lu\n", lpParms->
dwReturn);
1572 TRACE(
"MCI_WAVE_STATUS_BLOCKALIGN => %lu\n", lpParms->
dwReturn);
1576 TRACE(
"MCI_WAVE_STATUS_CHANNELS => %lu\n", lpParms->
dwReturn);
1580 TRACE(
"MCI_WAVE_STATUS_SAMPLESPERSEC => %lu\n", lpParms->
dwReturn);
1583 TRACE(
"MCI_WAVE_STATUS_LEVEL !\n");
1587 WARN(
"unknown command %08X !\n", lpParms->
dwItem);
1611 switch(lpParms->
dwItem) {
1655 FIXME(
"Unknown capability (%08x) !\n", lpParms->
dwItem);
1659 WARN(
"No GetDevCaps-Item !\n");
1686 static const WCHAR wszAudio [] = {
'W',
'i',
'n',
'e',
'\'',
's',
' ',
'a',
'u',
'd',
'i',
'o',
' ',
'p',
'l',
'a',
'y',
'e',
'r',0};
1687 static const WCHAR wszWaveIn [] = {
'W',
'i',
'n',
'e',
' ',
'W',
'a',
'v',
'e',
' ',
'I',
'n',0};
1688 static const WCHAR wszWaveOut[] = {
'W',
'i',
'n',
'e',
' ',
'W',
'a',
'v',
'e',
' ',
'O',
'u',
't',0};
1696 WARN(
"Don't know this info command (%u)\n",
dwFlags);
1719 TRACE(
"(%08lX, %p, %08X, %08lX, %08lX)\n",
1767 FIXME(
"Unsupported command [%u]\n", wMsg);
1770 TRACE(
"Unsupported command [%u]\n", wMsg);
1777 ERR(
"Shouldn't receive a MCI_OPEN or CLOSE message\n");
1780 FIXME(
"is probably wrong msg [%u]\n", wMsg);
#define MCI_WAVE_GETDEVCAPS_INPUTS
BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD dwData)
#define MCI_FORMAT_SAMPLES
#define MCI_NO_COMMAND_TABLE
#define MCIERR_NONAPPLICABLE_FUNCTION
static void CALLBACK WAVE_mciPlayCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, LPARAM dwParam1, LPARAM dwParam2)
#define MCIERR_INVALID_FILE
UINT WINAPI waveInClose(HWAVEIN hWaveIn)
DWORD WINAPI mciGetDriverData(UINT uDeviceID)
#define WAVE_FORMAT_PCM_S
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
static DWORD WAVE_mciPlay(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE hEvent)
#define MCI_WAVE_STATUS_BITSPERSAMPLE
#define MCI_WAVE_STATUS_SAMPLESPERSEC
static struct object_header ** handles
#define MCI_WAVE_SET_CHANNELS
static void WAVE_mciNotify(DWORD_PTR hWndCallBack, WINE_MCIWAVE *wmw, UINT wStatus)
MMRESULT WINAPI waveInOpen(HWAVEIN *lphWaveIn, UINT uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags)
static GLenum _GLUfuncptr fn
#define MCI_STATUS_NUMBER_OF_TRACKS
GLdouble GLdouble GLdouble r
#define MCI_GETDEVCAPS_CAN_SAVE
struct wavehdr_tag * LPWAVEHDR
#define MCI_WAVE_STATUS_CHANNELS
GLuint GLuint GLsizei count
MMRESULT WINAPI mmioAscend(HMMIO hmmio, LPMMCKINFO lpck, UINT uFlags)
#define MCIERR_UNSUPPORTED_FUNCTION
static DWORD WAVE_mciSave(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_SAVE_PARMSW lpParms)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
static DWORD WAVE_mciPause(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
#define MCI_GETDEVCAPS_COMPOUND_DEVICE
MMRESULT WINAPI mmioClose(HMMIO hmmio, UINT uFlags)
static DWORD WAVE_ConvertByteToTimeFormat(WINE_MCIWAVE *wmw, DWORD val)
#define MCI_WAVE_STATUS_FORMATTAG
#define MCI_WAVE_SET_FORMATTAG
#define MCI_WAVE_STATUS_BLOCKALIGN
HMMIO WINAPI mmioOpenW(LPWSTR szFileName, MMIOINFO *lpmmioinfo, DWORD dwOpenFlags)
#define MCI_RESOURCE_RETURNED
GLenum GLuint GLsizei bufsize
#define MCI_GETDEVCAPS_CAN_RECORD
#define MAKEMCIRESOURCE(wRet, wRes)
#define MCI_SET_DOOR_CLOSED
struct pcmwaveformat_tag PCMWAVEFORMAT
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
#define MCI_STATUS_POSITION
UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
LONG WINAPI mmioSeek(HMMIO hmmio, LONG lOffset, INT iOrigin)
#define MCI_NOTIFY_ABORTED
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
UINT WINAPI waveOutPrepareHeader(HWAVEOUT hWaveOut, WAVEHDR *lpWaveOutHdr, UINT uSize)
#define DRV_QUERYCONFIGURE
WINE_DEFAULT_DEBUG_CHANNEL(mciwave)
int WINAPI MessageBoxA(_In_opt_ HWND, _In_opt_ LPCSTR, _In_opt_ LPCSTR, _In_ UINT)
static LRESULT WAVE_mciOpenFile(WINE_MCIWAVE *wmw, LPCWSTR filename)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
#define MCI_GETDEVCAPS_USES_FILES
#define MCIERR_FILE_NOT_SAVED
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
#define MCI_OPEN_ELEMENT_ID
#define MCIERR_FLAGS_NOT_COMPATIBLE
#define MCI_FORMAT_MILLISECONDS
VOID CALLBACK_FUNCTION(__in PVOID CallbackContext, __in_opt PVOID Argument1, __in_opt PVOID Argument2)
static LRESULT WAVE_drvClose(MCIDEVICEID dwDevID)
DWORD(* async_cmd)(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE evt)
UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
#define MCI_WAVE_SET_SAMPLESPERSEC
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
#define MCI_GETDEVCAPS_DEVICE_TYPE
#define MCI_WAVE_STATUS_LEVEL
LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
static void WAVE_mciPlayWaitDone(WINE_MCIWAVE *wmw)
static DWORD WAVE_mciCue(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
#define MCI_WAVE_SET_ANYOUTPUT
UINT WINAPI waveOutGetNumDevs(void)
#define MCIERR_MISSING_PARAMETER
#define MCI_NOTIFY_FAILURE
BOOL WINAPI SetThreadPriority(IN HANDLE hThread, IN int nPriority)
#define MCI_GETDEVCAPS_HAS_VIDEO
#define MCIERR_PARAM_OVERFLOW
#define MCIERR_OUT_OF_MEMORY
static DWORD WAVE_mciCreateRIFFSkeleton(WINE_MCIWAVE *wmw)
#define InterlockedExchangePointer(Target, Value)
LPWAVEFORMATEX lpWaveFormat
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define MCI_STATUS_LENGTH
#define MCIERR_BAD_INTEGER
UINT WINAPI waveOutPause(HWAVEOUT hWaveOut)
static DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
#define MCI_OPEN_SHAREABLE
#define MCI_SET_TIME_FORMAT
#define MCI_SET_AUDIO_LEFT
static LRESULT WAVE_drvOpen(LPCWSTR str, LPMCI_OPEN_DRIVER_PARMSW modp)
#define MCIERR_BAD_TIME_FORMAT
MCIDEVICEID wNotifyDeviceID
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
#define MCI_WAVE_SET_AVGBYTESPERSEC
#define MCI_WAVE_SET_ANYINPUT
UINT WINAPI waveOutWrite(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize)
#define MCI_NOTIFY_SUCCESSFUL
static DWORD MCI_SendCommandAsync(UINT wDevID, async_cmd cmd, DWORD_PTR dwParam1, DWORD_PTR dwParam2, UINT size)
#define THREAD_PRIORITY_TIME_CRITICAL
static DWORD WAVE_mciRecord(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE hEvent)
#define MCI_WAVE_STATUS_AVGBYTESPERSEC
#define MCI_SET_AUDIO_RIGHT
static void WAVE_mciDefaultFmt(WINE_MCIWAVE *wmw)
#define InterlockedDecrement
MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, MMCKINFO *lpck, UINT uFlags)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
#define mmioFOURCC(c0, c1, c2, c3)
#define MCI_GETDEVCAPS_HAS_AUDIO
static WINE_MCIWAVE * WAVE_mciGetOpenDev(MCIDEVICEID wDevID)
#define MCI_STATUS_CURRENT_TRACK
#define memcpy(s1, s2, n)
#define MCIERR_OUTOFRANGE
#define MCI_GETDEVCAPS_ITEM
static void WAVE_mciRecordWaitDone(WINE_MCIWAVE *wmw)
static DWORD WAVE_mciReadFmt(WINE_MCIWAVE *wmw, const MMCKINFO *pckMainRIFF)
UINT WINAPI waveOutUnprepareHeader(HWAVEOUT hWaveOut, LPWAVEHDR lpWaveOutHdr, UINT uSize)
static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, LPARAM dwParam1, LPARAM dwParam2)
#define MCI_SEEK_TO_START
UINT WINAPI waveInStart(HWAVEIN hWaveIn)
UINT WINAPI waveInReset(HWAVEIN hWaveIn)
static DWORD WAVE_mciSeek(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
static DWORD WAVE_mciStop(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
#define MCIERR_FILE_NOT_FOUND
#define InterlockedIncrement
#define MCI_WAVE_SET_BITSPERSAMPLE
#define MCI_MODE_NOT_READY
MMRESULT WINAPI waveOutOpen(LPHWAVEOUT lphWaveOut, UINT uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags)
UINT WINAPI waveInStop(HWAVEIN hWaveIn)
#define MCI_NOTIFY_SUPERSEDED
MMRESULT WINAPI mmioDescend(HMMIO hmmio, LPMMCKINFO lpck, const MMCKINFO *lpckParent, UINT uFlags)
static DWORD WAVE_mciStatus(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
static LRESULT WAVE_mciOpen(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMSW lpOpenParms)
static DWORD create_tmp_file(HMMIO *hFile, LPWSTR *pszTmpFileName)
LRESULT CALLBACK MCIWAVE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, LPARAM dwParam1, LPARAM dwParam2)
UINT WINAPI waveOutClose(HWAVEOUT hWaveOut)
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
#define MCIERR_UNRECOGNIZED_KEYWORD
static DWORD WAVE_mciGetDevCaps(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
MMRESULT WINAPI mmioRenameW(LPCWSTR szFileName, LPCWSTR szNewFileName, const MMIOINFO *lpmmioinfo, DWORD dwFlags)
static DWORD CALLBACK MCI_SCAStarter(LPVOID arg)
UINT WINAPI waveOutRestart(HWAVEOUT hWaveOut)
#define MCIERR_UNRECOGNIZED_COMMAND
#define MCI_GETDEVCAPS_CAN_EJECT
#define MCIERR_DEVICE_OPEN
static DWORD WAVE_mciInfo(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_INFO_PARMSW lpParms)
LRESULT WINAPI DefDriverProc(DWORD_PTR dwDriverIdentifier, HDRVR hDrv, UINT Msg, LPARAM lParam1, LPARAM lParam2)
static DWORD WAVE_ConvertTimeFormatToByte(WINE_MCIWAVE *wmw, DWORD val)
#define MCI_DEVTYPE_WAVEFORM_AUDIO
UINT WINAPI waveInGetNumDevs(void)
#define WAVE_ALIGN_ON_BLOCK(wmw, v)
#define MCIERR_INVALID_DEVICE_ID
#define MCI_SET_AUDIO_ALL
#define MCI_STATUS_TIME_FORMAT
#define MCI_WAVE_GETDEVCAPS_OUTPUTS
#define MCI_STATUS_MEDIA_PRESENT
#define MCIERR_NULL_PARAMETER_BLOCK
UINT WINAPI waveOutReset(HWAVEOUT hWaveOut)
#define HeapFree(x, y, z)
#define MCI_WAVE_SET_BLOCKALIGN
LONG WINAPI mmioRead(HMMIO hmmio, HPSTR pch, LONG cch)
#define MCI_SET_DOOR_OPEN
#define MCI_FORMAT_RETURN_BASE
static DWORD WAVE_mciClose(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
#define MCI_GETDEVCAPS_CAN_PLAY
static DWORD WAVE_mciSet(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_WAVE_SET_PARMS lpParms)