AudioFlinger分析(8)

2020-02-20 14:13

} }

//一样啊,把环形缓冲铺直了

if (s >= serverBase + this->frameCount) { serverBase += this->frameCount; }

this->server = s; //server为512了 cv.signal(); //读者读完了。触发下写者吧。 lock.unlock(); return true; }

6 真的是环形缓冲吗?

环形缓冲是这样一个场景,现在buffer共1024帧。 假设:

? 写者先写到1024帧 ? 读者读到512帧

? 那么,写者还可以从头写512帧。

所以,我们得回头看看frameavail是不是把这512帧算进来了。 uint32_t audio_track_cblk_t::framesAvailable_l() {

uint32_t u = this->user; //1024 uint32_t s = this->server;//512

if (out) {

uint32_t limit = (s < loopStart) ? s : loopStart; return limit + frameCount - u;返回512,用上了! } }

再看看stepUser这句话

if (u >= userBase + this->frameCount) {u为1024,userBase为0,frameCount为1024 userBase += this->frameCount;//好,userBase也为1024了 } 看看buffer

return (int8_t *)this->buffers + (offset - userBase) * this->frameSize;

//offset是外界传入的基于user的一个偏移量。offset-userBase,得到的正式从头开始的那段数据空间。太牛了!


AudioFlinger分析(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:华理工 宏观经济学 - 201606 - 模拟卷2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: