- Timestamp:
- Dec 18, 1999, 11:15:16 AM (26 years ago)
- Location:
- trunk/src/msacm32
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/msacm32/driver.cpp
r1607 r2103 61 61 LPARAM lParam, DWORD dwPriority, DWORD fdwAdd) 62 62 { 63 FIXME("(%p, 0x%08x, %ld, %ld, %ld): stub\n",64 phadid, hinstModule, lParam, dwPriority, fdwAdd) ;63 dprintf(("(%p, 0x%08x, %ld, %ld, %ld): stub\n", 64 phadid, hinstModule, lParam, dwPriority, fdwAdd)); 65 65 66 66 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); … … 73 73 MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose) 74 74 { 75 PWINE_ACMDRIVER p; 75 PWINE_ACMDRIVER p; 76 PWINE_ACMDRIVER* tp; 76 77 77 78 if (fdwClose) … … 81 82 if (!p) 82 83 return MMSYSERR_INVALHANDLE; 83 84 p->obj.pACMDriverID->pACMDriver = NULL; 85 86 if (p->hDrvr) 84 85 for (tp = &(p->obj.pACMDriverID->pACMDriverList); *tp; *tp = (*tp)->pNextACMDriver) { 86 if (*tp == p) { 87 *tp = (*tp)->pNextACMDriver; 88 break; 89 } 90 } 91 92 if (p->hDrvr && !p->obj.pACMDriverID->pACMDriverList) 87 93 CloseDriver(p->hDrvr, 0, 0); 88 94 … … 127 133 MMRESULT WINAPI acmDriverDetailsW(HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails) 128 134 { 129 PWINE_ACMDRIVERID p;135 HACMDRIVER acmDrvr; 130 136 MMRESULT mmr; 131 BOOL bOpenTemporary;132 133 p = MSACM_GetDriverID(hadid);134 if (!p)135 return MMSYSERR_INVALHANDLE;136 137 137 138 if (fdwDetails) 138 139 return MMSYSERR_INVALFLAG; 139 140 140 bOpenTemporary = !p->pACMDriver; 141 if (bOpenTemporary) { 142 bOpenTemporary = TRUE; 143 acmDriverOpen((PHACMDRIVER) &p->pACMDriver, hadid, 0); 144 } 145 146 mmr = (MMRESULT) acmDriverMessage((HACMDRIVER) p->pACMDriver, ACMDM_DRIVER_DETAILS, 147 (LPARAM) padd, 0); 148 149 if (bOpenTemporary) { 150 acmDriverClose((HACMDRIVER) p->pACMDriver, 0); 151 p->pACMDriver = NULL; 141 mmr = acmDriverOpen(&acmDrvr, hadid, 0); 142 if (mmr == 0) { 143 mmr = (MMRESULT)acmDriverMessage(acmDrvr, ACMDM_DRIVER_DETAILS, (LPARAM) padd, 0); 144 145 acmDriverClose(acmDrvr, 0); 152 146 } 153 147 … … 160 154 MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum) 161 155 { 162 PWINE_ACMDRIVERID p; 163 156 PWINE_ACMDRIVERID p; 157 DWORD fdwSupport; 158 164 159 if (!fnCallback) { 165 160 return MMSYSERR_INVALPARAM; … … 170 165 } 171 166 172 p = MSACM_pFirstACMDriverID; 173 while (p) { 174 (*fnCallback)((HACMDRIVERID) p, dwInstance, ACMDRIVERDETAILS_SUPPORTF_CODEC); 175 p = p->pNextACMDriverID; 167 for (p = MSACM_pFirstACMDriverID; p; p = p->pNextACMDriverID) { 168 fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC; 169 if (!p->bEnabled) { 170 if (fdwEnum & ACM_DRIVERENUMF_DISABLED) 171 fdwSupport |= ACMDRIVERDETAILS_SUPPORTF_DISABLED; 172 else 173 continue; 174 } 175 (*fnCallback)((HACMDRIVERID) p, dwInstance, fdwSupport); 176 176 } 177 177 … … 226 226 MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen) 227 227 { 228 PWINE_ACMDRIVERID padid; 229 230 TRACE("(%p, %x, %08lu\n", phad, hadid, fdwOpen); 228 PWINE_ACMDRIVERID padid; 229 PWINE_ACMDRIVER pad; 230 231 dprintf(("(%p, %x, %08lu)\n", phad, hadid, fdwOpen)); 231 232 232 233 if (!phad) … … 240 241 return MMSYSERR_INVALFLAG; 241 242 242 if (padid->pACMDriver) { 243 /* FIXME: Is it allowed? */ 244 ERR("Can't open driver twice\n"); 243 pad = PWINE_ACMDRIVER(HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER))); 244 if (!pad) return MMSYSERR_NOMEM; 245 246 pad->obj.pACMDriverID = padid; 247 248 if (!padid->hInstModule) 249 pad->hDrvr = OpenDriverA(padid->pszDriverAlias, "drivers32", 0); 250 else 251 pad->hDrvr = padid->hInstModule; 252 253 if (!pad->hDrvr) { 254 HeapFree(MSACM_hHeap, 0, pad); 245 255 return MMSYSERR_ERROR; 246 256 } 247 257 248 padid->pACMDriver = PWINE_ACMDRIVER(HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER))); 249 padid->pACMDriver->obj.pACMDriverID = padid; 250 251 if (!padid->hInstModule) 252 padid->pACMDriver->hDrvr = OpenDriverA(padid->pszDriverAlias, "drivers32", 0); 253 else 254 padid->pACMDriver->hDrvr = padid->hInstModule; 255 256 if (!padid->pACMDriver->hDrvr) { 257 HeapFree(MSACM_hHeap, 0, padid->pACMDriver); 258 padid->pACMDriver = NULL; 259 return MMSYSERR_ERROR; 260 } 261 262 /* FIXME-ICC: "FARPROC" cannot be converted to "extern "STDCALL" LRESULT(*)(DWORD,HDRVR,UINT,LPARAM,LPARAM)" */ 263 // padid->pACMDriver->pfnDriverProc = GetProcAddress(padid->pACMDriver->hDrvr, "DriverProc"); 264 258 // pad->pfnDriverProc = GetProcAddress(pad->hDrvr, "DriverProc"); 259 260 /* insert new pad at beg of list */ 261 pad->pNextACMDriver = padid->pACMDriverList; 262 padid->pACMDriverList = pad; 263 265 264 /* FIXME: Create a WINE_ACMDRIVER32 */ 266 *phad = (HACMDRIVER) padid->pACMDriver;265 *phad = (HACMDRIVER)pad; 267 266 268 267 // return MMSYSERR_NOERROR; … … 318 317 break; 319 318 320 FIXME("(0x%08x, %ld, %ld): stub (partial)\n",321 hadid, dwPriority, fdwPriority) ;319 dprintf(("(0x%08x, %ld, %ld): stub (partial)\n", 320 hadid, dwPriority, fdwPriority)); 322 321 break; 323 322 } -
trunk/src/msacm32/msacm32.cpp
r1607 r2103 70 70 switch (GetVersion()) { 71 71 default: 72 dprintf((" OS not supported\n"));72 dprintf(("Current OS not supported\n")); 73 73 case WIN95: 74 74 return 0x04000000; /* 4.0.0 */ … … 89 89 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric) 90 90 { 91 PWINE_ACMOBJ pao = MSACM_GetObj(hao); 92 BOOL bLocal = TRUE; 93 91 PWINE_ACMOBJ pao = MSACM_GetObj(hao); 92 BOOL bLocal = TRUE; 93 PWINE_ACMDRIVERID padid; 94 DWORD val = 0; 95 94 96 dprintf(("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric)); 95 97 … … 97 99 case ACM_METRIC_COUNT_DRIVERS: 98 100 bLocal = FALSE; 101 /* fall thru */ 99 102 case ACM_METRIC_COUNT_LOCAL_DRIVERS: 100 103 if (!pao) 101 return MMSYSERR_INVALHANDLE; 102 return MMSYSERR_NOTSUPPORTED; 104 return MMSYSERR_INVALHANDLE; 105 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 106 if (padid->bEnabled /* && (local(padid) || !bLocal) */) 107 val++; 108 *(LPDWORD)pMetric = val; 109 return 0; 110 103 111 case ACM_METRIC_COUNT_CODECS: 112 if (!pao) 113 return MMSYSERR_INVALHANDLE; 104 114 bLocal = FALSE; 115 /* fall thru */ 105 116 case ACM_METRIC_COUNT_LOCAL_CODECS: 106 return MMSYSERR_NOTSUPPORTED; 117 /* FIXME: don't know how to differentiate codec, converters & filters yet */ 118 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 119 if (padid->bEnabled /* && (local(padid) || !bLocal) */) 120 val++; 121 *(LPDWORD)pMetric = val; 122 return 0; 123 107 124 case ACM_METRIC_COUNT_CONVERTERS: 108 125 bLocal = FALSE; 126 /* fall thru */ 109 127 case ACM_METRIC_COUNT_LOCAL_CONVERTERS: 110 return MMSYSERR_NOTSUPPORTED; 128 /* FIXME: don't know how to differentiate codec, converters & filters yet */ 129 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 130 if (padid->bEnabled /* && (local(padid) || !bLocal) */) 131 val++; 132 *(LPDWORD)pMetric = val; 133 return 0; 134 111 135 case ACM_METRIC_COUNT_FILTERS: 112 136 bLocal = FALSE; 137 /* fall thru */ 113 138 case ACM_METRIC_COUNT_LOCAL_FILTERS: 114 return MMSYSERR_NOTSUPPORTED; 139 /* FIXME: don't know how to differentiate codec, converters & filters yet */ 140 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 141 if (padid->bEnabled /* && (local(padid) || !bLocal) */) 142 val++; 143 *(LPDWORD)pMetric = val; 144 return 0; 145 115 146 case ACM_METRIC_COUNT_DISABLED: 116 147 bLocal = FALSE; 148 /* fall thru */ 117 149 case ACM_METRIC_COUNT_LOCAL_DISABLED: 118 150 if (!pao) 119 151 return MMSYSERR_INVALHANDLE; 120 return MMSYSERR_NOTSUPPORTED; 152 for (padid = MSACM_pFirstACMDriverID; padid; padid = padid->pNextACMDriverID) 153 if (!padid->bEnabled /* && (local(padid) || !bLocal) */) 154 val++; 155 *(LPDWORD)pMetric = val; 156 return 0; 157 121 158 case ACM_METRIC_COUNT_HARDWARE: 122 159 case ACM_METRIC_HARDWARE_WAVE_INPUT: -
trunk/src/msacm32/stream.cpp
r1607 r2103 48 48 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_CLOSE, (DWORD)&was->drvInst, 0); 49 49 if (ret == MMSYSERR_NOERROR) { 50 /* FIXME: shall the was->pDrv->hDrvr be also closed ? */ 50 if (was->hAcmDriver) 51 acmDriverClose(was->hAcmDriver, 0L); 51 52 HeapFree(MSACM_hHeap, 0, was); 52 53 } … … 169 170 was->obj.pACMDriverID = wad->obj.pACMDriverID; 170 171 was->pDrv = wad; 171 172 was->hAcmDriver = 0; /* not to close it in acmStreamClose */ 173 172 174 ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L); 173 175 if (ret != MMSYSERR_NOERROR) … … 183 185 was->obj.pACMDriverID = wad->obj.pACMDriverID; 184 186 was->pDrv = wad; 187 was->hAcmDriver = had; 185 188 186 189 ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L); 187 /* FIXME: when shall the acmDriver be Close():d ? */ 188 if (ret == MMSYSERR_NOERROR) 190 if (ret == MMSYSERR_NOERROR) { 191 if (fdwOpen & ACM_STREAMOPENF_QUERY) { 192 acmDriverClose(had, 0L); 193 } 189 194 break; 195 } 190 196 } 191 197 /* no match, close this acm driver and try next one */ … … 198 204 } 199 205 } 206 ret = MMSYSERR_NOERROR; 207 if (!(fdwOpen & ACM_STREAMOPENF_QUERY)) { 208 if (phas) 209 *phas = (HACMSTREAM)was; 210 dprintf(("=> (%d)\n", ret)); 211 return ret; 212 } 213 errCleanUp: 200 214 if (phas) 201 *phas = (HACMSTREAM)was; 202 dprintf(("=> (%d)\n", ret)); 203 ret = MMSYSERR_NOERROR; 204 if (!(fdwOpen & ACM_STREAMOPENF_QUERY)) 205 return ret; 206 errCleanUp: 215 *phas = (HACMSTREAM)0; 207 216 HeapFree(MSACM_hHeap, 0, was); 208 217 dprintf(("=> (%d)\n", ret)); -
trunk/src/msacm32/wineacm.h
r1607 r2103 5 5 */ 6 6 typedef struct _WINE_ACMDRIVERID *PWINE_ACMDRIVERID; 7 typedef struct _WINE_ACMDRIVER *PWINE_ACMDRIVER; 7 8 8 9 typedef struct _WINE_ACMOBJ … … 16 17 HDRVR hDrvr; 17 18 DRIVERPROC pfnDriverProc; 18 } WINE_ACMDRIVER, *PWINE_ACMDRIVER; 19 PWINE_ACMDRIVER pNextACMDriver; 20 } WINE_ACMDRIVER; 19 21 20 22 typedef struct _WINE_ACMSTREAM … … 23 25 PWINE_ACMDRIVER pDrv; 24 26 ACMDRVSTREAMINSTANCE drvInst; 27 HACMDRIVER hAcmDriver; 25 28 } WINE_ACMSTREAM, *PWINE_ACMSTREAM; 26 29 … … 32 35 DWORD dwProcessID; /* ID of process which installed a local driver */ 33 36 BOOL bEnabled; 34 PWINE_ACMDRIVER pACMDriver ; /* NULL if not open; shouldn't this be a list ? */37 PWINE_ACMDRIVER pACMDriverList; 35 38 PWINE_ACMDRIVERID pNextACMDriverID; 36 PWINE_ACMDRIVERID pPrev iousACMDriverID;39 PWINE_ACMDRIVERID pPrevACMDriverID; 37 40 } WINE_ACMDRIVERID; 38 41
Note:
See TracChangeset
for help on using the changeset viewer.