Changeset 87996 in vbox for trunk/src/VBox
- Timestamp:
- Mar 7, 2021 7:55:35 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 143119
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DrvAudioCommon.cpp
r87994 r87996 1342 1342 * @param pProps The PCM properties to use. 1343 1343 * @param cFrames Number of audio frames to convert. 1344 * @note No rounding here, result is floored. 1344 1345 */ 1345 1346 uint64_t DrvAudioHlpFramesToMilli(PCPDMAUDIOPCMPROPS pProps, uint32_t cFrames) … … 1347 1348 AssertPtrReturn(pProps, 0); 1348 1349 1349 if (!cFrames) 1350 return 0; 1351 1352 if (!pProps->uHz) /* Prevent division by zero. */ 1353 return 0; 1354 1355 /** @todo r=bird: How to do this w/o any floating point: 1356 * @code 1357 * ASMMultU32ByU32DivByU32(cFrames, RT_MS_1SEC, pProps->uHz); 1358 * // or 1359 * (uint64_t)cFrames * RT_MS_1SEC / pProps->uHz 1360 * @endcode 1361 */ 1362 return cFrames / ((double)pProps->uHz / (double)RT_MS_1SEC); 1350 /* Check input to prevent division by chainsaw: */ 1351 uint32_t const uHz = pProps->uHz; 1352 if (uHz) 1353 return ASMMultU32ByU32DivByU32(cFrames, RT_MS_1SEC, uHz); 1354 return 0; 1363 1355 } 1364 1356 … … 1369 1361 * @param pProps The PCM properties to use. 1370 1362 * @param cFrames Number of audio frames to convert. 1363 * @note No rounding here, result is floored. 1371 1364 */ 1372 1365 uint64_t DrvAudioHlpFramesToNano(PCPDMAUDIOPCMPROPS pProps, uint32_t cFrames) … … 1374 1367 AssertPtrReturn(pProps, 0); 1375 1368 1376 if (!cFrames) 1377 return 0; 1378 1379 if (!pProps->uHz) /* Prevent division by zero. */ 1380 return 0; 1381 1382 return cFrames / ((double)pProps->uHz / (double)RT_NS_1SEC); 1369 /* Check input to prevent division by chainsaw: */ 1370 uint32_t const uHz = pProps->uHz; 1371 if (uHz) 1372 return ASMMultU32ByU32DivByU32(cFrames, RT_NS_1SEC, uHz); 1373 return 0; 1383 1374 } 1384 1375 -
trunk/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp
r87994 r87996 64 64 65 65 66 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 44100)) == RT_NS_1SEC, 67 ("ns=%RU64\n", u64)); 66 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 44100)) == RT_NS_1SEC, ("ns=%RU64\n", u64)); 67 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 1)) == 22675, ("ns=%RU64\n", u64)); 68 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 31)) == 702947, ("ns=%RU64\n", u64)); 69 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 255)) == 5782312, ("ns=%RU64\n", u64)); 68 70 //RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToMicro(&s_Cfg441StereoS16, 44100)) == RT_US_1SEC, 69 71 // ("us=%RU64\n", u64)); 70 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToMilli(&s_Cfg441StereoS16, 44100)) == RT_MS_1SEC, 71 72 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToMilli(&s_Cfg441StereoS16, 44100)) == RT_MS_1SEC, ("ms=%RU64\n", u64)); 73 RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToMilli(&s_Cfg441StereoS16, 255)) == 5, ("ms=%RU64\n", u64)); 72 74 73 75 }
Note:
See TracChangeset
for help on using the changeset viewer.