Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/amstream/tests/amstream.c | 98 +++++++++++++++++++++++++++++++++- 1 file changed, 96 insertions(+), 2 deletions(-)
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index e42651bb97c..df3cac48754 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -1318,6 +1318,8 @@ struct testmediastreamfilter IMediaStreamFilter IMediaStreamFilter_iface; LONG refcount; unsigned int got_end_of_stream; + unsigned int got_flush; + BOOL flush_cancel_eos; };
static inline struct testmediastreamfilter *impl_from_IMediaStreamFilter(IMediaStreamFilter *iface) @@ -1470,8 +1472,10 @@ static HRESULT WINAPI testmediastreamfilter_WaitUntil(IMediaStreamFilter *iface,
static HRESULT WINAPI testmediastreamfilter_Flush(IMediaStreamFilter *iface, BOOL cancel_eos) { - ok(0, "Unexpected call.\n"); - return E_NOTIMPL; + struct testmediastreamfilter *filter = impl_from_IMediaStreamFilter(iface); + ++filter->got_flush; + filter->flush_cancel_eos = cancel_eos; + return S_OK; }
static HRESULT WINAPI testmediastreamfilter_EndOfStream(IMediaStreamFilter *iface) @@ -4273,9 +4277,11 @@ static void test_audiostream_initialize(void) static void test_audiostream_begin_flush_end_flush(void) { IAMMultiMediaStream *mmstream = create_ammultimediastream(); + struct testmediastreamfilter filter; IAudioStreamSample *stream_sample; IAudioMediaStream *audio_stream; IMediaSample *media_sample; + IAMMediaStream *am_stream; struct testfilter source; IAudioData *audio_data; IGraphBuilder *graph; @@ -4372,6 +4378,49 @@ static void test_audiostream_begin_flush_end_flush(void) IAudioMediaStream_Release(audio_stream); ref = IMediaStream_Release(stream); ok(!ref, "Got outstanding refcount %d.\n", ref); + + testmediastreamfilter_init(&filter); + + hr = CoCreateInstance(&CLSID_AMAudioStream, NULL, CLSCTX_INPROC_SERVER, &IID_IAMMediaStream, (void **)&am_stream); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IAMMediaStream_QueryInterface(am_stream, &IID_IPin, (void **)&pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IAMMediaStream_JoinFilter(am_stream, &filter.IMediaStreamFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + filter.got_flush = 0; + filter.flush_cancel_eos = FALSE; + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 1, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + ok(!filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_EndOfStream(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 2, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + todo_wine ok(filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 3, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + ok(!filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + IPin_Release(pin); + ref = IAMMediaStream_Release(am_stream); + ok(!ref, "Got outstanding refcount %d.\n", ref); }
static IMediaSample *ammediastream_allocate_sample(struct testfilter *source, const BYTE *input_data, DWORD input_length) @@ -5752,8 +5801,10 @@ static void test_ddrawstream_begin_flush_end_flush(void) IAMMultiMediaStream *mmstream = create_ammultimediastream(); IDirectDrawStreamSample *stream_sample; IDirectDrawMediaStream *ddraw_stream; + struct testmediastreamfilter filter; IMediaSample *media_sample; IMediaFilter *media_filter; + IAMMediaStream *am_stream; struct testfilter source; IGraphBuilder *graph; IMediaStream *stream; @@ -5860,6 +5911,49 @@ static void test_ddrawstream_begin_flush_end_flush(void) IDirectDrawMediaStream_Release(ddraw_stream); ref = IMediaStream_Release(stream); ok(!ref, "Got outstanding refcount %d.\n", ref); + + testmediastreamfilter_init(&filter); + + hr = CoCreateInstance(&CLSID_AMDirectDrawStream, NULL, CLSCTX_INPROC_SERVER, &IID_IAMMediaStream, (void **)&am_stream); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IAMMediaStream_QueryInterface(am_stream, &IID_IPin, (void **)&pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IAMMediaStream_JoinFilter(am_stream, &filter.IMediaStreamFilter_iface); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + filter.got_flush = 0; + filter.flush_cancel_eos = FALSE; + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 1, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + ok(!filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_EndOfStream(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 2, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + todo_wine ok(filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IPin_BeginFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(filter.got_flush == 3, "Got %d calls to IMediaStreamFilter::EndOfStream().\n", filter.got_flush); + ok(!filter.flush_cancel_eos, "Got cancel_eos %d.\n", filter.flush_cancel_eos); + + hr = IPin_EndFlush(pin); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + IPin_Release(pin); + ref = IAMMediaStream_Release(am_stream); + ok(!ref, "Got outstanding refcount %d.\n", ref); }
static void test_ddrawstream_new_segment(void)