From patchwork Thu May 6 18:02:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= X-Patchwork-Id: 12209 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 BDEDCBDE7F for ; Thu, 6 May 2021 18:03:54 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 4ABA768918; Thu, 6 May 2021 20:03:54 +0200 (CEST) Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DF56F68901 for ; Thu, 6 May 2021 20:03:52 +0200 (CEST) Received: from localhost.localdomain (unknown [IPv6:2804:14c:1a9:2978:995d:672b:100f:2fd9]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: nfraprado) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 08D651F43B87; Thu, 6 May 2021 19:03:50 +0100 (BST) From: =?utf-8?b?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= To: libcamera-devel@lists.libcamera.org Date: Thu, 6 May 2021 15:02:43 -0300 Message-Id: <20210506180249.318346-1-nfraprado@collabora.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 0/6] lc-compliance: Add test to queue more requests than hardware depth 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: , Cc: kernel@collabora.com, =?utf-8?q?Andr=C3=A9_Almeida?= Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The purpose of this series is to add a new test to lc-compliance that tests queuing a lot of requests at once in order to ensure that pipeline handlers are able to handle more requests than they have resources for (like internal buffers and v4l2 buffer slots) [1]. In order to achieve this, the FrameBufferAllocator had to be adapted in order to allow an arbitrary amount of buffers to be allocated. But there's also the issue of reporting the minimum amount of requests required by the pipeline handler, which was solved by creating a new MinNumRequests property. So patch 1 adds the new MinNumRequests property to report the minimum amount of requests needed by the pipeline handler. Patch 2 adds a count argument to allocate() so that the amount of buffers to allocate needs to be specified, as it is no longer assumed through bufferCount. Patch 3 refactors some common capture code in lc-compliance in order to reduce code duplication (Making patch 4 simpler). Patch 4 adds the test to lc-compliance. Patch 5 replaces all usage of bufferCount for allocateBuffers() and importBuffers() in pipeline handlers to constants, as bufferCount wasn't a good fit and to allow its removal. This is intended as a temporary measure, and pipeline handlers will probably want to improve the logic of those values. Patch 6 removes bufferCount from the StreamConfiguration as it is no longer needed. The amount of buffers to allocate in the lc-compliance test (patch 4) was hardcoded to 8 since more than that would cause errors when allocating. Changes in v4: - Thanks to Laurent: - Renamed QueueDepth property to MinNumRequests and better documented it - Changed patch 6 to also remove bufferCount from android - Thanks to Niklas: - Added patch 3 to factor common code in lc-compliance - Added patch 5 to remove pipeline dependency on bufferCount Changes in v3: - Added patches 1 and 4 to add the QueueDepth property and remove bufferCount - Made the count argument required in patch 2 - Added previously missing changes to the gstreamer and v4l2 compatibility layers Changes in v2: - Renamed and reworded commits and series - Dropped patches 2 and 3, which were hacks to test, and added patch 1 to add count to FrameBufferAllocator - Thanks to Niklas: - Created new standalone test instead of looping over the other tests [1] https://bugs.libcamera.org/show_bug.cgi?id=24 v1: https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019139.html v2: https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019398.html v3: https://lists.libcamera.org/pipermail/libcamera-devel/2021-April/019613.html NĂ­colas F. R. A. Prado (6): libcamera: property: Add MinNumRequests property libcamera: framebuffer_allocator: Make allocate() require count lc-compliance: Factor common capture code into SimpleCapture lc-compliance: Add test to queue more requests than hardware depth libcamera: pipeline: Don't rely on bufferCount libcamera: stream: Remove bufferCount include/libcamera/camera.h | 2 +- include/libcamera/framebuffer_allocator.h | 2 +- include/libcamera/internal/pipeline_handler.h | 2 +- include/libcamera/stream.h | 2 - src/android/camera_stream.cpp | 7 +- src/cam/capture.cpp | 9 +- src/gstreamer/gstlibcameraallocator.cpp | 4 +- src/lc-compliance/simple_capture.cpp | 203 ++++++++++++------ src/lc-compliance/simple_capture.h | 27 ++- src/lc-compliance/single_stream.cpp | 37 +++- src/libcamera/camera.cpp | 4 +- src/libcamera/framebuffer_allocator.cpp | 5 +- src/libcamera/pipeline/ipu3/cio2.cpp | 1 - src/libcamera/pipeline/ipu3/imgu.cpp | 12 +- src/libcamera/pipeline/ipu3/imgu.h | 5 +- src/libcamera/pipeline/ipu3/ipu3.cpp | 26 +-- .../pipeline/raspberrypi/raspberrypi.cpp | 31 ++- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 15 +- src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 4 +- src/libcamera/pipeline/rkisp1/rkisp1_path.h | 3 + src/libcamera/pipeline/simple/converter.cpp | 7 +- src/libcamera/pipeline/simple/converter.h | 6 +- src/libcamera/pipeline/simple/simple.cpp | 17 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 17 +- src/libcamera/pipeline/vimc/vimc.cpp | 18 +- src/libcamera/pipeline_handler.cpp | 1 + src/libcamera/property_ids.yaml | 9 + src/libcamera/stream.cpp | 9 +- src/qcam/main_window.cpp | 4 +- src/v4l2/v4l2_camera.cpp | 16 +- src/v4l2/v4l2_camera.h | 5 +- src/v4l2/v4l2_camera_proxy.cpp | 8 +- test/camera/buffer_import.cpp | 10 +- test/camera/capture.cpp | 4 +- test/camera/statemachine.cpp | 4 +- test/libtest/buffer_source.cpp | 4 +- test/libtest/buffer_source.h | 2 +- test/mapped-buffer.cpp | 4 +- test/v4l2_videodevice/buffer_cache.cpp | 4 +- 39 files changed, 347 insertions(+), 203 deletions(-)