Cover Letter Detail
Show a cover letter.
GET /api/covers/24237/?format=api
{ "id": 24237, "url": "https://patchwork.libcamera.org/api/covers/24237/?format=api", "web_url": "https://patchwork.libcamera.org/cover/24237/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20250827090739.86955-1-david.plowman@raspberrypi.com>", "date": "2025-08-27T09:07:27", "name": "[RFC,00/12] Bayer Re-Processing", "submitter": { "id": 42, "url": "https://patchwork.libcamera.org/api/people/42/?format=api", "name": "David Plowman", "email": "david.plowman@raspberrypi.com" }, "mbox": "https://patchwork.libcamera.org/cover/24237/mbox/", "series": [ { "id": 5407, "url": "https://patchwork.libcamera.org/api/series/5407/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5407", "date": "2025-08-27T09:07:27", "name": "Bayer Re-Processing", "version": 1, "mbox": "https://patchwork.libcamera.org/series/5407/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/24237/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 2A927BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 27 Aug 2025 09:07:48 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 160E3692F3;\n\tWed, 27 Aug 2025 11:07:46 +0200 (CEST)", "from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com\n\t[IPv6:2a00:1450:4864:20::32b])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 31232613C0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Aug 2025 11:07:44 +0200 (CEST)", "by mail-wm1-x32b.google.com with SMTP id\n\t5b1f17b1804b1-45b618e067eso4399805e9.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Aug 2025 02:07:44 -0700 (PDT)", "from raspberrypi.pitowers.org\n\t([2a00:1098:3142:1f:ffc9:aff6:7f7f:893b])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-45b6f30fe02sm21498675e9.18.2025.08.27.02.07.42\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 27 Aug 2025 02:07:42 -0700 (PDT)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"nCPb1g2D\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1756285663; x=1756890463;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=DBBpe5+K6tnxVPuQLBB6ru6GrDYTmJQWihCc8f2uYUo=;\n\tb=nCPb1g2Dc3Poo4CWCO+LK0kwmm71wn756nWASArqGGYcsDsJyaxUNAq74vC3g++/dW\n\t0M8RAtNBuR7CW5Qmf3F/radPuSb2+Ys8whftoyhVyB9WOdWAWf4j+Jj9J0XYXw40bnKe\n\tTLogB04ePEYSpQzruhLb92rSXtSJ1koEc5Sli27/hc/hGO2FVHV83i/XkwmPaigxvNLS\n\tuwfWk4KOHN2SAxPAQV53xKcgAVHMClCGR5gTaqkbmLFEOyZ87/MYTXQwbX8j6BVt80GQ\n\tpkwTZ7BsxdMew40VlG4edpT4SrUovkhSx0zVIwE7xn3bQk8GQJ4k4xxI4lfNRt16Mz80\n\tdjUg==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1756285663; x=1756890463;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=DBBpe5+K6tnxVPuQLBB6ru6GrDYTmJQWihCc8f2uYUo=;\n\tb=BI75whDdRSUVQce7odbdfXgI+O1sJZANehiWvNf95fPJuPDKwDumDcNa9yYltMfK0K\n\tUN1dYqCxxhlXXHfRPz2Ac2A5+5rubsElKdaqha/Dsx8DhZvgjap84YY+MTpXZT1tpV7F\n\tOqvqmQa+Cf7PiJ7FM389esA5rRKobzOd0J95I0Rvl8jRV8BUwL7e6UhFI+MfWyhlexxg\n\tInZhNSEMTEN5fuiPu72DfRhqZnu3gjNUtCAF0AF/CoeU7W0EcwcvixLY4lbTfNx/KxE3\n\ttH015NpbUFItji7CkTw67ugVt0qPNayrMtCoSf2z4+EWwiFOMcsw7qUWKPYptdOO2ThV\n\tPRkw==", "X-Gm-Message-State": "AOJu0YxyvHE41j7E/Ab586QVnhb5lyElCy1j1+zEHMpsQLxN387igzcI\n\tfkt4aD87k7ASIm9/Dkaihjpv6EcJ09uVeua/Oe+d0kPlLlk/jQzssbCsOt/EL/lZGzxTclKs7bD\n\t+2Bkq", "X-Gm-Gg": "ASbGnctcpHZemsV9I4D1gA0yktYy/cxyb9tei9/rivetEXNpRzClmoImc3CiMIXifJe\n\tScC3Juju+hvFp6N5SbDqGdyTUuClhKcgm7DvZawX+Z0ZzndtQFuMGgUeQwI/tlYfO+7+bqhKnu6\n\twzQHmQzBiecLRhqS5pXez+vXK2qzo0JfLxE00T5woh5bfoeYzkZ91LeLtSVPoddCn5Lqz1AcA81\n\tjp1kIEduKF+KaZ9DCI4FIngLwEzfNXpmtEZE5t5N9RDXnOyS7pMVilKj8fwWYcG77EIdcxnSjQl\n\tMe5f+rhcFA2Q7jnUob6vpAw3eQKtCZjHYqnkUcxm6R+IrA3bVhLSlhkL4bOqHbX8emhBR3QD8TH\n\tGBF1GXz7pwUuXELx/Zsi1MNagz9UCwEl0c9Mg6daeppHRLBgr2H0dYUpKloc1+Zv1BZnEq79yxz\n\tEtypcbpETdHz1PS7XxdNwvLMIKlbY0J1OLitVPizYnQD2OUTAJZw==", "X-Google-Smtp-Source": "AGHT+IHBOLnKXpC60fElg1azyjodzkOJBNXMvnrQQHj4aVH9DAAkRa5RrSGF9dPr/UKT1sy8LtBrLg==", "X-Received": "by 2002:a05:600c:19ca:b0:45b:47e1:ef7b with SMTP id\n\t5b1f17b1804b1-45b6870e3dfmr47682175e9.17.1756285663087; \n\tWed, 27 Aug 2025 02:07:43 -0700 (PDT)", "From": "David Plowman <david.plowman@raspberrypi.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "David Plowman <david.plowman@raspberrypi.com>", "Subject": "[RFC PATCH 00/12] Bayer Re-Processing", "Date": "Wed, 27 Aug 2025 10:07:27 +0100", "Message-Id": "<20250827090739.86955-1-david.plowman@raspberrypi.com>", "X-Mailer": "git-send-email 2.39.5", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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": "Hi everyone\n\nWell, I'm pleased to let folks know that the hoary subject of Bayer\nRe-Processing is finally making some progress. How much, I'll let you\njudge for yourselves, but nonetheless I'm hoping that some progress is\nbetter than none at all!\n\nWhat do these patches do?\n\nThere are two main things going on here.\n\nFirstly, there is the ability to make a \"memory camera\". A \"memory\ncamera\" is the gateway to Bayer re-processing, because it gives you\naccess to your hardware ISP as a memory-to-memory device. You can\nqueue requests to it much as you do with regular cameras, only in this\ncase, the raw stream is an input to the system and not an output\n(there's a new \"raw input\" stream role).\n\nSecondly, the Raspberry Pi pipeline handler is updated to cope with\nmemory cameras and these slightly different kinds of requests.\n\nThe first 5 patches or so are mostly introducing memory cameras, how\nwe create them, and adding some general helper classes (such as the\nCameraSensorMemory to use in place of the CameraSensorRaw) which make\nthe rest of the code work with fewer interventions. They are not, or\nare not particularly, concerned with the Raspberry Pi (though I do\ntake some Pi code from somewhere and move it to the BayerFormat\nclass).\n\nThe remaining patches are then pretty much all for the Pi PH and\nIPA. Having thought initially that I might re-factor stuff more\ngenerally, I've backed away from that and am using the same PH for\nregular and memory cameras. There are some places where I've gathered\nup the Front End / Back End stuff and moved them into separate\nfunctions, which does limit the collateral damage somewhat. There is\nsupport only for the PiSP platform (Pi 5) not the older VC4 platform\n(all other devices). I can't say it's all lovely, but you know, nor\nis it the biggest skeleton ever to inhabit my closet!\n\nAs I said, this code runs and works. If you want to try it:\n\nYou can find a libcamera branch with these patches here:\nhttps://github.com/davidplowman/libcamera/tree/reprocessing\n\nYou can find a program that uses a memory camera (to convert DNG files\nto JPEGs) here:\nhttps://github.com/davidplowman/libcamera-apps/blob/reprocessing/apps/rpicam_convert.cpp\n(check out and build that code branch).\n\nObviously I'm always wanting feedback, particularly on the not-so-Pi\nchanges - namely how people would like to present memory cameras\nwithin libcamera, and have users interact with them.\n\nThanks!\n\nDavid\n\nDavid Plowman (12):\n libcamera: Infrastructure to ask for \"memory\" cameras\n libcamera: Add BayerFormat::toMbusCode\n pipeline: rpi: pisp: Use the new BayerFormat::toMbusCode() instead\n libcamera: Add a direction (input or output) to the stream\n configuration\n libcamera: sensor: Add CameraSensorMemory class\n ipa: rpi: cam_helper: Add CamHelperDefault class\n libcamera: pipeline: rpi: Allow creation of the first \"memory\" camera\n pipeline: rpi: Allow generation of raw input configurations\n libcamera: Don't wait for input streams to complete\n ipa: rpi: Support memory cameras\n pipeline: rpi: Support memory cameras\n pipline: rpi: Support memory cameras processing requests\n\n include/libcamera/camera_manager.h | 4 +\n include/libcamera/internal/bayer_format.h | 1 +\n include/libcamera/internal/camera_manager.h | 5 +\n include/libcamera/internal/camera_sensor.h | 2 +\n .../libcamera/internal/camera_sensor_memory.h | 109 +++++\n include/libcamera/internal/meson.build | 1 +\n include/libcamera/internal/pipeline_handler.h | 8 +\n include/libcamera/stream.h | 10 +\n src/ipa/rpi/cam_helper/cam_helper_default.cpp | 45 ++\n src/ipa/rpi/cam_helper/meson.build | 1 +\n src/ipa/rpi/common/ipa_base.cpp | 135 ++++--\n src/ipa/rpi/common/ipa_base.h | 5 +\n src/libcamera/bayer_format.cpp | 124 +++++\n src/libcamera/camera_manager.cpp | 40 ++\n .../pipeline/rpi/common/pipeline_base.cpp | 99 +++-\n .../pipeline/rpi/common/pipeline_base.h | 5 +-\n src/libcamera/pipeline/rpi/pisp/pisp.cpp | 459 ++++++++++++------\n src/libcamera/request.cpp | 4 +-\n src/libcamera/sensor/camera_sensor_memory.cpp | 237 +++++++++\n src/libcamera/sensor/meson.build | 1 +\n src/libcamera/stream.cpp | 7 +-\n 21 files changed, 1101 insertions(+), 201 deletions(-)\n create mode 100644 include/libcamera/internal/camera_sensor_memory.h\n create mode 100644 src/ipa/rpi/cam_helper/cam_helper_default.cpp\n create mode 100644 src/libcamera/sensor/camera_sensor_memory.cpp" }