Show a patch.

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

{
    "id": 9802,
    "url": "https://patchwork.libcamera.org/api/patches/9802/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/9802/",
    "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": "<20200925014207.1455796-5-niklas.soderlund@ragnatech.se>",
    "date": "2020-09-25T01:41:49",
    "name": "[libcamera-devel,v3,04/22] libcamera: pipeline: rkisp1: Setup links as part of configuration",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "cc0d7cf7222e0c673652ef1ba0c69ee08918162e",
    "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/9802/mbox/",
    "series": [
        {
            "id": 1325,
            "url": "https://patchwork.libcamera.org/api/series/1325/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1325",
            "date": "2020-09-25T01:41:45",
            "name": "libcamera: pipeline: rkisp1: Extend to support two streams",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/1325/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/9802/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/9802/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 5956EC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 25 Sep 2020 01:42:48 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 003016300E;\n\tFri, 25 Sep 2020 03:42:47 +0200 (CEST)",
            "from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net\n\t[195.74.38.227])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C2CC26300B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 25 Sep 2020 03:42:44 +0200 (CEST)",
            "from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de\n\t[84.172.82.168]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid 678b7d9c-fed0-11ea-92dc-005056917a89;\n\tFri, 25 Sep 2020 03:42:43 +0200 (CEST)"
        ],
        "X-Halon-ID": "678b7d9c-fed0-11ea-92dc-005056917a89",
        "Authorized-sender": "niklas.soderlund@fsdn.se",
        "From": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Fri, 25 Sep 2020 03:41:49 +0200",
        "Message-Id": "<20200925014207.1455796-5-niklas.soderlund@ragnatech.se>",
        "X-Mailer": "git-send-email 2.28.0",
        "In-Reply-To": "<20200925014207.1455796-1-niklas.soderlund@ragnatech.se>",
        "References": "<20200925014207.1455796-1-niklas.soderlund@ragnatech.se>",
        "MIME-Version": "1.0",
        "Subject": "[libcamera-devel] [PATCH v3 04/22] libcamera: pipeline: rkisp1:\n\tSetup links as part of configuration",
        "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>",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "In preparation of supporting both the main and self path configure all\nthe media graph links as a part of the configuration step. Before this\nchange the link between ISP and DMA engine was setup at match time as\nthe only supported path was the main path and only the link between\nsensor and ISP was updated at part of the configuration step.\n\nThe main path is still the only path between ISP and DMA engine that is\npossible to enable.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n* Changes since v2\n- Simplify link selection per Laurent's suggestion. This is reworked\n  once more in a later patch but makes thins one looks nicer for now.\n\n* Changes since v1\n- Pass sensor directly to initLinks().\n- Remove string variable form link selection.\n- Rewrite commit message.\n---\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 77 ++++++++++++------------\n 1 file changed, 40 insertions(+), 37 deletions(-)",
    "diff": "diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex a5b6bb07e4f8dee2..8bb4582eeb688a4c 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -213,7 +213,8 @@ private:\n \tfriend RkISP1CameraData;\n \tfriend RkISP1Frames;\n \n-\tint initLinks();\n+\tint initLinks(const Camera *camera, const CameraSensor *sensor,\n+\t\t      const RkISP1CameraConfiguration &config);\n \tint createCamera(MediaEntity *sensor);\n \tvoid tryCompleteRequest(Request *request);\n \tvoid bufferReady(FrameBuffer *buffer);\n@@ -598,28 +599,9 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)\n \tCameraSensor *sensor = data->sensor_;\n \tint ret;\n \n-\t/*\n-\t * Configure the sensor links: enable the link corresponding to this\n-\t * camera and disable all the other sensor links.\n-\t */\n-\tconst MediaPad *pad = isp_->entity()->getPadByIndex(0);\n-\n-\tfor (MediaLink *link : pad->links()) {\n-\t\tbool enable = link->source()->entity() == sensor->entity();\n-\n-\t\tif (!!(link->flags() & MEDIA_LNK_FL_ENABLED) == enable)\n-\t\t\tcontinue;\n-\n-\t\tLOG(RkISP1, Debug)\n-\t\t\t<< (enable ? \"Enabling\" : \"Disabling\")\n-\t\t\t<< \" link from sensor '\"\n-\t\t\t<< link->source()->entity()->name()\n-\t\t\t<< \"' to ISP\";\n-\n-\t\tret = link->setEnabled(enable);\n-\t\tif (ret < 0)\n-\t\t\treturn ret;\n-\t}\n+\tret = initLinks(camera, sensor, *config);\n+\tif (ret)\n+\t\treturn ret;\n \n \t/*\n \t * Configure the format on the sensor output and propagate it through\n@@ -922,22 +904,49 @@ int PipelineHandlerRkISP1::queueRequestDevice(Camera *camera, Request *request)\n  * Match and Setup\n  */\n \n-int PipelineHandlerRkISP1::initLinks()\n+int PipelineHandlerRkISP1::initLinks(const Camera *camera,\n+\t\t\t\t     const CameraSensor *sensor,\n+\t\t\t\t     const RkISP1CameraConfiguration &config)\n {\n-\tMediaLink *link;\n+\tRkISP1CameraData *data = cameraData(camera);\n \tint ret;\n \n \tret = media_->disableLinks();\n \tif (ret < 0)\n \t\treturn ret;\n \n-\tlink = media_->link(\"rkisp1_isp\", 2, \"rkisp1_resizer_mainpath\", 0);\n-\tif (!link)\n-\t\treturn -ENODEV;\n+\t/*\n+\t * Configure the sensor links: enable the link corresponding to this\n+\t * camera.\n+\t */\n+\tconst MediaPad *pad = isp_->entity()->getPadByIndex(0);\n+\tfor (MediaLink *link : pad->links()) {\n+\t\tif (link->source()->entity() != sensor->entity())\n+\t\t\tcontinue;\n \n-\tret = link->setEnabled(true);\n-\tif (ret < 0)\n-\t\treturn ret;\n+\t\tLOG(RkISP1, Debug)\n+\t\t\t<< \"Enabling link from sensor '\"\n+\t\t\t<< link->source()->entity()->name()\n+\t\t\t<< \"' to ISP\";\n+\n+\t\tret = link->setEnabled(true);\n+\t\tif (ret < 0)\n+\t\t\treturn ret;\n+\t}\n+\n+\tfor (const StreamConfiguration &cfg : config) {\n+\t\tif (cfg.stream() != &data->stream_)\n+\t\t\treturn -EINVAL;\n+\n+\t\tMediaLink *link = media_->link(\"rkisp1_isp\", 2,\n+\t\t\t\t\t       \"rkisp1_resizer_mainpath\", 0);\n+\t\tif (!link)\n+\t\t\treturn -ENODEV;\n+\n+\t\tret = link->setEnabled(true);\n+\t\tif (ret < 0)\n+\t\t\treturn ret;\n+\t}\n \n \treturn 0;\n }\n@@ -1019,12 +1028,6 @@ bool PipelineHandlerRkISP1::match(DeviceEnumerator *enumerator)\n \tstat_->bufferReady.connect(this, &PipelineHandlerRkISP1::statReady);\n \tparam_->bufferReady.connect(this, &PipelineHandlerRkISP1::paramReady);\n \n-\t/* Configure default links. */\n-\tif (initLinks() < 0) {\n-\t\tLOG(RkISP1, Error) << \"Failed to setup links\";\n-\t\treturn false;\n-\t}\n-\n \t/*\n \t * Enumerate all sensors connected to the ISP and create one\n \t * camera instance for each of them.\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "04/22"
    ]
}