[01/18] winecoreaudio: Initial stub implementation of audio input
support.
Ken Thomases
ken at codeweavers.com
Thu Dec 28 11:03:26 CST 2006
-------------- next part --------------
diff --git a/dlls/winmm/winecoreaudio/audio.c b/dlls/winmm/winecoreaudio/audio.c
index d7dc314..db4fda0 100644
--- a/dlls/winmm/winecoreaudio/audio.c
+++ b/dlls/winmm/winecoreaudio/audio.c
@@ -70,7 +70,7 @@ typedef UInt32 AudioUnitRenderActionFlag
/* only allow 10 output devices through this driver, this ought to be adequate */
#define MAX_WAVEOUTDRV (1)
-#define MAX_WAVEINDRV (1)
+#define MAX_WAVEINDRV (0)
/* state diagram for waveOut writing:
*
@@ -1259,7 +1259,7 @@ static DWORD wodDevInterface(UINT wDevID
}
/**************************************************************************
-* wodMessage (WINEJACK.7)
+* wodMessage (WINECOREAUDIO.7)
*/
DWORD WINAPI CoreAudio_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
@@ -1406,9 +1406,260 @@ OSStatus CoreAudio_woAudioUnitIOProc(voi
if (needNotify) wodSendNotifyCompletionsMessage(wwo);
return noErr;
}
+
+
+/*======================================================================*
+ * Low level WAVE IN implementation *
+ *======================================================================*/
+
+/**************************************************************************
+ * widNotifyClient [internal]
+ */
+static DWORD widNotifyClient(WINE_WAVEIN* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2)
+{
+ TRACE("wMsg = 0x%04x dwParm1 = %04lX dwParam2 = %04lX\n", wMsg, dwParam1, dwParam2);
+
+ switch (wMsg)
+ {
+ case WIM_OPEN:
+ case WIM_CLOSE:
+ case WIM_DATA:
+ if (wwi->wFlags != DCB_NULL &&
+ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags,
+ (HDRVR)wwi->waveDesc.hWave, wMsg, wwi->waveDesc.dwInstance,
+ dwParam1, dwParam2))
+ {
+ WARN("can't notify client !\n");
+ return MMSYSERR_ERROR;
+ }
+ break;
+ default:
+ FIXME("Unknown callback message %u\n", wMsg);
+ return MMSYSERR_INVALPARAM;
+ }
+ return MMSYSERR_NOERROR;
+}
+
+
+/**************************************************************************
+ * widGetDevCaps [internal]
+ */
+static DWORD widGetDevCaps(WORD wDevID, LPWAVEINCAPSW lpCaps, DWORD dwSize)
+{
+ TRACE("(%u, %p, %lu);\n", wDevID, lpCaps, dwSize);
+
+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED;
+
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ TRACE("MAX_WAVEINDRV reached !\n");
+ return MMSYSERR_BADDEVICEID;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widOpen [internal]
+ */
+static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
+{
+ TRACE("(%u, %p, %08lX);\n", wDevID, lpDesc, dwFlags);
+ if (lpDesc == NULL)
+ {
+ WARN("Invalid Parameter !\n");
+ return MMSYSERR_INVALPARAM;
+ }
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ TRACE ("MAX_WAVEINDRV reached !\n");
+ return MMSYSERR_BADDEVICEID;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widClose [internal]
+ */
+static DWORD widClose(WORD wDevID)
+{
+ TRACE("(%u);\n", wDevID);
+
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ WARN("bad device ID !\n");
+ return MMSYSERR_BADDEVICEID;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widAddBuffer [internal]
+ */
+static DWORD widAddBuffer(WORD wDevID, LPWAVEHDR lpWaveHdr, DWORD dwSize)
+{
+ TRACE("(%u, %p, %08lX);\n", wDevID, lpWaveHdr, dwSize);
+
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ WARN("invalid device ID\n");
+ return MMSYSERR_INVALHANDLE;
+ }
+ if (!(lpWaveHdr->dwFlags & WHDR_PREPARED))
+ {
+ TRACE("never been prepared !\n");
+ return WAVERR_UNPREPARED;
+ }
+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE)
+ {
+ TRACE("header already in use !\n");
+ return WAVERR_STILLPLAYING;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widStart [internal]
+ */
+static DWORD widStart(WORD wDevID)
+{
+ TRACE("(%u);\n", wDevID);
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ WARN("invalid device ID\n");
+ return MMSYSERR_INVALHANDLE;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widStop [internal]
+ */
+static DWORD widStop(WORD wDevID)
+{
+ TRACE("(%u);\n", wDevID);
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ WARN("invalid device ID\n");
+ return MMSYSERR_INVALHANDLE;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widReset [internal]
+ */
+static DWORD widReset(WORD wDevID)
+{
+ TRACE("(%u);\n", wDevID);
+ if (wDevID >= MAX_WAVEINDRV)
+ {
+ WARN("invalid device ID\n");
+ return MMSYSERR_INVALHANDLE;
+ }
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widGetNumDevs [internal]
+ */
+static DWORD widGetNumDevs(void)
+{
+ return MAX_WAVEINDRV;
+}
+
+
+/**************************************************************************
+ * widDevInterfaceSize [internal]
+ */
+static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1)
+{
+ TRACE("(%u, %p)\n", wDevID, dwParam1);
+
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widDevInterface [internal]
+ */
+static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2)
+{
+ FIXME("unimplemented\n");
+ return MMSYSERR_NOTENABLED;
+}
+
+
+/**************************************************************************
+ * widMessage (WINECOREAUDIO.6)
+ */
+DWORD WINAPI CoreAudio_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
+ DWORD dwParam1, DWORD dwParam2)
+{
+ TRACE("(%u, %04X, %08lX, %08lX, %08lX);\n",
+ wDevID, wMsg, dwUser, dwParam1, dwParam2);
+
+ switch (wMsg)
+ {
+ case DRVM_INIT:
+ case DRVM_EXIT:
+ case DRVM_ENABLE:
+ case DRVM_DISABLE:
+ /* FIXME: Pretend this is supported */
+ return 0;
+ case WIDM_OPEN: return widOpen (wDevID, (LPWAVEOPENDESC)dwParam1, dwParam2);
+ case WIDM_CLOSE: return widClose (wDevID);
+ case WIDM_ADDBUFFER: return widAddBuffer (wDevID, (LPWAVEHDR)dwParam1, dwParam2);
+ case WIDM_PREPARE: return MMSYSERR_NOTSUPPORTED;
+ case WIDM_UNPREPARE: return MMSYSERR_NOTSUPPORTED;
+ case WIDM_GETDEVCAPS: return widGetDevCaps (wDevID, (LPWAVEINCAPSW)dwParam1, dwParam2);
+ case WIDM_GETNUMDEVS: return widGetNumDevs ();
+ case WIDM_RESET: return widReset (wDevID);
+ case WIDM_START: return widStart (wDevID);
+ case WIDM_STOP: return widStop (wDevID);
+ case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize (wDevID, (LPDWORD)dwParam1);
+ case DRV_QUERYDEVICEINTERFACE: return widDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2);
+ default:
+ FIXME("unknown message %d!\n", wMsg);
+ }
+
+ return MMSYSERR_NOTSUPPORTED;
+}
+
#else
/**************************************************************************
+ * widMessage (WINECOREAUDIO.6)
+ */
+DWORD WINAPI CoreAudio_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
+ DWORD dwParam1, DWORD dwParam2)
+{
+ FIXME("(%u, %04X, %08lX, %08lX, %08lX): CoreAudio support not compiled into wine\n", wDevID, wMsg, dwUser, dwParam1, dwParam2);
+ return MMSYSERR_NOTENABLED;
+}
+
+/**************************************************************************
* wodMessage (WINECOREAUDIO.7)
*/
DWORD WINAPI CoreAudio_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
diff --git a/dlls/winmm/winecoreaudio/winecoreaudio.drv.spec b/dlls/winmm/winecoreaudio/winecoreaudio.drv.spec
index 4445838..49fbfb2 100644
--- a/dlls/winmm/winecoreaudio/winecoreaudio.drv.spec
+++ b/dlls/winmm/winecoreaudio/winecoreaudio.drv.spec
@@ -1,2 +1,3 @@
@ stdcall -private DriverProc(long long long long long) CoreAudio_DriverProc
+@ stdcall -private widMessage(long long long long long) CoreAudio_widMessage
@ stdcall -private wodMessage(long long long long long) CoreAudio_wodMessage
More information about the wine-patches
mailing list