From: Charlotte Pabst <cpabst(a)codeweavers.com> --- dlls/mf/session.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 8d2ca079634..ce77dbbcded 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -207,6 +207,7 @@ struct topo_node { IMFMediaSource *source; DWORD stream_id; + unsigned int init_requests; } source; struct { @@ -3010,6 +3011,7 @@ static HRESULT session_add_media_stream(struct media_session *session, IMFMediaS IMFStreamDescriptor *sd; DWORD stream_id = 0; HRESULT hr; + unsigned int i; if (FAILED(hr = IMFMediaStream_GetStreamDescriptor(stream, &sd))) return hr; @@ -3032,6 +3034,13 @@ static HRESULT session_add_media_stream(struct media_session *session, IMFMediaS node->object.source_stream = stream; IMFMediaStream_AddRef(node->object.source_stream); + + for (i = 0; i < node->u.source.init_requests; ++i) + { + if (FAILED(hr = IMFMediaStream_RequestSample(node->object.source_stream, NULL))) + WARN("Sample request failed, hr %#lx.\n", hr); + } + node->u.source.init_requests = 0; break; } } @@ -3968,7 +3977,9 @@ static HRESULT session_request_sample_from_node(struct media_session *session, s switch (topo_node->type) { case MF_TOPOLOGY_SOURCESTREAM_NODE: - if (FAILED(hr = IMFMediaStream_RequestSample(topo_node->object.source_stream, NULL))) + if (!topo_node->object.source_stream) + ++topo_node->u.source.init_requests; + else if (FAILED(hr = IMFMediaStream_RequestSample(topo_node->object.source_stream, NULL))) WARN("Sample request failed, hr %#lx.\n", hr); break; case MF_TOPOLOGY_TRANSFORM_NODE: -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9716