Changeset 70878 in vbox for trunk/src/VBox/Devices/Audio
- Timestamp:
- Feb 6, 2018 10:48:43 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120704
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/AudioMixBuffer.cpp
r69119 r70878 1520 1520 * @param pvBuf Pointer to buffer to write output to. 1521 1521 * @param cbBuf Size (in bytes) of buffer to write to. 1522 * @param pc Read Number of audio frames read. Optional.1523 */ 1524 int AudioMixBuf ReadCirc(PPDMAUDIOMIXBUF pMixBuf, void *pvBuf, uint32_t cbBuf, uint32_t *pcRead)1525 { 1526 return AudioMixBuf ReadCircEx(pMixBuf, pMixBuf->AudioFmt, pvBuf, cbBuf, pcRead);1522 * @param pcBlock Returns acquired block to read (in audio frames). 1523 */ 1524 int AudioMixBufAcquireReadBlock(PPDMAUDIOMIXBUF pMixBuf, void *pvBuf, uint32_t cbBuf, uint32_t *pcBlock) 1525 { 1526 return AudioMixBufAcquireReadBlockEx(pMixBuf, pMixBuf->AudioFmt, pvBuf, cbBuf, pcBlock); 1527 1527 } 1528 1528 … … 1537 1537 * @param pvBuf Pointer to buffer to write output to. 1538 1538 * @param cbBuf Size (in bytes) of buffer to write to. 1539 * @param pcRead Number of audio frames read. Optional. 1540 */ 1541 int AudioMixBufReadCircEx(PPDMAUDIOMIXBUF pMixBuf, PDMAUDIOMIXBUFFMT enmFmt, void *pvBuf, uint32_t cbBuf, uint32_t *pcRead) 1539 * @param pcBlock Returns acquired block to read (in audio frames). 1540 */ 1541 int AudioMixBufAcquireReadBlockEx(PPDMAUDIOMIXBUF pMixBuf, PDMAUDIOMIXBUFFMT enmFmt, void *pvBuf, uint32_t cbBuf, 1542 uint32_t *pcBlock) 1542 1543 { 1543 1544 AssertPtrReturn(pMixBuf, VERR_INVALID_POINTER); 1544 1545 AssertReturn(cbBuf, VERR_INVALID_PARAMETER); 1545 1546 AssertPtrReturn(pvBuf, VERR_INVALID_POINTER); 1546 /* pcRead is optional. */1547 AssertPtrReturn(pcBlock, VERR_INVALID_POINTER); 1547 1548 1548 1549 /* Make sure that we at least have space for a full audio frame. */ … … 1559 1560 audioMixBufDbgPrintInternal(pMixBuf, __FUNCTION__); 1560 1561 #endif 1561 if (pcRead) 1562 *pcRead = 0; 1562 *pcBlock = 0; 1563 1563 return VINF_SUCCESS; 1564 1564 } … … 1597 1597 } 1598 1598 #endif 1599 pMixBuf->offRead = (pMixBuf->offRead + cToRead) % pMixBuf->cFrames; 1600 Assert(pMixBuf->cUsed >= cToRead); 1601 pMixBuf->cUsed -= cToRead; 1602 } 1603 1604 if (pcRead) 1605 *pcRead = cToRead; 1599 } 1600 1601 *pcBlock = cToRead; 1606 1602 1607 1603 #ifdef DEBUG … … 1611 1607 AUDMIXBUF_LOG(("cRead=%RU32 (%RU32 bytes)\n", cToRead, AUDIOMIXBUF_F2B(pMixBuf, cToRead))); 1612 1608 return VINF_SUCCESS; 1609 } 1610 1611 /** 1612 * Releases a formerly acquired read block again. 1613 * 1614 * @param pMixBuf Mixing buffer to release acquired read block for. 1615 * @param cBlock Size of the block to release (in audio frames). 1616 */ 1617 void AudioMixBufReleaseReadBlock(PPDMAUDIOMIXBUF pMixBuf, uint32_t cBlock) 1618 { 1619 AssertPtrReturnVoid(pMixBuf); 1620 1621 if (!cBlock) 1622 return; 1623 1624 pMixBuf->offRead = (pMixBuf->offRead + cBlock) % pMixBuf->cFrames; 1625 Assert(pMixBuf->cUsed >= cBlock); 1626 pMixBuf->cUsed -= RT_MIN(cBlock, pMixBuf->cUsed); 1613 1627 } 1614 1628 -
trunk/src/VBox/Devices/Audio/AudioMixBuffer.h
r69119 r70878 5 5 6 6 /* 7 * Copyright (C) 2014-201 7Oracle Corporation7 * Copyright (C) 2014-2018 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 66 66 int AudioMixBufReadAt(PPDMAUDIOMIXBUF pMixBuf, uint32_t offSamples, void *pvBuf, uint32_t cbBuf, uint32_t *pcbRead); 67 67 int AudioMixBufReadAtEx(PPDMAUDIOMIXBUF pMixBuf, PDMAUDIOMIXBUFFMT enmFmt, uint32_t offSamples, void *pvBuf, uint32_t cbBuf, uint32_t *pcbRead); 68 int AudioMixBufReadCirc(PPDMAUDIOMIXBUF pMixBuf, void *pvBuf, uint32_t cbBuf, uint32_t *pcRead); 69 int AudioMixBufReadCircEx(PPDMAUDIOMIXBUF pMixBuf, PDMAUDIOMIXBUFFMT enmFmt, void *pvBuf, uint32_t cbBuf, uint32_t *pcRead); 68 int AudioMixBufAcquireReadBlock(PPDMAUDIOMIXBUF pMixBuf, void *pvBuf, uint32_t cbBuf, uint32_t *pcBlock); 69 int AudioMixBufAcquireReadBlockEx(PPDMAUDIOMIXBUF pMixBuf, PDMAUDIOMIXBUFFMT enmFmt, void *pvBuf, uint32_t cbBuf, uint32_t *pcBlock); 70 void AudioMixBufReleaseReadBlock(PPDMAUDIOMIXBUF pMixBuf, uint32_t cBlock); 70 71 uint32_t AudioMixBufReadPos(PPDMAUDIOMIXBUF pMixBuf); 71 72 void AudioMixBufReset(PPDMAUDIOMIXBUF pMixBuf); -
trunk/src/VBox/Devices/Audio/DrvAudio.cpp
r70640 r70878 1310 1310 { 1311 1311 uint32_t cfRead = 0; 1312 rc = AudioMixBuf ReadCirc(&pHstStream->MixBuf, auBuf, RT_MIN(cbChunk, cbLeft), &cfRead);1312 rc = AudioMixBufAcquireReadBlock(&pHstStream->MixBuf, auBuf, RT_MIN(cbChunk, cbLeft), &cfRead); 1313 1313 if ( !cfRead 1314 1314 || RT_FAILURE(rc)) … … 1338 1338 pHstStream->szName, cfRead, cbPlayed));*/ 1339 1339 #endif 1340 cfPlayedTotal += AUDIOMIXBUF_B2F(&pHstStream->MixBuf, cbPlayed); 1340 const uint32_t cfPlayed = AUDIOMIXBUF_B2F(&pHstStream->MixBuf, cbPlayed); 1341 1342 cfPlayedTotal += cfPlayed; 1341 1343 Assert(cbLeft >= cbPlayed); 1342 1344 cbLeft -= cbPlayed; 1345 1346 AudioMixBufReleaseReadBlock(&pHstStream->MixBuf, cfPlayed); 1343 1347 } 1344 1348 } … … 2303 2307 { 2304 2308 uint32_t cRead; 2305 rc = AudioMixBuf ReadCirc(&pGstStream->MixBuf, (uint8_t *)pvBuf + AUDIOMIXBUF_F2B(&pGstStream->MixBuf, cReadTotal),2306 AUDIOMIXBUF_F2B(&pGstStream->MixBuf, cToRead), &cRead);2309 rc = AudioMixBufAcquireReadBlock(&pGstStream->MixBuf, (uint8_t *)pvBuf + AUDIOMIXBUF_F2B(&pGstStream->MixBuf, cReadTotal), 2310 AUDIOMIXBUF_F2B(&pGstStream->MixBuf, cToRead), &cRead); 2307 2311 if (RT_FAILURE(rc)) 2308 2312 break; … … 2320 2324 2321 2325 cReadTotal += cRead; 2326 2327 AudioMixBufReleaseReadBlock(&pHstStream->MixBuf, cRead); 2322 2328 } 2323 2329 -
trunk/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
r68132 r70878 5 5 6 6 /* 7 * Copyright (C) 2014-201 7Oracle Corporation7 * Copyright (C) 2014-2018 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 136 136 for (uint32_t i = 0; i < cToRead; i++) 137 137 { 138 RTTESTI_CHECK_RC_OK(AudioMixBuf ReadCirc(&mb, &aFrames16, sizeof(aFrames16), &cFramesRead));138 RTTESTI_CHECK_RC_OK(AudioMixBufAcquireReadBlock(&mb, &aFrames16, sizeof(aFrames16), &cFramesRead)); 139 139 RTTESTI_CHECK(cFramesRead == 1); 140 AudioMixBufReleaseReadBlock(&mb, cFramesRead); 140 141 AudioMixBufFinish(&mb, cFramesRead); 141 142 } … … 145 146 RTTESTI_CHECK(AudioMixBufUsed(&mb) == cBufSize - cToRead); 146 147 147 RTTESTI_CHECK_RC_OK(AudioMixBuf ReadCirc(&mb, &aFrames16, sizeof(aFrames16), &cFramesRead));148 RTTESTI_CHECK_RC_OK(AudioMixBufAcquireReadBlock(&mb, &aFrames16, sizeof(aFrames16), &cFramesRead)); 148 149 RTTESTI_CHECK(cFramesRead == 1); 150 AudioMixBufReleaseReadBlock(&mb, cFramesRead); 149 151 AudioMixBufFinish(&mb, cFramesRead); 150 152 RTTESTI_CHECK(AudioMixBufFree(&mb) == cBufSize - cFramesWrittenAbs); … … 279 281 while (cParentSamples) 280 282 { 281 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBuf ReadCirc(&parent, pvBuf, cbBuf, &cFramesRead));283 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBufAcquireReadBlock(&parent, pvBuf, cbBuf, &cFramesRead)); 282 284 if (!cFramesRead) 283 285 break; 284 286 287 AudioMixBufReleaseReadBlock(&parent, cFramesRead); 285 288 AudioMixBufFinish(&parent, cFramesRead); 286 289 … … 379 382 for (;;) 380 383 { 381 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBuf ReadCirc(&parent, achBuf, cbBuf, &cFramesRead));384 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBufAcquireReadBlock(&parent, achBuf, cbBuf, &cFramesRead)); 382 385 if (!cFramesRead) 383 386 break; 384 387 cFramesTotalRead += cFramesRead; 388 AudioMixBufReleaseReadBlock(&parent, cFramesRead); 385 389 AudioMixBufFinish(&parent, cFramesRead); 386 390 } … … 477 481 for (;;) 478 482 { 479 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBuf ReadCirc(&parent, achBuf, cbBuf, &cFramesRead));483 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBufAcquireReadBlock(&parent, achBuf, cbBuf, &cFramesRead)); 480 484 if (!cFramesRead) 481 485 break; 482 486 cFramesTotalRead += cFramesRead; 487 AudioMixBufReleaseReadBlock(&parent, cFramesRead); 483 488 AudioMixBufFinish(&parent, cFramesRead); 484 489 } … … 567 572 for (;;) 568 573 { 569 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBuf ReadCirc(&parent, achBuf, cbBuf, &cFramesRead));574 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBufAcquireReadBlock(&parent, achBuf, cbBuf, &cFramesRead)); 570 575 if (!cFramesRead) 571 576 break; 572 577 cFramesTotalRead += cFramesRead; 578 AudioMixBufReleaseReadBlock(&parent, cFramesRead); 573 579 AudioMixBufFinish(&parent, cFramesRead); 574 580 } … … 598 604 for (;;) 599 605 { 600 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBuf ReadCirc(&parent, achBuf, cbBuf, &cFramesRead));606 RTTESTI_CHECK_RC_OK_BREAK(AudioMixBufAcquireReadBlock(&parent, achBuf, cbBuf, &cFramesRead)); 601 607 if (!cFramesRead) 602 608 break; 603 609 cFramesTotalRead += cFramesRead; 610 AudioMixBufReleaseReadBlock(&parent, cFramesRead); 604 611 AudioMixBufFinish(&parent, cFramesRead); 605 612 }
Note:
See TracChangeset
for help on using the changeset viewer.