android: camera_buffer: Implement libcamera::Extensible
In order to prepare to support more memory backends, make the CameraBuffer class implement the PIMPL (pointer-to-implementation) pattern by inheriting from the libcamera::Extensible class. Temporary maintain libcamera::MappedBuffer as the CameraBuffer base class to maintain compatibility of the CameraStream::process() interface that requires a MappedBuffer * as second argument and will be converted to use a CameraBuffer in the next patch. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
a725baf4b3
commit
63383dec43
2 changed files with 77 additions and 2 deletions
|
@ -13,7 +13,24 @@ using namespace libcamera;
|
|||
|
||||
LOG_DECLARE_CATEGORY(HAL)
|
||||
|
||||
CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)
|
||||
class CameraBuffer::Private : public Extensible::Private,
|
||||
public libcamera::MappedBuffer
|
||||
{
|
||||
LIBCAMERA_DECLARE_PUBLIC(CameraBuffer)
|
||||
|
||||
public:
|
||||
Private(CameraBuffer *cameraBuffer,
|
||||
buffer_handle_t camera3Buffer, int flags);
|
||||
~Private();
|
||||
|
||||
unsigned int numPlanes() const;
|
||||
|
||||
Span<uint8_t> plane(unsigned int plane);
|
||||
};
|
||||
|
||||
CameraBuffer::Private::Private(CameraBuffer *cameraBuffer,
|
||||
buffer_handle_t camera3Buffer, int flags)
|
||||
: Extensible::Private(cameraBuffer)
|
||||
{
|
||||
maps_.reserve(camera3Buffer->numFds);
|
||||
error_ = 0;
|
||||
|
@ -42,6 +59,52 @@ CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)
|
|||
}
|
||||
}
|
||||
|
||||
CameraBuffer::Private::~Private()
|
||||
{
|
||||
}
|
||||
|
||||
unsigned int CameraBuffer::Private::numPlanes() const
|
||||
{
|
||||
return maps_.size();
|
||||
}
|
||||
|
||||
Span<uint8_t> CameraBuffer::Private::plane(unsigned int plane)
|
||||
{
|
||||
if (plane >= maps_.size())
|
||||
return {};
|
||||
|
||||
return maps_[plane];
|
||||
}
|
||||
|
||||
CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)
|
||||
: Extensible(new Private(this, camera3Buffer, flags))
|
||||
{
|
||||
}
|
||||
|
||||
CameraBuffer::~CameraBuffer()
|
||||
{
|
||||
}
|
||||
|
||||
bool CameraBuffer::isValid() const
|
||||
{
|
||||
const Private *const d = LIBCAMERA_D_PTR();
|
||||
return d->isValid();
|
||||
}
|
||||
|
||||
unsigned int CameraBuffer::numPlanes() const
|
||||
{
|
||||
const Private *const d = LIBCAMERA_D_PTR();
|
||||
return d->numPlanes();
|
||||
}
|
||||
|
||||
Span<const uint8_t> CameraBuffer::plane(unsigned int plane) const
|
||||
{
|
||||
const Private *const d = LIBCAMERA_D_PTR();
|
||||
return const_cast<Private *>(d)->plane(plane);
|
||||
}
|
||||
|
||||
Span<uint8_t> CameraBuffer::plane(unsigned int plane)
|
||||
{
|
||||
Private *const d = LIBCAMERA_D_PTR();
|
||||
return d->plane(plane);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue