Merge pull request #186 (Added patch to implement exclusive mode in PulseAudio backend).

This commit is contained in:
Sebastian Lackner 2014-11-20 07:45:43 +01:00
commit 6a390b6b9a
5 changed files with 102 additions and 0 deletions

View File

@ -39,6 +39,11 @@ Wine. All those differences are also documented on the
Included bug fixes and improvements
===================================
**Bugfixes and features included in the next upcoming release [1]:**
* Implement exclusive mode in PulseAudio backend ([Wine Bug #37042](https://bugs.winehq.org/show_bug.cgi?id=37042))
**Bugs fixed in Wine Staging 1.7.31 [101]:**
* ATL IOCS data should not be stored in GWLP_USERDATA ([Wine Bug #21767](https://bugs.winehq.org/show_bug.cgi?id=21767))

1
debian/changelog vendored
View File

@ -1,5 +1,6 @@
wine-compholio (1.7.32) UNRELEASED; urgency=low
* Added patch to ensure dbghelp always checks for debug symbols in BINDIR.
* Added patch for pulseaudio exclusive mode support.
* Removed patch to close server fd is there is no space in thread inflight fd list (accepted upstream).
* Removed patch to fix bugs in StrStr functions (accepted upstream).
* Removed patches to avoid sending messages in FindWindowExW (accepted upstream).

View File

@ -1673,6 +1673,7 @@ winemenubuilder-Desktop_Icon_Path.ok:
# |
# | This patchset fixes the following Wine bugs:
# | * [#10495] Support for PulseAudio backend for audio
# | * [#37042] Implement exclusive mode in PulseAudio backend
# |
# | Modified files:
# | * configure.ac, dlls/mmdevapi/main.c, dlls/mmdevapi/tests/render.c, dlls/winepulse.drv/Makefile.in,
@ -1708,6 +1709,7 @@ winepulse-PulseAudio_Support.ok:
$(call APPLY_FILE,winepulse-PulseAudio_Support/0026-winepulse-add-support-for-IMarshal.patch)
$(call APPLY_FILE,winepulse-PulseAudio_Support/0027-winepulse-handle-stream-create-failing-correctly.patch)
$(call APPLY_FILE,winepulse-PulseAudio_Support/0028-winepulse-expose-audio-devices-directly-to-programs.patch)
$(call APPLY_FILE,winepulse-PulseAudio_Support/0029-winepulse-implement-exclusive-mode.patch)
@( \
echo '+ { "Maarten Lankhorst", "winmm: Load winealsa if winepulse is found.", 1 },'; \
echo '+ { "Maarten Lankhorst", "winepulse: Add initial stub for pulseaudio support.", 1 },'; \
@ -1737,6 +1739,7 @@ winepulse-PulseAudio_Support.ok:
echo '+ { "Maarten Lankhorst", "winepulse: add support for IMarshal.", 1 },'; \
echo '+ { "Mark Harmstone", "winepulse: handle stream create failing correctly.", 1 },'; \
echo '+ { "Mark Harmstone", "winepulse: expose audio devices directly to programs.", 1 },'; \
echo '+ { "Mark Harmstone", "winepulse: implement exclusive mode.", 1 },'; \
) > winepulse-PulseAudio_Support.ok
# Patchset winex11-CandidateWindowPos

View File

@ -0,0 +1,92 @@
From 1e94fe02352f3dd4d0122775a8d6a46266a3171a Mon Sep 17 00:00:00 2001
From: Mark Harmstone <mark@harmstone.com>
Date: Tue, 18 Nov 2014 18:35:31 +0000
Subject: winepulse: implement exclusive mode
---
dlls/winepulse.drv/mmdevdrv.c | 46 ++++++++++++++++++-------------------------
1 file changed, 19 insertions(+), 27 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 368c275..f35a108 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -1410,6 +1410,7 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
const GUID *sessionguid)
{
ACImpl *This = impl_from_IAudioClient(iface);
+ REFERENCE_TIME def, min;
HRESULT hr = S_OK;
UINT period_bytes;
@@ -1421,8 +1422,6 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
if (mode != AUDCLNT_SHAREMODE_SHARED && mode != AUDCLNT_SHAREMODE_EXCLUSIVE)
return AUDCLNT_E_NOT_INITIALIZED;
- if (mode == AUDCLNT_SHAREMODE_EXCLUSIVE)
- return AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED;
if (flags & ~(AUDCLNT_STREAMFLAGS_CROSSPROCESS |
AUDCLNT_STREAMFLAGS_LOOPBACK |
@@ -1446,27 +1445,26 @@ static HRESULT WINAPI AudioClient_Initialize(IAudioClient *iface,
if (FAILED(hr))
goto exit;
- if (mode == AUDCLNT_SHAREMODE_SHARED) {
- REFERENCE_TIME def = pulse_def_period[This->dataflow == eCapture];
- REFERENCE_TIME min = pulse_min_period[This->dataflow == eCapture];
+ def = pulse_def_period[This->dataflow == eCapture];
+ min = pulse_min_period[This->dataflow == eCapture];
- /* Switch to low latency mode if below 2 default periods,
- * which is 20 ms by default, this will increase the amount
- * of interrupts but allows very low latency. In dsound I
- * managed to get a total latency of ~8ms, which is well below
- * default
- */
- if (duration < 2 * def)
- period = min;
- else
- period = def;
- if (duration < 2 * period)
- duration = 2 * period;
+ /* Switch to low latency mode if below 2 default periods,
+ * which is 20 ms by default, this will increase the amount
+ * of interrupts but allows very low latency. In dsound I
+ * managed to get a total latency of ~8ms, which is well below
+ * default
+ */
+ if (duration < 2 * def)
+ period = min;
+ else
+ period = def;
+ if (duration < 2 * period)
+ duration = 2 * period;
+
+ /* Uh oh, really low latency requested.. */
+ if (duration <= 2 * period)
+ period /= 2;
- /* Uh oh, really low latency requested.. */
- if (duration <= 2 * period)
- period /= 2;
- }
period_bytes = pa_frame_size(&This->ss) * MulDiv(period, This->ss.rate, 10000000);
if (duration < 20000000)
@@ -1771,12 +1769,6 @@ static HRESULT WINAPI AudioClient_IsFormatSupported(IAudioClient *iface,
else
*out = closest;
- /* Winepulse does not currently support exclusive mode, if you know of an
- * application that uses it, I will correct this..
- */
- if (hr == S_OK && exclusive)
- return This->dataflow == eCapture ? AUDCLNT_E_UNSUPPORTED_FORMAT : AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED;
-
TRACE("returning: %08x %p\n", hr, out ? *out : NULL);
return hr;
}
--
2.1.3

View File

@ -1,2 +1,3 @@
Fixes: [10495] Support for PulseAudio backend for audio
Fixes: Allow selection of audio device for PulseAudio backend
Fixes: [37042] Implement exclusive mode in PulseAudio backend