libcamera: framebuffer: Allocate metadata planes at construction time
The metadata planes are allocated by V4L2VideoDevice when dequeuing a buffer. This causes the metadata planes to only be allocated after a buffer gets dequeued, and doesn't provide any strong guarantee that their number matches the number of FrameBuffer planes. The lack of this invariant makes the FrameBuffer class fragile. As a first step towards fixing this, allocate the metadata planes when the FrameBuffer is constructed. The FrameMetadata API should be further improved by preventing a change in the number of planes. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
This commit is contained in:
@@ -210,6 +210,8 @@ FrameBuffer::FrameBuffer(const std::vector<Plane> &planes, unsigned int cookie)
|
||||
: Extensible(std::make_unique<Private>()), planes_(planes),
|
||||
cookie_(cookie)
|
||||
{
|
||||
metadata_.planes.resize(planes_.size());
|
||||
|
||||
unsigned int offset = 0;
|
||||
bool isContiguous = true;
|
||||
ino_t inode = 0;
|
||||
|
||||
Reference in New Issue
Block a user