From patchwork Wed Sep 2 15:22:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 9472 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 9F610BE174 for ; Wed, 2 Sep 2020 15:19:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 798FA629C9; Wed, 2 Sep 2020 17:19:13 +0200 (CEST) Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C062962931 for ; Wed, 2 Sep 2020 17:19:11 +0200 (CEST) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 964B0240003; Wed, 2 Sep 2020 15:19:10 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Wed, 2 Sep 2020 17:22:35 +0200 Message-Id: <20200902152236.69770-12-jacopo@jmondi.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200902152236.69770-1-jacopo@jmondi.org> References: <20200902152236.69770-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 11/12] android: camera_device: Set Encoder at construction X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: tfiga@google.com, hiroh@google.com Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Make the CameraStream Encoder * a private struct member and require its initialization at construction time. This change dis-allow creating a CameraStream and set the Encoder later, which shall not happen now that we create CameraStream once we have all the required information in place. No functional changes intended but this change aims to make the code more robust enforcing a stricter CameraStream interface. Reviewed-by: Kieran Bingham Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 23 ++++++++++++----------- src/android/camera_device.h | 7 ++++--- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 9bcd1d993c17..28d8e081eab0 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -168,14 +168,14 @@ MappedCamera3Buffer::MappedCamera3Buffer(const buffer_handle_t camera3buffer, } } -CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i) - : format(f), size(s), jpeg(nullptr), index_(i) +CameraStream::CameraStream(PixelFormat f, Size s, unsigned int i, Encoder *encoder) + : format(f), size(s), index_(i), encoder_(encoder) { } CameraStream::~CameraStream() { - delete jpeg; + delete encoder_; }; /* @@ -1279,20 +1279,21 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list) PixelFormat format = formats::MJPEG; Size size = cfg.size; - CameraStream &cameraStream = streams_.emplace_back(format, size, index); - stream->priv = static_cast(&cameraStream); - /* * Construct a software encoder for MJPEG streams from the * chosen libcamera source stream. */ - cameraStream.jpeg = new EncoderLibJpeg(); - int ret = cameraStream.jpeg->configure(cfg); + Encoder *encoder = new EncoderLibJpeg(); + int ret = encoder->configure(cfg); if (ret) { - LOG(HAL, Error) - << "Failed to configure encoder"; + LOG(HAL, Error) << "Failed to configure encoder"; + delete encoder; return ret; } + + CameraStream &cameraStream = streams_.emplace_back(format, size, + index, encoder); + stream->priv = static_cast(&cameraStream); } switch (config_->validate()) { @@ -1481,7 +1482,7 @@ void CameraDevice::requestComplete(Request *request) if (cameraStream->format != formats::MJPEG) continue; - Encoder *encoder = cameraStream->jpeg; + Encoder *encoder = cameraStream->encoder(); if (!encoder) { LOG(HAL, Error) << "Failed to identify encoder"; continue; diff --git a/src/android/camera_device.h b/src/android/camera_device.h index f8f237203ce9..3c57ffec265d 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -29,16 +29,16 @@ class CameraMetadata; struct CameraStream { public: - CameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i); + CameraStream(libcamera::PixelFormat, libcamera::Size, unsigned int i, + Encoder *encoder = nullptr); ~CameraStream(); unsigned int index() const { return index_; } + Encoder *encoder() const { return encoder_; } libcamera::PixelFormat format; libcamera::Size size; - Encoder *jpeg; - private: /* * The index of the libcamera StreamConfiguration as added during @@ -46,6 +46,7 @@ private: * one or more streams to the Android framework. */ unsigned int index_; + Encoder *encoder_; }; class CameraDevice : protected libcamera::Loggable