Changeset 61343 in vbox for trunk/src/VBox
- Timestamp:
- May 31, 2016 3:55:57 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 107638
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/AudioMixBuffer.cpp
r61331 r61343 42 42 #include <iprt/mem.h> 43 43 #include <iprt/string.h> /* For RT_BZERO. */ 44 45 #define VBOX_AUDIO_TESTCASE 44 46 45 47 #ifdef VBOX_AUDIO_TESTCASE … … 1616 1618 { 1617 1619 AssertPtrReturn(pMixBuf, VERR_INVALID_POINTER); 1618 AssertPtrReturn(pvBuf, VERR_INVALID_POINTER);1620 AssertPtrReturn(pvBuf, VERR_INVALID_POINTER); 1619 1621 /* pcWritten is optional. */ 1620 1622 1621 uint32_t cDstSamples = pMixBuf->pParent 1622 ? pMixBuf->pParent->cSamples : pMixBuf->cSamples; 1623 uint32_t cLive = pMixBuf->cUsed; 1624 1625 uint32_t cDead = cDstSamples - cLive; 1626 uint32_t cToProcess = (uint32_t)AUDIOMIXBUF_S2S_RATIO(pMixBuf, cDead); 1627 cToProcess = RT_MIN(cToProcess, AUDIOMIXBUF_B2S(pMixBuf, cbBuf)); 1628 1629 AUDMIXBUF_LOG(("%s: offSamples=%RU32, cLive=%RU32, cDead=%RU32, cToProcess=%RU32\n", 1630 pMixBuf->pszName, offSamples, cLive, cDead, cToProcess)); 1631 1632 if (offSamples + cToProcess > pMixBuf->cSamples) 1633 return VERR_BUFFER_OVERFLOW; 1623 uint32_t cToWrite = AUDIOMIXBUF_B2S(pMixBuf, cbBuf); 1624 1625 int rc = VINF_SUCCESS; 1626 1627 if (offSamples + cToWrite > pMixBuf->cSamples) 1628 rc = VINF_BUFFER_OVERFLOW; 1629 1630 cToWrite = RT_MIN(cToWrite, pMixBuf->cSamples - offSamples); 1634 1631 1635 1632 PPDMAUDMIXBUF_FN_CONVFROM pConv; … … 1643 1640 1644 1641 if (!pConv) 1645 return VERR_NOT_SUPPORTED; 1646 1647 int rc; 1642 rc = VERR_NOT_SUPPORTED; 1643 1648 1644 uint32_t cWritten; 1649 1645 1650 1646 #ifdef AUDIOMIXBUF_DEBUG_DUMP_PCM_DATA 1651 1647 RTFILE fh; 1652 rc= RTFileOpen(&fh, AUDIOMIXBUF_DEBUG_DUMP_PCM_DATA_PATH "mixbuf_writeat.pcm",1653 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE);1654 if (RT_SUCCESS(rc ))1655 { 1656 RTFileWrite(fh, pvBuf, cbBuf, NULL);1648 int rc2 = RTFileOpen(&fh, AUDIOMIXBUF_DEBUG_DUMP_PCM_DATA_PATH "mixbuf_writeat.pcm", 1649 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE); 1650 if (RT_SUCCESS(rc2)) 1651 { 1652 RTFileWrite(fh, pvBuf, AUDIOMIXBUF_S2B(pMixBuf, cToWrite), NULL); 1657 1653 RTFileClose(fh); 1658 1654 } 1659 1655 #endif 1660 1656 1661 if (cToProcess) 1662 { 1663 PDMAUDMIXBUF_CONVOPTS convOpts = { cToProcess, pMixBuf->Volume }; 1664 1665 cWritten = pConv(pMixBuf->pSamples + offSamples, pvBuf, cbBuf, &convOpts); 1657 if ( pConv 1658 && cToWrite) 1659 { 1660 PDMAUDMIXBUF_CONVOPTS convOpts = { cToWrite, pMixBuf->Volume }; 1661 1662 cWritten = pConv(pMixBuf->pSamples + offSamples, pvBuf, AUDIOMIXBUF_S2B(pMixBuf, cToWrite), &convOpts); 1663 } 1664 else 1665 cWritten = 0; 1666 1666 1667 #ifdef DEBUG 1667 audioMixBufDbgPrintInternal(pMixBuf); 1668 #endif 1669 rc = cWritten ? VINF_SUCCESS : VERR_GENERAL_FAILURE; /** @todo Fudge! */ 1670 } 1671 else 1672 { 1673 cWritten = 0; 1674 rc = VINF_SUCCESS; 1675 } 1668 audioMixBufDbgPrintInternal(pMixBuf); 1669 #endif 1670 1671 AUDMIXBUF_LOG(("%s: offSamples=%RU32, cbBuf=%RU32, cToWrite=%RU32 (%zu bytes), cWritten=%RU32 (%zu bytes), rc=%Rrc\n", 1672 pMixBuf->pszName, offSamples, cbBuf, 1673 cToWrite, AUDIOMIXBUF_S2B(pMixBuf, cToWrite), 1674 cWritten, AUDIOMIXBUF_S2B(pMixBuf, cWritten), rc)); 1676 1675 1677 1676 if (RT_SUCCESS(rc)) … … 1681 1680 } 1682 1681 1683 AUDMIXBUF_LOG(("cWritten=%RU32, rc=%Rrc\n", cWritten, rc));1684 1682 return rc; 1685 1683 } -
trunk/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
r61331 r61343 139 139 static int tstParentChild(RTTEST hTest) 140 140 { 141 uint32_t cBufSize = RTRandU32() % 256; 141 uint32_t cSamples = 16; 142 uint32_t cBufSize = RTRandU32Ex(cSamples /* Min */, 256 /* Max */); 142 143 143 144 PDMAUDIOSTREAMCFG cfg_p = … … 205 206 uint32_t cChild1Free = cBufSize; 206 207 uint32_t cChild1Mixed = 0; 207 uint32_t cSamplesParent1 = 16;208 uint32_t cSamplesChild1 = 16;208 uint32_t cSamplesParent1 = cSamples; 209 uint32_t cSamplesChild1 = cSamples; 209 210 210 211 uint32_t cChild2Free = cBufSize; 211 212 uint32_t cChild2Mixed = 0; 212 uint32_t cSamplesParent2 = 16;213 uint32_t cSamplesChild2 = 16;213 uint32_t cSamplesParent2 = cSamples; 214 uint32_t cSamplesChild2 = cSamples; 214 215 215 216 uint32_t t = RTRandU32() % 1024;
Note:
See TracChangeset
for help on using the changeset viewer.