[PATCH 1/3] winegstreamer: Implement WMA decoder Process(Input|Output) error checks.

Rémi Bernon rbernon at codeweavers.com
Sat Feb 26 07:25:22 CST 2022


On 2/26/22 11:40, Marvin wrote:
> === debian11 (64 bit WoW report) ===
> 
> mf:
> mf.c:6208: Test failed: ProcessInput returned 0x80004001
> mf.c:6213: Test failed: ProcessInput returned 0x80004001


I'll fix these, but also I found that there's going to be an issue with 
the queue:

Call of Duty Black Ops III really doesn't care about the return status 
of ProcessInput, and apparently expects a stream change result after a 
certain number of ProcessInput / ProcessOutput calls.

Adding a queue in front introduces too much decoupling, and we either:

1) don't accept buffers when there's already one in the queue, like 
here, and as the game doesn't even bother pushing the sample again we 
then miss some,

2) or, if we queue more buffers, accept too many input buffers and the 
game is confused that it pushed too many samples before receiving its 
stream change result,

It is possible, and I was doing this locally with an earlier version 
using a queue, to put the queue in the middle of the pipeline, after the 
h264 decoder element.

It helps this particular case as pushing a buffer also parses it and 
triggers the caps change, or output buffer, but it then causes some 
problems I need to resolve first.

More specifically, if we block on the output end, waiting for 
ProcessOutput like here, we won't process queries that could be 
triggered concurrently by a gst_pad_push, causing a deadlock.

-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list