https://bugs.winehq.org/show_bug.cgi?id=46918
--- Comment #2 from Ethan Lee flibitijibibo@gmail.com --- This one's really strange - there are lots of submix XAPOs that are fine, with the crash happening immediately after the first time a source XAPO's parameters are updated. All the effects are custom implementations made by Treyarch, so no symbols to be found here.
The part that's weird is the Source DSP (which is what it's called), which has a SetParameters implementation that behaves roughly like this:
// ParameterByteSize == 64 void SetParameters(void* pParameters, uint32_t ParameterByteSize) { float* src = (float*) pParameters; float* dst = (float*) this->m_pParameterBlocks + (0 through 2);
for (int i = 0; i < 12; i += 1) { dst[i + 1] = src[i + 4]; } }
This... doesn't make a lot of sense. The typical case is to simply copy pParameters to m_pParameterBlocks with the intended ParameterByteSize, and this just avoids that entirely. I feel like I'm either misinterpreting the assembly or missing some huge detail in how this is meant to work, because these values are what appear to derail the program (IXAPO::Process starts corrupting things). Avoiding the SetParameters for this one XAPO allows everything to function correctly.