请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

代码逻辑问题

你好!
pcm播放器实现中:
主函数这里的判断条件是有问题的,
//the main thread wait for a moment
while(audio_pos < (audio_buf + buffer_len)) {
SDL_Delay(1);
}
回调函数会去更新buffer_len,因此这个实现不能播放完整的pcm文件,只能播放一部分。

正在回答 回答被采纳积分+3

1回答

李超 2018-12-29 16:48:46

非常棒,这里确实有问题,要加一把锁才ok, 或者通过无锁的特殊处理。为你点赞

0 回复 有任何疑惑可以回复我~
  • 不知道我理解的是否正确,这里看到说代码有问题,我又仔细梳理的代码逻辑,发现,回调函数同时改变audio_pos和buffer_len,这样的话,是不是会导致两个问题:1、while(audio_pos < (audio_buf + buffer_len))该循环提前结束,因为buffer_len再减少,audio_pos在增加,有可能audio_pos增加到audio_buf一半的时候,上述条件满足,就去读新数据;2、回调函数导致的buffer_len的减少,如果buffer_len整好减为零,导致主线程读取数据的循环提前结束。我认为就是这里的漏洞了。不知道理解的是否正确,希望老师确认一下
    回复 有任何疑惑可以回复我~ 2021-02-07 08:52:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信