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
return DS_OK;
}
- else if (dwFlags & DSBLOCK_FROMWRITECURSOR)
+ else if (dwFlags == DSBLOCK_FROMWRITECURSOR)
{
UNIMPLEMENTED
return DSERR_UNSUPPORTED;
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;
return DSERR_INVALIDPARAM;
}
- DPRINT("SecondaryDirectSoundBuffer8Impl_fnPlay dwPriority %x dwFlags %x\n", dwPriority, dwFlags);
- hResult = PrimaryDirectSoundBuffer_SetFormat(This->PrimaryBuffer, This->Format, (dwFlags & DSBPLAY_LOOPING));
+ /* sanity check */
+ ASSERT(dwFlags & DSBPLAY_LOOPING);
+
+ /* set dataformat */
+ hResult = PrimaryDirectSoundBuffer_SetFormat(This->PrimaryBuffer, This->Format, TRUE);
- DPRINT("Result %x\n", hResult);
if (!SUCCEEDED(hResult))
{
/* failed */
+ DPRINT1("Failed to set format Tag %u Samples %u Bytes %u nChannels %u\n", This->Format->wFormatTag, This->Format->nSamplesPerSec, This->Format->wBitsPerSample, This->Format->nChannels);
return hResult;
}
+ /* start primary buffer */
PrimaryDirectSoundBuffer_SetState(This->PrimaryBuffer, KSSTATE_RUN);
-
-
+ /* acquire primary buffer */
PrimaryDirectSoundBuffer_AcquireLock(This->PrimaryBuffer);
-
+ /* HACK write buffer */
PrimaryDirectSoundBuffer_Write(This->PrimaryBuffer, This->Buffer, This->BufferSize);
-
+ /* release primary buffer */
PrimaryDirectSoundBuffer_ReleaseLock(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;