Show a patch.

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

{
    "id": 331,
    "url": "https://patchwork.libcamera.org/api/patches/331/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/331/",
    "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": "<20190122232955.31783-2-niklas.soderlund@ragnatech.se>",
    "date": "2019-01-22T23:29:53",
    "name": "[libcamera-devel,1/3] libcamera: camera: create a association with the responsible pipeline handler",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "2cda9d610205374020cb0391cb322fd8c9fe2fe3",
    "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/331/mbox/",
    "series": [
        {
            "id": 117,
            "url": "https://patchwork.libcamera.org/api/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/331/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/331/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<niklas.soderlund@ragnatech.se>",
        "Received": [
            "from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1886B60C7D\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 ba9f5212-1e9d-11e9-874f-005056917f90;\n\tWed, 23 Jan 2019 00:30:40 +0100 (CET)"
        ],
        "X-Halon-ID": "ba9f5212-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:53 +0100",
        "Message-Id": "<20190122232955.31783-2-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 1/3] libcamera: camera: create a\n\tassociation with the responsible pipeline handler",
        "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 PipelineHandler which creates a Camera is responsible for serving\nany operation requested by the user. In order to do so the Camera needs\nto store a reference to its creator.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n include/libcamera/camera.h           |  8 ++++++--\n src/libcamera/camera.cpp             | 15 +++++++++------\n src/libcamera/pipeline/ipu3/ipu3.cpp |  3 ++-\n src/libcamera/pipeline/uvcvideo.cpp  |  2 +-\n src/libcamera/pipeline/vimc.cpp      | 10 ++--------\n 5 files changed, 20 insertions(+), 18 deletions(-)",
    "diff": "diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h\nindex 2ea1a6883311cf9f..d3bae4cbee1e0cea 100644\n--- a/include/libcamera/camera.h\n+++ b/include/libcamera/camera.h\n@@ -12,10 +12,13 @@\n \n namespace libcamera {\n \n+class PipelineHandler;\n+\n class Camera final\n {\n public:\n-\tstatic std::shared_ptr<Camera> create(const std::string &name);\n+\tstatic std::shared_ptr<Camera> create(const std::string &name,\n+\t\t\t\t\t      class PipelineHandler *pipe);\n \n \tCamera(const Camera &) = delete;\n \tvoid operator=(const Camera &) = delete;\n@@ -23,10 +26,11 @@ public:\n \tconst std::string &name() const;\n \n private:\n-\texplicit Camera(const std::string &name);\n+\texplicit Camera(const std::string &name, class PipelineHandler *pipe);\n \t~Camera();\n \n \tstd::string name_;\n+\tclass PipelineHandler *pipe_;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp\nindex acf912bee95cbec4..f198eb4978b12239 100644\n--- a/src/libcamera/camera.cpp\n+++ b/src/libcamera/camera.cpp\n@@ -52,17 +52,20 @@ namespace libcamera {\n /**\n  * \\brief Create a camera instance\n  * \\param[in] name The name of the camera device\n+ * \\param[in] pipe The pipeline handler responsible for the camera device\n  *\n  * The caller is responsible for guaranteeing unicity of the camera name.\n  *\n  * \\return A shared pointer to the newly created camera object\n  */\n-std::shared_ptr<Camera> Camera::create(const std::string &name)\n+std::shared_ptr<Camera> Camera::create(const std::string &name,\n+\t\t\t\t       class PipelineHandler *pipe)\n {\n \tstruct Allocator : std::allocator<Camera> {\n-\t\tvoid construct(void *p, const std::string &name)\n+\t\tvoid construct(void *p, const std::string &name,\n+\t\t\t       class PipelineHandler *pipe)\n \t\t{\n-\t\t\t::new(p) Camera(name);\n+\t\t\t::new(p) Camera(name, pipe);\n \t\t}\n \t\tvoid destroy(Camera *p)\n \t\t{\n@@ -70,7 +73,7 @@ std::shared_ptr<Camera> Camera::create(const std::string &name)\n \t\t}\n \t};\n \n-\treturn std::allocate_shared<Camera>(Allocator(), name);\n+\treturn std::allocate_shared<Camera>(Allocator(), name, pipe);\n }\n \n /**\n@@ -83,8 +86,8 @@ const std::string &Camera::name() const\n \treturn name_;\n }\n \n-Camera::Camera(const std::string &name)\n-\t: name_(name)\n+Camera::Camera(const std::string &name, class PipelineHandler *pipe)\n+\t: name_(name), pipe_(pipe)\n {\n }\n \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex 8cbc10acfbb571fd..48d028f7e6cd9b4d 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -171,7 +171,8 @@ void PipelineHandlerIPU3::registerCameras(CameraManager *manager)\n \t\t\tcontinue;\n \n \t\tstd::string cameraName = sensor->name() + \" \" + std::to_string(id);\n-\t\tstd::shared_ptr<Camera> camera = Camera::create(cameraName);\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 \n \t\tLOG(IPU3, Info)\ndiff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp\nindex 3ba69da8b77586e3..3651250b683e7810 100644\n--- a/src/libcamera/pipeline/uvcvideo.cpp\n+++ b/src/libcamera/pipeline/uvcvideo.cpp\n@@ -48,7 +48,7 @@ bool PipelineHandlerUVC::match(CameraManager *manager, DeviceEnumerator *enumera\n \n \tdev_->acquire();\n \n-\tstd::shared_ptr<Camera> camera = Camera::create(dev_->model());\n+\tstd::shared_ptr<Camera> camera = Camera::create(dev_->model(), this);\n \tmanager->addCamera(std::move(camera));\n \n \treturn true;\ndiff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp\nindex 82b9237a3d7d93e5..81d8319eb88e06d2 100644\n--- a/src/libcamera/pipeline/vimc.cpp\n+++ b/src/libcamera/pipeline/vimc.cpp\n@@ -57,14 +57,8 @@ bool PipeHandlerVimc::match(CameraManager *manager, DeviceEnumerator *enumerator\n \n \tdev_->acquire();\n \n-\t/*\n-\t * NOTE: A more complete Camera implementation could\n-\t * be passed the MediaDevice(s) it controls here or\n-\t * a reference to the PipelineHandler. Which method\n-\t * will be chosen depends on how the Camera\n-\t * object is modeled.\n-\t */\n-\tstd::shared_ptr<Camera> camera = Camera::create(\"Dummy VIMC Camera\");\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 \n \treturn true;\n",
    "prefixes": [
        "libcamera-devel",
        "1/3"
    ]
}