android: camera_buffer: Add stride/offset/size function

This adds getter functions of stride, offset and size to CameraBuffer
interface.

Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Hirokazu Honda 2021-08-26 17:00:21 +09:00 committed by Laurent Pinchart
parent c5e2ed7806
commit 6453e75c7a
3 changed files with 65 additions and 0 deletions

View file

@ -31,6 +31,10 @@ public:
libcamera::Span<const uint8_t> plane(unsigned int plane) const; libcamera::Span<const uint8_t> plane(unsigned int plane) const;
libcamera::Span<uint8_t> plane(unsigned int plane); libcamera::Span<uint8_t> plane(unsigned int plane);
unsigned int stride(unsigned int plane) const;
unsigned int offset(unsigned int plane) const;
unsigned int size(unsigned int plane) const;
size_t jpegBufferSize(size_t maxJpegBufferSize) const; size_t jpegBufferSize(size_t maxJpegBufferSize) const;
}; };
@ -62,6 +66,18 @@ Span<uint8_t> CameraBuffer::plane(unsigned int plane) \
{ \ { \
return _d()->plane(plane); \ return _d()->plane(plane); \
} \ } \
unsigned int CameraBuffer::stride(unsigned int plane) const \
{ \
return _d()->stride(plane); \
} \
unsigned int CameraBuffer::offset(unsigned int plane) const \
{ \
return _d()->offset(plane); \
} \
unsigned int CameraBuffer::size(unsigned int plane) const \
{ \
return _d()->size(plane); \
} \
size_t CameraBuffer::jpegBufferSize(size_t maxJpegBufferSize) const \ size_t CameraBuffer::jpegBufferSize(size_t maxJpegBufferSize) const \
{ \ { \
return _d()->jpegBufferSize(maxJpegBufferSize); \ return _d()->jpegBufferSize(maxJpegBufferSize); \

View file

@ -31,6 +31,10 @@ public:
Span<uint8_t> plane(unsigned int plane); Span<uint8_t> plane(unsigned int plane);
unsigned int stride(unsigned int plane) const;
unsigned int offset(unsigned int plane) const;
unsigned int size(unsigned int plane) const;
size_t jpegBufferSize(size_t maxJpegBufferSize) const; size_t jpegBufferSize(size_t maxJpegBufferSize) const;
private: private:
@ -111,6 +115,21 @@ Span<uint8_t> CameraBuffer::Private::plane(unsigned int plane)
bufferManager_->GetPlaneSize(handle_, plane) }; bufferManager_->GetPlaneSize(handle_, plane) };
} }
unsigned int CameraBuffer::Private::stride(unsigned int plane) const
{
return cros::CameraBufferManager::GetPlaneStride(handle_, plane);
}
unsigned int CameraBuffer::Private::offset(unsigned int plane) const
{
return cros::CameraBufferManager::GetPlaneOffset(handle_, plane);
}
unsigned int CameraBuffer::Private::size(unsigned int plane) const
{
return cros::CameraBufferManager::GetPlaneSize(handle_, plane);
}
size_t CameraBuffer::Private::jpegBufferSize([[maybe_unused]] size_t maxJpegBufferSize) const size_t CameraBuffer::Private::jpegBufferSize([[maybe_unused]] size_t maxJpegBufferSize) const
{ {
return bufferManager_->GetPlaneSize(handle_, 0); return bufferManager_->GetPlaneSize(handle_, 0);

View file

@ -34,10 +34,15 @@ public:
Span<uint8_t> plane(unsigned int plane); Span<uint8_t> plane(unsigned int plane);
unsigned int stride(unsigned int plane) const;
unsigned int offset(unsigned int plane) const;
unsigned int size(unsigned int plane) const;
size_t jpegBufferSize(size_t maxJpegBufferSize) const; size_t jpegBufferSize(size_t maxJpegBufferSize) const;
private: private:
struct PlaneInfo { struct PlaneInfo {
unsigned int stride;
unsigned int offset; unsigned int offset;
unsigned int size; unsigned int size;
}; };
@ -114,6 +119,7 @@ CameraBuffer::Private::Private([[maybe_unused]] CameraBuffer *cameraBuffer,
const unsigned int planeSize = const unsigned int planeSize =
stride * ((size.height + vertSubSample - 1) / vertSubSample); stride * ((size.height + vertSubSample - 1) / vertSubSample);
planeInfo_[i].stride = stride;
planeInfo_[i].offset = offset; planeInfo_[i].offset = offset;
planeInfo_[i].size = planeSize; planeInfo_[i].size = planeSize;
@ -148,6 +154,30 @@ Span<uint8_t> CameraBuffer::Private::plane(unsigned int plane)
return planes_[plane]; return planes_[plane];
} }
unsigned int CameraBuffer::Private::stride(unsigned int plane) const
{
if (plane >= planeInfo_.size())
return 0;
return planeInfo_[plane].stride;
}
unsigned int CameraBuffer::Private::offset(unsigned int plane) const
{
if (plane >= planeInfo_.size())
return 0;
return planeInfo_[plane].offset;
}
unsigned int CameraBuffer::Private::size(unsigned int plane) const
{
if (plane >= planeInfo_.size())
return 0;
return planeInfo_[plane].size;
}
size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const
{ {
ASSERT(bufferLength_ >= 0); ASSERT(bufferLength_ >= 0);