{"id":9596,"url":"https://patchwork.libcamera.org/api/patches/9596/?format=json","web_url":"https://patchwork.libcamera.org/patch/9596/","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-5-niklas.soderlund@ragnatech.se>","date":"2020-09-14T14:21:40","name":"[libcamera-devel,v2,04/13] libcamera: pipeline: rkisp1: Prepare buffer ready handlers for multiple streams","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"a286f53df0b6e85664433b2c2de2d8bd8e718777","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/9596/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/9596/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/9596/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 2D349BF01C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 14 Sep 2020 14:22:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 04CB862E09;\n\tMon, 14 Sep 2020 16:22:11 +0200 (CEST)","from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1629D62DEF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 14 Sep 2020 16:22:09 +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 ab8a07e4-f695-11ea-a39b-005056917f90;\n\tMon, 14 Sep 2020 16:22:08 +0200 (CEST)"],"X-Halon-ID":"ab8a07e4-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:40 +0200","Message-Id":"<20200914142149.63857-5-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 04/13] libcamera: pipeline: rkisp1:\n\tPrepare buffer ready handlers for multiple streams","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":"The buffer ready handlers are designed for a single application facing\nstream from the main path. To prepare for multiple application facing\nstreams from main and/or self path the handlers need to be prepared.\n\nThe data keeping tasks of frame number and advancing the timeline can be\nmoved from the application facing buffer ready handler to the statistics\nhandler. For each request processed there will always be a statistic\nbuffer and as the ISP is inline and is the source of both main, self and\nstatistic paths there is no lose in precision from this.\n\nThe application facing handler no longer needs a special case for\ncancelled frames and can be made simpler. With this change the handlers\nare ready to deal with any combinations of application facing streams.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/libcamera/pipeline/rkisp1/rkisp1.cpp | 17 +++++------------\n 1 file changed, 5 insertions(+), 12 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 96046ec32c91cff3..2023990013315e3f 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -1077,20 +1077,8 @@ void PipelineHandlerRkISP1::tryCompleteRequest(Request *request)\n void PipelineHandlerRkISP1::bufferReady(FrameBuffer *buffer)\n {\n \tASSERT(activeCamera_);\n-\tRkISP1CameraData *data = cameraData(activeCamera_);\n \tRequest *request = buffer->request();\n \n-\tif (buffer->metadata().status == FrameMetadata::FrameCancelled) {\n-\t\tcompleteBuffer(activeCamera_, request, buffer);\n-\t\tcompleteRequest(activeCamera_, request);\n-\t\treturn;\n-\t}\n-\n-\tdata->timeline_.bufferReady(buffer);\n-\n-\tif (data->frame_ <= buffer->metadata().sequence)\n-\t\tdata->frame_ = buffer->metadata().sequence + 1;\n-\n \tcompleteBuffer(activeCamera_, request, buffer);\n \ttryCompleteRequest(request);\n }\n@@ -1121,6 +1109,11 @@ void PipelineHandlerRkISP1::statReady(FrameBuffer *buffer)\n \tif (!info)\n \t\treturn;\n \n+\tdata->timeline_.bufferReady(buffer);\n+\n+\tif (data->frame_ <= buffer->metadata().sequence)\n+\t\tdata->frame_ = buffer->metadata().sequence + 1;\n+\n \tIPAOperationData op;\n \top.operation = RKISP1_IPA_EVENT_SIGNAL_STAT_BUFFER;\n \top.data = { info->frame, info->statBuffer->cookie() };\n","prefixes":["libcamera-devel","v2","04/13"]}