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

Message ID 20200729111202.3812677-4-niklas.soderlund@ragnatech.se
State Superseded
Headers show
Series
  • android: camera_device: Add RAW support
Related show

Commit Message

Niklas Söderlund July 29, 2020, 11:12 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>
---
 src/android/camera_device.cpp | 10 ++++++++++
 1 file changed, 10 insertions(+)

Comments

Jacopo Mondi July 29, 2020, 4:24 p.m. UTC | #1
Hi Niklas,

On Wed, Jul 29, 2020 at 01:12:02PM +0200, Niklas Söderlund wrote:
> 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>
> ---
>  src/android/camera_device.cpp | 10 ++++++++++
>  1 file changed, 10 insertions(+)
>
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index c31950db78a588ed..7764c6aee9b8e587 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"
>
> @@ -735,6 +736,15 @@ 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 the camera does not support RAW, then generateConfiguration returns
a nullptr. You should check if cameraConfig is valid before accessing
it.

The idea is good and questions on v1 clarified.

Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

Thanks
   j

> +	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());
> --
> 2.27.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index c31950db78a588ed..7764c6aee9b8e587 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"
 
@@ -735,6 +736,15 @@  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 });
+	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());