[{"id":16469,"web_url":"https://patchwork.libcamera.org/comment/16469/","msgid":"<YIBz08cG8MelPL/g@oden.dyn.berto.se>","date":"2021-04-21T18:49:55","subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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 2021-04-21 18:03:18 +0200, Jacopo Mondi wrote:\n> Implement support for the new '--metadata' option by printing the\n> value of each metadata entry associated with a completed Request.\n> \n> As sample of the output, running on raspberry pi, looks like the\n> following:\n> \n> 3050.205672 (30.01 fps) stream0 seq: 000033 bytesused: 720000\n> \tScalerCrop = (0x2)/3280x2460\n> \tExposureTime = 13969\n> \tAeLocked = true\n> \tDigitalGain = 1.000721\n> \tLux = 771.204224\n> \tColourGains = [ 1.561101, 1.629698 ]\n> \tColourTemperature = 4289\n> \tSensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> \tColourCorrectionMatrix = [ 1.691066, -0.599756, -0.091317, -0.437452, 1.983766, -0.546314, -0.083429, -0.722407, 1.805836 ]\n> \tAnalogueGain = 2.000000\n> \tSensorTimestamp = 3050205672000\n> 3050.238999 (30.01 fps) stream0 seq: 000034 bytesused: 720000\n> \tScalerCrop = (0x2)/3280x2460\n> \tExposureTime = 13969\n> \tAeLocked = true\n> \tDigitalGain = 1.000709\n> \tLux = 771.232422\n> \tColourGains = [ 1.560868, 1.630029 ]\n> \tColourTemperature = 4289\n> \tSensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> \tColourCorrectionMatrix = [ 1.691081, -0.599726, -0.091362, -0.437497, 1.983627, -0.546130, -0.083420, -0.722523, 1.805943 ]\n> \tAnalogueGain = 2.000000\n> \tSensorTimestamp = 3050238999000\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  src/cam/capture.cpp | 15 ++++++++++++++-\n>  src/cam/capture.h   |  1 +\n>  2 files changed, 15 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp\n> index 7b55fc677022..7213abd934ec 100644\n> --- a/src/cam/capture.cpp\n> +++ b/src/cam/capture.cpp\n> @@ -10,6 +10,8 @@\n>  #include <limits.h>\n>  #include <sstream>\n>  \n> +#include <libcamera/control_ids.h>\n> +\n>  #include \"capture.h\"\n>  #include \"main.h\"\n>  \n> @@ -18,7 +20,8 @@ using namespace libcamera;\n>  Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,\n>  \t\t EventLoop *loop)\n>  \t: camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop),\n> -\t  queueCount_(0), captureCount_(0), captureLimit_(0)\n> +\t  queueCount_(0), captureCount_(0), captureLimit_(0),\n> +\t  printMetadata_(false)\n>  {\n>  }\n>  \n> @@ -29,6 +32,7 @@ int Capture::run(const OptionsParser::Options &options)\n>  \tqueueCount_ = 0;\n>  \tcaptureCount_ = 0;\n>  \tcaptureLimit_ = options[OptCapture].toInteger();\n> +\tprintMetadata_ = options.isSet(OptMetadata);\n>  \n>  \tif (!camera_) {\n>  \t\tstd::cout << \"Can't capture without a camera\" << std::endl;\n> @@ -217,6 +221,15 @@ void Capture::processRequest(Request *request)\n>  \n>  \tstd::cout << info.str() << std::endl;\n>  \n> +\tif (printMetadata_) {\n> +\t\tconst ControlList &requestMetadata = request->metadata();\n> +\t\tfor (const auto ctrl : requestMetadata) {\n> +\t\t\tconst ControlId *id = controls::controls.at(ctrl.first);\n> +\t\t\tstd::cout << \"\\t\" << id->name() << \" = \"\n> +\t\t\t\t  << ctrl.second.toString() << std::endl;\n> +\t\t}\n> +\t}\n> +\n>  \tcaptureCount_++;\n>  \tif (captureLimit_ && captureCount_ >= captureLimit_) {\n>  \t\tloop_->exit(0);\n> diff --git a/src/cam/capture.h b/src/cam/capture.h\n> index c7c9dc00d30f..59d138766b1e 100644\n> --- a/src/cam/capture.h\n> +++ b/src/cam/capture.h\n> @@ -47,6 +47,7 @@ private:\n>  \tunsigned int queueCount_;\n>  \tunsigned int captureCount_;\n>  \tunsigned int captureLimit_;\n> +\tbool printMetadata_;\n>  \n>  \tstd::vector<std::unique_ptr<libcamera::Request>> requests_;\n>  };\n> -- \n> 2.31.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 0BFE3BDB15\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Apr 2021 18:49:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id BDA226884C;\n\tWed, 21 Apr 2021 20:49:58 +0200 (CEST)","from mail-lf1-x136.google.com (mail-lf1-x136.google.com\n\t[IPv6:2a00:1450:4864:20::136])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5458668840\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 20:49:57 +0200 (CEST)","by mail-lf1-x136.google.com with SMTP id x20so38038026lfu.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 11:49:57 -0700 (PDT)","from localhost (h-209-203.A463.priv.bahnhof.se. [155.4.209.203])\n\tby smtp.gmail.com with ESMTPSA id\n\tx25sm37462lfu.181.2021.04.21.11.49.56\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 21 Apr 2021 11:49:56 -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=\"s3KQQJId\"; 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=xE+yYdQYBwNx2fP0EZjQmilWlBj6fhOWVA9qh677cLs=;\n\tb=s3KQQJIdzOk5aKZ1XfI/aJjbAYHqRqSCU83ZJStVPIyXN+5mxeGKeshhL4T0HRBjBD\n\tPbdtdLOFdI0wchDl1Hc/fHRGd5QVs/mmUCdxmNgTWzwUmCyjIJccbSehLYr63X+hVYfc\n\tKYj55S2fg5epEeUNIA8x7kEO0oed/N0wCf7sWBSBCHQ/FbGQIY/b/H6/hP3qp9tcI/mp\n\t5b+sdNKRKehpDsVzmbRdDwNAw0J+86tWUEZZth2g0kAr0UkB0OfgrOzfGpMu48Rkgqyo\n\tgTncJ4Gc5S51KxCRXEMTECUy2KLxoJKgKaEwvql2LZTXiz5iHjluuGjWs7GO4p+y9hbD\n\tc7yw==","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=xE+yYdQYBwNx2fP0EZjQmilWlBj6fhOWVA9qh677cLs=;\n\tb=rvh/U1F03JIb2nWfraeryAThFJSm9E1Zv3HnHHj1k4oQBcWQXg2dXkK92yRuFx0q/R\n\t2VwW3rGeryowLpYhmb6kvhbmvxw+J/WLqDGxxxSvMeB8AVB6/3L4C0BBpoJQW7vAlg/g\n\thLVSS17xUnvmQZmdglZvO7/uTQWDqw4FkairA6AvDMN8ulbHCc6fVJdkgWfrweEiL7h0\n\t879bXLBPZ3lncfiuII2m4lxJV5ASCUABDNi3MRaLdRBWUMY85T5gAfU1fMrFwbwX6E8G\n\tIe6qW56D2FhF37BijXtLW8odVsfBU3b7JEeaEbhvYOSKV25q+doGUBDdeby5dPqOE0Q6\n\tLW9A==","X-Gm-Message-State":"AOAM532s/3itSSFkA/gHEC1OJy5zoojMS6dG0wGTbKorlHF1m3SmQ541\n\tmq7/8sgLQWhd1UeNugJDj9ckzA==","X-Google-Smtp-Source":"ABdhPJxEj8R+VtuHwNutGZoHBVC9/kNDp/37mnJIQQZoJiuAzAgz/0XXiBZwmkJL3+dFIcSaZDSRcQ==","X-Received":"by 2002:a19:4190:: with SMTP id\n\to138mr20460518lfa.381.1619030996832; \n\tWed, 21 Apr 2021 11:49:56 -0700 (PDT)","Date":"Wed, 21 Apr 2021 20:49:55 +0200","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YIBz08cG8MelPL/g@oden.dyn.berto.se>","References":"<20210421160319.42251-1-jacopo@jmondi.org>\n\t<20210421160319.42251-16-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210421160319.42251-16-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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":16487,"web_url":"https://patchwork.libcamera.org/comment/16487/","msgid":"<CAO5uPHO7HSp2FqYX_PXNyKf83q0Z14NaM2iQuOP=7nGmpz_uwA@mail.gmail.com>","date":"2021-04-22T05:42:22","subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Jacopo, thank you for the patch.\n\nOn Thu, Apr 22, 2021 at 3:49 AM Niklas Söderlund\n<niklas.soderlund@ragnatech.se> wrote:\n>\n> Hi Jacopo,\n>\n> Thanks for your work.\n>\n> On 2021-04-21 18:03:18 +0200, Jacopo Mondi wrote:\n> > Implement support for the new '--metadata' option by printing the\n> > value of each metadata entry associated with a completed Request.\n> >\n> > As sample of the output, running on raspberry pi, looks like the\n> > following:\n> >\n> > 3050.205672 (30.01 fps) stream0 seq: 000033 bytesused: 720000\n> >       ScalerCrop = (0x2)/3280x2460\n> >       ExposureTime = 13969\n> >       AeLocked = true\n> >       DigitalGain = 1.000721\n> >       Lux = 771.204224\n> >       ColourGains = [ 1.561101, 1.629698 ]\n> >       ColourTemperature = 4289\n> >       SensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> >       ColourCorrectionMatrix = [ 1.691066, -0.599756, -0.091317, -0.437452, 1.983766, -0.546314, -0.083429, -0.722407, 1.805836 ]\n> >       AnalogueGain = 2.000000\n> >       SensorTimestamp = 3050205672000\n> > 3050.238999 (30.01 fps) stream0 seq: 000034 bytesused: 720000\n> >       ScalerCrop = (0x2)/3280x2460\n> >       ExposureTime = 13969\n> >       AeLocked = true\n> >       DigitalGain = 1.000709\n> >       Lux = 771.232422\n> >       ColourGains = [ 1.560868, 1.630029 ]\n> >       ColourTemperature = 4289\n> >       SensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> >       ColourCorrectionMatrix = [ 1.691081, -0.599726, -0.091362, -0.437497, 1.983627, -0.546130, -0.083420, -0.722523, 1.805943 ]\n> >       AnalogueGain = 2.000000\n> >       SensorTimestamp = 3050238999000\n> >\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n>\n\nI would squash 14/16 and 15/16 as they are small enough.\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\n\n> > ---\n> >  src/cam/capture.cpp | 15 ++++++++++++++-\n> >  src/cam/capture.h   |  1 +\n> >  2 files changed, 15 insertions(+), 1 deletion(-)\n> >\n> > diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp\n> > index 7b55fc677022..7213abd934ec 100644\n> > --- a/src/cam/capture.cpp\n> > +++ b/src/cam/capture.cpp\n> > @@ -10,6 +10,8 @@\n> >  #include <limits.h>\n> >  #include <sstream>\n> >\n> > +#include <libcamera/control_ids.h>\n> > +\n> >  #include \"capture.h\"\n> >  #include \"main.h\"\n> >\n> > @@ -18,7 +20,8 @@ using namespace libcamera;\n> >  Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,\n> >                EventLoop *loop)\n> >       : camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop),\n> > -       queueCount_(0), captureCount_(0), captureLimit_(0)\n> > +       queueCount_(0), captureCount_(0), captureLimit_(0),\n> > +       printMetadata_(false)\n> >  {\n> >  }\n> >\n> > @@ -29,6 +32,7 @@ int Capture::run(const OptionsParser::Options &options)\n> >       queueCount_ = 0;\n> >       captureCount_ = 0;\n> >       captureLimit_ = options[OptCapture].toInteger();\n> > +     printMetadata_ = options.isSet(OptMetadata);\n> >\n> >       if (!camera_) {\n> >               std::cout << \"Can't capture without a camera\" << std::endl;\n> > @@ -217,6 +221,15 @@ void Capture::processRequest(Request *request)\n> >\n> >       std::cout << info.str() << std::endl;\n> >\n> > +     if (printMetadata_) {\n> > +             const ControlList &requestMetadata = request->metadata();\n> > +             for (const auto ctrl : requestMetadata) {\n> > +                     const ControlId *id = controls::controls.at(ctrl.first);\n> > +                     std::cout << \"\\t\" << id->name() << \" = \"\n> > +                               << ctrl.second.toString() << std::endl;\n> > +             }\n> > +     }\n> > +\n> >       captureCount_++;\n> >       if (captureLimit_ && captureCount_ >= captureLimit_) {\n> >               loop_->exit(0);\n> > diff --git a/src/cam/capture.h b/src/cam/capture.h\n> > index c7c9dc00d30f..59d138766b1e 100644\n> > --- a/src/cam/capture.h\n> > +++ b/src/cam/capture.h\n> > @@ -47,6 +47,7 @@ private:\n> >       unsigned int queueCount_;\n> >       unsigned int captureCount_;\n> >       unsigned int captureLimit_;\n> > +     bool printMetadata_;\n> >\n> >       std::vector<std::unique_ptr<libcamera::Request>> requests_;\n> >  };\n> > --\n> > 2.31.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\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 517BFBDB17\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 22 Apr 2021 05:42:34 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 15BB068858;\n\tThu, 22 Apr 2021 07:42:34 +0200 (CEST)","from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com\n\t[IPv6:2a00:1450:4864:20::62f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 34FDC6884B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 22 Apr 2021 07:42:33 +0200 (CEST)","by mail-ej1-x62f.google.com with SMTP id l4so66861601ejc.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Apr 2021 22:42:33 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"XLql775N\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc:content-transfer-encoding;\n\tbh=dXhCwEW/I9Z4XRWbkFPAX1ncQwd8uMjUG9SwmqFgzrM=;\n\tb=XLql775N+jbHhCEDyzDFs0EdItRArrD6CyW8UCzVWcjnEQkL1nlldmb1ySe+NPkzPg\n\tvj8FDbkl9qhnGXu5BaJv+MzeP8CZ2HsD5VwnG+2yvXbXz9HImwB+JtMyr6znZDfZrAhe\n\t34RjvTF4q+SpIUyBtEVmYVoW3EDs+oA/t+2CI=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc:content-transfer-encoding;\n\tbh=dXhCwEW/I9Z4XRWbkFPAX1ncQwd8uMjUG9SwmqFgzrM=;\n\tb=gZmwzOdG98rWBfbX/iutpp9D8lfAJsnVnZDrWRxZj0ki+5fM/0mx4OTVYLbH9azAms\n\t52g6PDQyCBrG2NKq9C5YTY7pUT3ZJ2GLAyLnIeCGMGq3t8cLD/jVuOwVEWphNmZh9h4b\n\trWHXBaUmLNydfPfHa0ZN+YeB29wBz7gk/CF6GiMwwf1YEQzL25q9D3i55bG1sZ5eVmn1\n\tEdBAvcHxjQUdPw/Ro0I8tJ7htkEILObRBywg1xXGHKQN0diDrcw4YnAaqJpDM+jM3XAl\n\tPFSAbmqRDz3Q/T9zqt7eafdqePnryb8ue/lyS9L5vvHDppo2eqpjxtiZw8aYxOx/f3IQ\n\tE6hg==","X-Gm-Message-State":"AOAM531FvP+lVwSlnWuYZHM2bxD0K/43GIIVDPOhnmiBoXDn5VW8Mmr9\n\tMInbsd3wdIA807vOiw0xHXE39N8veqrO4RBcWPa+0g==","X-Google-Smtp-Source":"ABdhPJyujezQZT0nXpMMSNAooW265gY8BZfVMEgAxxD274/ptkVX1FvnA7WS2KEfe3L+QrMWoLH6Z7aOzgDdwYcxgpo=","X-Received":"by 2002:a17:906:46d6:: with SMTP id\n\tk22mr1446767ejs.243.1619070152803; \n\tWed, 21 Apr 2021 22:42:32 -0700 (PDT)","MIME-Version":"1.0","References":"<20210421160319.42251-1-jacopo@jmondi.org>\n\t<20210421160319.42251-16-jacopo@jmondi.org>\n\t<YIBz08cG8MelPL/g@oden.dyn.berto.se>","In-Reply-To":"<YIBz08cG8MelPL/g@oden.dyn.berto.se>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Thu, 22 Apr 2021 14:42:22 +0900","Message-ID":"<CAO5uPHO7HSp2FqYX_PXNyKf83q0Z14NaM2iQuOP=7nGmpz_uwA@mail.gmail.com>","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":16555,"web_url":"https://patchwork.libcamera.org/comment/16555/","msgid":"<CAO5uPHMEeqpopkAoPS9HCSmbkRhQZpujt8n9eoSv4FhVe_BFsA@mail.gmail.com>","date":"2021-04-26T03:30:45","subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"On Thu, Apr 22, 2021 at 2:42 PM Hirokazu Honda <hiroh@chromium.org> wrote:\n>\n> Hi Jacopo, thank you for the patch.\n>\n> On Thu, Apr 22, 2021 at 3:49 AM Niklas Söderlund\n> <niklas.soderlund@ragnatech.se> wrote:\n> >\n> > Hi Jacopo,\n> >\n> > Thanks for your work.\n> >\n> > On 2021-04-21 18:03:18 +0200, Jacopo Mondi wrote:\n> > > Implement support for the new '--metadata' option by printing the\n> > > value of each metadata entry associated with a completed Request.\n> > >\n> > > As sample of the output, running on raspberry pi, looks like the\n> > > following:\n> > >\n> > > 3050.205672 (30.01 fps) stream0 seq: 000033 bytesused: 720000\n> > >       ScalerCrop = (0x2)/3280x2460\n> > >       ExposureTime = 13969\n> > >       AeLocked = true\n> > >       DigitalGain = 1.000721\n> > >       Lux = 771.204224\n> > >       ColourGains = [ 1.561101, 1.629698 ]\n> > >       ColourTemperature = 4289\n> > >       SensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> > >       ColourCorrectionMatrix = [ 1.691066, -0.599756, -0.091317, -0.437452, 1.983766, -0.546314, -0.083429, -0.722407, 1.805836 ]\n> > >       AnalogueGain = 2.000000\n> > >       SensorTimestamp = 3050205672000\n> > > 3050.238999 (30.01 fps) stream0 seq: 000034 bytesused: 720000\n> > >       ScalerCrop = (0x2)/3280x2460\n> > >       ExposureTime = 13969\n> > >       AeLocked = true\n> > >       DigitalGain = 1.000709\n> > >       Lux = 771.232422\n> > >       ColourGains = [ 1.560868, 1.630029 ]\n> > >       ColourTemperature = 4289\n> > >       SensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> > >       ColourCorrectionMatrix = [ 1.691081, -0.599726, -0.091362, -0.437497, 1.983627, -0.546130, -0.083420, -0.722523, 1.805943 ]\n> > >       AnalogueGain = 2.000000\n> > >       SensorTimestamp = 3050238999000\n> > >\n> > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> >\n> > Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> >\n>\n> I would squash 14/16 and 15/16 as they are small enough.\n>\n> Reviewed-by: Hirokazu Honda <hiroh@chromium.org>\n>\n> > > ---\n> > >  src/cam/capture.cpp | 15 ++++++++++++++-\n> > >  src/cam/capture.h   |  1 +\n> > >  2 files changed, 15 insertions(+), 1 deletion(-)\n> > >\n> > > diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp\n> > > index 7b55fc677022..7213abd934ec 100644\n> > > --- a/src/cam/capture.cpp\n> > > +++ b/src/cam/capture.cpp\n> > > @@ -10,6 +10,8 @@\n> > >  #include <limits.h>\n> > >  #include <sstream>\n> > >\n> > > +#include <libcamera/control_ids.h>\n> > > +\n> > >  #include \"capture.h\"\n> > >  #include \"main.h\"\n> > >\n> > > @@ -18,7 +20,8 @@ using namespace libcamera;\n> > >  Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,\n> > >                EventLoop *loop)\n> > >       : camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop),\n> > > -       queueCount_(0), captureCount_(0), captureLimit_(0)\n> > > +       queueCount_(0), captureCount_(0), captureLimit_(0),\n> > > +       printMetadata_(false)\n> > >  {\n> > >  }\n> > >\n> > > @@ -29,6 +32,7 @@ int Capture::run(const OptionsParser::Options &options)\n> > >       queueCount_ = 0;\n> > >       captureCount_ = 0;\n> > >       captureLimit_ = options[OptCapture].toInteger();\n> > > +     printMetadata_ = options.isSet(OptMetadata);\n> > >\n> > >       if (!camera_) {\n> > >               std::cout << \"Can't capture without a camera\" << std::endl;\n> > > @@ -217,6 +221,15 @@ void Capture::processRequest(Request *request)\n> > >\n> > >       std::cout << info.str() << std::endl;\n> > >\n> > > +     if (printMetadata_) {\n> > > +             const ControlList &requestMetadata = request->metadata();\n> > > +             for (const auto ctrl : requestMetadata) {\n\nThis must be const auto &ctrl, or I got this error.\n\n../src/cam/capture.cpp:226:19: error: loop variable 'ctrl' creates a\ncopy from type 'const std::pair<const unsigned int,\nlibcamera::ControlValue>' [-Werror,-Wrange-loop-construct]\n                for (const auto ctrl : requestMetadata) {\n                                ^\n../src/cam/capture.cpp:226:8: note: use reference type 'const\nstd::pair<const unsigned int, libcamera::ControlValue> &' to prevent\ncopying\n                for (const auto ctrl : requestMetadata) {\n                     ^~~~~~~~~~~~~~~~~\n\n-Hiro\n\n> > > +                     const ControlId *id = controls::controls.at(ctrl.first);\n> > > +                     std::cout << \"\\t\" << id->name() << \" = \"\n> > > +                               << ctrl.second.toString() << std::endl;\n> > > +             }\n> > > +     }\n> > > +\n> > >       captureCount_++;\n> > >       if (captureLimit_ && captureCount_ >= captureLimit_) {\n> > >               loop_->exit(0);\n> > > diff --git a/src/cam/capture.h b/src/cam/capture.h\n> > > index c7c9dc00d30f..59d138766b1e 100644\n> > > --- a/src/cam/capture.h\n> > > +++ b/src/cam/capture.h\n> > > @@ -47,6 +47,7 @@ private:\n> > >       unsigned int queueCount_;\n> > >       unsigned int captureCount_;\n> > >       unsigned int captureLimit_;\n> > > +     bool printMetadata_;\n> > >\n> > >       std::vector<std::unique_ptr<libcamera::Request>> requests_;\n> > >  };\n> > > --\n> > > 2.31.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\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 9DB69BDC91\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 26 Apr 2021 03:30:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1616768885;\n\tMon, 26 Apr 2021 05:30:58 +0200 (CEST)","from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com\n\t[IPv6:2a00:1450:4864:20::52f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3848E605BD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 26 Apr 2021 05:30:56 +0200 (CEST)","by mail-ed1-x52f.google.com with SMTP id i3so38297100edt.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 25 Apr 2021 20:30:56 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"CezIND1R\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc:content-transfer-encoding;\n\tbh=kMm6VrCf0T4LURsKYRuspAfb1b0h5XQ4qcpbMKajzd0=;\n\tb=CezIND1RFhwh4ibE8Mbwu0OtcV/4bsvCj+JLEdHKnL6ISL5Nvu1A2PkfvGpn34xM7o\n\tj5PYBvfp4k6y7MkM9GUT5wVc2cBQpC57Vr0PJO+03g9wzg7DUK84tJGXAzjxpbjfrwyt\n\tohVODzS2QJmw/tFnKee7/HdUeV5gt8BA75tcI=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc:content-transfer-encoding;\n\tbh=kMm6VrCf0T4LURsKYRuspAfb1b0h5XQ4qcpbMKajzd0=;\n\tb=TEvDjcC1LjLqYtxKQdyUY7twX4eRc+9Ub8LQqqjJJroHXIy3N5WY06tUeN9cq4nNgU\n\tt4LhT0g4+HuCScJyK3uFB7RyhC9+MK8a/daRvl3yC050649Zwpnk2lxJSq36IDNhKoWF\n\tOOT4KkregnXMVM5Z6SY8v4Y5lvUddJu772aA1kB/N1hrshTZxB1+zL77ZsrFjAnBHXhU\n\tZnXWBANTKAwwekWi/ii01xEtvSyQXA5APlcQ8lvrXRwP3N8jE3y7lqH8gchiGlEhrFIO\n\tNNOnnSp0kVUodZtXz1UJB3ckhbHbDLP5ueR06CcnQQU1H3RN1MiNotrxJD7Red6qiZdw\n\t0r6Q==","X-Gm-Message-State":"AOAM530pgH9CieV6pe38TMMwd1JsixrDffzIymNnEGUme6FnW9U38DG0\n\tdXjjlPYG9VuCPkjMNmrJ0YWlbOsK6mtmG4moPM2AIEGMr0tmIA==","X-Google-Smtp-Source":"ABdhPJxLcUmjYwif0TLrwBWgWz5rmovDwVCECvlmmILRv/afdfcopYOLo1l4mS124R8y7jZxQBtEEi9lLN6rbBNCztg=","X-Received":"by 2002:a05:6402:34cd:: with SMTP id\n\tw13mr18728438edc.73.1619407855881; \n\tSun, 25 Apr 2021 20:30:55 -0700 (PDT)","MIME-Version":"1.0","References":"<20210421160319.42251-1-jacopo@jmondi.org>\n\t<20210421160319.42251-16-jacopo@jmondi.org>\n\t<YIBz08cG8MelPL/g@oden.dyn.berto.se>\n\t<CAO5uPHO7HSp2FqYX_PXNyKf83q0Z14NaM2iQuOP=7nGmpz_uwA@mail.gmail.com>","In-Reply-To":"<CAO5uPHO7HSp2FqYX_PXNyKf83q0Z14NaM2iQuOP=7nGmpz_uwA@mail.gmail.com>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Mon, 26 Apr 2021 12:30:45 +0900","Message-ID":"<CAO5uPHMEeqpopkAoPS9HCSmbkRhQZpujt8n9eoSv4FhVe_BFsA@mail.gmail.com>","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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=\"utf-8\"","Content-Transfer-Encoding":"base64","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":16564,"web_url":"https://patchwork.libcamera.org/comment/16564/","msgid":"<YIZLVZTZyY6Ajq7L@pendragon.ideasonboard.com>","date":"2021-04-26T05:10:45","subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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 Wed, Apr 21, 2021 at 06:03:18PM +0200, Jacopo Mondi wrote:\n> Implement support for the new '--metadata' option by printing the\n> value of each metadata entry associated with a completed Request.\n> \n> As sample of the output, running on raspberry pi, looks like the\n> following:\n> \n> 3050.205672 (30.01 fps) stream0 seq: 000033 bytesused: 720000\n> \tScalerCrop = (0x2)/3280x2460\n> \tExposureTime = 13969\n> \tAeLocked = true\n> \tDigitalGain = 1.000721\n> \tLux = 771.204224\n> \tColourGains = [ 1.561101, 1.629698 ]\n> \tColourTemperature = 4289\n> \tSensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> \tColourCorrectionMatrix = [ 1.691066, -0.599756, -0.091317, -0.437452, 1.983766, -0.546314, -0.083429, -0.722407, 1.805836 ]\n> \tAnalogueGain = 2.000000\n> \tSensorTimestamp = 3050205672000\n> 3050.238999 (30.01 fps) stream0 seq: 000034 bytesused: 720000\n> \tScalerCrop = (0x2)/3280x2460\n> \tExposureTime = 13969\n> \tAeLocked = true\n> \tDigitalGain = 1.000709\n> \tLux = 771.232422\n> \tColourGains = [ 1.560868, 1.630029 ]\n> \tColourTemperature = 4289\n> \tSensorBlackLevels = [ 4096, 4096, 4096, 4096 ]\n> \tColourCorrectionMatrix = [ 1.691081, -0.599726, -0.091362, -0.437497, 1.983627, -0.546130, -0.083420, -0.722523, 1.805943 ]\n> \tAnalogueGain = 2.000000\n> \tSensorTimestamp = 3050238999000\n\nIt's quite nice to see how easily this can be achieved :-)\n\nWith Hiro's comments addressed,\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  src/cam/capture.cpp | 15 ++++++++++++++-\n>  src/cam/capture.h   |  1 +\n>  2 files changed, 15 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp\n> index 7b55fc677022..7213abd934ec 100644\n> --- a/src/cam/capture.cpp\n> +++ b/src/cam/capture.cpp\n> @@ -10,6 +10,8 @@\n>  #include <limits.h>\n>  #include <sstream>\n>  \n> +#include <libcamera/control_ids.h>\n> +\n>  #include \"capture.h\"\n>  #include \"main.h\"\n>  \n> @@ -18,7 +20,8 @@ using namespace libcamera;\n>  Capture::Capture(std::shared_ptr<Camera> camera, CameraConfiguration *config,\n>  \t\t EventLoop *loop)\n>  \t: camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop),\n> -\t  queueCount_(0), captureCount_(0), captureLimit_(0)\n> +\t  queueCount_(0), captureCount_(0), captureLimit_(0),\n> +\t  printMetadata_(false)\n>  {\n>  }\n>  \n> @@ -29,6 +32,7 @@ int Capture::run(const OptionsParser::Options &options)\n>  \tqueueCount_ = 0;\n>  \tcaptureCount_ = 0;\n>  \tcaptureLimit_ = options[OptCapture].toInteger();\n> +\tprintMetadata_ = options.isSet(OptMetadata);\n>  \n>  \tif (!camera_) {\n>  \t\tstd::cout << \"Can't capture without a camera\" << std::endl;\n> @@ -217,6 +221,15 @@ void Capture::processRequest(Request *request)\n>  \n>  \tstd::cout << info.str() << std::endl;\n>  \n> +\tif (printMetadata_) {\n> +\t\tconst ControlList &requestMetadata = request->metadata();\n> +\t\tfor (const auto ctrl : requestMetadata) {\n> +\t\t\tconst ControlId *id = controls::controls.at(ctrl.first);\n> +\t\t\tstd::cout << \"\\t\" << id->name() << \" = \"\n> +\t\t\t\t  << ctrl.second.toString() << std::endl;\n> +\t\t}\n> +\t}\n> +\n>  \tcaptureCount_++;\n>  \tif (captureLimit_ && captureCount_ >= captureLimit_) {\n>  \t\tloop_->exit(0);\n> diff --git a/src/cam/capture.h b/src/cam/capture.h\n> index c7c9dc00d30f..59d138766b1e 100644\n> --- a/src/cam/capture.h\n> +++ b/src/cam/capture.h\n> @@ -47,6 +47,7 @@ private:\n>  \tunsigned int queueCount_;\n>  \tunsigned int captureCount_;\n>  \tunsigned int captureLimit_;\n> +\tbool printMetadata_;\n>  \n>  \tstd::vector<std::unique_ptr<libcamera::Request>> requests_;\n>  };","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 56BB5BDC91\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 26 Apr 2021 05:10:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C39FC688A7;\n\tMon, 26 Apr 2021 07:10:52 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AA5D7605BD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 26 Apr 2021 07:10:50 +0200 (CEST)","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 2B6A54FB;\n\tMon, 26 Apr 2021 07:10:50 +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=\"rxhElRFx\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1619413850;\n\tbh=jnC3uiwocBDEZLD9yaQ5kveupIBp4lQb2pnUmTZhkVQ=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=rxhElRFxzxzZBzIZOpYLQlB85rNQYDK6G/qKvHpxW0osjnpdNWZAEUrxfKuBd6arx\n\t0zDr8jfUYf9NVplwyyK2D7mql83UP1CjIe67SH0VIrKvhnTjkMSG7K3TGf4EC5TUr5\n\t2mSo7rTU7RRQ3wYbNz/UD16hoJ9RDtCGUV5JcFy8=","Date":"Mon, 26 Apr 2021 08:10:45 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<YIZLVZTZyY6Ajq7L@pendragon.ideasonboard.com>","References":"<20210421160319.42251-1-jacopo@jmondi.org>\n\t<20210421160319.42251-16-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210421160319.42251-16-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v3 15/16] cam: Implement OptMetadata","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>"}}]