{"id":12966,"url":"https://patchwork.libcamera.org/api/1.1/patches/12966/?format=json","web_url":"https://patchwork.libcamera.org/patch/12966/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210715153241.63971-4-jacopo@jmondi.org>","date":"2021-07-15T15:32:41","name":"[libcamera-devel,3/3] android: capabilities: Centralize RAW support check","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"ea19f17b7b93d6fa3131a13fcf01af6541539260","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/1.1/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/12966/mbox/","series":[{"id":2239,"url":"https://patchwork.libcamera.org/api/1.1/series/2239/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2239","date":"2021-07-15T15:32:38","name":"android: Drive-by cleanups","version":1,"mbox":"https://patchwork.libcamera.org/series/2239/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12966/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12966/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id F1B22C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Jul 2021 15:32:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 409F468540;\n\tThu, 15 Jul 2021 17:32:12 +0200 (CEST)","from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net\n\t[217.70.183.193])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4E9F568538\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Jul 2021 17:32:09 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 7EFF2240004;\n\tThu, 15 Jul 2021 15:32:08 +0000 (UTC)"],"From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu, 15 Jul 2021 17:32:41 +0200","Message-Id":"<20210715153241.63971-4-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.32.0","In-Reply-To":"<20210715153241.63971-1-jacopo@jmondi.org>","References":"<20210715153241.63971-1-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 3/3] android: capabilities: Centralize RAW\n\tsupport check","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The validation of RAW stream support is performed in two different\nplaces:\n\n- At initializeStreamConfigurations() time, by verifying that the\n  libcamera format associated with HAL_PIXEL_FORMAT_BLOB is a Raw format\n  and ensuring the Camera successfully validates it\n- As initializeStaticMetadata() time by generating a CameraConfiguration\n  for the Raw stream role and ensuring it is a Raw format with a 16 bit\n  depth\n\nThe first check is used to build the list of supported Raw stream\nresolutions. The latter is used to register the\nANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW capability.\n\nAs building the list of supported Raw streams doesn't serve any\npurpose if the RAW capability is nor registered, centralize the Raw\nformat support verification at initializeStreamConfigurations() time by\nensuring the supported format is a Raw one with a 16 bit depth.\n\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_capabilities.cpp | 23 ++++++++---------------\n src/android/camera_capabilities.h   |  1 +\n 2 files changed, 9 insertions(+), 15 deletions(-)","diff":"diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\nindex 15e54192adff..9e2714f132c4 100644\n--- a/src/android/camera_capabilities.cpp\n+++ b/src/android/camera_capabilities.cpp\n@@ -122,6 +122,7 @@ int CameraCapabilities::initialize(std::shared_ptr<libcamera::Camera> camera,\n \tcamera_ = camera;\n \torientation_ = orientation;\n \tfacing_ = facing;\n+\trawStreamAvailable_ = false;\n \n \t/* Acquire the camera and initialize available stream configurations. */\n \tint ret = camera_->acquire();\n@@ -324,11 +325,14 @@ int CameraCapabilities::initializeStreamConfigurations()\n \n \t\tstd::vector<Size> resolutions;\n \t\tconst PixelFormatInfo &info = PixelFormatInfo::info(mappedFormat);\n-\t\tif (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)\n+\t\tif (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW &&\n+\t\t    info.bitsPerPixel == 16) {\n+\t\t\trawStreamAvailable_ = true;\n \t\t\tresolutions = initializeRawResolutions(mappedFormat);\n-\t\telse\n+\t\t} else {\n \t\t\tresolutions = initializeYUVResolutions(mappedFormat,\n \t\t\t\t\t\t\t       cameraResolutions);\n+\t\t}\n \n \t\tfor (const Size &res : resolutions) {\n \t\t\tstreamConfigurations_.push_back({ res, androidFormat });\n@@ -866,22 +870,11 @@ int CameraCapabilities::initializeStaticMetadata()\n \t};\n \n \t/* Report if camera supports RAW. */\n-\tbool rawStreamAvailable = false;\n-\tstd::unique_ptr<CameraConfiguration> cameraConfig =\n-\t\tcamera_->generateConfiguration({ StreamRole::Raw });\n-\tif (cameraConfig && !cameraConfig->empty()) {\n-\t\tconst PixelFormatInfo &info =\n-\t\t\tPixelFormatInfo::info(cameraConfig->at(0).pixelFormat);\n-\t\t/* Only advertise RAW support if RAW16 is possible. */\n-\t\tif (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW &&\n-\t\t    info.bitsPerPixel == 16) {\n-\t\t\trawStreamAvailable = true;\n+\tif (rawStreamAvailable_)\n \t\t\tavailableCapabilities.push_back(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_RAW);\n-\t\t}\n-\t}\n \n \t/* Number of { RAW, YUV, JPEG } supported output streams */\n-\tint32_t numOutStreams[] = { rawStreamAvailable, 2, 1 };\n+\tint32_t numOutStreams[] = { rawStreamAvailable_, 2, 1 };\n \tstaticMetadata_->addEntry(ANDROID_REQUEST_MAX_NUM_OUTPUT_STREAMS,\n \t\t\t\t  numOutStreams);\n \ndiff --git a/src/android/camera_capabilities.h b/src/android/camera_capabilities.h\nindex e7aa46c0a689..42a976d3b482 100644\n--- a/src/android/camera_capabilities.h\n+++ b/src/android/camera_capabilities.h\n@@ -55,6 +55,7 @@ private:\n \n \tint facing_;\n \tint orientation_;\n+\tbool rawStreamAvailable_;\n \n \tstd::vector<Camera3StreamConfiguration> streamConfigurations_;\n \tstd::map<int, libcamera::PixelFormat> formatsMap_;\n","prefixes":["libcamera-devel","3/3"]}