One limitation: FFmpeg doesn't provide detailed errors on invalid input, so I'm just using a generic error code if decoding fails
Downmixing is completely broken on LLE because the PPU thread sends a wrong command to the SPU thread, so I didn't bother implementing this
There are no memory allocations aside from FFmpeg, I'm using the buffer provided by the game. FFmpeg is also setup to read from and write to the same memory locations the SPU thread would.
Savestate compatible
I set it to HLE by default, but if any issue is found in testing that I am unable to fix then I will revert this for now
Known issues
13168 is heavily amplified. With HLE, music stops playing within seconds of reaching the main menu.
The issue is caused by the game sending invalid data to the decoder. The thread "bnusCoreDecoderAT3PThread" then just exits when it receives the error. I assume this is because of a race condition in the game. I tried slowing down the decoder thread to match realhw as closely as possible, but that didn't improve anything.
I was able to trigger this issue in Tales of Xillia 1+2 and Tekken 6 as well, it's likely other NU engine games are also affected.
Setting PPU Thread Count to 1 still works around the issue with HLE.
Known issues
13168 is heavily amplified. With HLE, music stops playing within seconds of reaching the main menu.
The issue is caused by the game sending invalid data to the decoder. The thread "bnusCoreDecoderAT3PThread" then just exits when it receives the error. I assume this is because of a race condition in the game. I tried slowing down the decoder thread to match realhw as closely as possible, but that didn't improve anything. I was able to trigger this issue in Tales of Xillia 1+2 and Tekken 6 as well, it's likely other NU engine games are also affected. Setting PPU Thread Count to 1 still works around the issue with HLE.