[libcamera-devel] [PATCH v3 1/2] android: CameraBuffer: Add a static function to check a buffer validness

Hirokazu Honda hiroh at chromium.org
Thu Apr 8 05:10:39 CEST 2021


This adds a static function to CameraBuffer class that checks if
a buffer_handle is valid with a platform dependent framework.
For example, the function validates a buffer using
cros::CameraBufferManager on ChromeOS.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/android/camera_buffer.h              |  6 ++++++
 src/android/mm/cros_camera_buffer.cpp    | 18 ++++++++++++++++++
 src/android/mm/generic_camera_buffer.cpp |  9 +++++++++
 3 files changed, 33 insertions(+)

diff --git a/src/android/camera_buffer.h b/src/android/camera_buffer.h
index 7e8970b4..ade082c3 100644
--- a/src/android/camera_buffer.h
+++ b/src/android/camera_buffer.h
@@ -20,6 +20,8 @@ public:
 	CameraBuffer(buffer_handle_t camera3Buffer, int flags);
 	~CameraBuffer();
 
+	static bool isValidBuffer(buffer_hanlde_t camera3Buffer);
+
 	bool isValid() const;
 
 	unsigned int numPlanes() const;
@@ -38,6 +40,10 @@ CameraBuffer::CameraBuffer(buffer_handle_t camera3Buffer, int flags)	\
 CameraBuffer::~CameraBuffer()						\
 {									\
 }									\
+bool CameraBuffer::isValidBuffer(buffer_handle_t buffer)		\
+{									\
+	return Private::isValidBuffer(buffer)				\
+}									\
 bool CameraBuffer::isValid() const					\
 {									\
 	const Private *const d = LIBCAMERA_D_PTR();			\
diff --git a/src/android/mm/cros_camera_buffer.cpp b/src/android/mm/cros_camera_buffer.cpp
index 1a4fd5d1..f8449dfd 100644
--- a/src/android/mm/cros_camera_buffer.cpp
+++ b/src/android/mm/cros_camera_buffer.cpp
@@ -24,6 +24,8 @@ public:
 		buffer_handle_t camera3Buffer, int flags);
 	~Private();
 
+	static bool isValidBuffer(buffer_handle_t camera3Buffer);
+
 	bool isValid() const { return valid_; }
 
 	unsigned int numPlanes() const;
@@ -133,4 +135,20 @@ size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const
 	return bufferManager_->GetPlaneSize(handle_, 0);
 }
 
+/* static */
+bool CameraBuffer::Private::isValidBuffer(buffer_handle_t camera3Buffer)
+{
+	cros::CameraBufferManager *bufferManager =
+		cros::CameraBufferManager::GetInstance();
+
+	int ret = bufferManager->Register(camera3Buffer);
+	if (ret) {
+		return false;
+	}
+
+	bufferManager->Deregister(camera3Buffer);
+
+	return true;
+}
+
 PUBLIC_CAMERA_BUFFER_IMPLEMENTATION
diff --git a/src/android/mm/generic_camera_buffer.cpp b/src/android/mm/generic_camera_buffer.cpp
index 929e078a..07a07372 100644
--- a/src/android/mm/generic_camera_buffer.cpp
+++ b/src/android/mm/generic_camera_buffer.cpp
@@ -24,6 +24,8 @@ public:
 		buffer_handle_t camera3Buffer, int flags);
 	~Private();
 
+	static bool isValidBuffer(buffer_handle_t camera3Buffer);
+
 	unsigned int numPlanes() const;
 
 	Span<uint8_t> plane(unsigned int plane);
@@ -85,4 +87,11 @@ size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const
 				      maxJpegBufferSize);
 }
 
+/* static */
+bool CameraBuffer::Private::isValidBuffer(
+	[[maybe_unused]] buffer_handle_t camera3Buffer)
+{
+	return true;
+}
+
 PUBLIC_CAMERA_BUFFER_IMPLEMENTATION
-- 
2.31.0.208.g409f899ff0-goog



More information about the libcamera-devel mailing list