Changeset 2103 for trunk/src/msacm32


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

JW's update (wine 991212)

Location:
trunk/src/msacm32
Files:
4 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    }
  • trunk/src/msacm32/msacm32.cpp

    r1607 r2103  
    7070    switch (GetVersion()) {
    7171    default:
    72         dprintf(("OS not supported\n"));
     72        dprintf(("Current OS not supported\n"));
    7373    case WIN95:
    7474        return 0x04000000; /* 4.0.0 */
     
    8989MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID  pMetric)
    9090{
    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
    9496    dprintf(("(0x%08x, %d, %p): stub\n", hao, uMetric, pMetric));
    9597   
     
    9799    case ACM_METRIC_COUNT_DRIVERS:
    98100        bLocal = FALSE;
     101        /* fall thru */
    99102    case ACM_METRIC_COUNT_LOCAL_DRIVERS:
    100103        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
    103111    case ACM_METRIC_COUNT_CODECS:
     112        if (!pao)
     113            return MMSYSERR_INVALHANDLE;
    104114        bLocal = FALSE;
     115        /* fall thru */
    105116    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
    107124    case ACM_METRIC_COUNT_CONVERTERS:
    108125        bLocal = FALSE;
     126        /* fall thru */
    109127    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
    111135    case ACM_METRIC_COUNT_FILTERS:
    112136        bLocal = FALSE;
     137        /* fall thru */
    113138    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
    115146    case ACM_METRIC_COUNT_DISABLED:
    116147        bLocal = FALSE;
     148        /* fall thru */
    117149    case ACM_METRIC_COUNT_LOCAL_DISABLED:
    118150        if (!pao)
    119151            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
    121158    case ACM_METRIC_COUNT_HARDWARE:
    122159    case ACM_METRIC_HARDWARE_WAVE_INPUT:
  • trunk/src/msacm32/stream.cpp

    r1607 r2103  
    4848    ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_CLOSE, (DWORD)&was->drvInst, 0);
    4949    if (ret == MMSYSERR_NOERROR) {
    50         /* FIXME: shall the was->pDrv->hDrvr be also closed ? */
     50        if (was->hAcmDriver)
     51            acmDriverClose(was->hAcmDriver, 0L);       
    5152        HeapFree(MSACM_hHeap, 0, was);
    5253    }
     
    169170        was->obj.pACMDriverID = wad->obj.pACMDriverID;
    170171        was->pDrv = wad;
    171        
     172        was->hAcmDriver = 0; /* not to close it in acmStreamClose */
     173
    172174        ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L);
    173175        if (ret != MMSYSERR_NOERROR)
     
    183185                    was->obj.pACMDriverID = wad->obj.pACMDriverID;
    184186                    was->pDrv = wad;
     187                    was->hAcmDriver = had;
    185188                   
    186189                    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                        }
    189194                        break;
     195                    }
    190196                }
    191197                /* no match, close this acm driver and try next one */
     
    198204        }
    199205    }
     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    }
     213errCleanUp:             
    200214    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;
    207216    HeapFree(MSACM_hHeap, 0, was);
    208217    dprintf(("=> (%d)\n", ret));
  • trunk/src/msacm32/wineacm.h

    r1607 r2103  
    55 */
    66typedef struct _WINE_ACMDRIVERID *PWINE_ACMDRIVERID;
     7typedef struct _WINE_ACMDRIVER   *PWINE_ACMDRIVER;
    78
    89typedef struct _WINE_ACMOBJ
     
    1617    HDRVR               hDrvr;
    1718    DRIVERPROC          pfnDriverProc;
    18 } WINE_ACMDRIVER, *PWINE_ACMDRIVER;
     19    PWINE_ACMDRIVER     pNextACMDriver;
     20} WINE_ACMDRIVER;
    1921
    2022typedef struct _WINE_ACMSTREAM
     
    2325    PWINE_ACMDRIVER     pDrv;
    2426    ACMDRVSTREAMINSTANCE drvInst;
     27    HACMDRIVER          hAcmDriver;
    2528} WINE_ACMSTREAM, *PWINE_ACMSTREAM;
    2629
     
    3235    DWORD               dwProcessID;          /* ID of process which installed a local driver */
    3336    BOOL                bEnabled;
    34     PWINE_ACMDRIVER     pACMDriver;           /* NULL if not open; shouldn't this be a list ? */
     37    PWINE_ACMDRIVER     pACMDriverList;
    3538    PWINE_ACMDRIVERID   pNextACMDriverID;
    36     PWINE_ACMDRIVERID   pPreviousACMDriverID;
     39    PWINE_ACMDRIVERID   pPrevACMDriverID;
    3740} WINE_ACMDRIVERID;
    3841
Note: See TracChangeset for help on using the changeset viewer.