36 const IDirectSoundNotifyVtbl *
lpVtbl;
53 WARN(
"invalid parameter\n");
75 if (
This->dscb->hwnotify)
94 WARN(
"invalid parameter: notify == NULL\n");
100 for (
i=0;
i<howmuch;
i++)
101 TRACE(
"notify at %d to %p\n",
105 if (
This->dscb->hwnotify) {
109 WARN(
"IDsDriverNotify_SetNotificationPositions failed\n");
111 }
else if (howmuch > 0) {
114 if (
This->dscb->notifies)
122 WARN(
"out of memory\n");
126 This->dscb->nrofnotifies = howmuch;
130 This->dscb->nrofnotifies = 0;
136 static const IDirectSoundNotifyVtbl
dscnvt =
149 TRACE(
"(%p,%p)\n",dscb,pdscn);
154 WARN(
"out of memory\n");
191 WARN(
"invalid parameter\n");
202 if (
This->device->hwbuf && !
This->hwnotify) {
204 &IID_IDsDriverNotify, (
LPVOID*)&(
This->hwnotify));
206 WARN(
"IDsCaptureDriverBuffer_QueryInterface failed\n");
213 *ppobj =
This->notify;
217 WARN(
"IID_IDirectSoundNotify\n");
249 TRACE(
"deleting object\n");
255 if (
This->device->hwi) {
259 This->device->pwave = 0;
260 This->device->hwi = 0;
263 if (
This->device->hwbuf)
267 This->device->capture_buffer =
NULL;
293 if (lpDSCBCaps ==
NULL) {
294 WARN(
"invalid parameter: lpDSCBCaps == NULL\n");
299 WARN(
"invalid parameter: lpDSCBCaps->dwSize = %d\n", lpDSCBCaps->
dwSize);
304 WARN(
"invalid parameter: This->device == NULL\n");
313 TRACE(
"returning DS_OK\n");
325 TRACE(
"(%p,%p,%p)\n",
This, lpdwCapturePosition, lpdwReadPosition );
328 WARN(
"invalid parameter: This->device == NULL\n");
332 if (
This->device->driver) {
335 WARN(
"IDsCaptureDriverBuffer_GetPosition failed\n");
336 }
else if (
This->device->hwi) {
341 if (lpdwCapturePosition)
342 *lpdwCapturePosition = (
This->device->pwave[
This->device->index].dwBufferLength +
pos) %
This->device->buflen;
343 if (lpdwReadPosition)
344 *lpdwReadPosition =
pos;
352 TRACE(
"cappos=%d readpos=%d\n", (lpdwCapturePosition?*lpdwCapturePosition:-1), (lpdwReadPosition?*lpdwReadPosition:-1));
361 DWORD dwSizeAllocated,
366 TRACE(
"(%p,%p,0x%08x,%p)\n",
This, lpwfxFormat, dwSizeAllocated,
370 WARN(
"invalid parameter: This->device == NULL\n");
380 *lpdwSizeWritten = dwSizeAllocated;
385 TRACE(
"invalid parameter: lpdwSizeWritten = NULL\n");
403 WARN(
"invalid parameter: This->device == NULL\n");
407 if (lpdwStatus ==
NULL) {
408 WARN(
"invalid parameter: lpdwStatus == NULL\n");
415 TRACE(
"old This->device->state=%s, old lpdwStatus=%08x\n",
423 TRACE(
"new This->device->state=%s, new lpdwStatus=%08x\n",
427 TRACE(
"status=%x\n", *lpdwStatus);
428 TRACE(
"returning DS_OK\n");
440 FIXME(
"(%p,%p,%p): stub\n",
This, lpDSC, lpcDSCBDesc );
458 TRACE(
"(%p,%08u,%08u,%p,%p,%p,%p,0x%08x) at %d\n",
This, dwReadCusor,
459 dwReadBytes, lplpvAudioPtr1, lpdwAudioBytes1, lplpvAudioPtr2,
463 WARN(
"invalid parameter: This->device == NULL\n");
467 if (lplpvAudioPtr1 ==
NULL) {
468 WARN(
"invalid parameter: lplpvAudioPtr1 == NULL\n");
472 if (lpdwAudioBytes1 ==
NULL) {
473 WARN(
"invalid parameter: lpdwAudioBytes1 == NULL\n");
479 if (
This->device->driver) {
481 lpdwAudioBytes1, lplpvAudioPtr2,
482 lpdwAudioBytes2, dwReadCusor,
485 WARN(
"IDsCaptureDriverBuffer_Lock failed\n");
486 }
else if (
This->device->hwi) {
487 *lplpvAudioPtr1 =
This->device->buffer + dwReadCusor;
488 if ( (dwReadCusor + dwReadBytes) >
This->device->buflen) {
489 *lpdwAudioBytes1 =
This->device->buflen - dwReadCusor;
491 *lplpvAudioPtr2 =
This->device->buffer;
493 *lpdwAudioBytes2 = dwReadBytes - *lpdwAudioBytes1;
495 *lpdwAudioBytes1 = dwReadBytes;
499 *lpdwAudioBytes2 = 0;
502 TRACE(
"invalid call\n");
522 WARN(
"invalid parameter: This->device == NULL\n");
526 if ( (
This->device->driver == 0) && (
This->device->hwi == 0) ) {
543 if (
This->device->driver) {
546 WARN(
"IDsCaptureDriverBuffer_Start failed\n");
547 }
else if (
This->device->hwi) {
562 for (
c = 0;
c <
device->nrofpwaves; ++
c) {
567 device->pwave[
c].dwBufferLength = blocksize;
568 device->pwave[
c].dwBytesRecorded = 0;
574 WARN(
"waveInPrepareHeader failed\n");
582 WARN(
"waveInAddBuffer failed\n");
598 WARN(
"waveInStart failed\n");
602 WARN(
"calling waveInClose because of error\n");
623 WARN(
"invalid parameter: This->device == NULL\n");
638 if (
This->device->driver) {
641 WARN(
"IDsCaptureDriverBuffer_Stop() failed\n");
642 }
else if (
This->device->hwi) {
645 WARN(
"waveInReset() failed\n");
661 DWORD dwAudioBytes2 )
665 TRACE(
"(%p,%p,%08u,%p,%08u)\n",
This, lpvAudioPtr1, dwAudioBytes1,
666 lpvAudioPtr2, dwAudioBytes2 );
668 if (lpvAudioPtr1 ==
NULL) {
669 WARN(
"invalid parameter: lpvAudioPtr1 == NULL\n");
673 if (
This->device->driver) {
675 dwAudioBytes1, lpvAudioPtr2, dwAudioBytes2);
677 WARN(
"IDsCaptureDriverBuffer_Unlock failed\n");
678 }
else if (!
This->device->hwi) {
679 WARN(
"invalid call\n");
711 FIXME(
"(%p,%u,%p): stub\n",
This, dwFXCount, pdwFXStatus );
716 static const IDirectSoundCaptureBuffer8Vtbl
dscbvt =
742 for (
i = 0;
i <
This->nrofnotifies; ++
i) {
750 TRACE(
"signalled event %p (%d)\n",
event->hEventNotify,
i);
758 TRACE(
"signalled event %p (%d)\n",
event->hEventNotify,
i);
770 TRACE(
"(%p,%08x(%s),%08lx,%08lx,%08lx) entering at %d\n",hwi,
msg,
776 TRACE(
"DirectSoundCapture msg=MM_WIM_DATA, old This->state=%s, old This->index=%d\n",
785 TRACE(
"end of buffer\n");
799 TRACE(
"DirectSoundCapture new This->state=%s, new This->index=%d\n",
804 TRACE(
"completed\n");
813 TRACE(
"(%p,%p,%p)\n",
device, ppobj, lpcDSCBufferDesc);
816 WARN(
"invalid parameter: ppobj == NULL\n");
821 WARN(
"not initialized\n");
826 if (lpcDSCBufferDesc ==
NULL) {
827 WARN(
"invalid parameter: lpcDSCBufferDesc == NULL\n");
836 WARN(
"invalid lpcDSCBufferDesc\n");
843 TRACE(
"(formattag=0x%04x,chans=%d,samplerate=%d," 844 "bytespersec=%d,blockalign=%d,bitspersamp=%d,cbSize=%d)\n",
864 if ( *ppobj ==
NULL ) {
865 WARN(
"out of memory\n");
876 This->device->capture_buffer =
This;
878 This->nrofnotifies = 0;
882 lpcDSCBufferDesc->
dwSize);
887 This->device->capture_buffer = 0;
897 FIXME(
"DSDDESC_DOMMSYSTEMOPEN not supported\n");
902 TRACE(
"desired buflen=%d, old buffer=%p\n", buflen,
device->buffer);
908 if (newbuf ==
NULL) {
909 WARN(
"failed to allocate capture buffer\n");
927 WARN(
"IDsCaptureDriver_CreateCaptureBuffer failed\n");
928 This->device->capture_buffer = 0;
939 WARN(
"waveInOpen failed\n");
940 This->device->capture_buffer = 0;
947 TRACE(
"desired buflen=%d, old buffer=%p\n", buflen,
device->buffer);
952 if (newbuf ==
NULL) {
953 WARN(
"failed to allocate capture buffer\n");
963 TRACE(
"returning DS_OK\n");
977 TRACE(
"(%p)\n", ppDevice);
983 WARN(
"out of memory\n");
991 device->lock.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": DirectSoundCaptureDevice.lock");
1005 TRACE(
"deleting object\n");
1006 if (
device->capture_buffer)
1016 device->lock.DebugInfo->Spare[0] = 0;
1038 lpcGUID = &DSDEVID_DefaultCapture;
1041 WARN(
"invalid parameter: lpcGUID\n");
1047 WARN(
"no audio devices found\n");
1052 for (wid=0; wid<widn; wid++) {
1059 if (found ==
FALSE) {
1060 WARN(
"No device found matching given ID!\n");
1065 WARN(
"already in use\n");
1071 WARN(
"DirectSoundCaptureDevice_Create failed\n");
1084 WARN(
"waveInMessage failed; err=%x\n",
err);
1092 TRACE(
"using DirectSound driver\n");
1095 WARN(
"IDsCaptureDriver_GetDriverDesc failed\n");
1099 TRACE(
"using WINMM\n");
1105 device->drvdesc.dnDevNode = wid;
1119 WARN(
"IDsCaptureDriver_GetCaps failed\n");
1127 device->drvcaps.dwFlags = 0;
1129 sizeof(
device->drvdesc.szDrvname));
1166 if (ppobj ==
NULL) {
1167 WARN(
"invalid parameter\n");
1222 TRACE(
"(%p,%p,%p,%p)\n",iface,lpcDSCBufferDesc,lplpDSCaptureBuffer,
pUnk);
1224 if (lpcDSCBufferDesc ==
NULL) {
1225 WARN(
"invalid parameter: lpcDSCBufferDesc == NULL)\n");
1229 if (lplpDSCaptureBuffer ==
NULL) {
1230 WARN(
"invalid parameter: lplpDSCaptureBuffer == NULL\n");
1235 WARN(
"invalid parameter: pUnk != NULL\n");
1240 if (
This->device->capture_buffer) {
1241 WARN(
"invalid parameter: already has buffer\n");
1249 WARN(
"IDirectSoundCaptureBufferImpl_Create failed\n");
1262 WARN(
"not initialized\n");
1266 if (lpDSCCaps==
NULL) {
1267 WARN(
"invalid parameter: lpDSCCaps== NULL\n");
1271 if (lpDSCCaps->
dwSize <
sizeof(*lpDSCCaps)) {
1272 WARN(
"invalid parameter: lpDSCCaps->dwSize = %d\n", lpDSCCaps->
dwSize);
1276 lpDSCCaps->
dwFlags =
This->device->drvcaps.dwFlags;
1280 TRACE(
"(flags=0x%08x,format=0x%08x,channels=%d)\n",lpDSCCaps->
dwFlags,
1294 WARN(
"already initialized\n");
1300 static const IDirectSoundCaptureVtbl
dscvt =
1317 TRACE(
"(%p)\n", ppDSC);
1322 WARN(
"out of memory\n");
1358 WARN(
"IDirectSoundCaptureImpl_Create failed\n");
1387 WARN(
"IDirectSoundCaptureImpl_Create failed\n");
1425 if (ppDSC ==
NULL) {
1426 WARN(
"invalid parameter: ppDSC == NULL\n");
1431 WARN(
"invalid parameter: pUnkOuter != NULL\n");
1481 if (ppDSC8 ==
NULL) {
1482 WARN(
"invalid parameter: ppDSC8 == NULL\n");
1487 WARN(
"invalid parameter: pUnkOuter != NULL\n");
void setup_dsound_options(void)
#define IDirectSoundCaptureBuffer_AddRef(p)
LPWAVEFORMATEX lpwfxFormat
UINT WINAPI waveInClose(HWAVEIN hWaveIn)
IDirectSoundCaptureNotifyImpl * notify
HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest)
#define DSERR_INVALIDCALL
static HRESULT WINAPI IDirectSoundCaptureNotifyImpl_SetNotificationPositions(LPDIRECTSOUNDNOTIFY iface, DWORD howmuch, LPCDSBPOSITIONNOTIFY notify)
#define IDsCaptureDriverBuffer_GetPosition(p, a, b)
MMRESULT WINAPI waveInOpen(HWAVEIN *lphWaveIn, UINT uDeviceID, LPCWAVEFORMATEX lpFormat, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags)
CHAR szPname[MAXPNAMELEN]
#define IDirectSoundCapture_Release(p)
#define DSERR_UNINITIALIZED
#define IDsCaptureDriver_Open(p)
static ULONG WINAPI IDirectSoundCaptureBufferImpl_AddRef(LPDIRECTSOUNDCAPTUREBUFFER8 iface)
#define DSERR_ALREADYINITIALIZED
#define IDirectSoundCaptureBuffer_Release(p)
#define IDsCaptureDriver_Release(p)
DWORD WINAPI GetTickCount(VOID)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
const IDirectSoundNotifyVtbl * lpVtbl
static ULONG WINAPI IDirectSoundCaptureBufferImpl_Release(LPDIRECTSOUNDCAPTUREBUFFER8 iface)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_Start(LPDIRECTSOUNDCAPTUREBUFFER8 iface, DWORD dwFlags)
struct tWAVEFORMATEX WAVEFORMATEX
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_Stop(LPDIRECTSOUNDCAPTUREBUFFER8 iface)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define IDsCaptureDriverBuffer_Stop(p)
UINT WINAPI waveInPrepareHeader(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
HRESULT DSOUND_CaptureCreate8(REFIID riid, LPDIRECTSOUNDCAPTURE8 *ppDSC8)
_In_ DWORD _In_ DWORD dwOffset
#define DSDDESC_DOMMSYSTEMSETFORMAT
#define DSDDESC_DOMMSYSTEMOPEN
#define IDsCaptureDriverBuffer_Release(p)
static void CALLBACK DSOUND_capture_callback(HWAVEIN hwi, UINT msg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
#define DSERR_OUTOFMEMORY
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetStatus(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPDWORD lpdwStatus)
#define DSERR_INVALIDPARAM
#define IDirectSoundCaptureBuffer8_AddRef(p)
GUID DSOUND_capture_guids[MAXWAVEDRIVERS]
struct IDirectSoundCapture * LPDIRECTSOUNDCAPTURE8
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetFormat(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPWAVEFORMATEX lpwfxFormat, DWORD dwSizeAllocated, LPDWORD lpdwSizeWritten)
VOID CALLBACK_FUNCTION(__in PVOID CallbackContext, __in_opt PVOID Argument1, __in_opt PVOID Argument2)
UINT WINAPI waveInUnprepareHeader(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_QueryInterface(LPDIRECTSOUNDCAPTUREBUFFER8 iface, REFIID riid, LPVOID *ppobj)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetFXStatus(LPDIRECTSOUNDCAPTUREBUFFER8 iface, DWORD dwFXCount, LPDWORD pdwFXStatus)
static ULONG WINAPI IDirectSoundCaptureImpl_Release(LPDIRECTSOUNDCAPTURE iface)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_Initialize(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPDIRECTSOUNDCAPTURE lpDSC, LPCDSCBUFFERDESC lpcDSCBDesc)
#define DS_HW_ACCEL_EMULATION
HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID lpcGUID, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_Lock(LPDIRECTSOUNDCAPTUREBUFFER8 iface, DWORD dwReadCusor, DWORD dwReadBytes, LPVOID *lplpvAudioPtr1, LPDWORD lpdwAudioBytes1, LPVOID *lplpvAudioPtr2, LPDWORD lpdwAudioBytes2, DWORD dwFlags)
DWORD WINAPI GetCurrentThreadId(VOID)
IDirectSoundCaptureBufferImpl * dscb
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_Unlock(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPVOID lpvAudioPtr1, DWORD dwAudioBytes1, LPVOID lpvAudioPtr2, DWORD dwAudioBytes2)
static HRESULT IDirectSoundCaptureBufferImpl_Create(DirectSoundCaptureDevice *device, IDirectSoundCaptureBufferImpl **ppobj, LPCDSCBUFFERDESC lpcDSCBufferDesc)
static ULONG WINAPI IDirectSoundCaptureImpl_AddRef(LPDIRECTSOUNDCAPTURE iface)
#define IDirectSoundNotify_AddRef(p)
HRESULT DSOUND_CaptureCreate(REFIID riid, LPDIRECTSOUNDCAPTURE *ppDSC)
static HRESULT WINAPI IDirectSoundCaptureImpl_Initialize(LPDIRECTSOUNDCAPTURE iface, LPCGUID lpcGUID)
static ULONG WINAPI IDirectSoundCaptureNotifyImpl_Release(LPDIRECTSOUNDNOTIFY iface)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
const IDirectSoundCaptureVtbl * lpVtbl
#define IDsCaptureDriver_CreateCaptureBuffer(p, a, b, c, d, e, f)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define DSCBSTATUS_CAPTURING
#define UlongToHandle(ul)
#define IDsCaptureDriver_GetCaps(p, a)
static void capture_CheckNotify(IDirectSoundCaptureBufferImpl *This, DWORD from, DWORD len)
#define IDsDriverNotify_Release(p)
#define IDirectSoundCapture_Initialize(p, a)
LPWAVEFORMATEX DSOUND_CopyFormat(LPCWAVEFORMATEX wfex) DECLSPEC_HIDDEN
#define IDsCaptureDriver_Close(p)
#define IDsCaptureDriverBuffer_QueryInterface(p, a, b)
#define IID_IDirectSoundCapture8
#define FillMemory(BUF, SIZ, MASK)
static HRESULT IDirectSoundCaptureNotifyImpl_Create(IDirectSoundCaptureBufferImpl *dscb, IDirectSoundCaptureNotifyImpl **pdscn)
static HRESULT WINAPI IDirectSoundCaptureImpl_GetCaps(LPDIRECTSOUNDCAPTURE iface, LPDSCCAPS lpDSCCaps)
#define DSERR_UNSUPPORTED
static HRESULT DirectSoundCaptureDevice_Create(DirectSoundCaptureDevice **ppDevice)
static ULONG DirectSoundCaptureDevice_Release(DirectSoundCaptureDevice *device)
static const IDirectSoundCaptureBuffer8Vtbl dscbvt
static LPDIRECTSOUNDCAPTURE LPUNKNOWN
#define DSCBSTART_LOOPING
#define InterlockedDecrement
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
UINT WINAPI waveInAddBuffer(HWAVEIN hWaveIn, WAVEHDR *lpWaveInHdr, UINT uSize)
struct _DSCBCAPS DSCBCAPS
#define IDsCaptureDriverBuffer_Start(p, a)
static HRESULT WINAPI IDirectSoundCaptureImpl_CreateCaptureBuffer(LPDIRECTSOUNDCAPTURE iface, LPCDSCBUFFERDESC lpcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *lplpDSCaptureBuffer, LPUNKNOWN pUnk)
struct IDirectSoundCapture * LPDIRECTSOUNDCAPTURE
#define IDsCaptureDriver_GetDriverDesc(p, a)
UINT WINAPI waveInStart(HWAVEIN hWaveIn)
struct IDirectSoundNotify * LPDIRECTSOUNDNOTIFY
UINT WINAPI waveInReset(HWAVEIN hWaveIn)
static const IDirectSoundCaptureVtbl dscvt
static HRESULT WINAPI IDirectSoundCaptureNotifyImpl_QueryInterface(LPDIRECTSOUNDNOTIFY iface, REFIID riid, LPVOID *ppobj)
DWORD DSOUND_fraglen(DWORD nSamplesPerSec, DWORD nBlockAlign) DECLSPEC_HIDDEN
#define InterlockedIncrement
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetCaps(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPDSCBCAPS lpDSCBCaps)
static HRESULT DirectSoundCaptureDevice_Initialize(DirectSoundCaptureDevice **ppDevice, LPCGUID lpcGUID)
struct IDirectSoundCaptureBuffer * LPDIRECTSOUNDCAPTUREBUFFER
#define DSERR_NOAGGREGATION
HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpcGUID, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter)
#define DSCCAPS_EMULDRIVER
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static const char *const captureStateString[]
#define IDirectSoundCapture_AddRef(p)
UINT WINAPI waveInGetDevCapsA(UINT_PTR uDeviceID, LPWAVEINCAPSA lpCaps, UINT uSize)
static ULONG WINAPI IDirectSoundCaptureNotifyImpl_AddRef(LPDIRECTSOUNDNOTIFY iface)
#define IDirectSoundNotify_Release(p)
UINT WINAPI waveInGetNumDevs(void)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetCurrentPosition(LPDIRECTSOUNDCAPTUREBUFFER8 iface, LPDWORD lpdwCapturePosition, LPDWORD lpdwReadPosition)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
struct IDirectSoundCaptureBuffer8 * LPDIRECTSOUNDCAPTUREBUFFER8
static HRESULT WINAPI IDirectSoundCaptureImpl_QueryInterface(LPDIRECTSOUNDCAPTURE iface, REFIID riid, LPVOID *ppobj)
#define IDsCaptureDriverBuffer_Lock(p, a, b, c, d, e, f, g)
DirectSoundCaptureDevice * device
#define IDirectSoundCaptureBuffer_QueryInterface(p, a, b)
#define DSCBSTATUS_LOOPING
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
#define HeapFree(x, y, z)
static HRESULT WINAPI IDirectSoundCaptureBufferImpl_GetObjectInPath(LPDIRECTSOUNDCAPTUREBUFFER8 iface, REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject)
#define IsEqualIID(riid1, riid2)
static const IDirectSoundNotifyVtbl dscnvt
#define IDsDriverNotify_SetNotificationPositions(p, a, b)
DirectSoundCaptureDevice * DSOUND_capture[MAXWAVEDRIVERS]
static HRESULT IDirectSoundCaptureImpl_Create(LPDIRECTSOUNDCAPTURE8 *ppDSC)
#define DSDDESC_USESYSTEMMEMORY
#define IDsCaptureDriverBuffer_Unlock(p, a, b, c, d)