VirtualBox

Changeset 69857 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Nov 28, 2017 10:16:51 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
119300
Message:

Audio/ALSA: Only do pcm_start() for input streams in drvHostALSAAudioStreamCtl().

File:
1 edited

Legend:

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

    r69119 r69857  
    956956
    957957
    958 static int drvHostALSAAudioStreamCtl(snd_pcm_t *phPCM, bool fPause)
     958static int drvHostALSAAudioStreamCtl(PALSAAUDIOSTREAM pStreamALSA, bool fPause)
    959959{
    960960    int rc = VINF_SUCCESS;
     961
     962    const bool fInput = pStreamALSA->pCfg->enmDir == PDMAUDIODIR_IN;
    961963
    962964    int err;
    963965    if (fPause)
    964966    {
    965         err = snd_pcm_drop(phPCM);
    966         if (err < 0)
    967         {
    968             LogRel(("ALSA: Error stopping stream %p: %s\n", phPCM, snd_strerror(err)));
     967        err = snd_pcm_drop(pStreamALSA->phPCM);
     968        if (err < 0)
     969        {
     970            LogRel(("ALSA: Error stopping %s stream: %s\n", fInput ? "input" : "output", snd_strerror(err)));
    969971            rc = VERR_ACCESS_DENIED; /** @todo Find a better rc. */
    970972        }
     
    972974    else
    973975    {
    974         err = snd_pcm_prepare(phPCM);
    975         if (err < 0)
    976         {
    977             LogRel(("ALSA: Error preparing stream %p: %s\n", phPCM, snd_strerror(err)));
     976        err = snd_pcm_prepare(pStreamALSA->phPCM);
     977        if (err < 0)
     978        {
     979            LogRel(("ALSA: Error preparing %s stream: %s\n", fInput ? "input" : "output", snd_strerror(err)));
    978980            rc = VERR_ACCESS_DENIED; /** @todo Find a better rc. */
    979981        }
    980982        else
    981983        {
    982             err = snd_pcm_start(phPCM);
    983             if (err < 0)
     984            Assert(snd_pcm_state(pStreamALSA->phPCM) == SND_PCM_STATE_PREPARED);
     985
     986            if (fInput) /* Only start the PCM stream for input streams. */
    984987            {
    985                 LogRel(("ALSA: Error starting stream %p: %s\n", phPCM, snd_strerror(err)));
    986                 rc = VERR_ACCESS_DENIED; /** @todo Find a better rc. */
     988                err = snd_pcm_start(pStreamALSA->phPCM);
     989                if (err < 0)
     990                {
     991                    LogRel(("ALSA: Error starting input stream: %s\n", snd_strerror(err)));
     992                    rc = VERR_ACCESS_DENIED; /** @todo Find a better rc. */
     993                }
    987994            }
    988995        }
     
    14221429        case PDMAUDIOSTREAMCMD_ENABLE:
    14231430        case PDMAUDIOSTREAMCMD_RESUME:
    1424             rc = drvHostALSAAudioStreamCtl(pStreamALSA->phPCM, false /* fStop */);
     1431            rc = drvHostALSAAudioStreamCtl(pStreamALSA, false /* fStop */);
    14251432            break;
    14261433
    14271434        case PDMAUDIOSTREAMCMD_DISABLE:
    14281435        case PDMAUDIOSTREAMCMD_PAUSE:
    1429             rc = drvHostALSAAudioStreamCtl(pStreamALSA->phPCM, true /* fStop */);
     1436            rc = drvHostALSAAudioStreamCtl(pStreamALSA, true /* fStop */);
    14301437            break;
    14311438
     
    14471454        case PDMAUDIOSTREAMCMD_ENABLE:
    14481455        case PDMAUDIOSTREAMCMD_RESUME:
    1449             rc = drvHostALSAAudioStreamCtl(pStreamALSA->phPCM, false /* fStop */);
     1456            rc = drvHostALSAAudioStreamCtl(pStreamALSA, false /* fStop */);
    14501457            break;
    14511458
    14521459        case PDMAUDIOSTREAMCMD_DISABLE:
    14531460        case PDMAUDIOSTREAMCMD_PAUSE:
    1454             rc = drvHostALSAAudioStreamCtl(pStreamALSA->phPCM, true /* fStop */);
     1461            rc = drvHostALSAAudioStreamCtl(pStreamALSA, true /* fStop */);
    14551462            break;
    14561463
Note: See TracChangeset for help on using the changeset viewer.

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