From: Rémi Bernon rbernon@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,