]> Repos - portaudio/commitdiff
wasapi: provide meaningful error code when opening the stream and error occurred...
authordmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Mon, 16 Apr 2012 08:16:20 +0000 (08:16 +0000)
committerdmitrykos <dmitrykos@0f58301d-fd10-0410-b4af-bbb618454e57>
Mon, 16 Apr 2012 08:16:20 +0000 (08:16 +0000)
src/hostapi/wasapi/pa_win_wasapi.c

index ee775c79c3d574cce227fa2b04b252ebf2a540be..b40f777c2b811c8230bc6d75e07b869b695cf529 100644 (file)
@@ -2128,16 +2128,26 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
        const UINT32 userFramesPerBuffer = framesPerLatency;\r
     IAudioClient *audioClient       = NULL;\r
 \r
+       // Assume default failure due to some reason\r
+       (*pa_error) = paInvalidDevice;\r
+\r
        // Validate parameters\r
     if (!pSub || !pInfo || !params)\r
+       {\r
+               (*pa_error) = paBadStreamPtr;\r
         return E_POINTER;\r
+       }\r
        if ((UINT32)sampleRate == 0)\r
+       {\r
+               (*pa_error) = paInvalidSampleRate;\r
         return E_INVALIDARG;\r
+       }\r
 \r
     // Get the audio client\r
     hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void **)&audioClient);\r
        if (hr != S_OK)\r
        {\r
+               (*pa_error) = paInsufficientMemory;\r
                LogHostError(hr);\r
                goto done;\r
        }\r
@@ -2145,9 +2155,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
        // Get closest format\r
        if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported)\r
        {\r
-               if (pa_error)\r
-                       (*pa_error) = error;\r
-\r
+               (*pa_error) = error;\r
                LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);\r
                goto done; // fail, format not supported\r
        }\r
@@ -2165,6 +2173,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
                pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1_L));\r
                if (pSub->monoMixer == NULL)\r
                {\r
+                       (*pa_error) = paInvalidChannelCount;\r
                        LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);\r
                        goto done; // fail, no mixer for format\r
                }\r
@@ -2320,6 +2329,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
         hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);\r
        if (hr != S_OK)\r
                {\r
+                       (*pa_error) = paInsufficientMemory;\r
                        LogHostError(hr);\r
                        goto done;\r
                }\r
@@ -2350,6 +2360,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
         hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);\r
        if (hr != S_OK)\r
                {\r
+                       (*pa_error) = paInsufficientMemory;\r
                        LogHostError(hr);\r
                        goto done;\r
                }\r
@@ -2375,6 +2386,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
         hr = IAudioClient_GetBufferSize(audioClient, &frames);\r
                if (hr != S_OK)\r
                {\r
+                       (*pa_error) = paInvalidDevice;\r
                        LogHostError(hr);\r
                        goto done;\r
                }\r
@@ -2388,6 +2400,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
         hr = IMMDevice_Activate(pInfo->device, &pa_IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&audioClient);\r
        if (hr != S_OK)\r
                {\r
+                       (*pa_error) = paInsufficientMemory;\r
                        LogHostError(hr);\r
                        goto done;\r
                }\r
@@ -2395,9 +2408,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
                // Get closest format\r
                if ((error = GetClosestFormat(audioClient, sampleRate, params, pSub->shareMode, &pSub->wavex, output)) != paFormatIsSupported)\r
                {\r
-                       if (pa_error)\r
-                               (*pa_error) = error;\r
-\r
+                       (*pa_error) = error;\r
                        LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT); // fail, format not supported\r
                        goto done;\r
                }\r
@@ -2415,6 +2426,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
                        pSub->monoMixer = _GetMonoToStereoMixer(WaveToPaFormat(&pSub->wavex), (pInfo->flow == eRender ? MIX_DIR__1TO2 : MIX_DIR__2TO1_L));\r
                        if (pSub->monoMixer == NULL)\r
                        {\r
+                               (*pa_error) = paInvalidChannelCount;\r
                                LogHostError(hr = AUDCLNT_E_UNSUPPORTED_FORMAT);\r
                                goto done; // fail, no mixer for format\r
                        }\r
@@ -2433,6 +2445,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
             NULL);\r
        if (hr != S_OK)\r
                {\r
+                       (*pa_error) = paInvalidDevice;\r
                        LogHostError(hr);\r
                        goto done;\r
                }\r
@@ -2440,6 +2453,7 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
     else\r
        if (hr != S_OK)\r
     {\r
+               (*pa_error) = paInvalidDevice;\r
                LogHostError(hr);\r
                goto done;\r
     }\r
@@ -2454,6 +2468,9 @@ static HRESULT CreateAudioClient(PaWasapiStream *pStream, PaWasapiSubStream *pSu
                MakeFramesFromHns(pSub->period, pSub->wavex.Format.nSamplesPerSec),\r
                fullDuplex);\r
 \r
+       // No error, client is succesfully created\r
+       (*pa_error) = paNoError;\r
+\r
 done:\r
 \r
     // Clean up\r
@@ -2475,7 +2492,7 @@ static PaError ActivateAudioClientOutput(PaWasapiStream *stream)
        hr = CreateAudioClient(stream, &stream->out, TRUE, &result);\r
     if (hr != S_OK)\r
        {\r
-               LogPaError(result = paInvalidDevice);\r
+               LogPaError(result);\r
                goto error;\r
     }\r
        LogWAVEFORMATEXTENSIBLE(&stream->out.wavex);\r
@@ -2547,7 +2564,7 @@ static PaError ActivateAudioClientInput(PaWasapiStream *stream)
        hr = CreateAudioClient(stream, &stream->in, FALSE, &result);\r
     if (hr != S_OK)\r
        {\r
-               LogPaError(result = paInvalidDevice);\r
+               LogPaError(result);\r
                goto error;\r
     }\r
        LogWAVEFORMATEXTENSIBLE(&stream->in.wavex);\r