From patchwork Wed Jul 8 13:43:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 8669 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 4B9CABD792 for ; Wed, 8 Jul 2020 13:44:32 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 48052610B2; Wed, 8 Jul 2020 15:44:31 +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="KDzpct//"; 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 90DB960E0D for ; Wed, 8 Jul 2020 15:44:29 +0200 (CEST) Received: from pyrite.rasen.tech (unknown [IPv6:2400:4051:61:600:2c71:1b79:d06d:5032]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EC2F551B; Wed, 8 Jul 2020 15:44:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1594215869; bh=GF7nFXRjl7YrOo0k0HSFXIUXLmf5lQ0JC2IQp85vaS0=; h=From:To:Cc:Subject:Date:From; b=KDzpct//YVEvnFrl93usirexImBWc8ChZLqLtTdGhaBlFwQ+m1xE2wh7a6g4riaQ2 AaRV5/qOontNrOA8axdq4PZkxTVu+zsq+EHRIXx31ryUypzlU4ESD7jp41yDBgXPzY PZ/ojDfwWsCA1toCNvB0yLbXC/yG5I9cWHPoMtPU= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Wed, 8 Jul 2020 22:43:56 +0900 Message-Id: <20200708134417.67747-1-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 00/21] Clean up formats in v4l2-compat and pipeline handlers 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" This patch series: - improves format-related calculations (stride, frameSize) - cleans up the v4l2 compatibility layer related to formats - fixes v4l2 compatibility interception for the raspberry pi pipeline handler - fixes unsupported formats in uvcvideo and raspberrypi pipeline handlers (the others were fine already) - moves filling in stride and frameSize from camera configuration time to configuration validation time for all pipeline handlers Patches 1~6 add functions and fields that are necessary in the rest of the patches. Patches 7~8 move formats out of V4L2CameraProxy, and clean up some of its code. Patch 10 forces pipeline handlers to use acquireMediaDevice so that media devices can automatically be mapped to devnums for the v4l2 compatibility layer to intercept, and patch 11 makes the raspberrypi pipeline handler conform to this. Patches 12~13 filter out unsupported formats at configuration generation time, to prevent them from being selected, in the pipeline handlers that hadn't already done so. Patches 14~19 move filling in the stide and frameSize parameters from camera configuration time to configuration validation time. Changes in v4: - upgraded documentation of format info definitions - added overloaded PixelFormatInfo::stride() that takes alignment - added optional parameter to PixelFormatInfo::frameSize that takes array of strides - raspberrypi: fill in default format and frame size - simple: fix stride and frameSize for converter (compared to v3) - use tryFormat to get stride and frameSize for all pipelines except for ipu3 Paul Elder (21): libcamera: formats: Add NV24 and NV42, and reorder NV formats libcamera: formats: Add fields to info to ease calculating stride libcamera: StreamConfiguration: Add frameSize field libcamera: V4L2VideoDevice: Add tryFormat libcamera: formats: PixelFormatInfo: Add v4l2 lookup function libcamera: PixelFormatInfo: Add functions stride and frameSize v4l2: v4l2_camera_proxy: Get stride and frameSize from stream config v4l2: v4l2_camera_proxy: Use stream config in tryFormat libcamera: pipeline: raspberrypi: Simplify format fetching libcamera: pipeline: raspberrypi: Acquire media devices with acquireMediaDevice libcamera: pipeline_handler: Fatal if registering camera without media devices libcamera: pipeline: raspberrypi: Filter out unsupported formats libcamera: pipeline: uvcvideo: Filter out unsupported formats libcamera: ipu3: Fill stride and frameSize at config validation libcamera: raspberrypi: Fill stride and frameSize at config validation libcamera: rkisp1: Fill stride and frameSize at config validation libcamera: simple: Fill stride and frameSize at config validation libcamera: uvcvideo: Fill stride and frameSize at config validation libcamera: vimc: Fill stride and frameSize at config validation libcamera: StreamConfiguration: Update stride documentation v4l2: v4l2_camera: Fix stream selection for buffer operations include/libcamera/internal/formats.h | 17 ++ include/libcamera/internal/v4l2_videodevice.h | 7 +- include/libcamera/stream.h | 1 + src/libcamera/formats.cpp | 282 +++++++++++++++++- src/libcamera/pipeline/ipu3/ipu3.cpp | 23 +- .../pipeline/raspberrypi/raspberrypi.cpp | 81 ++--- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 +- src/libcamera/pipeline/simple/converter.cpp | 19 ++ src/libcamera/pipeline/simple/converter.h | 4 + src/libcamera/pipeline/simple/simple.cpp | 27 +- src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 36 ++- src/libcamera/pipeline/vimc/vimc.cpp | 23 +- src/libcamera/pipeline_handler.cpp | 4 + src/libcamera/stream.cpp | 22 +- src/libcamera/v4l2_videodevice.cpp | 50 +++- src/v4l2/v4l2_camera.cpp | 26 +- src/v4l2/v4l2_camera.h | 3 + src/v4l2/v4l2_camera_proxy.cpp | 207 +++---------- src/v4l2/v4l2_camera_proxy.h | 8 - 19 files changed, 578 insertions(+), 282 deletions(-)