[{"id":14153,"web_url":"https://patchwork.libcamera.org/comment/14153/","msgid":"<20201208183947.xnyk5lv3drigwcrc@uno.localdomain>","date":"2020-12-08T18:39:47","subject":"Re: [libcamera-devel] [PATCH v4 2/3] android: camera_device: Use\n\tCamera3StreamConfig in configureStreams()","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Hiro,\n\nOn Tue, Dec 08, 2020 at 03:42:32AM +0000, Hirokazu Honda wrote:\n> Use the newly introduced Camera3StreamConfig to associate the\n> Android requested streams with the associated StreamConfiguration\n> in a vector of configurations.\n>\n> This change prepares to sort the vector of configuration before using\n> it to configure the Camera and populate the streams_ vector.\n>\n> No functional changes intended.\n>\n> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>\n\nAs per-previous version:\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n> ---\n>  src/android/camera_device.cpp | 52 +++++++++++++++++++++--------------\n>  1 file changed, 31 insertions(+), 21 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 09269d95..b7bf3d88 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1240,6 +1240,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tstreams_.clear();\n>  \tstreams_.reserve(stream_list->num_streams);\n>\n> +\tstd::vector<Camera3StreamConfig> streamConfigs;\n> +\tstreamConfigs.reserve(stream_list->num_streams);\n> +\n>  \t/* First handle all non-MJPEG streams. */\n>  \tcamera3_stream_t *jpegStream = nullptr;\n>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n> @@ -1270,14 +1273,12 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \t\t\tcontinue;\n>  \t\t}\n>\n> -\t\tStreamConfiguration streamConfiguration;\n> -\t\tstreamConfiguration.size = size;\n> -\t\tstreamConfiguration.pixelFormat = format;\n> -\n> -\t\tconfig_->addConfiguration(streamConfiguration);\n> -\t\tstreams_.emplace_back(this, CameraStream::Type::Direct,\n> -\t\t\t\t      stream, config_->size() - 1);\n> -\t\tstream->priv = static_cast<void *>(&streams_.back());\n> +\t\tCamera3StreamConfig streamConfig;\n> +\t\tstreamConfig.streams = { stream };\n> +\t\tstreamConfig.types = { CameraStream::Type::Direct };\n> +\t\tstreamConfig.config.size = size;\n> +\t\tstreamConfig.config.pixelFormat = format;\n> +\t\tstreamConfigs.push_back(std::move(streamConfig));\n>  \t}\n>\n>  \t/* Now handle the MJPEG streams, adding a new stream if required. */\n> @@ -1286,9 +1287,8 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \t\tint index = -1;\n>\n>  \t\t/* Search for a compatible stream in the non-JPEG ones. */\n> -\t\tfor (unsigned int i = 0; i < config_->size(); i++) {\n> -\t\t\tStreamConfiguration &cfg = config_->at(i);\n> -\n> +\t\tfor (size_t i = 0; i < streamConfigs.size(); ++i) {\n> +\t\t\tconst auto &cfg = streamConfigs[i].config;\n>  \t\t\t/*\n>  \t\t\t * \\todo The PixelFormat must also be compatible with\n>  \t\t\t * the encoder.\n> @@ -1310,28 +1310,38 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \t\t * introduce a new stream to satisfy the request requirements.\n>  \t\t */\n>  \t\tif (index < 0) {\n> -\t\t\tStreamConfiguration streamConfiguration;\n> -\n>  \t\t\t/*\n>  \t\t\t * \\todo The pixelFormat should be a 'best-fit' choice\n>  \t\t\t * and may require a validation cycle. This is not yet\n>  \t\t\t * handled, and should be considered as part of any\n>  \t\t\t * stream configuration reworks.\n>  \t\t\t */\n> -\t\t\tstreamConfiguration.size.width = jpegStream->width;\n> -\t\t\tstreamConfiguration.size.height = jpegStream->height;\n> -\t\t\tstreamConfiguration.pixelFormat = formats::NV12;\n> +\t\t\tCamera3StreamConfig streamConfig;\n> +\t\t\tstreamConfig.config.size.width = jpegStream->width;\n> +\t\t\tstreamConfig.config.size.height = jpegStream->height;\n> +\t\t\tstreamConfig.config.pixelFormat = formats::NV12;\n> +\t\t\tstreamConfigs.push_back(std::move(streamConfig));\n>\n> -\t\t\tLOG(HAL, Info) << \"Adding \" << streamConfiguration.toString()\n> +\t\t\tLOG(HAL, Info) << \"Adding \" << streamConfig.config.toString()\n>  \t\t\t\t       << \" for MJPEG support\";\n>\n>  \t\t\ttype = CameraStream::Type::Internal;\n> -\t\t\tconfig_->addConfiguration(streamConfiguration);\n> -\t\t\tindex = config_->size() - 1;\n> +\t\t\tindex = streamConfigs.size() - 1;\n>  \t\t}\n>\n> -\t\tstreams_.emplace_back(this, type, jpegStream, index);\n> -\t\tjpegStream->priv = static_cast<void *>(&streams_.back());\n> +\t\tstreamConfigs[index].streams.push_back(jpegStream);\n> +\t\tstreamConfigs[index].types.push_back(type);\n> +\t}\n> +\n> +\tfor (const auto &streamConfig : streamConfigs) {\n> +\t\tconfig_->addConfiguration(streamConfig.config);\n> +\t\tfor (size_t i = 0; i < streamConfig.streams.size(); ++i) {\n> +\t\t\tcamera3_stream_t *stream = streamConfig.streams[i];\n> +\t\t\tconst CameraStream::Type type = streamConfig.types[i];\n> +\t\t\tstreams_.emplace_back(this, type,\n> +\t\t\t\t\t      stream, config_->size() - 1);\n> +\t\t\tstream->priv = static_cast<void*>(&streams_.back());\n> +\t\t}\n>  \t}\n>\n>  \tswitch (config_->validate()) {\n> --\n> 2.29.2.576.ga3fc446d84-goog","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 20281BDB1F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  8 Dec 2020 18:39:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EC47367F0A;\n\tTue,  8 Dec 2020 19:39:40 +0100 (CET)","from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net\n\t[217.70.183.195])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4EAD067F09\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  8 Dec 2020 19:39:39 +0100 (CET)","from uno.localdomain (mob-37-118-42-44.net.vodafone.it\n\t[37.118.42.44]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 93E7B60006;\n\tTue,  8 Dec 2020 18:39:38 +0000 (UTC)"],"X-Originating-IP":"37.118.42.44","Date":"Tue, 8 Dec 2020 19:39:47 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Hirokazu Honda <hiroh@chromium.org>","Message-ID":"<20201208183947.xnyk5lv3drigwcrc@uno.localdomain>","References":"<20201208034234.2501401-1-hiroh@chromium.org>\n\t<20201208034234.2501401-2-hiroh@chromium.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201208034234.2501401-2-hiroh@chromium.org>","Subject":"Re: [libcamera-devel] [PATCH v4 2/3] android: camera_device: Use\n\tCamera3StreamConfig in configureStreams()","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>","Cc":"libcamera-devel@lists.libcamera.org","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]