Changeset 8492 for trunk/src


Ignore:
Timestamp:
May 25, 2002, 7:19:41 PM (23 years ago)
Author:
sandervl
Message:

more mixer changes/fixes

Location:
trunk/src/winmm
Files:
5 edited

Legend:

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

    r8488 r8492  
    1 /* $Id: mixer.cpp,v 1.16 2002-05-25 08:07:59 sandervl Exp $ */
     1/* $Id: mixer.cpp,v 1.17 2002-05-25 17:19:40 sandervl Exp $ */
    22
    33/*
     
    358358        pLine = pmixerLines[lpMlc->dwLineID];
    359359        if(lpMlc->cControls != pLine->cControls || lpMlc->cbmxctrl < pLine->cControls*sizeof(MIXERCONTROLA)) {
    360             dprintf(("ERROR: invalid nr of controls %d or structure size %d", lpMlc->cControls, lpMlc->cbmxctrl));
     360            dprintf(("ERROR: invalid nr of controls %d or structure size %d (%d) (ptr %x)", lpMlc->cControls, lpMlc->cbmxctrl, pLine->cControls*sizeof(MIXERCONTROLA), lpMlc->pamxctrl));
    361361            return MMSYSERR_INVALPARAM;
    362362        }
     
    522522
    523523        }
    524         return MIXERR_INVALVALUE;
     524        return MIXERR_INVALLINE;    //returned by win2k when type not found
    525525    }
    526526    default:
     
    649649
    650650    case MIXER_GETLINEINFOF_COMPONENTTYPE:
     651    {
    651652        dprintf(("MIXER_GETLINEINFOF_COMPONENTTYPE"));
     653#ifdef DEBUG
    652654            switch (lpMl->dwComponentType)
    653655            {
     
    679681            dprintf(("MIXERLINE_COMPONENTTYPE_DST_VOICEIN"));
    680682            break;
     683        case MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED:
     684            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED"));
     685            break;
     686        case MIXERLINE_COMPONENTTYPE_SRC_DIGITAL:
     687            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_DIGITAL"));
     688            break;
     689        case MIXERLINE_COMPONENTTYPE_SRC_LINE:
     690            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_LINE"));
     691            break;
     692        case MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE:
     693            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE"));
     694            break;
     695        case MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER:
     696            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER"));
     697            break;
     698        case MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC:
     699            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC"));
     700            break;
     701        case MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE:
     702            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE"));
     703            break;
     704        case MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER:
     705            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER"));
     706            break;
     707        case MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT:
     708            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT"));
     709            break;
     710        case MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY:
     711            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY"));
     712            break;
     713        case MIXERLINE_COMPONENTTYPE_SRC_ANALOG:
     714            dprintf(("MIXERLINE_COMPONENTTYPE_SRC_ANALOG"));
     715            break;
    681716        default:
    682717                dprintf(("Unhandled component type (%08lx)\n", lpMl->dwComponentType));
    683718                return MMSYSERR_INVALPARAM;
    684719            }
    685         return MIXERR_INVALLINE;
     720#endif
     721        //search all lines (src & dest) for one with specified type
     722        for(int i=0;i<nrLines;i++) {
     723            if(pmixerLines[i]->dwComponentType == lpMl->dwComponentType) {
     724                break;
     725            }
     726        }
     727        if(i == nrLines) {
     728            dprintf(("Component type %d not found!!", lpMl->dwComponentType));
     729            return MIXERR_INVALLINE;
     730        }
     731        memcpy(lpMl, pmixerLines[i], sizeof(MIXERLINEA));
     732        dprintf(("found line %s (%s) id %d connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->dwLineID, lpMl->cConnections, lpMl->cControls));
    686733            break;
    687 
     734    }
    688735    case MIXER_GETLINEINFOF_TARGETTYPE:
    689             dprintf(("_TARGETTYPE not implemented yet.\n"));
    690         return MIXERR_INVALLINE;
    691             break;
     736    {
     737            dprintf(("MIXER_GETLINEINFOF_TARGETTYPE %x", lpMl->Target.dwType));
     738#ifdef DEBUG
     739        switch(lpMl->Target.dwType) {
     740        case MIXERLINE_TARGETTYPE_UNDEFINED:
     741            dprintf(("MIXERLINE_TARGETTYPE_UNDEFINED"));
     742            break;
     743        case MIXERLINE_TARGETTYPE_WAVEOUT:
     744            dprintf(("MIXERLINE_TARGETTYPE_WAVEOUT"));
     745            break;
     746        case MIXERLINE_TARGETTYPE_WAVEIN:
     747            dprintf(("MIXERLINE_TARGETTYPE_WAVEIN"));
     748            break;
     749        case MIXERLINE_TARGETTYPE_MIDIOUT:
     750            dprintf(("MIXERLINE_TARGETTYPE_MIDIOUT"));
     751            break;
     752        case MIXERLINE_TARGETTYPE_MIDIIN:
     753            dprintf(("MIXERLINE_TARGETTYPE_MIDIIN"));
     754            break;
     755        case MIXERLINE_TARGETTYPE_AUX:
     756            dprintf(("MIXERLINE_TARGETTYPE_AUX"));
     757            break;
     758        default:       
     759                dprintf(("Unhandled target type (%08lx)\n", lpMl->Target.dwType));
     760                return MMSYSERR_INVALPARAM;
     761        }
     762#endif
     763        //search all lines (src & dest) for one with specified type
     764        //TODO: Should we compare mid, pid & pddname too? (must be initialized according to MSDN)
     765        //      (see below; unicode version doesn't copy pddname; change if these checks are required)
     766        for(int i=0;i<nrLines;i++) {
     767            if(pmixerLines[i]->Target.dwType == lpMl->Target.dwType) {
     768                break;
     769            }
     770        }
     771        if(i == nrLines) {
     772            dprintf(("Component type %d not found!!", lpMl->Target.dwType));
     773            return MIXERR_INVALLINE;
     774        }
     775        memcpy(lpMl, pmixerLines[i], sizeof(MIXERLINEA));
     776        dprintf(("found line %s (%s) id %d connections %d controls %d", lpMl->szName, lpMl->szShortName, lpMl->dwLineID, lpMl->cConnections, lpMl->cControls));
     777        break;
     778    }
    692779    default:
    693780            dprintf(("Unknown flag (%08lx)\n", fdwInfo & MIXER_GETLINEINFOF_QUERYMASK));
     
    721808    line.Target.wMid           = pmxl->Target.wMid;
    722809    line.Target.wPid           = pmxl->Target.wPid;
     810    //TODO: need to copy this?? (MIXER_GETLINEINFOF_TARGETTYPE)
    723811    line.Target.szPname[0]     = 0;
    724812
     
    751839MMRESULT WINAPI mixerMessage(HMIXER hmx, UINT uMsg, DWORD dwParam1, DWORD dwParam2)
    752840{
    753     dprintf(("WINMM:mixerMessage - stub\n" ));
    754     return MMSYSERR_INVALPARAM;
     841    dprintf(("WINMM:mixerMessage - NOT IMPLEMENTED" ));
     842    return MMSYSERR_NOTSUPPORTED;
    755843}
    756844/******************************************************************************/
     
    778866    if(cbmxcaps >= sizeof(MIXERCAPSA)) {
    779867        // we have to fill in this thing
    780         pmxcaps->wMid = 0;                  /* manufacturer ID */
    781         pmxcaps->wPid = 0;                  /* product ID */
    782         pmxcaps->vDriverVersion = 0x0001;        /* version of the driver */
    783         strcpy( pmxcaps->szPname, WINMM_MIXERSTRING_A); /* product name */
     868        pmxcaps->wMid = WINMM_MIXER_CAPS_WMID;                  /* manufacturer ID */
     869        pmxcaps->wPid = WINMM_MIXER_CAPS_WPID;                  /* product ID */
     870        pmxcaps->vDriverVersion = WINMM_MIXER_CAPS_VERSION;     /* version of the driver */
     871        strncpy( pmxcaps->szPname, WINMM_MIXERSTRING_A, sizeof(pmxcaps->szPname)); /* product name */
    784872
    785873        pmxcaps->fdwSupport    = 0;    //no mixer flags exist
     
    805893    if(cbmxcaps >= sizeof(MIXERCAPSW)) {
    806894        // we have to fill in this thing
    807         pmxcaps->wMid = 0;                  /* manufacturer ID */
    808         pmxcaps->wPid = 0;                  /* product ID */
    809         pmxcaps->vDriverVersion = 0x0001;        /* version of the driver */
    810         lstrcpyW( pmxcaps->szPname, WINMM_MIXERSTRING_W ); /* product name */
     895        pmxcaps->wMid = WINMM_MIXER_CAPS_WMID;                  /* manufacturer ID */
     896        pmxcaps->wPid = WINMM_MIXER_CAPS_WPID;                  /* product ID */
     897        pmxcaps->vDriverVersion = WINMM_MIXER_CAPS_VERSION;     /* version of the driver */
     898        lstrcpyW( pmxcaps->szPname, WINMM_MIXERSTRING_W );      /* product name */
    811899
    812900        pmxcaps->fdwSupport    = 0;    //no mixer flags exist
     
    899987{
    900988    MIXERLINEA *pDestLine;
    901     MIXERCONTROLA *pLineOutMix;
    902989    MIXERCONTROLA *pWaveInMux;
    903990
     
    908995    memset(mixerDestInputs, -1, sizeof(mixerDestInputs));
    909996
    910     if(OSLibMixerOpen() == TRUE) {
     997    if(OSLibMixerOpen() == FALSE) {
    911998        //Line out destination
    912999        pDestLine = mixerAddDestination(MIXER_DEST_LINEOUT);
    913 
    914         pLineOutMix = mixerAddControl(pDestLine, MIX_CTRL_MIX_OUT_LINE, pDestLine);
    9151000        mixerAddControl(pDestLine, MIX_CTRL_VOL_OUT_LINE, pDestLine);
    9161001        mixerAddControl(pDestLine, MIX_CTRL_MUTE_OUT_LINE, pDestLine);
    917         pLineOutMix->cMultipleItems = pDestLine->cConnections;
    9181002
    9191003        //WaveIn destination
     
    9251009        return TRUE;
    9261010    }
     1011
    9271012    //Line out destination
    9281013    pDestLine = mixerAddDestination(MIXER_DEST_LINEOUT);
    929 
    930     pLineOutMix = mixerAddControl(pDestLine, MIX_CTRL_MIX_OUT_LINE, pDestLine);
    9311014
    9321015    mixerAddControl(pDestLine, MIX_CTRL_VOL_OUT_LINE, pDestLine);
     
    10031086        mixerAddControl(pDestLine, MIX_CTRL_MUTE_IN_L_VIDEO, pLine);
    10041087    }
    1005     pLineOutMix->cMultipleItems = pDestLine->cConnections;
    10061088
    10071089    //Wave In Destination
     
    10651147static MIXERLINEA *mixerAddSource(MIXERLINEA *pDestLine, DWORD dwSource)
    10661148{
    1067     MIXERLINEA *pline  = &mixerSource[nrSources];
     1149    MIXERLINEA *pline = &mixerSource[nrSources];
    10681150
    10691151    if(nrSources >= MAX_MIXER_SOURCES) {
     
    10731155    }
    10741156
    1075     pline->cbStruct = sizeof(MIXERLINEA);
    10761157    memset(pline, 0, sizeof(MIXERLINEA));
    10771158
    1078     pline->cConnections    = 0;
    1079     pline->cControls       = 0;
    1080     pline->dwDestination   = 0;
    1081     pline->fdwLine         = MIXERLINE_LINEF_SOURCE;
    1082     pline->dwSource        = nrSources;
     1159    pline->cbStruct              = sizeof(MIXERLINEA);
     1160    pline->cConnections          = 0;
     1161    pline->cControls             = 0;
     1162    pline->dwDestination         = 0;
     1163    pline->fdwLine               = MIXERLINE_LINEF_SOURCE;
     1164    pline->dwSource              = nrSources;
     1165    pline->Target.dwDeviceID     = 0;
     1166    pline->Target.wMid           = WINMM_MIXER_CAPS_WMID;
     1167    pline->Target.vDriverVersion = WINMM_MIXER_CAPS_VERSION;
    10831168
    10841169    switch(dwSource) {
     
    11451230    strncpy(pline->szShortName, szSourceName[dwSource][0], sizeof(pline->szShortName));
    11461231    strncpy(pline->szName,      szSourceName[dwSource][1], sizeof(pline->szName));
     1232    strncpy(pline->Target.szPname, WINMM_MIXERSTRING_A, sizeof(pline->Target.szPname));
    11471233
    11481234    dprintf(("Adding Source %s (%s)", pline->szName, pline->szShortName));
     
    11561242    nrLines++;
    11571243
    1158     //increase nr of inputs at destinateion line
     1244    //increase nr of inputs at destination line
    11591245    pDestLine->cConnections++;
    11601246
     
    11751261        return NULL;
    11761262    }
    1177     pline->cbStruct = sizeof(MIXERLINEA);
    11781263    memset(pline, 0, sizeof(MIXERLINEA));
     1264    pline->cbStruct        = sizeof(MIXERLINEA);
     1265    pline->cConnections    = 0;
     1266    pline->cControls       = 0;
     1267    pline->dwSource        = (DWORD)-1;
     1268    pline->dwDestination   = nrDestinations;
    11791269
    11801270    switch(dwDest) {
    11811271    case MIXER_DEST_LINEOUT:
    1182         pline->dwDestination   = nrDestinations;
    11831272        pline->cChannels       = 2;
    1184         pline->cConnections    = 0;
    1185         pline->cControls       = 0;
    11861273        pline->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    1187         pline->dwSource        = 0;
    11881274        pline->fdwLine         = MIXERLINE_LINEF_ACTIVE;
    11891275        pline->Target.dwType   = MIXERLINE_TARGETTYPE_UNDEFINED;
     
    11911277
    11921278    case MIXER_DEST_SPDIFOUT:
    1193         pline->dwDestination   = nrDestinations;
    11941279        pline->cChannels       = 2;
    1195         pline->cConnections    = 0;
    1196         pline->cControls       = 0;
    11971280        pline->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_DIGITAL;
    1198         pline->dwSource        = 0;
    11991281        pline->fdwLine         = MIXERLINE_LINEF_ACTIVE;
    12001282        pline->Target.dwType   = MIXERLINE_TARGETTYPE_UNDEFINED;
     
    12021284
    12031285    case MIXER_DEST_WAVEIN:
    1204         pline->dwSource        = nrDestinations;
    12051286        pline->cChannels       = 2;
    1206         pline->cConnections    = 0;
    1207         pline->cControls       = 0;
    12081287        pline->dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
    1209         pline->dwDestination   = 0;
    1210         pline->fdwLine         = MIXERLINE_LINEF_SOURCE;
    1211         pline->Target.dwType   = MIXERLINE_TARGETTYPE_UNDEFINED;
     1288        pline->fdwLine         = MIXERLINE_LINEF_ACTIVE;
     1289        pline->Target.dwType   = MIXERLINE_TARGETTYPE_WAVEIN;
    12121290        break;
    12131291       
     
    12181296    strncpy(pline->szShortName, szDestName[dwDest][0], sizeof(pline->szShortName));
    12191297    strncpy(pline->szName,      szDestName[dwDest][1], sizeof(pline->szName));
     1298    strncpy(pline->Target.szPname, WINMM_MIXERSTRING_A, sizeof(pline->Target.szPname));
     1299    pline->Target.dwDeviceID     = 0;
     1300    pline->Target.wMid           = WINMM_MIXER_CAPS_WMID;
     1301    pline->Target.wPid           = WINMM_MIXER_CAPS_WPID;
     1302    pline->Target.vDriverVersion = WINMM_MIXER_CAPS_VERSION;
     1303   
    12201304    dprintf(("Adding destination %s (%s) connections %d controls %d", pline->szName, pline->szShortName, pline->cConnections, pline->cControls));
    12211305    nrDestinations++;
     
    12701354    }
    12711355
     1356    memset(pctrl, 0, sizeof(MIXERCONTROLA));
    12721357    pctrl->cbStruct = sizeof(MIXERCONTROLA);
    1273     memset(pctrl, 0, sizeof(MIXERCONTROLA));
    1274 
    12751358    pctrl->cMultipleItems   = 0;
    12761359    pctrl->dwControlID      = nrControls;
    12771360    pctrl->fdwControl       = 0;
    12781361    switch(dwControl) {
    1279     case MIX_CTRL_MIX_OUT_LINE:
    1280         pctrl->fdwControl        = MIXERCONTROL_CONTROLF_MULTIPLE | MIXERCONTROL_CONTROLF_UNIFORM;
    1281         pctrl->dwControlType     = MIXERCONTROL_CONTROLTYPE_MIXER;
    1282         pctrl->Bounds.s.lMinimum = 0;
    1283         pctrl->Bounds.s.lMaximum = 1;
    1284         pctrl->Metrics.cSteps    = 1;
    1285         pctrl->cMultipleItems    = 0;   //to be filled in later (see caller)
    1286         break;
    1287 
    12881362    case MIX_CTRL_MUX_IN_W_SRC:
    12891363        pctrl->fdwControl       = MIXERCONTROL_CONTROLF_MULTIPLE | MIXERCONTROL_CONTROLF_UNIFORM;
     
    13081382    case MIX_CTRL_VOL_IN_L_MIDI:
    13091383        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_VOLUME;
    1310         pctrl->Bounds.s.lMinimum = 0;
    1311         pctrl->Bounds.s.lMaximum = 100;
    1312         pctrl->Metrics.cSteps    = 1;
     1384        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13131385        break;
    13141386
     
    13251397    case MIX_CTRL_VOL_IN_W_MIDI:
    13261398        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_VOLUME;
    1327         pctrl->Bounds.s.lMinimum = 0;
    1328         pctrl->Bounds.s.lMaximum = 100;
    1329         pctrl->Metrics.cSteps    = 1;
     1399        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13301400        mixerDestInputs[MIXER_DEST_WAVEIN][nrWaveInInputs] = mixerSourceLineId[mixerWaveInVolToSource(dwControl)];
    13311401        nrWaveInInputs++;
     
    13511421    case MIX_CTRL_VOL_OUT_SPDIF:
    13521422        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_VOLUME;
    1353         pctrl->Bounds.s.lMinimum = 0;
    1354         pctrl->Bounds.s.lMaximum = 100;
    1355         pctrl->Metrics.cSteps    = 1;
     1423        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13561424        break;
    13571425
     
    13751443        pctrl->fdwControl       = MIXERCONTROL_CONTROLF_UNIFORM;
    13761444        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_FADER;
    1377         pctrl->Bounds.s.lMinimum = 0;
    1378         pctrl->Bounds.s.lMaximum = 100;
    1379         pctrl->Metrics.cSteps    = 1;
     1445        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13801446        break;
    13811447
     
    13831449        pctrl->fdwControl       = MIXERCONTROL_CONTROLF_UNIFORM;
    13841450        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_FADER;
    1385         pctrl->Bounds.s.lMinimum = 0;
    1386         pctrl->Bounds.s.lMaximum = 100;
    1387         pctrl->Metrics.cSteps    = 1;
     1451        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13881452        break;
    13891453
    13901454    case MIX_CTRL_OUT_L_TREBLE:
    13911455        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_TREBLE;
    1392         pctrl->Bounds.s.lMinimum = 0;
    1393         pctrl->Bounds.s.lMaximum = 100;
    1394         pctrl->Metrics.cSteps    = 1;
     1456        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    13951457        break;
    13961458
    13971459    case MIX_CTRL_OUT_L_BASS:
    13981460        pctrl->dwControlType    = MIXERCONTROL_CONTROLTYPE_BASS;
    1399         pctrl->Bounds.s.lMinimum = 0;
    1400         pctrl->Bounds.s.lMaximum = 100;
    1401         pctrl->Metrics.cSteps    = 1;
     1461        OSLibMixGetCtrlCaps(dwControl, &pctrl->Bounds.s.lMinimum, &pctrl->Bounds.s.lMaximum, &pctrl->Metrics.cSteps);
    14021462        break;
    14031463
     
    14061466        return FALSE;
    14071467    }
    1408     //increase nr of controls of corresponding destinateion line
    1409     pDestLine->cControls++;
    14101468 
    14111469    //add control to list of controls associated with source line
     
    14191477        DebugInt3();
    14201478    }
     1479    //increase nr of controls of corresponding source line
     1480    pSrcLine->cControls++;
    14211481
    14221482    strncpy(pctrl->szShortName, szCtrlName[dwControl][0], sizeof(pctrl->szShortName));
  • trunk/src/winmm/mixer.h

    r8477 r8492  
    1 /* $Id: mixer.h,v 1.2 2002-05-23 13:50:15 sandervl Exp $ */
     1/* $Id: mixer.h,v 1.3 2002-05-25 17:19:41 sandervl Exp $ */
    22
    33/*
     
    1919#define WINMM_MIXERSTRING_W             (LPWSTR)L"OS/2 WINMM Mixer"
    2020
    21 #define WINMM_SHORTNAME_WAVEOUT_A       "Wave Out"
    22 #define WINMM_SHORTNAME_WAVEOUT_W       (LPWSTR)L"Wave Out"
    23 #define WINMM_SHORTNAME_LINEOUT_A       "Line Out"
    24 #define WINMM_SHORTNAME_LINEOUT_W       (LPWSTR)L"Line Out"
     21#define WINMM_MIXER_CAPS_WMID           1
     22#define WINMM_MIXER_CAPS_WPID           0x60
     23#define WINMM_MIXER_CAPS_VERSION        0x100
    2524
    2625#define MAX_MIXER_DESTINATIONS      8
  • trunk/src/winmm/mixerdata.cpp

    r8485 r8492  
    1 /* $Id: mixerdata.cpp,v 1.2 2002-05-24 18:02:48 sandervl Exp $ */
     1/* $Id: mixerdata.cpp,v 1.3 2002-05-25 17:19:41 sandervl Exp $ */
    22
    33/*
     
    1818/******************************************************************************/
    1919char *szCtrlName[MIX_CTRL_MAX][2] = {
    20     {
    21         "PlayMix",
    22         "Playback Mixer for LineOut"
    23     },
    2420    {
    2521        "MasterVol",
     
    199195char *szDestName[MIXER_DEST_MAX][2] = {
    200196  {
    201       "Vol",
    202197      "Volume Control",
    203   },
    204   {
    205       "Rec",
    206       "Recording Control",
     198      "Volume Control",
     199  },
     200  {
     201      "RecSource",
     202      "Recording Source",
    207203  },
    208204  {
  • trunk/src/winmm/mixeros2.cpp

    r8485 r8492  
    1 /* $Id: mixeros2.cpp,v 1.3 2002-05-24 18:02:48 sandervl Exp $ */
     1/* $Id: mixeros2.cpp,v 1.4 2002-05-25 17:19:41 sandervl Exp $ */
    22
    33/*
     
    116116        idx = RECORDSRCSET;
    117117        break;
     118    case MIX_CTRL_VOL_IN_W_MONO:
     119    case MIX_CTRL_VOL_IN_W_PHONE:
     120    case MIX_CTRL_VOL_IN_W_MIC:
     121    case MIX_CTRL_VOL_IN_W_LINE:
     122    case MIX_CTRL_VOL_IN_W_CD:
     123    case MIX_CTRL_VOL_IN_W_VIDEO:
     124    case MIX_CTRL_VOL_IN_W_AUX:
     125    case MIX_CTRL_VOL_IN_W_PCM:
     126        idx = RECORDGAINSET;
     127        break;
     128
    118129    default:
    119130        return -1;
     
    141152    MIXSTRUCT mixstruct;
    142153
     154    //TODO: implement master volume with MMPM2
     155    if(dwControl == MIX_CTRL_VOL_OUT_LINE || dwControl == MIX_CTRL_MUTE_OUT_LINE) {
     156        return TRUE;
     157    }
     158
    143159    dwFunc = OSLibMixGetIndex(dwControl);
    144160    if(dwFunc == -1) {
     
    147163    dwFunc += MONOINSET;
    148164
    149     if(dwVolLeft > MIXER_MAX_VOLUME || dwVolRight > MIXER_MAX_VOLUME) {
     165    if(dwVolLeft > MIXER_IOCTL90_MAX_VOLUME || dwVolRight > MIXER_IOCTL90_MAX_VOLUME) {
    150166        dprintf(("OSLibMixSetVolume: Volume (%d,%d) out of RANGE!!", dwVolLeft, dwVolRight));
    151167        return FALSE;
    152168    }
    153169    mixstruct.Mute    = fMute;
    154     mixstruct.VolumeL = dwVolLeft;
    155     mixstruct.VolumeR = dwVolRight;
     170    mixstruct.VolumeL = WIN32_TO_IOCTL90_VOLUME(dwVolLeft);
     171    mixstruct.VolumeR = WIN32_TO_IOCTL90_VOLUME(dwVolRight);
    156172
    157173    if(mixerapiIOCTL90(hPDDMix, dwFunc, &mixstruct, sizeof(mixstruct)) == TRUE) {
     
    168184    MIXSTRUCT mixstruct;
    169185
     186    //TODO: implement master volume with MMPM2
     187    if(dwControl == MIX_CTRL_VOL_OUT_LINE || dwControl == MIX_CTRL_MUTE_OUT_LINE) {
     188        if(pfMute)      *pfMute      = 0;
     189        if(pdwVolLeft)  *pdwVolLeft  = 50000;
     190        if(pdwVolRight) *pdwVolRight = 50000;
     191        return TRUE;
     192    }
     193
    170194    dwFunc = OSLibMixGetIndex(dwControl);
    171195    if(dwFunc == -1) {
     
    177201        return FALSE;
    178202    }
     203    if(mixstruct.VolumeL > MIXER_IOCTL90_MAX_VOLUME || mixstruct.VolumeR > MIXER_IOCTL90_MAX_VOLUME) {
     204        dprintf(("OSLibMixGetVolume: Volume (%d,%d) out of RANGE!!", mixstruct.VolumeL, mixstruct.VolumeR));
     205    }
     206    mixstruct.VolumeL = min(MIXER_IOCTL90_MAX_VOLUME, mixstruct.VolumeL);
     207    mixstruct.VolumeR = min(MIXER_IOCTL90_MAX_VOLUME, mixstruct.VolumeR);
     208
    179209    if(pfMute)      *pfMute      = mixstruct.Mute;
    180     if(pdwVolLeft)  *pdwVolLeft  = mixstruct.VolumeL;
    181     if(pdwVolRight) *pdwVolRight = mixstruct.VolumeR;
    182 
    183     if(mixstruct.VolumeL > MIXER_MAX_VOLUME || mixstruct.VolumeR > MIXER_MAX_VOLUME) {
    184         dprintf(("OSLibMixGetVolume: Volume (%d,%d) out of RANGE!!", mixstruct.VolumeL, mixstruct.VolumeR));
     210    if(pdwVolLeft)  *pdwVolLeft  = IOCTL90_TO_WIN32_VOLUME(mixstruct.VolumeL);
     211    if(pdwVolRight) *pdwVolRight = IOCTL90_TO_WIN32_VOLUME(mixstruct.VolumeR);
     212
     213    return TRUE;
     214}
     215/******************************************************************************/
     216/******************************************************************************/
     217BOOL OSLibMixGetCtrlCaps(DWORD dwControl, LONG *plMinimum, LONG *plMaximum, DWORD *pcSteps)
     218{
     219    switch(dwControl) {
     220    case MIX_CTRL_VOL_OUT_LINE:
     221        *plMinimum = MIXER_WIN32_MIN_VOLUME;
     222        *plMaximum = MIXER_WIN32_MAX_VOLUME;
     223        *pcSteps   = MIXER_WIN32_CSTEP_VOLUME;
     224        break;
     225
     226    case MIX_CTRL_VOL_IN_L_MONO:
     227    case MIX_CTRL_VOL_IN_L_PHONE:
     228    case MIX_CTRL_VOL_IN_L_MIC:
     229    case MIX_CTRL_VOL_IN_L_LINE:
     230    case MIX_CTRL_VOL_IN_L_CD:
     231    case MIX_CTRL_VOL_IN_L_VIDEO:
     232    case MIX_CTRL_VOL_IN_L_AUX:
     233    case MIX_CTRL_VOL_IN_L_PCM:
     234        *plMinimum = MIXER_WIN32_MIN_VOLUME;
     235        *plMaximum = MIXER_WIN32_MAX_VOLUME;
     236        *pcSteps   = MIXER_WIN32_CSTEP_VOLUME;
     237        break;
     238
     239    case MIX_CTRL_VOL_IN_W_MONO:
     240    case MIX_CTRL_VOL_IN_W_PHONE:
     241    case MIX_CTRL_VOL_IN_W_MIC:
     242    case MIX_CTRL_VOL_IN_W_LINE:
     243    case MIX_CTRL_VOL_IN_W_CD:
     244    case MIX_CTRL_VOL_IN_W_VIDEO:
     245    case MIX_CTRL_VOL_IN_W_AUX:
     246    case MIX_CTRL_VOL_IN_W_PCM:
     247        *plMinimum = MIXER_WIN32_MIN_VOLUME;
     248        *plMaximum = MIXER_WIN32_MAX_VOLUME;
     249        *pcSteps   = MIXER_WIN32_CSTEP_VOLUME;
     250        break;
     251
     252    case MIX_CTRL_OUT_L_BASS:
     253    case MIX_CTRL_OUT_L_TREBLE:
     254        *plMinimum = MIXER_WIN32_MIN_VOLUME;
     255        *plMaximum = MIXER_WIN32_MAX_VOLUME;
     256        *pcSteps   = MIXER_WIN32_CSTEP_VOLUME;
     257        break;
     258
     259    case MIX_CTRL_OUT_L_3DCENTER:
     260    case MIX_CTRL_OUT_L_3DDEPTH:
     261        *plMinimum = MIXER_WIN32_MIN_VOLUME;
     262        *plMaximum = MIXER_WIN32_MAX_VOLUME;
     263        *pcSteps   = MIXER_WIN32_CSTEP_VOLUME;
     264        break;
     265    default:
     266        DebugInt3();
    185267        return FALSE;
    186268    }
     
    240322
    241323    mixstruct.Mute    = 0;
    242     mixstruct.VolumeL = dwVolL;
    243     mixstruct.VolumeR = dwVolR;
     324    mixstruct.VolumeL = WIN32_TO_IOCTL90_VOLUME(dwVolL);
     325    mixstruct.VolumeR = WIN32_TO_IOCTL90_VOLUME(dwVolR);
    244326    if(mixerapiIOCTL90(hPDDMix, RECORDGAINSET, &mixstruct, sizeof(mixstruct)) == FALSE) {
    245327        dprintf(("OSLibMixSetRecSource: mixerapiIOCTL90 RECORDGAINSET failed!!"));
     
    290372    }
    291373    if(pdwVolL) {
    292         *pdwVolL = mixstruct.VolumeL;
     374        *pdwVolL = IOCTL90_TO_WIN32_VOLUME(mixstruct.VolumeL);
    293375    }
    294376    if(pdwVolR) {
    295         *pdwVolR = mixstruct.VolumeR;
     377        *pdwVolR = IOCTL90_TO_WIN32_VOLUME(mixstruct.VolumeR);
    296378    }
    297379    return TRUE;
  • trunk/src/winmm/mixeros2.h

    r8485 r8492  
    1 /* $Id: mixeros2.h,v 1.4 2002-05-24 18:02:48 sandervl Exp $ */
     1/* $Id: mixeros2.h,v 1.5 2002-05-25 17:19:41 sandervl Exp $ */
    22
    33/*
     
    1414#define __WINMM_OS2MIXER_H__
    1515
    16 #define MIXER_MAX_VOLUME                100
     16#define MIXER_IOCTL90_MAX_VOLUME        100
     17#define MIXER_WIN32_MIN_VOLUME          0
     18#define MIXER_WIN32_MAX_VOLUME          65535
     19#define MIXER_WIN32_CSTEP_VOLUME        31
    1720
    18 #define MIX_CTRL_MIX_OUT_LINE           0
    19 #define MIX_CTRL_VOL_OUT_LINE           1
    20 #define MIX_CTRL_MUTE_OUT_LINE          2
    21 #define MIX_CTRL_VOL_IN_L_MONO          3
    22 #define MIX_CTRL_MUTE_IN_L_MONO         4
    23 #define MIX_CTRL_VOL_IN_L_PHONE         5
    24 #define MIX_CTRL_MUTE_IN_L_PHONE        6
    25 #define MIX_CTRL_VOL_IN_L_MIC           7
    26 #define MIX_CTRL_MUTE_IN_L_MIC          8
    27 #define MIX_CTRL_BOOST_IN_L_MIC         9
    28 #define MIX_CTRL_VOL_IN_L_LINE          10
    29 #define MIX_CTRL_MUTE_IN_L_LINE         11
    30 #define MIX_CTRL_VOL_IN_L_CD            12
    31 #define MIX_CTRL_MUTE_IN_L_CD           13
    32 #define MIX_CTRL_VOL_IN_L_SPDIF         14
    33 #define MIX_CTRL_MUTE_IN_L_SPDIF        15
    34 #define MIX_CTRL_VOL_OUT_SPDIF          16
    35 #define MIX_CTRL_MUTE_OUT_SPDIF         17
    36 #define MIX_CTRL_VOL_IN_L_VIDEO         18
    37 #define MIX_CTRL_MUTE_IN_L_VIDEO        19
    38 #define MIX_CTRL_VOL_IN_L_AUX           20
    39 #define MIX_CTRL_MUTE_IN_L_AUX          21
    40 #define MIX_CTRL_VOL_IN_L_PCM           22
    41 #define MIX_CTRL_MUTE_IN_L_PCM          23
    42 #define MIX_CTRL_VOL_IN_L_WAVETABLE     24
    43 #define MIX_CTRL_MUTE_IN_L_WAVETABLE    25
    44 #define MIX_CTRL_VOL_IN_L_MIDI          26
    45 #define MIX_CTRL_MUTE_IN_L_MIDI         27
    46 #define MIX_CTRL_OUT_L_3DCENTER         28
    47 #define MIX_CTRL_OUT_L_3DDEPTH          29
    48 #define MIX_CTRL_OUT_L_TREBLE           30
    49 #define MIX_CTRL_OUT_L_BASS             31
    50 #define MIX_CTRL_MUX_IN_W_SRC           32
    51 #define MIX_CTRL_VOL_IN_W_MONO          33
    52 #define MIX_CTRL_VOL_IN_W_PHONE         34
    53 #define MIX_CTRL_VOL_IN_W_MIC           35
    54 #define MIX_CTRL_VOL_IN_W_LINE          36
    55 #define MIX_CTRL_VOL_IN_W_CD            37
    56 #define MIX_CTRL_VOL_IN_W_SPDIF         38
    57 #define MIX_CTRL_VOL_IN_W_VIDEO         39
    58 #define MIX_CTRL_VOL_IN_W_AUX           40
    59 #define MIX_CTRL_VOL_IN_W_PCM           41
    60 #define MIX_CTRL_VOL_IN_W_WAVETABLE     42
    61 #define MIX_CTRL_VOL_IN_W_MIDI          43
    62 #define MIX_CTRL_MAX                    44
     21#define WIN32_TO_IOCTL90_VOLUME(a)      ((a*MIXER_IOCTL90_MAX_VOLUME)/(MIXER_WIN32_MAX_VOLUME-MIXER_WIN32_MIN_VOLUME))
     22#define IOCTL90_TO_WIN32_VOLUME(a)      ((a*(MIXER_WIN32_MAX_VOLUME-MIXER_WIN32_MIN_VOLUME))/MIXER_IOCTL90_MAX_VOLUME)
     23
     24#define MIX_CTRL_VOL_OUT_LINE           0
     25#define MIX_CTRL_MUTE_OUT_LINE          1
     26#define MIX_CTRL_VOL_IN_L_MONO          2
     27#define MIX_CTRL_MUTE_IN_L_MONO         3
     28#define MIX_CTRL_VOL_IN_L_PHONE         4
     29#define MIX_CTRL_MUTE_IN_L_PHONE        5
     30#define MIX_CTRL_VOL_IN_L_MIC           6
     31#define MIX_CTRL_MUTE_IN_L_MIC          7
     32#define MIX_CTRL_BOOST_IN_L_MIC         8
     33#define MIX_CTRL_VOL_IN_L_LINE          9
     34#define MIX_CTRL_MUTE_IN_L_LINE         10
     35#define MIX_CTRL_VOL_IN_L_CD            11
     36#define MIX_CTRL_MUTE_IN_L_CD           12
     37#define MIX_CTRL_VOL_IN_L_SPDIF         13
     38#define MIX_CTRL_MUTE_IN_L_SPDIF        14
     39#define MIX_CTRL_VOL_OUT_SPDIF          15
     40#define MIX_CTRL_MUTE_OUT_SPDIF         16
     41#define MIX_CTRL_VOL_IN_L_VIDEO         17
     42#define MIX_CTRL_MUTE_IN_L_VIDEO        18
     43#define MIX_CTRL_VOL_IN_L_AUX           19
     44#define MIX_CTRL_MUTE_IN_L_AUX          20
     45#define MIX_CTRL_VOL_IN_L_PCM           21
     46#define MIX_CTRL_MUTE_IN_L_PCM          22
     47#define MIX_CTRL_VOL_IN_L_WAVETABLE     23
     48#define MIX_CTRL_MUTE_IN_L_WAVETABLE    24
     49#define MIX_CTRL_VOL_IN_L_MIDI          25
     50#define MIX_CTRL_MUTE_IN_L_MIDI         26
     51#define MIX_CTRL_OUT_L_3DCENTER         27
     52#define MIX_CTRL_OUT_L_3DDEPTH          28
     53#define MIX_CTRL_OUT_L_TREBLE           29
     54#define MIX_CTRL_OUT_L_BASS             30
     55#define MIX_CTRL_MUX_IN_W_SRC           31
     56#define MIX_CTRL_VOL_IN_W_MONO          32
     57#define MIX_CTRL_VOL_IN_W_PHONE         33
     58#define MIX_CTRL_VOL_IN_W_MIC           34
     59#define MIX_CTRL_VOL_IN_W_LINE          35
     60#define MIX_CTRL_VOL_IN_W_CD            36
     61#define MIX_CTRL_VOL_IN_W_SPDIF         37
     62#define MIX_CTRL_VOL_IN_W_VIDEO         38
     63#define MIX_CTRL_VOL_IN_W_AUX           39
     64#define MIX_CTRL_VOL_IN_W_PCM           40
     65#define MIX_CTRL_VOL_IN_W_WAVETABLE     41
     66#define MIX_CTRL_VOL_IN_W_MIDI          42
     67#define MIX_CTRL_MAX                    43
    6368
    6469#define MIXER_SRC_MONOIN        0
     
    98103BOOL OSLibMixGetRecSource(DWORD *pdwRecSrc, DWORD *pdwVolL, DWORD *pdwVolR);
    99104BOOL OSLibMixIsRecSourcePresent(DWORD dwRecSrc);
     105BOOL OSLibMixGetCtrlCaps(DWORD dwControl, LONG *plMinimum, LONG *plMaximum, DWORD *pcSteps);
    100106
    101107#ifdef __cplusplus
Note: See TracChangeset for help on using the changeset viewer.