From 830abcecb98f89b03be4dc390d910671cb224d37 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sun, 26 Feb 2017 18:23:11 +0000 Subject: [PATCH] [MSACM32_WINETEST] Sync with Wine Staging 2.2. CORE-12823 svn path=/trunk/; revision=73961 --- rostests/winetests/msacm32/CMakeLists.txt | 2 +- rostests/winetests/msacm32/msacm.c | 167 ++++++++++++++++++++++ 2 files changed, 168 insertions(+), 1 deletion(-) diff --git a/rostests/winetests/msacm32/CMakeLists.txt b/rostests/winetests/msacm32/CMakeLists.txt index b8135acdaf2..18ca20baf8c 100644 --- a/rostests/winetests/msacm32/CMakeLists.txt +++ b/rostests/winetests/msacm32/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable(msacm32_winetest msacm.c testlist.c) set_module_type(msacm32_winetest win32cui) -add_importlibs(msacm32_winetest msacm32 msvcrt kernel32) +add_importlibs(msacm32_winetest msacm32 winmm msvcrt kernel32) add_rostests_file(TARGET msacm32_winetest) diff --git a/rostests/winetests/msacm32/msacm.c b/rostests/winetests/msacm32/msacm.c index 4c94b1d22fa..fa1da4e3bec 100644 --- a/rostests/winetests/msacm32/msacm.c +++ b/rostests/winetests/msacm32/msacm.c @@ -31,6 +31,7 @@ #define NOBITMAP #include "mmreg.h" #include "msacm.h" +#include "wine/msacmdrv.h" static BOOL CALLBACK FormatTagEnumProc(HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd, @@ -829,6 +830,7 @@ todo_wine ok(rc == MMSYSERR_INVALPARAM, "failed with error 0x%x\n", rc); } + void test_mp3(void) { MPEGLAYER3WAVEFORMAT src; @@ -899,10 +901,175 @@ void test_mp3(void) ok(mr == MMSYSERR_NOERROR, "failed with error 0x%x\n", mr); } +static struct +{ + struct + { + int load, free, open, close, enable, disable, install, + remove, details, notify, querycfg, about; + } driver; + struct + { + int tag_details, details, suggest; + } format; + struct + { + int open, close, size, convert, prepare, unprepare, reset; + } stream; + int other; +} driver_calls; + +static LRESULT CALLBACK acm_driver_func(DWORD_PTR id, HDRVR handle, UINT msg, LPARAM param1, LPARAM param2) +{ + switch (msg) + { + /* Driver messages */ + case DRV_LOAD: + driver_calls.driver.load++; + return 1; + case DRV_FREE: + driver_calls.driver.free++; + return 1; + case DRV_OPEN: + driver_calls.driver.open++; + return 1; + case DRV_CLOSE: + driver_calls.driver.close++; + return 1; + case DRV_ENABLE: + driver_calls.driver.enable++; + return 1; + case DRV_DISABLE: + driver_calls.driver.disable++; + return 1; + case DRV_QUERYCONFIGURE: + driver_calls.driver.querycfg++; + return 1; + case DRV_INSTALL: + driver_calls.driver.install++; + return DRVCNF_RESTART; + case DRV_REMOVE: + driver_calls.driver.remove++; + return DRVCNF_RESTART; + case ACMDM_DRIVER_ABOUT: + driver_calls.driver.about++; + return MMSYSERR_NOTSUPPORTED; + case ACMDM_DRIVER_DETAILS: + { + ACMDRIVERDETAILSA *ptr = (ACMDRIVERDETAILSA *)param1; + + /* copied from pcmconverter.c */ + ptr->fccType = ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC; + ptr->fccComp = ACMDRIVERDETAILS_FCCCOMP_UNDEFINED; + ptr->wMid = MM_MICROSOFT; + ptr->wPid = MM_MSFT_ACM_PCM; + ptr->vdwACM = 0x01000000; + ptr->vdwDriver = 0x01000000; + ptr->fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CONVERTER; + ptr->cFormatTags = 1; + ptr->cFilterTags = 0; + ptr->hicon = NULL; + strcpy(ptr->szShortName, "TEST-CODEC"); + strcpy(ptr->szLongName, "Wine Test Codec"); + strcpy(ptr->szCopyright, "Brought to you by the Wine team..."); + strcpy(ptr->szLicensing, "Refer to LICENSE file"); + ptr->szFeatures[0] = 0; + + driver_calls.driver.details++; + break; + } + case ACMDM_DRIVER_NOTIFY: + driver_calls.driver.notify++; + return MMSYSERR_NOTSUPPORTED; + + /* Format messages */ + case ACMDM_FORMATTAG_DETAILS: + driver_calls.format.tag_details++; + break; + case ACMDM_FORMAT_DETAILS: + driver_calls.format.details++; + break; + case ACMDM_FORMAT_SUGGEST: + driver_calls.format.suggest++; + break; + + /* Stream messages */ + case ACMDM_STREAM_OPEN: + driver_calls.stream.open++; + break; + case ACMDM_STREAM_CLOSE: + driver_calls.stream.close++; + break; + case ACMDM_STREAM_SIZE: + driver_calls.stream.size++; + break; + case ACMDM_STREAM_CONVERT: + driver_calls.stream.convert++; + break; + case ACMDM_STREAM_RESET: + driver_calls.stream.reset++; + return MMSYSERR_NOTSUPPORTED; + case ACMDM_STREAM_PREPARE: + driver_calls.stream.prepare++; + break; + case ACMDM_STREAM_UNPREPARE: + driver_calls.stream.unprepare++; + break; + + default: + driver_calls.other++; + return DefDriverProc(id, handle, msg, param1, param2); + } + return MMSYSERR_NOERROR; +} + +static void test_acmDriverAdd(void) +{ + MMRESULT res; + HACMDRIVERID drvid; + union + { + ACMDRIVERDETAILSA drv_details; + } acm; + + /* Driver load steps: + * - acmDriverAdd checks the passed parameters + * - DRV_LOAD message is sent - required + * - DRV_ENABLE message is sent - required + * - DRV_OPEN message is sent - required + * - DRV_DETAILS message is sent - required + * - ACMDM_FORMATTAG_DETAILS message is sent - optional + * - DRV_QUERYCONFIGURE message is sent - optional + * - ACMDM_DRIVER_ABOUT message is sent - optional + */ + + res = acmDriverAddA(&drvid, GetModuleHandleA(NULL), (LPARAM)acm_driver_func, 0, ACM_DRIVERADDF_FUNCTION); + ok(res == MMSYSERR_NOERROR, "Expected 0, got %d\n", res); +todo_wine + ok(driver_calls.driver.open == 1, "Expected 1, got %d\n", driver_calls.driver.open); + ok(driver_calls.driver.details == 1, "Expected 1, got %d\n", driver_calls.driver.details); + + memset(&acm, 0, sizeof(acm)); + res = acmDriverDetailsA(drvid, &acm.drv_details, 0); + ok(res == MMSYSERR_INVALPARAM, "Expected 11, got %d\n", res); + + acm.drv_details.cbStruct = sizeof(acm.drv_details); + res = acmDriverDetailsA(drvid, &acm.drv_details, 0); + ok(res == MMSYSERR_NOERROR, "Expected 0, got %d\n", res); +todo_wine + ok(driver_calls.driver.open == 1, "Expected 1, got %d\n", driver_calls.driver.open); + ok(driver_calls.driver.details == 2, "Expected 2, got %d\n", driver_calls.driver.details); +todo_wine + ok(driver_calls.driver.close == 0, "Expected 0, got %d\n", driver_calls.driver.close); +} + START_TEST(msacm) { driver_tests(); test_prepareheader(); test_acmFormatSuggest(); test_mp3(); + /* Test acmDriverAdd in the end as it may conflict + * with other tests due to codec lookup order */ + test_acmDriverAdd(); }