{"id":23954,"url":"https://patchwork.libcamera.org/api/1.1/covers/23954/?format=json","web_url":"https://patchwork.libcamera.org/cover/23954/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250725-multicontext-v1-0-ea558291e101@ideasonboard.com>","date":"2025-07-25T10:33:45","name":"[0/9] libcamera: Support for multi-context operations","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/1.1/people/143/?format=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/23954/mbox/","series":[{"id":5329,"url":"https://patchwork.libcamera.org/api/1.1/series/5329/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5329","date":"2025-07-25T10:33:45","name":"libcamera: Support for multi-context operations","version":1,"mbox":"https://patchwork.libcamera.org/series/5329/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/23954/comments/","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 2676CC3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 25 Jul 2025 10:34:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C0712690B2;\n\tFri, 25 Jul 2025 12:33:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 58F7869071\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 25 Jul 2025 12:33:57 +0200 (CEST)","from [192.168.0.172] (mob-5-90-139-29.net.vodafone.it\n\t[5.90.139.29])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 791F878E;\n\tFri, 25 Jul 2025 12:33:17 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"h98uesZN\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1753439597;\n\tbh=OyxdGg/MnzknpPmqu3CZEm0TiSWf8wMZKkhjSJR7zsc=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=h98uesZNtFBp/IaoVrEU0DXOXd+QxE65YFa9k56LEFQ/C1O1UkoyW1RQrYTYJ9IXF\n\tLiz7nPFWgbyfZKqDaJWibqoSb735JehC7KbEEaDQaRhuILePdRjbOK02+B8h2Yu7vT\n\tnKmQGcdK2f3Zj/kbzN/cLDwUlBGNYUnT21JV9RG8=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Subject":"[PATCH 0/9] libcamera: Support for multi-context operations","Date":"Fri, 25 Jul 2025 12:33:45 +0200","Message-Id":"<20250725-multicontext-v1-0-ea558291e101@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","X-B4-Tracking":"v=1; b=H4sIAIldg2gC/6tWKk4tykwtVrJSqFYqSi3LLM7MzwNyDHUUlJIzE\n\tvPSU3UzU4B8JSMDI1MDcyMT3dzSnJLM5Py8ktSKEt0U8zQLE1Mzo6S0JHMloJaCotS0zAqwcdG\n\txtbUAmvKHEF4AAAA=","X-Change-ID":"20250724-multicontext-d7f84562bfb7","To":"libcamera-devel@lists.libcamera.org","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","X-Mailer":"b4 0.14.2","X-Developer-Signature":"v=1; a=openpgp-sha256; l=3073;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=OyxdGg/MnzknpPmqu3CZEm0TiSWf8wMZKkhjSJR7zsc=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBog12Th7TKVXBBA/c9Qhk7D9tokzC/FXyURN5tm\n\tpr5UDrYILCJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaINdkwAKCRByNAaPFqFW\n\tPPDvD/97Q8WD07iQqKwo3JPnS0m7LY6QE5WVywUsuv2BK4RbtsqvcE20H7MWhL2b0GziKNA69PB\n\tHjjXF9t+90VwWFs/ju1IK7h0YwUfVHRE/+D/I+GkT6Qv+yGAZ6+jdpZ75JknfVj4ORX/xkPM7EU\n\tFUXNWGTRtf6WliUdRke0UM+get0kyYhVnXR2b0yw6tD1dkGbigsS+hqShFnyNPBUYMj8ij9P/iL\n\tYwDziVWBDtzjnLJuytUfLJvkLvxtB6PzHAzcz6aNr7/z674jUeY1GxSzo1DPd9lNWwSMvuRn1Vf\n\tDwwjQH5I8w19qjhNdrjA1XNP6SWGmRDGKA15WhgzUs+++DbPfZ4ZM+g5o7TS5CAYBO+VlZMok7H\n\tsSwEOcI8kcY96CEh3q8rSzmmMR6ZL/2i+dk4MQTzUpc3cAywY3h8xcS1fRkp7iynU2G/bi21a8R\n\tWSqW/Xm8etYC28lQ/zqOH0jBo7uiq75vF0yOCo0240jskYT36QCJftzdaP5/qsKzR6PC0Aa/Ag+\n\t9SLs28PyndwTJ7H1fyccMDQ1pq9S2alklQBz8UA72fXbfD1awkCY6Oan633BRxrIJqGbDCCoovb\n\tZKA/y/O/zOQ7brEGYgOWxbOGsZIVPdYUkAR9bqXag2/QUHYWF/38F9i9o3pDP0gtfscOSpIUyuv\n\ttYwXwAQHNugT0mg==","X-Developer-Key":"i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=72392EDC88144A65C701EA9BA5826A2587AD026B","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Support for multi-context operations has been introduced in the Linux\nkernel by patch series\nhttps://patchwork.linuxtv.org/project/linux-media/list/?series=17092\n\nThis series adds support in libcamera for operating a media device\nusing multi-context support.\n\nThe key design point is around the unique ownership of a media device.\nCurrently the MediaDevice class allows a single user to \"acquire\" and\n\"lock\" it for exclusive use, to avoid concurrently running instances of\nlibcamera to operate the same media graph.\n\nWith multi-context support this constraint is not valid anymore, and a\nmedia device that supports multi-context operations can be operated as\nmany times as the kernel driver allows to.\n\nTo represent this, introduce a SharedMediaDevice class that derives from\nMediaDevice and that implements the \"acquire\" and \"lock\" operations as\nnop.\n\nAlso introduce a MediaContext class that can be created both from a\nMediaDevice and from a SharedMediaDevice and that allows to bind\ndevices together.\n\nMediaContext created from MediaDevice implements binding as a nop. This\nis not an issue as a single instance of a MediaDevice can be created and\nhence bindings is effectively only called once.\n\nA MediaContext created from a SharedMediaDevice allows instead to\nperform proper binding of devices and create an isolated execution\ncontext.\n\nTested on Pi5 both with the multi-context kernel support series applied\nand without to validate that the series doesn't break existing users and\ncan be used on both multi-context aware systems and context unaware\nones.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\nJacopo Mondi (9):\n      include: linux: Update media.h with media flags\n      include: linux: videodev2: Add BIND_CONTEXT\n      include: linux: v4l2-subdev: Add SUBDEV_BIND_CONTEXT\n      libcamera: v4l2_videodevice: Add bind context\n      libcamera: v4l2_subdevice: Add bind context\n      libcamera: media-device: Introduce SharedMediaDevice\n      libcamera: media-device: Introduce MediaContext\n      [DNI] libcamera: rpi/pisp: Bind devices in a context\n      [DNI]: rpi/pisp: Set format and bind ISP subdev\n\n include/libcamera/internal/media_device.h     |  62 +++++-\n include/libcamera/internal/v4l2_subdevice.h   |   2 +\n include/libcamera/internal/v4l2_videodevice.h |   2 +\n include/linux/media.h                         |   6 +-\n include/linux/v4l2-subdev.h                   |  11 ++\n include/linux/videodev2.h                     |  10 +\n src/libcamera/device_enumerator.cpp           |   8 +-\n src/libcamera/media_device.cpp                | 274 ++++++++++++++++++++++++++\n src/libcamera/pipeline/rpi/pisp/pisp.cpp      |  72 ++++++-\n src/libcamera/v4l2_subdevice.cpp              |  18 ++\n src/libcamera/v4l2_videodevice.cpp            |  18 ++\n 11 files changed, 472 insertions(+), 11 deletions(-)\n---\nbase-commit: b65df7e7554b45e2d3d7fdb5b37c2ab7df3db4fe\nchange-id: 20250724-multicontext-d7f84562bfb7\n\nBest regards,"}