VirtualBox

Changeset 55404 in vbox


Ignore:
Timestamp:
Apr 23, 2015 10:53:41 AM (9 years ago)
Author:
vboxsync
Message:

HDA: Set the appropriate sink volume rather than the master.

Location:
trunk/src/VBox/Devices/Audio
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevIchHda.cpp

    r55388 r55404  
    25162516    }
    25172517
    2518     PDMAUDIOVOLUME vol = { false, 255, 255 };
    2519     audioMixerSetSinkVolume(pThis->pSinkOutput, &vol);
    2520 
    25212518    LogFlowFuncLeaveRC(rc);
    25222519    return rc;
    25232520}
    25242521
    2525 static DECLCALLBACK(int) hdaSetVolume(PHDASTATE pThis,
     2522static DECLCALLBACK(int) hdaSetVolume(PHDASTATE pThis, ENMSOUNDSOURCE enmSource,
    25262523                                      bool fMute, uint8_t uVolLeft, uint8_t uVolRight)
    25272524{
    2528     int rc = VINF_SUCCESS;
    2529 
    2530     PDMAUDIOVOLUME vol = { fMute, uVolLeft, uVolRight };
    2531     audioMixerSetMasterVolume(pThis->pMixer, &vol);
     2525    int             rc = VINF_SUCCESS;
     2526    PDMAUDIOVOLUME  vol = { fMute, uVolLeft, uVolRight };
     2527    PAUDMIXSINK     pSink;
     2528
     2529    /* Convert the audio source to corresponding sink. */
     2530    switch (enmSource) {
     2531    case PO_INDEX:
     2532        pSink = pThis->pSinkOutput;
     2533        break;
     2534    case PI_INDEX:
     2535        pSink = pThis->pSinkLineIn;
     2536        break;
     2537    case MC_INDEX:
     2538        pSink = pThis->pSinkMicIn;
     2539        break;
     2540    default:
     2541        AssertFailedReturn(VERR_INVALID_PARAMETER);
     2542    }
     2543
     2544    /* Set the volume. Codec already converted it to the correct range. */
     2545    audioMixerSetSinkVolume(pSink, &vol);
    25322546
    25332547    LogFlowFuncLeaveRC(rc);
     
    38683882            rc = audioMixerAddSink(pThis->pMixer, "[Recording] Microphone In",
    38693883                                   AUDMIXSINKDIR_INPUT, &pThis->pSinkMicIn);
     3884            AssertRC(rc);
     3885
     3886            /* There is no master volume control. Set the master to max. */
     3887            PDMAUDIOVOLUME vol = { false, 255, 255 };
     3888            rc = audioMixerSetMasterVolume(pThis->pMixer, &vol);
    38703889            AssertRC(rc);
    38713890        }
  • trunk/src/VBox/Devices/Audio/DevIchHdaCodec.cpp

    r55394 r55404  
    11741174{
    11751175    uint32_t dir = AMPLIFIER_OUT;
     1176    ENMSOUNDSOURCE enmSrc;
    11761177    switch (mt)
    11771178    {
    11781179#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    1179         case PDMAUDIOMIXERCTL_VOLUME:
    11801180        case PDMAUDIOMIXERCTL_PCM:
     1181            enmSrc = PO_INDEX;
    11811182#else
    11821183        case AUD_MIXER_VOLUME:
     
    11871188#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    11881189        case PDMAUDIOMIXERCTL_LINE_IN:
     1190            enmSrc = PI_INDEX;
    11891191#else
    11901192        case AUD_MIXER_LINE_IN:
     
    12141216#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    12151217    /** @todo In SetVolume no passing audmixerctl_in as its not used in DrvAudio.cpp. */
    1216     pThis->pfnSetVolume(pThis->pHDAState, RT_BOOL(mute), lVol, rVol);
     1218    pThis->pfnSetVolume(pThis->pHDAState, enmSrc, RT_BOOL(mute), lVol, rVol);
    12171219#else
    12181220    AUD_set_volume(mt, &mute, &lVol, &rVol);
     
    13731375        /** @todo Fix ID of u8DacLineOut! */
    13741376#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    1375         hdaCodecToAudVolume(pThis, pAmplifier, PDMAUDIOMIXERCTL_VOLUME);
     1377        hdaCodecToAudVolume(pThis, pAmplifier, PDMAUDIOMIXERCTL_PCM);
    13761378#else
    13771379        hdaCodecToAudVolume(pAmplifier, AUD_MIXER_VOLUME);
     
    24152417    if (hdaCodecIsDacNode(pThis, pThis->u8DacLineOut))
    24162418#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    2417         hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].dac.B_params, PDMAUDIOMIXERCTL_VOLUME);
     2419        hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].dac.B_params, PDMAUDIOMIXERCTL_PCM);
    24182420#else
    24192421        hdaCodecToAudVolume(&pThis->paNodes[pThis->u8DacLineOut].dac.B_params, AUD_MIXER_VOLUME);
     
    24212423    else if (hdaCodecIsSpdifOutNode(pThis, pThis->u8DacLineOut))
    24222424#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    2423         hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].spdifout.B_params, PDMAUDIOMIXERCTL_VOLUME);
     2425        hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].spdifout.B_params, PDMAUDIOMIXERCTL_PCM);
    24242426    hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8AdcVolsLineIn].adcvol.B_params, PDMAUDIOMIXERCTL_LINE_IN);
    24252427#else
     
    25042506
    25052507#ifdef VBOX_WITH_PDM_AUDIO_DRIVER
    2506     hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].dac.B_params, PDMAUDIOMIXERCTL_VOLUME);
     2508    hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8DacLineOut].dac.B_params, PDMAUDIOMIXERCTL_PCM);
    25072509    hdaCodecToAudVolume(pThis, &pThis->paNodes[pThis->u8AdcVolsLineIn].adcvol.B_params, PDMAUDIOMIXERCTL_LINE_IN);
    25082510
  • trunk/src/VBox/Devices/Audio/DevIchHdaCodec.h

    r53831 r55404  
    116116    DECLR3CALLBACKMEMBER(int, pfnOpenIn, (PHDASTATE pThis, const char *pszName, PDMAUDIORECSOURCE enmRecSource, PPDMAUDIOSTREAMCFG pCfg));
    117117    DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
    118     DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, bool fMute, uint8_t uVolLeft, uint8_t uVolRight));
     118    DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, ENMSOUNDSOURCE enmSource, bool fMute, uint8_t uVolLeft, uint8_t uVolRight));
    119119#else
    120120    QEMUSoundCard           card;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette