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
// 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
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
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
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
hr = IAudioClient_GetBufferSize(audioClient, &frames);\r
if (hr != S_OK)\r
{\r
+ (*pa_error) = paInvalidDevice;\r
LogHostError(hr);\r
goto done;\r
}\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
// 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
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
NULL);\r
if (hr != S_OK)\r
{\r
+ (*pa_error) = paInvalidDevice;\r
LogHostError(hr);\r
goto done;\r
}\r
else\r
if (hr != S_OK)\r
{\r
+ (*pa_error) = paInvalidDevice;\r
LogHostError(hr);\r
goto done;\r
}\r
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
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
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