这里需要特别留意的是,从各个对象所扮演的角色来看,BufferQueue是中介机构,属于服务提供方;Producer属于buffer内容的产出方,它对缓冲区的操作是一个“主动”的过程;反之,Consumer对buffer的处理则是“被动”的、“等待式”的——它必须要等到一块buffer填充完成后才能做工作。在这样的模型下,我们怎么保证
frameworks / native / libs / gui / BufferQueueConsumer.cpp 这一步也就让 BBIC 建立了对Buffer状态的监听。接下来看BBQ如何有选择性的监听Buffer的状态。BBIC 拥有监听Buffer所有状态的能力,BBQ对Buffer特定状态的监听离不开 BBIC,因此,BBQ 继承了两个抽象类 ConsumerBase 与 BufferItemConsum...
因为BufferQueue是ISurfaceTexture的本地实现,所以它必须重载接口中的各虚函数,比如queueBuffer、requestBuffer、dequeueBuffer等等。另外,这个类的内部有一个非常重要的成员数组,即mSlots[NUM_BUFFER_SLOTS],大家是否还记得前面SurfaceTextureClient类中也有一个一模一样的数组: class SurfaceTextureClient…{ BufferSlot m...
134int width,int height,int32_t format)135:mSurfaceControl(surface),136mSize(width,height),137mRequestedSize(mSize),138mFormat(format),139mNextTransaction(nullptr){// 创建图形缓冲区生产消费模型140createBufferQueue(&mProducer,&mConsumer);141// 由于适配器在客户端进程中,显式设置 dequeue 超时,以便...
140 createBufferQueue(&mProducer, &mConsumer); 141 // 由于适配器在客户端进程中,显式设置 dequeue 超时,以便 dequeueBuffer 流程阻塞 143 mProducer->setDequeueTimeout(std::numeric_limits<int64_t>::max()); 145 // 默认设置最大dequeue buffer 数量 ...
1.1.1 BufferQueue的内部原理 先来解析下BufferQueue的内部构造,如下图所示: 图11?12 BufferQueue内部变量 因为BufferQueue是ISurfaceTexture的本地实现,所以它必须重载接口中的各虚函数,比如queueBuffer、requestBuffer、dequeueBuffer等等。另外,这个类的内部有一个非常重要的成员数组,即mSlots[NUM_BUFFER_SLOTS],大家是否...