Spelling fixes.
[wine.git] / dlls / msacm32 / msacm32_main.c
blob2734aab743f0b1bdfaf1b1b01be24375f359fc48
1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
3 /*
4 * MSACM32 library
6 * Copyright 1998 Patrik Stridvall
7 * 1999 Eric Pouech
8 */
10 #include "winbase.h"
11 #include "winerror.h"
12 #include "windef.h"
13 #include "debugtools.h"
14 #include "msacm.h"
15 #include "msacmdrv.h"
16 #include "wineacm.h"
17 #include "winversion.h"
19 DEFAULT_DEBUG_CHANNEL(msacm)
21 /**********************************************************************/
23 static DWORD MSACM_dwProcessesAttached = 0;
25 /***********************************************************************
26 * MSACM_LibMain (MSACM32.init)
28 BOOL WINAPI MSACM32_LibMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved)
30 TRACE("0x%x 0x%lx %p\n", hInstDLL, fdwReason, lpvReserved);
32 switch (fdwReason) {
33 case DLL_PROCESS_ATTACH:
34 if (MSACM_dwProcessesAttached == 0) {
35 MSACM_hHeap = HeapCreate(0, 0x10000, 0);
36 MSACM_RegisterAllDrivers();
38 MSACM_dwProcessesAttached++;
39 break;
40 case DLL_PROCESS_DETACH:
41 MSACM_dwProcessesAttached--;
42 if (MSACM_dwProcessesAttached == 0) {
43 MSACM_UnregisterAllDrivers();
44 HeapDestroy(MSACM_hHeap);
45 MSACM_hHeap = (HANDLE) NULL;
47 break;
48 case DLL_THREAD_ATTACH:
49 break;
50 case DLL_THREAD_DETACH:
51 break;
52 default:
53 break;
55 return TRUE;
58 /***********************************************************************
59 * XRegThunkEntry (MSACM32.1)
60 * FIXME
61 * No documentation found.
64 /***********************************************************************
65 * acmGetVersion (MSACM32.34)
67 DWORD WINAPI acmGetVersion(void)
69 switch (VERSION_GetVersion()) {
70 default:
71 FIXME("%s not supported\n", VERSION_GetVersionName());
72 case WIN95:
73 return 0x04000000; /* 4.0.0 */
74 case NT40:
75 return 0x04000565; /* 4.0.1381 */
79 /***********************************************************************
80 * acmMessage32 (MSACM32.35)
81 * FIXME
82 * No documentation found.
85 /***********************************************************************
86 * acmMetrics (MSACM32.36)
88 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric)
90 PWINE_ACMOBJ pao = MSACM_GetObj(hao);
91 BOOL bLocal = TRUE;
92 PWINE_ACMDRIVERID padid;
93 DWORD val = 0;
95 FIXME("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric);
97 switch (uMetric) {
98 case ACM_METRIC_COUNT_DRIVERS:
99 bLocal = FALSE;
100 /* fall thru */
101 case ACM_METRIC_COUNT_LOCAL_DRIVERS:
102 if (!pao)
103 return MMSYSERR_INVALHANDLE;
104 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
105 if (padid->bEnabled /* && (local(padid) || !bLocal) */)
106 val++;
107 *(LPDWORD)pMetric = val;
108 return 0;
110 case ACM_METRIC_COUNT_CODECS:
111 if (!pao)
112 return MMSYSERR_INVALHANDLE;
113 bLocal = FALSE;
114 /* fall thru */
115 case ACM_METRIC_COUNT_LOCAL_CODECS:
116 /* FIXME: don't know how to differentiate codec, converters & filters yet */
117 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
118 if (padid->bEnabled /* && (local(padid) || !bLocal) */)
119 val++;
120 *(LPDWORD)pMetric = val;
121 return 0;
123 case ACM_METRIC_COUNT_CONVERTERS:
124 bLocal = FALSE;
125 /* fall thru */
126 case ACM_METRIC_COUNT_LOCAL_CONVERTERS:
127 /* FIXME: don't know how to differentiate codec, converters & filters yet */
128 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
129 if (padid->bEnabled /* && (local(padid) || !bLocal) */)
130 val++;
131 *(LPDWORD)pMetric = val;
132 return 0;
134 case ACM_METRIC_COUNT_FILTERS:
135 bLocal = FALSE;
136 /* fall thru */
137 case ACM_METRIC_COUNT_LOCAL_FILTERS:
138 /* FIXME: don't know how to differentiate codec, converters & filters yet */
139 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
140 if (padid->bEnabled /* && (local(padid) || !bLocal) */)
141 val++;
142 *(LPDWORD)pMetric = val;
143 return 0;
145 case ACM_METRIC_COUNT_DISABLED:
146 bLocal = FALSE;
147 /* fall thru */
148 case ACM_METRIC_COUNT_LOCAL_DISABLED:
149 if (!pao)
150 return MMSYSERR_INVALHANDLE;
151 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID)
152 if (!padid->bEnabled /* && (local(padid) || !bLocal) */)
153 val++;
154 *(LPDWORD)pMetric = val;
155 return 0;
157 case ACM_METRIC_MAX_SIZE_FORMAT:
158 /* FIXME: According to MSDN, this should return the size of the largest WAVEFORMATEX
159 structure in the system. How is this calculated? */
160 *(LPDWORD)pMetric = sizeof (WAVEFORMATEX);
161 return 0;
163 case ACM_METRIC_COUNT_HARDWARE:
164 case ACM_METRIC_HARDWARE_WAVE_INPUT:
165 case ACM_METRIC_HARDWARE_WAVE_OUTPUT:
166 case ACM_METRIC_MAX_SIZE_FILTER:
167 case ACM_METRIC_DRIVER_SUPPORT:
168 case ACM_METRIC_DRIVER_PRIORITY:
169 default:
170 return MMSYSERR_NOTSUPPORTED;
172 return MMSYSERR_NOERROR;