audiosystem之audio_track_cblk_t

audio_track_cblk_t这个结构是FIFO实现的关键,该结构是在createTrack的时候,由AudioFlinger申请相应的内存,然后通过IMemory接口返回AudioTrack的,这样AudioTrack和AudioFlinger管理着同一个audio_track_cblk_t,通过它实现了环形FIFO,AudioTrack向FIFO中写入音频数据,AudioFlinger从FIFO中读取音频数据,经Mixer后送给AudioHardware进行播放。

audio_track_cblk_t的主要数据成员:

    user             -- AudioTrack当前的写位置的偏移
    userBase     -- AudioTrack写偏移的基准位置,结合user的值方可确定真实的FIFO地址指针
    server          -- AudioFlinger当前的读位置的偏移
    serverBase  -- AudioFlinger读偏移的基准位置,结合server的值方可确定真实的FIFO地址指针

    frameCount -- FIFO的大小,以音频数据的帧为单位,16bit的音频每帧的大小是2字节

    buffers         -- 指向FIFO的起始地址

    out               -- 音频流的方向,对于AudioTrack,out=1,对于AudioRecord,out=0

audio_track_cblk_t的主要成员函数:

framesAvailable_l()和framesAvailable()用于获取FIFO中可写的空闲空间的大小,只是加锁和不加锁的区别。

framesReady()用于获取FIFO中可读取的空间大小。



你可能感兴趣的:(audiosystem之audio_track_cblk_t)