Show a patch.

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

{
    "id": 14105,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/14105/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/14105/",
    "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": "<20211012022321.27034-3-laurent.pinchart@ideasonboard.com>",
    "date": "2021-10-12T02:23:20",
    "name": "[libcamera-devel,2/3] cam: Pass stream names to FileSink",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "eb6cdf0ffa4fdcf8545a8b8836a677359131cd2a",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/14105/mbox/",
    "series": [
        {
            "id": 2616,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2616/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2616",
            "date": "2021-10-12T02:23:18",
            "name": "libcamera: Assorted fixes for the cam application",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/2616/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/14105/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/14105/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 DBB0CC3243\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 12 Oct 2021 02:23:43 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 58D7068F57;\n\tTue, 12 Oct 2021 04:23:42 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D747068F4B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 Oct 2021 04:23:39 +0200 (CEST)",
            "from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 87268F1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 Oct 2021 04:23:39 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"eHhN0qeb\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634005419;\n\tbh=P5/sIE13xLRuD7BY5Hxp8AqKx/n8azuj3bTRlmGJM2k=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=eHhN0qeba6qCIRExoRefIU5b347l5lN8ZWHdenXTHebC92S7NkeI/zfxwZd/r3no6\n\tTCFIcz2ZZQcCXxcc5drmvojYdBR6Q9PikHaF9Jt276xdIggtjSba0dIRN0JAEumrPt\n\tIjTegWNACt48eIQEvQtMysWoG+1K5Gybboasiczc=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Tue, 12 Oct 2021 05:23:20 +0300",
        "Message-Id": "<20211012022321.27034-3-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.32.0",
        "In-Reply-To": "<20211012022321.27034-1-laurent.pinchart@ideasonboard.com>",
        "References": "<20211012022321.27034-1-laurent.pinchart@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 2/3] cam: Pass stream names to FileSink",
        "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>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "The FileSink class constructs stream names internally the same way that\nthe CameraSession does, except that it fails to add the camera name.\nThis results in files being written without the camera name.\n\nThis could be fixed in FileSink, but we would still duplicate code to\nconstruct stream names. Pass the stream names map from CameraSession to\nFileSink instead, and store it internally.\n\nFixes: 02001fecb0f5 (\"cam: Turn BufferWriter into a FrameSink\")\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/cam/camera_session.cpp |  5 +++--\n src/cam/file_sink.cpp      | 11 +++--------\n src/cam/file_sink.h        |  3 ++-\n 3 files changed, 8 insertions(+), 11 deletions(-)",
    "diff": "diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp\nindex 5a25baab03f5..605018278c5a 100644\n--- a/src/cam/camera_session.cpp\n+++ b/src/cam/camera_session.cpp\n@@ -193,9 +193,10 @@ int CameraSession::start()\n \n \tif (options_.isSet(OptFile)) {\n \t\tif (!options_[OptFile].toString().empty())\n-\t\t\tsink_ = std::make_unique<FileSink>(options_[OptFile]);\n+\t\t\tsink_ = std::make_unique<FileSink>(streamNames_,\n+\t\t\t\t\t\t\t   options_[OptFile]);\n \t\telse\n-\t\t\tsink_ = std::make_unique<FileSink>();\n+\t\t\tsink_ = std::make_unique<FileSink>(streamNames_);\n \t}\n \n \tif (sink_) {\ndiff --git a/src/cam/file_sink.cpp b/src/cam/file_sink.cpp\nindex 3c2e565b27a2..45213d4a54fe 100644\n--- a/src/cam/file_sink.cpp\n+++ b/src/cam/file_sink.cpp\n@@ -20,8 +20,9 @@\n \n using namespace libcamera;\n \n-FileSink::FileSink(const std::string &pattern)\n-\t: pattern_(pattern)\n+FileSink::FileSink(const std::map<const libcamera::Stream *, std::string> &streamNames,\n+\t\t   const std::string &pattern)\n+\t: streamNames_(streamNames), pattern_(pattern)\n {\n }\n \n@@ -35,12 +36,6 @@ int FileSink::configure(const libcamera::CameraConfiguration &config)\n \tif (ret < 0)\n \t\treturn ret;\n \n-\tstreamNames_.clear();\n-\tfor (unsigned int index = 0; index < config.size(); ++index) {\n-\t\tconst StreamConfiguration &cfg = config.at(index);\n-\t\tstreamNames_[cfg.stream()] = \"stream\" + std::to_string(index);\n-\t}\n-\n \treturn 0;\n }\n \ndiff --git a/src/cam/file_sink.h b/src/cam/file_sink.h\nindex 335be93b8732..8de93a01a1e8 100644\n--- a/src/cam/file_sink.h\n+++ b/src/cam/file_sink.h\n@@ -20,7 +20,8 @@ class Image;\n class FileSink : public FrameSink\n {\n public:\n-\tFileSink(const std::string &pattern = \"\");\n+\tFileSink(const std::map<const libcamera::Stream *, std::string> &streamNames,\n+\t\t const std::string &pattern = \"\");\n \t~FileSink();\n \n \tint configure(const libcamera::CameraConfiguration &config) override;\n",
    "prefixes": [
        "libcamera-devel",
        "2/3"
    ]
}