ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

msacm32_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.