Show a patch.

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

{
    "id": 332,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/332/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/332/",
    "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": "<20190122232955.31783-3-niklas.soderlund@ragnatech.se>",
    "date": "2019-01-22T23:29:54",
    "name": "[libcamera-devel,2/3] libcamera: pipelines: keep reference to cameras created",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "8c57dabec2b8ae26d07fa4b298bcf544a431280b",
    "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/332/mbox/",
    "series": [
        {
            "id": 117,
            "url": "https://patchwork.libcamera.org/api/1.1/series/117/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=117",
            "date": "2019-01-22T23:29:52",
            "name": "libcamera: add association between Camera and PipelineHandlers",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/117/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/332/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/332/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net\n\t[195.74.38.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2F9C460C81\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 23 Jan 2019 00:30:44 +0100 (CET)",
            "from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid bb2411cb-1e9d-11e9-874f-005056917f90;\n\tWed, 23 Jan 2019 00:30:41 +0100 (CET)"
        ],
        "X-Halon-ID": "bb2411cb-1e9d-11e9-874f-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, 23 Jan 2019 00:29:54 +0100",
        "Message-Id": "<20190122232955.31783-3-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20190122232955.31783-1-niklas.soderlund@ragnatech.se>",
        "References": "<20190122232955.31783-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 2/3] libcamera: pipelines: keep reference\n\tto cameras created",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.23",
        "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>",
        "X-List-Received-Date": "Tue, 22 Jan 2019 23:30:44 -0000"
    },
    "content": "The pipeline handlers needs to keep a reference to the cameras it\ncreates in order to notify it when it's being disconnected. When\nhot-unplug support is added the pipeline handler would be deleted when\nthe hardware is removed from under it.\n\nAfter the deletion of pipeline handler all the Camera objects created by\nthe pipeline handler might still be around as they might be in use by a\napplication. At this point the pipeline handler should inform the camera\nthat it's disconnected.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n src/libcamera/pipeline/ipu3/ipu3.cpp |  7 ++++++-\n src/libcamera/pipeline/uvcvideo.cpp  | 10 +++++++---\n src/libcamera/pipeline/vimc.cpp      | 11 +++++++----\n 3 files changed, 20 insertions(+), 8 deletions(-)",
    "diff": "diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 48d028f7e6cd9b4d..19f73011f8b75438 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -32,6 +32,8 @@ private:\n \tMediaDevice *cio2_;\n \tMediaDevice *imgu_;\n \n+\tstd::vector<std::shared_ptr<Camera>> cameras_;\n+\n \tvoid registerCameras(CameraManager *manager);\n };\n \n@@ -42,6 +44,8 @@ PipelineHandlerIPU3::PipelineHandlerIPU3()\n \n PipelineHandlerIPU3::~PipelineHandlerIPU3()\n {\n+\tcameras_.clear();\n+\n \tif (cio2_)\n \t\tcio2_->release();\n \n@@ -173,7 +177,8 @@ void PipelineHandlerIPU3::registerCameras(CameraManager *manager)\n \t\tstd::string cameraName = sensor->name() + \" \" + std::to_string(id);\n \t\tstd::shared_ptr<Camera> camera = Camera::create(cameraName,\n \t\t\t\t\t\t\t\tthis);\n-\t\tmanager->addCamera(std::move(camera));\n+\t\tcameras_.push_back(camera);\n+\t\tmanager->addCamera(camera);\n \n \t\tLOG(IPU3, Info)\n \t\t\t<< \"Registered Camera[\" << numCameras << \"] \\\"\"\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex 3651250b683e7810..2162824eb571fba7 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -24,15 +24,19 @@ public:\n \n private:\n \tMediaDevice *dev_;\n+\tstd::shared_ptr<Camera> camera_;\n };\n \n PipelineHandlerUVC::PipelineHandlerUVC()\n-\t: dev_(nullptr)\n+\t: dev_(nullptr), camera_(nullptr)\n {\n }\n \n PipelineHandlerUVC::~PipelineHandlerUVC()\n {\n+\tif (camera_)\n+\t\tcamera_ = nullptr;\n+\n \tif (dev_)\n \t\tdev_->release();\n }\n@@ -48,8 +52,8 @@ bool PipelineHandlerUVC::match(CameraManager *manager, DeviceEnumerator *enumera\n \n \tdev_->acquire();\n \n-\tstd::shared_ptr<Camera> camera = Camera::create(dev_->model(), this);\n-\tmanager->addCamera(std::move(camera));\n+\tcamera_ = Camera::create(dev_->model(), this);\n+\tmanager->addCamera(camera_);\n \n \treturn true;\n }\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 81d8319eb88e06d2..373fc0ee5339f9ae 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -24,15 +24,19 @@ public:\n \n private:\n \tMediaDevice *dev_;\n+\tstd::shared_ptr<Camera> camera_;\n };\n \n PipeHandlerVimc::PipeHandlerVimc()\n-\t: dev_(nullptr)\n+\t: dev_(nullptr), camera_(nullptr)\n {\n }\n \n PipeHandlerVimc::~PipeHandlerVimc()\n {\n+\tif (camera_)\n+\t\tcamera_ = nullptr;\n+\n \tif (dev_)\n \t\tdev_->release();\n }\n@@ -57,9 +61,8 @@ bool PipeHandlerVimc::match(CameraManager *manager, DeviceEnumerator *enumerator\n \n \tdev_->acquire();\n \n-\tstd::shared_ptr<Camera> camera = Camera::create(\"Dummy VIMC Camera\",\n-\t\t\t\t\t\t\tthis);\n-\tmanager->addCamera(std::move(camera));\n+\tcamera_ = Camera::create(\"Dummy VIMC Camera\", this);\n+\tmanager->addCamera(camera_);\n \n \treturn true;\n }\n",
    "prefixes": [
        "libcamera-devel",
        "2/3"
    ]
}