Changeset 89431 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Jun 1, 2021 12:57:36 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 144785
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/utils/audio/vkat.cpp
r89417 r89431 179 179 AUDIOTESTMODE enmMode; 180 180 /** Output path for storing the test environment's final test files. */ 181 char szTag[AUDIOTEST_TAG_MAX]; 182 /** Output path for storing the test environment's final test files. */ 181 183 char szPathOut[RTPATH_MAX]; 182 184 /** Temporary path for this test environment. */ … … 235 237 *********************************************************************************************************************************/ 236 238 static int audioTestCombineParms(PAUDIOTESTPARMS pBaseParms, PAUDIOTESTPARMS pOverrideParms); 237 static int audioTest PlayTone(PAUDIOTESTENV pTstEnv, PAUDIOTESTSTREAM pStream, PAUDIOTESTTONEPARMS pParms);239 static int audioTestCreateStreamDefaultOut(PAUDIOTESTENV pTstEnv, PAUDIOTESTSTREAM pStream, PPDMAUDIOPCMPROPS pProps); 238 240 static int audioTestStreamDestroy(PAUDIOTESTENV pTstEnv, PAUDIOTESTSTREAM pStream); 241 static int audioTestDevicesEnumerateAndCheck(PAUDIOTESTENV pTstEnv, const char *pszDev, PPDMAUDIOHOSTDEV *ppDev); 242 static int audioTestEnvPrologue(PAUDIOTESTENV pTstEnv); 239 243 240 244 static RTEXITCODE audioTestUsage(PRTSTREAM pStrm); … … 393 397 394 398 /********************************************************************************************************************************* 399 * Test Primitives * 400 *********************************************************************************************************************************/ 401 402 /** 403 * Plays a test tone on a specific audio test stream. 404 * 405 * @returns VBox status code. 406 * @param pTstEnv Test environment to use for running the test. 407 * @param pStream Stream to use for playing the tone. 408 * @param pParms Tone parameters to use. 409 * 410 * @note Blocking function. 411 */ 412 static int audioTestPlayTone(PAUDIOTESTENV pTstEnv, PAUDIOTESTSTREAM pStream, PAUDIOTESTTONEPARMS pParms) 413 { 414 AUDIOTESTTONE TstTone; 415 AudioTestToneInit(&TstTone, &pParms->Props, pParms->dbFreqHz); 416 417 const char *pcszPathOut = pTstEnv->Set.szPathAbs; 418 419 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Playing test tone (tone frequency is %RU16Hz, %RU32ms)\n", (uint16_t)pParms->dbFreqHz, pParms->msDuration); 420 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Writing to '%s'\n", pcszPathOut); 421 422 /** @todo Use .WAV here? */ 423 PAUDIOTESTOBJ pObj; 424 int rc = AudioTestSetObjCreateAndRegister(&pTstEnv->Set, "tone-play.pcm", &pObj); 425 AssertRCReturn(rc, rc); 426 427 if (audioTestDriverStackStreamIsOkay(&pTstEnv->DrvStack, pStream->pStream)) 428 { 429 uint32_t cbBuf; 430 uint8_t abBuf[_4K]; 431 432 const uint16_t cSchedulingMs = RTRandU32Ex(10, 80); /* Choose a random scheduling (in ms). */ 433 const uint32_t cbPerMs = PDMAudioPropsMilliToBytes(&pParms->Props, cSchedulingMs); 434 size_t cbToWrite = PDMAudioPropsMilliToBytes(&pParms->Props, pParms->msDuration); 435 436 AudioTestSetObjAddMetadataStr(pObj, "schedule_ms=%RU16", cSchedulingMs); 437 438 while (cbToWrite) 439 { 440 uint32_t cbWritten = 0; 441 uint32_t cbToGenerate = RT_MIN(cbToWrite, RT_MIN(cbPerMs, sizeof(abBuf))); 442 Assert(cbToGenerate); 443 444 rc = AudioTestToneGenerate(&TstTone, abBuf, cbToGenerate, &cbBuf); 445 if (RT_SUCCESS(rc)) 446 { 447 /* Write stuff to disk before trying to play it. Help analysis later. */ 448 rc = AudioTestSetObjWrite(pObj, abBuf, cbBuf); 449 if (RT_SUCCESS(rc)) 450 rc = audioTestDriverStackStreamPlay(&pTstEnv->DrvStack, pStream->pStream, 451 abBuf, cbBuf, &cbWritten); 452 } 453 454 if (RT_FAILURE(rc)) 455 break; 456 457 RTThreadSleep(cSchedulingMs); 458 459 Assert(cbToWrite >= cbWritten); 460 cbToWrite -= cbWritten; 461 } 462 } 463 else 464 rc = VERR_AUDIO_STREAM_NOT_READY; 465 466 int rc2 = AudioTestSetObjClose(pObj); 467 if (RT_SUCCESS(rc)) 468 rc = rc2; 469 470 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Play tone done\n"); 471 472 return rc; 473 } 474 475 /********************************************************************************************************************************* 395 476 * ATS Callback Implementations * 396 477 *********************************************************************************************************************************/ 397 478 398 /** 399 * Note: Called within server (client serving) thread. 400 */ 401 static DECLCALLBACK(int) audioTestSvcTonePlayCallback(void const *pvUser, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms) 479 /** @copydoc ATSCALLBACKS::pfnTestSetBegin */ 480 static DECLCALLBACK(int) audioTestSvcTestSetBeginCallback(void const *pvUser, const char *pszTag) 402 481 { 403 482 PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser; 404 483 PAUDIOTESTENV pTstEnv = pCtx->pTstEnv; 405 484 485 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Beginning test set '%s'\n", pszTag); 486 487 return AudioTestSetCreate(&pTstEnv->Set, pTstEnv->szPathTemp, pszTag); 488 } 489 490 /** @copydoc ATSCALLBACKS::pfnTestSetEnd */ 491 static DECLCALLBACK(int) audioTestSvcTestSetEndCallback(void const *pvUser, const char *pszTag) 492 { 493 RT_NOREF(pszTag); 494 495 PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser; 496 PAUDIOTESTENV pTstEnv = pCtx->pTstEnv; 497 498 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Ending test set '%s'\n", pszTag); 499 500 return audioTestEnvPrologue(pTstEnv); 501 } 502 503 /** @copydoc ATSCALLBACKS::pfnTonePlay */ 504 static DECLCALLBACK(int) audioTestSvcTonePlayCallback(void const *pvUser, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms) 505 { 506 PATSCALLBACKCTX pCtx = (PATSCALLBACKCTX)pvUser; 507 PAUDIOTESTENV pTstEnv = pCtx->pTstEnv; 508 406 509 AUDIOTESTTONE TstTone; 407 510 AudioTestToneInitRandom(&TstTone, &pStreamCfg->Props); 408 511 409 int rc;410 411 const PPDMAUDIOSTREAM pStream = pTstEnv->aStreams[0].pStream; /** @todo Make this dynamic. */412 413 if (audioTestDriverStackStreamIsOkay(&pTstEnv->DrvStack, pStream))414 {415 uint32_t cbBuf;416 uint8_t abBuf[_4K];417 418 const uint64_t tsStartMs = RTTimeMilliTS();419 const uint16_t cSchedulingMs = RTRandU32Ex(10, 80); /* Chose a random scheduling (in ms). */ 420 const uint32_t cbPerMs = PDMAudioPropsMilliToBytes(&pStream->Props, cSchedulingMs);421 422 do423 { 424 rc = AudioTestToneGenerate(&TstTone, abBuf, RT_MIN(cbPerMs, sizeof(abBuf)), &cbBuf);512 const PAUDIOTESTSTREAM pTstStream = &pTstEnv->aStreams[0]; /** @todo Make this dynamic. */ 513 514 int rc = audioTestCreateStreamDefaultOut(pTstEnv, pTstStream, &pStreamCfg->Props); 515 if (RT_SUCCESS(rc)) 516 { 517 AUDIOTESTPARMS TstParms; 518 RT_ZERO(TstParms); 519 TstParms.enmType = AUDIOTESTTYPE_TESTTONE_PLAY; 520 TstParms.enmDir = PDMAUDIODIR_OUT; 521 TstParms.TestTone = *pToneParms; 522 523 PAUDIOTESTENTRY pTst; 524 rc = AudioTestSetTestBegin(&pTstEnv->Set, "Playing test tone", &TstParms, &pTst); 525 if (RT_SUCCESS(rc)) 526 { 527 rc = audioTestPlayTone(pTstEnv, pTstStream, pToneParms); 425 528 if (RT_SUCCESS(rc)) 426 529 { 427 uint32_t cbWritten; 428 rc = audioTestDriverStackStreamPlay(&pTstEnv->DrvStack, pStream, abBuf, cbBuf, &cbWritten); 530 AudioTestSetTestDone(pTst); 429 531 } 430 431 if (RTTimeMilliTS() - tsStartMs >= pToneParms->msDuration) 432 break; 433 434 if (RT_FAILURE(rc)) 435 break; 436 437 RTThreadSleep(cSchedulingMs); 438 439 } while (RT_SUCCESS(rc)); 532 else 533 AudioTestSetTestFailed(pTst, rc, "Playing tone failed"); 534 } 535 536 int rc2 = audioTestStreamDestroy(pTstEnv, pTstStream); 537 if (RT_SUCCESS(rc)) 538 rc = rc2; 440 539 } 441 540 else 442 rc = VERR_AUDIO_STREAM_NOT_READY;541 RTTestFailed(g_hTest, "Error creating output stream, rc=%Rrc\n", rc); 443 542 444 543 return rc; … … 464 563 const char *pszTcpAddr, uint32_t uTcpPort) 465 564 { 466 PDMAudioHostEnumInit(&pTstEnv->DevEnum);467 468 int rc = audioTestDriverStackInit(&pTstEnv->DrvStack, pDrvReg, fWithDrvAudio);469 if (RT_FAILURE(rc))470 return rc;471 472 565 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Test mode is '%s'\n", pTstEnv->enmMode == AUDIOTESTMODE_HOST ? "host" : "guest"); 473 566 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Using tag '%s'\n", pszTag); … … 475 568 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Temp directory is '%s'\n", pTstEnv->szPathTemp); 476 569 570 int rc = VINF_SUCCESS; 571 572 PDMAudioHostEnumInit(&pTstEnv->DevEnum); 573 574 /* Only the guest mode needs initializing the driver stack. */ 575 const bool fUseDriverStack = pTstEnv->enmMode == AUDIOTESTMODE_GUEST; 576 if (fUseDriverStack) 577 { 578 rc = audioTestDriverStackInit(&pTstEnv->DrvStack, pDrvReg, fWithDrvAudio); 579 if (RT_FAILURE(rc)) 580 return rc; 581 582 PPDMAUDIOHOSTDEV pDev; 583 rc = audioTestDevicesEnumerateAndCheck(pTstEnv, NULL /* pszDevice */, &pDev); /** @todo Implement device checking. */ 584 if (RT_FAILURE(rc)) 585 return rc; 586 } 587 477 588 char szPathTemp[RTPATH_MAX]; 478 589 if ( !strlen(pTstEnv->szPathTemp) … … 488 599 rc = RTPathJoin(pTstEnv->szPathOut, sizeof(pTstEnv->szPathOut), szPathTemp, "vkat"); 489 600 490 if (RT_SUCCESS(rc))491 rc = AudioTestSetCreate(&pTstEnv->Set, pTstEnv->szPathTemp, pszTag);492 493 601 if (RT_FAILURE(rc)) 494 602 return rc; … … 501 609 502 610 ATSCALLBACKS Callbacks; 503 Callbacks.pfnTonePlay = audioTestSvcTonePlayCallback; 504 Callbacks.pvUser = &Ctx; 611 Callbacks.pfnTestSetBegin = audioTestSvcTestSetBeginCallback; 612 Callbacks.pfnTestSetEnd = audioTestSvcTestSetEndCallback; 613 Callbacks.pfnTonePlay = audioTestSvcTonePlayCallback; 614 Callbacks.pvUser = &Ctx; 505 615 506 616 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Starting ATS ...\n"); … … 511 621 if (RT_FAILURE(rc)) 512 622 { 513 RTTestFailed(g_hTest, " Initializing ATS failed with %Rrc\n", rc);623 RTTestFailed(g_hTest, "Starting ATS failed with %Rrc\n", rc); 514 624 return rc; 515 625 } 516 517 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "ATS running\n"); 518 519 while (!g_fTerminated) /** @todo Implement signal handling. */ 520 { 521 RTThreadSleep(100); 522 } 523 524 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Shutting down ATS ...\n"); 525 526 int rc2 = AudioTestSvcShutdown(&pTstEnv->u.Guest.Srv); 527 if (RT_SUCCESS(rc)) 528 rc = rc2; 529 } 530 else 626 } 627 else /* Host mode */ 531 628 { 532 629 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Connecting to ATS at %s:%RU32 ...\n", pszTcpAddr, uTcpPort); 630 533 631 rc = AudioTestSvcClientConnect(&pTstEnv->u.Host.Client, pszTcpAddr, uTcpPort); 534 632 if (RT_FAILURE(rc)) … … 537 635 return rc; 538 636 } 539 } 540 541 audioTestDriverStackDelete(&pTstEnv->DrvStack); 637 638 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connected to ATS\n"); 639 } 640 641 if ( RT_FAILURE(rc) 642 && fUseDriverStack) 643 audioTestDriverStackDelete(&pTstEnv->DrvStack); 542 644 543 645 return rc; … … 563 665 } 564 666 667 audioTestDriverStackDelete(&pTstEnv->DrvStack); 668 } 669 670 /** 671 * Closes, packs up and destroys a test environment. 672 * 673 * @returns VBox status code. 674 * @param pTstEnv Test environment to handle. 675 */ 676 static int audioTestEnvPrologue(PAUDIOTESTENV pTstEnv) 677 { 678 /* Before destroying the test environment, pack up the test set so 679 * that it's ready for transmission. */ 680 char szFileOut[RTPATH_MAX]; 681 int rc = AudioTestSetPack(&pTstEnv->Set, pTstEnv->szPathOut, szFileOut, sizeof(szFileOut)); 682 if (RT_SUCCESS(rc)) 683 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Test set packed up to '%s'\n", szFileOut); 684 685 /* Clean up. */ 686 AudioTestSetClose(&pTstEnv->Set); 687 688 int rc2 = AudioTestSetWipe(&pTstEnv->Set); 689 if (RT_SUCCESS(rc)) 690 rc = rc2; 691 565 692 AudioTestSetDestroy(&pTstEnv->Set); 566 audioTestDriverStackDelete(&pTstEnv->DrvStack); 693 694 return rc; 567 695 } 568 696 … … 812 940 813 941 /** 814 * Plays a test tone on a specific audio test stream.815 *816 * @returns VBox status code.817 * @param pTstEnv Test environment to use for running the test.818 * @param pStream Stream to use for playing the tone.819 * @param pParms Tone parameters to use.820 *821 * @note Blocking function.822 */823 static int audioTestPlayTone(PAUDIOTESTENV pTstEnv, PAUDIOTESTSTREAM pStream, PAUDIOTESTTONEPARMS pParms)824 {825 AUDIOTESTTONE TstTone;826 AudioTestToneInit(&TstTone, &pParms->Props, pParms->dbFreqHz);827 828 const char *pcszPathOut = pTstEnv->Set.szPathAbs;829 830 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Playing test tone (tone frequency is %RU16Hz, %RU32ms)\n", (uint16_t)pParms->dbFreqHz, pParms->msDuration);831 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Writing to '%s'\n", pcszPathOut);832 833 /** @todo Use .WAV here? */834 PAUDIOTESTOBJ pObj;835 int rc = AudioTestSetObjCreateAndRegister(&pTstEnv->Set, "tone-play.pcm", &pObj);836 AssertRCReturn(rc, rc);837 838 if (audioTestDriverStackStreamIsOkay(&pTstEnv->DrvStack, pStream->pStream))839 {840 uint32_t cbBuf;841 uint8_t abBuf[_4K];842 843 const uint64_t tsStartMs = RTTimeMilliTS();844 const uint16_t cSchedulingMs = RTRandU32Ex(10, 80); /* Choose a random scheduling (in ms). */845 const uint32_t cbPerMs = PDMAudioPropsMilliToBytes(&pParms->Props, cSchedulingMs);846 847 do848 {849 rc = AudioTestToneGenerate(&TstTone, abBuf, RT_MIN(cbPerMs, sizeof(abBuf)), &cbBuf);850 if (RT_SUCCESS(rc))851 {852 /* Write stuff to disk before trying to play it. Help analysis later. */853 rc = AudioTestSetObjWrite(pObj, abBuf, cbBuf);854 if (RT_SUCCESS(rc))855 {856 uint32_t cbWritten;857 rc = audioTestDriverStackStreamPlay(&pTstEnv->DrvStack, pStream->pStream,858 abBuf, cbBuf, &cbWritten);859 }860 }861 862 if (RTTimeMilliTS() - tsStartMs >= pParms->msDuration)863 break;864 865 if (RT_FAILURE(rc))866 break;867 868 RTThreadSleep(cSchedulingMs);869 870 } while (RT_SUCCESS(rc));871 }872 else873 rc = VERR_AUDIO_STREAM_NOT_READY;874 875 int rc2 = AudioTestSetObjClose(pObj);876 if (RT_SUCCESS(rc))877 rc = rc2;878 879 return rc;880 }881 882 /**883 942 * Overrides audio test base parameters with another set. 884 943 * … … 933 992 int rc = VINF_SUCCESS; 934 993 935 PAUDIOTESTSTREAM pStream = &pTstEnv->aStreams[0];936 937 994 for (uint32_t i = 0; i < pTstParms->cIterations; i++) 938 995 { … … 943 1000 if (RT_SUCCESS(rc)) 944 1001 { 945 rc = audioTestCreateStreamDefaultOut(pTstEnv, pStream, &pTstParms->TestTone.Props); 946 if (RT_SUCCESS(rc)) 947 { 948 rc = audioTestPlayTone(pTstEnv, pStream, &pTstParms->TestTone); 949 } 950 951 int rc2 = audioTestStreamDestroy(pTstEnv, pStream); 952 if (RT_SUCCESS(rc)) 953 rc = rc2; 954 1002 PDMAUDIOSTREAMCFG Cfg; 1003 RT_ZERO(Cfg); 1004 /** @todo Add more parameters here? */ 1005 Cfg.Props = pTstParms->Props; 1006 1007 rc = AudioTestSvcClientTonePlay(&pTstEnv->u.Host.Client, &Cfg, &pTstParms->TestTone); 955 1008 if (RT_SUCCESS(rc)) 956 1009 { … … 1145 1198 int rc = VINF_SUCCESS; 1146 1199 1147 unsigned uSeq = 0; 1148 for (unsigned i = 0; i < RT_ELEMENTS(g_aTests); i++) 1149 { 1150 int rc2 = audioTestOne(pTstEnv, &g_aTests[i], uSeq, pOverrideParms); 1200 if (pTstEnv->enmMode == AUDIOTESTMODE_GUEST) 1201 { 1202 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "ATS running\n"); 1203 1204 while (!g_fTerminated) /** @todo Implement signal handling. */ 1205 { 1206 RTThreadSleep(100); 1207 } 1208 1209 RTTestPrintf(g_hTest, RTTESTLVL_DEBUG, "Shutting down ATS ...\n"); 1210 1211 int rc2 = AudioTestSvcShutdown(&pTstEnv->u.Guest.Srv); 1151 1212 if (RT_SUCCESS(rc)) 1152 1213 rc = rc2; 1153 1154 if (!g_aTests[i].fExcluded) 1155 uSeq++; 1156 } 1214 } 1215 else if (pTstEnv->enmMode == AUDIOTESTMODE_HOST) 1216 { 1217 /* We have one single test set for all executed tests for now. */ 1218 rc = AudioTestSetCreate(&pTstEnv->Set, pTstEnv->szPathTemp, pTstEnv->szTag); 1219 if (RT_SUCCESS(rc)) 1220 { 1221 /* Copy back the (eventually generated) tag to the test environment. */ 1222 rc = RTStrCopy(pTstEnv->szTag, sizeof(pTstEnv->szTag), AudioTestSetGetTag(&pTstEnv->Set)); 1223 AssertRC(rc); 1224 1225 rc = AudioTestSvcClientTestSetBegin(&pTstEnv->u.Host.Client, pTstEnv->szTag); 1226 if (RT_SUCCESS(rc)) 1227 { 1228 unsigned uSeq = 0; 1229 for (unsigned i = 0; i < RT_ELEMENTS(g_aTests); i++) 1230 { 1231 int rc2 = audioTestOne(pTstEnv, &g_aTests[i], uSeq, pOverrideParms); 1232 if (RT_SUCCESS(rc)) 1233 rc = rc2; 1234 1235 if (!g_aTests[i].fExcluded) 1236 uSeq++; 1237 } 1238 1239 int rc2 = AudioTestSvcClientTestSetEnd(&pTstEnv->u.Host.Client, pTstEnv->szTag); 1240 if (RT_SUCCESS(rc)) 1241 rc = rc2; 1242 } 1243 1244 audioTestEnvPrologue(pTstEnv); 1245 } 1246 } 1247 else 1248 AssertFailed(); 1249 1250 if (RT_FAILURE(rc)) 1251 RTTestFailed(g_hTest, "Test worker failed with %Rrc", rc); 1157 1252 1158 1253 return rc; … … 1164 1259 switch (pOpt->iShort) 1165 1260 { 1166 case 'd': return "Go via DrvAudio instead of directly interfacing with the backend."; 1167 case VKAT_TEST_OPT_DEV: return "Use the specified audio device"; 1168 case 'e': return "Exclude the given test id from the list"; 1169 case 'a': return "Exclude all tests from the list (useful to enable single tests later with --include)"; 1170 case 'i': return "Include the given test id in the list"; 1261 case 'd': return "Go via DrvAudio instead of directly interfacing with the backend"; 1262 case VKAT_TEST_OPT_DEV: return "Use the specified audio device"; 1263 case VKAT_TEST_OPT_ATS_ADDR: return "ATS address (hostname or IP) to connect to"; 1264 case VKAT_TEST_OPT_ATS_PORT: return "ATS port to connect to. Defaults to 6052 if not set"; 1265 case VKAT_TEST_OPT_MODE: return "Specifies the mode this program runs at"; 1266 case 'e': return "Exclude the given test id from the list"; 1267 case 'a': return "Exclude all tests from the list (useful to enable single tests later with --include)"; 1268 case 'i': return "Include the given test id in the list"; 1171 1269 } 1172 1270 return NULL; … … 1336 1434 if (RT_SUCCESS(rc)) 1337 1435 { 1338 PPDMAUDIOHOSTDEV pDev; 1339 rc = audioTestDevicesEnumerateAndCheck(&TstEnv, pszDevice, &pDev); 1340 if (RT_SUCCESS(rc)) 1341 audioTestWorker(&TstEnv, &TstCust); 1342 1343 /* Before destroying the test environment, pack up the test set so 1344 * that it's ready for transmission. */ 1345 char szFileOut[RTPATH_MAX]; 1346 rc = AudioTestSetPack(&TstEnv.Set, TstEnv.szPathOut, szFileOut, sizeof(szFileOut)); 1347 if (RT_SUCCESS(rc)) 1348 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Test set packed up to '%s'\n", szFileOut); 1349 1350 #ifndef DEBUG_andy 1351 /* Clean up. */ 1352 AudioTestSetClose(&TstEnv.Set); /* wipe fails on windows if the manifest file is open*/ 1353 1354 int rc2 = AudioTestSetWipe(&TstEnv.Set); 1355 AssertRC(rc2); /* Annoying, but not test-critical. */ 1356 #endif 1436 audioTestWorker(&TstEnv, &TstCust); 1357 1437 audioTestEnvDestroy(&TstEnv); 1358 1438 } … … 1863 1943 rc = AudioTestSvcInit(&Srv, &Callbacks); 1864 1944 if (RT_SUCCESS(rc)) 1865 {1866 1945 rc = AudioTestSvcStart(&Srv); 1867 if (RT_SUCCESS(rc))1868 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "ATS running\n");1869 }1870 1946 } 1871 1947 else
Note:
See TracChangeset
for help on using the changeset viewer.