From patchwork Mon Oct 3 08:39:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Naushir Patuck X-Patchwork-Id: 17488 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 C88CDC0DA4 for ; Mon, 3 Oct 2022 08:40:01 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 74EB562CD8; Mon, 3 Oct 2022 10:40:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1664786400; bh=PjWiq/L7a4VC3oYdfXVuQxR0D5yH6HEqDmGss+Y5yGc=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=PkX1GET3T2EdrPjT5E+eghfW8I+eh9+DcSzpL74UiNYXCecnn+yC1TokfIr2AkFOn 9ostbzQQqvZeeGFm4UkxhwZOjxScr4VYU4UX8cMC130hppaWgMMQUeGX2B1Pwk/GnI rIS8Hm0ePAb7FOUHvooYaxkgmSqJgHiOR+ircDUKSOV39lMmpFJaHwhJwqaaC/W/lN 4MMUJU1+WkFX3MmZY+l50h70B2SWr4tIue3+WKXwW0ohLZz9Bky2L7WE9hqpCWQh2a oZ+8cTzmy6G7gDqVl+a8Q7z0OQ0oBOMQTjk7ew4cMxeXhsAQGueTlXWbxc5BkE168f pI+25qjFEhWGQ== Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 683BB61F74 for ; Mon, 3 Oct 2022 10:39:58 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="SWyVqmyw"; dkim-atps=neutral Received: by mail-wr1-x436.google.com with SMTP id f11so12949208wrm.6 for ; Mon, 03 Oct 2022 01:39:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=LK2i2ckLcU1EfLDok6fdgMsrZrSMhaaEYIQAq22FIN4=; b=SWyVqmywuek5j6IOEBRH9n1V/Dz/rSzbzHsmh9oCW5L//QSqk863DaOaTVI2Ucjnzl ps05oO1nzI66i7A5Gxu2akCB0BFWbOq7wi5CgMg5INdOZwXyLsL1ivsuW31kk3KVN5lL AI9Kx44LkYnbmlDvOUXLLnpwB5ILRU/WgUoyG3QWJCjFkBtLWBWt6Tsxk0MzDMiroyOz mZarF5VieBSc9Lzq3v4bkRxVV1WZer0QaVryMqpi5GsJ4fpGlfYuW09/hrkZPqNejTFR RXXiCknhhtlpENJ2IyQtKLJGUC46AwCMmg6Msa+g3lVTrDd3Iw/Ayk5JD5gJiRvFeYkv 3T4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=LK2i2ckLcU1EfLDok6fdgMsrZrSMhaaEYIQAq22FIN4=; b=DhmLRBnzmx/CmKLK0/TW8PkgOJBifJBqWgzjcH+kHAoVjRplDcG0yEto6ATchARNtE 8J7u3x4ue9TVa2R3+wn5P6Uh1T67MZIEahOAlDO1eTBkpjthaljNVYpu8dOq0gDcBl2p FFzqj7LZALJfzfGKKVCuy4MdFbpXxIgPqfB0rchlnxZ5x6BVJzjGrO15E654GfCnArTt /9DopHqzp/Nu8RVN3m0dTUZZezD8LJVtD51SVZEM6wnI9ziUt8hnmcgXhS/g+QBIgHmq QgMLXySzXXDkArnWaorJ2mAiv06VoJ5MhKNKJpB1BswmPGsOj/6EA2xoN1swGMrK1xOR 4xKg== X-Gm-Message-State: ACrzQf3CgrMxofV42k0Jo1SDi702aaZZJfyrrHfcbEOOZz2GN8Cgdx0a /gCDQ2VqkHkaaF/PTlQlsNZbqiDzKiwx5g== X-Google-Smtp-Source: AMsMyM52TV2HmkFNZa9LhFjRdxscKRlU8pZx5e21wQnNKbmdOjm+2jtch24nY+BO57Om0xbDKMBpcw== X-Received: by 2002:adf:aad1:0:b0:22e:3667:d307 with SMTP id i17-20020adfaad1000000b0022e3667d307mr3595581wrc.359.1664786397786; Mon, 03 Oct 2022 01:39:57 -0700 (PDT) Received: from naush-laptop.localdomain ([93.93.133.154]) by smtp.gmail.com with ESMTPSA id i13-20020a5d55cd000000b0022ae59d472esm8922787wrw.112.2022.10.03.01.39.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Oct 2022 01:39:57 -0700 (PDT) To: libcamera-devel@lists.libcamera.org Date: Mon, 3 Oct 2022 09:39:27 +0100 Message-Id: <20221003083934.31629-2-naush@raspberrypi.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221003083934.31629-1-naush@raspberrypi.com> References: <20221003083934.31629-1-naush@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v1 1/9] camera_sensor: Add minimum and maximum line length to IPACameraSensorInfo 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: , X-Patchwork-Original-From: Naushir Patuck via libcamera-devel From: Naushir Patuck Reply-To: Naushir Patuck Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add fields for minimum and maximum line length (in units of pixels) to the IPACameraSensorInfo structure. This replaces the existing lineLength field. Update the ipu3, raspberrypi and rkisp1 IPAs to use IPACameraSensorInfo::minLineLength instead of IPACameraSensorInfo::lineLength, as logically we will always want to use the fastest sensor readout by default. Signed-off-by: Naushir Patuck --- include/libcamera/ipa/core.mojom | 21 +++++++++++++++------ src/ipa/ipu3/ipu3.cpp | 2 +- src/ipa/raspberrypi/raspberrypi.cpp | 2 +- src/ipa/rkisp1/rkisp1.cpp | 2 +- src/libcamera/camera_sensor.cpp | 6 ++++-- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom index 74f3339e56f2..2bc3028c22d6 100644 --- a/include/libcamera/ipa/core.mojom +++ b/include/libcamera/ipa/core.mojom @@ -172,10 +172,17 @@ module libcamera; */ /** - * \var IPACameraSensorInfo::lineLength - * \brief Total line length in pixels + * \var IPACameraSensorInfo::minLineLength + * \brief The minimum line length in pixels * - * The total line length in pixel clock periods, including blanking. + * The minimum allowable line length in pixel clock periods, including blanking. + */ + +/** + * \var IPACameraSensorInfo::maxLineLength + * \brief The maximum line length in pixels + * + * The maximum allowable line length in pixel clock periods, including blanking. */ /** @@ -189,7 +196,7 @@ module libcamera; * To obtain the minimum frame duration: * * \verbatim - frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second) + frameDuration(s) = minFrameLength(lines) * minLineLength(pixels) / pixelRate(pixels per second) \endverbatim */ @@ -204,7 +211,7 @@ module libcamera; * To obtain the maximum frame duration: * * \verbatim - frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second) + frameDuration(s) = maxFrameLength(lines) * maxLineLength(pixels) / pixelRate(pixels per second) \endverbatim */ struct IPACameraSensorInfo { @@ -217,7 +224,9 @@ struct IPACameraSensorInfo { Size outputSize; uint64 pixelRate; - uint32 lineLength; + + uint32 minLineLength; + uint32 maxLineLength; uint32 minFrameLength; uint32 maxFrameLength; diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp index d1ea081d595d..da029571ba55 100644 --- a/src/ipa/ipu3/ipu3.cpp +++ b/src/ipa/ipu3/ipu3.cpp @@ -341,7 +341,7 @@ int IPAIPU3::init(const IPASettings &settings, /* Clean context */ context_.configuration = {}; - context_.configuration.sensor.lineDuration = sensorInfo.lineLength * 1.0s / sensorInfo.pixelRate; + context_.configuration.sensor.lineDuration = sensorInfo.minLineLength * 1.0s / sensorInfo.pixelRate; /* Load the tuning data file. */ File file(settings.configurationFile); diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 8d731435764e..358a119da222 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -356,7 +356,7 @@ void IPARPi::setMode(const IPACameraSensorInfo &sensorInfo) * Calculate the line length as the ratio between the line length in * pixels and the pixel rate. */ - mode_.lineLength = sensorInfo.lineLength * (1.0s / sensorInfo.pixelRate); + mode_.lineLength = sensorInfo.minLineLength * (1.0s / sensorInfo.pixelRate); /* * Set the frame length limits for the mode to ensure exposure and diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index 32feb1682749..ddb22d98eb41 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -246,7 +246,7 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info, context_.configuration.hw.revision = hwRevision_; context_.configuration.sensor.size = info.outputSize; - context_.configuration.sensor.lineDuration = info.lineLength * 1.0s / info.pixelRate; + context_.configuration.sensor.lineDuration = info.minLineLength * 1.0s / info.pixelRate; /* * When the AGC computes the new exposure values for a frame, it needs diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index 911fd0beae4e..c2c8d3d44e26 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -883,10 +883,12 @@ int CameraSensor::sensorInfo(IPACameraSensorInfo *info) const return -EINVAL; } - int32_t hblank = ctrls.get(V4L2_CID_HBLANK).get(); - info->lineLength = info->outputSize.width + hblank; info->pixelRate = ctrls.get(V4L2_CID_PIXEL_RATE).get(); + const ControlInfo hblank = ctrls.infoMap()->at(V4L2_CID_HBLANK); + info->minLineLength = info->outputSize.width + hblank.min().get(); + info->maxLineLength = info->outputSize.width + hblank.max().get(); + const ControlInfo vblank = ctrls.infoMap()->at(V4L2_CID_VBLANK); info->minFrameLength = info->outputSize.height + vblank.min().get(); info->maxFrameLength = info->outputSize.height + vblank.max().get();