mf/tests: Use a helper for supported intefaces checks.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2020-11-13 15:31:35 +03:00 committed by Alexandre Julliard
parent 8b9b16151d
commit 71e13d44f9
1 changed files with 34 additions and 46 deletions

View File

@ -56,6 +56,21 @@ static void _expect_ref(IUnknown* obj, ULONG expected_refcount, int line)
expected_refcount); expected_refcount);
} }
#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
{
IUnknown *iface = iface_ptr;
HRESULT hr, expected_hr;
IUnknown *unk;
expected_hr = supported ? S_OK : E_NOINTERFACE;
hr = IUnknown_QueryInterface(iface, iid, (void **)&unk);
ok_(__FILE__, line)(hr == expected_hr, "Got hr %#x, expected %#x.\n", hr, expected_hr);
if (SUCCEEDED(hr))
IUnknown_Release(unk);
}
static HWND create_window(void) static HWND create_window(void)
{ {
RECT r = {0, 0, 640, 480}; RECT r = {0, 0, 640, 480};
@ -1028,7 +1043,6 @@ static void test_MFGetService(void)
static void test_sequencer_source(void) static void test_sequencer_source(void)
{ {
IMFMediaSourceTopologyProvider *provider;
IMFSequencerSource *seq_source; IMFSequencerSource *seq_source;
HRESULT hr; HRESULT hr;
@ -1038,9 +1052,7 @@ static void test_sequencer_source(void)
hr = MFCreateSequencerSource(NULL, &seq_source); hr = MFCreateSequencerSource(NULL, &seq_source);
ok(hr == S_OK, "Failed to create sequencer source, hr %#x.\n", hr); ok(hr == S_OK, "Failed to create sequencer source, hr %#x.\n", hr);
hr = IMFSequencerSource_QueryInterface(seq_source, &IID_IMFMediaSourceTopologyProvider, (void **)&provider); check_interface(seq_source, &IID_IMFMediaSourceTopologyProvider, TRUE);
ok(hr == S_OK, "Failed to get provider interface, hr %#x.\n", hr);
IMFMediaSourceTopologyProvider_Release(provider);
IMFSequencerSource_Release(seq_source); IMFSequencerSource_Release(seq_source);
@ -1743,7 +1755,6 @@ static void test_presentation_clock(void)
MFTIME systime, time; MFTIME systime, time;
LONGLONG clock_time; LONGLONG clock_time;
MFCLOCK_STATE state; MFCLOCK_STATE state;
IMFTimer *timer;
unsigned int i; unsigned int i;
DWORD value; DWORD value;
float rate; float rate;
@ -1756,6 +1767,12 @@ static void test_presentation_clock(void)
hr = MFCreatePresentationClock(&clock); hr = MFCreatePresentationClock(&clock);
ok(hr == S_OK, "Failed to create presentation clock, hr %#x.\n", hr); ok(hr == S_OK, "Failed to create presentation clock, hr %#x.\n", hr);
check_interface(clock, &IID_IMFTimer, TRUE);
check_interface(clock, &IID_IMFRateControl, TRUE);
check_interface(clock, &IID_IMFPresentationClock, TRUE);
check_interface(clock, &IID_IMFShutdown, TRUE);
check_interface(clock, &IID_IMFClock, TRUE);
hr = IMFPresentationClock_QueryInterface(clock, &IID_IMFRateControl, (void **)&rate_control); hr = IMFPresentationClock_QueryInterface(clock, &IID_IMFRateControl, (void **)&rate_control);
ok(hr == S_OK, "Failed to get rate control interface, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get rate control interface, hr %#x.\n", hr);
@ -1945,10 +1962,6 @@ static void test_presentation_clock(void)
IMFRateControl_Release(rate_control); IMFRateControl_Release(rate_control);
hr = IMFPresentationClock_QueryInterface(clock, &IID_IMFTimer, (void **)&timer);
ok(hr == S_OK, "Failed to get timer interface, hr %#x.\n", hr);
IMFTimer_Release(timer);
hr = IMFPresentationClock_QueryInterface(clock, &IID_IMFShutdown, (void **)&shutdown); hr = IMFPresentationClock_QueryInterface(clock, &IID_IMFShutdown, (void **)&shutdown);
ok(hr == S_OK, "Failed to get shutdown interface, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get shutdown interface, hr %#x.\n", hr);
@ -2084,7 +2097,6 @@ static void test_sample_grabber(void)
IMFPresentationTimeSource *time_source; IMFPresentationTimeSource *time_source;
IMFPresentationClock *clock, *clock2; IMFPresentationClock *clock, *clock2;
IMFStreamSink *stream, *stream2; IMFStreamSink *stream, *stream2;
IMFClockStateSink *clocksink;
IMFMediaEventGenerator *eg; IMFMediaEventGenerator *eg;
IMFMediaSink *sink, *sink2; IMFMediaSink *sink, *sink2;
DWORD flags, count, id; DWORD flags, count, id;
@ -2135,9 +2147,7 @@ static void test_sample_grabber(void)
hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream); hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream);
ok(hr == S_OK, "Failed to get sink stream, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get sink stream, hr %#x.\n", hr);
hr = IMFStreamSink_QueryInterface(stream, &IID_IMFMediaEventGenerator, (void **)&unk); check_interface(stream, &IID_IMFMediaEventGenerator, TRUE);
ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
IUnknown_Release(unk);
hr = IMFStreamSink_GetIdentifier(stream, &id); hr = IMFStreamSink_GetIdentifier(stream, &id);
ok(hr == S_OK, "Failed to get stream id, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get stream id, hr %#x.\n", hr);
@ -2163,9 +2173,7 @@ static void test_sample_grabber(void)
hr = IMFMediaSink_RemoveStreamSink(sink, 1); hr = IMFMediaSink_RemoveStreamSink(sink, 1);
ok(hr == MF_E_STREAMSINKS_FIXED, "Unexpected hr %#x.\n", hr); ok(hr == MF_E_STREAMSINKS_FIXED, "Unexpected hr %#x.\n", hr);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&clocksink); check_interface(sink, &IID_IMFClockStateSink, TRUE);
ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
IMFClockStateSink_Release(clocksink);
/* Event generator. */ /* Event generator. */
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaEventGenerator, (void **)&eg); hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaEventGenerator, (void **)&eg);
@ -2915,14 +2923,9 @@ if (SUCCEEDED(hr))
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
ok(flags == (MEDIASINK_FIXED_STREAMS | MEDIASINK_CAN_PREROLL), "Unexpected flags %#x.\n", flags); ok(flags == (MEDIASINK_FIXED_STREAMS | MEDIASINK_CAN_PREROLL), "Unexpected flags %#x.\n", flags);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaSinkPreroll, (void **)&unk); check_interface(sink, &IID_IMFMediaSinkPreroll, TRUE);
ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr); check_interface(sink, &IID_IMFMediaEventGenerator, TRUE);
IUnknown_Release(unk); check_interface(sink, &IID_IMFClockStateSink, TRUE);
/* Events */
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaEventGenerator, (void **)&unk);
ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
IUnknown_Release(unk);
/* Clock */ /* Clock */
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&state_sink); hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&state_sink);
@ -2971,9 +2974,7 @@ todo_wine
hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream_sink); hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream_sink);
ok(hr == S_OK, "Failed to get a stream, hr %#x.\n", hr); ok(hr == S_OK, "Failed to get a stream, hr %#x.\n", hr);
hr = IMFStreamSink_QueryInterface(stream_sink, &IID_IMFMediaEventGenerator, (void **)&unk); check_interface(stream_sink, &IID_IMFMediaEventGenerator, TRUE);
ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
IUnknown_Release(unk);
hr = IMFStreamSink_GetIdentifier(stream_sink, &id); hr = IMFStreamSink_GetIdentifier(stream_sink, &id);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@ -3236,12 +3237,9 @@ static void test_evr(void)
IMFStreamSink *stream_sink, *stream_sink2; IMFStreamSink *stream_sink, *stream_sink2;
IMFVideoDisplayControl *display_control; IMFVideoDisplayControl *display_control;
IMFMediaType *media_type, *media_type2; IMFMediaType *media_type, *media_type2;
IMFMediaEventGenerator *ev_generator;
IMFVideoSampleAllocator *allocator; IMFVideoSampleAllocator *allocator;
IMFMediaTypeHandler *type_handler; IMFMediaTypeHandler *type_handler;
IMFVideoRenderer *video_renderer; IMFVideoRenderer *video_renderer;
IMFClockStateSink *clock_sink;
IMFMediaSinkPreroll *preroll;
IMFMediaSink *sink, *sink2; IMFMediaSink *sink, *sink2;
IMFAttributes *attributes; IMFAttributes *attributes;
IMFActivate *activate; IMFActivate *activate;
@ -3281,6 +3279,12 @@ static void test_evr(void)
hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink); hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
check_interface(sink, &IID_IMFMediaSinkPreroll, TRUE);
check_interface(sink, &IID_IMFVideoRenderer, TRUE);
check_interface(sink, &IID_IMFMediaEventGenerator, TRUE);
check_interface(sink, &IID_IMFClockStateSink, TRUE);
check_interface(sink, &IID_IMFGetService, TRUE);
hr = MFGetService((IUnknown *)sink, &MR_VIDEO_RENDER_SERVICE, &IID_IMFVideoDisplayControl, hr = MFGetService((IUnknown *)sink, &MR_VIDEO_RENDER_SERVICE, &IID_IMFVideoDisplayControl,
(void **)&display_control); (void **)&display_control);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@ -3443,22 +3447,6 @@ static void test_evr(void)
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
ok(flags == (MEDIASINK_CAN_PREROLL | MEDIASINK_CLOCK_REQUIRED), "Unexpected flags %#x.\n", flags); ok(flags == (MEDIASINK_CAN_PREROLL | MEDIASINK_CLOCK_REQUIRED), "Unexpected flags %#x.\n", flags);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaSinkPreroll, (void **)&preroll);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IMFMediaSinkPreroll_Release(preroll);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFVideoRenderer, (void **)&video_renderer);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IMFVideoRenderer_Release(video_renderer);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFMediaEventGenerator, (void **)&ev_generator);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IMFMediaEventGenerator_Release(ev_generator);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&clock_sink);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IMFClockStateSink_Release(clock_sink);
hr = IMFMediaSink_QueryInterface(sink, &IID_IMFGetService, (void **)&gs); hr = IMFMediaSink_QueryInterface(sink, &IID_IMFGetService, (void **)&gs);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);