From patchwork Mon Oct 5 10:46:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 9954 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 B9B65C3B5D for ; Mon, 5 Oct 2020 10:47:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8699263C28; Mon, 5 Oct 2020 12:47:41 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="u8cEvUwi"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 565AB63BE4 for ; Mon, 5 Oct 2020 12:47:36 +0200 (CEST) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DE6D459E; Mon, 5 Oct 2020 12:47:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1601894856; bh=JYDBx5///bDfgq/WJy1yIFW5fPWTppIQIlFq5wDLLKw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u8cEvUwitNzfIJsyjYOT+YpsOox34nzFUU/Szbq01QSyiQ+bMw+rtcXvgr4ZGgFV1 q4zjaA+5bYUCwAwmqwwho23JuUtU2cwdVr/xv4Gel/5bv6ZyquwUrjVO3OhkmLK0HM 1tlRWLzRn8QZA+DVbtQLJwv9EGPEDlpgCQy4Wp2k= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Mon, 5 Oct 2020 13:46:41 +0300 Message-Id: <20201005104649.10812-8-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201005104649.10812-1-laurent.pinchart@ideasonboard.com> References: <20201005104649.10812-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 07/15] android: camera_stream: Fetch format and size from configuration 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Jacopo Mondi Fetch the format and size of the libcamera::StreamConfiguration associated with a CameraStream by accessing the configuration by index. This removes the need to store the libcamera stream format and sizes as class members and avoid duplicating information that might get out of sync. It also allows to remove the StreamConfiguration from the constructor parameters list, as it can be identified by its index. While at it, re-order the constructor parameters order. Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 8 +++----- src/android/camera_stream.cpp | 23 ++++++++++++++--------- src/android/camera_stream.h | 18 ++++++------------ 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 4f8f3e5790ca..adaec54dbfdb 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1206,9 +1206,8 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list) streamConfiguration.pixelFormat = format; config_->addConfiguration(streamConfiguration); - unsigned int index = config_->size() - 1; - streams_.emplace_back(this, stream, streamConfiguration, - CameraStream::Type::Direct, index); + streams_.emplace_back(this, CameraStream::Type::Direct, + stream, config_->size() - 1); stream->priv = static_cast(&streams_.back()); } @@ -1262,8 +1261,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list) index = config_->size() - 1; } - StreamConfiguration &cfg = config_->at(index); - streams_.emplace_back(this, jpegStream, cfg, type, index); + streams_.emplace_back(this, type, jpegStream, index); jpegStream->priv = static_cast(&streams_.back()); } diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp index 250f0ab0a3b4..6e7419ae31b8 100644 --- a/src/android/camera_stream.cpp +++ b/src/android/camera_stream.cpp @@ -16,18 +16,13 @@ using namespace libcamera; LOG_DECLARE_CATEGORY(HAL); -CameraStream::CameraStream(CameraDevice *cameraDev, - camera3_stream_t *androidStream, - const libcamera::StreamConfiguration &cfg, - Type type, unsigned int index) - : cameraDevice_(cameraDev), androidStream_(androidStream), type_(type), +CameraStream::CameraStream(CameraDevice *cameraDev, Type type, + camera3_stream_t *androidStream, unsigned int index) + : cameraDevice_(cameraDev), type_(type), androidStream_(androidStream), index_(index), encoder_(nullptr) { config_ = cameraDevice_->cameraConfiguration(); - format_ = cfg.pixelFormat; - size_ = cfg.size; - if (type_ == Type::Internal || type_ == Type::Mapped) encoder_.reset(new EncoderLibJpeg); } @@ -42,6 +37,16 @@ Stream *CameraStream::stream() const return streamConfiguration().stream(); } +const PixelFormat &CameraStream::format() const +{ + return streamConfiguration().pixelFormat; +} + +const Size &CameraStream::size() const +{ + return streamConfiguration().size; +} + int CameraStream::configure(const libcamera::StreamConfiguration &cfg) { if (encoder_) @@ -62,7 +67,7 @@ int CameraStream::process(libcamera::FrameBuffer *source, MappedCamera3Buffer *d exif.setMake("libcamera"); exif.setModel("cameraModel"); exif.setOrientation(cameraDevice_->orientation()); - exif.setSize(size_); + exif.setSize(size()); /* * We set the frame's EXIF timestamp as the time of encode. * Since the precision we need for EXIF timestamp is only one diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h index fa295a69404f..b67b4c0ca0b3 100644 --- a/src/android/camera_stream.h +++ b/src/android/camera_stream.h @@ -107,18 +107,16 @@ public: Internal, Mapped, }; - CameraStream(CameraDevice *cameraDev, - camera3_stream_t *androidStream, - const libcamera::StreamConfiguration &cfg, - Type type, unsigned int index); + CameraStream(CameraDevice *cameraDev, Type type, + camera3_stream_t *androidStream, unsigned int index); int outputFormat() const { return androidStream_->format; } - const libcamera::PixelFormat &format() const { return format_; } - const libcamera::Size &size() const { return size_; } Type type() const { return type_; } const libcamera::StreamConfiguration &streamConfiguration() const; libcamera::Stream *stream() const; + const libcamera::PixelFormat &format() const; + const libcamera::Size &size() const; int configure(const libcamera::StreamConfiguration &cfg); int process(libcamera::FrameBuffer *source, @@ -127,13 +125,8 @@ public: private: CameraDevice *cameraDevice_; - libcamera::CameraConfiguration *config_; - camera3_stream_t *androidStream_; Type type_; - - /* Libcamera facing format and sizes. */ - libcamera::PixelFormat format_; - libcamera::Size size_; + camera3_stream_t *androidStream_; /* * The index of the libcamera StreamConfiguration as added during @@ -141,6 +134,7 @@ private: * one or more streams to the Android framework. */ unsigned int index_; + libcamera::CameraConfiguration *config_; std::unique_ptr encoder_; };