LPFILTERINFO Filter;
DWORD dwLevel;
+ DWORD dwFlags;
LPWAVEFORMATEX Format;
PUCHAR Buffer;
DWORD BufferSize;
LPDIRECTSOUNDBUFFER8 iface,
LPDSBCAPS pDSBufferCaps)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (!pDSBufferCaps)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ if (pDSBufferCaps->dwSize < sizeof(DSBCAPS))
+ {
+ /* invalid buffer size */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get buffer details */
+ pDSBufferCaps->dwUnlockTransferRate = 0;
+ pDSBufferCaps->dwPlayCpuOverhead = 0;
+ pDSBufferCaps->dwSize = This->BufferSize;
+ pDSBufferCaps->dwFlags = This->dwFlags;
+
+ return DS_OK;
}
HRESULT
else
{
ASSERT(dwOffset < This->BufferSize);
- ASSERT(dwBytes < This->BufferSize);
- ASSERT(dwBytes + dwOffset <= This->BufferSize);
+ ASSERT(dwBytes <= This->BufferSize);
+
+ dwBytes = min(This->BufferSize - dwOffset, dwBytes);
*ppvAudioPtr1 = This->Buffer + dwOffset;
*pdwAudioBytes1 = dwBytes;
/* release primary buffer */
PrimaryDirectSoundBuffer_ReleaseLock(This->PrimaryBuffer);
- DPRINT1("SetFormatSuccess PrimaryBuffer %p\n", This->PrimaryBuffer);
+ DPRINT("SetFormatSuccess PrimaryBuffer %p\n", This->PrimaryBuffer);
return DS_OK;
}
This->lpVtbl = &vt_DirectSoundBuffer8;
This->Filter = Filter;
This->dwLevel = dwLevel;
+ This->dwFlags = lpcDSBufferDesc->dwFlags;
This->State = KSSTATE_STOP;
This->Flags = 0;
This->Position = 0;