mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-15 16:35:06 +03:00
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
|
@ -9,13 +9,25 @@
|
||||||
|
|
||||||
#include <hardware/camera3.h>
|
#include <hardware/camera3.h>
|
||||||
|
|
||||||
|
#include <libcamera/class.h>
|
||||||
#include <libcamera/internal/buffer.h>
|
#include <libcamera/internal/buffer.h>
|
||||||
|
#include <libcamera/span.h>
|
||||||
|
|
||||||
class CameraBuffer : public libcamera::MappedBuffer
|
class CameraBuffer final : public libcamera::Extensible,
|
||||||
|
public libcamera::MappedBuffer
|
||||||
{
|
{
|
||||||
|
LIBCAMERA_DECLARE_PRIVATE(CameraBuffer)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CameraBuffer(buffer_handle_t camera3Buffer, int flags);
|
CameraBuffer(buffer_handle_t camera3Buffer, int flags);
|
||||||
~CameraBuffer();
|
~CameraBuffer();
|
||||||
|
|
||||||
|
bool isValid() const;
|
||||||
|
|
||||||
|
unsigned int numPlanes() const;
|
||||||
|
|
||||||
|
libcamera::Span<const uint8_t> plane(unsigned int plane) const;
|
||||||
|
libcamera::Span<uint8_t> plane(unsigned int plane);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __ANDROID_CAMERA_BUFFER_H__ */
|
#endif /* __ANDROID_CAMERA_BUFFER_H__ */
|
||||||
|
|
|
@ -13,7 +13,24 @@ using namespace libcamera;
|
||||||
|
|
||||||
LOG_DECLARE_CATEGORY(HAL)
|
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);
|
maps_.reserve(camera3Buffer->numFds);
|
||||||
error_ = 0;
|
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()
|
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