{"id":8451,"url":"https://patchwork.libcamera.org/api/patches/8451/?format=json","web_url":"https://patchwork.libcamera.org/patch/8451/","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":"<20200627030043.2088585-10-niklas.soderlund@ragnatech.se>","date":"2020-06-27T03:00:39","name":"[libcamera-devel,09/13] libcamera: ipu3: Do not duplicate data in IPU3Stream","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"49c9fe69e33d8f63b2bbc7c1d9152d9492656555","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/8451/mbox/","series":[{"id":1046,"url":"https://patchwork.libcamera.org/api/series/1046/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=1046","date":"2020-06-27T03:00:30","name":"libcamera: ipu3: Refactoring of ImgU","version":1,"mbox":"https://patchwork.libcamera.org/series/1046/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/8451/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/8451/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 8F539C2E66\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 27 Jun 2020 03:01:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4969360B04;\n\tSat, 27 Jun 2020 05:01:00 +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 BC721609E1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 27 Jun 2020 05:00:56 +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 57ec3987-b822-11ea-86ee-0050569116f7;\n\tSat, 27 Jun 2020 05:00:23 +0200 (CEST)"],"X-Halon-ID":"57ec3987-b822-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":"Sat, 27 Jun 2020 05:00:39 +0200","Message-Id":"<20200627030043.2088585-10-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.27.0","In-Reply-To":"<20200627030043.2088585-1-niklas.soderlund@ragnatech.se>","References":"<20200627030043.2088585-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Subject":"[libcamera-devel] [PATCH 09/13] libcamera: ipu3: Do not duplicate\n\tdata 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 driver more coherent.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n src/libcamera/pipeline/ipu3/ipu3.cpp | 31 +++++++++++++++-------------\n 1 file changed, 17 insertions(+), 14 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex ae7a01b81dacf498..1f320dc166767bab 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,16 @@ 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+\t\tint ret;\n+\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+\t\telse\n+\t\t\tcontinue;\n+\n \t\tif (ret < 0)\n \t\t\terror = ret;\n \t}\n@@ -801,9 +807,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","09/13"]}