最近在看Android中播放延迟的问题,看了下代码,发现AudioTrack类中的函数latency有以下注释:
够强大,前几天自己还叭叭根据buffer计算延迟呢,原来可以调个函数就搞定。
看看函数AudioTrack::latency()的实现吧:
没什么内涵,直接返回了成员变量。
mLatency是在哪儿被 赋值的呢?
AudioTrack::createTrack函数中对mLatency进行了赋值:
其中afLatency是硬件的延迟。
(1000*mCblk->frameCount) / sampleRate,这一坨,是根据AudioTrack中的audio_track_cblk_t的buffer,计算AudioTrack buffer导致的延迟。
afLatency的来历,也在函数AudioTrack::createTrack中:
AudioSystem::getOutputLatency函数中首先根据stream type获取对应的output,然后尝试获取output的描述.
若取得成功,则使用output描述中的延迟;否则,获取AudioFlinger,并使用AudioFlinger中的延迟。
具体代码如下:
先看看AudioFlinger中的latency:
AudioFlinger::latency函数中,首先获取output对应的PlaybackThread,然后取得PlaybackThread的latency:
看看函数AudioFlinger::PlaybackThread::latency():
我做的这个项目中,mOutput其实就是AudioStreamOutALSA。
AudioStreamOutALSA::latency()函数:
mHandler中父类ALSAStreamOps的构造函数中被赋值。
用的是AudioStreamOutALSA构造函数中的参数handle。
AudioStreamOutALSA对象在函数AudioHardwareALSA::openOutputStream中被创建:
it的赋值:
mDeviceList的赋值在AudioHardwareALSA的构造函数中:
init函数其实就是s_init函数:
原来就是在这儿指定的latency:
回头看看,若是在函数AudioSystem::getOutputLatency中找到了output的描述,情况又是怎样的呢?
output描述是在AudioPolicyManagerBase的构造函数中被创建。
其中,latency是通过调用函数mpClientInterface->openOutput取得:
其实就是调用了函数AudioFlinger::openOutput。
其中对latency的赋值:
与前面的那条河流汇合了。
分享到:
相关推荐
#欢迎使用 audioBenchmark 应用程序! ##在 Apache 2.0 许可下发布。 该软件按原样提供,目前不应作为独立应用程序运行,但与 ADT 结合使用可能... 仅使用 ADT 进行测试(未使用 Android Studio,因为当时不支持 NDK)
Windows低延迟应用程序音频路由 Low latency application audio routing for Windows
DPC Latency Checker : 官方网站,内有英文详细原理 http://www.thesycon.de/deu/latency_check.shtml 载点 http://www.thesycon.de/dpclat/dpclat.exe 用来测试电脑系统的DPC延迟时间。。值太大或者有高峰...
浏览器音频延迟实验测量浏览器中的记录延迟在浏览器中运行它: : 发展yarn install# For developmentyarn dev# For production buildyarn build
MELHORA PING FIX LATENCY
在集群中 Low Latency 应用,The operating systems community has ignored network latency for too long. In the past, speed-of-light delays in wide area networks and unoptimized network hardware have made...
Thesycon’s DPC Latency Checker is a Windows tool that analyses the capabilities of a computer system to handle real-time data streams properly. It may help to find the cause for interruptions in real...
2、再看自己有没有问题 3、如果是少量机器出现问题,这个就到了维护人员最熟悉的登录机器,查看相关日志的套路了 4、如果是单服务的问题,这个时候就需要结合请求参数
Adaptive scanning rate (slow start, then adaptive to network latency) Open Source, available at http://github.com/rorist/android-network-discovery Build git clone https://github.com/roris
延迟 一个简单的延迟计算器 安装 npm i ms-latency 进口 const latency = require ( 'ms-latency' ) 用 latency . start ( ) ; console . log ( 'Test Latency.' ) ; console . log ( `\nLatency: ${ latency . ...
Leatrix Latency Fix.zip
本文件名为latency-case-study-modefied,是OSATE在github中的示例 latency-case-study的修改版本。因为原项目的分布式系统模型会在流延迟分析时报错(空指针异常)导致没有延迟分析报告生成,而该文件针对该问题...
减延迟工具 对于网游效果很好 其实我是来赚分的
QWin在共享存储后端强制执行延迟SLO_QWin Enforcing Tail Latency SLO at Shared Storage Backend.pdf
5.6. Audio Latency 5.7. Network Protocols 5.8. Secure Media 5.9. Musical Instrument Digital Interface (MIDI) 5.10. Professional Audio 5.11. Capture for Unprocessed 6. Developer Tools and Options ...
就是OS使用System Call来处理每个需要real-time service的驱动程式所需花的时间总合,总而言之,如果DPC Latency太高,就会让电脑在那一瞬间因为某个驱动程式或是硬体问题等太久,而造成音乐或是电影拨放上的延迟。...
Ceph IO 流水线很长,本文将一个IO的各个阶段的延迟,对应源码细分出来,方便考察
资源受限边缘器件的卷积神经网络延迟记忆优化分裂_Latency-Memory Optimized Splitting of Convolution Neural Networks for Resource Constrained Edge Devices.pdf
Intel Memory Latency Checker(Intel MLC) 解压即可使用,兼容windows和linux
One of the difficult tasks analyzing Real-Time systems is finding a source/cause of an unexpected latency. Is the latency caused by the application or the kernel? Is it a wake up scheduling latency or ...