录制中rampVolume参数溢出的问题
来源:互联网 发布:nba2k17捏脸数据中国人 编辑:程序博客网 时间:2024/06/05 18:58
在录音的过程中发现在最前面的1s中总是会有“噗”的一声的噪音。一直在跟踪查找,发现是Android源码中有一处溢出造成的。stagefright中的AudioSource的void rampVolume(int32_t startFrame, int32_t rampDurationFrames, uint8_t *data, size_t bytes);函数(raise the volume from mute to the actual level linearly)。在AudioSource的read()函数将从AudioRecord读入的数据经过计算
int32_t autoRampDurationFrames =
(kAutoRampDurationUs * mSampleRate + 500000LL) / 1000000LL;
int32_t autoRampStartFrames =
(kAutoRampStartUs * mSampleRate + 500000LL) / 1000000LL;
int32_t nFrames = mNumFramesReceived - autoRampStartFrames;
rampVolume(nFrames, autoRampDurationFrames,
(uint8_t *) buffer->data(), buffer->range_length());
其中nFrames和autoRampDurationFrames的计算存在溢出,kAutoRampDurationUs和kAutoRampDurationUs都是int64_t类型的值,计算结果直接强制转换为int32_t类型。于是修改后的代码为
int64_t autoRamp = kAutoRampDurationUs;
autoRamp *= mSampleRate;
int32_t autoRampDurationFrames = (autoRamp +500000LL) / 1000000LL;
autoRamp = kAutoRampStartUs;
autoRamp *= mSampleRate;
int32_t autoRampStartFrames =
(autoRamp + 500000LL) / 1000000LL;
int32_t nFrames = mNumFramesReceived - autoRampStartFrames;
rampVolume(nFrames, autoRampDurationFrames,
(uint8_t *) buffer->data(), buffer->range_length());
这样就解决了rampVolume函数处理的nFrames帧的数据出现爆音的问题。
举一反三,播放器的文件大小限制的问题也是由于溢出的问题引起的,文件大小使用int32_t类型的地方限制了大小只能支持到2G,因此需要将这些地方修改int64_t使得文件大小能够支持到fat32的存储文件的最大值4G。
- 录制中rampVolume参数溢出的问题
- 录制中rampVolume参数溢出的问题
- LR录制中出现的问题
- Jmeter录制复杂页面脚本时Jvm崩溃或者栈溢出问题的解决
- QTP录制的问题
- QTP录制的问题
- eclipse中内存溢出的问题
- Myeclipse使用中内存溢出的问题
- Myeclipse使用中内存溢出的问题
- Myeclipse使用中内存溢出的问题
- PHP中json_decode的整型溢出问题
- 小心编程中整数溢出的问题
- PHP中json_decode的整型溢出问题
- PHP中内存溢出的问题
- QTP录制过程中关于浏览器设定的问题
- loadrunner录制邮件系统中遇到的一些问题
- 脚本录制和参数化时的问题及技巧——上传附件
- 开始录制&&遇到的问题
- 黑马程序员_java中的集合3
- Linux0.11内核--几种地址(逻辑地址、线性地址、物理地址)的含义
- 【小蒙淘金】4.16金评-激情燃烧的岁月,你赚了吗?
- STC单片机用户应用程序区和ISP监控程序区的区别
- 我的gmail
- 录制中rampVolume参数溢出的问题
- windows环境PHP调用DotNetZipLib处理zip64文件
- 关于如何在CSDN贴代码?
- codeforces 235 C Cyclical Quest (后缀自动机 SAM)
- mysql 创建、修改、删除:表、用户、授权
- 【C++】标准C++的类型转换符
- WEB架构师成长之路之一-走正确的路
- 在WINDOWS中设置计划任务执行PHP文件
- 如何修改Windows 7 Hosts文件