winealsa: Map ALSA errors to AUDCLNT_E_*.

This commit is contained in:
Jörg Höhle 2012-01-09 19:04:42 +01:00 committed by Alexandre Julliard
parent 4bbdc31d4f
commit ef111ce138

View File

@ -579,7 +579,12 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(const char *key, IMMDevice *dev,
if(err < 0){ if(err < 0){
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
WARN("Unable to open PCM \"%s\": %d (%s)\n", key, err, snd_strerror(err)); WARN("Unable to open PCM \"%s\": %d (%s)\n", key, err, snd_strerror(err));
return E_FAIL; switch(err){
case EBUSY:
return AUDCLNT_E_DEVICE_IN_USE;
default:
return AUDCLNT_E_ENDPOINT_CREATE_FAILED;
}
} }
This->hw_params = HeapAlloc(GetProcessHeap(), 0, This->hw_params = HeapAlloc(GetProcessHeap(), 0,
@ -1241,7 +1246,7 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
EnterCriticalSection(&This->lock); EnterCriticalSection(&This->lock);
if((err = snd_pcm_hw_params_any(This->pcm_handle, This->hw_params)) < 0){ if((err = snd_pcm_hw_params_any(This->pcm_handle, This->hw_params)) < 0){
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
@ -1267,13 +1272,13 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
} }
if((err = snd_pcm_hw_params_get_rate_min(This->hw_params, &min, NULL)) < 0){ if((err = snd_pcm_hw_params_get_rate_min(This->hw_params, &min, NULL)) < 0){
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
WARN("Unable to get min rate: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get min rate: %d (%s)\n", err, snd_strerror(err));
goto exit; goto exit;
} }
if((err = snd_pcm_hw_params_get_rate_max(This->hw_params, &max, NULL)) < 0){ if((err = snd_pcm_hw_params_get_rate_max(This->hw_params, &max, NULL)) < 0){
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
WARN("Unable to get max rate: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get max rate: %d (%s)\n", err, snd_strerror(err));
goto exit; goto exit;
} }
@ -1284,13 +1289,13 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
} }
if((err = snd_pcm_hw_params_get_channels_min(This->hw_params, &min)) < 0){ if((err = snd_pcm_hw_params_get_channels_min(This->hw_params, &min)) < 0){
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
WARN("Unable to get min channels: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get min channels: %d (%s)\n", err, snd_strerror(err));
goto exit; goto exit;
} }
if((err = snd_pcm_hw_params_get_channels_max(This->hw_params, &max)) < 0){ if((err = snd_pcm_hw_params_get_channels_max(This->hw_params, &max)) < 0){
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
WARN("Unable to get max channels: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get max channels: %d (%s)\n", err, snd_strerror(err));
goto exit; goto exit;
} }
@ -1365,7 +1370,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
if((err = snd_pcm_hw_params_any(This->pcm_handle, This->hw_params)) < 0){ if((err = snd_pcm_hw_params_any(This->pcm_handle, This->hw_params)) < 0){
WARN("Unable to get hw_params: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get hw_params: %d (%s)\n", err, snd_strerror(err));
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
@ -1389,14 +1394,14 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
fmt->SubFormat = KSDATAFORMAT_SUBTYPE_PCM; fmt->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
}else{ }else{
ERR("Didn't recognize any available ALSA formats\n"); ERR("Didn't recognize any available ALSA formats\n");
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
if((err = snd_pcm_hw_params_get_channels_max(This->hw_params, if((err = snd_pcm_hw_params_get_channels_max(This->hw_params,
&max_channels)) < 0){ &max_channels)) < 0){
WARN("Unable to get max channels: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get max channels: %d (%s)\n", err, snd_strerror(err));
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
@ -1410,7 +1415,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
if((err = snd_pcm_hw_params_get_rate_max(This->hw_params, &max_rate, if((err = snd_pcm_hw_params_get_rate_max(This->hw_params, &max_rate,
NULL)) < 0){ NULL)) < 0){
WARN("Unable to get max rate: %d (%s)\n", err, snd_strerror(err)); WARN("Unable to get max rate: %d (%s)\n", err, snd_strerror(err));
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
@ -1426,7 +1431,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient *iface,
fmt->Format.nSamplesPerSec = 8000; fmt->Format.nSamplesPerSec = 8000;
else{ else{
ERR("Unknown max rate: %u\n", max_rate); ERR("Unknown max rate: %u\n", max_rate);
hr = E_FAIL; hr = AUDCLNT_E_DEVICE_INVALIDATED;
goto exit; goto exit;
} }
@ -1681,7 +1686,7 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient *iface)
This, 0, This->mmdev_period_rt / 10000, WT_EXECUTEINTIMERTHREAD)){ This, 0, This->mmdev_period_rt / 10000, WT_EXECUTEINTIMERTHREAD)){
LeaveCriticalSection(&This->lock); LeaveCriticalSection(&This->lock);
WARN("Unable to create timer: %u\n", GetLastError()); WARN("Unable to create timer: %u\n", GetLastError());
return E_FAIL; return E_OUTOFMEMORY;
} }
This->started = TRUE; This->started = TRUE;