Show a patch.

GET /api/1.1/patches/9051/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 9051,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/9051/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/9051/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20200728234225.3505868-3-niklas.soderlund@ragnatech.se>",
    "date": "2020-07-28T23:42:23",
    "name": "[libcamera-devel,v3,3/5] libcamera: camera: Generate camera name from a CameraSensor",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "b0083f0ae7a9baf1f0b72da74f46aa3bfe193356",
    "submitter": {
        "id": 5,
        "url": "https://patchwork.libcamera.org/api/1.1/people/5/?format=api",
        "name": "Niklas Söderlund",
        "email": "niklas.soderlund@ragnatech.se"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/9051/mbox/",
    "series": [
        {
            "id": 1158,
            "url": "https://patchwork.libcamera.org/api/1.1/series/1158/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1158",
            "date": "2020-07-28T23:37:39",
            "name": "libcamera: Generate unique and stable camera names",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/1158/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/9051/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/9051/checks/",
    "tags": {},
    "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 5F2F8BD86F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Jul 2020 23:42:43 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 389DE616FF;\n\tWed, 29 Jul 2020 01:42:43 +0200 (CEST)",
            "from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net\n\t[195.74.38.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AB7E2611A2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 01:42:39 +0200 (CEST)",
            "from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid 055aadd4-d12c-11ea-8fb8-005056917f90;\n\tWed, 29 Jul 2020 01:42:38 +0200 (CEST)"
        ],
        "X-Halon-ID": "055aadd4-d12c-11ea-8fb8-005056917f90",
        "Authorized-sender": "niklas@soderlund.pp.se",
        "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Wed, 29 Jul 2020 01:42:23 +0200",
        "Message-Id": "<20200728234225.3505868-3-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20200728234225.3505868-1-niklas.soderlund@ragnatech.se>",
        "References": "<20200728233744.3503740-1-niklas.soderlund@ragnatech.se>\n\t<20200728234225.3505868-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v3 3/5] libcamera: camera: Generate camera\n\tname from a CameraSensor",
        "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>",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Add a create() that generates a camera name from information in a\nCameraSensor. The intention is to help pipeline handlers that already\nuses CameraSensor to not have to worry about how generate unique and\npersistent name for cameras.\n\nAll pipelines that implements a CameraSensor (all but UVC) are updated\nto make use of this new function. All names of cameras created by these\nupdated pipelines are modified.\n\nBefore this change example of camera names:\n\n* OF based systems\n    ov5695 7-0036\n    ov2685 7-003c\n\n* ACPI based systems\n    ov13858 8-0010\n    ov5670 10-0036\n\nAfter this change the same cameras are:\n\n* OF based systems\n    base/i2c@ff160000/camera@36\n    base/i2c@ff160000/camera@3c\n\n* ACPI based systems\n    \\_SB_.PCI0.I2C2.CAM0\n    \\_SB_.PCI0.I2C4.CAM1\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h                    |  5 +++++\n src/libcamera/camera.cpp                      | 19 +++++++++++++++++++\n src/libcamera/pipeline/ipu3/ipu3.cpp          | 12 +++++-------\n .../pipeline/raspberrypi/raspberrypi.cpp      |  3 ++-\n src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  2 +-\n src/libcamera/pipeline/simple/simple.cpp      |  2 +-\n src/libcamera/pipeline/vimc/vimc.cpp          |  4 ++--\n 7 files changed, 35 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 4d1a4a9f52ec0fac..784510c9a79d44b9 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -19,6 +19,7 @@\n \n namespace libcamera {\n \n+class CameraSensor;\n class FrameBuffer;\n class FrameBufferAllocator;\n class PipelineHandler;\n@@ -73,6 +74,10 @@ public:\n \t\t\t\t\t      const std::string &name,\n \t\t\t\t\t      const std::set<Stream *> &streams);\n \n+\tstatic std::shared_ptr<Camera> create(PipelineHandler *pipe,\n+\t\t\t\t\t      const CameraSensor *sensor,\n+\t\t\t\t\t      const std::set<Stream *> &streams);\n+\n \tCamera(const Camera &) = delete;\n \tCamera &operator=(const Camera &) = delete;\n \ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex 69a1b4428e3f4eca..6ad746bc2ed4ee0a 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -11,9 +11,11 @@\n #include <iomanip>\n \n #include <libcamera/framebuffer_allocator.h>\n+#include <libcamera/property_ids.h>\n #include <libcamera/request.h>\n #include <libcamera/stream.h>\n \n+#include \"libcamera/internal/camera_sensor.h\"\n #include \"libcamera/internal/log.h\"\n #include \"libcamera/internal/pipeline_handler.h\"\n #include \"libcamera/internal/utils.h\"\n@@ -473,6 +475,23 @@ std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n \treturn std::shared_ptr<Camera>(camera, Deleter());\n }\n \n+/**\n+ * \\brief Create a camera instance\n+ * \\param[in] pipe The pipeline handler responsible for the camera device\n+ * \\param[in] sensor The sensor of the camera device\n+ * \\param[in] streams Array of streams the camera provides\n+ *\n+ * Create a camera with name generated from \\a sensor.\n+ *\n+ * \\return A shared pointer to the newly created camera object\n+ */\n+std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,\n+\t\t\t\t       const CameraSensor *sensor,\n+\t\t\t\t       const std::set<Stream *> &streams)\n+{\n+\treturn Camera::create(pipe, sensor->id(), streams);\n+}\n+\n /**\n  * \\brief Retrieve the name of the camera\n  * \\context This function is \\threadsafe.\ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex eb00eecfd10a89e4..72da6ed62a7f0de5 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -813,18 +813,16 @@ int PipelineHandlerIPU3::registerCameras()\n \t\t\t\t\t&IPU3CameraData::imguOutputBufferReady);\n \n \t\t/* Create and register the Camera instance. */\n-\t\tstd::string cameraName = cio2->sensor()->entity()->name();\n-\t\tstd::shared_ptr<Camera> camera = Camera::create(this,\n-\t\t\t\t\t\t\t\tcameraName,\n-\t\t\t\t\t\t\t\tstreams);\n-\n-\t\tregisterCamera(std::move(camera), std::move(data));\n+\t\tstd::shared_ptr<Camera> camera =\n+\t\t\tCamera::create(this, cio2->sensor(), streams);\n \n \t\tLOG(IPU3, Info)\n \t\t\t<< \"Registered Camera[\" << numCameras << \"] \\\"\"\n-\t\t\t<< cameraName << \"\\\"\"\n+\t\t\t<< camera->name() << \"\\\"\"\n \t\t\t<< \" connected to CSI-2 receiver \" << id;\n \n+\t\tregisterCamera(std::move(camera), std::move(data));\n+\n \t\tnumCameras++;\n \t}\n \ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex 82a0a4dfd6824fce..a62dd24b1ab76b87 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -972,7 +972,8 @@ bool PipelineHandlerRPi::match(DeviceEnumerator *enumerator)\n \tstreams.insert(&data->isp_[Isp::Stats]);\n \n \t/* Create and register the camera. */\n-\tstd::shared_ptr<Camera> camera = Camera::create(this, data->sensor_->model(), streams);\n+\tstd::shared_ptr<Camera> camera =\n+\t\tCamera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn true;\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 52a0d862417cc4ec..663e45b109aae9eb 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -971,7 +971,7 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)\n \n \tstd::set<Stream *> streams{ &data->stream_ };\n \tstd::shared_ptr<Camera> camera =\n-\t\tCamera::create(this, sensor->name(), streams);\n+\t\tCamera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn 0;\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 0bab5af86f05d63c..1258f81284590060 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -815,7 +815,7 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)\n \t\t\tcontinue;\n \n \t\tstd::shared_ptr<Camera> camera =\n-\t\t\tCamera::create(this, data->sensor_->entity()->name(),\n+\t\t\tCamera::create(this, data->sensor_.get(),\n \t\t\t\t       data->streams());\n \t\tregisterCamera(std::move(camera), std::move(data));\n \t}\ndiff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp\nindex 4f461b928514022d..e1fc087f111b0bc4 100644\n--- a/src/libcamera/pipeline/vimc/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc/vimc.cpp\n@@ -432,9 +432,9 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)\n \t\treturn false;\n \n \t/* Create and register the camera. */\n-\tstd::string name{ \"VIMC \" + data->sensor_->model() };\n \tstd::set<Stream *> streams{ &data->stream_ };\n-\tstd::shared_ptr<Camera> camera = Camera::create(this, name, streams);\n+\tstd::shared_ptr<Camera> camera\n+\t\t= Camera::create(this, data->sensor_, streams);\n \tregisterCamera(std::move(camera), std::move(data));\n \n \treturn true;\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "3/5"
    ]
}