From patchwork Thu Oct 16 15:27:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Vuillaumier X-Patchwork-Id: 24692 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 0B62BC3259 for ; Thu, 16 Oct 2025 15:28:19 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3AE486068E; Thu, 16 Oct 2025 17:28:18 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="VzYGchJR"; dkim-atps=neutral Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazlp170110003.outbound.protection.outlook.com [IPv6:2a01:111:f403:c201::3]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C9264605D7 for ; Thu, 16 Oct 2025 17:28:16 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hAOEnUk6MXKK9lqzW//P5D5qt3E0UxnBxVYk4Yhmg/k4S+cj2VH/irrTHYHrqL8ytL4Zs2lBimWfQkZK4iJfCphGatbq4c9hoGXBbeXB5DEjzeXE78Wkjt4jucZr5zuIdDzu54uDkU1Yb3N8fY/jDvNOyv8rUxBCszGmrIn4NWvp7pi9+OqpkfKv/zxaEu/d6PDMlcQLgS1jv/oV3bdmbPNwKkBHHAgF8TvpA4ilhj1Kabp7xcfSq6hyL+IDOU4zQf61nliksURxuZ3IbuRSHTZQHqGNdgwIKO8KIzlbPzIEuOgi7fVDBdFgyPOWy+Fxv1kOFcAOK7N7zuib4PGvAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=zsFhprl10FUpit/bAQ6cx1+t/euZ6HnfSYGhief6Mn0=; b=FoEFiPK4ZhsREOYFiZO/RbkaLiEXs2xPwAkQRWhpz7rxidOGyfAC8DLmxTWGLWW6TVUJTG3CHcllsYk1Tlt+PkaD5ONfg6Ws8crz8yX8fc1ZVD9jUcGC3Os27NyWAYatG/pJUzoYHebYyTwvx1VwteC0Fl+Cuu99EcKVyzud2YXrd0sdIB6NGDPj6MufRxTYuPLD4ymzB167Yk4E80dCUoThL2nqCZqxPzfsP4W6fPFBClvQOp/g+d3bCa+hWvGbzzqvYdw7xiocaaokocHzg8dBw+nIoH2kG35kdRG4Z5VL+XNZSF3FPHymqlnuyV1F/VSAIGt22JgKQfLl9+0kJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zsFhprl10FUpit/bAQ6cx1+t/euZ6HnfSYGhief6Mn0=; b=VzYGchJRVL7U22Fr7SEPiBcIAWYcVkOb6yY5F/+vkvFyV2F+D4ljgnchVtFnxL/iHt1qtgQDUcNBYdcAAKE0kbBThCdnHghJkyCaQe/ncym1MHEf1bfRTweonj07tpXlXi4JZB7qAyhT3m78q1yyBD0Rd+JWibxCaZsTOblMmWUHBvmn7/+IZLWdnRQS7PZuWkWvBD/8g7BIr4fV6C67A4+0KpAy9p/zTy6+qMrje6+Vbq0jNPslQcDqEUGC0zX31+tXO/loqMLx5g/rf6114V/VbJuyHTY4CvWbacx5HMHtgstpiT8m/ip13wFfrY7ZxhpxxYnQUb4hqgp+4ynMeg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) by PAWPR04MB11571.eurprd04.prod.outlook.com (2603:10a6:102:50f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.11; Thu, 16 Oct 2025 15:28:15 +0000 Received: from AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::b387:72c6:e33c:8656]) by AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::b387:72c6:e33c:8656%7]) with mapi id 15.20.9228.010; Thu, 16 Oct 2025 15:28:15 +0000 From: Julien Vuillaumier To: libcamera-devel@lists.libcamera.org Cc: Julien Vuillaumier Subject: [PATCH v1] libcamera: camera_sensor: Fix imageStream() for CameraSensorLegacy class Date: Thu, 16 Oct 2025 17:27:38 +0200 Message-Id: <20251016152738.2708250-1-julien.vuillaumier@nxp.com> X-Mailer: git-send-email 2.34.1 X-ClientProxiedBy: AS4P191CA0033.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:657::20) To AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8147:EE_|PAWPR04MB11571:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ecc2430-0161-484a-6127-08de0cc89ffc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|19092799006|376014|52116014|366016|38350700014; X-Microsoft-Antispam-Message-Info: p2EYhuZVN0vDC23W/UYy5kZYWEfTwc4SEK2feRf7ffzjHIsbJtrzbtpgIt3P8q8lupbzK6U55/V6oZCQXD/9g5PheaiBkounjP8BEdJK/wCrF6yA+uGVTaE5Qzj2Ps+sw9qPz6Fpd2RPu5+TcmWZdrFYt3blKagTT8JjA0ej21mvywO8/fnmTU3jwW3nIHvNKL7hYuCsLyytNQ55tjqoN67kgwAIQD9uxEVOXMWPdAYsIvo0CmMa016o2cpJeK9jc4pSIiZB6LMr4/lj8Q0TyYplwXWnWO4JRRI7Ncr4drcvZEAe2VGlcTMsMizVtWUzCJHVxpa5/m5FfhtfPVuUaOlgnSG4bQxfvNpxMopgoSBIl+36IRb7Vk9Yp+fZAsZrsjIn/o4j1tr0NhoZ9SnJlEpb8fzsFVQMUeAwMVOfY722+5oVxVu4oAheNxO7eoGF6O8ccqw9DIjkTcuFe2defgNyxdkVObhBOvDmIaPN8ASkg1lfxivUdRS/iPYDtRSxJ4yxmyiw7Bd+rXgs6nX9ro2s1iUVH62LQk2gLrl2NJO29fVSCoDQy4CDB9aaMmkYGBMeFAlWQbEryp0747ImwLlcdaQc+KYJ9ZC4/LK+HITyegT+bA4vu1z0qTo0M51swZr15JXKGS8H5Q8tvMxHafB3/re5EBMkSwvikA3L7rQ3P9XHi4iVfkKsRhCmXYdYWgxV/dpmQ2QHQYbW6xEsjUgqcWnFl79XFehSEdcYYNLW1ZdB00LU5DLxkGhVn7bRPfTmXuu+AzRm718AVfsBw3eKV48wY0h/wHHtgc/AVmmZzrS4qAofXR+tJ1pVFAkmGljkDcmH8PDn81+jnTw8NCZPp8WNY9VSt5qcaUrb1sxdcYUHDVNYcAkXLstx5PC6v31+bwUIDISUfcAC5jWmifxHBxf7kwsWTxXnaMN0q95tpmONTRuSWe2pkGJyxXfxHwy1TOUqCewKu0YTcg8Jg+9yQ7+mUyeQuZknAqjURxUP4+0l01lih14811wstfQePFje9u7TUBODxUXHRWV43/sw/0mnQpRQzAik1jTlsI3KfnXrFLIH3dlOIR08byD5JyHyMSqihYq1PV5rv5syntuPapDX1PbsFvCAGSJGWfA9v1ISWMJy1TFHdneCYVPcmtevZJ4JiOV/g5KvNfIZvL7V1gwMqyjGk9mSUSnORuy9iZOtmMNw3OxH7xbmj1EQGCsPza//Fh1iYYU9H6uZHn019x8ZUzzgUMFF7Wh8sdKzVrfWhxy2QXKAGBxXaXraNsKXGcaI1foMpUwNTkgZZkJJQyo58djdrVKIEmmVM9GuZnG0xZIr5m4f8kYZ1kHKP3NKg/Ymf6ilQCcqDPRl220aKZfoquu58voyhuNae9Ok2J/liWAvfo/v8ptQf6BbIKPr6jHe8ccHwPJchjcfrDaS2IPUERtGL7pDu3A0Pztnk4iNVpWnnHbREw3Kp9eRPDmtWcp3u7ccW/ck0DiOFHlAuTQDgZTu7RY+WGsoPGUxJMcgLDXfMqGGA65B9S1B X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR04MB8147.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(19092799006)(376014)(52116014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EZ04Dym2EFFTySd5IY1KOba5Z/BL5r+qUcbL4xPSq8HrUHhOpBu7qk/Q2dsKrZHAmoaIdaNNO+qF4rnvJjh/BRnvAFJhQTo/amsEkpOKw7hEITi4FsYDycShyDRgWGYsd4aj19ohBRebEJg7qq8qv6WxyK/gKUqViPCm/+kV+gGvMDHD4Ts366YQkPbp4BXFcZbROzYztyFTiMGBori59vO1d6vZTAl+119oA5oeXJ8aWBU1Rpwyi+rfCEyi8R0D6CHRwSOz5AY9wVt3a2Lb5KPHrbsLzAnpnOojdSbeB6nwTMMtIFaDB4r2qnUAi713IgkqN54EiC6cbOg0DdXrLE5i7/SHDRvsuaCogvxgZWLZ0CpuUVlCWK1KdEnDhtznZdfCwLbnsclTjstvXwLOcqxDyzW6l2B76T/2h+AmVnAMrzrHnTN2BE74GOpW7ZVA8F+jwtzZUcLuf4EYGtIwP2f0SLHJymzoAgQinVhBh3QvrP750dp6wTYXomE+eDQBx2GTBBqbIyetikUhBjptBvj1PvYzEgUIPfvVjuaUE56hlUo5scYbc09XmDGGw+6U7abrqNdCotpOhXDosoMAwCDxkrtbW1usEJzkW9bSI80ombo2eLML14c3l4uuEnZttJJqxUdRvzUoNcyXULT8C4Ve6LIygED5/3HEcwxefgrNsVsbsUDb3A01lYrwF708k2qpvtga0CUVw3tvFhy4WAfIchIgHV3SUw375Nf5Kr3K4M+k+YzrWeCdHXy4nlSLRNk4Iiy3T+0LX8Hn1njdqToY9n09+F3qIfSHExTBP193AOLmL5VqT0gmrZ1MQLiKjVobQOxqjwEiCR4fsUnsJbCRSaV1wdugTQYvTL+VPVl3SDU4xqnhbkkyML6GMoohrht1GGnp5iEuQWcGjITPCCcQHL7u0vyupx7/dlqWtQ2okIYpKdf/+gOwVpOuWA3eOhCKpjkHz9oiGVTnsnD1YKu6iZSIrVqy8ENYxk+CxOtLL0x8HkgKaUm05LS+ohh/89HGuLm51naOhFOBO3RcRWiaMEvBVQssFJ/vDgNCEH6JSoK4AQ0Xth1/7yZUqg7brB0pmNqcZ1nCcarnUUWytHJN6e6ATF2nRiKIb38FAVYwnsIPZAGT2knvUXGYfN+yEjSZNSvE2peMNg/JEwEp2PgW7a0adgxiGFz2XGpGpe/Yx4U3cpCfXbCjyRjAK6b0FNdAmwqoEPcD78H/UA78PWrCJWJfIm0SdkwyDsIZAabAYnckrGV363i4viZDu4753fPzdGPQY+PaTRQNx1oIPuHR/axiCeJ0SokiV3TLGhnb86taAoEt1cEnFFic3v7GcYl2cHKPbQc+KT991eft6z1hHJH+cW1vhZzQjk07L0xXY+R61aw0MC942lm1moIP458R4Lm6keTnlavaAonHyKZ+ltOW1X0zt0coWyhMM5GemXZ2V49od/vV5Z1varKaHa/Ncytp17pMjwmvEsdOM9bmnk/gNflztQpvDCtfYmh0cJ2UN5Vjpd7pJBAScEIMqJD4FBKrIjY7axU00ei+bQs7eAuao8JGZjgCF/m7vxytEwdAT59hWqsEWYhOMuY+tb6qpqfX9wBYUmtShIIYsg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ecc2430-0161-484a-6127-08de0cc89ffc X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8147.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2025 15:28:15.1766 (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: akZWg5LNueQnnh4lrS6IjcP5/2beY9CNREkFSJ0DlEzWJBznxxgLAPNpmhjNrlDWlvyQFGH8w92SB43T/8jZxM0rGDMi8Vk7PVTv9NxsqD4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR04MB11571 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" The CameraSensor::imageStream() function has a default implementation in the base class that returns {0, 0} as {pad, stream}, assuming that the image pad is located on the pad index 0. This assumption is correct most of the time, but not in some other cases, for instance when an external ISP entity acts as the sensor. Such entity would typically have sink pad(s) connected to the actual sensor and source pad(s) connected to the downstream graph. Associated pad indexes would likely be different from zero. CameraSensorLegacy subclass correctly handles this case in its functions, using the pad_ variable discovered at init() time to access the source pad index, instead of using a hardcoded zero value. Exception is imageStream() that is not overriden in the CameraSensorLegacy definition so keeps the default implementation of the parent class, hardcoding the returned source pad index to zero. This change declares CameraSensor::imageStream() as a pure virtual to let the subclasses provide an implementation. Implementation for CameraSensorLegacy is added, based on pad_ variable usage. Signed-off-by: Julien Vuillaumier --- include/libcamera/internal/camera_sensor.h | 2 +- src/libcamera/sensor/camera_sensor.cpp | 4 ---- src/libcamera/sensor/camera_sensor_legacy.cpp | 6 ++++++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index f6ef4df1..eed919a1 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -64,7 +64,7 @@ public: Transform transform = Transform::Identity, V4L2SubdeviceFormat *sensorFormat = nullptr) = 0; - virtual V4L2Subdevice::Stream imageStream() const; + virtual V4L2Subdevice::Stream imageStream() const = 0; virtual std::optional embeddedDataStream() const; virtual V4L2SubdeviceFormat embeddedDataFormat() const; virtual int setEmbeddedDataEnabled(bool enable); diff --git a/src/libcamera/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp index 4f2fd269..50f2b98d 100644 --- a/src/libcamera/sensor/camera_sensor.cpp +++ b/src/libcamera/sensor/camera_sensor.cpp @@ -209,10 +209,6 @@ CameraSensor::~CameraSensor() = default; * * \return The image source stream */ -V4L2Subdevice::Stream CameraSensor::imageStream() const -{ - return { 0, 0 }; -} /** * \brief Retrieve the embedded data source stream diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp index f9e685a9..a75c8457 100644 --- a/src/libcamera/sensor/camera_sensor_legacy.cpp +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp @@ -84,6 +84,7 @@ public: Transform transform = Transform::Identity, V4L2SubdeviceFormat *sensorFormat = nullptr) override; + V4L2Subdevice::Stream imageStream() const override; const ControlList &properties() const override { return properties_; } int sensorInfo(IPACameraSensorInfo *info) const override; Transform computeTransform(Orientation *orientation) const override; @@ -855,6 +856,11 @@ int CameraSensorLegacy::applyConfiguration(const SensorConfiguration &config, return 0; } +V4L2Subdevice::Stream CameraSensorLegacy::imageStream() const +{ + return { pad_, 0 }; +} + int CameraSensorLegacy::sensorInfo(IPACameraSensorInfo *info) const { if (!bayerFormat_)