点击下方👇关注Android系统攻城狮
第196篇原创文章
每日充电:OS+MultiMedia学习之旅
pa_memblockq
└── pa_memchunk
└── pa_memblock
└── pa_mempool
└── pa_shm
第一眼看上去,可能会有点蒙圈,这些内存结构到底谁包含谁?谁真正持有内存?谁只是描述一段数据?谁负责管理底层共享内存?
不过,搞懂这层关系,它会帮助我们理解PulseAudio中音频数据如何从应用写入、进入队列、跨进程共享最核心的部分之一。
01


链路最上层的pa_memblockq不是直接保存PCM,而是通过pa_memchunk间接引用真正的数据块。。
pa_memblockq内部有两类典型chunk路径:
02


核心结构体的按层级的职责 vs 角色:

03


pa_memblockq的核心职责,是保存一组按时间顺序排列的pa_memchunk,所以这里是链表队列。
链表节点list_item中真正保存是pa_memchunk。04


pa_memchunk的功能,是描述pa_memblock中的一段数据。
比如,一个memblock里存字符串:"Hello_PulseAudio"为例:

可以有不同的chunk去描述它的不同片段,所以 pa_memchunk 本质上是一个“切片描述符”。


05


如果说pa_memchunk只是视图,那么pa_memblock才是实体。

06


pa_mempool管理底层pa_shm内存区域,并把它按block_size切成许多slot。


07


pa_shm描述的不是队列,也不是chunk,而是真正的底层共享内存区域。

08




若读者朋友发现有错误、疑问的地方,或者好的建议,欢迎拍砖!!!
精彩文章合集
专栏推荐