From patchwork Sat Aug 1 10:14:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9130 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 190B6BD86F for ; Sat, 1 Aug 2020 10:15:12 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B7C8E61F80; Sat, 1 Aug 2020 12:15:11 +0200 (CEST) Received: from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net [195.74.38.227]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0B2B761970 for ; Sat, 1 Aug 2020 12:15:10 +0200 (CEST) X-Halon-ID: b0ed7b8f-d3df-11ea-86ee-0050569116f7 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de [79.202.46.202]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA id b0ed7b8f-d3df-11ea-86ee-0050569116f7; Sat, 01 Aug 2020 12:13:49 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Sat, 1 Aug 2020 12:14:25 +0200 Message-Id: <20200801101427.1540331-2-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> References: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 1/3] android: camera_device: Prepare for none-mandatory formats X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" When probing what formats a libcamera Camera supports we want to allow to probe for not mandatory formats. Add a new flag to indicate if a format in camera3FormatsMap is mandatory or not. All current defined formats are mandatory. Signed-off-by: Niklas Söderlund Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index b49d6681e5a52d32..8028d3e12bda1316 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -46,6 +46,7 @@ const std::vector camera3Resolutions = { */ struct Camera3Format { std::vector libcameraFormats; + bool mandatory; const char *name; }; @@ -57,11 +58,13 @@ const std::map camera3FormatsMap = { { HAL_PIXEL_FORMAT_BLOB, { { formats::MJPEG }, + true, "BLOB" } }, { HAL_PIXEL_FORMAT_YCbCr_420_888, { { formats::NV12, formats::NV21 }, + true, "YCbCr_420_888" } }, { @@ -71,6 +74,7 @@ const std::map camera3FormatsMap = { */ HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, { { formats::NV12, formats::NV21 }, + true, "IMPLEMENTATION_DEFINED" } }, @@ -281,7 +285,7 @@ int CameraDevice::initializeStreamConfigurations() break; } } - if (!mappedFormat.isValid()) { + if (camera3Format.mandatory && !mappedFormat.isValid()) { LOG(HAL, Error) << "Failed to map Android format " << camera3Format.name << " (" << utils::hex(androidFormat) << ")"; From patchwork Sat Aug 1 10:14:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9131 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 1D412BD86F for ; Sat, 1 Aug 2020 10:15:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id EB7F561F24; Sat, 1 Aug 2020 12:15:12 +0200 (CEST) Received: from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net [195.74.38.228]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E28AC61F2E for ; Sat, 1 Aug 2020 12:15:10 +0200 (CEST) X-Halon-ID: b1755dad-d3df-11ea-86ee-0050569116f7 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de [79.202.46.202]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA id b1755dad-d3df-11ea-86ee-0050569116f7; Sat, 01 Aug 2020 12:13:50 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Sat, 1 Aug 2020 12:14:26 +0200 Message-Id: <20200801101427.1540331-3-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> References: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 2/3] android: camera_device: Map HAL RAW to libcamera RAW formats X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a mapping from HAL RAW formats to the direct equivalent of libcamera formats. With this change it is possible to capture RAW images as long as the hardware can deliver frames in a format that is native to the HAL. More work is needed to deal with unpacked 8, 10 and 12 RAW formats as they don't directly map to a native HAL format. Nor do they belong in the RAW_OPAQUE category as the content format is generic and not uncommonly supported by hardware. Signed-off-by: Niklas Söderlund Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 8028d3e12bda1316..b7b6cb19426d8760 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -77,6 +77,50 @@ const std::map camera3FormatsMap = { true, "IMPLEMENTATION_DEFINED" } + }, { + HAL_PIXEL_FORMAT_RAW10, { + { + formats::SBGGR10_CSI2P, + formats::SGBRG10_CSI2P, + formats::SGRBG10_CSI2P, + formats::SRGGB10_CSI2P + }, + false, + "RAW10" + } + }, { + HAL_PIXEL_FORMAT_RAW12, { + { + formats::SBGGR12_CSI2P, + formats::SGBRG12_CSI2P, + formats::SGRBG12_CSI2P, + formats::SRGGB12_CSI2P + }, + false, + "RAW12" + } + }, { + HAL_PIXEL_FORMAT_RAW16, { + { + formats::SBGGR16, + formats::SGBRG16, + formats::SGRBG16, + formats::SRGGB16 + }, + false, + "RAW16" + } + }, { + HAL_PIXEL_FORMAT_RAW_OPAQUE, { + { + formats::SBGGR10_IPU3, + formats::SGBRG10_IPU3, + formats::SGRBG10_IPU3, + formats::SRGGB10_IPU3 + }, + false, + "RAW_OPAQUE" + } }, }; From patchwork Sat Aug 1 10:14:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9132 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 69F85BD879 for ; Sat, 1 Aug 2020 10:15:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 2897961F83; Sat, 1 Aug 2020 12:15:13 +0200 (CEST) Received: from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net [195.74.38.228]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 67DB161F24 for ; Sat, 1 Aug 2020 12:15:11 +0200 (CEST) X-Halon-ID: b20bea5e-d3df-11ea-86ee-0050569116f7 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de [79.202.46.202]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA id b20bea5e-d3df-11ea-86ee-0050569116f7; Sat, 01 Aug 2020 12:13:50 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Sat, 1 Aug 2020 12:14:27 +0200 Message-Id: <20200801101427.1540331-4-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> References: <20200801101427.1540331-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 3/3] android: camera_device: Report RAW capability if supported X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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 Reviewed-by: Jacopo Mondi --- * Changes since v2 - Check that generateConfiguration() return a configuration that is not empty. --- src/android/camera_device.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 #include +#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 availableCapabilities = { ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE, }; + + /* Report if camera supports RAW. */ + std::unique_ptr 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());