From patchwork Tue Jan 22 19:20:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 328 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0582560C7D for ; Tue, 22 Jan 2019 20:20:46 +0100 (CET) Received: from localhost.localdomain (cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 322FD575; Tue, 22 Jan 2019 20:20:45 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1548184845; bh=5oAq2J7VaXW0LwexAat3A6HLR/zZdZHwCRTNzcGrvmI=; h=From:To:Cc:Subject:Date:From; b=G/HFMf1bkjulCHd0HNRKPWpuE1FrP7t1PfYzCtph6RpQjjB2FdMpkIF/4MNcgTQHJ Uoip8rNQ1UcbjInBu34uGVdncSQfUOSJ9l3m3HjvcLt/roWxgavQ1nisFOEjXkXW75 Gm35rgfAeKxx3IfJI7NkXH43meaKsWf3TB7TQr2A= From: Kieran Bingham To: LibCamera Devel Date: Tue, 22 Jan 2019 19:20:40 +0000 Message-Id: <20190122192040.9719-1-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.17.1 Subject: [libcamera-devel] [PATCH] libcamera: v4l2device: Obtain device capabilities X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Jan 2019 19:20:46 -0000 The capabilities structure from the kernel can return capabilities of the device, or potentially more specific device capabilities. Handle this with an inline function to return the correct value. Signed-off-by: Kieran Bingham --- Jacopo, Sending this now to see what you think, as it might be useful to consider this while you're making adjustments in the area. Because this code will be inlined, I expect the compiler to optimise sequential uses of this operation where the underlying capabilities is not modified. Kieran src/libcamera/include/v4l2_device.h | 10 +++++++--- src/libcamera/v4l2_device.cpp | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h index b92e1f1c96c3..90d18b9f2260 100644 --- a/src/libcamera/include/v4l2_device.h +++ b/src/libcamera/include/v4l2_device.h @@ -26,10 +26,14 @@ struct V4L2Capability final : v4l2_capability { { return reinterpret_cast(v4l2_capability::bus_info); } + unsigned int caps() const + { + return capabilities & V4L2_CAP_DEVICE_CAPS ? device_caps : capabilities; + } - bool isCapture() const { return capabilities & V4L2_CAP_VIDEO_CAPTURE; } - bool isOutput() const { return capabilities & V4L2_CAP_VIDEO_OUTPUT; } - bool hasStreaming() const { return capabilities & V4L2_CAP_STREAMING; } + bool isCapture() const { return caps() & V4L2_CAP_VIDEO_CAPTURE; } + bool isOutput() const { return caps() & V4L2_CAP_VIDEO_OUTPUT; } + bool hasStreaming() const { return caps() & V4L2_CAP_STREAMING; } }; class MediaEntity; diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 2b17fa1eb0e8..4d1cc5b6070f 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -49,6 +49,13 @@ LOG_DEFINE_CATEGORY(V4L2) * \return The string containing the device location */ +/** + * \fn unsigned int V4L2Capability::caps() + * \brief Retrieve the capabilities of the device + * \return The device specific capabilities if V4L2_CAP_DEVICE_CAPS is set or + * driver capabilities otherwise + */ + /** * \fn bool V4L2Capability::isCapture() * \brief Identify if the device is capable of capturing video