class BufferLayer : public Layer {
BufferInfo mBufferInfo;
virtual void gatherBufferInfo() = 0;
}
class BufferQueueLayer : public BufferLayer {
void gatherBufferInfo() override;
}
gatherBufferInfo()
在 BufferLayer 中定义的,在 BufferQueueLayer 中重写。它实现主要是更新 BufferLayer::BufferInfo。
void BufferLayer::gatherBufferInfo() {
mBufferInfo.mPixelFormat =
!mBufferInfo.mBuffer ? PIXEL_FORMAT_NONE : mBufferInfo.mBuffer->format;
mBufferInfo.mFrameLatencyNeeded = true;
}
mBuffer
是空,则给 mPixelFormat
设置 PIXEL_FORMAT_NONE
,否则设置 mBuffer->format
。mBuffer
是在 BufferLayer::latchBuffer() 中调用 gatherBufferInfo()
之前调用 BufferQueueLayer::updateActiveBuffer() 更新的。mFrameLatencyNeeded
是 true
,表示 mBufferInfo 为合成已被锁定。void BufferQueueLayer::gatherBufferInfo() {
BufferLayer::gatherBufferInfo();
mBufferInfo.mDesiredPresentTime = mConsumer->getTimestamp();
mBufferInfo.mFenceTime = mConsumer->getCurrentFenceTime();
mBufferInfo.mFence = mConsumer->getCurrentFence();
mBufferInfo.mTransform = mConsumer->getCurrentTransform();
mBufferInfo.mDataspace = translateDataspace(mConsumer->getCurrentDataSpace());
mBufferInfo.mCrop = mConsumer->getCurrentCrop();
mBufferInfo.mScaleMode = mConsumer->getCurrentScalingMode();
mBufferInfo.mSurfaceDamage = mConsumer->getSurfaceDamage();
mBufferInfo.mHdrMetadata = mConsumer->getCurrentHdrMetadata();
mBufferInfo.mApi = mConsumer->getCurrentApi();
mBufferInfo.mTransformToDisplayInverse = mConsumer->getTransformToDisplayInverse();
}