From: Nikolay Sivov Subject: [v2 PATCH 4/4] mfmediaengine/renderer: Request more samples when in running state. Message-Id: <20201102125421.3012252-4-nsivov@codeweavers.com> Date: Mon, 2 Nov 2020 15:54:21 +0300 In-Reply-To: <20201102125421.3012252-1-nsivov@codeweavers.com> References: <20201102125421.3012252-1-nsivov@codeweavers.com> Signed-off-by: Nikolay Sivov --- dlls/mfmediaengine/renderer.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/dlls/mfmediaengine/renderer.c b/dlls/mfmediaengine/renderer.c index d747f42774a..0d558e16963 100644 --- a/dlls/mfmediaengine/renderer.c +++ b/dlls/mfmediaengine/renderer.c @@ -513,6 +513,13 @@ static HRESULT WINAPI video_renderer_stream_ProcessSample(IMFStreamSink *iface, /* FIXME: samples are dropped */ + EnterCriticalSection(&renderer->cs); + + if (renderer->state == STREAM_STATE_RUNNING) + IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkRequestSample, &GUID_NULL, S_OK, NULL); + + LeaveCriticalSection(&renderer->cs); + return S_OK; } @@ -741,9 +748,12 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockStart(IMFClockStateSink * EnterCriticalSection(&renderer->cs); if (renderer->state == STREAM_STATE_STOPPED) - renderer->state = STREAM_STATE_RUNNING; + { + IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkStarted, &GUID_NULL, S_OK, NULL); + IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkRequestSample, &GUID_NULL, S_OK, NULL); - IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkStarted, &GUID_NULL, S_OK, NULL); + renderer->state = STREAM_STATE_RUNNING; + } LeaveCriticalSection(&renderer->cs); @@ -796,7 +806,13 @@ static HRESULT WINAPI video_renderer_clock_sink_OnClockRestart(IMFClockStateSink EnterCriticalSection(&renderer->cs); - IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkStarted, &GUID_NULL, S_OK, NULL); + if (renderer->state != STREAM_STATE_RUNNING) + { + IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkStarted, &GUID_NULL, S_OK, NULL); + IMFMediaEventQueue_QueueEventParamVar(renderer->stream_event_queue, MEStreamSinkRequestSample, &GUID_NULL, S_OK, NULL); + + renderer->state = STREAM_STATE_RUNNING; + } LeaveCriticalSection(&renderer->cs); -- 2.28.0