[{"id":11092,"web_url":"https://patchwork.libcamera.org/comment/11092/","msgid":"<20200702231657.GE3158543@oden.dyn.berto.se>","date":"2020-07-02T23:16:57","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Kieran,\n\nThanks for your patch.\n\nOn 2020-07-02 22:36:47 +0100, Kieran Bingham wrote:\n> Rather than converting pixelformats through the map, and then\n> dereferencing the iterator later, create a helper to explicitly return a\n> PixelFormat type.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n>  src/android/camera_device.h   |  1 +\n>  2 files changed, 21 insertions(+), 8 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index f788c11e7254..b9031ff0c2a4 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n>  \treturn requestTemplate->get();\n>  }\n>  \n> +PixelFormat CameraDevice::toPixelFormat(int format)\n> +{\n> +\t/* Translate Android format code to libcamera pixel format. */\n> +\tauto it = formatsMap_.find(format);\n> +\tif (it == formatsMap_.end()) {\n> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n> +\t\t\t\t<< \" not supported\";\n> +\t\treturn PixelFormat();\n> +\t}\n> +\n> +\treturn it->second;\n> +}\n> +\n>  /*\n>   * Inspect the stream_list to produce a list of StreamConfiguration to\n>   * be use to configure the Camera.\n> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n>  \n> +\t\tPixelFormat format = toPixelFormat(stream->format);\n> +\n>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n>  \t\t\t       << \", direction: \" << stream->stream_type\n>  \t\t\t       << \", width: \" << stream->width\n>  \t\t\t       << \", height: \" << stream->height\n> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n> +\t\t\t       << \" (\" << format.toString() << \")\";\n>  \t}\n>  \n>  \t/* Only one stream is supported. */\n> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n>  \n>  \t/* Translate Android format code to libcamera pixel format. */\n> -\tauto it = formatsMap_.find(camera3Stream->format);\n> -\tif (it == formatsMap_.end()) {\n> -\t\tLOG(HAL, Error) << \"Requested format \"\n> -\t\t\t\t<< utils::hex(camera3Stream->format)\n> -\t\t\t\t<< \" not supported\";\n> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n> +\tif (!format.isValid())\n>  \t\treturn -EINVAL;\n> -\t}\n>  \n>  \t/*\n>  \t * Hardcode viewfinder role, replacing the generated configuration\n> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n>  \tstreamConfiguration->size.width = camera3Stream->width;\n>  \tstreamConfiguration->size.height = camera3Stream->height;\n> -\tstreamConfiguration->pixelFormat = it->second;\n> +\tstreamConfiguration->pixelFormat = format;\n>  \n>  \tswitch (config_->validate()) {\n>  \tcase CameraConfiguration::Valid:\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index ed11410a5577..5bd6cf416156 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -72,6 +72,7 @@ private:\n>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n> +\tlibcamera::PixelFormat toPixelFormat(int format);\n>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n>  \t\t\t\t\t\t\t  int64_t timestamp);\n>  \n> -- \n> 2.25.1\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 1B977BFFE2\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  2 Jul 2020 23:17:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A95D460C57;\n\tFri,  3 Jul 2020 01:16:59 +0200 (CEST)","from mail-lj1-x241.google.com (mail-lj1-x241.google.com\n\t[IPv6:2a00:1450:4864:20::241])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2F536609C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 01:16:59 +0200 (CEST)","by mail-lj1-x241.google.com with SMTP id h19so34385949ljg.13\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 02 Jul 2020 16:16:59 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\ts12sm995580ljd.116.2020.07.02.16.16.57\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 02 Jul 2020 16:16:58 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"O0lAX+YT\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=YWUo3lwySAJiYxcOk46LHLZTB6RX11p8oeWPi/MBeHc=;\n\tb=O0lAX+YTzdOjosRe2UqC4nWHp2d2shUMFsKyTN8FAG4l7P0Faxrixf20H8P7ZXswm+\n\txkGNCNvwB4nrjO4VUlqK7UJj613SyT7kNqcpIKqi7/HN998PbSjWZMD7sQTU7s3rqlG7\n\tmgoQJcWysNmH3O0sdQ+1IbVAJxwqPfxtWz/bLiweMfm+54QSopQIX8GlU9jIm/Om3Es/\n\tbbwh9B5EuheKh/+HgHHY1F6aWqxyMBhKELTMHW5E6ckphyD9+l/xjwoyxRLq/df7UZZ6\n\tWtCdJuFuVo0Ek4XU+zFLCiExYjqmUtZFAOPWMZtXBhZeHvtsg6Dn1IVHDTobs1g24qtz\n\tPExQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=YWUo3lwySAJiYxcOk46LHLZTB6RX11p8oeWPi/MBeHc=;\n\tb=UpxBJSvnUm3yw1j/g+uJdrvBAZH27jjPSd1SViyZf45RjjDqwJanjjnKYsaTMS2lIO\n\t9i4dDbdtarhslHBseHQeEq64OL/KaqGOAarhW3RWWARW2eOTSVXlUENErpxdvQp5IY3P\n\te5D70FMD9HYgU53xrSmeR0flg1uTJnWyevv+krrtV0+4nWhyat+AGPhPUIJfN8HH6ngi\n\tnuA+toM4anUEWSKGk0BvNBpPjlj0cBs0Z5EvLL/H6WcYTgTr82tfuLXox/PXKLEGQqut\n\t46bRl+oDfMdOwYIBk2QOmJVGWSX7OJCWLqzfHFPyQm9sp1Ihne0AxMuFB8Mdphz9kAMn\n\t3W2w==","X-Gm-Message-State":"AOAM532ZnRCZ+/J2YZQS2IX8DpGMFIgh6B/PKPAZvvYmW3rKkvwZO0e8\n\tjJFFEi+4hTcuigdCCI7jz7dbCg==","X-Google-Smtp-Source":"ABdhPJypZGAp1xb4V594Da1afkBJf/Fw1nPRhtRbnfDEuMzFxw25J6ewshjndgjFJDKw8W64k3x/bQ==","X-Received":"by 2002:a2e:b53c:: with SMTP id\n\tz28mr9977859ljm.439.1593731818512; \n\tThu, 02 Jul 2020 16:16:58 -0700 (PDT)","Date":"Fri, 3 Jul 2020 01:16:57 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200702231657.GE3158543@oden.dyn.berto.se>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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 <libcamera-devel@lists.libcamera.org>","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":11120,"web_url":"https://patchwork.libcamera.org/comment/11120/","msgid":"<20200703085931.4md6y5oalaspev2d@uno.localdomain>","date":"2020-07-03T08:59:31","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran,\n\nOn Thu, Jul 02, 2020 at 10:36:47PM +0100, Kieran Bingham wrote:\n> Rather than converting pixelformats through the map, and then\n> dereferencing the iterator later, create a helper to explicitly return a\n> PixelFormat type.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nLooks good, thanks\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\n\n> ---\n>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n>  src/android/camera_device.h   |  1 +\n>  2 files changed, 21 insertions(+), 8 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index f788c11e7254..b9031ff0c2a4 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n>  \treturn requestTemplate->get();\n>  }\n>\n> +PixelFormat CameraDevice::toPixelFormat(int format)\n> +{\n> +\t/* Translate Android format code to libcamera pixel format. */\n> +\tauto it = formatsMap_.find(format);\n> +\tif (it == formatsMap_.end()) {\n> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n> +\t\t\t\t<< \" not supported\";\n> +\t\treturn PixelFormat();\n> +\t}\n> +\n> +\treturn it->second;\n> +}\n> +\n>  /*\n>   * Inspect the stream_list to produce a list of StreamConfiguration to\n>   * be use to configure the Camera.\n> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n>\n> +\t\tPixelFormat format = toPixelFormat(stream->format);\n> +\n>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n>  \t\t\t       << \", direction: \" << stream->stream_type\n>  \t\t\t       << \", width: \" << stream->width\n>  \t\t\t       << \", height: \" << stream->height\n> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n> +\t\t\t       << \" (\" << format.toString() << \")\";\n>  \t}\n>\n>  \t/* Only one stream is supported. */\n> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n>\n>  \t/* Translate Android format code to libcamera pixel format. */\n> -\tauto it = formatsMap_.find(camera3Stream->format);\n> -\tif (it == formatsMap_.end()) {\n> -\t\tLOG(HAL, Error) << \"Requested format \"\n> -\t\t\t\t<< utils::hex(camera3Stream->format)\n> -\t\t\t\t<< \" not supported\";\n> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n> +\tif (!format.isValid())\n>  \t\treturn -EINVAL;\n> -\t}\n>\n>  \t/*\n>  \t * Hardcode viewfinder role, replacing the generated configuration\n> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n>  \tstreamConfiguration->size.width = camera3Stream->width;\n>  \tstreamConfiguration->size.height = camera3Stream->height;\n> -\tstreamConfiguration->pixelFormat = it->second;\n> +\tstreamConfiguration->pixelFormat = format;\n>\n>  \tswitch (config_->validate()) {\n>  \tcase CameraConfiguration::Valid:\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index ed11410a5577..5bd6cf416156 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -72,6 +72,7 @@ private:\n>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n> +\tlibcamera::PixelFormat toPixelFormat(int format);\n>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n>  \t\t\t\t\t\t\t  int64_t timestamp);\n>\n> --\n> 2.25.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 1B155BFFE2\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jul 2020 08:56:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E544D60C59;\n\tFri,  3 Jul 2020 10:56:00 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[217.70.183.201])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B9E3660C50\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 10:55:59 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay8-d.mail.gandi.net (Postfix) with ESMTPSA id 22EFC1BF209;\n\tFri,  3 Jul 2020 08:55:58 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Fri, 3 Jul 2020 10:59:31 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200703085931.4md6y5oalaspev2d@uno.localdomain>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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 <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>"}},{"id":11121,"web_url":"https://patchwork.libcamera.org/comment/11121/","msgid":"<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>","date":"2020-07-03T09:04:00","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Sorry, one nit\n\nOn Thu, Jul 02, 2020 at 10:36:47PM +0100, Kieran Bingham wrote:\n> Rather than converting pixelformats through the map, and then\n> dereferencing the iterator later, create a helper to explicitly return a\n> PixelFormat type.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n>  src/android/camera_device.h   |  1 +\n>  2 files changed, 21 insertions(+), 8 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index f788c11e7254..b9031ff0c2a4 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n>  \treturn requestTemplate->get();\n>  }\n>\n> +PixelFormat CameraDevice::toPixelFormat(int format)\n> +{\n> +\t/* Translate Android format code to libcamera pixel format. */\n> +\tauto it = formatsMap_.find(format);\n> +\tif (it == formatsMap_.end()) {\n> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n> +\t\t\t\t<< \" not supported\";\n> +\t\treturn PixelFormat();\n> +\t}\n> +\n> +\treturn it->second;\n> +}\n> +\n>  /*\n>   * Inspect the stream_list to produce a list of StreamConfiguration to\n>   * be use to configure the Camera.\n> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n>\n> +\t\tPixelFormat format = toPixelFormat(stream->format);\n> +\n>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n>  \t\t\t       << \", direction: \" << stream->stream_type\n>  \t\t\t       << \", width: \" << stream->width\n>  \t\t\t       << \", height: \" << stream->height\n> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n> +\t\t\t       << \" (\" << format.toString() << \")\";\n\nIs it a good idea to report the mapped format when priting information\nabout the android requested streams ? Just wondering...\n\n>  \t}\n>\n>  \t/* Only one stream is supported. */\n> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n>\n>  \t/* Translate Android format code to libcamera pixel format. */\n> -\tauto it = formatsMap_.find(camera3Stream->format);\n> -\tif (it == formatsMap_.end()) {\n> -\t\tLOG(HAL, Error) << \"Requested format \"\n> -\t\t\t\t<< utils::hex(camera3Stream->format)\n> -\t\t\t\t<< \" not supported\";\n> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n> +\tif (!format.isValid())\n>  \t\treturn -EINVAL;\n> -\t}\n>\n>  \t/*\n>  \t * Hardcode viewfinder role, replacing the generated configuration\n> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n>  \tstreamConfiguration->size.width = camera3Stream->width;\n>  \tstreamConfiguration->size.height = camera3Stream->height;\n> -\tstreamConfiguration->pixelFormat = it->second;\n> +\tstreamConfiguration->pixelFormat = format;\n>\n>  \tswitch (config_->validate()) {\n>  \tcase CameraConfiguration::Valid:\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index ed11410a5577..5bd6cf416156 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -72,6 +72,7 @@ private:\n>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n> +\tlibcamera::PixelFormat toPixelFormat(int format);\n>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n>  \t\t\t\t\t\t\t  int64_t timestamp);\n>\n> --\n> 2.25.1\n>\n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 DA63CBE905\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jul 2020 09:00:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7CD1A60C56;\n\tFri,  3 Jul 2020 11:00:30 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[217.70.183.194])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5B2E860C55\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 11:00:29 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 88D684000A;\n\tFri,  3 Jul 2020 09:00:28 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Fri, 3 Jul 2020 11:04:00 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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 <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>"}},{"id":11125,"web_url":"https://patchwork.libcamera.org/comment/11125/","msgid":"<2eb644a8-6a52-dde2-a80d-1d8f06de03f7@ideasonboard.com>","date":"2020-07-03T09:19:58","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\n\nOn 03/07/2020 10:04, Jacopo Mondi wrote:\n> Sorry, one nit\n> \n> On Thu, Jul 02, 2020 at 10:36:47PM +0100, Kieran Bingham wrote:\n>> Rather than converting pixelformats through the map, and then\n>> dereferencing the iterator later, create a helper to explicitly return a\n>> PixelFormat type.\n>>\n>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>> ---\n>>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n>>  src/android/camera_device.h   |  1 +\n>>  2 files changed, 21 insertions(+), 8 deletions(-)\n>>\n>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n>> index f788c11e7254..b9031ff0c2a4 100644\n>> --- a/src/android/camera_device.cpp\n>> +++ b/src/android/camera_device.cpp\n>> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n>>  \treturn requestTemplate->get();\n>>  }\n>>\n>> +PixelFormat CameraDevice::toPixelFormat(int format)\n>> +{\n>> +\t/* Translate Android format code to libcamera pixel format. */\n>> +\tauto it = formatsMap_.find(format);\n>> +\tif (it == formatsMap_.end()) {\n>> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n>> +\t\t\t\t<< \" not supported\";\n>> +\t\treturn PixelFormat();\n>> +\t}\n>> +\n>> +\treturn it->second;\n>> +}\n>> +\n>>  /*\n>>   * Inspect the stream_list to produce a list of StreamConfiguration to\n>>   * be use to configure the Camera.\n>> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n>>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n>>\n>> +\t\tPixelFormat format = toPixelFormat(stream->format);\n>> +\n>>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n>>  \t\t\t       << \", direction: \" << stream->stream_type\n>>  \t\t\t       << \", width: \" << stream->width\n>>  \t\t\t       << \", height: \" << stream->height\n>> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n>> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n>> +\t\t\t       << \" (\" << format.toString() << \")\";\n> \n> Is it a good idea to report the mapped format when priting information\n> about the android requested streams ? Just wondering...\n> \n\nIt certainly helps to know what the stream configurations are:\n\nWithout:\n\n> <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023\n> <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021\n\nWith:\n\n> <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023 (NV12)\n> <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021 (MJPEG)\n\n\nOtherwise, we can add a toString() on the android formats of course,\n\nBut it also really helps in the cros-camera-tests too to see when a\nformat is requested that we don't yet handle:\n\n> <line-prefix-snip> Stream #0, direction: 0, width: 320, height: 240, format: 0x20203859 (<INVALID>)\n\n--\nKieran\n\n\n\n>>  \t}\n>>\n>>  \t/* Only one stream is supported. */\n>> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n>>\n>>  \t/* Translate Android format code to libcamera pixel format. */\n>> -\tauto it = formatsMap_.find(camera3Stream->format);\n>> -\tif (it == formatsMap_.end()) {\n>> -\t\tLOG(HAL, Error) << \"Requested format \"\n>> -\t\t\t\t<< utils::hex(camera3Stream->format)\n>> -\t\t\t\t<< \" not supported\";\n>> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n>> +\tif (!format.isValid())\n>>  \t\treturn -EINVAL;\n>> -\t}\n>>\n>>  \t/*\n>>  \t * Hardcode viewfinder role, replacing the generated configuration\n>> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n>>  \tstreamConfiguration->size.width = camera3Stream->width;\n>>  \tstreamConfiguration->size.height = camera3Stream->height;\n>> -\tstreamConfiguration->pixelFormat = it->second;\n>> +\tstreamConfiguration->pixelFormat = format;\n>>\n>>  \tswitch (config_->validate()) {\n>>  \tcase CameraConfiguration::Valid:\n>> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n>> index ed11410a5577..5bd6cf416156 100644\n>> --- a/src/android/camera_device.h\n>> +++ b/src/android/camera_device.h\n>> @@ -72,6 +72,7 @@ private:\n>>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n>>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n>> +\tlibcamera::PixelFormat toPixelFormat(int format);\n>>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n>>  \t\t\t\t\t\t\t  int64_t timestamp);\n>>\n>> --\n>> 2.25.1\n>>\n>> _______________________________________________\n>> libcamera-devel mailing list\n>> libcamera-devel@lists.libcamera.org\n>> https://lists.libcamera.org/listinfo/libcamera-devel","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 60C06BFFE2\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jul 2020 09:20:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CF99560C57;\n\tFri,  3 Jul 2020 11:20:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 38A4160C50\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 11:20:01 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9D4F851B;\n\tFri,  3 Jul 2020 11:20:00 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"boA7jx4E\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1593768000;\n\tbh=s4bx/LPxAL4sNsy7HxKxgYlLxipMxv8Rd3QicuyMipI=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=boA7jx4E1ClhhR++5AhmL0IJOFm9JTqLjtRIO2Tu3MSfmqJSxdKq0gzOvYu2hy0qh\n\tmkNniKGEF1IsKx17XR0cUsBlBxOdPEHiFhn5ULdZWZkCQhdZNxTV7F3gz3UTXRPK2G\n\tK/2oJDnaiFT+9br7XV1sh4Rdm1xAS/mihbOcUzPg=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>\n\t<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<2eb644a8-6a52-dde2-a80d-1d8f06de03f7@ideasonboard.com>","Date":"Fri, 3 Jul 2020 10:19:58 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.8.0","MIME-Version":"1.0","In-Reply-To":"<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <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>"}},{"id":11129,"web_url":"https://patchwork.libcamera.org/comment/11129/","msgid":"<20200703094021.sumaod7szda2s56i@uno.localdomain>","date":"2020-07-03T09:40:21","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Fri, Jul 03, 2020 at 10:19:58AM +0100, Kieran Bingham wrote:\n> Hi Jacopo,\n>\n>\n> On 03/07/2020 10:04, Jacopo Mondi wrote:\n> > Sorry, one nit\n> >\n> > On Thu, Jul 02, 2020 at 10:36:47PM +0100, Kieran Bingham wrote:\n> >> Rather than converting pixelformats through the map, and then\n> >> dereferencing the iterator later, create a helper to explicitly return a\n> >> PixelFormat type.\n> >>\n> >> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >> ---\n> >>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n> >>  src/android/camera_device.h   |  1 +\n> >>  2 files changed, 21 insertions(+), 8 deletions(-)\n> >>\n> >> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> >> index f788c11e7254..b9031ff0c2a4 100644\n> >> --- a/src/android/camera_device.cpp\n> >> +++ b/src/android/camera_device.cpp\n> >> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n> >>  \treturn requestTemplate->get();\n> >>  }\n> >>\n> >> +PixelFormat CameraDevice::toPixelFormat(int format)\n> >> +{\n> >> +\t/* Translate Android format code to libcamera pixel format. */\n> >> +\tauto it = formatsMap_.find(format);\n> >> +\tif (it == formatsMap_.end()) {\n> >> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n> >> +\t\t\t\t<< \" not supported\";\n> >> +\t\treturn PixelFormat();\n> >> +\t}\n> >> +\n> >> +\treturn it->second;\n> >> +}\n> >> +\n> >>  /*\n> >>   * Inspect the stream_list to produce a list of StreamConfiguration to\n> >>   * be use to configure the Camera.\n> >> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n> >>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n> >>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n> >>\n> >> +\t\tPixelFormat format = toPixelFormat(stream->format);\n> >> +\n> >>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n> >>  \t\t\t       << \", direction: \" << stream->stream_type\n> >>  \t\t\t       << \", width: \" << stream->width\n> >>  \t\t\t       << \", height: \" << stream->height\n> >> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n> >> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n> >> +\t\t\t       << \" (\" << format.toString() << \")\";\n> >\n> > Is it a good idea to report the mapped format when priting information\n> > about the android requested streams ? Just wondering...\n> >\n>\n> It certainly helps to know what the stream configurations are:\n>\n> Without:\n>\n> > <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023\n> > <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021\n>\n> With:\n>\n> > <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023 (NV12)\n> > <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021 (MJPEG)\n>\n>\n> Otherwise, we can add a toString() on the android formats of course,\n>\n> But it also really helps in the cros-camera-tests too to see when a\n> format is requested that we don't yet handle:\n>\n> > <line-prefix-snip> Stream #0, direction: 0, width: 320, height: 240, format: 0x20203859 (<INVALID>)\n>\n\nAll good, it was an honest question as the mapping is something we\nimplement, not something provided by the framework, and initially the\nprintout was meant to indentify what we receive\n\n> --\n> Kieran\n>\n>\n>\n> >>  \t}\n> >>\n> >>  \t/* Only one stream is supported. */\n> >> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n> >>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n> >>\n> >>  \t/* Translate Android format code to libcamera pixel format. */\n> >> -\tauto it = formatsMap_.find(camera3Stream->format);\n> >> -\tif (it == formatsMap_.end()) {\n> >> -\t\tLOG(HAL, Error) << \"Requested format \"\n> >> -\t\t\t\t<< utils::hex(camera3Stream->format)\n> >> -\t\t\t\t<< \" not supported\";\n> >> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n> >> +\tif (!format.isValid())\n> >>  \t\treturn -EINVAL;\n> >> -\t}\n> >>\n> >>  \t/*\n> >>  \t * Hardcode viewfinder role, replacing the generated configuration\n> >> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n> >>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n> >>  \tstreamConfiguration->size.width = camera3Stream->width;\n> >>  \tstreamConfiguration->size.height = camera3Stream->height;\n> >> -\tstreamConfiguration->pixelFormat = it->second;\n> >> +\tstreamConfiguration->pixelFormat = format;\n> >>\n> >>  \tswitch (config_->validate()) {\n> >>  \tcase CameraConfiguration::Valid:\n> >> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> >> index ed11410a5577..5bd6cf416156 100644\n> >> --- a/src/android/camera_device.h\n> >> +++ b/src/android/camera_device.h\n> >> @@ -72,6 +72,7 @@ private:\n> >>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n> >>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n> >>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n> >> +\tlibcamera::PixelFormat toPixelFormat(int format);\n> >>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n> >>  \t\t\t\t\t\t\t  int64_t timestamp);\n> >>\n> >> --\n> >> 2.25.1\n> >>\n> >> _______________________________________________\n> >> libcamera-devel mailing list\n> >> libcamera-devel@lists.libcamera.org\n> >> https://lists.libcamera.org/listinfo/libcamera-devel\n>\n> --\n> Regards\n> --\n> Kieran","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 15012BE905\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jul 2020 09:36:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AF66560C58;\n\tFri,  3 Jul 2020 11:36:55 +0200 (CEST)","from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 71DB160C50\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 11:36:54 +0200 (CEST)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 89D67E0004;\n\tFri,  3 Jul 2020 09:36:51 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Fri, 3 Jul 2020 11:40:21 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20200703094021.sumaod7szda2s56i@uno.localdomain>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>\n\t<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>\n\t<2eb644a8-6a52-dde2-a80d-1d8f06de03f7@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<2eb644a8-6a52-dde2-a80d-1d8f06de03f7@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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 <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>"}},{"id":11131,"web_url":"https://patchwork.libcamera.org/comment/11131/","msgid":"<73bf3996-84f8-8b09-e5db-08a979ddc451@ideasonboard.com>","date":"2020-07-03T09:40:39","subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn 03/07/2020 10:40, Jacopo Mondi wrote:\n> Hi Kieran\n> \n> On Fri, Jul 03, 2020 at 10:19:58AM +0100, Kieran Bingham wrote:\n>> Hi Jacopo,\n>>\n>>\n>> On 03/07/2020 10:04, Jacopo Mondi wrote:\n>>> Sorry, one nit\n>>>\n>>> On Thu, Jul 02, 2020 at 10:36:47PM +0100, Kieran Bingham wrote:\n>>>> Rather than converting pixelformats through the map, and then\n>>>> dereferencing the iterator later, create a helper to explicitly return a\n>>>> PixelFormat type.\n>>>>\n>>>> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>>> ---\n>>>>  src/android/camera_device.cpp | 28 ++++++++++++++++++++--------\n>>>>  src/android/camera_device.h   |  1 +\n>>>>  2 files changed, 21 insertions(+), 8 deletions(-)\n>>>>\n>>>> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n>>>> index f788c11e7254..b9031ff0c2a4 100644\n>>>> --- a/src/android/camera_device.cpp\n>>>> +++ b/src/android/camera_device.cpp\n>>>> @@ -923,6 +923,19 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type)\n>>>>  \treturn requestTemplate->get();\n>>>>  }\n>>>>\n>>>> +PixelFormat CameraDevice::toPixelFormat(int format)\n>>>> +{\n>>>> +\t/* Translate Android format code to libcamera pixel format. */\n>>>> +\tauto it = formatsMap_.find(format);\n>>>> +\tif (it == formatsMap_.end()) {\n>>>> +\t\tLOG(HAL, Error) << \"Requested format \" << utils::hex(format)\n>>>> +\t\t\t\t<< \" not supported\";\n>>>> +\t\treturn PixelFormat();\n>>>> +\t}\n>>>> +\n>>>> +\treturn it->second;\n>>>> +}\n>>>> +\n>>>>  /*\n>>>>   * Inspect the stream_list to produce a list of StreamConfiguration to\n>>>>   * be use to configure the Camera.\n>>>> @@ -932,11 +945,14 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>>>  \tfor (unsigned int i = 0; i < stream_list->num_streams; ++i) {\n>>>>  \t\tcamera3_stream_t *stream = stream_list->streams[i];\n>>>>\n>>>> +\t\tPixelFormat format = toPixelFormat(stream->format);\n>>>> +\n>>>>  \t\tLOG(HAL, Info) << \"Stream #\" << i\n>>>>  \t\t\t       << \", direction: \" << stream->stream_type\n>>>>  \t\t\t       << \", width: \" << stream->width\n>>>>  \t\t\t       << \", height: \" << stream->height\n>>>> -\t\t\t       << \", format: \" << utils::hex(stream->format);\n>>>> +\t\t\t       << \", format: \" << utils::hex(stream->format)\n>>>> +\t\t\t       << \" (\" << format.toString() << \")\";\n>>>\n>>> Is it a good idea to report the mapped format when priting information\n>>> about the android requested streams ? Just wondering...\n>>>\n>>\n>> It certainly helps to know what the stream configurations are:\n>>\n>> Without:\n>>\n>>> <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023\n>>> <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021\n>>\n>> With:\n>>\n>>> <line-prefix-snip> Stream #0, direction: 0, width: 2560, height: 1920, format: 0x00000023 (NV12)\n>>> <line-prefix-snip> Stream #1, direction: 0, width: 2560, height: 1920, format: 0x00000021 (MJPEG)\n>>\n>>\n>> Otherwise, we can add a toString() on the android formats of course,\n>>\n>> But it also really helps in the cros-camera-tests too to see when a\n>> format is requested that we don't yet handle:\n>>\n>>> <line-prefix-snip> Stream #0, direction: 0, width: 320, height: 240, format: 0x20203859 (<INVALID>)\n>>\n> \n> All good, it was an honest question as the mapping is something we\n> implement, not something provided by the framework, and initially the\n> printout was meant to indentify what we receive\n\nI understand, I hope the () help identify that distinction.\n\nI feel it's very useful to know at the point we print all the requested\nstreams what format /we/ interpret that to be though.\n\nI'd probably like to see the 0x20203859 converted to the relevant\nandroid string too, but still keep the libcamera conversion (we have to\nconvert it anyway) so we know if we were able to map successfully or not.\n\nStill, that can happen later if we need to go that far.\n\n\n> \n>> --\n>> Kieran\n>>\n>>\n>>\n>>>>  \t}\n>>>>\n>>>>  \t/* Only one stream is supported. */\n>>>> @@ -947,13 +963,9 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>>>  \tcamera3_stream_t *camera3Stream = stream_list->streams[0];\n>>>>\n>>>>  \t/* Translate Android format code to libcamera pixel format. */\n>>>> -\tauto it = formatsMap_.find(camera3Stream->format);\n>>>> -\tif (it == formatsMap_.end()) {\n>>>> -\t\tLOG(HAL, Error) << \"Requested format \"\n>>>> -\t\t\t\t<< utils::hex(camera3Stream->format)\n>>>> -\t\t\t\t<< \" not supported\";\n>>>> +\tPixelFormat format = toPixelFormat(camera3Stream->format);\n>>>> +\tif (!format.isValid())\n>>>>  \t\treturn -EINVAL;\n>>>> -\t}\n>>>>\n>>>>  \t/*\n>>>>  \t * Hardcode viewfinder role, replacing the generated configuration\n>>>> @@ -969,7 +981,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)\n>>>>  \tStreamConfiguration *streamConfiguration = &config_->at(0);\n>>>>  \tstreamConfiguration->size.width = camera3Stream->width;\n>>>>  \tstreamConfiguration->size.height = camera3Stream->height;\n>>>> -\tstreamConfiguration->pixelFormat = it->second;\n>>>> +\tstreamConfiguration->pixelFormat = format;\n>>>>\n>>>>  \tswitch (config_->validate()) {\n>>>>  \tcase CameraConfiguration::Valid:\n>>>> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n>>>> index ed11410a5577..5bd6cf416156 100644\n>>>> --- a/src/android/camera_device.h\n>>>> +++ b/src/android/camera_device.h\n>>>> @@ -72,6 +72,7 @@ private:\n>>>>  \tstd::tuple<uint32_t, uint32_t> calculateStaticMetadataSize();\n>>>>  \tvoid notifyShutter(uint32_t frameNumber, uint64_t timestamp);\n>>>>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n>>>> +\tlibcamera::PixelFormat toPixelFormat(int format);\n>>>>  \tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n>>>>  \t\t\t\t\t\t\t  int64_t timestamp);\n>>>>\n>>>> --\n>>>> 2.25.1\n>>>>\n>>>> _______________________________________________\n>>>> libcamera-devel mailing list\n>>>> libcamera-devel@lists.libcamera.org\n>>>> https://lists.libcamera.org/listinfo/libcamera-devel\n>>\n>> --\n>> Regards\n>> --\n>> Kieran","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 0905FBFFE2\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  3 Jul 2020 09:40:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7D18B60C59;\n\tFri,  3 Jul 2020 11:40:44 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A12260C50\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  3 Jul 2020 11:40:43 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9BC6051B;\n\tFri,  3 Jul 2020 11:40:42 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"atYfc6fq\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1593769243;\n\tbh=VzP7bfzXmevr2fuMgxDU96yunIFHQbnC2xqv1MRxtac=;\n\th=Reply-To:Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=atYfc6fqAPln+cefgOuGoityQUrzHxZptVgN46Zx/CgTtOcU3xzHIvDprpTCmv2sE\n\t97MCdFUudVI8apvpt7V0rn66JOdn4pOcUNZhr5GdBat35rSnKmgnlxsjCeTNaw2ATU\n\tvHKXLvZqkRk/5PS276PF0129ovz62CGSOBL3xGkw=","To":"Jacopo Mondi <jacopo@jmondi.org>","References":"<20200702213654.2129054-1-kieran.bingham@ideasonboard.com>\n\t<20200702213654.2129054-3-kieran.bingham@ideasonboard.com>\n\t<20200703090400.cbgkdbbsdbpbezep@uno.localdomain>\n\t<2eb644a8-6a52-dde2-a80d-1d8f06de03f7@ideasonboard.com>\n\t<20200703094021.sumaod7szda2s56i@uno.localdomain>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tWZw01QYHU/GUV/zHJSFk","Organization":"Ideas on Board","Message-ID":"<73bf3996-84f8-8b09-e5db-08a979ddc451@ideasonboard.com>","Date":"Fri, 3 Jul 2020 10:40:39 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.8.0","MIME-Version":"1.0","In-Reply-To":"<20200703094021.sumaod7szda2s56i@uno.localdomain>","Content-Language":"en-GB","Subject":"Re: [libcamera-devel] [PATCH v2 2/9] android: camera_device:\n\tProvide a toPixelFormat helper","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>","Reply-To":"kieran.bingham@ideasonboard.com","Cc":"libcamera devel <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>"}}]