From patchwork Tue Jul 26 18:24:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hanlin Chen X-Patchwork-Id: 16804 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 3863EBE173 for ; Tue, 26 Jul 2022 18:25:35 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E8C8A63311; Tue, 26 Jul 2022 20:25:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1658859934; bh=R9uHT+BvZkLOJpSdkQmcQIOOfX+SstO0o9lsIOOuDww=; 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=YIMdY+piOA+JVVFH1eYcZLvCxYyL6n0LEfiv+WmlTt9sLiOhE+Uu5HDrNRhcQwjgB QPgCryria2syzucOE7mrLZXVYzBSZHRzS0wp2umzlfnB+a7gSOve79KF90aNweJNg/ w11z9ayjmu3FSlYbyk/bBBHXBWyvJpcdDmxnEdktu7cISsw4S8PQYSML0YpCqYi5MT 22t4Qw2WUozO2HgsAk25mBK3DfqzfVwjA6r/F8wYCGeJkAf7x46x6NoasFPWzaftl9 VGhYrv075+PaS2jtYm4PC4ScuhVHi7jSyM+jWjN3X+GM+5sQGaa4obChliABSFUuyY 6DRFZh7sHNLhg== Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B7BA260487 for ; Tue, 26 Jul 2022 20:25:32 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="abjCqlL1"; dkim-atps=neutral Received: by mail-pg1-x535.google.com with SMTP id s206so13842001pgs.3 for ; Tue, 26 Jul 2022 11:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=T5PVKcclvqX2gU0lr0MrsXleBfpUJTOUsV+0PEKgZTM=; b=abjCqlL1l/5uWSGuz7Mbr/0BjpgthMODm6RLCTE/U12iseeLl9vzvhClh3rJ5o0GKI grEUNyUwuPzaPI9cuHSUPYxMvwq/Z+4BA6JF6RzBtH5AJ4Py2YaauD06TV/Jx8gfAg+8 xOV5Xfn08AYGLIYKAk3Xqq+hUI6WA39YphI1I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=T5PVKcclvqX2gU0lr0MrsXleBfpUJTOUsV+0PEKgZTM=; b=U1nUHmNQ/5WRmiFT1QTCjR+mNeoTEH2PQtbZ6RhGSfDgyhYqHGKQl+JaMdHO7vr+Vb 6IZYAbHJtYWkE5rDUwDCIonnyo+LD0n4zkhiu1/VYJzyD2covw/iD7D3CxpEIWMXvAb4 t0mmlfloPuEMuj+vXUZ05L9yF5Y3YAkMBwrT30TXYt7rirVIwJ/Y0G2y+MWRs5L56sym DFNXwNT4J/L6+9U0SyfkrQjC200KrYYYFXrhDDE4iTNlZ78ziA8oL6DR8C7EbN2KaTBv azj3M3vWu/XGH5GjFaqb+/OhE7iw5XXRio8TA+RKvudvwvLFSG8NNlArcqOwuR+s9cwZ rVcw== X-Gm-Message-State: AJIora9H7OdVAwPCbPuEMjV4/TEeVWc1H93DwEuw/K/ZJBidlBdxe7gZ o9ebac9rkPU8ioyziTdFrV7Qs2cYC168gA== X-Google-Smtp-Source: AGRyM1uFfZ3ZQtulOHbsxYDymmtiODqJfWvc9k9bZE+GsqBhtY0OeJ5Ud1eReUQ41jgNVpqoYmINZQ== X-Received: by 2002:a63:d209:0:b0:41a:19a5:f8c0 with SMTP id a9-20020a63d209000000b0041a19a5f8c0mr15298388pgg.565.1658859931204; Tue, 26 Jul 2022 11:25:31 -0700 (PDT) Received: from localhost ([2401:fa00:1:17:739:6574:4032:5911]) by smtp.gmail.com with UTF8SMTPSA id f17-20020a17090ace1100b001f0f132da9fsm11230722pju.5.2022.07.26.11.25.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 Jul 2022 11:25:31 -0700 (PDT) To: libcamera-devel@lists.libcamera.org Date: Wed, 27 Jul 2022 02:24:57 +0800 Message-Id: <20220726182500.425182-4-hanlinchen@chromium.org> X-Mailer: git-send-email 2.37.1.359.gd136c6c3e2-goog In-Reply-To: <20220726182500.425182-1-hanlinchen@chromium.org> References: <20220726182500.425182-1-hanlinchen@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 3/6] libcamera: ipu3: returning partial results 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: Han-Lin Chen via libcamera-devel From: Hanlin Chen Reply-To: Han-Lin Chen Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Return metadata at earlier stage. Signed-off-by: Han-Lin Chen --- src/libcamera/pipeline/ipu3/ipu3.cpp | 46 +++++++++++++++------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index 4fe52f74..75231156 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -1300,7 +1300,7 @@ void IPU3CameraData::metadataReady(unsigned int id, const ControlList &metadata) return; Request *request = info->request; - request->metadata().merge(metadata); + pipe()->completeMetadata(request, metadata); info->metadataProcessed = true; if (frameInfos_.tryComplete(info)) @@ -1324,16 +1324,8 @@ void IPU3CameraData::imguOutputBufferReady(FrameBuffer *buffer) return; Request *request = info->request; - pipe()->completeBuffer(request, buffer); - request->metadata().set(controls::draft::PipelineDepth, 3); - /* \todo Actually apply the scaler crop region to the ImgU. */ - const auto &scalerCrop = request->controls().get(controls::ScalerCrop); - if (scalerCrop) - cropRegion_ = *scalerCrop; - request->metadata().set(controls::ScalerCrop, cropRegion_); - if (frameInfos_.tryComplete(info)) pipe()->completeRequest(request); } @@ -1372,13 +1364,24 @@ void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer) * \todo The sensor timestamp should be better estimated by connecting * to the V4L2Device::frameStart signal. */ - request->metadata().set(controls::SensorTimestamp, - buffer->metadata().timestamp); info->effectiveSensorControls = delayedCtrls_->get(buffer->metadata().sequence); - if (request->findBuffer(&rawStream_)) + ControlList metadata; + metadata.set(controls::draft::PipelineDepth, 3); + metadata.set(controls::SensorTimestamp, buffer->metadata().timestamp); + + /* \todo Actually apply the scaler crop region to the ImgU. */ + const auto &scalerCrop = request->controls().get(controls::ScalerCrop); + if (scalerCrop) + cropRegion_ = *scalerCrop; + metadata.set(controls::ScalerCrop, cropRegion_); + + pipe()->completeMetadata(request, metadata); + + if (request->findBuffer(&rawStream_)) { pipe()->completeBuffer(request, buffer); + } ipa_->fillParamsBuffer(info->id, info->paramBuffer->cookie()); } @@ -1455,20 +1458,21 @@ void IPU3CameraData::frameStart(uint32_t sequence) Request *request = processingRequests_.front(); processingRequests_.pop(); - const auto &testPatternMode = request->controls().get(controls::draft::TestPatternMode); - if (!testPatternMode) - return; + int32_t testPatternMode = controls::draft::TestPatternModeOff; + const auto &testPatternControl = request->controls().get(controls::draft::TestPatternMode); + if (testPatternControl) + testPatternMode = *testPatternControl; int ret = cio2_.sensor()->setTestPatternMode( - static_cast(*testPatternMode)); + static_cast(testPatternMode)); if (ret) { - LOG(IPU3, Error) << "Failed to set test pattern mode: " - << ret; - return; + LOG(IPU3, Error) << "Failed to set test pattern mode: " << ret; + testPatternMode = controls::draft::TestPatternModeOff; } - request->metadata().set(controls::draft::TestPatternMode, - *testPatternMode); + ControlList metadata; + metadata.set(controls::draft::TestPatternMode, testPatternMode); + pipe()->completeMetadata(request, metadata); } REGISTER_PIPELINE_HANDLER(PipelineHandlerIPU3)