Show a patch.

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

{
    "id": 2753,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/2753/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/2753/",
    "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": "<20200129033210.278800-20-nicolas@ndufresne.ca>",
    "date": "2020-01-29T03:32:06",
    "name": "[libcamera-devel,v1,19/23] gst: libcamerasrc: Allocate and release buffers",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "b4990a741e73c5ecae589a7e8b1dc166229c5f66",
    "submitter": {
        "id": 30,
        "url": "https://patchwork.libcamera.org/api/1.1/people/30/?format=api",
        "name": "Nicolas Dufresne",
        "email": "nicolas@ndufresne.ca"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/2753/mbox/",
    "series": [
        {
            "id": 648,
            "url": "https://patchwork.libcamera.org/api/1.1/series/648/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=648",
            "date": "2020-01-29T03:31:47",
            "name": "GStreamer Element for libcamera",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/648/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/2753/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/2753/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<nicolas@ndufresne.ca>",
        "Received": [
            "from bhuna.collabora.co.uk (bhuna.collabora.co.uk\n\t[IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 50182608C6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 29 Jan 2020 04:35:42 +0100 (CET)",
            "from nicolas-tpx395.localdomain (unknown\n\t[IPv6:2002:c0de:c115:0:66fc:8b:2a38:8313])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits))\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby bhuna.collabora.co.uk (Postfix) with ESMTPSA id 8ECCF28EA9F;\n\tWed, 29 Jan 2020 03:35:40 +0000 (GMT)"
        ],
        "From": "Nicolas Dufresne <nicolas@ndufresne.ca>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Nicolas Dufresne <nicolas.dufresne@collabora.com>",
        "Date": "Tue, 28 Jan 2020 22:32:06 -0500",
        "Message-Id": "<20200129033210.278800-20-nicolas@ndufresne.ca>",
        "X-Mailer": "git-send-email 2.24.1",
        "In-Reply-To": "<20200129033210.278800-1-nicolas@ndufresne.ca>",
        "References": "<20200129033210.278800-1-nicolas@ndufresne.ca>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v1 19/23] gst: libcamerasrc: Allocate and\n\trelease buffers",
        "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>",
        "X-List-Received-Date": "Wed, 29 Jan 2020 03:35:42 -0000"
    },
    "content": "From: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n\nSetup the allocation and the release of buffers in the\nelement. We have one pooling GstAllocator that wraps the\nFrameBufferAllocator and tracks the live time of FrameBuffer\nobject. Then for each pads we have a GstBufferPool object\nwhich is only used to avoid re-allocation the GstBuffer\nshell everything.\n\nSigned-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n---\n src/gstreamer/gstlibcamerasrc.cpp | 29 +++++++++++++++++++++++++++++\n 1 file changed, 29 insertions(+)",
    "diff": "diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp\nindex 0df71c6..5fc4393 100644\n--- a/src/gstreamer/gstlibcamerasrc.cpp\n+++ b/src/gstreamer/gstlibcamerasrc.cpp\n@@ -8,6 +8,8 @@\n \n #include \"gstlibcamerasrc.h\"\n #include \"gstlibcamerapad.h\"\n+#include \"gstlibcameraallocator.h\"\n+#include \"gstlibcamerapool.h\"\n #include \"gstlibcamera-utils.h\"\n \n #include <libcamera/camera.h>\n@@ -37,6 +39,7 @@ struct _GstLibcameraSrc {\n \tgchar *camera_name;\n \n \tGstLibcameraSrcState *state;\n+\tGstLibcameraAllocator *allocator;\n };\n \n enum {\n@@ -207,6 +210,23 @@ gst_libcamera_src_task_enter(GstTask *task, GThread *thread, gpointer user_data)\n \t\treturn;\n \t}\n \n+\tself->allocator = gst_libcamera_allocator_new(state->cam);\n+\tif (!self->allocator) {\n+\t\tGST_ELEMENT_ERROR(self, RESOURCE, NO_SPACE_LEFT,\n+\t\t\t\t  (\"Failed to allocate memory\"),\n+\t\t\t\t  (\"gst_libcamera_allocator_new() failed.\"));\n+\t\tgst_task_stop(task);\n+\t\treturn;\n+\t}\n+\n+\tfor (gsize i = 0; i < state->srcpads.size(); i++) {\n+\t\tGstPad *srcpad = state->srcpads[i];\n+\t\tconst StreamConfiguration &stream_cfg = state->config->at(i);\n+\t\tGstLibcameraPool *pool = gst_libcamera_pool_new(self->allocator,\n+\t\t\t\t\t\t\t\tstream_cfg.stream());\n+\t\tgst_libcamera_pad_set_pool(srcpad, pool);\n+\t}\n+\n done:\n \tswitch (flow_ret) {\n \tcase GST_FLOW_NOT_NEGOTIATED:\n@@ -225,8 +245,15 @@ static void\n gst_libcamera_src_task_leave(GstTask *task, GThread *thread, gpointer user_data)\n {\n \tGstLibcameraSrc *self = GST_LIBCAMERA_SRC(user_data);\n+\tGstLibcameraSrcState *state = self->state;\n \n \tGST_DEBUG_OBJECT(self, \"Streaming thread is about to stop\");\n+\tstate->cam->stop();\n+\n+\tfor (GstPad *srcpad : state->srcpads)\n+\t\tgst_libcamera_pad_set_pool(srcpad, NULL);\n+\n+\tg_clear_object(&self->allocator);\n }\n \n static void\n@@ -235,6 +262,8 @@ gst_libcamera_src_close(GstLibcameraSrc *self)\n \tGstLibcameraSrcState *state = self->state;\n \tgint ret;\n \n+\tGST_DEBUG_OBJECT(self, \"Releasing resources\");\n+\n \tret = state->cam->release();\n \tif (ret) {\n \t\tGST_ELEMENT_WARNING(self, RESOURCE, BUSY,\n",
    "prefixes": [
        "libcamera-devel",
        "v1",
        "19/23"
    ]
}