[PATCH v7 0/3] MR9704: winmm, msvfw32: DGV window shenanigans with audio only files
Basically, check if we can set a HWND in the driver, before doing so. Right now, msvfw32 + mciqtz32 error out on audio only playbacks, breaking the game Transcendence. -- v7: msvfw32: Only attempt to set a digital-video window, when the driver has a window itself. msvfw32/tests: Add a basic audio playback test. winmm/tests: Test digital-video window behavior for audio files. https://gitlab.winehq.org/wine/wine/-/merge_requests/9704
From: Bernhard Kölbl <bkoelbl@codeweavers.com> --- dlls/winmm/tests/mci.c | 46 +++++++++++++++++++++++++++++++++----- dlls/winmm/tests/rsrc.rc | 4 ++++ dlls/winmm/tests/test.mp3 | Bin 0 -> 2157 bytes 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 dlls/winmm/tests/test.mp3 diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c index f6654912515..1611e16c44c 100644 --- a/dlls/winmm/tests/mci.c +++ b/dlls/winmm/tests/mci.c @@ -1316,14 +1316,15 @@ static void test_AutoOpenWAVE(HWND hwnd) ok(0xDEADF00D==intbuf[0] && 0xABADCAFE==intbuf[2],"DWORD buffer corruption\n"); } -static void test_playWaveTypeMpegvideo(void) +static void test_playTypeMpegvideo(HWND hwnd) { MCIERROR err; MCIDEVICEID wDeviceID; MCI_PLAY_PARMS play_parm; MCI_STATUS_PARMS status_parm; - char buf[1024]; - memset(buf, 0, sizeof(buf)); + MCI_DGV_WINDOW_PARMSW window_param; + const WCHAR *filename = load_resource(L"test.mp3"); + char buf[1024] = {0}; err = mciSendStringA("open tempfile.wav type MPEGVideo alias mysound", NULL, 0, NULL); ok(err==ok_saved,"mci open tempfile.wav type MPEGVideo returned %s\n", dbg_mcierr(err)); @@ -1335,6 +1336,14 @@ static void test_playWaveTypeMpegvideo(void) wDeviceID = mciGetDeviceIDA("mysound"); ok(wDeviceID == 1, "mciGetDeviceIDA mysound returned %u, expected 1\n", wDeviceID); + window_param.hWnd = 0; + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_STATE, (DWORD_PTR)&window_param); + ok(err == MCIERR_NO_WINDOW,"mciSendCommandW returned %s\n", dbg_mcierr(err)); + + window_param.hWnd = hwnd; + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&window_param); + ok(err == MCIERR_INTERNAL,"mciSendCommandW returned %s\n", dbg_mcierr(err)); + err = mciSendCommandA(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&play_parm); ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); @@ -1372,13 +1381,38 @@ static void test_playWaveTypeMpegvideo(void) ok(err==ok_saved,"mci open tempfile.wav type MPEGVideo returned %s\n", dbg_mcierr(err)); err = mciSendStringA("play mysound", NULL, 0, NULL); - ok(!err,"mci play retuend %s\n", dbg_mcierr(err)); + ok(!err,"mci play returned %s\n", dbg_mcierr(err)); err = mciSendStringA("play mysound", NULL, 0, NULL); - ok(!err,"mci play retuend %s\n", dbg_mcierr(err)); + ok(!err,"mci play returned %s\n", dbg_mcierr(err)); err = mciSendStringA("close mysound", NULL, 0, NULL); ok(!err,"mci close returned %s\n", dbg_mcierr(err)); + + /* test playing a mp3 file */ + snprintf(buf, ARRAY_SIZE(buf), "open %ls type MPEGVideo alias mytest", filename); + err = mciSendStringA(buf, NULL, 0, NULL); + ok(!err, "mci open test.mp3 type MPEGVideo returned %s\n", dbg_mcierr(err)); + + wDeviceID = mciGetDeviceIDA("mytest"); + ok(wDeviceID == 1, "mciGetDeviceIDA returned incorrect device id %u\n", wDeviceID); + + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_STATE, (DWORD_PTR)&window_param); + ok(err == MCIERR_NO_WINDOW,"mciSendCommandW returned %s\n", dbg_mcierr(err)); + + window_param.hWnd = hwnd; + err = mciSendCommandW(wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD_PTR)&window_param); + ok(err == MCIERR_INTERNAL,"mciSendCommandW returned %s\n", dbg_mcierr(err)); + + err = mciSendCommandA(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&play_parm); + ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); + + err = mciSendStringA("status mytest mode", buf, sizeof(buf), NULL); + ok(!err,"mci status mode returned %s\n", dbg_mcierr(err)); + ok(!strcmp(buf,"playing"), "mci status mode: %s\n", buf); + + err = mciSendStringA("close mytest", NULL, 0, NULL); + ok(!err,"mci close returned %s\n", dbg_mcierr(err)); } static void test_asyncWaveTypeMpegvideo(HWND hwnd) @@ -1783,7 +1817,7 @@ START_TEST(mci) test_playWAVE(hwnd); test_asyncWAVE(hwnd); test_AutoOpenWAVE(hwnd); - test_playWaveTypeMpegvideo(); + test_playTypeMpegvideo(hwnd); test_asyncWaveTypeMpegvideo(hwnd); }else skip("No output devices available, skipping all output tests\n"); diff --git a/dlls/winmm/tests/rsrc.rc b/dlls/winmm/tests/rsrc.rc index b77f501344e..f9607483465 100644 --- a/dlls/winmm/tests/rsrc.rc +++ b/dlls/winmm/tests/rsrc.rc @@ -63,3 +63,7 @@ test_mp2.wav WAVE "test_mp2.wav" * So I manually set it 11480 (the file size divided by 0.1 seconds). */ /* @makedep: test_mp3.wav */ test_mp3.wav WAVE "test_mp3.wav" + +/* ffmpeg -f lavfi -i "sine=frequency=500" -t 0.5 -ar 48000 -b:a 32k -f mp3 -acodec mp3 -write_xing 0 test.mp3 */ +/* @makedep: test.mp3 */ +test.mp3 RCDATA "test.mp3" diff --git a/dlls/winmm/tests/test.mp3 b/dlls/winmm/tests/test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b35e6b77d1315fa5b742085226ecd0cefbdf4896 GIT binary patch literal 2157 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 O^<nco1xC0m<qQBQdh)yg literal 0 HcmV?d00001 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9704
From: Bernhard Kölbl <bkoelbl@codeweavers.com> --- dlls/msvfw32/tests/mciwnd.c | 48 ++++++++++++++++++++++++++++++++++ dlls/msvfw32/tests/msvfw32.rc | 4 +++ dlls/msvfw32/tests/test.mp3 | Bin 0 -> 2156 bytes 3 files changed, 52 insertions(+) create mode 100644 dlls/msvfw32/tests/test.mp3 diff --git a/dlls/msvfw32/tests/mciwnd.c b/dlls/msvfw32/tests/mciwnd.c index 6599fd4be85..a54ab07ee4f 100644 --- a/dlls/msvfw32/tests/mciwnd.c +++ b/dlls/msvfw32/tests/mciwnd.c @@ -381,7 +381,55 @@ static void test_MCIWndCreate(void) DeleteFileA(fname); } +static WCHAR *load_resource(const WCHAR *res_name) +{ + static WCHAR path[MAX_PATH]; + DWORD written; + HANDLE file; + HRSRC res; + void *ptr; + + GetTempPathW(ARRAY_SIZE(path), path); + wcscat_s(path, ARRAY_SIZE(path), res_name); + + file = CreateFileW(path, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(file != INVALID_HANDLE_VALUE, "creation of file %s failed, error %ld\n", debugstr_w(path), GetLastError()); + + res = FindResourceW(NULL, res_name, (LPCWSTR)RT_RCDATA); + ok(!!res, "failed to load resource %s, error %ld\n", debugstr_w(res_name), GetLastError()); + + ptr = LockResource(LoadResource(GetModuleHandleA(NULL), res)); + WriteFile(file, ptr, SizeofResource(GetModuleHandleA(NULL), res), &written, NULL); + ok(written == SizeofResource(GetModuleHandleA(NULL), res), "failed to write resource\n"); + CloseHandle(file); + + return path; +} + +static void test_audio_playback(void) +{ + HINSTANCE hisnt = GetModuleHandleW(NULL); + WCHAR *test_file = load_resource(L"test.mp3"); + HWND parent, mci_wnd; + DWORD error; + + parent = CreateWindowExW(0, L"static", L"msvfw32 test", WS_POPUP, 0, 0, 100, 100, 0, 0, 0, NULL); + ok(!!parent, "failed to create parent window\n"); + + mci_wnd = MCIWndCreateW(parent, hisnt, MCIWNDF_SHOWMODE, NULL); + ok(!!parent, "failed to create mci window\n"); + + error = SendMessageW(mci_wnd, MCIWNDM_OPENW, 0, (DWORD_PTR)test_file); + todo_wine ok(!error, "failed to set playback source, error %lu\n", error); + + pump_messages(); + + DestroyWindow(mci_wnd); + DestroyWindow(parent); +} + START_TEST(mciwnd) { test_MCIWndCreate(); + test_audio_playback(); } diff --git a/dlls/msvfw32/tests/msvfw32.rc b/dlls/msvfw32/tests/msvfw32.rc index 463e7448edd..8f4dbcb22f7 100644 --- a/dlls/msvfw32/tests/msvfw32.rc +++ b/dlls/msvfw32/tests/msvfw32.rc @@ -20,3 +20,7 @@ /* @makedep: msvfw32.manifest */ 1 RT_MANIFEST msvfw32.manifest + +/* ffmpeg -f lavfi -i "sine=frequency=500" -t 0.5 -ar 48000 -b:a 32k -f mp3 -acodec mp3 -write_xing 0 test.mp3 */ +/* @makedep: test.mp3 */ +test.mp3 RCDATA "test.mp3" diff --git a/dlls/msvfw32/tests/test.mp3 b/dlls/msvfw32/tests/test.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..57ec6e36c3093015a2920803ce4d4009052b70f8 GIT binary patch literal 2156 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 literal 0 HcmV?d00001 -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9704
From: Bernhard Kölbl <bkoelbl@codeweavers.com> --- dlls/msvfw32/mciwnd.c | 21 ++++++++++++++++++--- dlls/msvfw32/tests/mciwnd.c | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/dlls/msvfw32/mciwnd.c b/dlls/msvfw32/mciwnd.c index 5ab9b698e13..8e2fa1f00a2 100644 --- a/dlls/msvfw32/mciwnd.c +++ b/dlls/msvfw32/mciwnd.c @@ -551,9 +551,11 @@ static LRESULT WINAPI MCIWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lPa case MCIWNDM_OPENW: { RECT rc; + BOOL has_window; HCURSOR hCursor; MCI_OPEN_PARMSW mci_open; MCI_GETDEVCAPS_PARMS mci_devcaps; + MCI_DGV_WINDOW_PARMSW mci_window; WCHAR aliasW[64]; WCHAR drv_name[MAX_PATH]; static const WCHAR formatW[] = {'%','d',0}; @@ -626,16 +628,29 @@ static LRESULT WINAPI MCIWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lPa mwi->dev_type = mci_devcaps.dwReturn; + mci_window.nCmdShow = -1; + mwi->lasterror = mciSendCommandW(mwi->mci, MCI_WINDOW, MCI_DGV_WINDOW_STATE, (DWORD_PTR)&mci_window); + + if (mwi->lasterror == MCIERR_NO_WINDOW) + { + has_window = FALSE; + mwi->lasterror = 0; + } + else if (mwi->lasterror) + { + MCIWND_notify_error(mwi); + goto end_of_mci_open; + } + else has_window = TRUE; + drv_name[0] = 0; SendMessageW(hWnd, MCIWNDM_GETDEVICEW, 256, (LPARAM)drv_name); if (drv_name[0] && GetPrivateProfileStringW(mci32W, drv_name, NULL, drv_name, MAX_PATH, system_iniW)) mwi->hdrv = OpenDriver(drv_name, NULL, 0); - if (mwi->dev_type == MCI_DEVTYPE_DIGITAL_VIDEO) + if (mwi->dev_type == MCI_DEVTYPE_DIGITAL_VIDEO && has_window) { - MCI_DGV_WINDOW_PARMSW mci_window; - mci_window.hWnd = hWnd; mwi->lasterror = mciSendCommandW(mwi->mci, MCI_WINDOW, MCI_DGV_WINDOW_HWND, diff --git a/dlls/msvfw32/tests/mciwnd.c b/dlls/msvfw32/tests/mciwnd.c index a54ab07ee4f..f5dc56db449 100644 --- a/dlls/msvfw32/tests/mciwnd.c +++ b/dlls/msvfw32/tests/mciwnd.c @@ -420,7 +420,7 @@ static void test_audio_playback(void) ok(!!parent, "failed to create mci window\n"); error = SendMessageW(mci_wnd, MCIWNDM_OPENW, 0, (DWORD_PTR)test_file); - todo_wine ok(!error, "failed to set playback source, error %lu\n", error); + ok(!error, "failed to set playback source, error %lu\n", error); pump_messages(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9704
v3: - Use TRUE/FALSE for BOOL values. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9704#note_130931
Looks good to me. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9704#note_130935
This merge request was approved by Huw Davies. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9704
participants (4)
-
Akihiro Sagawa (@sgwaki) -
Bernhard Kölbl -
Bernhard Kölbl (@besentv) -
Huw Davies (@huw)