Commit Graph

87 Commits

Author SHA1 Message Date
Sebastian Lackner c649ec3a02 xaudio2: Use assembly wrapper to call OnVoiceProcessingPassStart callback.
During a callback function, some games use the wrong function
signature for an xaudio2 function, which changed between xaudio2
versions.  As a result, the EDI and ESI registers are overwritten by
the game.  Apparently Windows's implementation happens not to use
these registers in a way that causes the crash.

This patch pushes EDI and ESI onto the stack before calling the
callback, then pops them back after the callback exits.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=42520
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43358
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-11-01 21:50:58 +01:00
Roger Zoellner a303f9cd10 xaudio2: Don't return XAudio28 interface for XAudio2[0..7] objects in QueryInterface().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43660
Signed-off-by: Roger Zoellner <zoellner.roger@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-10-15 23:09:07 +02:00
Andrew Eikum b747d6f6cc xaudio2: Prefer builtin version.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-03-26 21:07:18 +02:00
Andrew Eikum 45babd780f xaudio2: Fix ClassFactory ref counting.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-02-06 19:39:12 +01:00
Masanori Kakura 7ff0881775 xaudio2: Partially implement XA2SRC_SetChannelVolumes().
Signed-off-by: Masanori Kakura <kakurasan@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-01-22 22:26:47 +01:00
Andrew Eikum f57246e5e5 xaudio2: Account for abandoned buffer bytes.
This should fix bug 44148, a regression caused by e2c73fc394.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-12-11 18:21:29 +01:00
Andrew Eikum e2c73fc394 xaudio2: Ignore buffers returned from OpenAL after Stop.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-11-30 19:07:04 +01:00
Kimmo Myllyvirta 8b94c5b51c xaudio2: Add support for float formats with more than 2 channels.
Signed-off-by: Kimmo Myllyvirta <kimmo.myllyvirta@gmail.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-11-13 17:20:16 +01:00
Andrew Eikum 986a14f950 xaudio2: Try to increase OpenAL source limit.
openal-soft recently added support for applications to request new
source count limits. Older versions will silently ignore these
attributes.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-04-19 09:11:27 +02:00
Andrew Eikum 49078e00a5 xaudio2: Always set current OpenAL context before making AL calls.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-07-07 21:23:24 +09:00
Andrew Eikum e733770416 xaudio2: Implement GetVoiceDetails for source and submix voices.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-06-02 13:25:10 +09:00
Andrew Eikum b77ec00f1c xaudio2: Shut down OpenAL in the correct order.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-06-02 13:25:07 +09:00
Sebastian Lackner caff64333f xaudio2_7: Unset DebugInfo->Spare[0] before destroying critical sections.
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-12 23:06:50 +09:00
Andrew Eikum 7bb885a3d3 xaudio2: Protect access to submix voice during creation (Coverity).
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-11 12:18:08 +09:00
Andrew Eikum 2c82e8b477 xaudio2: Protect access to source voice during creation (Coverity).
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-11 12:18:05 +09:00
Andrew Eikum ecadabe25b xaudio2: Handle openal source allocation failure.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-10 13:46:12 +09:00
Andrew Eikum 3934253513 xaudio2: Report incoming underruns to the application.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-26 14:54:35 +09:00
Andrew Eikum 2b2b179422 xaudio2: Use an HRESULT return code.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-21 17:01:44 +09:00
Andrew Eikum 121a69e028 xaudio2_9: Add xaudio2_9.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-20 14:48:37 +09:00
Andrew Eikum d9e6a31c6e xaudio2: Don't build interfaces for other versions.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-19 20:48:07 +09:00
Andrew Eikum fb954b7b9f xaudio2_8: Don't use IXAudio27 interface to call Initialize.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-19 20:48:07 +09:00
Andrew Eikum 0a8e8d190f xaudio2: Remove run-time versioning of xapo objects.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-17 15:41:12 +09:00
Andrew Eikum fb9f616b2b xaudio2: Remove run-time version checks for XAudio2 object.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-17 15:40:58 +09:00
Andrew Eikum adc6281ea1 xapofx1_1: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-15 01:44:53 +09:00
Andrew Eikum 80de4ba64d xapofx1_2: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-15 01:44:53 +09:00
Andrew Eikum 1559b715a8 xapofx1_3: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-15 01:44:53 +09:00
Andrew Eikum 12d7ce689a xapofx1_4: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-15 01:44:53 +09:00
Andrew Eikum d8739d4433 xapofx1_5: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-15 01:44:53 +09:00
Andrew Eikum 5f15d5b37c xaudio2_8: Use shared source.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-12 16:06:30 +09:00
Andrew Eikum 4ad4c61100 xaudio2: Explicitly version the 2.7 coclasses.
In versions 2.8 and later, no coclasses are provided by the API, so we
should version the old ones to make it clear they're out of date.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-12 16:05:02 +09:00
Nikolay Sivov f505f5fdeb xaudio2: Add another missing break for consistency.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-08 21:38:26 +09:00
Nikolay Sivov f9be2024da xaudio2: Added missing break in a switch (Coverity).
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-01-06 18:08:39 +01:00
André Hentschel 35eebeef0f xaudio2_7: Check return of IAudioClient_Start (Coverity).
Signed-off-by: André Hentschel <nerv@dawncrow.de>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-12-22 20:19:01 +01:00
Francois Gouget 413c6f60cf Assorted spelling fixes.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-12-02 12:59:52 +09:00
Francois Gouget c9a040b510 xaudio2_7: Make some functions static.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-11-25 12:58:05 +09:00
Andrew Eikum d672ebfeb8 xaudio2_7: Update current buffer position after flushing buffers.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-11-13 11:53:58 +09:00
Andrew Eikum daed36fbe3 xaudio2: Add stub interface for FXEQ.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-28 12:45:02 +09:00
Andrew Eikum 9da38fdbee xaudio2_7: Move APO implementations to a new file.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-28 12:45:02 +09:00
Andrew Eikum 539d7fb4e4 xaudio2: Implement CreateFX for legacy xaudio2 versions.
The various xapofx versions all use the same CLSID to identify the
same effect types. In order to differentiate the versions in Wine
without duplicating a ton of code into each xapofx DLL, I made new
internal CLSIDs for each version of xapofx, which xaudio2_7 registers
and uses to tell them apart.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-26 23:03:31 +09:00
Andrew Eikum 998e5a0432 xaudio2: Don't render less than a period of audio.
Sometimes the ALSA driver will report a very small amount of frames
available after a period signal. There is a bug in OpenAL 1.15 which
will crash the application if alcRenderSamplesSOFT is called with less
than 4 frames. And anyway, we shouldn't incur all of this overhead
just to render a couple of frames. So, just skip the rendering step if
we have less than a period of space available in the driver.

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-22 16:47:26 +09:00
Andrew Eikum 61202a68b2 xaudio2: Explicitly trace the xaudio object version.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-20 00:30:40 +09:00
Andrew Eikum 3b9e089c63 xaudio2: Implement IXAudio28MasteringVoice::GetChannelMask.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-20 00:30:40 +09:00
Alexandre Julliard d548639d97 xaudio2_7: Fix a typo.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-09 23:23:17 +09:00
Andrew Eikum 4185cc7a94 xaudio2_0: Add compatibility implementation and forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-10-08 12:53:49 +09:00
Andrew Eikum c8f2d095b2 xaudio2: Register legacy AudioVolumeMeter CLSIDs.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-07 13:27:22 +09:00
Andrew Eikum e9459b047a xaudio2: Register legacy AudioReverb CLSIDs.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-07 13:27:22 +09:00
Andrew Eikum 831095ed93 xaudio2_2: Add compatibility implementation and forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-06 17:21:00 +09:00
Andrew Eikum 7d7b1176da xaudio2_6: Forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-06 00:01:56 +09:00
Andrew Eikum c4f49ac965 xaudio2_5: Forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-06 00:01:55 +09:00
Andrew Eikum a7ae7b47e5 xaudio2_4: Forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
2015-10-06 00:01:55 +09:00