From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winecoreaudio.drv/coreaudio.c | 17 +++++++++-------- dlls/winecoreaudio.drv/mmdevdrv.c | 4 +--- dlls/winecoreaudio.drv/unixlib.h | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/dlls/winecoreaudio.drv/coreaudio.c b/dlls/winecoreaudio.drv/coreaudio.c index b582e0eabcf..697b2411376 100644 --- a/dlls/winecoreaudio.drv/coreaudio.c +++ b/dlls/winecoreaudio.drv/coreaudio.c @@ -903,6 +903,7 @@ static NTSTATUS unix_get_mix_format(void *args) UInt32 size; OSStatus sc; int i; + const AudioDeviceID dev_id = strtoul(params->device, NULL, 10);
params->fmt->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
@@ -910,10 +911,10 @@ static NTSTATUS unix_get_mix_format(void *args) addr.mElement = 0; addr.mSelector = kAudioDevicePropertyPreferredChannelLayout;
- sc = AudioObjectGetPropertyDataSize(params->dev_id, &addr, 0, NULL, &size); + sc = AudioObjectGetPropertyDataSize(dev_id, &addr, 0, NULL, &size); if(sc == noErr){ layout = malloc(size); - sc = AudioObjectGetPropertyData(params->dev_id, &addr, 0, NULL, &size, layout); + sc = AudioObjectGetPropertyData(dev_id, &addr, 0, NULL, &size, layout); if(sc == noErr){ TRACE("Got channel layout: {tag: 0x%x, bitmap: 0x%x, num_descs: %u}\n", (unsigned int)layout->mChannelLayoutTag, (unsigned int)layout->mChannelBitmap, @@ -942,7 +943,7 @@ static NTSTATUS unix_get_mix_format(void *args) addr.mElement = 0; addr.mSelector = kAudioDevicePropertyStreamConfiguration;
- sc = AudioObjectGetPropertyDataSize(params->dev_id, &addr, 0, NULL, &size); + sc = AudioObjectGetPropertyDataSize(dev_id, &addr, 0, NULL, &size); if(sc != noErr){ WARN("Unable to get size for _StreamConfiguration property: %x\n", (int)sc); params->result = osstatus_to_hresult(sc); @@ -955,7 +956,7 @@ static NTSTATUS unix_get_mix_format(void *args) return STATUS_SUCCESS; }
- sc = AudioObjectGetPropertyData(params->dev_id, &addr, 0, NULL, &size, buffers); + sc = AudioObjectGetPropertyData(dev_id, &addr, 0, NULL, &size, buffers); if(sc != noErr){ free(buffers); WARN("Unable to get _StreamConfiguration property: %x\n", (int)sc); @@ -973,7 +974,7 @@ static NTSTATUS unix_get_mix_format(void *args)
addr.mSelector = kAudioDevicePropertyNominalSampleRate; size = sizeof(Float64); - sc = AudioObjectGetPropertyData(params->dev_id, &addr, 0, NULL, &size, &rate); + sc = AudioObjectGetPropertyData(dev_id, &addr, 0, NULL, &size, &rate); if(sc != noErr){ WARN("Unable to get _NominalSampleRate property: %x\n", (int)sc); params->result = osstatus_to_hresult(sc); @@ -1047,8 +1048,8 @@ unsupported: if(params->fmt_out){ struct get_mix_format_params get_mix_params = { + .device = params->device, .flow = params->flow, - .dev_id = dev_id, .fmt = params->fmt_out, };
@@ -1822,15 +1823,15 @@ static NTSTATUS unix_wow64_get_mix_format(void *args) { struct { + PTR32 device; EDataFlow flow; - DWORD dev_id; PTR32 fmt; HRESULT result; } *params32 = args; struct get_mix_format_params params = { + .device = ULongToPtr(params32->device), .flow = params32->flow, - .dev_id = params32->dev_id, .fmt = ULongToPtr(params32->fmt) }; unix_get_mix_format(¶ms); diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 790665842b1..2a23b95ff7e 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -99,7 +99,6 @@ struct ACImpl { HANDLE event; float *vols;
- DWORD dev_id; char dev_name[MAX_DEV_NAME_LEN + 1]; HANDLE timer;
@@ -472,7 +471,6 @@ HRESULT WINAPI AUDDRV_GetAudioEndpoint(GUID *guid, IMMDevice *dev, IAudioClient This->parent = dev; IMMDevice_AddRef(This->parent);
- This->dev_id = dev_id; snprintf(This->dev_name, sizeof(This->dev_name), "%lu", dev_id);
*out = (IAudioClient *)&This->IAudioClient3_iface; @@ -890,7 +888,7 @@ static HRESULT WINAPI AudioClient_GetMixFormat(IAudioClient3 *iface, return E_POINTER; *pwfx = NULL;
- params.dev_id = This->dev_id; + params.device = This->dev_name; params.flow = This->dataflow; params.fmt = CoTaskMemAlloc(sizeof(WAVEFORMATEXTENSIBLE)); if(!params.fmt) diff --git a/dlls/winecoreaudio.drv/unixlib.h b/dlls/winecoreaudio.drv/unixlib.h index d11ac670e5f..b91f90496d5 100644 --- a/dlls/winecoreaudio.drv/unixlib.h +++ b/dlls/winecoreaudio.drv/unixlib.h @@ -113,8 +113,8 @@ struct release_capture_buffer_params
struct get_mix_format_params { + const char *device; EDataFlow flow; - DWORD dev_id; WAVEFORMATEXTENSIBLE *fmt; HRESULT result; };