立即注册
查看: 1806|回复: 1

[MTK软件原创] mt6735 [Audio framework] L及之后版本首次开机截屏无声音

发表于 2017-11-27 12:00:02 | 显示全部楼层 |阅读模式 来自 广东省深圳市
[DESCRIPTION]
L 及之后版本首次开机截屏无声音, 但之后的截屏可以正常发声
问题原因是: 首次截屏时, 由于 Framework 部分声音解码模块初始化比较耗时
造成解码没有做完就启动了播放线程, 此时便听不到声音
需要晚些启动播放线程, 等待解码完成, 请参考如下解法:
[SOLUTION]
Please modify:
1:status_t Sample::doLoad() 方法内 error 段改为:
error:
mState = ERROR;//add this line
mHeap.clear();
return status;


2: soundpool.h 中,加入 ERROR 态定义
enum sample_state { UNLOADED, LOADING, READY, UNLOADING, ERROR };


3:play 方法加入如下修改
int SoundPool::play(int sampleID, float leftVolume, float rightVolume,
int priority, int loop, float rate)
in /frameworks/av/media/libmedia/SoundPool.cpp
add lines wrapped in dismissed lines:
int SoundPool::play(int sampleID, float leftVolume, float rightVolume,
int priority, int loop, float rate)
{
ALOGV("play sampleID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f",
sampleID, leftVolume, rightVolume, priority, loop, rate);
sp<Sample> sample;
SoundChannel* channel;
int channelID;
Mutex::Autolock lock(&mLock);
if (mQuit) {
return 0;
}
// is sample ready?
sample = findSample(sampleID);//reference line
//add begin
if(sample != 0){
int LoopCounter = 5;
while(LoopCounter-- > 0 && (sample->state() != Sample::READY) && (sample->state() !=
Sample::ERROR )){
ALOGD("wait for sample ready, sleep 100ms");
usleep(100 * 1000);
}
}//add end
...

已绑定手机
已实名认证
在一切变得简单之前,唯一答案:努力去做!
发表于 2017-11-27 18:06:53 | 显示全部楼层 来自 福建省福州市
路过!!!!:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
微信客服扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表