From patchwork Thu Sep 23 07:24:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 13890 X-Patchwork-Delegate: umang.jain@ideasonboard.com 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 90A78BF01C for ; Thu, 23 Sep 2021 07:25:06 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6243969192; Thu, 23 Sep 2021 09:25:06 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="DIhGn0o7"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6CD156918C for ; Thu, 23 Sep 2021 09:25:04 +0200 (CEST) Received: from perceval.ideasonboard.com (unknown [103.251.226.124]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 2DBDD45E; Thu, 23 Sep 2021 09:25:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1632381904; bh=YmXhAlRVEmdbLI3KOxoGiNJ0Q2T9/wPVC0YEiCZ5yYM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DIhGn0o7BjswOZqQd5OKD1adabCZFX24FEOF8rRSTt9iaor33V4LB7lxV6d7fKo5s Ehzfp9GDe8Uy/vSjsdX6SkChpIhZ7Lp8PPalO/uE+lFBR3bsDAjKhnPlMbg/YrIoEa IgDZLNWOlGUhAH/AnAKOyQ8MWtaoo/W8go6qWtj8= From: Umang Jain To: libcamera-devel@lists.libcamera.org Date: Thu, 23 Sep 2021 12:54:53 +0530 Message-Id: <20210923072453.130346-3-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210923072453.130346-1-umang.jain@ideasonboard.com> References: <20210923072453.130346-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 2/2] android: Fix generation of thumbnail for EXIF data 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" Generation of thumbnail is not occuring currently because ANDROID_JPEG_THUMBNAIL_SIZE is not set for request metadata passed to PostProcessorJpeg::process(). The commit 1264628d3c92("android: jpeg: Configure thumbnailer based on request metadata") introduced the mechanism to retrieve the thumbanil size from request metadata, however it didn't add the counterpart i.e. inserting the size in the request metadata in request metadata template, at the first place. The patch fixes this issue by setting ANDROID_JPEG_THUMBNAIL_SIZE in the request metadata template populated by CameraCapabilities::requestTemplatePreview(). The value for ANDROID_JPEG_THUMBNAIL_SIZE is set to be the first non-zero size reported by static metadata ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES. Fixes: 1264628d3c92("android: jpeg: Configure thumbnailer based on request metadata") Signed-off-by: Umang Jain Reviewed-by: Laurent Pinchart Reviewed-by: Hirokazu Honda --- src/android/camera_capabilities.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp index 238b44db..ba6adf73 100644 --- a/src/android/camera_capabilities.cpp +++ b/src/android/camera_capabilities.cpp @@ -1347,7 +1347,7 @@ std::unique_ptr CameraCapabilities::requestTemplatePreview() con * CameraMetadata is capable to resize the container on the fly, if the * number of entries get exceeded. */ - auto requestTemplate = std::make_unique(21, 36); + auto requestTemplate = std::make_unique(22, 38); if (!requestTemplate->isValid()) { return nullptr; } @@ -1368,6 +1368,28 @@ std::unique_ptr CameraCapabilities::requestTemplatePreview() con requestTemplate->addEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, entry.data.i32, 2); + /* + * Get thumbnail sizes from static metadata and add the first non-zero + * size to the template. + */ + found = staticMetadata_->getEntry(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, + &entry); + ASSERT(found && entry.count >= 4); + unsigned int j = 0; + while (j < entry.count / 2) { + if (entry.data.i32[j] == 0 || entry.data.i32[j + 1] == 0) { + j += 2; + continue; + } + + requestTemplate->addEntry(ANDROID_JPEG_THUMBNAIL_SIZE, + entry.data.i32 + j, 2); + break; + } + + requestTemplate->addEntry(ANDROID_JPEG_THUMBNAIL_SIZE, + entry.data.i32 + 2, 2); + uint8_t aeMode = ANDROID_CONTROL_AE_MODE_ON; requestTemplate->addEntry(ANDROID_CONTROL_AE_MODE, aeMode);