Ignore:
Timestamp:
Dec 18, 1999, 11:15:16 AM (26 years ago)
Author:
sandervl
Message:

JW's update (wine 991212)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/msacm32/driver.cpp

    r1607 r2103  
    6161                              LPARAM lParam, DWORD dwPriority, DWORD fdwAdd)
    6262{
    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));
    6565   
    6666    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
     
    7373MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose)
    7474{
    75     PWINE_ACMDRIVER p;
     75    PWINE_ACMDRIVER  p;
     76    PWINE_ACMDRIVER* tp;
    7677   
    7778    if (fdwClose)
     
    8182    if (!p)
    8283        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)
    8793        CloseDriver(p->hDrvr, 0, 0);
    8894   
     
    127133MMRESULT WINAPI acmDriverDetailsW(HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails)
    128134{
    129     PWINE_ACMDRIVERID p;
     135    HACMDRIVER acmDrvr;
    130136    MMRESULT mmr;
    131     BOOL bOpenTemporary;
    132    
    133     p = MSACM_GetDriverID(hadid);
    134     if (!p)
    135         return MMSYSERR_INVALHANDLE;
    136137   
    137138    if (fdwDetails)
    138139        return MMSYSERR_INVALFLAG;
    139140   
    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);
    152146    }
    153147   
     
    160154MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum)
    161155{
    162     PWINE_ACMDRIVERID p;
    163    
     156    PWINE_ACMDRIVERID   p;
     157    DWORD               fdwSupport;
     158
    164159    if (!fnCallback) {
    165160        return MMSYSERR_INVALPARAM;
     
    170165    }
    171166   
    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);
    176176    }
    177177   
     
    226226MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen)
    227227{
    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));
    231232
    232233    if (!phad)
     
    240241        return MMSYSERR_INVALFLAG;
    241242   
    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);
    245255        return MMSYSERR_ERROR;
    246256    }
    247257   
    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
    265264    /* FIXME: Create a WINE_ACMDRIVER32 */
    266     *phad = (HACMDRIVER) padid->pACMDriver;
     265    *phad = (HACMDRIVER)pad;
    267266   
    268267//    return MMSYSERR_NOERROR;
     
    318317            break;
    319318       
    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));
    322321        break;
    323322    }
Note: See TracChangeset for help on using the changeset viewer.