[libcamera-devel] [PATCH 1/2] android: camera_capabilities: Add function to convert PixelFormat to android format

Hirokazu Honda hiroh at chromium.org
Tue Nov 30 13:44:27 CET 2021


This adds a function to CameraCapabilities of converting PixelFormat
to android format.

Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
---
 src/android/camera_capabilities.cpp | 18 ++++++++++++++++++
 src/android/camera_capabilities.h   |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index f357902e..4c1dc87c 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -545,6 +545,7 @@ int CameraCapabilities::initializeStreamConfigurations()
 		 */
 		if (androidFormat == HAL_PIXEL_FORMAT_BLOB) {
 			formatsMap_[androidFormat] = formats::MJPEG;
+			revFormatsMap_[formats::MJPEG] = androidFormat;
 			LOG(HAL, Debug) << "Mapped Android format "
 					<< camera3Format.name << " to "
 					<< formats::MJPEG.toString()
@@ -596,6 +597,7 @@ int CameraCapabilities::initializeStreamConfigurations()
 		 * stream configurations map, by testing the image resolutions.
 		 */
 		formatsMap_[androidFormat] = mappedFormat;
+		revFormatsMap_[mappedFormat] = androidFormat;
 		LOG(HAL, Debug) << "Mapped Android format "
 				<< camera3Format.name << " to "
 				<< mappedFormat.toString();
@@ -1422,6 +1424,22 @@ PixelFormat CameraCapabilities::toPixelFormat(int format) const
 	return it->second;
 }
 
+/*
+ * Translate libcamera pixel format to Android format code. -1 if no mapped
+ * android format is found.
+ */
+int CameraCapabilities::toAndroidFormat(PixelFormat format) const
+{
+	auto it = revFormatsMap_.find(format);
+	if (it == revFormatsMap_.end()) {
+		LOG(HAL, Error) << "Requested format " << format.toString()
+				<< " not supported";
+		return -1;
+	}
+
+	return it->second;
+}
+
 std::unique_ptr<CameraMetadata> CameraCapabilities::requestTemplateManual() const
 {
 	if (!capabilities_.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
diff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h
index 2cf97ae8..df6361f1 100644
--- a/src/android/camera_capabilities.h
+++ b/src/android/camera_capabilities.h
@@ -30,6 +30,7 @@ public:
 
 	CameraMetadata *staticMetadata() const { return staticMetadata_.get(); }
 	libcamera::PixelFormat toPixelFormat(int format) const;
+	int toAndroidFormat(libcamera::PixelFormat format) const;
 	unsigned int maxJpegBufferSize() const { return maxJpegBufferSize_; }
 
 	std::unique_ptr<CameraMetadata> requestTemplateManual() const;
@@ -77,6 +78,7 @@ private:
 
 	std::vector<Camera3StreamConfiguration> streamConfigurations_;
 	std::map<int, libcamera::PixelFormat> formatsMap_;
+	std::map<libcamera::PixelFormat, int> revFormatsMap_;
 	std::unique_ptr<CameraMetadata> staticMetadata_;
 	unsigned int maxJpegBufferSize_;
 
-- 
2.34.0.rc2.393.gf8c9666880-goog



More information about the libcamera-devel mailing list