Changeset 21570 for trunk/src


Ignore:
Timestamp:
Feb 9, 2011, 5:02:00 PM (15 years ago)
Author:
dmik
Message:

winmm: Accept handles returned by mixerOpen() as IDs in mixerGetDevCaps() (according to MSDN). We actually accept any ID ATM since we provide only one mixer device but that shoud be fine for now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/winmm/mixer.cpp

    r8855 r21570  
    55 *
    66 * Copyright 2002 Sander van Leeuwen (sandervl@xs4all.nl)
    7  * 
     7 *
    88 * TODO: Mixer notification
    9  * 
     9 *
    1010 * NOTE: Not really flexible (capabilities, > 1 audio card)
    1111 *
     
    1313 * (mixerGetLineControlsW/mixerGetControlDetailsW)
    1414 * Copyright 1993 Martin Ayotte
    15  *                Eric POUECH 
     15 *                Eric POUECH
    1616 *
    1717 * Project Odin Software License can be found in LICENSE.TXT
     
    5151//array of all mixer lines
    5252static MIXLINE      *pmixerLines[MAX_MIXER_LINES]      = {NULL};
    53 //array of all mixer controls                         
     53//array of all mixer controls
    5454static MIXCONTROL    mixerControls[MAX_MIXER_CONTROLS] = {0};
    5555
     
    6565    DWORD       lineID, controlType;
    6666    DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj;
    67    
     67
    6868    if((fdwDetails & 0xF0000000)== MIXER_OBJECTF_HMIXER) {
    6969        if(!pMixInfo) {
     
    235235            return MMSYSERR_NOERROR;
    236236        }
    237        
     237
    238238#ifdef DEBUG
    239239        case MIXERCONTROL_CONTROLTYPE_MIXER:
     
    369369            dprintf(("Only implemented for mux controls"));
    370370            return MIXERR_INVALCONTROL;
    371            
     371
    372372        default:
    373373            dprintf(("Only implemented for multiple item controls"));
     
    445445    int         val;
    446446    DEVICE_STRUCT *pMixInfo = (DEVICE_STRUCT *)hmxobj;
    447      
     447
    448448    if((fdwDetails & 0xF0000000) == MIXER_OBJECTF_HMIXER) {
    449449        if(!pMixInfo) {
     
    461461        return MMSYSERR_INVALPARAM;
    462462    }
    463    
     463
    464464    switch (fdwDetails & MIXER_GETCONTROLDETAILSF_QUERYMASK) {
    465465    case MIXER_GETCONTROLDETAILSF_VALUE:
     
    497497            //select recording source
    498498            for(int i=0;i<nrDestinations;i++) {
    499                 if(mixerDest[i].id == MIXER_DEST_WAVEIN) 
     499                if(mixerDest[i].id == MIXER_DEST_WAVEIN)
    500500                {
    501501                    for(int j=0;j<mixerDest[i].cConnections;j++) {
    502502                        dprintf(("wavein source %s %d (id %d)", pmixerLines[mixerDest[i].Connections[j]]->line.szName, pmixerLines[mixerDest[i].Connections[j]]->id, mixerDest[i].Connections[j]));
    503                         if(pDetails[j].fValue) 
     503                        if(pDetails[j].fValue)
    504504                        {
    505505                            if(OSLibMixSetRecSource(pmixerLines[mixerDest[i].Connections[j]]->id) == FALSE) {
     
    590590            goto success;
    591591        }
    592        
     592
    593593#ifdef DEBUG
    594594        case MIXERCONTROL_CONTROLTYPE_MIXER:
     
    711711            return MMSYSERR_INVALPARAM;
    712712
    713     switch(fdwControls & MIXER_GETLINECONTROLSF_QUERYMASK) 
     713    switch(fdwControls & MIXER_GETLINECONTROLSF_QUERYMASK)
    714714    {
    715715    case MIXER_GETLINECONTROLSF_ALL:
     
    755755                    break;
    756756                }
    757                 else 
     757                else
    758758                if(pmixerLines[i]->Controls[j] == -1) {
    759759                    break;
     
    924924            lpmlcW->u.dwControlType = mlcA.u.dwControlType;
    925925            lpmlcW->cControls = mlcA.cControls;
    926        
     926
    927927        for (i = 0; i < mlcA.cControls; i++) {
    928928                lpmlcW->pamxctrl[i].cbStruct = sizeof(MIXERCONTROLW);
     
    937937                                 lpmlcW->pamxctrl[i].szName,
    938938                                 sizeof(lpmlcW->pamxctrl[i].szName)/sizeof(WCHAR) );
    939                 /* sizeof(lpmlcW->pamxctrl[i].Bounds) == 
     939                /* sizeof(lpmlcW->pamxctrl[i].Bounds) ==
    940940                 * sizeof(mlcA.pamxctrl[i].Bounds) */
    941                 memcpy(&lpmlcW->pamxctrl[i].Bounds, &mlcA.pamxctrl[i].Bounds, 
     941                memcpy(&lpmlcW->pamxctrl[i].Bounds, &mlcA.pamxctrl[i].Bounds,
    942942                           sizeof(mlcA.pamxctrl[i].Bounds));
    943                 /* sizeof(lpmlcW->pamxctrl[i].Metrics) == 
     943                /* sizeof(lpmlcW->pamxctrl[i].Metrics) ==
    944944                 * sizeof(mlcA.pamxctrl[i].Metrics) */
    945                 memcpy(&lpmlcW->pamxctrl[i].Metrics, &mlcA.pamxctrl[i].Metrics, 
     945                memcpy(&lpmlcW->pamxctrl[i].Metrics, &mlcA.pamxctrl[i].Metrics,
    946946                           sizeof(mlcA.pamxctrl[i].Metrics));
    947947            }
     
    973973            return MMSYSERR_INVALPARAM;
    974974    }
    975    
    976     switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) 
     975
     976    switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK)
    977977    {
    978978    case MIXER_GETLINEINFOF_DESTINATION:
     
    10181018        dprintf(("MIXER_GETLINEINFOF_COMPONENTTYPE"));
    10191019#ifdef DEBUG
    1020             switch (lpMl->dwComponentType) 
     1020            switch (lpMl->dwComponentType)
    10211021            {
    10221022        case MIXERLINE_COMPONENTTYPE_DST_UNDEFINED:
     
    11221122            dprintf(("MIXERLINE_TARGETTYPE_AUX"));
    11231123            break;
    1124         default:       
     1124        default:
    11251125                dprintf(("Unhandled target type (%08lx)\n", lpMl->Target.dwType));
    11261126                return MMSYSERR_INVALPARAM;
     
    11471147            return MMSYSERR_INVALPARAM;
    11481148            break;
    1149     }   
     1149    }
    11501150    return MMSYSERR_NOERROR;
    11511151}
     
    12271227    }
    12281228
     1229    // According to MSDN, uMxId may be a handle returned by mixerOpen() so we
     1230    // must accept this situation. Note that since we don't actually track
     1231    // the created handles and that we provide only one mixer anyway
     1232    // (see mixerGetNumDevs()), we have to accept any uMxId value here...
     1233#if 0
    12291234    if(uMxId > 0) {
    12301235        return MMSYSERR_BADDEVICEID;
    12311236    }
     1237#endif
    12321238
    12331239    //According to MSDN, nothing is copied when cbmxcaps is zero
     
    12531259    }
    12541260
     1261    // According to MSDN, uMxId may be a handle returned by mixerOpen() so we
     1262    // must accept this situation. Note that since we don't actually track
     1263    // the created handles and that we provide only one mixer anyway
     1264    // (see mixerGetNumDevs()), we have to accept any uMxId value here...
     1265#if 0
    12551266    if(uMxId > 0) {
    12561267        return MMSYSERR_BADDEVICEID;
    12571268    }
     1269#endif
    12581270
    12591271    //According to MSDN, nothing is copied when cbmxcaps is zero
     
    13211333    DEVICE_STRUCT *pMixInfo;
    13221334
    1323     if(DartWaveOut::getNumDevices() == 0) {
     1335    if (mixerGetNumDevs() <= uMxId) {
    13241336        if(phmx) *phmx = 0;
    13251337        return MMSYSERR_NODRIVER;
    13261338    }
     1339
    13271340    pMixInfo = (DEVICE_STRUCT *)malloc(sizeof(DEVICE_STRUCT));
    13281341    if(pMixInfo == NULL) {
     
    13501363/******************************************************************************/
    13511364/******************************************************************************/
    1352 BOOL mixerInit() 
     1365BOOL mixerInit()
    13531366{
    13541367    MIXLINE *pDestLine;
     
    13881401    mixerAddControl(MIX_CTRL_VOL_OUT_LINE, pDestLine);
    13891402    mixerAddControl(MIX_CTRL_MUTE_OUT_LINE, pDestLine);
     1403
    13901404    if(OSLibMixIsControlPresent(MIX_CTRL_OUT_L_3DCENTER)) {
    13911405        mixerAddControl(MIX_CTRL_OUT_L_3DCENTER, pDestLine);
     
    15351549/******************************************************************************/
    15361550void mixerExit()
    1537 { 
     1551{
    15381552    if(fMMPMAvailable == FALSE) return;
    15391553
     
    15441558static MIXLINE *mixerAddSource(MIXLINE *pDestLine, DWORD dwSource)
    15451559{
    1546     MIXLINE    *pSource = &mixerSource[nrSources]; 
     1560    MIXLINE    *pSource = &mixerSource[nrSources];
    15471561    MIXERLINEA *pline   = &pSource->line;
    15481562
     
    16911705        pline->Target.dwType   = MIXERLINE_TARGETTYPE_WAVEIN;
    16921706        break;
    1693        
     1707
    16941708    default:
    16951709        DebugInt3();
     
    17031717    pline->Target.wPid           = WINMM_MIXER_CAPS_WPID;
    17041718    pline->Target.vDriverVersion = WINMM_MIXER_CAPS_VERSION;
    1705    
     1719
    17061720    dprintf(("Adding destination %s (%s) connections %d controls %d", pline->szName, pline->szShortName, pline->cConnections, pline->cControls));
    17071721    nrDestinations++;
     
    18401854        return FALSE;
    18411855    }
    1842  
     1856
    18431857    //add control to list of controls associated with source line
    18441858    pSrcLine->Controls[pSrcLine->cControls] = pctrl->dwControlID;
Note: See TracChangeset for help on using the changeset viewer.