Changeset 73575 in vbox
- Timestamp:
- Aug 8, 2018 4:25:47 PM (6 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/Devices/Audio/DrvAudio.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DrvAudio.cpp
r73574 r73575 1686 1686 AssertPtr(pThis->pHostDrvAudio->pfnStreamGetReadable); 1687 1687 1688 for (;;) 1689 { 1690 uint32_t cbReadable = pThis->pHostDrvAudio->pfnStreamGetReadable(pThis->pHostDrvAudio, pStream->pvBackend); 1691 if (!cbReadable) /* Nothing to read on the backend side? Bail out. */ 1692 break; 1693 1694 const uint32_t cbFree = AudioMixBufFreeBytes(&pStream->Host.MixBuf); 1695 if (!cbFree) /* No space left in the host stream? */ 1696 break; 1697 1698 if (cbReadable > cbFree) /* Don't capture more than the host stream currently can hold. */ 1699 cbReadable = cbFree; 1700 1688 /* Note: Raw means *audio frames*, not bytes! */ 1689 uint32_t cfReadable = pThis->pHostDrvAudio->pfnStreamGetReadable(pThis->pHostDrvAudio, pStream->pvBackend); 1690 if (!cfReadable) 1691 Log2Func(("[%s] No readable data available\n", pStream->szName)); 1692 1693 const uint32_t cfFree = AudioMixBufFree(&pStream->Guest.MixBuf); /* Parent */ 1694 if (!cfFree) 1695 Log2Func(("[%s] Buffer full\n", pStream->szName)); 1696 1697 if (cfReadable > cfFree) /* More data readable than we can store at the moment? Limit. */ 1698 cfReadable = cfFree; 1699 1700 while (cfReadable) 1701 { 1701 1702 PPDMAUDIOFRAME paFrames; 1702 1703 uint32_t cfWritable; 1703 rc = AudioMixBufPeekMutable(&pStream->Host.MixBuf, AUDIOMIXBUF_B2F(&pStream->Host.MixBuf, cbReadable), 1704 &paFrames, &cfWritable); 1704 rc = AudioMixBufPeekMutable(&pStream->Host.MixBuf, cfReadable, &paFrames, &cfWritable); 1705 1705 if ( RT_FAILURE(rc) 1706 1706 || !cfWritable) … … 1716 1716 int rc2 = drvAudioStreamControlInternalBackend(pThis, pStream, PDMAUDIOSTREAMCMD_DISABLE); 1717 1717 AssertRC(rc2); 1718 } 1719 else if (cfCaptured) 1720 { 1721 Assert(cfCaptured <= cfWritable); 1722 if (cfCaptured > cfWritable) /* Paranoia. */ 1723 cfCaptured = cfWritable; 1724 1725 cfCapturedTotal += cfCaptured; 1726 } 1727 else /* Nothing captured -- bail out. */ 1718 1728 1719 break; 1729 1730 if (RT_FAILURE(rc)) 1731 break; 1720 } 1721 1722 Assert(cfCaptured <= cfWritable); 1723 if (cfCaptured > cfWritable) /* Paranoia. */ 1724 cfCaptured = cfWritable; 1725 1726 Assert(cfReadable >= cfCaptured); 1727 cfReadable -= cfCaptured; 1728 cfCapturedTotal += cfCaptured; 1732 1729 } 1733 1730
Note:
See TracChangeset
for help on using the changeset viewer.

