class BufferItem : public Flattenable<BufferItem> {
friend class Flattenable<BufferItem>;
size_t getPodSize() const;
size_t getFlattenedSize() const;
size_t getFdCount() const;
status_t flatten(void*& buffer, size_t& size, int*& fds, size_t& count) const;
status_t unflatten(void const*& buffer, size_t& size, int const*& fds, size_t& count);
BufferItem 继承了 Flattenable,它可以跨进程传递。
public:
// The default value of mBuf, used to indicate this doesn't correspond to a slot.
enum { INVALID_BUFFER_SLOT = -1 };
BufferItem();
~BufferItem();
BufferItem(const BufferItem&) = default;
BufferItem& operator=(const BufferItem&) = default;
static const char* scalingModeName(uint32_t scalingMode);
// mGraphicBuffer points to the buffer allocated for this slot, or is NULL
// if the buffer in this slot has been acquired in the past (see
// BufferSlot.mAcquireCalled).
sp<GraphicBuffer> mGraphicBuffer;
// mFence is a fence that will signal when the buffer is idle.
sp<Fence> mFence;
// The std::shared_ptr<FenceTime> wrapper around mFence.
std::shared_ptr<FenceTime> mFenceTime{FenceTime::NO_FENCE};
// mCrop is the current crop rectangle for this buffer slot.
Rect mCrop;
// mTransform is the current transform flags for this buffer slot.
// refer to NATIVE_WINDOW_TRANSFORM_* in <window.h>
uint32_t mTransform;
// mScalingMode is the current scaling mode for this buffer slot.
// refer to NATIVE_WINDOW_SCALING_* in <window.h>
uint32_t mScalingMode;
如果该 slot 之前已经 acquire 过了,即 mAcquireCalled
是 true
,则 mGraphicBuffer
是空。因为消费者已经持有该指针,不需要再次传递。
mCrop
是 buffer 当前裁剪矩形。mTransform
是在 window.h
定义的枚举:
NATIVE_WINDOW_TRANSFORM_FLIP_H
NATIVE_WINDOW_TRANSFORM_FLIP_V
NATIVE_WINDOW_TRANSFORM_ROT_90
NATIVE_WINDOW_TRANSFORM_ROT_180
NATIVE_WINDOW_TRANSFORM_ROT_270
NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY
mScalingMode
也是在 window.h
定义的枚举:
NATIVE_WINDOW_SCALING_MODE_FREEZE
NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW
NATIVE_WINDOW_SCALING_MODE_SCALE_CROP
NATIVE_WINDOW_SCALING_MODE_NO_SCALE_CROP