Show a patch.

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

{
    "id": 9057,
    "url": "https://patchwork.libcamera.org/api/patches/9057/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/9057/",
    "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": "<20200729092122.3765539-4-niklas.soderlund@ragnatech.se>",
    "date": "2020-07-29T09:21:20",
    "name": "[libcamera-devel,v4,3/5] libcamera: camera: Generate camera name from a CameraSensor",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "edb3f45d1c5be2d566cf22bee28ec062286e9f07",
    "submitter": {
        "id": 5,
        "url": "https://patchwork.libcamera.org/api/people/5/?format=api",
        "name": "Niklas Söderlund",
        "email": "niklas.soderlund@ragnatech.se"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/9057/mbox/",
    "series": [
        {
            "id": 1159,
            "url": "https://patchwork.libcamera.org/api/series/1159/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1159",
            "date": "2020-07-29T09:21:17",
            "name": "libcamera: Generate unique and stable camera names",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/1159/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/9057/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/9057/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 96565BD878\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 29 Jul 2020 09:21:41 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2917661A0E;\n\tWed, 29 Jul 2020 11:21:40 +0200 (CEST)",
            "from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net\n\t[195.74.38.228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 226B1616FF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jul 2020 11:21:38 +0200 (CEST)",
            "from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA\n\tid b9baaf60-d17c-11ea-86ee-0050569116f7;\n\tWed, 29 Jul 2020 11:20:21 +0200 (CEST)"
        ],
        "X-Halon-ID": "b9baaf60-d17c-11ea-86ee-0050569116f7",
        "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 11:21:20 +0200",
        "Message-Id": "<20200729092122.3765539-4-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20200729092122.3765539-1-niklas.soderlund@ragnatech.se>",
        "References": "<20200729092122.3765539-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v4 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 to generate a unique\nand persistent name.\n\nAll pipelines that use a CameraSensor (all but UVC) are updated to make\nuse of this new function. All names of cameras created by these updated\npipelines 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>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n* Changes since v3\n- Update commit message.\n- Do not include property_ids.h.\n---\n include/libcamera/camera.h                     |  5 +++++\n src/libcamera/camera.cpp                       | 18 ++++++++++++++++++\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, 34 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..02e2369ef0089465 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -14,6 +14,7 @@\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 +474,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",
        "v4",
        "3/5"
    ]
}