{"id":9595,"url":"https://patchwork.libcamera.org/api/patches/9595/?format=json","web_url":"https://patchwork.libcamera.org/patch/9595/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20200914142149.63857-4-niklas.soderlund@ragnatech.se>","date":"2020-09-14T14:21:39","name":"[libcamera-devel,v2,03/13] libcamera: pipeline: rkisp1: Setup links as part of configuration","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"4bbc23266c24375dc9b810dfb94da0583757b394","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/?format=json","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/9595/mbox/","series":[{"id":1289,"url":"https://patchwork.libcamera.org/api/series/1289/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1289","date":"2020-09-14T14:21:36","name":"libcamera: pipeline: rkisp1: Extend to support two streams","version":2,"mbox":"https://patchwork.libcamera.org/series/1289/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/9595/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/9595/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 082BCC3B5D\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 14 Sep 2020 14:22:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A3D9362E0D;\n\tMon, 14 Sep 2020 16:22:08 +0200 (CEST)","from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net\n\t[195.74.38.228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 02AD562C8C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 14 Sep 2020 16:22:07 +0200 (CEST)","from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de\n\t[84.172.82.168]) by bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA\n\tid ab15874c-f695-11ea-a39b-005056917f90;\n\tMon, 14 Sep 2020 16:22:07 +0200 (CEST)"],"X-Halon-ID":"ab15874c-f695-11ea-a39b-005056917f90","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":"Mon, 14 Sep 2020 16:21:39 +0200","Message-Id":"<20200914142149.63857-4-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.28.0","In-Reply-To":"<20200914142149.63857-1-niklas.soderlund@ragnatech.se>","References":"<20200914142149.63857-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v2 03/13] 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>\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 | 79 +++++++++++++-----------\n 1 file changed, 42 insertions(+), 37 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 86a3e3c63b17762b..96046ec32c91cff3 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@@ -603,28 +604,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@@ -927,22 +909,51 @@ 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\tMediaLink *link = nullptr;\n+\t\tif (cfg.stream() == &data->stream_)\n+\t\t\tlink = media_->link(\"rkisp1_isp\", 2,\n+\t\t\t\t\t    \"rkisp1_resizer_mainpath\", 0);\n+\t\telse\n+\t\t\treturn -EINVAL;\n+\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@@ -1024,12 +1035,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","v2","03/13"]}