From patchwork Fri Aug 13 14:44:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 13349 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 92956C3240 for ; Fri, 13 Aug 2021 14:44:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4780968894; Fri, 13 Aug 2021 16:44:54 +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="vWc2ehVA"; 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 524A16888E for ; Fri, 13 Aug 2021 16:44:53 +0200 (CEST) Received: from perceval.ideasonboard.com (unknown [103.251.226.198]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 4DBE98F; Fri, 13 Aug 2021 16:44:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1628865893; bh=COa/xVRCb6EE1//4yL1JTNYhp9JCqMFcyyhVF66h1zI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vWc2ehVAJGb0JIOeHRa5MbkuatjwMCccD6GvhhsjAK2pnOqxrvNACYumjFvx+PuRq WsKsatz7Ez7rLxwpZE4A7nLhB6lSJzSApRyVyIQduNgCsM0ek/um39dVNdBkoHETsN EsQRuya+ZWM9afLh6eIGvm1L745SU6zFxibiyXMw= From: Umang Jain To: libcamera-devel@lists.libcamera.org Date: Fri, 13 Aug 2021 20:14:35 +0530 Message-Id: <20210813144437.138005-3-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210813144437.138005-1-umang.jain@ideasonboard.com> References: <20210813144437.138005-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/4] pipeline: vimc: Allocate fake IPA buffers 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" VIMC is a virtual test driver that doesn't generate statistics or consume parameters buffers. Thus, create simple (single plane) dmabuf-backed FrameBuffers, which can act as fake IPA buffers and can be memory mapped(mmap) to VIMC IPA. To create these buffers, temporarily hijack the output video node and configure it with a V4L2DeviceFormat. Buffers then can be exported from the output video node using V4L2VideoDevice::exportBuffers(). These buffers will be mimicked as IPA buffers in subsequent commits. Signed-off-by: Umang Jain Reviewed-by: Laurent Pinchart --- src/libcamera/pipeline/vimc/vimc.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp index 4c92729d..edf8c58e 100644 --- a/src/libcamera/pipeline/vimc/vimc.cpp +++ b/src/libcamera/pipeline/vimc/vimc.cpp @@ -50,6 +50,7 @@ public: } int init(); + int allocateMockIPABuffers(); void bufferReady(FrameBuffer *buffer); MediaDevice *media_; @@ -61,6 +62,7 @@ public: Stream stream_; std::unique_ptr ipa_; + std::vector> mockIPABufs_; }; class VimcCameraConfiguration : public CameraConfiguration @@ -500,6 +502,12 @@ int VimcCameraData::init() if (raw_->open()) return -ENODEV; + ret = allocateMockIPABuffers(); + if (!ret) { + LOG(VIMC, Warning) << "Cannot allocate fake IPA buffers"; + /* \todo fail hard or continue? */ + } + /* Initialise the supported controls. */ const ControlInfoMap &controls = sensor_->controls(); ControlInfoMap::Map ctrls; @@ -548,6 +556,25 @@ void VimcCameraData::bufferReady(FrameBuffer *buffer) pipe_->completeRequest(request); } +int VimcCameraData::allocateMockIPABuffers() +{ + unsigned int bufCount = 2; + + V4L2DeviceFormat format; + format.fourcc = video_->toV4L2PixelFormat(formats::BGR888); + format.size = Size(160, 120); + + int ret = video_->tryFormat(&format); + if (ret < 0) + return ret; + + ret = video_->setFormat(&format); + if (ret < 0) + return ret; + + return video_->exportBuffers(bufCount, &mockIPABufs_); +} + REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc) } /* namespace libcamera */