From: Claire Girka claire@sitedethib.com
Also drop global format and period variables --- dlls/winepulse.drv/pulse.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c index e7a792feca0..652b4f48c72 100644 --- a/dlls/winepulse.drv/pulse.c +++ b/dlls/winepulse.drv/pulse.c @@ -99,10 +99,6 @@ typedef struct _PhysDevice { static pa_context *pulse_ctx; static pa_mainloop *pulse_ml;
-/* Mixer format + period times */ -static WAVEFORMATEXTENSIBLE pulse_fmt[2]; -static REFERENCE_TIME pulse_min_period[2], pulse_def_period[2]; - static struct list g_phys_speakers = LIST_INIT(g_phys_speakers); static struct list g_phys_sources = LIST_INIT(g_phys_sources);
@@ -801,9 +797,6 @@ static NTSTATUS pulse_test_connect(void *args) pa_context_get_server(pulse_ctx), pa_context_get_server_protocol_version(pulse_ctx));
- pulse_probe_settings(1, NULL, &pulse_fmt[0], &pulse_def_period[0], &pulse_min_period[0]); - pulse_probe_settings(0, NULL, &pulse_fmt[1], &pulse_def_period[1], &pulse_min_period[1]); - free_phys_device_lists(); list_init(&g_phys_speakers); list_init(&g_phys_sources); @@ -811,6 +804,16 @@ static NTSTATUS pulse_test_connect(void *args) pulse_add_device(&g_phys_speakers, NULL, 0, Speakers, 0, "", "PulseAudio"); pulse_add_device(&g_phys_sources, NULL, 0, Microphone, 0, "", "PulseAudio");
+ /* Probe the "default" sink and source first to avoid some possible weirdness + in PulseAudio's behavior when selecting "default" devices */ + LIST_FOR_EACH_ENTRY(dev, &g_phys_speakers, PhysDevice, entry) { + pulse_probe_settings(1, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); + } + + LIST_FOR_EACH_ENTRY(dev, &g_phys_sources, PhysDevice, entry) { + pulse_probe_settings(0, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); + } + o = pa_context_get_sink_info_list(pulse_ctx, &pulse_phys_speakers_cb, NULL); if (o) { while (pa_mainloop_iterate(pulse_ml, 1, &ret) >= 0 && @@ -828,11 +831,13 @@ static NTSTATUS pulse_test_connect(void *args) }
LIST_FOR_EACH_ENTRY(dev, &g_phys_speakers, PhysDevice, entry) { - pulse_probe_settings(1, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); + if (dev->pulse_name[0]) + pulse_probe_settings(1, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); }
LIST_FOR_EACH_ENTRY(dev, &g_phys_sources, PhysDevice, entry) { - pulse_probe_settings(0, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); + if (dev->pulse_name[0]) + pulse_probe_settings(0, dev->pulse_name, &dev->fmt, &dev->def_period, &dev->min_period); }
pa_context_unref(pulse_ctx);