amstream: Implement MediaStreamFilter::Flush.

Signed-off-by: Anton Baskanov <baskanov@gmail.com>
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Anton Baskanov 2020-10-29 11:41:01 +07:00 committed by Alexandre Julliard
parent 0c3bb47589
commit 4919b9b99f
2 changed files with 49 additions and 3 deletions

View file

@ -750,11 +750,28 @@ static HRESULT WINAPI filter_WaitUntil(IMediaStreamFilter *iface, REFERENCE_TIME
return hr;
}
static HRESULT WINAPI filter_Flush(IMediaStreamFilter *iface, BOOL bCancelEOS)
static HRESULT WINAPI filter_Flush(IMediaStreamFilter *iface, BOOL cancel_eos)
{
FIXME("(%p)->(%d): Stub!\n", iface, bCancelEOS);
struct filter *filter = impl_from_IMediaStreamFilter(iface);
struct event *event;
return E_NOTIMPL;
TRACE("filter %p, cancel_eos %d.\n", iface, cancel_eos);
EnterCriticalSection(&filter->cs);
LIST_FOR_EACH_ENTRY(event, &filter->used_events, struct event, entry)
{
if (!event->interrupted)
{
event->interrupted = TRUE;
IReferenceClock_Unadvise(filter->clock, event->cookie);
SetEvent(event->event);
}
}
LeaveCriticalSection(&filter->cs);
return S_OK;
}
static HRESULT WINAPI filter_EndOfStream(IMediaStreamFilter *iface)

View file

@ -6839,6 +6839,35 @@ static void test_mediastreamfilter_wait_until(void)
ok(!WaitForSingleObject(cookie2.advise_time_called_event, 2000), "Expected AdviseTime to be called.\n");
ok(WaitForSingleObject(thread2, 100) == WAIT_TIMEOUT, "WaitUntil returned prematurely.\n");
hr = IMediaStreamFilter_Flush(filter, FALSE);
ok(hr == S_OK, "Got hr %#x.\n", hr);
ok(cookie1.unadvise_called, "Expected Unadvise to be called.\n");
ok(cookie2.unadvise_called, "Expected Unadvise to be called.\n");
ok(!WaitForSingleObject(thread1, 2000), "Wait timed out.\n");
CloseHandle(thread1);
ok(!WaitForSingleObject(thread2, 2000), "Wait timed out.\n");
CloseHandle(thread2);
clock.advise_time_cookie = &cookie1;
params1.filter = filter;
params1.time = 23456789;
params1.expected_hr = S_FALSE;
thread1 = CreateThread(NULL, 0, mediastreamfilter_wait_until, &params1, 0, NULL);
ok(!WaitForSingleObject(cookie1.advise_time_called_event, 2000), "Expected AdviseTime to be called.\n");
ok(WaitForSingleObject(thread1, 100) == WAIT_TIMEOUT, "WaitUntil returned prematurely.\n");
clock.advise_time_cookie = &cookie2;
params2.filter = filter;
params2.time = 23456789;
params2.expected_hr = S_FALSE;
thread2 = CreateThread(NULL, 0, mediastreamfilter_wait_until, &params2, 0, NULL);
ok(!WaitForSingleObject(cookie2.advise_time_called_event, 2000), "Expected AdviseTime to be called.\n");
ok(WaitForSingleObject(thread2, 100) == WAIT_TIMEOUT, "WaitUntil returned prematurely.\n");
hr = IMediaStreamFilter_Stop(filter);
ok(hr == S_OK, "Got hr %#x.\n", hr);