From patchwork Wed Sep 1 08:03:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 13590 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 017A2BD87D for ; Wed, 1 Sep 2021 08:03:12 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 752256916A; Wed, 1 Sep 2021 10:03:12 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="XSLfgC79"; dkim-atps=neutral Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 44F0F60253 for ; Wed, 1 Sep 2021 10:03:10 +0200 (CEST) Received: by mail-pj1-x102f.google.com with SMTP id fs6so1321638pjb.4 for ; Wed, 01 Sep 2021 01:03:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=cItemiujnNVa1yFezYOfz3GV3vHnQEPz+KUKqpEfyTA=; b=XSLfgC79Cn1YEjv9Tk5+NoTnXhBJFQWCbOFVdHicneUckm5Om/2G5OwGb8ZMdNbZsI uWYddaU0zWkoQK6CPpne3cKb+HjHnC6aGwixpnMPwqZOLYblcjU7fVocQgqIJlOGh6Ge eNxq2jiSbqqHnrIPAfVUl3ZhkF+oYPQuYqzeg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=cItemiujnNVa1yFezYOfz3GV3vHnQEPz+KUKqpEfyTA=; b=O8o+05U3e8W3YIygy3BDSbqRWiCUu16r8Zj/J80VJ0deCtbvx7m52CscBxKHmFisY5 Qw9AHTZA6HH8RRbSGWG7Ndgs1g++PShlU2WpBboxtOKuaVgbZ2u5pvuCQKLjqRmXuFi4 MQSXKVTfTqczRJPNq7AXfkD7QCexmSe0t+DGXPFvBx4ixO4xOGvb4HJhuXb6cXcDZMPY KK2ACmsRVsrdLwHAj86E+l1iT55+VPs08s2Yr50ZMc0Tiweb4dsPn9Z+3PYHEz3a1OYB 6JgabVu+QcMza1m7OL6K7z6uaISbkkrilYUYrTDBN9MC99ws93ETXfxVkXiUpG83SONk AHAg== X-Gm-Message-State: AOAM533KfV+Kl/THRhLpkaI55i4CDryGpK9l+CaqJna2y86hsTKCFM1x z+kXWLSSXBl+4G69RyfHJWR9amDtGSZPGA== X-Google-Smtp-Source: ABdhPJzUQb/0qlMGjVpIAJu8XzQbHrzQpBKofBPSDw7gLWDk3dR0yRKTouPghh6CmRVm+Rh+aoETAw== X-Received: by 2002:a17:90a:2c0c:: with SMTP id m12mr10318789pjd.107.1630483388257; Wed, 01 Sep 2021 01:03:08 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:203:af31:7c67:f02a:bccc]) by smtp.gmail.com with ESMTPSA id n15sm20487092pff.149.2021.09.01.01.03.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Sep 2021 01:03:07 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 1 Sep 2021 17:03:00 +0900 Message-Id: <20210901080302.68525-1-hiroh@chromium.org> X-Mailer: git-send-email 2.33.0.259.gc128427fd7-goog MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 1/3] android: camera_stream: Create post processor in configure() 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" CameraStream creates PostProcessor and FrameBufferAllocator in the constructor. CameraStream assumes that a used post processor is JPEG post processor. Since we need to support various post processors, we would rather move the creation to configure() so as to return an error code if no proper post processor is found. This also moves FrameBufferAllocator and Mutex creation for consistency. Signed-off-by: Hirokazu Honda Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.h | 1 + src/android/camera_stream.cpp | 37 +++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/android/camera_device.h b/src/android/camera_device.h index a5576927..296c2f18 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -48,6 +48,7 @@ public: unsigned int id() const { return id_; } camera3_device_t *camera3Device() { return &camera3Device_; } + const CameraCapabilities *capabilities() const { return &capabilities_; } const std::shared_ptr &camera() const { return camera_; } const std::string &maker() const { return maker_; } diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp index 01909ec7..3fce29c1 100644 --- a/src/android/camera_stream.cpp +++ b/src/android/camera_stream.cpp @@ -10,6 +10,7 @@ #include #include "camera_buffer.h" +#include "camera_capabilities.h" #include "camera_device.h" #include "camera_metadata.h" #include "jpeg/post_processor_jpeg.h" @@ -47,20 +48,6 @@ CameraStream::CameraStream(CameraDevice *const cameraDevice, : cameraDevice_(cameraDevice), config_(config), type_(type), camera3Stream_(camera3Stream), index_(index) { - if (type_ == Type::Internal || type_ == Type::Mapped) { - /* - * \todo There might be multiple post-processors. The logic - * which should be instantiated here, is deferred for the - * future. For now, we only have PostProcessorJpeg and that - * is what we instantiate here. - */ - postProcessor_ = std::make_unique(cameraDevice_); - } - - if (type == Type::Internal) { - allocator_ = std::make_unique(cameraDevice_->camera()); - mutex_ = std::make_unique(); - } } const StreamConfiguration &CameraStream::configuration() const @@ -75,15 +62,31 @@ Stream *CameraStream::stream() const int CameraStream::configure() { - if (postProcessor_) { + if (type_ == Type::Internal || type_ == Type::Mapped) { + const PixelFormat outFormat = + cameraDevice_->capabilities()->toPixelFormat(camera3Stream_->format); StreamConfiguration output = configuration(); - output.pixelFormat = formats::MJPEG; + output.pixelFormat = outFormat; + + switch (outFormat) { + case formats::MJPEG: + postProcessor_ = std::make_unique(cameraDevice_); + break; + + default: + LOG(HAL, Error) << "Unsupported format: " << outFormat; + return -EINVAL; + } + int ret = postProcessor_->configure(configuration(), output); if (ret) return ret; } - if (allocator_) { + if (type_ == Type::Internal) { + allocator_ = std::make_unique(cameraDevice_->camera()); + mutex_ = std::make_unique(); + int ret = allocator_->allocate(stream()); if (ret < 0) return ret;