工作原理
数据部分:(共享内存)
struct BufferSlot {
//图像缓冲区
sp mGraphicBuffer;
//buffer的状态,表示当的状态,是否可以dequue,queue,acquire等
BufferState mBufferState;
}
class BufferItem : public Flattenable {
//图像缓冲区
sp mGraphicBuffer;
//在slot数组中的索引
int mBuf;
…
}
BufferQueue中的 mSlots[32],mQueue都是指向GraphicBuffer的,只是应用的地方不一样
mQueue:是加工好的数据,Consumer可以消耗了
mSlots:所有的缓冲 Producer在里面找合适的空闲buffer,其实我感觉也可以用一个freeQueue.
生产者(app端)
//要缓冲区,
BufferQueue ::dequeueBuffer()从mSlots中获取一段空闲的buffer
{
//统计一下正在dequeue中 正acquired中的
for (int i = 0; i < maxBufferCount; i++) {
const int state = mSlots[i].mBufferState;
switch (state) {
case BufferSlot::DEQUEUED:
dequeuedCount++;
break;
c