From e4dbaeebbd5c205ec48a824043093092c757753c Mon Sep 17 00:00:00 2001 From: Anton Baskanov Date: Wed, 6 Jan 2016 23:29:42 +0600 Subject: [PATCH] quartz: Handle NULL target format in FilterGraph::ConvertTimeFormat. Signed-off-by: Anton Baskanov Signed-off-by: Alexandre Julliard --- dlls/quartz/filtergraph.c | 3 +++ dlls/quartz/tests/filtergraph.c | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c index 5b4b080e4a3..5cb670e4871 100644 --- a/dlls/quartz/filtergraph.c +++ b/dlls/quartz/filtergraph.c @@ -2530,6 +2530,9 @@ static HRESULT WINAPI MediaSeeking_ConvertTimeFormat(IMediaSeeking *iface, LONGL if (!pSourceFormat) pSourceFormat = &This->timeformatseek; + if (!pTargetFormat) + pTargetFormat = &This->timeformatseek; + if (IsEqualGUID(pTargetFormat, pSourceFormat)) *pTarget = Source; else diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c index 39d6e88a321..87b11233ba4 100644 --- a/dlls/quartz/tests/filtergraph.c +++ b/dlls/quartz/tests/filtergraph.c @@ -255,6 +255,7 @@ static void test_mediacontrol(void) { HRESULT hr; LONGLONG pos = 0xdeadbeef; + GUID format = GUID_NULL; IMediaSeeking *seeking = NULL; IMediaFilter *filter = NULL; IMediaControl *control = NULL; @@ -282,6 +283,26 @@ static void test_mediacontrol(void) return; } + format = GUID_NULL; + hr = IMediaSeeking_GetTimeFormat(seeking, &format); + ok(hr == S_OK, "GetTimeFormat failed: %08x\n", hr); + ok(IsEqualGUID(&format, &TIME_FORMAT_MEDIA_TIME), "GetTimeFormat: unexpected format %s\n", wine_dbgstr_guid(&format)); + + pos = 0xdeadbeef; + hr = IMediaSeeking_ConvertTimeFormat(seeking, &pos, NULL, 0x123456789a, NULL); + ok(hr == S_OK, "ConvertTimeFormat failed: %08x\n", hr); + ok(pos == 0x123456789a, "ConvertTimeFormat: expected 123456789a, got (%x%08x)\n", (DWORD)(pos >> 32), (DWORD)pos); + + pos = 0xdeadbeef; + hr = IMediaSeeking_ConvertTimeFormat(seeking, &pos, &TIME_FORMAT_MEDIA_TIME, 0x123456789a, NULL); + ok(hr == S_OK, "ConvertTimeFormat failed: %08x\n", hr); + ok(pos == 0x123456789a, "ConvertTimeFormat: expected 123456789a, got (%x%08x)\n", (DWORD)(pos >> 32), (DWORD)pos); + + pos = 0xdeadbeef; + hr = IMediaSeeking_ConvertTimeFormat(seeking, &pos, NULL, 0x123456789a, &TIME_FORMAT_MEDIA_TIME); + ok(hr == S_OK, "ConvertTimeFormat failed: %08x\n", hr); + ok(pos == 0x123456789a, "ConvertTimeFormat: expected 123456789a, got (%x%08x)\n", (DWORD)(pos >> 32), (DWORD)pos); + hr = IMediaSeeking_GetCurrentPosition(seeking, &pos); ok(hr == S_OK, "GetCurrentPosition failed: %08x\n", hr); ok(pos == 0, "Position != 0 (%x%08x)\n", (DWORD)(pos >> 32), (DWORD)pos);