//在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;
case BufferSlot::ACQUIRED:
acquiredCount++;
break;
case BufferSlot::FREE:
//选择最早(mFrameNumber最小)queue的buffer,这种buffer其他硬件已经用完的可能性最大了
if ((found < 0) || mSlots[i].mFrameNumber < mSlots[found].mFrameNumber) {
found = i;
}
break;
}