Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmsacm32_main.c
Go to the documentation of this file.
00001 /* -*- tab-width: 8; c-basic-offset: 4 -*- */ 00002 00003 /* 00004 * MSACM32 library 00005 * 00006 * Copyright 1998 Patrik Stridvall 00007 * 1999 Eric Pouech 00008 * 00009 * This library is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 2.1 of the License, or (at your option) any later version. 00013 * 00014 * This library is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with this library; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00022 */ 00023 00024 #include <stdarg.h> 00025 00026 #include "windef.h" 00027 #include "winbase.h" 00028 #include "wine/debug.h" 00029 #include "mmsystem.h" 00030 #define NOBITMAP 00031 #include "mmreg.h" 00032 #include "msacm.h" 00033 #include "msacmdrv.h" 00034 #include "wineacm.h" 00035 00036 WINE_DEFAULT_DEBUG_CHANNEL(msacm); 00037 00038 /**********************************************************************/ 00039 00040 HINSTANCE MSACM_hInstance32 = 0; 00041 00042 /*********************************************************************** 00043 * DllMain (MSACM32.init) 00044 */ 00045 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpvReserved) 00046 { 00047 TRACE("%p 0x%x %p\n", hInstDLL, fdwReason, lpvReserved); 00048 00049 switch (fdwReason) { 00050 case DLL_PROCESS_ATTACH: 00051 DisableThreadLibraryCalls(hInstDLL); 00052 MSACM_hHeap = HeapCreate(0, 0x10000, 0); 00053 MSACM_hInstance32 = hInstDLL; 00054 MSACM_RegisterAllDrivers(); 00055 break; 00056 case DLL_PROCESS_DETACH: 00057 MSACM_UnregisterAllDrivers(); 00058 HeapDestroy(MSACM_hHeap); 00059 MSACM_hHeap = NULL; 00060 MSACM_hInstance32 = NULL; 00061 break; 00062 default: 00063 break; 00064 } 00065 return TRUE; 00066 } 00067 00068 /*********************************************************************** 00069 * XRegThunkEntry (MSACM32.1) 00070 * FIXME 00071 * No documentation found. 00072 */ 00073 00074 /*********************************************************************** 00075 * acmGetVersion (MSACM32.@) 00076 */ 00077 DWORD WINAPI acmGetVersion(void) 00078 { 00079 OSVERSIONINFOA version; 00080 00081 version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); 00082 if (!GetVersionExA( &version )) 00083 return 0x04030000; 00084 00085 switch (version.dwPlatformId) { 00086 case VER_PLATFORM_WIN32_NT: 00087 return 0x04000565; /* 4.0.1381 */ 00088 default: 00089 FIXME("%x not supported\n", version.dwPlatformId); 00090 case VER_PLATFORM_WIN32_WINDOWS: 00091 return 0x04030000; /* 4.3.0 */ 00092 } 00093 } 00094 00095 /*********************************************************************** 00096 * acmMessage32 (MSACM32.35) 00097 * FIXME 00098 * No documentation found. 00099 */ 00100 00101 /*********************************************************************** 00102 * acmMetrics (MSACM32.@) 00103 */ 00104 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric) 00105 { 00106 PWINE_ACMOBJ pao = MSACM_GetObj(hao, WINE_ACMOBJ_DONTCARE); 00107 BOOL bLocal = TRUE; 00108 PWINE_ACMDRIVERID padid; 00109 DWORD val = 0; 00110 unsigned int i; 00111 MMRESULT mmr = MMSYSERR_NOERROR; 00112 00113 TRACE("(%p, %d, %p);\n", hao, uMetric, pMetric); 00114 00115 #define CheckLocal(padid) (!bLocal || ((padid)->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_LOCAL)) 00116 00117 switch (uMetric) { 00118 case ACM_METRIC_COUNT_DRIVERS: 00119 bLocal = FALSE; 00120 /* fall through */ 00121 case ACM_METRIC_COUNT_LOCAL_DRIVERS: 00122 if (hao) return MMSYSERR_INVALHANDLE; 00123 if (!pMetric) return MMSYSERR_INVALPARAM; 00124 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 00125 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid)) 00126 val++; 00127 *(LPDWORD)pMetric = val; 00128 break; 00129 00130 case ACM_METRIC_COUNT_CODECS: 00131 bLocal = FALSE; 00132 /* fall through */ 00133 case ACM_METRIC_COUNT_LOCAL_CODECS: 00134 if (hao) return MMSYSERR_INVALHANDLE; 00135 if (!pMetric) return MMSYSERR_INVALPARAM; 00136 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 00137 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && 00138 (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) && 00139 CheckLocal(padid)) 00140 val++; 00141 *(LPDWORD)pMetric = val; 00142 break; 00143 00144 case ACM_METRIC_COUNT_CONVERTERS: 00145 bLocal = FALSE; 00146 /* fall through */ 00147 case ACM_METRIC_COUNT_LOCAL_CONVERTERS: 00148 if (hao) return MMSYSERR_INVALHANDLE; 00149 if (!pMetric) return MMSYSERR_INVALPARAM; 00150 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 00151 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && 00152 (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) && 00153 CheckLocal(padid)) 00154 val++; 00155 *(LPDWORD)pMetric = val; 00156 break; 00157 00158 case ACM_METRIC_COUNT_FILTERS: 00159 bLocal = FALSE; 00160 /* fall through */ 00161 case ACM_METRIC_COUNT_LOCAL_FILTERS: 00162 if (hao) return MMSYSERR_INVALHANDLE; 00163 if (!pMetric) return MMSYSERR_INVALPARAM; 00164 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 00165 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && 00166 (padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) && 00167 CheckLocal(padid)) 00168 val++; 00169 *(LPDWORD)pMetric = val; 00170 break; 00171 00172 case ACM_METRIC_COUNT_DISABLED: 00173 bLocal = FALSE; 00174 /* fall through */ 00175 case ACM_METRIC_COUNT_LOCAL_DISABLED: 00176 if (hao) return MMSYSERR_INVALHANDLE; 00177 if (!pMetric) return MMSYSERR_INVALPARAM; 00178 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 00179 if ((padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED) && CheckLocal(padid)) 00180 val++; 00181 *(LPDWORD)pMetric = val; 00182 break; 00183 00184 case ACM_METRIC_MAX_SIZE_FORMAT: 00185 if (hao == NULL) { 00186 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) { 00187 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) { 00188 for (i = 0; i < padid->cFormatTags; i++) { 00189 if (val < padid->aFormatTag[i].cbwfx) 00190 val = padid->aFormatTag[i].cbwfx; 00191 } 00192 } 00193 } 00194 } else if (pao != NULL) { 00195 switch (pao->dwType) { 00196 case WINE_ACMOBJ_DRIVER: 00197 case WINE_ACMOBJ_DRIVERID: 00198 padid = pao->pACMDriverID; 00199 break; 00200 default: 00201 return MMSYSERR_INVALHANDLE; 00202 } 00203 if (!(padid->fdwSupport & ACMDRIVERDETAILS_SUPPORTF_DISABLED)) { 00204 for (i = 0; i < padid->cFormatTags; i++) { 00205 if (val < padid->aFormatTag[i].cbwfx) 00206 val = padid->aFormatTag[i].cbwfx; 00207 } 00208 } 00209 } else { 00210 return MMSYSERR_INVALHANDLE; 00211 } 00212 if (!pMetric) return MMSYSERR_INVALPARAM; 00213 *(LPDWORD)pMetric = val; 00214 break; 00215 00216 case ACM_METRIC_COUNT_HARDWARE: 00217 if (hao) return MMSYSERR_INVALHANDLE; 00218 if (!pMetric) return MMSYSERR_INVALPARAM; 00219 *(LPDWORD)pMetric = 0; 00220 FIXME("ACM_METRIC_COUNT_HARDWARE not implemented\n"); 00221 break; 00222 00223 case ACM_METRIC_DRIVER_PRIORITY: 00224 /* Return current list position of driver */ 00225 if (!hao) return MMSYSERR_INVALHANDLE; 00226 mmr = MMSYSERR_INVALHANDLE; 00227 for (i = 1, padid = MSACM_pFirstACMDriverID; padid; i++, padid = padid->pNextACMDriverID) { 00228 if (padid == (PWINE_ACMDRIVERID)hao) { 00229 if (pMetric) { 00230 *(LPDWORD)pMetric = i; 00231 mmr = MMSYSERR_NOERROR; 00232 } else { 00233 mmr = MMSYSERR_INVALPARAM; 00234 } 00235 break; 00236 } 00237 } 00238 break; 00239 00240 case ACM_METRIC_DRIVER_SUPPORT: 00241 /* Return fdwSupport for driver */ 00242 if (!hao) return MMSYSERR_INVALHANDLE; 00243 mmr = MMSYSERR_INVALHANDLE; 00244 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) { 00245 if (padid == (PWINE_ACMDRIVERID)hao) { 00246 if (pMetric) { 00247 *(LPDWORD)pMetric = padid->fdwSupport; 00248 mmr = MMSYSERR_NOERROR; 00249 } else { 00250 mmr = MMSYSERR_INVALPARAM; 00251 } 00252 break; 00253 } 00254 } 00255 break; 00256 00257 case ACM_METRIC_HARDWARE_WAVE_INPUT: 00258 case ACM_METRIC_HARDWARE_WAVE_OUTPUT: 00259 case ACM_METRIC_MAX_SIZE_FILTER: 00260 default: 00261 FIXME("(%p, %d, %p): stub\n", hao, uMetric, pMetric); 00262 mmr = MMSYSERR_NOTSUPPORTED; 00263 } 00264 return mmr; 00265 } Generated on Sun May 27 2012 04:24:45 for ReactOS by
1.7.6.1
|