Show a patch.

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

{
    "id": 18404,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/18404/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/18404/",
    "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": "<20230315102300.2265491-3-chenghaoyang@google.com>",
    "date": "2023-03-15T10:22:56",
    "name": "[libcamera-devel,v4,2/6] libcamera: pipeline: Introduce skeleton Virtual Pipeline",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "837788f7b11cd616d1a4e078541bd17c8f5c66b7",
    "submitter": {
        "id": 117,
        "url": "https://patchwork.libcamera.org/api/1.1/people/117/?format=api",
        "name": "Cheng-Hao Yang",
        "email": "chenghaoyang@chromium.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/18404/mbox/",
    "series": [
        {
            "id": 3806,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3806/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3806",
            "date": "2023-03-15T10:22:54",
            "name": "Virtual pipeline handler",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/3806/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/18404/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/18404/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 4204FC329C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 15 Mar 2023 10:23:14 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AD2A162716;\n\tWed, 15 Mar 2023 11:23:13 +0100 (CET)",
            "from mail-pl1-x631.google.com (mail-pl1-x631.google.com\n\t[IPv6:2607:f8b0:4864:20::631])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 047CA6270E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Mar 2023 11:23:10 +0100 (CET)",
            "by mail-pl1-x631.google.com with SMTP id k2so11614676pll.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 15 Mar 2023 03:23:09 -0700 (PDT)",
            "from chenghaoyang-low.c.googlers.com.com\n\t(112.157.221.35.bc.googleusercontent.com. [35.221.157.112])\n\tby smtp.gmail.com with ESMTPSA id\n\tf11-20020a17090274cb00b001a0450da45csm3262786plt.185.2023.03.15.03.23.07\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 15 Mar 2023 03:23:07 -0700 (PDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1678875793;\n\tbh=iFXqHYoFKWXepKlMDxgEtxPjO8QSRvqtfHHnkO043BQ=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=SaxK07BoDUncoElBv/VNnOa8GkQ6LzR90uO89XucysdhrQaZlUjB1WK6DvnYIYKX9\n\tfz5H0a0VUhj1bCa2vJZ4Gpv/Euf0XGDEDqD37+hvKvB4qpMh8u39ftpQkqeBmOF9lp\n\tj6eCC0WhNkVE/fsV/G+1mJ5nu7IBIQaIgCKE3lfAR+DAUpjM8lfqmRM/NDu4VB0Tba\n\tdbvSuNJ7xlhIA/pIVVeVUC07YoSTXnAXGcQiGEVi53TnlKO2/yP9V1WC81wuKTh7/d\n\t1mYnOt2xKCERVAoayI367vwqd12tH0bDjv0Qds/jf/6L+0u+QGvIENf+lzpayxx8mx\n\t7MlbkbsbWP1oQ==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=chromium.org; s=google; t=1678875788;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=Q2hJRJQUm2hdQ8RypAyWYv8oIhLrv4kcdesIXc38Mr4=;\n\tb=Ko4SPckhuC8kk4/WosibZx+3B3Oj7jjp2znwfJCqJQ77pubqUc8GTsraw6rcYZmr2J\n\tkVWxcNgxLCEEF6Ji/vJFULRC9kuVgVcbIg8XakAOPcGhT7todE13A22NaUyMRvrzgRgU\n\tup26wHqkpmhUAf959yFe3LfVn+QtbuLQMedJw="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"Ko4SPckh\"; \n\tdkim-atps=neutral",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112; t=1678875788;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=Q2hJRJQUm2hdQ8RypAyWYv8oIhLrv4kcdesIXc38Mr4=;\n\tb=wMwyDFxRV+4qlZDv9ifuM65kEVCyBQUNZSa7m6l2SpUSx/klBrZCIEclSGrdaNRqqo\n\t8HH6fMcOKiMisptSrIlzZc2ixehAt7U0u2dAZVOLm71NflKnPBH2mW/sCCHWwyYva2ps\n\t93RBA6XZv84XydyVq7LSpgnZYrSlydCWjtZ5Re6QkjhmH3KKZflC6cauoB5vn1UEayWT\n\tSpn07XYmlc7b4RHt7KcCTesqwmjhW7sne7f6mbP0j3WV/94Qb70WQDspvbfLAxIxevA1\n\tUpt3Lv2z63wZdL6DAJz4d3iYbiIIeTEDpMlXgTolkIQ7VC7PTgMkmAhbQlxudG7utZPE\n\tb0iw==",
        "X-Gm-Message-State": "AO0yUKXD6QHfOR8olF6ti41NhuA5chVZgE/FklKgWZt48fplCKFOmXko\n\tO4UDB4BpD7wmPtvX/AsK/NesoKEDjP+gmv50JNs=",
        "X-Google-Smtp-Source": "AK7set9ABZJ4N2Tl87BYDB2eSixW7XBtpSr9u4Mwx+s6plIhz8PnPOnu/7cy0dmwVNdPvrocy5NtCA==",
        "X-Received": "by 2002:a17:90b:33c2:b0:23d:30c4:a06 with SMTP id\n\tlk2-20020a17090b33c200b0023d30c40a06mr6344948pjb.11.1678875788230; \n\tWed, 15 Mar 2023 03:23:08 -0700 (PDT)",
        "X-Google-Original-From": "Harvey Yang <chenghaoyang@google.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Wed, 15 Mar 2023 10:22:56 +0000",
        "Message-Id": "<20230315102300.2265491-3-chenghaoyang@google.com>",
        "X-Mailer": "git-send-email 2.40.0.rc1.284.g88254d51c5-goog",
        "In-Reply-To": "<20230315102300.2265491-1-chenghaoyang@google.com>",
        "References": "<20230315102300.2265491-1-chenghaoyang@google.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v4 2/6] libcamera: pipeline: Introduce\n\tskeleton Virtual Pipeline",
        "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>",
        "From": "Harvey Yang via libcamera-devel <libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Harvey Yang <chenghaoyang@chromium.org>",
        "Cc": "Harvey Yang <chenghaoyang@google.com>,\n\tHarvey Yang <chenghaoyang@chromium.org>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Provide all of the skeleton stubs to succesfully compile\nand register the Virtual Pipeline Handler for testing with fake data.\n\nMeson must be reconfigured to ensure that this pipeline handler is\nincluded in the selected pipelines configuration.\n\nSigned-off-by: Harvey Yang <chenghaoyang@chromium.org>\n---\n meson.build                                |   1 +\n meson_options.txt                          |   3 +-\n src/libcamera/pipeline/virtual/meson.build |   5 +\n src/libcamera/pipeline/virtual/virtual.cpp | 112 +++++++++++++++++++++\n 4 files changed, 120 insertions(+), 1 deletion(-)\n create mode 100644 src/libcamera/pipeline/virtual/meson.build\n create mode 100644 src/libcamera/pipeline/virtual/virtual.cpp",
    "diff": "diff --git a/meson.build b/meson.build\nindex 9eee9d39..f00e3daa 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -176,6 +176,7 @@ pipelines_support = {\n     'simple':       arch_arm,\n     'uvcvideo':     ['any'],\n     'vimc':         ['test'],\n+    'virtual':      ['test'],\n }\n \n if pipelines.contains('all')\ndiff --git a/meson_options.txt b/meson_options.txt\nindex 78a78b72..a0a75e7f 100644\n--- a/meson_options.txt\n+++ b/meson_options.txt\n@@ -47,7 +47,8 @@ option('pipelines',\n             'rkisp1',\n             'simple',\n             'uvcvideo',\n-            'vimc'\n+            'vimc',\n+            'virtual'\n         ],\n         description : 'Select which pipeline handlers to build. If this is set to \"auto\", all the pipelines applicable to the target architecture will be built. If this is set to \"all\", all the pipelines will be built. If both are selected then \"all\" will take precedence.')\n \ndiff --git a/src/libcamera/pipeline/virtual/meson.build b/src/libcamera/pipeline/virtual/meson.build\nnew file mode 100644\nindex 00000000..ba7ff754\n--- /dev/null\n+++ b/src/libcamera/pipeline/virtual/meson.build\n@@ -0,0 +1,5 @@\n+# SPDX-License-Identifier: CC0-1.0\n+\n+libcamera_sources += files([\n+    'virtual.cpp',\n+])\ndiff --git a/src/libcamera/pipeline/virtual/virtual.cpp b/src/libcamera/pipeline/virtual/virtual.cpp\nnew file mode 100644\nindex 00000000..09583b4e\n--- /dev/null\n+++ b/src/libcamera/pipeline/virtual/virtual.cpp\n@@ -0,0 +1,112 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2022, Google Inc.\n+ *\n+ * fake.cpp - Pipeline handler for fake cameras\n+ */\n+\n+#include <libcamera/base/log.h>\n+\n+#include <libcamera/camera.h>\n+\n+#include \"libcamera/internal/pipeline_handler.h\"\n+\n+namespace libcamera {\n+\n+LOG_DEFINE_CATEGORY(VIRTUAL)\n+\n+class VirtualCameraConfiguration : public CameraConfiguration\n+{\n+public:\n+\tVirtualCameraConfiguration();\n+\n+\tStatus validate() override;\n+};\n+\n+class PipelineHandlerVirtual : public PipelineHandler\n+{\n+public:\n+\tPipelineHandlerVirtual(CameraManager *manager);\n+\n+\tstd::unique_ptr<CameraConfiguration> generateConfiguration(Camera *camera,\n+\t\t\t\t\t\t\t\t   const StreamRoles &roles) override;\n+\tint configure(Camera *camera, CameraConfiguration *config) override;\n+\n+\tint exportFrameBuffers(Camera *camera, Stream *stream,\n+\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;\n+\n+\tint start(Camera *camera, const ControlList *controls) override;\n+\tvoid stopDevice(Camera *camera) override;\n+\n+\tint queueRequestDevice(Camera *camera, Request *request) override;\n+\n+\tbool match(DeviceEnumerator *enumerator) override;\n+};\n+\n+VirtualCameraConfiguration::VirtualCameraConfiguration()\n+\t: CameraConfiguration()\n+{\n+}\n+\n+CameraConfiguration::Status VirtualCameraConfiguration::validate()\n+{\n+\treturn Invalid;\n+}\n+\n+PipelineHandlerVirtual::PipelineHandlerVirtual(CameraManager *manager)\n+\t: PipelineHandler(manager)\n+{\n+}\n+\n+std::unique_ptr<CameraConfiguration> PipelineHandlerVirtual::generateConfiguration(Camera *camera,\n+\t\t\t\t\t\t\t\t\t\t   const StreamRoles &roles)\n+{\n+\t(void)camera;\n+\t(void)roles;\n+\treturn std::unique_ptr<VirtualCameraConfiguration>(nullptr);\n+}\n+\n+int PipelineHandlerVirtual::configure(Camera *camera, CameraConfiguration *config)\n+{\n+\t(void)camera;\n+\t(void)config;\n+\treturn -1;\n+}\n+\n+int PipelineHandlerVirtual::exportFrameBuffers(Camera *camera, Stream *stream,\n+\t\t\t\t\t       std::vector<std::unique_ptr<FrameBuffer>> *buffers)\n+{\n+\t(void)camera;\n+\t(void)stream;\n+\t(void)buffers;\n+\treturn -1;\n+}\n+\n+int PipelineHandlerVirtual::start(Camera *camera, const ControlList *controls)\n+{\n+\t(void)camera;\n+\t(void)controls;\n+\treturn -1;\n+}\n+\n+void PipelineHandlerVirtual::stopDevice(Camera *camera)\n+{\n+\t(void)camera;\n+}\n+\n+int PipelineHandlerVirtual::queueRequestDevice(Camera *camera, Request *request)\n+{\n+\t(void)camera;\n+\t(void)request;\n+\treturn -1;\n+}\n+\n+bool PipelineHandlerVirtual::match(DeviceEnumerator *enumerator)\n+{\n+\t(void)enumerator;\n+\treturn false;\n+}\n+\n+REGISTER_PIPELINE_HANDLER(PipelineHandlerVirtual)\n+\n+} /* namespace libcamera */\n",
    "prefixes": [
        "libcamera-devel",
        "v4",
        "2/6"
    ]
}