VirtualBox

Changeset 89469 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jun 2, 2021 1:18:42 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
144824
Message:

Audio/ValKit: More code for the Validation Kit audio driver. bugref:10008

File:
1 edited

Legend:

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

    r89463 r89469  
    115115    /** Pointer to host audio interface. */
    116116    PDMIHOSTAUDIO       IHostAudio;
     117    /** Temporary path to use. */
     118    char                szPathTemp[RTPATH_MAX];
     119    /** Output path to use. */
     120    char                szPathOut[RTPATH_MAX];
    117121    /** Current test set being handled. */
    118122    AUDIOTESTSET        Set;
     
    136140
    137141
    138 
     142/**
     143 * Unregisters a ValKit test, common code.
     144 *
     145 * @param   pTst                Test to unregister.
     146 *                              The pointer will be invalid afterwards.
     147 */
    139148static void drvHostValKiUnregisterTest(PVALKITTESTDATA pTst)
    140149{
     150    AssertPtrReturnVoid(pTst);
     151
    141152    RTListNodeRemove(&pTst->Node);
    142153
    143154    AudioTestSetObjClose(pTst->pObj);
    144155    pTst->pObj = NULL;
     156
     157    AssertPtrReturnVoid(pTst->pEntry);
    145158    AudioTestSetTestDone(pTst->pEntry);
    146159    pTst->pEntry = NULL;
     
    150163}
    151164
     165/**
     166 * Unregisters a ValKit recording test.
     167 *
     168 * @param   pThis               ValKit audio driver instance.
     169 * @param   pTst                Test to unregister.
     170 *                              The pointer will be invalid afterwards.
     171 */
    152172static void drvHostValKiUnregisterRecTest(PDRVHOSTVALKITAUDIO pThis, PVALKITTESTDATA pTst)
    153173{
     
    158178}
    159179
     180/**
     181 * Unregisters a ValKit playback test.
     182 *
     183 * @param   pThis               ValKit audio driver instance.
     184 * @param   pTst                Test to unregister.
     185 *                              The pointer will be invalid afterwards.
     186 */
    160187static void drvHostValKiUnregisterPlayTest(PDRVHOSTVALKITAUDIO pThis, PVALKITTESTDATA pTst)
    161188{
     
    164191    Assert(pThis->cTestsPlay);
    165192    pThis->cTestsPlay--;
     193}
     194
     195static DECLCALLBACK(int) drvHostValKitTestSetBegin(void const *pvUser, const char *pszTag)
     196{
     197    PDRVHOSTVALKITAUDIO pThis = (PDRVHOSTVALKITAUDIO)pvUser;
     198
     199    LogRel(("Audio: Validation Kit: Beginning test set '%s'\n", pszTag));
     200
     201    return AudioTestSetCreate(&pThis->Set, pThis->szPathTemp, pszTag);
     202
     203}
     204
     205static DECLCALLBACK(int) drvHostValKitTestSetEnd(void const *pvUser, const char *pszTag)
     206{
     207    PDRVHOSTVALKITAUDIO pThis = (PDRVHOSTVALKITAUDIO)pvUser;
     208
     209    const PAUDIOTESTSET pSet  = &pThis->Set;
     210
     211    LogRel(("Audio: Validation Kit: Ending test set '%s'\n", pszTag));
     212
     213    /* Close the test set first. */
     214    AudioTestSetClose(pSet);
     215
     216    /* Before destroying the test environment, pack up the test set so
     217     * that it's ready for transmission. */
     218    char szFileOut[RTPATH_MAX];
     219    int rc = AudioTestSetPack(pSet, pThis->szPathOut, szFileOut, sizeof(szFileOut));
     220    if (RT_SUCCESS(rc))
     221        LogRel(("Audio: Validation Kit: Packed up to '%s'\n", szFileOut));
     222
     223    int rc2 = AudioTestSetWipe(pSet);
     224    if (RT_SUCCESS(rc))
     225        rc = rc2;
     226
     227    AudioTestSetDestroy(pSet);
     228
     229    if (RT_FAILURE(rc))
     230        LogRel(("Audio: Validation Kit: Test set prologue failed with %Rrc\n", rc));
     231
     232    return rc;
    166233}
    167234
     
    665732
    666733    ATSCALLBACKS Callbacks;
    667     Callbacks.pfnTonePlay   = drvHostValKitRegisterGuestRecTest;
    668     Callbacks.pfnToneRecord = drvHostValKitRegisterGuestPlayTest;
    669     Callbacks.pvUser        = pThis;
     734    Callbacks.pfnTestSetBegin = drvHostValKitTestSetBegin;
     735    Callbacks.pfnTestSetEnd   = drvHostValKitTestSetEnd;
     736    Callbacks.pfnTonePlay     = drvHostValKitRegisterGuestRecTest;
     737    Callbacks.pfnToneRecord   = drvHostValKitRegisterGuestPlayTest;
     738    Callbacks.pvUser          = pThis;
    670739
    671740    LogRel(("Audio: Validation Kit: Starting Audio Test Service (ATS) ...\n"));
     
    675744        rc = AudioTestSvcStart(&pThis->Srv);
    676745
     746    if (RT_SUCCESS(rc))
     747    {
     748        LogRel(("Audio: Validation Kit: Audio Test Service (ATS) running\n"));
     749
     750        /** @todo Let the following be customizable by CFGM later. */
     751        rc = AudioTestPathCreateTemp(pThis->szPathTemp, sizeof(pThis->szPathTemp), "ValKitAudio");
     752        if (RT_SUCCESS(rc))
     753        {
     754            LogRel(("Audio: Validation Kit: Using temp dir '%s'\n", pThis->szPathTemp));
     755            rc = AudioTestPathGetTemp(pThis->szPathOut, sizeof(pThis->szPathOut));
     756            if (RT_SUCCESS(rc))
     757                LogRel(("Audio: Validation Kit: Using output dir '%s'\n", pThis->szPathOut));
     758        }
     759    }
     760
     761    if (RT_SUCCESS(rc))
     762        rc = RTCritSectInit(&pThis->CritSect);
     763
    677764    if (RT_FAILURE(rc))
    678     {
    679         LogRel(("Audio: Validation Kit: Starting Audio Test Service (ATS) failed, rc=%Rrc\n", rc));
    680     }
    681     else
    682         LogRel(("Audio: Validation Kit: Audio Test Service (ATS) running\n"));
    683 
    684     if (RT_SUCCESS(rc))
    685         rc = RTCritSectInit(&pThis->CritSect);
     765        LogRel(("Audio: Validation Kit: Initialization failed, rc=%Rrc\n", rc));
    686766
    687767    return rc;
     
    721801        LogRel(("Audio: Validation Kit: Shutdown of Audio Test Service failed, rc=%Rrc\n", rc));
    722802
    723     rc = RTCritSectDelete(&pThis->CritSect);
    724     AssertRC(rc);
     803    int rc2 = RTCritSectDelete(&pThis->CritSect);
     804    if (RT_SUCCESS(rc))
     805        rc = rc2;
     806
     807    if (RT_FAILURE(rc))
     808        LogRel(("Audio: Validation Kit: Destruction failed, rc=%Rrc\n", rc));
    725809}
    726810
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