From: Bernhard Kölbl besentv@gmail.com
To be able to create MfMediaEngine instances in Direct3D mode. --- dlls/mfmediaengine/tests/mfmediaengine.c | 43 +++++++++++++++--------- 1 file changed, 28 insertions(+), 15 deletions(-)
diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 008ee58849c..e19c248b8df 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -138,24 +138,37 @@ static struct media_engine_notify *create_callback(void) return object; }
-static IMFMediaEngine *create_media_engine(IMFMediaEngineNotify *callback) +static IMFMediaEngine *create_media_engine(IMFMediaEngineNotify *callback, IUnknown *d3d11_dev, UINT32 output_format) { - IMFDXGIDeviceManager *manager; - IMFMediaEngine *media_engine; - IMFAttributes *attributes; + IMFDXGIDeviceManager *manager = NULL; + IMFMediaEngine *media_engine = NULL; + IMFAttributes *attributes = NULL; UINT token; HRESULT hr;
hr = pMFCreateDXGIDeviceManager(&token, &manager); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
- hr = MFCreateAttributes(&attributes, 3); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + if (d3d11_dev) + { + hr = pMFCreateDXGIDeviceManager(&token, &manager); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFDXGIDeviceManager_ResetDevice(manager, d3d11_dev, token); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFAttributes_SetUnknown(attributes, &MF_MEDIA_ENGINE_DXGI_MANAGER, (IUnknown *)manager); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + }
hr = IMFAttributes_SetUnknown(attributes, &MF_MEDIA_ENGINE_CALLBACK, (IUnknown *)callback); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = IMFAttributes_SetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, DXGI_FORMAT_UNKNOWN); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + if (output_format) + { + hr = IMFAttributes_SetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, output_format); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + }
hr = IMFMediaEngineClassFactory_CreateInstance(factory, 0, attributes, &media_engine); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -168,7 +181,7 @@ static IMFMediaEngine *create_media_engine(IMFMediaEngineNotify *callback)
static IMFMediaEngineEx *create_media_engine_ex(IMFMediaEngineNotify *callback) { - IMFMediaEngine *engine = create_media_engine(callback); + IMFMediaEngine *engine = create_media_engine(callback, NULL, DXGI_FORMAT_UNKNOWN); IMFMediaEngineEx *engine_ex = NULL;
if (engine) @@ -331,7 +344,7 @@ static void test_Shutdown(void)
notify = create_callback();
- media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
hr = IMFMediaEngine_Shutdown(media_engine); ok(hr == S_OK, "Failed to shut down, hr %#lx.\n", hr); @@ -518,7 +531,7 @@ static void test_Play(void)
notify = create_callback();
- media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
hr = IMFMediaEngine_GetBuffered(media_engine, &range); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -567,7 +580,7 @@ static void test_Play(void) IMFMediaEngine_Release(media_engine);
/* Play -> Pause */ - media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
hr = IMFMediaEngine_Play(media_engine); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -594,7 +607,7 @@ static void test_playback_rate(void)
notify = create_callback();
- media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
rate = IMFMediaEngine_GetDefaultPlaybackRate(media_engine); ok(rate == 1.0, "Unexpected default rate.\n"); @@ -624,7 +637,7 @@ static void test_mute(void)
notify = create_callback();
- media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
ret = IMFMediaEngine_GetMuted(media_engine); ok(!ret, "Unexpected state.\n"); @@ -655,7 +668,7 @@ static void test_error(void)
notify = create_callback();
- media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface); + media_engine = create_media_engine(¬ify->IMFMediaEngineNotify_iface, NULL, DXGI_FORMAT_UNKNOWN);
eo = (void *)0xdeadbeef; hr = IMFMediaEngine_GetError(media_engine, &eo);