From patchwork Thu Oct 27 22:41:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolas Dufresne via libcamera-devel X-Patchwork-Id: 17704 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 86BCBBDB16 for ; Thu, 27 Oct 2022 22:41:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 65C6D62FAD; Fri, 28 Oct 2022 00:41:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1666910508; bh=UbWy7JpRGfzsvWhGg3mEk+TUTZy4PwMeQO3JXefUuvw=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=1SSsAKx7y96XTJ+5+tAha4DMmLFqpbvuzpaykJhVESlAaNwGId7LdhzCO+wcG5UNJ SkVZ0DGb5h4nqzVWgfr1y309Ewy6vefe35gSWDtADZZrDj/UbU20Mx0X/QWNY+T3hZ OcyvGqEQ8Kd3WQWRtBkpeyPn2V2E1nkUNsPgCGdfknXhg61JObeV894+gwCMnw8GDL Zc9n6rJTlfuty6Ve7T3DpZSjdIA2MTtP/0fbyEGdEnzHUS8CQ3dqYdStOLpR6umY0R VHtZJy0dU3ndLFIdQkTOh4bedKXwK/6fvL4U07RhG0J3ZLLGjZR+jbTBFzfiBVHugc tIz+qAbTabRCg== Received: from mail-oa1-x32.google.com (mail-oa1-x32.google.com [IPv6:2001:4860:4864:20::32]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2C23462FA3 for ; Fri, 28 Oct 2022 00:41:44 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=rothemail-net.20210112.gappssmtp.com header.i=@rothemail-net.20210112.gappssmtp.com header.b="nzj+if/P"; dkim-atps=neutral Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-1322d768ba7so4314548fac.5 for ; Thu, 27 Oct 2022 15:41:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothemail-net.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=IrPtoDDjdotdllMEiEG1VWBuowiqd4YRxRwcBEjf694=; b=nzj+if/P9JkTW4jdJROiXzluNSBaO3QTXp1tyxfzRTsLuU7+K3xJm85rZTqn+2bH5c b2E5EY5W9qk5Hv93/EnMQPVfi2zXH0OUW9HVmppZz3E3m8cicgr/3ly8H4ssXeuNLIcr 9ErROzYh8sXVVCEUEhrQErD8qH7j8Vqpp8Aht9ilL/dOQRegZovU1OSXSekMblcuSq5V gOavWT2pvru6XwjjsaNbIy8Ot+SrK4ioi1WLys+mUA2coa6PykkVznSBH2g68zDvUa1y sRBnv2iAUXatknjHBWjK80IHX6QCbXbq3Es7IInJ46b5I7f0qQWMqCzfUFb5FptzZv5a jKcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=IrPtoDDjdotdllMEiEG1VWBuowiqd4YRxRwcBEjf694=; b=kCy95wuqRcIq9kJO1Gg8oHCvmY4F4P9YMnKEDSiXKPBCN/L7qyFibXrdmUjynB9FRr taZNGfZaYUtiBfOxLjnrXlk8WUF+hUFP4c0o2fPGyR/OMx7e2th58O3zLGjUTpmKMk4X wlccKjODTOXc3wGQFh9K5Gpg1PU9l0j12vIu/00oVEodKONVqjqYu52A9d1rx2AKggyW MXUne8RksZ77kU8ExikWGFxyrdwGrc8GKTIPm3IEnF2Pwy18W1frxhXTb55wQwpKND22 Q9sYWI3i2GqqufQW1tkD+ybDxgWYkIhs4DAS109pDVxZkTOwMhNjn/h0i7P6dHIsXVy+ S12Q== X-Gm-Message-State: ACrzQf3GS/EX0N8tp800Z5F6/BzPFYW2iDLr5vhRH3wDWprERhcJpXyh tZ1wOdkgmIt2oueWgKpgMIRBwa9FkbctAqPj X-Google-Smtp-Source: AMsMyM4BXO0npF3mjClHHZ/AkzIb5Q7TWQYYggJ8+vJ6+dxeHwsBvxuOt6HaRWhUkuyYnMwmeua95g== X-Received: by 2002:a05:6870:c34a:b0:13b:b9e7:e730 with SMTP id e10-20020a056870c34a00b0013bb9e7e730mr7163115oak.202.1666910502268; Thu, 27 Oct 2022 15:41:42 -0700 (PDT) Received: from nroth-pc.attlocal.net ([2600:1700:20:20c0:6a4b:7aa7:dda2:75cb]) by smtp.gmail.com with ESMTPSA id r20-20020a056830419400b006619533d1ddsm976825otu.76.2022.10.27.15.41.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Oct 2022 15:41:41 -0700 (PDT) To: libcamera-devel@lists.libcamera.org Date: Thu, 27 Oct 2022 17:41:28 -0500 Message-Id: <20221027224135.348115-4-nicholas@rothemail.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221027224135.348115-1-nicholas@rothemail.net> References: <20221027224135.348115-1-nicholas@rothemail.net> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 03/10] ipa: add rkisp1 metadata to fix Android HAL 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: Nicholas Roth via libcamera-devel From: Nicolas Dufresne via libcamera-devel Reply-To: libcamera-devel@lists.libcamera.org Cc: nicholas@rothemail.net Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Nicholas Roth Currently, the Android HAL does not work on rkisp1-based devices because required FrameDurationLimits metadata is missing from the ISP implementation. This change introduces sensible defaults for FrameDurationLimits that should generally work most of the time. In theory, it should be possible to implement more sophisticated logic to detect frame durations. The appropriate API hooks for doing so exist and are used in IPAIPU3::updateControls(), although the implementation may be suspect. This is left as future work. Signed-off-by: Nicholas Roth --- src/ipa/raspberrypi/controller/rpi/.agc.cpp.swp | Bin 45056 -> 0 bytes src/ipa/rkisp1/rkisp1.cpp | 6 ++++++ 2 files changed, 6 insertions(+) delete mode 100644 src/ipa/raspberrypi/controller/rpi/.agc.cpp.swp diff --git a/src/ipa/raspberrypi/controller/rpi/.agc.cpp.swp b/src/ipa/raspberrypi/controller/rpi/.agc.cpp.swp deleted file mode 100644 index 7b26d5511f7338b4cd3f28246243c9110c39aab0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45056 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