From patchwork Thu Sep 8 18:48:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Roumegue X-Patchwork-Id: 17344 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 9619FC3272 for ; Thu, 8 Sep 2022 18:49:23 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id C122A620C4; Thu, 8 Sep 2022 20:49:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1662662962; bh=3x7KzvX7XDJbMgRoaGYt3ecsjkSrqldEa1pjj/q9nHM=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=daUa//m7PhHhvG0G89VzWlnhKESXcVBlbICtJgPM97Ub85H3HbUpfq/gn8lqchsn4 c4wyVzzYk+8xLlmVPhEJBVbYYXty+Xg+LdZKGx+o5Cor6cmvbjdgGLprahq33jfWyV fKR+bV+7MBbrKOPsv+OCcv92eZa0H4i2WXcRwfIk7w6oPDYc4WdU9qeB7G6jreVQOa 9mv6ISLl5T+qtWNszUMRLt0ytCHxRPQqxXcGHlNZ5yxj4EQLp8Yizd5OCHRvFAELB0 C0dlq0NbeSGDZKeK51P0SZJ274wM044m5ybf3cQu0b/FRxaSgqkmTGz/UEm0dxKyFi itYJdazGGxKyA== Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60044.outbound.protection.outlook.com [40.107.6.44]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 14F65620AE for ; Thu, 8 Sep 2022 20:49:19 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="iCGAM2pU"; dkim-atps=neutral ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nND6tEUmnD2j7uScxLMvyES78GZLjdl/V4krF3xKGblBaJPukUc9hxohNlMfDAQQ7osvXTy/ZuF0QbPElodt5Dt2SJHZBJ7jPtHUAj3hVqw91nlckjrFPQADiHkKBprg24xTjwGKDq3RjFVamJwLpb9efxkCMr5TpiuzSzGqN0B7nOROf9iKqH8PT2PH1JArmiSibuDtgJusrejnlQFL6NSnAAM2UkSCp0TAkuqoANuUBGkTpDfydbrQBemAXZZ97jNQAnJo5kMbirHW9gHBSvNTa3Fl+OFp1zkB0WRM2t5VTwTCB3NuLa72kVGPTLJH2fohE2mIwoU5zcqjBQ/FTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GzuJLk+Y+tr0Y/Xb2ZGRc42XgILlqpSH7wv3nhAFr7U=; b=e5pIz0V+SpATz/lZUk7m1+FmAZGJWGXxIDnOA3gQjDRTtA1zUMdfmL4BkBVkSh6pp+3+om8Utkmdr7Bmr/+mwSCrOJSxahwt+/jDugppbypFIQ+xIagd1jppvV4/RSTLuyGuQb/u99uzyJ3LS/915KatxjRF36KVWB4E08pReNokTT6thmGoH2bsyrGtUCYS/33oA+bEVaRQ7ZNnvzOJBOho0M2HF5nj3otTj7mgCMb7OEZfP3vLz6LAs21iG6dmHoQTPS8Buff1ksaTH9It4TFVUfmdrhOwL/HnMTNCYgxIzQYRZAfBfPpI1dWpC4olGZjV/0YjRl8fEkGq6CwfYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GzuJLk+Y+tr0Y/Xb2ZGRc42XgILlqpSH7wv3nhAFr7U=; b=iCGAM2pUqTtSLt1QMRJTzPi4Ta7PQ3wotxn17+n+n51XX88OlWPfZPmSueiI/eD/FdsujUZ4xmgRgqDKeqW3O9+2FSkCpz7RB/RoJGquk+WeAES34mGZ9VeGkFfJYV/5799xWcc/upKHmLLVZ+ukr7OhIFtbXvxW4VspDonueyU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8703.eurprd04.prod.outlook.com (2603:10a6:102:21e::22) by AS8PR04MB8852.eurprd04.prod.outlook.com (2603:10a6:20b:42f::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5612.19; Thu, 8 Sep 2022 18:49:17 +0000 Received: from PAXPR04MB8703.eurprd04.prod.outlook.com ([fe80::485:adba:7081:715a]) by PAXPR04MB8703.eurprd04.prod.outlook.com ([fe80::485:adba:7081:715a%3]) with mapi id 15.20.5612.019; Thu, 8 Sep 2022 18:49:17 +0000 To: libcamera-devel@lists.libcamera.org Date: Thu, 8 Sep 2022 20:48:38 +0200 Message-Id: <20220908184850.1874303-3-xavier.roumegue@oss.nxp.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220908184850.1874303-1-xavier.roumegue@oss.nxp.com> References: <20220908184850.1874303-1-xavier.roumegue@oss.nxp.com> X-ClientProxiedBy: PR3P250CA0001.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:57::6) To PAXPR04MB8703.eurprd04.prod.outlook.com (2603:10a6:102:21e::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8703:EE_|AS8PR04MB8852:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b968efe-8abb-4a55-2f99-08da91cad57c X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aiyl9Z95u9uOHvdckUk0QUnqN4f8ghc3Zk1FjGzuOsuZN/FEVViPlBig/+ULBIWoPHMfprAeHjxzxOSU3TmOq4RV8cbHRvNDYp0/H0wlz6inlmdJHekQIxK0oNnM8ySZfqAt/9y805QXSZG71C70f9fjbIYv7DqqnFZRsFwDj85sQFJRdvvG1z/xHiyjfWdlhaRRzFM4KmWPII6i6eQEVtE/3zT9/VRaKEGVTf7UVk5NJHbFGzEG+3xIqhp7pDlBh/aa6/RxLrYn2pAjgDi0kZ2+sOQNCaLJXh3tiNviKVI3A+R3c7CGYeI47CZBeFCP3EeUQn9dI7RknoYWPwofnMOSEGMMCTN2Vv9zBOfsBN+uKH3ZrGdTg7bJ4KnNZMRfVDm+EuX1iHNNda2+dVkOq4Dy1kg/EF/p1Lu6XtZS/OfsByitzhzUj+ZG5UhbhqToDaHC32UiIdbI0jjRDqppG/A2QV6gQSXPo8VgXC/V7V7921AvOachS1uM3LhyLL48dmpxRnMtvE/f0dmF1+eZ8+x6/a0yCYLTwsZ/stcwYWbNa2TJKPILDkrUuln4Ctmya6iUCo1/ggjBzEv1yCZluhWoen1ZE4pvMe/di4mPE2RZMgjW4vMD8g6dzZMuNKOOxyJLj8eK0BMt1FIim0RsLUruo6Tk7LwIq9vbuo0ej0CP28N2ogGwZT9eFQQnU6Y841mIiuCPtlrkjUSY0p0GoQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAXPR04MB8703.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(4636009)(39860400002)(346002)(376002)(396003)(136003)(366004)(38100700002)(66556008)(66476007)(66946007)(8936002)(44832011)(5660300002)(4326008)(8676002)(6916009)(316002)(41300700001)(186003)(1076003)(2616005)(2906002)(478600001)(6666004)(86362001)(6512007)(52116002)(6506007)(83380400001)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: h1SnFAzWjxd0EhqKaE6Kqk2b8h1TNzPeQOwqoKJRm1GuBu6JYO4MLm2lxWcqNzfK5fe6H2biJHpIPqABxA5oVvOCmoQKGpAuz2fo7eI/INrluM+1WArAjQ2tWoWKW/6LYOP/RX2EBLrDVgHTvnUSv/Gh+ZWcOGdnsUxY26D6NLx0UA42qZpTIDcfG+odcHaWFsZ4AL2TGMybRW04yrd7/O9gmECVi5VdMqpAgCXeMdIp+YmMAcLSxDdfOG15GV1mrBrCtvOvW3QRnerI+pLnhYimUVlbK1xVE9dmvJPgIhKt2fn5GbyQDnp4XkgVqa3RP+W7dctVojnPDCp3YwEqkSvuUG1AndovTVUDif8YmJVouBd7LJ+iwD7xy2Mg62YqFpAiH2QQsQvs+yuO66MfhZC6VW8sWYN0B+VRNqe9h4RFHQNzw4NChdAfkW8TlZSS9ubnhXwQl4ZUL47eLN2oOC8eMOuBdskzvSkSmyIOoq2oQbi+vYCLYzqMc7ZudhZQKWpLvgFZVgT6rt+El/vpCRxQBfutfMKsJhBk9cCU3m7oyB9dLFyWL+pi1BPd1UKfYLP7jAkiLTR5UzL37YNz/QkCDfi3qTZXSarIrHCXXXzhaZHaoXmpMFkSEn7aHOBNGLSSeTeGJ+zU6ChtEdTATt9tZEJT8dkAiaj7oCOSGxbRfIYBytrmAkJwuRfXvInxCQtQLY1Clj3vZwzNWaNMah42HtaAw8ZoB2HZLv3DKVToqVNTXrDwFywX/aGick3g2CR9R1YcBEItg9KXVx2gjokAI++4ODdBTiBrVU0+spyXJ9/4By/W0rp2synE9182iyCh/RV2EEECUEnVZbOL1nV+mK9CKhZOhdrn++ttWvRwg+srPuvMghGImKAdr51IEyUniVZnQ4lFrDPVfA9aVbVks5ETfn7uxB8DFBWuLxJDHsCMNBoVz45RXze15KZLEeRcRTxJXj4sUuYk1cnjPmUwVEu1MMkEVK/dL57sBMWZ9UMOyJ9ZRC9Sq/iGDhcPeLShS89iJF8bmB/coGk6nZgGnDzs7yacLnLWps9h01V711l5wQI8eFz2Q+NmrrZJC6SNfp6o+kIzzljL1bvlTm2SuTBmr70xRxU3iTmguRcIsS9rp8j+BIKYn0dtBwzoS3Z7AfIxNbN1vbV4BTrQ7xAl52WOTJWLvzypZhIFnXKCh2aJ6IjlgWhQxNPRvnJjqPyUZbdXnpOi4fT3ZgPVxZcWMJM2KiQUIlqWOv5AT4JDeF05Wn9ToR1VTZGckOEBMydtxd4sXVHB9utEKg2g4pjyKcKqgnv2NbEQlqRQVLvnSTjTA6/ZneuIUBxab6Fac2lYecoAk7XPj8SYn3RH5Yj5/V2rPIBqhTaJyOhsTO2qO9Xd6nhdSkPEY66Df9xA18RBPaggj3jOwJ4NFMo1bWTtqtfIq0sCpGSrjjTC8RplrutamWKfBk+2W7i25LxdKQ6yXsNv0rl91GGr+nEuZLyq3GxT4qR12DLElo3DzhvdjZqqS19KtqnRwwcIseRZGxlpZ/mX6mvLBJdaGRM3YaLL2kgYRf3eQkOmEhUvjGlZ0wZ6aGCMbfoFCD/n4OCHQ2f1GuevuQ6WsAyp14qfAk8w273iFJ0GIsGd5dCDn/BnQZAcYmmE9iTOspYfnKImrHoULzBabGgdtVcd1XJ34g== X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b968efe-8abb-4a55-2f99-08da91cad57c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8703.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Sep 2022 18:49:17.8390 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: o7sXf0/ovFHVtl1GLDZh7MmvQarPkWW10UejTBKQdBFO+kpRhALHuf6XLSRRiLeyCT++h0LJJzWyOj2JhRCUEg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8852 Subject: [libcamera-devel] [PATCH 02/14] libcamera: v4l2_device: Overload open() to duplicate File descriptor 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: Xavier Roumegue via libcamera-devel From: Xavier Roumegue Reply-To: Xavier Roumegue Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Signed-off-by: Xavier Roumegue Reviewed-by: Jacopo Mondi --- include/libcamera/internal/v4l2_device.h | 2 ++ src/libcamera/v4l2_device.cpp | 33 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h index 75304be1..8b759311 100644 --- a/include/libcamera/internal/v4l2_device.h +++ b/include/libcamera/internal/v4l2_device.h @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -54,6 +55,7 @@ protected: ~V4L2Device(); int open(unsigned int flags); + int open(SharedFD handle); int setFd(UniqueFD fd); int ioctl(unsigned long request, void *argp); diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp index 756188ea..67847bb0 100644 --- a/src/libcamera/v4l2_device.cpp +++ b/src/libcamera/v4l2_device.cpp @@ -102,6 +102,39 @@ int V4L2Device::open(unsigned int flags) return 0; } +/** + * \brief Open a V4L2 device node + * \param[in] Shared File descriptor Handle + * + * Duplicate a shared file descriptor handle and use it for further device + * syscalls + * + * \return 0 on success or a negative error code otherwise + */ +int V4L2Device::open(SharedFD handle) +{ + int ret; + + UniqueFD newFd = handle.dup(); + if (!newFd.isValid()) { + ret = -errno; + LOG(V4L2, Error) << "Failed to duplicate file handle: " + << strerror(-ret); + return ret; + } + + ret = setFd(std::move(newFd)); + if (ret < 0) { + LOG(V4L2, Error) << "Failed to set file handle: " + << strerror(-ret); + return ret; + } + + listControls(); + + return 0; +} + /** * \brief Set the file descriptor of a V4L2 device * \param[in] fd The file descriptor handle