From: Brendan McGrath bmcgrath@codeweavers.com
--- dlls/mf/evr.c | 7 +++++-- dlls/mf/session.c | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c index a13c2d7e89b..eb366ea599a 100644 --- a/dlls/mf/evr.c +++ b/dlls/mf/evr.c @@ -417,8 +417,11 @@ static HRESULT WINAPI video_stream_sink_ProcessSample(IMFStreamSink *iface, IMFS
if (SUCCEEDED(IMFTransform_ProcessInput(stream->parent->mixer, stream->id, sample, 0))) { - while (hr == S_OK && (hr = IMFVideoPresenter_ProcessMessage(stream->parent->presenter, MFVP_MESSAGE_PROCESSINPUTNOTIFY, 0)) == MF_E_TRANSFORM_TYPE_NOT_SET) - hr = IMFVideoPresenter_ProcessMessage(stream->parent->presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0); + while ((hr = IMFVideoPresenter_ProcessMessage(stream->parent->presenter, MFVP_MESSAGE_PROCESSINPUTNOTIFY, 0)) == MF_E_TRANSFORM_TYPE_NOT_SET) + { + if (FAILED(hr = IMFVideoPresenter_ProcessMessage(stream->parent->presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0))) + break; + } }
if (stream->flags & EVR_STREAM_PREROLLING) diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 3c989249229..e24cc6376b4 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -3706,7 +3706,10 @@ static void session_deliver_sample_to_node(struct media_session *session, struct if (sample) { if (FAILED(hr = IMFStreamSink_ProcessSample(topo_node->object.sink_stream, sample))) + { WARN("Stream sink failed to process sample, hr %#lx.\n", hr); + IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MEError, &GUID_NULL, hr, NULL); + } } else if (FAILED(hr = IMFStreamSink_PlaceMarker(topo_node->object.sink_stream, MFSTREAMSINK_MARKER_ENDOFSEGMENT, NULL, NULL)))