[libcamera-devel,v3,3/3] android: camera_device: Report RAW capability if supported

Message ID 20200801101427.1540331-4-niklas.soderlund@ragnatech.se
State Accepted
Commit 7876d631d930a761e42ed1b16b1aa35216f7d6a5
Headers show
Series
  • android: camera_device: Add RAW support
Related show

Commit Message

Niklas Söderlund Aug. 1, 2020, 10:14 a.m. UTC
Probe the libcamera Camera for RAW support and if supported report RAW
capability in the static metadata reported to Android.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
---
* Changes since v2
- Check that generateConfiguration() return a configuration that is not
  empty.
---
 src/android/camera_device.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Patch

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index b7b6cb19426d8760..b5206fd623c62b23 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -15,6 +15,7 @@ 
 #include <libcamera/formats.h>
 #include <libcamera/property_ids.h>
 
+#include "libcamera/internal/formats.h"
 #include "libcamera/internal/log.h"
 #include "libcamera/internal/utils.h"
 
@@ -755,6 +756,17 @@  const camera_metadata_t *CameraDevice::getStaticMetadata()
 	std::vector<uint8_t> availableCapabilities = {
 		ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE,
 	};
+
+	/* Report if camera supports RAW. */
+	std::unique_ptr<CameraConfiguration> cameraConfig =
+		camera_->generateConfiguration({ StillCaptureRaw });
+	if (cameraConfig && !cameraConfig->empty()) {
+		const PixelFormatInfo &info =
+			PixelFormatInfo::info(cameraConfig->at(0).pixelFormat);
+		if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)
+			availableCapabilities.push_back(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW);
+	}
+
 	staticMetadata_->addEntry(ANDROID_REQUEST_AVAILABLE_CAPABILITIES,
 				  availableCapabilities.data(),
 				  availableCapabilities.size());