Exemple #1
0
BOOL
WINAPI
DllMain(
    HINSTANCE hInstDLL,
    DWORD fdwReason,
    LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            dsound_hInstance = hInstDLL;
#if 1
            DPRINT("NumDevs %u\n", waveOutGetNumDevs());
            if (EnumAudioDeviceInterfaces(&RootInfo) != S_OK)
            {
                DPRINT("EnumAudioDeviceInterfaces failed\n");
                RootInfo = NULL;
            }
DPRINT1("EnumAudioDeviceInterfaces %p %u\n", RootInfo, waveOutGetNumDevs());
#endif
            DisableThreadLibraryCalls(dsound_hInstance);
            break;
    default:
        break;
    }

    return TRUE;
}
Exemple #2
0
HRESULT
DSoundEnumerate(
    LPDSENUMCALLBACKA lpDSEnumCallbackA,
    LPDSENUMCALLBACKW lpDSEnumCallbackW,
    LPVOID lpContext,
    BOOL bPlayback)
{
    ULONG ResourceId;
    BOOL bResult;
    LPFILTERINFO CurInfo;
    WAVEOUTCAPSW WaveOutCaps;
    WAVEINCAPSW  WaveInCaps;

    if (!RootInfo)
    {
        EnumAudioDeviceInterfaces(&RootInfo);
    }

    if (lpDSEnumCallbackA == NULL && lpDSEnumCallbackW == NULL)
    {
        DPRINT("No callback\n");
        return DSERR_INVALIDPARAM;
    }

    if (bPlayback)
    {
        /* use resource id of playback string */
        ResourceId = IDS_PRIMARY_PLAYBACK_DEVICE;
    }
    else
    {
        /* use resource id of playback string */
        ResourceId = IDS_PRIMARY_RECORD_DEVICE;
    }

    if (RootInfo)
    {
        /* perform first callback */
        bResult = DoDSoundCallback(lpDSEnumCallbackA, lpDSEnumCallbackW, NULL, ResourceId, NULL, L"", lpContext);
        if (!bResult)
        {
            /* callback asked as to stop */
            return DS_OK;
        }

        /* now iterate through all devices */
        CurInfo = RootInfo;

        do
        {
            if (bPlayback && !IsEqualGUID(&CurInfo->DeviceGuid[1], &GUID_NULL))
            {
                RtlZeroMemory(&WaveOutCaps, sizeof(WAVEOUTCAPSW));

                /* sanity check */
                ASSERT(CurInfo->MappedId[1] != ULONG_MAX);

                /* get wave out caps */
                waveOutGetDevCapsW((UINT_PTR)CurInfo->MappedId[1], &WaveOutCaps, sizeof(WAVEOUTCAPSW));
                WaveOutCaps.szPname[MAXPNAMELEN-1] = L'\0';

                bResult = DoDSoundCallback(lpDSEnumCallbackA, lpDSEnumCallbackW, &CurInfo->DeviceGuid[1], 0, WaveOutCaps.szPname, L"" /* FIXME */, lpContext);
                if (!bResult)
                {
                    /* callback asked as to stop */
                    return DS_OK;
                }
            }
            else if (!bPlayback && !IsEqualGUID(&CurInfo->DeviceGuid[0], &GUID_NULL))
            {
                RtlZeroMemory(&WaveInCaps, sizeof(WAVEINCAPSW));

                /* sanity check */
                ASSERT(CurInfo->MappedId[1] != ULONG_MAX);

                /* get wave in caps */
                waveInGetDevCapsW((UINT_PTR)CurInfo->MappedId[0], &WaveInCaps, sizeof(WAVEINCAPSW));
                WaveInCaps.szPname[MAXPNAMELEN-1] = L'\0';

                bResult = DoDSoundCallback(lpDSEnumCallbackA, lpDSEnumCallbackW, &CurInfo->DeviceGuid[0], 0, WaveInCaps.szPname, L"" /* FIXME */, lpContext);
                if (!bResult)
                {
                    /* callback asked as to stop */
                    return DS_OK;
                }
            }

            /* move to next entry */
            CurInfo = CurInfo->lpNext;
        }while(CurInfo);
    }
    return DS_OK;
}
Exemple #3
0
HRESULT
WINAPI
IDirectSound8_fnInitialize(
    LPDIRECTSOUND8 iface,
    LPCGUID pcGuidDevice)
{
    GUID DeviceGuid;
    LPOLESTR pGuidStr;
    HRESULT hr;
    LPCDirectSoundImpl This = (LPCDirectSoundImpl)CONTAINING_RECORD(iface, CDirectSoundImpl, lpVtbl);

    if (!RootInfo)
    {
        EnumAudioDeviceInterfaces(&RootInfo);
    }

    /* sanity check */
    ASSERT(RootInfo);

    if (This->bInitialized)
    {
        /* object has already been initialized */
        return DSERR_ALREADYINITIALIZED;
    }

    /* fixme mutual exlucsion */

    if (pcGuidDevice == NULL || IsEqualGUID(pcGuidDevice, &GUID_NULL))
    {
        /* use default playback device id */
        pcGuidDevice = &DSDEVID_DefaultPlayback;
    }

    if (IsEqualIID(pcGuidDevice, &DSDEVID_DefaultCapture) || IsEqualIID(pcGuidDevice, &DSDEVID_DefaultVoiceCapture))
    {
        /* this has to be a winetest */
        return DSERR_NODRIVER;
    }

    /* now verify the guid */
    if (GetDeviceID(pcGuidDevice, &DeviceGuid) != DS_OK)
    {
        if (SUCCEEDED(StringFromIID(pcGuidDevice, &pGuidStr)))
        {
            DPRINT("IDirectSound8_fnInitialize: Unknown GUID %ws\n", pGuidStr);
            CoTaskMemFree(pGuidStr);
        }
        return DSERR_INVALIDPARAM;
    }

    hr = FindDeviceByGuid(&DeviceGuid, &This->Filter);

    if (SUCCEEDED(hr))
    {
        This->bInitialized = TRUE;
        return DS_OK;	
    }

    DPRINT("Failed to find device\n");
    return DSERR_INVALIDPARAM;
}