Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/mixer.c | 35 +++++++++++++++++++++++---- dlls/evr/tests/evr.c | 56 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 86 insertions(+), 5 deletions(-)
diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c index f821dc7e6d9..1db2fd3a9f4 100644 --- a/dlls/evr/mixer.c +++ b/dlls/evr/mixer.c @@ -675,14 +675,27 @@ static unsigned int video_mixer_get_interlace_mode_from_video_desc(const DXVA2_V } }
+static void mf_get_attribute_uint32(IMFMediaType *media_type, const GUID *key, UINT32 *value, + UINT32 default_value) +{ + if (FAILED(IMFMediaType_GetUINT32(media_type, key, value))) + *value = default_value; +} + +static void mf_get_attribute_uint64(IMFMediaType *media_type, const GUID *key, UINT64 *value, + UINT64 default_value) +{ + if (FAILED(IMFMediaType_GetUINT64(media_type, key, value))) + *value = default_value; +} + static HRESULT video_mixer_collect_output_types(struct video_mixer *mixer, const DXVA2_VideoDesc *video_desc, IMFMediaType *media_type, IDirectXVideoProcessorService *service, unsigned int device_count, const GUID *devices, unsigned int flags) { - unsigned int i, j, format_count, count, interlace_mode; struct rt_format *rt_formats = NULL, *ptr; + unsigned int i, j, format_count, count; HRESULT hr = MF_E_INVALIDMEDIATYPE; - MFVideoArea aperture; D3DFORMAT *formats; GUID subtype;
@@ -710,6 +723,10 @@ static HRESULT video_mixer_collect_output_types(struct video_mixer *mixer, const
if (count && !(flags & MFT_SET_TYPE_TEST_ONLY)) { + UINT32 fixed_samples, interlace_mode; + MFVideoArea aperture; + UINT64 par; + if (!(mixer->output.rt_formats = calloc(count, sizeof(*mixer->output.rt_formats)))) { free(rt_formats); @@ -718,9 +735,16 @@ static HRESULT video_mixer_collect_output_types(struct video_mixer *mixer, const
memcpy(&subtype, &MFVideoFormat_Base, sizeof(subtype)); memset(&aperture, 0, sizeof(aperture)); - aperture.Area.cx = video_desc->SampleWidth; - aperture.Area.cy = video_desc->SampleHeight; + if (FAILED(IMFMediaType_GetBlob(media_type, &MF_MT_GEOMETRIC_APERTURE, (UINT8 *)&aperture, + sizeof(aperture), NULL))) + { + aperture.Area.cx = video_desc->SampleWidth; + aperture.Area.cy = video_desc->SampleHeight; + } interlace_mode = video_mixer_get_interlace_mode_from_video_desc(video_desc); + mf_get_attribute_uint64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &par, (UINT64)1 << 32 | 1); + mf_get_attribute_uint32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &fixed_samples, 1); + for (i = 0; i < count; ++i) { IMFMediaType *rt_media_type; @@ -731,9 +755,12 @@ static HRESULT video_mixer_collect_output_types(struct video_mixer *mixer, const MFCreateMediaType(&rt_media_type); IMFMediaType_CopyAllItems(media_type, (IMFAttributes *)rt_media_type); IMFMediaType_SetGUID(rt_media_type, &MF_MT_SUBTYPE, &subtype); + IMFMediaType_SetUINT64(rt_media_type, &MF_MT_FRAME_SIZE, (UINT64)aperture.Area.cx << 32 | aperture.Area.cy); IMFMediaType_SetBlob(rt_media_type, &MF_MT_GEOMETRIC_APERTURE, (const UINT8 *)&aperture, sizeof(aperture)); IMFMediaType_SetBlob(rt_media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (const UINT8 *)&aperture, sizeof(aperture)); IMFMediaType_SetUINT32(rt_media_type, &MF_MT_INTERLACE_MODE, interlace_mode); + IMFMediaType_SetUINT64(rt_media_type, &MF_MT_PIXEL_ASPECT_RATIO, par); + IMFMediaType_SetUINT32(rt_media_type, &MF_MT_FIXED_SIZE_SAMPLES, fixed_samples);
mixer->output.rt_formats[i].media_type = rt_media_type; } diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 5bf03fa49f8..818731e1e55 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -946,6 +946,7 @@ static void test_default_mixer_type_negotiation(void) IDirect3DDevice9 *device; IMFMediaType *video_type; IMFTransform *transform; + MFVideoArea aperture; DWORD index, count; IUnknown *unk; HWND window; @@ -1020,10 +1021,19 @@ static void test_default_mixer_type_negotiation(void) ok(hr == S_OK, "Unexpected hr %#x.\n", hr); hr = IMFMediaType_SetUINT32(video_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + memset(&aperture, 0, sizeof(aperture)); + aperture.Area.cx = 100; aperture.Area.cy = 200; + hr = IMFMediaType_SetBlob(video_type, &MF_MT_GEOMETRIC_APERTURE, (UINT8 *)&aperture, sizeof(aperture)); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFMediaType_SetUINT32(video_type, &MF_MT_FIXED_SIZE_SAMPLES, 2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_SetInputType(transform, 0, video_type, MFT_SET_TYPE_TEST_ONLY); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFTransform_GetOutputAvailableType(transform, 0, 0, &media_type); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr); + hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type); ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
@@ -1040,25 +1050,69 @@ static void test_default_mixer_type_negotiation(void) IMFMediaType_Release(media_type); IMFMediaType_Release(media_type2);
+ /* Modified after type was set. */ + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_PIXEL_ASPECT_RATIO, (UINT64)56 << 32 | 55); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + /* Check attributes on available output types. */ index = 0; while (SUCCEEDED(IMFTransform_GetOutputAvailableType(transform, 0, index++, &media_type))) { - UINT64 frame_size; + UINT64 frame_size, ratio; + MFVideoArea aperture; GUID subtype, major; UINT32 value;
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &major); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(IsEqualGUID(&major, &MFMediaType_Video), "Unexpected major type.\n"); hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &subtype); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &frame_size); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(frame_size == ((UINT64)100 << 32 | 200), "Unexpected frame size %s.\n", wine_dbgstr_longlong(frame_size)); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(value == MFVideoInterlace_Progressive, "Unexpected interlace mode.\n"); + /* Ratio from input type */ + hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &ratio); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(ratio == ((UINT64)1 << 32 | 1), "Unexpected PAR %s.\n", wine_dbgstr_longlong(ratio)); + hr = IMFMediaType_GetBlob(media_type, &MF_MT_GEOMETRIC_APERTURE, (UINT8 *)&aperture, sizeof(aperture), NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(aperture.Area.cx == 100 && aperture.Area.cy == 200, "Unexpected aperture area.\n"); + hr = IMFMediaType_GetBlob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (UINT8 *)&aperture, sizeof(aperture), NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(aperture.Area.cx == 100 && aperture.Area.cy == 200, "Unexpected aperture area.\n"); + hr = IMFMediaType_GetUINT32(video_type, &MF_MT_FIXED_SIZE_SAMPLES, &value); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(value == 2, "Unexpected value %u.\n", value); + + IMFMediaType_Release(media_type); + } + ok(index > 1, "Unexpected number of available types.\n"); + + hr = IMFMediaType_DeleteItem(video_type, &MF_MT_FIXED_SIZE_SAMPLES); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFTransform_SetInputType(transform, 0, video_type, 0); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + index = 0; + while (SUCCEEDED(IMFTransform_GetOutputAvailableType(transform, 0, index++, &media_type))) + { + UINT32 value; + UINT64 ratio; + + hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &ratio); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(ratio == ((UINT64)56 << 32 | 55), "Unexpected PAR %s.\n", wine_dbgstr_longlong(ratio)); + + hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(value == 1, "Unexpected value %u.\n", value);
IMFMediaType_Release(media_type); }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/tests/evr.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 818731e1e55..6fb92d9ced1 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1246,9 +1246,7 @@ static void test_default_presenter(void) ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter); - ok(hr == S_OK || broken(hr == E_FAIL) /* WinXP */, "Failed to create default presenter, hr %#x.\n", hr); - if (FAILED(hr)) - return; + ok(hr == S_OK, "Failed to create default presenter, hr %#x.\n", hr);
check_interface(presenter, &IID_IQualProp, TRUE); check_interface(presenter, &IID_IMFVideoPositionMapper, TRUE); @@ -2820,8 +2818,19 @@ static void test_MFIsFormatYUV(void)
START_TEST(evr) { + IMFVideoPresenter *presenter; + HRESULT hr; + CoInitialize(NULL);
+ if (FAILED(hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter))) + { + win_skip("Failed to create default presenter, hr %#x. Skipping tests.\n", hr); + CoUninitialize(); + return; + } + IMFVideoPresenter_Release(presenter); + test_aggregation(); test_interfaces(); test_enum_pins();
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/presenter.c | 5 ++- dlls/evr/tests/evr.c | 74 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 7 deletions(-)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index 5b262e7c663..027d0338896 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -348,6 +348,9 @@ static HRESULT video_presenter_invalidate_media_type(struct video_presenter *pre RECT rect; HRESULT hr;
+ if (!presenter->mixer) + return MF_E_TRANSFORM_TYPE_NOT_SET; + if (FAILED(hr = MFCreateMediaType(&media_type))) return hr;
@@ -965,7 +968,7 @@ static HRESULT WINAPI video_presenter_ProcessMessage(IMFVideoPresenter *iface, M switch (message) { case MFVP_MESSAGE_INVALIDATEMEDIATYPE: - hr = video_presenter_invalidate_media_type(presenter); + hr = presenter->mixer ? video_presenter_invalidate_media_type(presenter) : MF_E_INVALIDREQUEST; break; case MFVP_MESSAGE_BEGINSTREAMING: hr = video_presenter_start_streaming(presenter); diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 6fb92d9ced1..8e3288afaec 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1754,12 +1754,41 @@ static void test_presenter_video_position(void) DWORD count; HWND hwnd;
+ hwnd = create_window(); + ok(!!hwnd, "Failed to create a test window.\n"); + + /* Setting position without the mixer. */ + hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter); + ok(hr == S_OK, "Failed to create default presenter, hr %#x.\n", hr); + hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDisplayControl, (void **)&display_control); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0); + ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr); + SetRect(&dst_rect, 0, 0, 10, 10); + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &dst_rect); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + hr = IMFVideoDisplayControl_SetVideoWindow(display_control, hwnd); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0); + ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr); + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + IMFVideoDisplayControl_Release(display_control); + IMFVideoPresenter_Release(presenter); + + /* With the mixer. */ hr = MFCreateVideoMixer(NULL, &IID_IDirect3DDevice9, &IID_IMFTransform, (void **)&mixer); ok(hr == S_OK, "Failed to create a mixer, hr %#x.\n", hr);
hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter); ok(hr == S_OK, "Failed to create default presenter, hr %#x.\n", hr);
+ hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDisplayControl, (void **)&display_control); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFTopologyServiceLookupClient, (void **)&lookup_client); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -1785,9 +1814,6 @@ static void test_presenter_video_position(void) ok(src_rect.left == 0.0f && src_rect.top == 0.0f && src_rect.right == 1.0f && src_rect.bottom == 1.0f, "Unexpected source rectangle.\n");
- hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDisplayControl, (void **)&display_control); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - hr = IMFVideoDisplayControl_GetVideoPosition(display_control, NULL, &dst_rect); ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
@@ -1806,9 +1832,6 @@ static void test_presenter_video_position(void) ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr);
/* Setting position requires a window. */ - hwnd = create_window(); - ok(!!hwnd, "Failed to create a test window.\n"); - SetRect(&dst_rect, 0, 0, 10, 10); memset(&src_rect, 0, sizeof(src_rect)); hr = IMFVideoDisplayControl_SetVideoPosition(display_control, &src_rect, &dst_rect); @@ -2297,6 +2320,44 @@ done: DestroyWindow(window); }
+static void test_presenter_shutdown(void) +{ + IMFTopologyServiceLookupClient *lookup_client; + IMFVideoPresenter *presenter; + HRESULT hr; + + hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter); + ok(hr == S_OK, "Failed to create default presenter, hr %#x.\n", hr); + + hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFTopologyServiceLookupClient, (void **)&lookup_client); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFTopologyServiceLookupClient_ReleaseServicePointers(lookup_client); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_BEGINSTREAMING, 0); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_ENDSTREAMING, 0); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_ProcessMessage(presenter, MFVP_MESSAGE_PROCESSINPUTNOTIFY, 0); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFTopologyServiceLookupClient_ReleaseServicePointers(lookup_client); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + IMFTopologyServiceLookupClient_Release(lookup_client); + + IMFVideoPresenter_Release(presenter); +} + static void test_mixer_output_rectangle(void) { IMFVideoMixerControl *mixer_control; @@ -2848,6 +2909,7 @@ START_TEST(evr) test_presenter_video_window(); test_presenter_quality_control(); test_presenter_media_type(); + test_presenter_shutdown(); test_mixer_output_rectangle(); test_mixer_zorder(); test_mixer_samples();
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/tests/evr.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 8e3288afaec..b7e3ad174df 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -2323,8 +2323,19 @@ done: static void test_presenter_shutdown(void) { IMFTopologyServiceLookupClient *lookup_client; + IMFVideoDisplayControl *display_control; + IMFVideoMediaType *media_type; IMFVideoPresenter *presenter; + IMFVideoDeviceID *deviceid; + HWND window, window2; HRESULT hr; + DWORD mode; + RECT rect; + SIZE size; + IID iid; + + window = create_window(); + ok(!!window, "Failed to create test window.\n");
hr = MFCreateVideoPresenter(NULL, &IID_IDirect3DDevice9, &IID_IMFVideoPresenter, (void **)&presenter); ok(hr == S_OK, "Failed to create default presenter, hr %#x.\n", hr); @@ -2332,6 +2343,12 @@ static void test_presenter_shutdown(void) hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFTopologyServiceLookupClient, (void **)&lookup_client); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDeviceID, (void **)&deviceid); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDisplayControl, (void **)&display_control); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFTopologyServiceLookupClient_ReleaseServicePointers(lookup_client); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -2350,12 +2367,56 @@ todo_wine todo_wine ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
+ hr = IMFVideoPresenter_GetCurrentMediaType(presenter, &media_type); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDeviceID_GetDeviceID(deviceid, &iid); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetNativeVideoSize(display_control, &size, &size); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetIdealVideoSize(display_control, &size, &size); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + + SetRect(&rect, 0, 0, 10, 10); + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &rect); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, NULL, &rect); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_SetAspectRatioMode(display_control, MFVideoARMode_None); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetAspectRatioMode(display_control, &mode); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_SetVideoWindow(display_control, window); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetVideoWindow(display_control, &window2); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_RepaintVideo(display_control); +todo_wine + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr); + hr = IMFTopologyServiceLookupClient_ReleaseServicePointers(lookup_client); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ IMFVideoDeviceID_Release(deviceid); + IMFVideoDisplayControl_Release(display_control); IMFTopologyServiceLookupClient_Release(lookup_client);
IMFVideoPresenter_Release(presenter); + + DestroyWindow(window); }
static void test_mixer_output_rectangle(void)