[{"id":13647,"web_url":"https://patchwork.libcamera.org/comment/13647/","msgid":"<20201109124454.GD88486@oden.dyn.berto.se>","date":"2020-11-09T12:44:54","subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Jacopo,\n\nThanks for your work.\n\nOn 2020-11-06 16:49:47 +0100, Jacopo Mondi wrote:\n> Initialize pixel array properties in the Android camera HAL\n> inspecting the camera properties.\n> \n> If the camera does not provide any suitable property, not static\n> metadata is registered to the Android framework.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------\n>  1 file changed, 27 insertions(+), 11 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 4690346e05cb..8a71d15be8ca 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t}\n>  \n>  \tconst ControlInfoMap &controlsInfo = camera_->controls();\n> +\tconst ControlList &properties = camera_->properties();\n>  \n>  \t/* Color correction static metadata. */\n>  \t{\n> @@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);\n>  \n>  \t/* Sensor static metadata. */\n> -\tint32_t pixelArraySize[] = {\n> -\t\t2592, 1944,\n> -\t};\n> -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> -\t\t\t\t  &pixelArraySize, 2);\n> -\n> -\tint32_t sensorSizes[] = {\n> -\t\t0, 0, 2560, 1920,\n> -\t};\n> -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> -\t\t\t\t  &sensorSizes, 4);\n> +\t{\n\nWhy this extra code block level?\n\n> +\t\tif (properties.contains(properties::PixelArraySize)) {\n> +\t\t\tconst Size &size =\n> +\t\t\t\tproperties.get<Size>(properties::PixelArraySize);\n> +\t\t\tstd::vector<int32_t> data{\n> +\t\t\t\tstatic_cast<int32_t>(size.width),\n> +\t\t\t\tstatic_cast<int32_t>(size.height),\n> +\t\t\t};\n> +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> +\t\t\t\t\t\t  data.data(), data.size());\n> +\t\t}\n> +\t}\n> +\t{\n> +\t\tif (properties.contains(properties::PixelArrayActiveAreas)) {\n> +\t\t\tconst Span<const Rectangle> &rects =\n> +\t\t\t\tproperties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);\n> +\t\t\tstd::vector<int32_t> data{\n> +\t\t\t\tstatic_cast<int32_t>(rects[0].x),\n> +\t\t\t\tstatic_cast<int32_t>(rects[0].y),\n> +\t\t\t\tstatic_cast<int32_t>(rects[0].width),\n> +\t\t\t\tstatic_cast<int32_t>(rects[0].height),\n> +\t\t\t};\n> +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> +\t\t\t\t\t\t  data.data(), data.size());\n> +\t\t}\n> +\t}\n>  \n>  \tint32_t sensitivityRange[] = {\n>  \t\t32, 2400,\n> -- \n> 2.29.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 7F01CBDB89\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Nov 2020 12:44:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 415CF63074;\n\tMon,  9 Nov 2020 13:44:58 +0100 (CET)","from mail-lf1-x142.google.com (mail-lf1-x142.google.com\n\t[IPv6:2a00:1450:4864:20::142])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C13BE61E57\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Nov 2020 13:44:56 +0100 (CET)","by mail-lf1-x142.google.com with SMTP id d17so8814921lfq.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 09 Nov 2020 04:44:56 -0800 (PST)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tl14sm2175449lji.123.2020.11.09.04.44.55\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 09 Nov 2020 04:44:55 -0800 (PST)"],"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=\"dw/F2bWq\"; 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=R+dzNVR57zi7M1Puozqs5AzZbPZTCM/d1+Zkit8DnFA=;\n\tb=dw/F2bWqI9yK6ZuGPgmW4puzoOCFOLbAqvm0gMoz45+fgHitEZt7F3X01tedzy3DWc\n\tKng/ybUBvBa6LNZJvbqmxQlj9XusxnD64jG4EA2AMLuKTdcItuUvjda7GffVvQALQXg2\n\tbWiRr/ngAXVkOj8nLbXXOTjIdw4BhD/89Zt0wWS6aDhARVAramq8KTTcZRToDhEFGTCM\n\tvqgocD9C8PEPPW50Z84KEwlsi2gNTmor6EA6G2Icee4Vbdv5AsMUaKWrp00gwnrf3Z4/\n\tsqLEqkiumvvFjAMa6nyR6/ENuFTLOOViiyfvAJDD2TgFUdEH8WbEiOSIVdhsE7jWDhGT\n\tYNkg==","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=R+dzNVR57zi7M1Puozqs5AzZbPZTCM/d1+Zkit8DnFA=;\n\tb=skdKwgIXA8PiquSkel8AhHK1fRdd2iqbD9dN2gtbl4DDJu+lqf83zs7w4TZOx3EWjC\n\tZ/QE8KMsuXG6auu/5H9Uz4tLCPwswD+cDqL5XqusFPu7rigZqcnncwStHFi5M7Z20t5q\n\tI2vAaMgnSAKiu8a6+qOgLs+xI03H+V6O5FInTVPqVD8Eezinq9krv+yHtstUwawQWiB2\n\tbmz4OhHOb2IXxa3H39c2DBTG55w9gYfimL4lAiSEtOaamgQd+K0AKjCdIBsvSK40vu8y\n\tF9MAMfb04k8+O/4i+WtH/zmukvcX3MldNYhmK2OsdqIEmrWMAV0PBWFWAg+RB8zPktd7\n\tX7ig==","X-Gm-Message-State":"AOAM532VARteyjgiiRbH+utQvKmkZYQf9JdkfEy+t2lOoreYdwG3SNJf\n\twPt04+VvNr49jHLnvvJ7lDbS9g==","X-Google-Smtp-Source":"ABdhPJx8dzsvwiccEwVk1IXjR4WwNuIfnCz7OTryzSlDRqg4Avs1dJQnGHpbUyyEcSSlobVdpexFTA==","X-Received":"by 2002:a19:5e0b:: with SMTP id\n\ts11mr5092459lfb.502.1604925895963; \n\tMon, 09 Nov 2020 04:44:55 -0800 (PST)","Date":"Mon, 9 Nov 2020 13:44:54 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20201109124454.GD88486@oden.dyn.berto.se>","References":"<20201106154947.261132-1-jacopo@jmondi.org>\n\t<20201106154947.261132-5-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201106154947.261132-5-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","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=\"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":13648,"web_url":"https://patchwork.libcamera.org/comment/13648/","msgid":"<20201109130408.tk45kf26dolr2erq@uno.localdomain>","date":"2020-11-09T13:04:08","subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Niklas,\n\nOn Mon, Nov 09, 2020 at 01:44:54PM +0100, Niklas Söderlund wrote:\n> Hi Jacopo,\n>\n> Thanks for your work.\n>\n> On 2020-11-06 16:49:47 +0100, Jacopo Mondi wrote:\n> > Initialize pixel array properties in the Android camera HAL\n> > inspecting the camera properties.\n> >\n> > If the camera does not provide any suitable property, not static\n> > metadata is registered to the Android framework.\n> >\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------\n> >  1 file changed, 27 insertions(+), 11 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index 4690346e05cb..8a71d15be8ca 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >  \t}\n> >\n> >  \tconst ControlInfoMap &controlsInfo = camera_->controls();\n> > +\tconst ControlList &properties = camera_->properties();\n> >\n> >  \t/* Color correction static metadata. */\n> >  \t{\n> > @@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> >  \tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);\n> >\n> >  \t/* Sensor static metadata. */\n> > -\tint32_t pixelArraySize[] = {\n> > -\t\t2592, 1944,\n> > -\t};\n> > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > -\t\t\t\t  &pixelArraySize, 2);\n> > -\n> > -\tint32_t sensorSizes[] = {\n> > -\t\t0, 0, 2560, 1920,\n> > -\t};\n> > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > -\t\t\t\t  &sensorSizes, 4);\n> > +\t{\n>\n> Why this extra code block level?\n>\n\nI wrapped handling of each control in a separate block for two\nreasons (one of which is totally personal taste)\n1) I re-use the same names for throwaway variables like 'size', 'data' and\n   'infoMap' that are only required for the conversion between libcamera\n   controls and android metadata format. I really don't want to have\n   'dataPixelArraySize' or 'infoMapLensShading' for variables with\n   such limited usage\n2) I like separating each control translation in its own block, but\n   that's merely personal taste.\n\nThanks\n  j\n\n> > +\t\tif (properties.contains(properties::PixelArraySize)) {\n> > +\t\t\tconst Size &size =\n> > +\t\t\t\tproperties.get<Size>(properties::PixelArraySize);\n> > +\t\t\tstd::vector<int32_t> data{\n> > +\t\t\t\tstatic_cast<int32_t>(size.width),\n> > +\t\t\t\tstatic_cast<int32_t>(size.height),\n> > +\t\t\t};\n> > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > +\t\t\t\t\t\t  data.data(), data.size());\n> > +\t\t}\n> > +\t}\n> > +\t{\n> > +\t\tif (properties.contains(properties::PixelArrayActiveAreas)) {\n> > +\t\t\tconst Span<const Rectangle> &rects =\n> > +\t\t\t\tproperties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);\n> > +\t\t\tstd::vector<int32_t> data{\n> > +\t\t\t\tstatic_cast<int32_t>(rects[0].x),\n> > +\t\t\t\tstatic_cast<int32_t>(rects[0].y),\n> > +\t\t\t\tstatic_cast<int32_t>(rects[0].width),\n> > +\t\t\t\tstatic_cast<int32_t>(rects[0].height),\n> > +\t\t\t};\n> > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > +\t\t\t\t\t\t  data.data(), data.size());\n> > +\t\t}\n> > +\t}\n> >\n> >  \tint32_t sensitivityRange[] = {\n> >  \t\t32, 2400,\n> > --\n> > 2.29.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> Niklas Söderlund","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 6F9B3BE082\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  9 Nov 2020 13:04:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 083F463074;\n\tMon,  9 Nov 2020 14:04:09 +0100 (CET)","from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net\n\t[217.70.183.198])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2434061E57\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  9 Nov 2020 14:04:07 +0100 (CET)","from uno.localdomain (93-34-118-233.ip49.fastwebnet.it\n\t[93.34.118.233]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 97536C0006;\n\tMon,  9 Nov 2020 13:04:06 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Mon, 9 Nov 2020 14:04:08 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Message-ID":"<20201109130408.tk45kf26dolr2erq@uno.localdomain>","References":"<20201106154947.261132-1-jacopo@jmondi.org>\n\t<20201106154947.261132-5-jacopo@jmondi.org>\n\t<20201109124454.GD88486@oden.dyn.berto.se>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201109124454.GD88486@oden.dyn.berto.se>","Subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":14028,"web_url":"https://patchwork.libcamera.org/comment/14028/","msgid":"<20201201190448.GY4569@pendragon.ideasonboard.com>","date":"2020-12-01T19:04:48","subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nThank you for the patch.\n\nOn Mon, Nov 09, 2020 at 02:04:08PM +0100, Jacopo Mondi wrote:\n> On Mon, Nov 09, 2020 at 01:44:54PM +0100, Niklas Söderlund wrote:\n> > On 2020-11-06 16:49:47 +0100, Jacopo Mondi wrote:\n> > > Initialize pixel array properties in the Android camera HAL\n> > > inspecting the camera properties.\n> > >\n> > > If the camera does not provide any suitable property, not static\n> > > metadata is registered to the Android framework.\n> > >\n> > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > ---\n> > >  src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------\n> > >  1 file changed, 27 insertions(+), 11 deletions(-)\n> > >\n> > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > > index 4690346e05cb..8a71d15be8ca 100644\n> > > --- a/src/android/camera_device.cpp\n> > > +++ b/src/android/camera_device.cpp\n> > > @@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> > >  \t}\n> > >\n> > >  \tconst ControlInfoMap &controlsInfo = camera_->controls();\n> > > +\tconst ControlList &properties = camera_->properties();\n> > >\n> > >  \t/* Color correction static metadata. */\n> > >  \t{\n> > > @@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> > >  \tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);\n> > >\n> > >  \t/* Sensor static metadata. */\n> > > -\tint32_t pixelArraySize[] = {\n> > > -\t\t2592, 1944,\n> > > -\t};\n> > > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > > -\t\t\t\t  &pixelArraySize, 2);\n> > > -\n> > > -\tint32_t sensorSizes[] = {\n> > > -\t\t0, 0, 2560, 1920,\n> > > -\t};\n> > > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > > -\t\t\t\t  &sensorSizes, 4);\n> > > +\t{\n> >\n> > Why this extra code block level?\n> >\n> \n> I wrapped handling of each control in a separate block for two\n> reasons (one of which is totally personal taste)\n> 1) I re-use the same names for throwaway variables like 'size', 'data' and\n>    'infoMap' that are only required for the conversion between libcamera\n>    controls and android metadata format. I really don't want to have\n>    'dataPixelArraySize' or 'infoMapLensShading' for variables with\n>    such limited usage\n\nBut the variables are defined within the if () { ... } scope, so there\nshould be no issue. As there's already a specific scope, I'd tend to\ndrop the extra level. In the other locations where no specific scope\nexist, it makes sense to create one.\n\nNice to see two hardcoded metadata going away :-)\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> 2) I like separating each control translation in its own block, but\n>    that's merely personal taste.\n> \n> > > +\t\tif (properties.contains(properties::PixelArraySize)) {\n> > > +\t\t\tconst Size &size =\n> > > +\t\t\t\tproperties.get<Size>(properties::PixelArraySize);\n> > > +\t\t\tstd::vector<int32_t> data{\n> > > +\t\t\t\tstatic_cast<int32_t>(size.width),\n> > > +\t\t\t\tstatic_cast<int32_t>(size.height),\n> > > +\t\t\t};\n> > > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > > +\t\t\t\t\t\t  data.data(), data.size());\n> > > +\t\t}\n> > > +\t}\n> > > +\t{\n> > > +\t\tif (properties.contains(properties::PixelArrayActiveAreas)) {\n> > > +\t\t\tconst Span<const Rectangle> &rects =\n> > > +\t\t\t\tproperties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);\n> > > +\t\t\tstd::vector<int32_t> data{\n> > > +\t\t\t\tstatic_cast<int32_t>(rects[0].x),\n> > > +\t\t\t\tstatic_cast<int32_t>(rects[0].y),\n> > > +\t\t\t\tstatic_cast<int32_t>(rects[0].width),\n> > > +\t\t\t\tstatic_cast<int32_t>(rects[0].height),\n> > > +\t\t\t};\n> > > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > > +\t\t\t\t\t\t  data.data(), data.size());\n> > > +\t\t}\n> > > +\t}\n> > >\n> > >  \tint32_t sensitivityRange[] = {\n> > >  \t\t32, 2400,","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 B7E9BBE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  1 Dec 2020 19:04:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5357563501;\n\tTue,  1 Dec 2020 20:04:59 +0100 (CET)","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 A837763460\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  1 Dec 2020 20:04:57 +0100 (CET)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1F03DDBD;\n\tTue,  1 Dec 2020 20:04:57 +0100 (CET)"],"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=\"sVi9WK41\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1606849497;\n\tbh=G4S28M/wpB/stRbM7oJRksQlFMnx1WXMGfmzsRyN9+A=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=sVi9WK41wNTTfRl4EMwHnv139Rp+3CNbqUEdBUaUgwXLon6k8iCSiJQd6rlOWoASm\n\tab2YSA0FDFEo7+IyafUu8EoqxvD+4mM8dv+xMBsF6PFf3lcddBea2x6Ela1bWtDu8j\n\tPwmndgUAqcYJPCyrzDUpmRtX443Mdm86H6/Lk4EA=","Date":"Tue, 1 Dec 2020 21:04:48 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20201201190448.GY4569@pendragon.ideasonboard.com>","References":"<20201106154947.261132-1-jacopo@jmondi.org>\n\t<20201106154947.261132-5-jacopo@jmondi.org>\n\t<20201109124454.GD88486@oden.dyn.berto.se>\n\t<20201109130408.tk45kf26dolr2erq@uno.localdomain>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201109130408.tk45kf26dolr2erq@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":14032,"web_url":"https://patchwork.libcamera.org/comment/14032/","msgid":"<20201202103344.spq4ukl6zonv7wgs@uno.localdomain>","date":"2020-12-02T10:33:44","subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Tue, Dec 01, 2020 at 09:04:48PM +0200, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> Thank you for the patch.\n>\n> On Mon, Nov 09, 2020 at 02:04:08PM +0100, Jacopo Mondi wrote:\n> > On Mon, Nov 09, 2020 at 01:44:54PM +0100, Niklas Söderlund wrote:\n> > > On 2020-11-06 16:49:47 +0100, Jacopo Mondi wrote:\n> > > > Initialize pixel array properties in the Android camera HAL\n> > > > inspecting the camera properties.\n> > > >\n> > > > If the camera does not provide any suitable property, not static\n> > > > metadata is registered to the Android framework.\n> > > >\n> > > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > > ---\n> > > >  src/android/camera_device.cpp | 38 +++++++++++++++++++++++++----------\n> > > >  1 file changed, 27 insertions(+), 11 deletions(-)\n> > > >\n> > > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > > > index 4690346e05cb..8a71d15be8ca 100644\n> > > > --- a/src/android/camera_device.cpp\n> > > > +++ b/src/android/camera_device.cpp\n> > > > @@ -593,6 +593,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> > > >  \t}\n> > > >\n> > > >  \tconst ControlInfoMap &controlsInfo = camera_->controls();\n> > > > +\tconst ControlList &properties = camera_->properties();\n> > > >\n> > > >  \t/* Color correction static metadata. */\n> > > >  \t{\n> > > > @@ -724,17 +725,32 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n> > > >  \tstaticMetadata_->addEntry(ANDROID_JPEG_MAX_SIZE, &maxJpegBufferSize_, 1);\n> > > >\n> > > >  \t/* Sensor static metadata. */\n> > > > -\tint32_t pixelArraySize[] = {\n> > > > -\t\t2592, 1944,\n> > > > -\t};\n> > > > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > > > -\t\t\t\t  &pixelArraySize, 2);\n> > > > -\n> > > > -\tint32_t sensorSizes[] = {\n> > > > -\t\t0, 0, 2560, 1920,\n> > > > -\t};\n> > > > -\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > > > -\t\t\t\t  &sensorSizes, 4);\n> > > > +\t{\n> > >\n> > > Why this extra code block level?\n> > >\n> >\n> > I wrapped handling of each control in a separate block for two\n> > reasons (one of which is totally personal taste)\n> > 1) I re-use the same names for throwaway variables like 'size', 'data' and\n> >    'infoMap' that are only required for the conversion between libcamera\n> >    controls and android metadata format. I really don't want to have\n> >    'dataPixelArraySize' or 'infoMapLensShading' for variables with\n> >    such limited usage\n>\n> But the variables are defined within the if () { ... } scope, so there\n> should be no issue. As there's already a specific scope, I'd tend to\n> drop the extra level. In the other locations where no specific scope\n> exist, it makes sense to create one.\n\nAck\n\n>\n> Nice to see two hardcoded metadata going away :-)\n>\n\nIf a pipeline does not report these information, Android will not\nreceive it and will probably fail at all validation/testing.\n\nI think this is expected, or should we try to default to something ?\n\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n\nThanks\n  j\n\n> > 2) I like separating each control translation in its own block, but\n> >    that's merely personal taste.\n> >\n> > > > +\t\tif (properties.contains(properties::PixelArraySize)) {\n> > > > +\t\t\tconst Size &size =\n> > > > +\t\t\t\tproperties.get<Size>(properties::PixelArraySize);\n> > > > +\t\t\tstd::vector<int32_t> data{\n> > > > +\t\t\t\tstatic_cast<int32_t>(size.width),\n> > > > +\t\t\t\tstatic_cast<int32_t>(size.height),\n> > > > +\t\t\t};\n> > > > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,\n> > > > +\t\t\t\t\t\t  data.data(), data.size());\n> > > > +\t\t}\n> > > > +\t}\n> > > > +\t{\n> > > > +\t\tif (properties.contains(properties::PixelArrayActiveAreas)) {\n> > > > +\t\t\tconst Span<const Rectangle> &rects =\n> > > > +\t\t\t\tproperties.get<Span<const Rectangle>>(properties::PixelArrayActiveAreas);\n> > > > +\t\t\tstd::vector<int32_t> data{\n> > > > +\t\t\t\tstatic_cast<int32_t>(rects[0].x),\n> > > > +\t\t\t\tstatic_cast<int32_t>(rects[0].y),\n> > > > +\t\t\t\tstatic_cast<int32_t>(rects[0].width),\n> > > > +\t\t\t\tstatic_cast<int32_t>(rects[0].height),\n> > > > +\t\t\t};\n> > > > +\t\t\tstaticMetadata_->addEntry(ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE,\n> > > > +\t\t\t\t\t\t  data.data(), data.size());\n> > > > +\t\t}\n> > > > +\t}\n> > > >\n> > > >  \tint32_t sensitivityRange[] = {\n> > > >  \t\t32, 2400,\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 B9203BE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  2 Dec 2020 10:33:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 41701635A2;\n\tWed,  2 Dec 2020 11:33:41 +0100 (CET)","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 40A44634C6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  2 Dec 2020 11:33:39 +0100 (CET)","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 1C7B340004;\n\tWed,  2 Dec 2020 10:33:37 +0000 (UTC)"],"X-Originating-IP":"93.34.118.233","Date":"Wed, 2 Dec 2020 11:33:44 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20201202103344.spq4ukl6zonv7wgs@uno.localdomain>","References":"<20201106154947.261132-1-jacopo@jmondi.org>\n\t<20201106154947.261132-5-jacopo@jmondi.org>\n\t<20201109124454.GD88486@oden.dyn.berto.se>\n\t<20201109130408.tk45kf26dolr2erq@uno.localdomain>\n\t<20201201190448.GY4569@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201201190448.GY4569@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 4/4] android: camera_device:\n\tInitialize pixel array properties","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]