Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / dll / directx / dsound_new / primary.c
diff --git a/reactos/dll/directx/dsound_new/primary.c b/reactos/dll/directx/dsound_new/primary.c
deleted file mode 100644 (file)
index 31b1fe4..0000000
+++ /dev/null
@@ -1,806 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS Configuration of network devices
- * FILE:            dll/directx/dsound_new/primary.c
- * PURPOSE:         Primary IDirectSoundBuffer8 implementation
- *
- * PROGRAMMERS:     Johannes Anderwald (johannes.anderwald@reactos.org)
- */
-
-
-#include "precomp.h"
-
-typedef struct
-{
-    const IDirectSoundBuffer8Vtbl *lpVtbl;
-    LONG ref;
-
-    LPFILTERINFO Filter;
-    DWORD dwLevel;
-    DWORD dwFlags;
-    DWORD dwFrequency;
-    LONG Volume;
-    LONG VolumePan;
-    WAVEFORMATEX Format;
-    HANDLE hPin;
-    CRITICAL_SECTION Lock;
-    KSSTATE State;
-}CDirectSoundBuffer, *LPCDirectSoundBuffer;
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnQueryInterface(
-    LPDIRECTSOUNDBUFFER8 iface,
-    IN REFIID riid,
-    LPVOID* ppobj)
-{
-    LPOLESTR pStr;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (IsEqualIID(riid, &IID_IUnknown) ||
-        IsEqualIID(riid, &IID_IDirectSoundBuffer) ||
-        IsEqualIID(riid, &IID_IDirectSoundBuffer8))
-    {
-        *ppobj = (LPVOID)&This->lpVtbl;
-        InterlockedIncrement(&This->ref);
-        return S_OK;
-    }
-
-    if (SUCCEEDED(StringFromIID(riid, &pStr)))
-    {
-        DPRINT("No Interface for class %s\n", pStr);
-        CoTaskMemFree(pStr);
-    }
-    return E_NOINTERFACE;
-}
-
-ULONG
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnAddRef(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    ULONG ref;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    ref = InterlockedIncrement(&This->ref);
-
-    return ref;
-
-}
-
-ULONG
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnRelease(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    ULONG ref;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    ref = InterlockedDecrement(&(This->ref));
-
-    if (!ref)
-    {
-        if (This->hPin)
-        {
-            /* close pin handle */
-            CloseHandle(This->hPin);
-        }
-        /* free primary buffer */
-        HeapFree(GetProcessHeap(), 0, This);
-    }
-
-    return ref;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetCaps(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDSBCAPS pDSBufferCaps)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetCaps\n");
-
-    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 = 0; //FIXME
-    pDSBufferCaps->dwFlags = This->dwFlags;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetCurrentPosition(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDWORD pdwCurrentPlayCursor,
-    LPDWORD pdwCurrentWriteCursor)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetCurrentPosition\n");
-
-    if (This->dwLevel < DSSCL_PRIORITY)
-    {
-        /* needs priority level */
-        return DSERR_PRIOLEVELNEEDED;
-    }
-
-    if (!pdwCurrentPlayCursor && !pdwCurrentWriteCursor)
-    {
-        /* all parameters are null */
-        return DSERR_INVALIDPARAM;
-    }
-
-    UNIMPLEMENTED;
-    return DSERR_INVALIDPARAM;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetFormat(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPWAVEFORMATEX pwfxFormat, 
-    DWORD dwSizeAllocated, 
-    LPDWORD pdwSizeWritten)
-{
-    DWORD FormatSize;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetFormat\n");
-
-    FormatSize = sizeof(WAVEFORMATEX) + This->Format.cbSize;
-
-    if (!pwfxFormat && !pdwSizeWritten)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    if (!pwfxFormat)
-    {
-        /* return required format size */
-        *pdwSizeWritten = FormatSize;
-        return DS_OK;
-    }
-    else
-    {
-        if (dwSizeAllocated >= FormatSize)
-        {
-            /* copy format */
-            CopyMemory(pwfxFormat, &This->Format, FormatSize);
-
-            if (pdwSizeWritten)
-                *pdwSizeWritten = FormatSize;
-
-            return DS_OK;
-        }
-        /* buffer too small */
-        if (pdwSizeWritten)
-            *pdwSizeWritten = 0;
-
-        return DSERR_INVALIDPARAM;
-    }
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetVolume(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPLONG plVolume)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetVolume\n");
-
-    if (!plVolume)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    /* get volume */
-    *plVolume = This->Volume;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetPan(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPLONG plPan)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetPan\n");
-
-    if (!plPan)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    /* get frequency */
-    *plPan = This->VolumePan;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetFrequency(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDWORD pdwFrequency)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetFrequency\n");
-
-    if (!pdwFrequency)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    /* get frequency */
-    *pdwFrequency = This->dwFrequency;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetStatus(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDWORD pdwStatus)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetStatus\n");
-
-    if (!pdwStatus)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    *pdwStatus = 0;
-    if (This->State == KSSTATE_RUN || This->State == KSSTATE_ACQUIRE)
-    {
-        /* buffer is playing */
-        *pdwStatus |= DSBSTATUS_PLAYING | DSBSTATUS_LOOPING;
-    }
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnInitialize(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDIRECTSOUND pDirectSound,
-    LPCDSBUFFERDESC pcDSBufferDesc)
-{
-    /* RTFM */
-    return DSERR_ALREADYINITIALIZED;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnLock(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwOffset,
-    DWORD dwBytes,
-    LPVOID *ppvAudioPtr1,
-    LPDWORD pdwAudioBytes1,
-    LPVOID *ppvAudioPtr2, 
-    LPDWORD pdwAudioBytes2,
-    DWORD dwFlags)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnPlay(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwReserved1,
-    DWORD dwPriority,
-    DWORD dwFlags)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnPlay dwFlags %x\n", dwFlags);
-
-    if (dwReserved1 != 0 || !(dwFlags & DSBPLAY_LOOPING))
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    PrimaryDirectSoundBuffer_AcquireLock(iface);
-
-    if (This->State == KSSTATE_STOP)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_ACQUIRE);
-        ASSERT(This->State == KSSTATE_ACQUIRE);
-    }
-
-    if (This->State == KSSTATE_ACQUIRE)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_PAUSE);
-        ASSERT(This->State == KSSTATE_PAUSE);
-    }
-
-    if (This->State == KSSTATE_PAUSE)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_RUN);
-        ASSERT(This->State == KSSTATE_RUN);
-    }
-
-    PrimaryDirectSoundBuffer_ReleaseLock(iface);
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetCurrentPosition(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwNewPosition)
-{
-    /* The position of a primary buffer can't be set */
-    return DSERR_INVALIDCALL;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetFormat(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPCWAVEFORMATEX pcfxFormat)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (This->dwLevel == DSSCL_NORMAL)
-    {
-        /* can't change format with this level */
-        return DSERR_PRIOLEVELNEEDED;
-    }
-
-    ASSERT(pcfxFormat->cbSize == 0);
-
-
-    DPRINT("This %p Format: Tag %x nChannels %u nSamplesPerSec %u nAvgBytesPerSec %u nBlockAlign %u wBitsPerSample %u cbSize %u\n", This, 
-          pcfxFormat->wFormatTag, pcfxFormat->nChannels, pcfxFormat->nSamplesPerSec, pcfxFormat->nAvgBytesPerSec, pcfxFormat->nBlockAlign, pcfxFormat->wBitsPerSample, pcfxFormat->cbSize);
-
-    CopyMemory(&This->Format, pcfxFormat, sizeof(WAVEFORMATEX));
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetVolume(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LONG lVolume)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (lVolume < DSBVOLUME_MIN || lVolume > DSBVOLUME_MAX)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    /* TODO: call volume node */
-
-    /* Store volume */
-    This->Volume = lVolume;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetPan(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LONG lPan)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (lPan < DSBPAN_LEFT || lPan > DSBPAN_RIGHT)
-    {
-        /* invalid parameter */
-        return DSERR_INVALIDPARAM;
-    }
-
-    /* TODO: call volume node */
-
-    /* Store volume pan */
-    This->VolumePan = lPan;
-
-    return DS_OK;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetFrequency(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwFrequency)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (This->dwLevel < DSSCL_PRIORITY)
-    {
-        /* needs priority level */
-        return DSERR_PRIOLEVELNEEDED;
-    }
-
-    /* invalid request */
-    return DSERR_CONTROLUNAVAIL;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnStop(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnStop\n");
-
-    PrimaryDirectSoundBuffer_AcquireLock(iface);
-
-    if (This->State == KSSTATE_RUN)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_PAUSE);
-        ASSERT(This->State == KSSTATE_PAUSE);
-    }
-
-    if (This->State == KSSTATE_PAUSE)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_ACQUIRE);
-        ASSERT(This->State == KSSTATE_ACQUIRE);
-    }
-
-    if (This->State == KSSTATE_ACQUIRE)
-    {
-        PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_STOP);
-        ASSERT(This->State == KSSTATE_STOP);
-    }
-
-    PrimaryDirectSoundBuffer_ReleaseLock(iface);
-
-    return DS_OK;
-}
-
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnUnlock(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPVOID pvAudioPtr1,
-    DWORD dwAudioBytes1,
-    LPVOID pvAudioPtr2,
-    DWORD dwAudioBytes2)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnRestore(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnSetFX(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwEffectsCount, 
-    LPDSEFFECTDESC pDSFXDesc,
-    LPDWORD pdwResultCodes)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnAcquireResources(
-    LPDIRECTSOUNDBUFFER8 iface,
-    DWORD dwFlags,
-    DWORD dwEffectsCount, 
-    LPDWORD pdwResultCodes)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-HRESULT
-WINAPI
-PrimaryDirectSoundBuffer8Impl_fnGetObjectInPath(
-    LPDIRECTSOUNDBUFFER8 iface,
-    REFGUID rguidObject,
-    DWORD dwIndex,
-    REFGUID rguidInterface,
-    LPVOID *ppObject)
-{
-    UNIMPLEMENTED
-    return DSERR_INVALIDPARAM;
-}
-
-static IDirectSoundBuffer8Vtbl vt_DirectSoundBuffer8 =
-{
-    /* IUnknown methods */
-    PrimaryDirectSoundBuffer8Impl_fnQueryInterface,
-    PrimaryDirectSoundBuffer8Impl_fnAddRef,
-    PrimaryDirectSoundBuffer8Impl_fnRelease,
-    /* IDirectSoundBuffer methods */
-    PrimaryDirectSoundBuffer8Impl_fnGetCaps,
-    PrimaryDirectSoundBuffer8Impl_fnGetCurrentPosition,
-    PrimaryDirectSoundBuffer8Impl_fnGetFormat,
-    PrimaryDirectSoundBuffer8Impl_fnGetVolume,
-    PrimaryDirectSoundBuffer8Impl_fnGetPan,
-    PrimaryDirectSoundBuffer8Impl_fnGetFrequency,
-    PrimaryDirectSoundBuffer8Impl_fnGetStatus,
-    PrimaryDirectSoundBuffer8Impl_fnInitialize,
-    PrimaryDirectSoundBuffer8Impl_fnLock,
-    PrimaryDirectSoundBuffer8Impl_fnPlay,
-    PrimaryDirectSoundBuffer8Impl_fnSetCurrentPosition,
-    PrimaryDirectSoundBuffer8Impl_fnSetFormat,
-    PrimaryDirectSoundBuffer8Impl_fnSetVolume,
-    PrimaryDirectSoundBuffer8Impl_fnSetPan,
-    PrimaryDirectSoundBuffer8Impl_fnSetFrequency,
-    PrimaryDirectSoundBuffer8Impl_fnStop,
-    PrimaryDirectSoundBuffer8Impl_fnUnlock,
-    PrimaryDirectSoundBuffer8Impl_fnRestore,
-    /* IDirectSoundBuffer8 methods */
-    PrimaryDirectSoundBuffer8Impl_fnSetFX,
-    PrimaryDirectSoundBuffer8Impl_fnAcquireResources,
-    PrimaryDirectSoundBuffer8Impl_fnGetObjectInPath
-};
-
-DWORD
-PrimaryDirectSoundBuffer_Write(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPVOID Buffer,
-    DWORD  BufferSize)
-{
-    KSSTREAM_HEADER Header;
-    DWORD Result, BytesTransferred;
-    OVERLAPPED Overlapped;
-
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    ZeroMemory(&Overlapped, sizeof(OVERLAPPED));
-    Overlapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-
-
-    ASSERT(This->hPin);
-    ZeroMemory(&Header, sizeof(KSSTREAM_HEADER));
-
-    Header.FrameExtent = BufferSize;
-    Header.DataUsed = BufferSize;
-    Header.Data = Buffer;
-    Header.Size = sizeof(KSSTREAM_HEADER);
-    Header.PresentationTime.Numerator = 1;
-    Header.PresentationTime.Denominator = 1;
-
-    Result = DeviceIoControl(This->hPin, IOCTL_KS_WRITE_STREAM, NULL, 0, &Header, sizeof(KSSTREAM_HEADER), &BytesTransferred, &Overlapped);
-
-    if (Result != ERROR_SUCCESS)
-        return 0;
-
-    return BytesTransferred;
-}
-
-VOID
-PrimaryDirectSoundBuffer_SetState(
-    LPDIRECTSOUNDBUFFER8 iface,
-    KSSTATE State)
-{
-    KSPROPERTY Property;
-    DWORD Result, BytesTransferred;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (This->State == State)
-        return;
-
-    Property.Set = KSPROPSETID_Connection;
-    Property.Id = KSPROPERTY_CONNECTION_STATE;
-    Property.Flags = KSPROPERTY_TYPE_SET;
-
-    Result = SyncOverlappedDeviceIoControl(This->hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesTransferred);
-    if (Result == ERROR_SUCCESS)
-    {
-        This->State = State;
-    }
-}
-
-HRESULT
-PrimaryDirectSoundBuffer_GetPosition(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPDWORD pdwCurrentPlayCursor,
-    LPDWORD pdwCurrentWriteCursor)
-{
-    KSAUDIO_POSITION Position;
-    KSPROPERTY Request;
-    DWORD Result;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    //DPRINT("PrimaryDirectSoundBuffer_GetPosition\n");
-
-    if (!This->hPin)
-    {
-        if (pdwCurrentPlayCursor)
-            *pdwCurrentPlayCursor = 0;
-
-        if (pdwCurrentWriteCursor)
-            *pdwCurrentWriteCursor = 0;
-
-        DPRINT("No Audio Pin\n");
-        return DS_OK;
-    }
-
-    /* setup audio position property request */
-    Request.Id = KSPROPERTY_AUDIO_POSITION;
-    Request.Set = KSPROPSETID_Audio;
-    Request.Flags = KSPROPERTY_TYPE_GET;
-
-
-    Result = SyncOverlappedDeviceIoControl(This->hPin, IOCTL_KS_PROPERTY, (PVOID)&Request, sizeof(KSPROPERTY), (PVOID)&Position, sizeof(KSAUDIO_POSITION), NULL);
-
-    if (Result != ERROR_SUCCESS)
-    {
-        DPRINT("GetPosition failed with %x\n", Result);
-        return DSERR_UNSUPPORTED;
-    }
-
-    //DPRINT("Play %I64u Write %I64u \n", Position.PlayOffset, Position.WriteOffset);
-
-    if (pdwCurrentPlayCursor)
-        *pdwCurrentPlayCursor = (DWORD)Position.PlayOffset;
-
-    if (pdwCurrentWriteCursor)
-        *pdwCurrentWriteCursor = (DWORD)Position.WriteOffset;
-
-    return DS_OK;
-}
-
-HRESULT
-PrimaryDirectSoundBuffer_SetFormat(
-    LPDIRECTSOUNDBUFFER8 iface,
-    LPWAVEFORMATEX pcfxFormat,
-    BOOL bLooped)
-{
-    ULONG PinId, DeviceId = 0, Result;
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    if (This->hPin)
-    {
-        // FIXME
-        // check if multiple buffers are active
-        // in that case need mixing
-
-        if (SetPinFormat(This->hPin, pcfxFormat))
-            return DS_OK;
-        else
-            return DSERR_GENERIC;
-    }
-
-    do
-    {
-        /* try all available recording pins on that filter */
-        PinId = GetPinIdFromFilter(This->Filter, FALSE, DeviceId);
-        DPRINT("PinId %u DeviceId %u\n", PinId, DeviceId);
-
-        if (PinId == ULONG_MAX)
-            break;
-
-        Result = OpenPin(This->Filter->hFilter, PinId, (LPWAVEFORMATEX)pcfxFormat, &This->hPin, bLooped);
-        DPRINT("PinId %u Result %u\n", PinId, Result);
-        if (Result == ERROR_SUCCESS)
-        {
-            This->dwFrequency = pcfxFormat->nSamplesPerSec;
-            break;
-        }
-
-        This->hPin = NULL;
-        DeviceId++;
-    }while(TRUE);
-
-    if (!This->hPin)
-    {
-        DPRINT("PrimaryDirectSoundBuffer8Impl_fnSetFormat failed\n");
-        return DSERR_INVALIDPARAM;
-    }
-
-    DPRINT("PrimaryDirectSoundBuffer8Impl_fnSetFormat success\n");
-    return DS_OK;
-}
-
-VOID
-PrimaryDirectSoundBuffer_AcquireLock(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    EnterCriticalSection(&This->Lock);
-
-
-}
-
-VOID
-PrimaryDirectSoundBuffer_ReleaseLock(
-    LPDIRECTSOUNDBUFFER8 iface)
-{
-    LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
-
-    LeaveCriticalSection(&This->Lock);
-
-}
-
-
-HRESULT
-NewPrimarySoundBuffer(
-    LPDIRECTSOUNDBUFFER8 *OutBuffer,
-    LPFILTERINFO Filter,
-    DWORD dwLevel,
-    DWORD dwFlags)
-{
-    LPCDirectSoundBuffer This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CDirectSoundBuffer));
-
-    if (!This)
-    {
-        /* not enough memory */
-        return DSERR_OUTOFMEMORY;
-    }
-
-    This->ref = 1;
-    This->lpVtbl = &vt_DirectSoundBuffer8;
-    This->Filter = Filter;
-    This->dwLevel = dwLevel;
-    This->dwFlags = dwFlags;
-    This->dwFrequency = 0;
-    This->Volume = DSBVOLUME_MAX;
-    This->VolumePan = DSBPAN_CENTER;
-    This->hPin = NULL;
-
-    /* FIXME: determine default format for audio device */
-    This->Format.cbSize = sizeof(WAVEFORMATEX);
-    This->Format.nChannels = 2;
-    This->Format.nSamplesPerSec = 44100;
-    This->Format.wBitsPerSample = 16;
-    This->Format.wFormatTag = WAVE_FORMAT_PCM;
-    This->Format.nBlockAlign = (This->Format.nChannels * This->Format.wBitsPerSample) / 8;
-    This->Format.nAvgBytesPerSec = (This->Format.nChannels * This->Format.nSamplesPerSec * This->Format.wBitsPerSample) / 8;
-
-    InitializeCriticalSection(&This->Lock);
-
-    *OutBuffer = (LPDIRECTSOUNDBUFFER8)&This->lpVtbl;
-    return DS_OK;
-}
-