{"id":8466,"url":"https://patchwork.libcamera.org/api/patches/8466/?format=json","web_url":"https://patchwork.libcamera.org/patch/8466/","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":"<20200628001532.2685967-10-niklas.soderlund@ragnatech.se>","date":"2020-06-28T00:15:28","name":"[libcamera-devel,v2,09/13] libcamera: ipu3: Do not duplicate data in IPU3Stream","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"3b769bcb72770c6c0f1d0463262e3336fa77742e","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/8466/mbox/","series":[{"id":1048,"url":"https://patchwork.libcamera.org/api/series/1048/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1048","date":"2020-06-28T00:15:19","name":"libcamera: ipu3: Refactoring of ImgU","version":2,"mbox":"https://patchwork.libcamera.org/series/1048/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/8466/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/8466/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 A1D09C2E69\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 28 Jun 2020 00:15:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 66B7B60AF5;\n\tSun, 28 Jun 2020 02:15:57 +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 D4018609E1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 28 Jun 2020 02:15:52 +0200 (CEST)","from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de\n\t[79.202.46.202]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA\n\tid 724f18b7-b8d4-11ea-86ee-0050569116f7;\n\tSun, 28 Jun 2020 02:15:18 +0200 (CEST)"],"X-Halon-ID":"724f18b7-b8d4-11ea-86ee-0050569116f7","Authorized-sender":"niklas@soderlund.pp.se","From":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","To":"libcamera-devel@lists.libcamera.org","Date":"Sun, 28 Jun 2020 02:15:28 +0200","Message-Id":"<20200628001532.2685967-10-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.27.0","In-Reply-To":"<20200628001532.2685967-1-niklas.soderlund@ragnatech.se>","References":"<20200628001532.2685967-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH v2 09/13] libcamera: ipu3: Do not\n\tduplicate data in IPU3Stream","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":"Do not keep the duplicated ImgUDevice::ImgUOutput information in both\nthe stream and camera data classes. Remove it from the stream and only\naccess it from the camera data class.\n\nWhich stream is which can instead be checked by comparing it to the\nknown streams in camera data. This match how streams are checked in\nother parts of the code making the pipeline more coherent.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n---\n* Changes since v1\n- s/driver/pipeline/ in commit message.\n- Reorder if ; if else ; else statement in\n  PipelineHandlerIPU3::queueRequestDevice()\n---\n src/libcamera/pipeline/ipu3/ipu3.cpp | 32 ++++++++++++++++------------\n 1 file changed, 18 insertions(+), 14 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex e817f842f1216a7f..c1520ec40fe7b57c 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -35,13 +35,11 @@ class IPU3Stream : public Stream\n {\n public:\n \tIPU3Stream()\n-\t\t: active_(false), raw_(false), device_(nullptr)\n+\t\t: active_(false)\n \t{\n \t}\n \n \tbool active_;\n-\tbool raw_;\n-\tImgUDevice::ImgUOutput *device_;\n };\n \n class IPU3CameraData : public CameraData\n@@ -276,7 +274,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate()\n \t\tconst StreamConfiguration oldCfg = cfg;\n \t\tconst IPU3Stream *stream = streams_[i];\n \n-\t\tif (stream->raw_) {\n+\t\tif (stream == &data_->rawStream_) {\n \t\t\tcfg = cio2Configuration_;\n \t\t} else {\n \t\t\tbool scale = stream == &data_->vfStream_;\n@@ -572,13 +570,16 @@ int PipelineHandlerIPU3::exportFrameBuffers(Camera *camera, Stream *stream,\n \t\t\t\t\t    std::vector<std::unique_ptr<FrameBuffer>> *buffers)\n {\n \tIPU3CameraData *data = cameraData(camera);\n-\tIPU3Stream *ipu3stream = static_cast<IPU3Stream *>(stream);\n \tunsigned int count = stream->configuration().bufferCount;\n \n-\tif (ipu3stream->raw_)\n+\tif (stream == &data->outStream_)\n+\t\treturn data->imgu_->output_.dev->exportBuffers(count, buffers);\n+\telse if (stream == &data->vfStream_)\n+\t\treturn data->imgu_->viewfinder_.dev->exportBuffers(count, buffers);\n+\telse if (stream == &data->rawStream_)\n \t\treturn data->cio2_.exportBuffers(count, buffers);\n \n-\treturn ipu3stream->device_->dev->exportBuffers(count, buffers);\n+\treturn -EINVAL;\n }\n \n /**\n@@ -685,11 +686,17 @@ int PipelineHandlerIPU3::queueRequestDevice(Camera *camera, Request *request)\n \t/* Queue all buffers from the request aimed for the ImgU. */\n \tfor (auto it : request->buffers()) {\n \t\tIPU3Stream *stream = static_cast<IPU3Stream *>(it.first);\n-\t\tif (stream->raw_)\n-\t\t\tcontinue;\n-\n \t\tFrameBuffer *buffer = it.second;\n-\t\tint ret = stream->device_->dev->queueBuffer(buffer);\n+\n+\t\tif (stream == &data->rawStream_)\n+\t\t\tcontinue;\n+\n+\t\tint ret = 0;\n+\t\tif (stream == &data->outStream_)\n+\t\t\tret = data->imgu_->output_.dev->queueBuffer(buffer);\n+\t\telse if (stream == &data->vfStream_)\n+\t\t\tret = data->imgu_->viewfinder_.dev->queueBuffer(buffer);\n+\n \t\tif (ret < 0)\n \t\t\terror = ret;\n \t}\n@@ -801,9 +808,6 @@ int PipelineHandlerIPU3::registerCameras()\n \t\t * second.\n \t\t */\n \t\tdata->imgu_ = numCameras ? &imgu1_ : &imgu0_;\n-\t\tdata->outStream_.device_ = &data->imgu_->output_;\n-\t\tdata->vfStream_.device_ = &data->imgu_->viewfinder_;\n-\t\tdata->rawStream_.raw_ = true;\n \n \t\t/*\n \t\t * Connect video devices' 'bufferReady' signals to their\n","prefixes":["libcamera-devel","v2","09/13"]}