{"id":9536,"url":"https://patchwork.libcamera.org/api/patches/9536/?format=json","web_url":"https://patchwork.libcamera.org/patch/9536/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20200908134142.27470-6-jacopo@jmondi.org>","date":"2020-09-08T13:41:36","name":"[libcamera-devel,v3,05/11] android: camera_device: Generate RAW resolutions","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"d21c14545f67d9922e9158407720981658252c55","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/?format=json","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/9536/mbox/","series":[{"id":1274,"url":"https://patchwork.libcamera.org/api/series/1274/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1274","date":"2020-09-08T13:41:31","name":"android: camera_device: Fix JPEG/RAW sizes","version":3,"mbox":"https://patchwork.libcamera.org/series/1274/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/9536/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/9536/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 6F6B0BDB1D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  8 Sep 2020 13:38:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4505A62C5E;\n\tTue,  8 Sep 2020 15:38:13 +0200 (CEST)","from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D98E06056C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  8 Sep 2020 15:38:11 +0200 (CEST)","from uno.lan (2-224-242-101.ip172.fastwebnet.it [2.224.242.101])\n\t(Authenticated sender: jacopo@jmondi.org)\n\tby relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 651841C0002;\n\tTue,  8 Sep 2020 13:38:10 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"libcamera-devel@lists.libcamera.org","Date":"Tue,  8 Sep 2020 15:41:36 +0200","Message-Id":"<20200908134142.27470-6-jacopo@jmondi.org>","X-Mailer":"git-send-email 2.28.0","In-Reply-To":"<20200908134142.27470-1-jacopo@jmondi.org>","References":"<20200908134142.27470-1-jacopo@jmondi.org>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v3 05/11] android: camera_device: Generate\n\tRAW resolutions","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>","Cc":"hanlinchen@chromium.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The resolutions supported for the RAW formats cannot be tested from\na list of known sizes like the processed ones. This is mainly due to the\nfact RAW streams are produced by capturing frames at the CSI-2 receiver\noutput and their size corresponds to the sensor's native sizes.\n\nIn order to obtain the RAW frame size generate a temporary\nCameraConfiguration for the Role::StillCaptureRAW role and inspect the\nmap of StreamFormats returned by the pipeline handler.\n\nAcked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n src/android/camera_device.cpp | 23 ++++++++++++++++++++---\n src/android/camera_device.h   |  2 ++\n 2 files changed, 22 insertions(+), 3 deletions(-)","diff":"diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 9d460906ab08..5f4b95987615 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -313,6 +313,17 @@ std::vector<Size> CameraDevice::filterYUVResolutions(CameraConfiguration *camera\n \treturn supportedResolutions;\n }\n \n+std::vector<Size> CameraDevice::filterRawResolutions(const libcamera::PixelFormat &pixelFormat)\n+{\n+\tstd::unique_ptr<CameraConfiguration> cameraConfig =\n+\t\tcamera_->generateConfiguration({ StillCaptureRaw });\n+\tStreamConfiguration &cfg = cameraConfig->at(0);\n+\tconst StreamFormats &formats = cfg.formats();\n+\tstd::vector<Size> supportedResolutions = formats.sizes(pixelFormat);\n+\n+\treturn supportedResolutions;\n+}\n+\n /*\n  * Initialize the format conversion map to translate from Android format\n  * identifier to libcamera pixel formats and fill in the list of supported\n@@ -457,9 +468,15 @@ int CameraDevice::initializeStreamConfigurations()\n \t\t\t\t<< camera3Format.name << \" to \"\n \t\t\t\t<< mappedFormat.toString();\n \n-\t\tstd::vector<Size> resolutions = filterYUVResolutions(cameraConfig.get(),\n-\t\t\t\t\t\t\t\t     mappedFormat,\n-\t\t\t\t\t\t\t\t     cameraResolutions);\n+\t\tstd::vector<Size> resolutions;\n+\t\tconst PixelFormatInfo &info = PixelFormatInfo::info(mappedFormat);\n+\t\tif (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW)\n+\t\t\tresolutions = filterRawResolutions(mappedFormat);\n+\t\telse\n+\t\t\tresolutions = filterYUVResolutions(cameraConfig.get(),\n+\t\t\t\t\t\t\t   mappedFormat,\n+\t\t\t\t\t\t\t   cameraResolutions);\n+\n \t\tfor (const Size &res : resolutions) {\n \t\t\tstreamConfigurations_.push_back({ res, androidFormat });\n \ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 359a163ebab9..dc0ee664d443 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -97,6 +97,8 @@ private:\n \tfilterYUVResolutions(libcamera::CameraConfiguration *cameraConfig,\n \t\t\t     const libcamera::PixelFormat &pixelFormat,\n \t\t\t     const std::vector<libcamera::Size> &resolutions);\n+\tstd::vector<libcamera::Size>\n+\tfilterRawResolutions(const libcamera::PixelFormat &pixelFormat);\n \n \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n \tlibcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer);\n","prefixes":["libcamera-devel","v3","05/11"]}