audiofling mix 过程
2016-12-22 11:30:23 5 举报
audioflinger 数据mix过程
作者其他创作
大纲/内容
没有active流或者声音被mute
消耗af track数据给mMixerBuffer提供空数据
prepareTracks_l
process__nop
process__nop,会把mainBuffer 的输出数据写成0,并从getNextBuffer把数据不做处理消耗掉,process__genericResampling,会把数据通过getNextBuffer取出然后做相应的操作,再存储到mainBuffer。这里的mainBuffer对应的就是mMixerBuffer,而输入数据是通过AudioFlinger::PlaybackThread::Track::getNextBuffer函数获取的,它的数据就是audiotrack从共享内存传输到af的。这个函数会提供af的输入数据dump文件af_track_pcm_0xb886f420_out_8.pcm.wav
主要负责mix数据的操作,AudioMixer::process会根据之前设置不同的函数来对数据进行处理
threadLoop_removeTracks
此函数会把mix后的数据写入底层,被写入的数据存储在mSinkBuffer,mMixerBuffer的数据在mix完成后会把数据copy到mSinkBuffer,然后在threadLoop_write函数中被写入,此函数提供af_mixer_write_pcm.pcm.pid4462.tid4468.wav audio dump数据,是所有输出数据。
主要负责参数设置等准备工作,注意AudioMixer::MAIN_BUFFER这个命令会把mMixerBuffer设置给audiomixer那边,然后mixer后的数据就会存储在这个缓冲区中
此函数是mix数据的主要逻辑,去除飞主干路径的代码,基本分四部分,prepare,mix,write,removeTracks。同时会根据audio dump数据来分析各个阶段数据流程
1 :af_track_pcm_0xb886f420_out_8.pcm.wav 这个文件是从audiotrack提供的数据2:mixer_end_4468_0xb877c480.pcm.wav这个文件是被mixer的数据组成的3:af_mixer_write_pcm.pcm.pid4462.tid4468.wav 这个文件是threadloop_write 输出的数据,相当于是完整输出文件4 :removeTracks操作会对应stopoutput操作,也就是说在移除track后,会对输出也停止,然后会影响输出设备策略等mMixerBuffer对应audiomixer模块中的mainBuffer,mainBuffer用于存储被输出给af的mixer过的数据mSinkBuffer的数据是从mMixerBuffer copy过来的,是用于threadLoop_write 输出的,有些情况用的不是这些buffer,有些条件判断,但是主干逻辑,思路就是这样
把af提供的数据进行mix操作然后把数据提供给mMixerBuffer,此函数输出dump文件mixer_end_4468_0xb877c480.pcm.wav,此文件是被mix处理过的所有数据集合
AudioFlinger::PlaybackThread::threadLoop
process__genericResampling
threadLoop_write
Y
移除不需要的track操作,track是否需要移除依赖于prepareTracks_l函数,此函数会对track isActive 或者当前track是否已经完成数据传输等条件,来判断是否需要把完成工作的track移除
threadLoop_mix
N
0 条评论
回复 删除
下一页