{"id":13909,"url":"https://patchwork.libcamera.org/api/1.1/patches/13909/?format=json","web_url":"https://patchwork.libcamera.org/patch/13909/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","date":"2021-09-23T11:54:39","name":"[libcamera-devel] android: camera_device: Return unique_ptr from createFrameBuffer","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"8f87f31746282baa21e6c92b6d5f0f5e311a36d5","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/1.1/people/2/?format=json","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/13909/mbox/","series":[{"id":2552,"url":"https://patchwork.libcamera.org/api/1.1/series/2552/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2552","date":"2021-09-23T11:54:39","name":"[libcamera-devel] android: camera_device: Return unique_ptr from createFrameBuffer","version":1,"mbox":"https://patchwork.libcamera.org/series/2552/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/13909/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/13909/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 ED4DBBF01C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 23 Sep 2021 11:54:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A9EB76918A;\n\tThu, 23 Sep 2021 13:54:48 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1719269189\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 23 Sep 2021 13:54:47 +0200 (CEST)","from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id AB14045E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 23 Sep 2021 13:54:46 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"H9AjODDR\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632398086;\n\tbh=yz1ytDSKp5kGeo3AU3ma8lLSG8xwLDCUc4y0R3PVhTY=;\n\th=From:To:Subject:Date:From;\n\tb=H9AjODDRTlxa0EB4FiKmRgoF/D1UGzUTiEGkfYHIKcgqUlLnjP3PPgVmMu5lfCjns\n\ti4uWdHVcHW7wo14kuHb37vbfmKISFXjdAEBk/nULOdufU8As+aL0g/IcjGPh8Yp9D1\n\tF9twn/+rN/RtWIfLw1M6LE8PrPAYNSo42/JfIfWw=","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Thu, 23 Sep 2021 14:54:39 +0300","Message-Id":"<20210923115439.30863-1-laurent.pinchart@ideasonboard.com>","X-Mailer":"git-send-email 2.32.0","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH] android: camera_device: Return unique_ptr\n\tfrom createFrameBuffer","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Returning a non-managed pointer can cause leaks. Use a unique_ptr<>\ninstead to avoid possible future issues.\n\nThe std::move() for the planes argument to the FrameBuffer constructor\nis dropped as it's misleading. FrameBuffer has no constructor that takes\nan rvalue reference to planes, so the vector was copied despite the\nmove. This only clarifies the intent, no functional change is\nintroduced.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/android/camera_device.cpp | 18 ++++++++++--------\n src/android/camera_device.h   |  7 ++++---\n 2 files changed, 14 insertions(+), 11 deletions(-)\n\n\nbase-commit: 2cc4303b172a76ac5b431c4fb4df8a083f7d3fcf","diff":"diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex a693dcbe89f4..21844e5114a9 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -774,9 +774,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n \treturn 0;\n }\n \n-FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n-\t\t\t\t\t     PixelFormat pixelFormat,\n-\t\t\t\t\t     const Size &size)\n+std::unique_ptr<FrameBuffer>\n+CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer,\n+\t\t\t\tPixelFormat pixelFormat, const Size &size)\n {\n \tCameraBuffer buf(camera3buffer, pixelFormat, size, PROT_READ);\n \tif (!buf.isValid()) {\n@@ -797,7 +797,7 @@ FrameBuffer *CameraDevice::createFrameBuffer(const buffer_handle_t camera3buffer\n \t\tplanes[i].length = buf.size(i);\n \t}\n \n-\treturn new FrameBuffer(std::move(planes));\n+\treturn std::make_unique<FrameBuffer>(planes);\n }\n \n int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)\n@@ -1002,10 +1002,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques\n \t\t\t * associate it with the Camera3RequestDescriptor for\n \t\t\t * lifetime management only.\n \t\t\t */\n-\t\t\tbuffer = createFrameBuffer(*camera3Buffer.buffer,\n-\t\t\t\t\t\t   cameraStream->configuration().pixelFormat,\n-\t\t\t\t\t\t   cameraStream->configuration().size);\n-\t\t\tdescriptor.frameBuffers_.emplace_back(buffer);\n+\t\t\tdescriptor.frameBuffers_.push_back(\n+\t\t\t\tcreateFrameBuffer(*camera3Buffer.buffer,\n+\t\t\t\t\t\t  cameraStream->configuration().pixelFormat,\n+\t\t\t\t\t\t  cameraStream->configuration().size));\n+\n+\t\t\tbuffer = descriptor.frameBuffers_.back().get();\n \t\t\tLOG(HAL, Debug) << ss.str() << \" (direct)\";\n \t\t\tbreak;\n \ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 296c2f185e4e..43eb5895ba64 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -94,9 +94,10 @@ private:\n \n \tvoid stop();\n \n-\tlibcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer,\n-\t\t\t\t\t\t  libcamera::PixelFormat pixelFormat,\n-\t\t\t\t\t\t  const libcamera::Size &size);\n+\tstd::unique_ptr<libcamera::FrameBuffer>\n+\tcreateFrameBuffer(const buffer_handle_t camera3buffer,\n+\t\t\t  libcamera::PixelFormat pixelFormat,\n+\t\t\t  const libcamera::Size &size);\n \tvoid abortRequest(camera3_capture_request_t *request);\n \tbool isValidRequest(camera3_capture_request_t *request) const;\n \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n","prefixes":["libcamera-devel"]}