From patchwork Thu Aug 19 20:12:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 13405 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 74F2CBD87C for ; Thu, 19 Aug 2021 20:12:26 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3AC5A688A2; Thu, 19 Aug 2021 22:12:26 +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="hFG9ncmd"; dkim-atps=neutral Received: from mail-pj1-x1036.google.com (mail-pj1-x1036.google.com [IPv6:2607:f8b0:4864:20::1036]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 87A3A60264 for ; Thu, 19 Aug 2021 22:12:24 +0200 (CEST) Received: by mail-pj1-x1036.google.com with SMTP id mq3so5739455pjb.5 for ; Thu, 19 Aug 2021 13:12:24 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=ItosC7NO4CmmUbtu226bOx/Uf1SAKXEzgsrPVIUAUxs=; b=hFG9ncmdTXDyUHNf+8uKQWATg89M+A34HmLNSWe3QX6QZySr5brSQAgKq1hGv5DzVZ 59icgcSFAAhxuQsmFEkdPr2guZH8QClUXzPyES69G/sjWQpp4EZET5Ym+FMmrK19Acsw 3GOaHji2PQTMrTuYuG9mHGQ19ptpRkjwfpZkw= 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=ItosC7NO4CmmUbtu226bOx/Uf1SAKXEzgsrPVIUAUxs=; b=GlIiv6lXCbeOuXdVFRd0ZhKl24wKUrEbRDP0wT0y+IbutOh4cvtVV3tchD8zDSyXIh OMJ6Z381poRp4qvlqs3su9Ej3OqM7OfAEhe+gJL8eJPKIQffOFlqM1FQkZA55KX822mX 5+3OMTQuXw4BskAM5VGGJbpAL48pE8iLxkOJ3ZTpCgk3EscGnr7YV3TMTYlgZ8K4dh5R E8nfQz1UA+rZOefgEDg/P/4jt/R0RE0+VdflJd1sSpG+iIj1nOXG9uf+SiRdzO3XOV53 WJ5juQjAIBsFjqxxtEPi1g3FMM6sofXqKZxF86iBv1ojkwgKMQ7cpQMa348a3XzUykVf 1iJw== X-Gm-Message-State: AOAM532kdWbo/9VxmtcAricqdutAUaUKG51FyAxMi+q/f4U4TJq3B4f6 xrt2w8OLwIDhGkt3u21swEh3/vnF7KLXTw== X-Google-Smtp-Source: ABdhPJx7xWqCNIhY4v1zbo0AyKxS+Y5hnxs8o/8EUdUQ6xCN30Y2KKYOBwRwbleDf3yvdaFb/MwZjg== X-Received: by 2002:a17:90b:4b12:: with SMTP id lx18mr512054pjb.121.1629403942755; Thu, 19 Aug 2021 13:12:22 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:203:4298:71ae:6ebb:72eb]) by smtp.gmail.com with ESMTPSA id i11sm4303695pfo.29.2021.08.19.13.12.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Aug 2021 13:12:22 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Fri, 20 Aug 2021 05:12:12 +0900 Message-Id: <20210819201214.1554322-2-hiroh@chromium.org> X-Mailer: git-send-email 2.33.0.rc2.250.ged5fa647cd-goog In-Reply-To: <20210819201214.1554322-1-hiroh@chromium.org> References: <20210819201214.1554322-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/3] android: camera_stream: Create post porcessor 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 --- src/android/camera_device.h | 1 + src/android/camera_stream.cpp | 36 ++++++++++++++++++----------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/android/camera_device.h b/src/android/camera_device.h index dd9aebba..abe8ca44 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -46,6 +46,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 61b44183..c205cd7a 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,30 @@ 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;