From: Rémi Bernon <rbernon(a)codeweavers.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53640 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53748 --- dlls/qasf/asfreader.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index 4cf077e9dd3..538b4b5b377 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -451,6 +451,7 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) { struct asf_stream *stream = filter->streams + i; IWMOutputMediaProps *props; + IMediaSample *sample; stream_numbers[i] = i + 1; selections[i] = WMT_OFF; @@ -493,6 +494,17 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) } selections[i] = WMT_ON; + + /* Push a preroll sample to unblock DSoundRender filter and avoid a deadlock with renderers waiting on each other. + * FIXME: This should instead be done with WM Reader delivery threads. + */ + if (wcsstr(stream->source.pin.name, L"Raw Audio") + && SUCCEEDED(hr = IMemAllocator_GetBuffer(stream->source.pAllocator, &sample, NULL, NULL, 0))) + { + IMediaSample_SetPreroll(sample, TRUE); + IMemInputPin_Receive(stream->source.pMemInputPin, sample); + IMediaSample_Release(sample); + } } if (SUCCEEDED(hr) && FAILED(hr = IWMReaderAdvanced_SetStreamsSelected(reader_advanced, -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1856