VirtualBox

Changeset 63537 in vbox for trunk


Ignore:
Timestamp:
Aug 16, 2016 10:31:42 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
110191
Message:

Audio/DrvAudio.cpp: Simplified drvAudioStreamInitInternal().

File:
1 edited

Legend:

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

    r63536 r63537  
    515515    AssertPtr(pGstStream);
    516516
    517     LogFlowFunc(("[%s]\n", pStream->szName));
    518 
    519517    /*
    520518     * Init host stream.
     
    527525
    528526#ifdef DEBUG
    529         LogFunc(("[%s] Requested host format:\n", pStream->szName));
    530         DrvAudioHlpStreamCfgPrint(pCfgHost);
     527    LogFunc(("[%s] Requested host format:\n", pStream->szName));
     528    DrvAudioHlpStreamCfgPrint(pCfgHost);
    531529#else
    532         LogRel2(("Audio: Requested %s host format for '%s': %RU32Hz, %s, %RU8 %s\n",
    533                  pCfgGuest->enmDir == PDMAUDIODIR_IN ? "recording" : "playback",  pStream->szName,
    534                  pCfgHost->uHz, DrvAudioHlpAudFmtToStr(pCfgHost->enmFormat),
    535                  pCfgHost->cChannels, pCfgHost->cChannels == 0 ? "Channel" : "Channels"));
     530    LogRel2(("Audio: Requested %s host format for '%s': %RU32Hz, %s, %RU8 %s\n",
     531             pCfgGuest->enmDir == PDMAUDIODIR_IN ? "recording" : "playback",  pStream->szName,
     532             pCfgHost->uHz, DrvAudioHlpAudFmtToStr(pCfgHost->enmFormat),
     533             pCfgHost->cChannels, pCfgHost->cChannels == 0 ? "Channel" : "Channels"));
    536534#endif
    537535
    538536    int rc = pThis->pHostDrvAudio->pfnStreamCreate(pThis->pHostDrvAudio, pHstStream,
    539537                                                   pCfgHost /* pCfgReq */, &CfgHostAcq /* pCfgAcq */);
    540     if (RT_SUCCESS(rc))
    541     {
    542         /* Only set the host's stream to initialized if we were able create the stream
    543          * in the host backend. This is necessary for trying to re-initialize the stream
    544          * at some later point in time. */
    545         pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_INITIALIZED;
    546     }
    547     else
     538    if (RT_FAILURE(rc))
    548539    {
    549540        LogFlowFunc(("[%s] Initializing stream in host backend failed with rc=%Rrc\n", pStream->szName, rc));
    550     }
     541        return rc;
     542    }
     543
     544    /* Only set the host's stream to initialized if we were able create the stream
     545     * in the host backend. This is necessary for trying to re-initialize the stream
     546     * at some later point in time. */
     547    pHstStream->fStatus |= PDMAUDIOSTRMSTS_FLAG_INITIALIZED;
    551548
    552549#ifdef DEBUG
    553         LogFunc(("[%s] Acquired host format:\n",  pStream->szName));
    554         DrvAudioHlpStreamCfgPrint(&CfgHostAcq);
     550    LogFunc(("[%s] Acquired host format:\n",  pStream->szName));
     551    DrvAudioHlpStreamCfgPrint(&CfgHostAcq);
    555552#else
    556         LogRel2(("Audio: Acquired %s host format for '%s': %RU32Hz, %s, %RU8 %s\n",
    557                  pCfgGuest->enmDir == PDMAUDIODIR_IN ? "recording" : "playback",  pStream->szName,
    558                  CfgHostAcq.uHz, DrvAudioHlpAudFmtToStr(CfgHostAcq.enmFormat),
    559                  CfgHostAcq.cChannels, CfgHostAcq.cChannels == 0 ? "Channel" : "Channels"));
     553    LogRel2(("Audio: Acquired %s host format for '%s': %RU32Hz, %s, %RU8 %s\n",
     554             pCfgGuest->enmDir == PDMAUDIODIR_IN ? "recording" : "playback",  pStream->szName,
     555             CfgHostAcq.uHz, DrvAudioHlpAudFmtToStr(CfgHostAcq.enmFormat),
     556             CfgHostAcq.cChannels, CfgHostAcq.cChannels == 0 ? "Channel" : "Channels"));
    560557#endif
     558
     559    /* No sample buffer size hint given by the backend? Default to some sane value. */
     560    if (!CfgHostAcq.cSampleBufferSize)
     561        CfgHostAcq.cSampleBufferSize = _1K; /** @todo Make this configurable? */
    561562
    562563    PDMAUDIOPCMPROPS PCMProps;
     
    567568    AudioMixBufDestroy(&pHstStream->MixBuf);
    568569
    569     if (CfgHostAcq.cSampleBufferSize)
    570     {
    571         LogFlowFunc(("[%s] cSamples=%RU32\n", pHstStream->szName, CfgHostAcq.cSampleBufferSize * 4));
    572 
    573         rc2 = AudioMixBufInit(&pHstStream->MixBuf, pHstStream->szName, &PCMProps, CfgHostAcq.cSampleBufferSize * 4);
    574         AssertRC(rc2);
    575     }
     570    LogFlowFunc(("[%s] cSamples=%RU32\n", pHstStream->szName, CfgHostAcq.cSampleBufferSize * 4));
     571
     572    rc2 = AudioMixBufInit(&pHstStream->MixBuf, pHstStream->szName, &PCMProps, CfgHostAcq.cSampleBufferSize * 4);
     573    AssertRC(rc2);
    576574
    577575    /* Make a copy of the host stream configuration. */
     
    589587    AudioMixBufDestroy(&pGstStream->MixBuf);
    590588
    591     if (CfgHostAcq.cSampleBufferSize)
    592     {
    593         LogFlowFunc(("[%s] cSamples=%RU32\n", pGstStream->szName, CfgHostAcq.cSampleBufferSize * 2));
    594 
    595         rc2 = AudioMixBufInit(&pGstStream->MixBuf, pGstStream->szName, &PCMProps, CfgHostAcq.cSampleBufferSize * 2);
    596         AssertRC(rc2);
    597     }
     589    LogFlowFunc(("[%s] cSamples=%RU32\n", pGstStream->szName, CfgHostAcq.cSampleBufferSize * 2));
     590
     591    rc2 = AudioMixBufInit(&pGstStream->MixBuf, pGstStream->szName, &PCMProps, CfgHostAcq.cSampleBufferSize * 2);
     592    AssertRC(rc2);
    598593
    599594#ifdef VBOX_WITH_STATISTICS
     
    601596#endif
    602597
    603     if (CfgHostAcq.cSampleBufferSize)
    604     {
    605         if (pCfgGuest->enmDir == PDMAUDIODIR_IN)
    606         {
    607             /* Host (Parent) -> Guest (Child). */
    608             rc2 = AudioMixBufLinkTo(&pHstStream->MixBuf, &pGstStream->MixBuf);
    609             AssertRC(rc2);
     598    if (pCfgGuest->enmDir == PDMAUDIODIR_IN)
     599    {
     600        /* Host (Parent) -> Guest (Child). */
     601        rc2 = AudioMixBufLinkTo(&pHstStream->MixBuf, &pGstStream->MixBuf);
     602        AssertRC(rc2);
    610603
    611604#ifdef VBOX_WITH_STATISTICS
    612             RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName);
    613             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesElapsed,
    614                                       szStatName, STAMUNIT_BYTES, "Elapsed bytes read.");
    615 
    616             RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName);
    617             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesTotalRead,
    618                                       szStatName, STAMUNIT_BYTES, "Total bytes read.");
    619 
    620             RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesCaptured", pHstStream->szName);
    621             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->In.StatSamplesCaptured,
    622                                       szStatName, STAMUNIT_COUNT, "Total samples captured.");
     605        RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName);
     606        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesElapsed,
     607                                  szStatName, STAMUNIT_BYTES, "Elapsed bytes read.");
     608
     609        RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName);
     610        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->In.StatBytesTotalRead,
     611                                  szStatName, STAMUNIT_BYTES, "Total bytes read.");
     612
     613        RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesCaptured", pHstStream->szName);
     614        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->In.StatSamplesCaptured,
     615                                  szStatName, STAMUNIT_COUNT, "Total samples captured.");
    623616#endif
    624         }
    625         else
    626         {
    627             /* Guest (Parent) -> Host (Child). */
    628             rc2 = AudioMixBufLinkTo(&pGstStream->MixBuf, &pHstStream->MixBuf);
    629             AssertRC(rc2);
     617    }
     618    else
     619    {
     620        /* Guest (Parent) -> Host (Child). */
     621        rc2 = AudioMixBufLinkTo(&pGstStream->MixBuf, &pHstStream->MixBuf);
     622        AssertRC(rc2);
    630623
    631624#ifdef VBOX_WITH_STATISTICS
    632             RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName);
    633             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesElapsed,
    634                                       szStatName, STAMUNIT_BYTES, "Elapsed bytes written.");
    635 
    636             RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName);
    637             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesTotalWritten,
    638                                       szStatName, STAMUNIT_BYTES, "Total bytes written.");
    639 
    640             RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesPlayed", pHstStream->szName);
    641             PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->Out.StatSamplesPlayed,
    642                                       szStatName, STAMUNIT_COUNT, "Total samples played.");
     625        RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesElapsed", pGstStream->szName);
     626        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesElapsed,
     627                                  szStatName, STAMUNIT_BYTES, "Elapsed bytes written.");
     628
     629        RTStrPrintf(szStatName, sizeof(szStatName), "Guest/%s/BytesRead", pGstStream->szName);
     630        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pGstStream->Out.StatBytesTotalWritten,
     631                                  szStatName, STAMUNIT_BYTES, "Total bytes written.");
     632
     633        RTStrPrintf(szStatName, sizeof(szStatName), "Host/%s/SamplesPlayed", pHstStream->szName);
     634        PDMDrvHlpSTAMRegCounterEx(pThis->pDrvIns, &pHstStream->Out.StatSamplesPlayed,
     635                                  szStatName, STAMUNIT_COUNT, "Total samples played.");
    643636#endif
    644         }
    645637    }
    646638
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