]> Repos - portaudio/commitdiff
wasapi: workaround to avoid PaWasapi_Initialize() failure when enumerating devices...
authordmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Tue, 20 Oct 2015 16:02:39 +0000 (16:02 +0000)
committerdmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Tue, 20 Oct 2015 16:02:39 +0000 (16:02 +0000)
src/hostapi/wasapi/pa_win_wasapi.c

index da40e886e8121ea543dff520f007aff570f2f828..16ed46a63cce93983afebcb984abbd8eba59a870 100644 (file)
@@ -1283,6 +1283,11 @@ PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
        IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error);\r
 \r
     paWasapi->devInfo = (PaWasapiDeviceInfo *)PaUtil_AllocateMemory(sizeof(PaWasapiDeviceInfo) * paWasapi->deviceCount);\r
+    if (paWasapi->devInfo == NULL)\r
+       {\r
+        result = paInsufficientMemory;\r
+        goto error;\r
+    }\r
        for (i = 0; i < paWasapi->deviceCount; ++i)\r
                memset(&paWasapi->devInfo[i], 0, sizeof(PaWasapiDeviceInfo));\r
 \r
@@ -1446,9 +1451,14 @@ PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                 hr = IAudioClient_GetDevicePeriod(tmpClient,\r
                     &paWasapi->devInfo[i].DefaultDevicePeriod,\r
                     &paWasapi->devInfo[i].MinimumDevicePeriod);\r
-                               // We need to set the result to a value otherwise we will return paNoError\r
-                               // [IF_FAILED_JUMP(hResult, error);]\r
-                               IF_FAILED_INTERNAL_ERROR_JUMP(hr, result, error);\r
+                               if (FAILED(hr))\r
+                               {\r
+                                       PA_DEBUG(("WASAPI:%d| failed getting min/default periods by IAudioClient::GetDevicePeriod() with error[%d], will use 30000/100000 hns\n", i));\r
+\r
+                                       // assign WASAPI common values\r
+                                       paWasapi->devInfo[i].DefaultDevicePeriod = 100000;\r
+                                       paWasapi->devInfo[i].MinimumDevicePeriod = 30000;\r
+                               }\r
 \r
                 //hr = tmpClient->GetMixFormat(&paWasapi->devInfo[i].MixFormat);\r
 \r
@@ -1492,7 +1502,7 @@ PaError PaWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiInd
                                // We need to set the result to a value otherwise we will return paNoError\r
                                result = paInternalError;\r
                 //continue; // do not skip from list, allow to initialize\r
-            break;\r
+                                break;\r
             }\r
 \r
             (*hostApi)->deviceInfos[i] = deviceInfo;\r