Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/dsoundrender.c | 1 - dlls/strmbase/renderer.c | 7 ------- include/wine/strmbase.h | 1 - 3 files changed, 9 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index e295e32f669..ee0473478ba 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -737,7 +737,6 @@ static HRESULT WINAPI DSoundRender_Pause(IBaseFilter * iface) ResetEvent(This->blocked); ResetEvent(This->renderer.RenderEvent); } - ResetEvent(This->renderer.ThreadSignal); LeaveCriticalSection(&This->renderer.csRenderLock);
return hr; diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index b35011ec641..fa4f0f3c93f 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -281,7 +281,6 @@ HRESULT WINAPI strmbase_renderer_init(BaseRenderer *filter, const IBaseFilterVtb InitializeCriticalSection(&filter->csRenderLock); filter->csRenderLock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__": BaseRenderer.csRenderLock"); filter->evComplete = CreateEventW(NULL, TRUE, TRUE, NULL); - filter->ThreadSignal = CreateEventW(NULL, TRUE, TRUE, NULL); filter->RenderEvent = CreateEventW(NULL, FALSE, FALSE, NULL); filter->pMediaSample = NULL;
@@ -306,7 +305,6 @@ void strmbase_renderer_cleanup(BaseRenderer *filter)
BaseRendererImpl_ClearPendingSample(filter); CloseHandle(filter->evComplete); - CloseHandle(filter->ThreadSignal); CloseHandle(filter->RenderEvent); QualityControlImpl_Destroy(filter->qcimpl); strmbase_filter_cleanup(&filter->filter); @@ -418,7 +416,6 @@ HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter * iface) This->pFuncsTable->pfnOnStopStreaming(This); This->filter.state = State_Stopped; SetEvent(This->evComplete); - SetEvent(This->ThreadSignal); SetEvent(This->RenderEvent); } LeaveCriticalSection(&This->csRenderLock); @@ -438,7 +435,6 @@ HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart) goto out;
SetEvent(This->evComplete); - ResetEvent(This->ThreadSignal);
if (This->sink.pin.pConnectedTo) { @@ -496,7 +492,6 @@ HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter * iface) This->filter.state = State_Paused; } } - ResetEvent(This->ThreadSignal); LeaveCriticalSection(&This->csRenderLock);
return S_OK; @@ -559,7 +554,6 @@ HRESULT WINAPI BaseRendererImpl_BeginFlush(BaseRenderer* iface) { TRACE("(%p)\n", iface); BaseRendererImpl_ClearPendingSample(iface); - SetEvent(iface->ThreadSignal); SetEvent(iface->RenderEvent); return S_OK; } @@ -569,7 +563,6 @@ HRESULT WINAPI BaseRendererImpl_EndFlush(BaseRenderer* iface) TRACE("(%p)\n", iface); QualityControlRender_Start(iface->qcimpl, iface->filter.rtStreamStart); RendererPosPassThru_ResetMediaTime(iface->pPosition); - ResetEvent(iface->ThreadSignal); ResetEvent(iface->RenderEvent); return S_OK; } diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index d3df095fde7..5892efcf197 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -541,7 +541,6 @@ typedef struct BaseRendererTag IUnknown *pPosition; CRITICAL_SECTION csRenderLock; HANDLE evComplete; - HANDLE ThreadSignal; HANDLE RenderEvent; IMediaSample *pMediaSample;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/dsoundrender.c | 2 +- dlls/quartz/videorenderer.c | 1 - dlls/strmbase/renderer.c | 16 ++++++++-------- include/wine/strmbase.h | 4 +++- 4 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index ee0473478ba..a8068da61cd 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -726,7 +726,7 @@ static HRESULT WINAPI DSoundRender_Pause(IBaseFilter * iface) if (This->renderer.filter.state == State_Stopped) { if (This->renderer.sink.pin.pConnectedTo) - ResetEvent(This->renderer.evComplete); + ResetEvent(This->renderer.state_event); This->renderer.sink.end_of_stream = 0; }
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index 2121a0000bb..e905be516e0 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -51,7 +51,6 @@ typedef struct VideoRendererImpl
DWORD ThreadID; HANDLE hEvent; -/* hEvent == evComplete? */ BOOL ThreadResult; RECT SourceRect; RECT DestRect; diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index fa4f0f3c93f..0e5dd8c2fcc 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -280,7 +280,7 @@ HRESULT WINAPI strmbase_renderer_init(BaseRenderer *filter, const IBaseFilterVtb
InitializeCriticalSection(&filter->csRenderLock); filter->csRenderLock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__": BaseRenderer.csRenderLock"); - filter->evComplete = CreateEventW(NULL, TRUE, TRUE, NULL); + filter->state_event = CreateEventW(NULL, TRUE, TRUE, NULL); filter->RenderEvent = CreateEventW(NULL, FALSE, FALSE, NULL); filter->pMediaSample = NULL;
@@ -304,7 +304,7 @@ void strmbase_renderer_cleanup(BaseRenderer *filter) DeleteCriticalSection(&filter->csRenderLock);
BaseRendererImpl_ClearPendingSample(filter); - CloseHandle(filter->evComplete); + CloseHandle(filter->state_event); CloseHandle(filter->RenderEvent); QualityControlImpl_Destroy(filter->qcimpl); strmbase_filter_cleanup(&filter->filter); @@ -355,7 +355,7 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp if (This->pFuncsTable->pfnOnReceiveFirstSample) This->pFuncsTable->pfnOnReceiveFirstSample(This, pSample);
- SetEvent(This->evComplete); + SetEvent(This->state_event); }
/* Wait for render Time */ @@ -415,7 +415,7 @@ HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter * iface) if (This->pFuncsTable->pfnOnStopStreaming) This->pFuncsTable->pfnOnStopStreaming(This); This->filter.state = State_Stopped; - SetEvent(This->evComplete); + SetEvent(This->state_event); SetEvent(This->RenderEvent); } LeaveCriticalSection(&This->csRenderLock); @@ -434,7 +434,7 @@ HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart) if (This->filter.state == State_Running) goto out;
- SetEvent(This->evComplete); + SetEvent(This->state_event);
if (This->sink.pin.pConnectedTo) { @@ -480,7 +480,7 @@ HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter * iface) if (This->filter.state == State_Stopped) { if (This->sink.pin.pConnectedTo) - ResetEvent(This->evComplete); + ResetEvent(This->state_event); This->sink.end_of_stream = FALSE; } else if (This->pFuncsTable->pfnOnStopStreaming) @@ -517,7 +517,7 @@ HRESULT WINAPI BaseRendererImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsT
TRACE("(%p)->(%d, %p)\n", This, dwMilliSecsTimeout, pState);
- if (WaitForSingleObject(This->evComplete, dwMilliSecsTimeout) == WAIT_TIMEOUT) + if (WaitForSingleObject(This->state_event, dwMilliSecsTimeout) == WAIT_TIMEOUT) hr = VFW_S_STATE_INTERMEDIATE; else hr = S_OK; @@ -545,7 +545,7 @@ HRESULT WINAPI BaseRendererImpl_EndOfStream(BaseRenderer* iface) } } RendererPosPassThru_EOS(iface->pPosition); - SetEvent(iface->evComplete); + SetEvent(iface->state_event);
return hr; } diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 5892efcf197..28a973da1ff 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -540,7 +540,9 @@ typedef struct BaseRendererTag BaseInputPin sink; IUnknown *pPosition; CRITICAL_SECTION csRenderLock; - HANDLE evComplete; + /* Signaled when the filter has completed a state change. The filter waits + * for this event in IBaseFilter::GetState(). */ + HANDLE state_event; HANDLE RenderEvent; IMediaSample *pMediaSample;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54327
Your paranoid android.
=== debian9 (build log) ===
Task: WineTest did not produce the wow32 report
Try to make the quality control object more clearly responsible for calculating quality after the fact, and only that.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/qualitycontrol.c | 65 +++++++++++--------------------- dlls/strmbase/renderer.c | 26 ++++++++++--- dlls/strmbase/strmbase_private.h | 3 +- 3 files changed, 44 insertions(+), 50 deletions(-)
diff --git a/dlls/strmbase/qualitycontrol.c b/dlls/strmbase/qualitycontrol.c index d6a91a7133e..139c4dfe862 100644 --- a/dlls/strmbase/qualitycontrol.c +++ b/dlls/strmbase/qualitycontrol.c @@ -171,46 +171,6 @@ static BOOL QualityControlRender_IsLate(QualityControlImpl *This, REFERENCE_TIME return FALSE; }
-HRESULT QualityControlRender_WaitFor(QualityControlImpl *This, IMediaSample *sample, HANDLE ev) -{ - REFERENCE_TIME start = -1, stop = -1, jitter = 0; - - TRACE("%p %p %p\n", This, sample, ev); - - This->current_rstart = This->current_rstop = -1; - This->current_jitter = 0; - if (!This->clock || FAILED(IMediaSample_GetTime(sample, &start, &stop))) - return S_OK; - - if (start >= 0) { - REFERENCE_TIME now; - IReferenceClock_GetTime(This->clock, &now); - now -= This->clockstart; - - jitter = now - start; - if (jitter <= -10000) { - DWORD_PTR cookie; - IReferenceClock_AdviseTime(This->clock, This->clockstart, start, (HEVENT)ev, &cookie); - WaitForSingleObject(ev, INFINITE); - IReferenceClock_Unadvise(This->clock, cookie); - } - } - else - start = stop = -1; - This->current_rstart = start; - This->current_rstop = stop > start ? stop : start; - This->current_jitter = jitter; - This->is_dropped = QualityControlRender_IsLate(This, jitter, start, stop); - TRACE("Dropped: %i %i %i %i\n", This->is_dropped, (int)(start/10000), (int)(stop/10000), (int)(jitter / 10000)); - if (This->is_dropped) { - This->dropped++; - if (!This->qos_handled) - return S_FALSE; - } else - This->rendered++; - return S_OK; -} - void QualityControlRender_DoQOS(QualityControlImpl *priv) { REFERENCE_TIME start, stop, jitter, pt, entered, left, duration; @@ -324,12 +284,31 @@ void QualityControlRender_DoQOS(QualityControlImpl *priv) }
-void QualityControlRender_BeginRender(QualityControlImpl *This) +void QualityControlRender_BeginRender(QualityControlImpl *This, REFERENCE_TIME start, REFERENCE_TIME stop) { - TRACE("%p\n", This); - This->start = -1;
+ This->current_rstart = start; + This->current_rstop = max(stop, start); + + if (start >= 0) + { + REFERENCE_TIME now; + IReferenceClock_GetTime(This->clock, &now); + This->current_jitter = (now - This->clockstart) - start; + } + else + This->current_jitter = 0; + + /* FIXME: This isn't correct; we don't drop samples, nor should. */ + This->is_dropped = QualityControlRender_IsLate(This, This->current_jitter, start, stop); + TRACE("Dropped: %i %i %i %i\n", This->is_dropped, (int)(start/10000), + (int)(stop/10000), (int)(This->current_jitter / 10000)); + if (This->is_dropped) + This->dropped++; + else + This->rendered++; + if (!This->clock) return;
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index 0e5dd8c2fcc..33a9d3fecce 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -359,7 +359,7 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp }
/* Wait for render Time */ - if (SUCCEEDED(IMediaSample_GetTime(pSample, &start, &stop))) + if (This->filter.pClock && SUCCEEDED(IMediaSample_GetTime(pSample, &start, &stop))) { hr = S_FALSE; RendererPosPassThru_RegisterMediaTime(This->pPosition, start); @@ -370,12 +370,26 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp ;/* Do not wait: drop through */ else if (hr == S_FALSE) { + REFERENCE_TIME now; + DWORD_PTR cookie; + if (This->pFuncsTable->pfnOnWaitStart) This->pFuncsTable->pfnOnWaitStart(This);
- LeaveCriticalSection(&This->csRenderLock); - hr = QualityControlRender_WaitFor(This->qcimpl, pSample, This->RenderEvent); - EnterCriticalSection(&This->csRenderLock); + IReferenceClock_GetTime(This->filter.pClock, &now); + + if (now - This->filter.rtStreamStart - start <= -10000) + { + IReferenceClock_AdviseTime(This->filter.pClock, This->filter.rtStreamStart, + start, (HEVENT)This->RenderEvent, &cookie); + + LeaveCriticalSection(&This->csRenderLock); + + WaitForSingleObject(This->RenderEvent, INFINITE); + IReferenceClock_Unadvise(This->filter.pClock, cookie); + + EnterCriticalSection(&This->csRenderLock); + }
if (This->pFuncsTable->pfnOnWaitEnd) This->pFuncsTable->pfnOnWaitEnd(This); @@ -387,10 +401,12 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp return S_OK; } } + else + start = stop = -1;
if (SUCCEEDED(hr)) { - QualityControlRender_BeginRender(This->qcimpl); + QualityControlRender_BeginRender(This->qcimpl, start, stop); hr = This->pFuncsTable->pfnDoRenderSample(This, pSample); QualityControlRender_EndRender(This->qcimpl); } diff --git a/dlls/strmbase/strmbase_private.h b/dlls/strmbase/strmbase_private.h index 769c8f20864..439ab9aefaf 100644 --- a/dlls/strmbase/strmbase_private.h +++ b/dlls/strmbase/strmbase_private.h @@ -59,9 +59,8 @@ HRESULT WINAPI QualityControlImpl_SetSink(IQualityControl *iface, IQualityContro
void QualityControlRender_Start(QualityControlImpl *This, REFERENCE_TIME tStart); void QualityControlRender_SetClock(QualityControlImpl *This, IReferenceClock *clock); -HRESULT QualityControlRender_WaitFor(QualityControlImpl *This, IMediaSample *sample, HANDLE ev); void QualityControlRender_DoQOS(QualityControlImpl *priv); -void QualityControlRender_BeginRender(QualityControlImpl *This); +void QualityControlRender_BeginRender(QualityControlImpl *This, REFERENCE_TIME start, REFERENCE_TIME stop); void QualityControlRender_EndRender(QualityControlImpl *This);
HRESULT enum_pins_create(BaseFilter *base, IEnumPins **enum_pins);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54328
Your paranoid android.
=== debian9 (build log) ===
Task: WineTest did not produce the wow32 report
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/renderer.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index 33a9d3fecce..e5c3a1bbda8 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -474,7 +474,6 @@ HRESULT WINAPI BaseRendererImpl_Run(IBaseFilter * iface, REFERENCE_TIME tStart) This->pFuncsTable->pfnOnStartStreaming(This); if (This->filter.state == State_Stopped) BaseRendererImpl_ClearPendingSample(This); - SetEvent(This->RenderEvent); This->filter.state = State_Running; } out:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54329
Your paranoid android.
=== debian9 (build log) ===
Task: WineTest did not produce the wow32 report
While it's certainly possible to use one event for both purposes, it's a little less clear, and it makes it a little more difficult to do other waits that need to be interrupted by flushing. For example, the video renderer should block in Receive() after rendering the sample until the filter is run.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/dsoundrender.c | 2 +- dlls/quartz/videorenderer.c | 2 +- dlls/strmbase/renderer.c | 20 ++++++++++++-------- include/wine/strmbase.h | 27 ++++++++++++++++----------- 4 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index a8068da61cd..f9fef51b562 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -735,7 +735,7 @@ static HRESULT WINAPI DSoundRender_Pause(IBaseFilter * iface) This->renderer.filter.state = State_Paused;
ResetEvent(This->blocked); - ResetEvent(This->renderer.RenderEvent); + ResetEvent(This->renderer.flush_event); } LeaveCriticalSection(&This->renderer.csRenderLock);
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index e905be516e0..9a10fd275a0 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -679,7 +679,7 @@ static HRESULT WINAPI VideoRenderer_Pause(IBaseFilter * iface) VideoRenderer_AutoShowWindow(This); }
- ResetEvent(This->renderer.RenderEvent); + ResetEvent(This->renderer.flush_event); This->renderer.filter.state = State_Paused; } LeaveCriticalSection(&This->renderer.csRenderLock); diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index e5c3a1bbda8..11bfacb9dd4 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -281,7 +281,8 @@ HRESULT WINAPI strmbase_renderer_init(BaseRenderer *filter, const IBaseFilterVtb InitializeCriticalSection(&filter->csRenderLock); filter->csRenderLock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__": BaseRenderer.csRenderLock"); filter->state_event = CreateEventW(NULL, TRUE, TRUE, NULL); - filter->RenderEvent = CreateEventW(NULL, FALSE, FALSE, NULL); + filter->advise_event = CreateEventW(NULL, FALSE, FALSE, NULL); + filter->flush_event = CreateEventW(NULL, TRUE, TRUE, NULL); filter->pMediaSample = NULL;
QualityControlImpl_Create(&filter->sink.pin.IPin_iface, &filter->filter.IBaseFilter_iface, &filter->qcimpl); @@ -305,7 +306,8 @@ void strmbase_renderer_cleanup(BaseRenderer *filter)
BaseRendererImpl_ClearPendingSample(filter); CloseHandle(filter->state_event); - CloseHandle(filter->RenderEvent); + CloseHandle(filter->advise_event); + CloseHandle(filter->flush_event); QualityControlImpl_Destroy(filter->qcimpl); strmbase_filter_cleanup(&filter->filter); } @@ -380,12 +382,14 @@ HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSamp
if (now - This->filter.rtStreamStart - start <= -10000) { + HANDLE handles[2] = {This->advise_event, This->flush_event}; + IReferenceClock_AdviseTime(This->filter.pClock, This->filter.rtStreamStart, - start, (HEVENT)This->RenderEvent, &cookie); + start, (HEVENT)This->advise_event, &cookie);
LeaveCriticalSection(&This->csRenderLock);
- WaitForSingleObject(This->RenderEvent, INFINITE); + WaitForMultipleObjects(2, handles, FALSE, INFINITE); IReferenceClock_Unadvise(This->filter.pClock, cookie);
EnterCriticalSection(&This->csRenderLock); @@ -432,7 +436,7 @@ HRESULT WINAPI BaseRendererImpl_Stop(IBaseFilter * iface) This->pFuncsTable->pfnOnStopStreaming(This); This->filter.state = State_Stopped; SetEvent(This->state_event); - SetEvent(This->RenderEvent); + SetEvent(This->flush_event); } LeaveCriticalSection(&This->csRenderLock);
@@ -503,7 +507,7 @@ HRESULT WINAPI BaseRendererImpl_Pause(IBaseFilter * iface)
if (This->filter.state == State_Stopped) BaseRendererImpl_ClearPendingSample(This); - ResetEvent(This->RenderEvent); + ResetEvent(This->flush_event); This->filter.state = State_Paused; } } @@ -569,7 +573,7 @@ HRESULT WINAPI BaseRendererImpl_BeginFlush(BaseRenderer* iface) { TRACE("(%p)\n", iface); BaseRendererImpl_ClearPendingSample(iface); - SetEvent(iface->RenderEvent); + SetEvent(iface->flush_event); return S_OK; }
@@ -578,7 +582,7 @@ HRESULT WINAPI BaseRendererImpl_EndFlush(BaseRenderer* iface) TRACE("(%p)\n", iface); QualityControlRender_Start(iface->qcimpl, iface->filter.rtStreamStart); RendererPosPassThru_ResetMediaTime(iface->pPosition); - ResetEvent(iface->RenderEvent); + ResetEvent(iface->flush_event); return S_OK; }
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 28a973da1ff..a1cfb1f7b16 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -535,21 +535,26 @@ HRESULT WINAPI BaseControlVideo_Destroy(BaseControlVideo *pControlVideo); /* BaseRenderer Filter */ typedef struct BaseRendererTag { - BaseFilter filter; + BaseFilter filter;
- BaseInputPin sink; - IUnknown *pPosition; - CRITICAL_SECTION csRenderLock; + BaseInputPin sink; + IUnknown *pPosition; + CRITICAL_SECTION csRenderLock; /* Signaled when the filter has completed a state change. The filter waits * for this event in IBaseFilter::GetState(). */ - HANDLE state_event; - HANDLE RenderEvent; - IMediaSample *pMediaSample; - - IQualityControl *pQSink; - struct QualityControlImpl *qcimpl; + HANDLE state_event; + /* Signaled when the sample presentation time occurs. The streaming thread + * waits for this event in Receive() if applicable. */ + HANDLE advise_event; + /* Signaled when a flush or state change occurs, i.e. anything that needs + * to immediately unblock the streaming thread. */ + HANDLE flush_event; + IMediaSample *pMediaSample; + + IQualityControl *pQSink; + struct QualityControlImpl *qcimpl;
- const struct BaseRendererFuncTable * pFuncsTable; + const struct BaseRendererFuncTable *pFuncsTable; } BaseRenderer;
typedef HRESULT (WINAPI *BaseRenderer_CheckMediaType)(BaseRenderer *This, const AM_MEDIA_TYPE *pmt);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54330
Your paranoid android.
=== debian9 (build log) ===
Task: WineTest did not produce the wow32 report
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=54326
Your paranoid android.
=== debian9 (build log) ===
Task: WineTest did not produce the wow32 report