Nikolay Sivov : mf/evr: Return current clock for MR_VIDEO_RENDER_SERVICE requests.
Alexandre Julliard
julliard at winehq.org
Fri Apr 16 15:56:22 CDT 2021
Module: wine
Branch: master
Commit: 0e43ee27461d57efb6e7996b2b99a1d17c673d92
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0e43ee27461d57efb6e7996b2b99a1d17c673d92
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Apr 16 16:54:56 2021 +0300
mf/evr: Return current clock for MR_VIDEO_RENDER_SERVICE requests.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mf/evr.c | 7 +++++++
dlls/mf/tests/mf.c | 36 +++++++++++++++++++++++++++++++++---
2 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 6c71741436b..9cb6763da4e 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -2068,6 +2068,13 @@ static HRESULT WINAPI video_renderer_service_lookup_LookupService(IMFTopologySer
*objects = &renderer->IMediaEventSink_iface;
IUnknown_AddRef((IUnknown *)*objects);
}
+ else if (IsEqualIID(riid, &IID_IMFClock))
+ {
+ *objects = renderer->clock;
+ if (*objects)
+ IUnknown_AddRef((IUnknown *)*objects);
+ hr = *objects ? S_OK : E_NOINTERFACE;
+ }
else
{
FIXME("Unsupported interface %s for render service.\n", debugstr_guid(riid));
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index a5c306a93a0..bf482ae4c71 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -4212,9 +4212,11 @@ static void test_evr(void)
IMFStreamSink *stream_sink, *stream_sink2;
IMFVideoDisplayControl *display_control;
IMFMediaType *media_type, *media_type2;
+ IMFPresentationTimeSource *time_source;
IMFVideoSampleAllocator *allocator;
IMFMediaTypeHandler *type_handler;
IMFVideoRenderer *video_renderer;
+ IMFPresentationClock *clock;
IMFMediaSink *sink, *sink2;
IMFAttributes *attributes;
DWORD flags, count, value;
@@ -4228,8 +4230,8 @@ static void test_evr(void)
HRESULT hr;
GUID guid;
- hr = CoInitialize(NULL);
- ok(hr == S_OK, "Failed to initialize, hr %#x.\n", hr);
+ hr = MFStartup(MF_VERSION, MFSTARTUP_FULL);
+ ok(hr == S_OK, "Startup failure, hr %#x.\n", hr);
hr = MFCreateVideoRenderer(&IID_IMFVideoRenderer, (void **)&video_renderer);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -4481,7 +4483,35 @@ todo_wine
IMFActivate_Release(activate);
- CoUninitialize();
+ /* Set clock. */
+ window = create_window();
+
+ hr = MFCreateVideoRendererActivate(window, &activate);
+ ok(hr == S_OK, "Failed to create activate object, hr %#x.\n", hr);
+
+ hr = IMFActivate_ActivateObject(activate, &IID_IMFMediaSink, (void **)&sink);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreateSystemTimeSource(&time_source);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreatePresentationClock(&clock);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPresentationClock_SetTimeSource(clock, time_source);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ IMFPresentationTimeSource_Release(time_source);
+
+ hr = IMFMediaSink_SetPresentationClock(sink, clock);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ IMFPresentationClock_Release(clock);
+
+ IMFActivate_Release(activate);
+ DestroyWindow(window);
+
+ hr = MFShutdown();
+ ok(hr == S_OK, "Shutdown failure, hr %#x.\n", hr);
}
static void test_MFCreateSimpleTypeHandler(void)
More information about the wine-cvs
mailing list