Module: wine Branch: master Commit: 096b46cf8dc46b3a75639846ec9370225db02a26 URL: https://gitlab.winehq.org/wine/wine/-/commit/096b46cf8dc46b3a75639846ec93702...
Author: Bernhard Kölbl bkoelbl@codeweavers.com Date: Tue Jul 4 18:54:37 2023 +0200
mfmediaengine/tests: Add tests for audio effects.
---
dlls/mfmediaengine/tests/Makefile.in | 2 +- dlls/mfmediaengine/tests/i420-64x64.avi | Bin 25472 -> 58982 bytes dlls/mfmediaengine/tests/mfmediaengine.c | 51 ++++++++++++++++++++++++++++--- dlls/mfmediaengine/tests/resource.rc | 5 +-- 4 files changed, 50 insertions(+), 8 deletions(-)
diff --git a/dlls/mfmediaengine/tests/Makefile.in b/dlls/mfmediaengine/tests/Makefile.in index b23d530d46f..437229a905d 100644 --- a/dlls/mfmediaengine/tests/Makefile.in +++ b/dlls/mfmediaengine/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = mfmediaengine.dll -IMPORTS = ole32 mfplat oleaut32 mfuuid uuid +IMPORTS = ole32 mf mfplat oleaut32 mfuuid uuid
C_SRCS = \ mfmediaengine.c diff --git a/dlls/mfmediaengine/tests/i420-64x64.avi b/dlls/mfmediaengine/tests/i420-64x64.avi index 8c560691974..74a8dac82f2 100644 Binary files a/dlls/mfmediaengine/tests/i420-64x64.avi and b/dlls/mfmediaengine/tests/i420-64x64.avi differ diff --git a/dlls/mfmediaengine/tests/mfmediaengine.c b/dlls/mfmediaengine/tests/mfmediaengine.c index 8aa9492d32b..8b4d06a3bd5 100644 --- a/dlls/mfmediaengine/tests/mfmediaengine.c +++ b/dlls/mfmediaengine/tests/mfmediaengine.c @@ -1307,7 +1307,7 @@ static void test_TransferVideoFrame(void) res = 0; hr = IMFMediaEngineEx_GetNumberOfStreams(media_engine, &res); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - ok(res == 1, "Unexpected stream count %lu.\n", res); + ok(res == 2, "Unexpected stream count %lu.\n", res);
/* FIXME: Wine first video frame is often full of garbage, wait for another update */ res = WaitForSingleObject(notify->ready_event, 500); @@ -1483,7 +1483,7 @@ static HRESULT WINAPI passthrough_mft_AddInputStreams(IMFTransform *iface, DWORD static HRESULT WINAPI passthrough_mft_GetInputAvailableType(IMFTransform *iface, DWORD id, DWORD index, IMFMediaType **type) { - static const GUID *types[] = { &MFMediaType_Video }; + static const GUID *types[] = { &MFMediaType_Video, &MFMediaType_Audio }; HRESULT hr;
if (id) @@ -1772,9 +1772,9 @@ HRESULT passthrough_mft_create(UINT32 index, struct passthrough_mft **out) return S_OK; }
-static void test_video_effect(void) +static void test_effect(void) { - struct passthrough_mft *video_effect = NULL, *video_effect2 = NULL; + struct passthrough_mft *video_effect = NULL, *video_effect2 = NULL, *audio_effect = NULL, *audio_effect2 = NULL; struct test_transfer_notify *notify; IMFMediaEngineEx *media_engine_ex = NULL; ID3D11Texture2D *texture = NULL; @@ -1782,6 +1782,7 @@ static void test_video_effect(void) ID3D11Device *device = NULL; D3D11_TEXTURE2D_DESC desc; IMFByteStream *stream; + IMFMediaSink *sink; RECT dst_rect; UINT token; HRESULT hr; @@ -1836,6 +1837,20 @@ static void test_video_effect(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); EXPECT_REF(&video_effect2->IMFTransform_iface, 2);
+ hr = passthrough_mft_create(0, &audio_effect); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = passthrough_mft_create(1, &audio_effect2); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaEngineEx_InsertAudioEffect(media_engine_ex, (IUnknown *)&audio_effect->IMFTransform_iface, FALSE); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine EXPECT_REF(&audio_effect->IMFTransform_iface, 2); + + hr = IMFMediaEngineEx_InsertAudioEffect(media_engine_ex, (IUnknown *)&audio_effect2->IMFTransform_iface, FALSE); + todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + todo_wine EXPECT_REF(&audio_effect2->IMFTransform_iface, 2); + url = SysAllocString(L"i420-64x64.avi"); hr = IMFMediaEngineEx_SetSourceFromByteStream(media_engine_ex, stream, url); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); @@ -1858,6 +1873,21 @@ static void test_video_effect(void) ok(video_effect->processing_count > 0, "Unexpected processing count %lu.\n", video_effect->processing_count); ok(video_effect2->processing_count > 0, "Unexpected processing count %lu.\n", video_effect2->processing_count);
+ if (SUCCEEDED(hr = MFCreateAudioRenderer(NULL, &sink))) + { + todo_wine + ok(audio_effect->processing_count > 0, "Unexpected processing count %lu.\n", audio_effect->processing_count); + todo_wine + ok(audio_effect2->processing_count > 0, "Unexpected processing count %lu.\n", audio_effect2->processing_count); + + IMFMediaSink_Release(sink); + } + else if (hr == MF_E_NO_AUDIO_PLAYBACK_DEVICE) + { + ok(!audio_effect->processing_count, "Unexpected processing count %lu.\n", audio_effect->processing_count); + ok(!audio_effect2->processing_count, "Unexpected processing count %lu.\n", audio_effect2->processing_count); + } + done: if (media_engine_ex) { @@ -1872,6 +1902,17 @@ done: if (device) ID3D11Device_Release(device);
+ if (audio_effect2) + { + ref = IMFTransform_Release(&audio_effect2->IMFTransform_iface); + ok(!ref, "Unexpected ref %lu.\n", ref); + } + if (audio_effect) + { + ref = IMFTransform_Release(&audio_effect->IMFTransform_iface); + ok(!ref, "Unexpected ref %lu.\n", ref); + } + if (video_effect2) { ref = IMFTransform_Release(&video_effect2->IMFTransform_iface); @@ -1917,7 +1958,7 @@ START_TEST(mfmediaengine) test_SetSourceFromByteStream(); test_audio_configuration(); test_TransferVideoFrame(); - test_video_effect(); + test_effect();
IMFMediaEngineClassFactory_Release(factory);
diff --git a/dlls/mfmediaengine/tests/resource.rc b/dlls/mfmediaengine/tests/resource.rc index 50152586758..960e5ffd73e 100644 --- a/dlls/mfmediaengine/tests/resource.rc +++ b/dlls/mfmediaengine/tests/resource.rc @@ -21,8 +21,9 @@ /* Generated with: * gst-launch-1.0 videotestsrc num-buffers=4 pattern=smpte100 ! \ * video/x-raw,format=I420,width=64,height=64,framerate=30000/1001 ! \ - * videoflip method=clockwise ! videoconvert ! \ - * avimux ! filesink location=dlls/mfmediaengine/tests/i420-64x64.avi + * videoflip method=clockwise ! videoconvert ! queue ! mux. \ + * audiotestsrc num-buffers=4 ! audioconvert ! audio/x-raw,rate=44100,channels=2 ! queue ! mux. \ + * avimux name=mux ! filesink location=dlls/mfmediaengine/tests/i420-64x64.avi */ /* @makedep: i420-64x64.avi */ i420-64x64.avi RCDATA i420-64x64.avi