[{"id":4174,"web_url":"https://patchwork.libcamera.org/comment/4174/","msgid":"<20200321192316.nscg3gsbyzg7tizs@uno.localdomain>","date":"2020-03-21T19:23:16","subject":"Re: [libcamera-devel] [PATCH LIBCAMERA v2] libcamera: rkisp1: Use\n\tparametered constructor instead of default","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kaaira,\n\nOn Sun, Mar 22, 2020 at 12:02:46AM +0530, Kaaira Gupta wrote:\n> Use of default constructor StreamConfiguration() in deprecated, hence\n> make it private. Make Stream class a friend of StreamConfiguration as it\n> uses the default constructor.\n>\n> Replace default constructor StreamConfiguration() by it's parametrized\n> counterpart by using StreamFormats in generateConfiguration() in rkisp1\n>\n> Also, use erase(), instead of replace() in validate() to prevent it from\n> creating a new instance with empty constructor.\n>\n> Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>\n> ---\n> Changes since v1:\n> \t- replace resize() by erase() in validate() to prevent it from\n> creating a new instance with empty constructor.\n>\n> WIP:\n>         - It fails to build as other pipelines still use default\n>           constructor.\n>\n>  include/libcamera/stream.h               |  4 ++-\n>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 39 ++++++++++++++++--------\n>  src/libcamera/stream.cpp                 |  9 ------\n>  3 files changed, 29 insertions(+), 23 deletions(-)\n>\n> diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h\n> index b1441f8..c19aed6 100644\n> --- a/include/libcamera/stream.h\n> +++ b/include/libcamera/stream.h\n> @@ -37,7 +37,6 @@ private:\n>  };\n>\n>  struct StreamConfiguration {\n> -\tStreamConfiguration();\n>  \tStreamConfiguration(const StreamFormats &formats);\n>\n>  \tPixelFormat pixelFormat;\n> @@ -52,8 +51,11 @@ struct StreamConfiguration {\n>  \tstd::string toString() const;\n>\n>  private:\n> +\tStreamConfiguration();\n\nEmpty line between method and class data member.\n\n>  \tStream *stream_;\n>  \tStreamFormats formats_;\n> +\n> +\tfriend class Stream;\n\nIn most cases (that's bad as the library style is not consistent)\nfriends comes after the visibility modifier or before the method it\nneeds to access. In this case the constructor is the first method\ndeclared after private, so friend should come between the two.\n\nprivate:\n        friend class Stream;\n        StreamConfiguration()\n\n        Stream *stream_;\n        StreamFormats formats_;\n\n>  };\n>\n>  enum StreamRole {\n> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> index 2f909ce..8e8414e 100644\n> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> @@ -218,6 +218,21 @@ private:\n>  \tCamera *activeCamera_;\n>  };\n>\n> +namespace {\n> +\n> +static const std::array<PixelFormat, 8> formats{\n> +\tPixelFormat(DRM_FORMAT_YUYV),\n> +\tPixelFormat(DRM_FORMAT_YVYU),\n> +\tPixelFormat(DRM_FORMAT_VYUY),\n> +\tPixelFormat(DRM_FORMAT_NV16),\n> +\tPixelFormat(DRM_FORMAT_NV61),\n> +\tPixelFormat(DRM_FORMAT_NV21),\n> +\tPixelFormat(DRM_FORMAT_NV12),\n> +\t/* \\todo Add support for 8-bit greyscale to DRM formats */\n> +};\n> +\n> +} /* namespace */\n> +\n>  RkISP1Frames::RkISP1Frames(PipelineHandler *pipe)\n>  \t: pipe_(dynamic_cast<PipelineHandlerRkISP1 *>(pipe))\n>  {\n> @@ -430,17 +445,6 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,\n>\n>  CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n>  {\n> -\tstatic const std::array<PixelFormat, 8> formats{\n> -\t\tPixelFormat(DRM_FORMAT_YUYV),\n> -\t\tPixelFormat(DRM_FORMAT_YVYU),\n> -\t\tPixelFormat(DRM_FORMAT_VYUY),\n> -\t\tPixelFormat(DRM_FORMAT_NV16),\n> -\t\tPixelFormat(DRM_FORMAT_NV61),\n> -\t\tPixelFormat(DRM_FORMAT_NV21),\n> -\t\tPixelFormat(DRM_FORMAT_NV12),\n> -\t\t/* \\todo Add support for 8-bit greyscale to DRM formats */\n> -\t};\n> -\n>  \tconst CameraSensor *sensor = data_->sensor_;\n>  \tStatus status = Valid;\n>\n> @@ -449,7 +453,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n>\n>  \t/* Cap the number of entries to the available streams. */\n>  \tif (config_.size() > 1) {\n> -\t\tconfig_.resize(1);\n> +\t\tconfig_.erase(config_.begin() + 1, config_.end() - 1);\n\nJust config.end(), I bet STL containers handles being() and end()\nin the right way.\n\n>  \t\tstatus = Adjusted;\n>  \t}\n>\n> @@ -537,7 +541,16 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera\n>  \tif (roles.empty())\n>  \t\treturn config;\n>\n> -\tStreamConfiguration cfg{};\n> +\tstd::map<PixelFormat, std::vector<SizeRange>> pixelformats;\n> +\n> +\tfor (PixelFormat pixelformat : formats) {\n> +\t\tstd::vector<SizeRange> sizes{\n> +\t\t\tSizeRange{ { 32, 16 }, { 4416, 3312 } }\n> +\t\t};\n> +\t\tpixelformats[pixelformat] = sizes;\n> +\t}\n> +\tStreamFormats format(pixelformats);\n> +\tStreamConfiguration cfg(format);\n\nThis can be later optimized on top. I wonder, in example what going through\na StreamFormats gives us. Not on this patch, it was there already.\n\n>  \tcfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);\n>  \tcfg.size = data->sensor_->resolution();\n>\n> diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp\n> index ea3d214..96b3dc5 100644\n> --- a/src/libcamera/stream.cpp\n> +++ b/src/libcamera/stream.cpp\n> @@ -274,15 +274,6 @@ SizeRange StreamFormats::range(const PixelFormat &pixelformat) const\n>   * configured for a single video stream.\n>   */\n>\n> -/**\n> - * \\todo This method is deprecated and should be removed once all pipeline\n> - * handlers provied StreamFormats.\n> - */\n> -StreamConfiguration::StreamConfiguration()\n> -\t: pixelFormat(0), stream_(nullptr)\n> -{\n> -}\n> -\n\nNope, as reported, removing the constructor implementation will give\nyou linkage errors. Even if private, it has to be defined somewhere.\n\nTo try if at least this pipeline handlers build right, you can remove\nfrom src/libcamera/pipeline/meson.build the other pipeline handlers\n(and disable tests as well, as you will have an error there too)\n\nThanks\n  j\n\n>  /**\n>   * \\brief Construct a configuration with stream formats\n>   */\n> --\n> 2.17.1\n>","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["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 6C02460415\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 21 Mar 2020 20:20:26 +0100 (CET)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 3E4F340002;\n\tSat, 21 Mar 2020 19:20:19 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Sat, 21 Mar 2020 20:23:16 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Kaaira Gupta <kgupta@es.iitr.ac.in>","Cc":"libcamera-devel@lists.libcamera.org, kieran.bingham@ideasonboard.com,\n\tHelen Koike <helen.koike@collabora.com>,\n\tVaishali Thakkar <vthakkar@vaishalithakkar.in>","Message-ID":"<20200321192316.nscg3gsbyzg7tizs@uno.localdomain>","References":"<20200321183246.GA14651@kaaira-HP-Pavilion-Notebook>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20200321183246.GA14651@kaaira-HP-Pavilion-Notebook>","Subject":"Re: [libcamera-devel] [PATCH LIBCAMERA v2] libcamera: rkisp1: Use\n\tparametered constructor instead of default","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>","X-List-Received-Date":"Sat, 21 Mar 2020 19:20:26 -0000"}},{"id":4175,"web_url":"https://patchwork.libcamera.org/comment/4175/","msgid":"<20200321213514.GA18554@kaaira-HP-Pavilion-Notebook>","date":"2020-03-21T21:35:14","subject":"Re: [libcamera-devel] [PATCH LIBCAMERA v2] libcamera: rkisp1: Use\n\tparametered constructor instead of default","submitter":{"id":39,"url":"https://patchwork.libcamera.org/api/people/39/","name":"Kaaira Gupta","email":"kgupta@es.iitr.ac.in"},"content":"On Sat, Mar 21, 2020 at 08:23:16PM +0100, Jacopo Mondi wrote:\n> Hi Kaaira,\n> \n> On Sun, Mar 22, 2020 at 12:02:46AM +0530, Kaaira Gupta wrote:\n> > Use of default constructor StreamConfiguration() in deprecated, hence\n> > make it private. Make Stream class a friend of StreamConfiguration as it\n> > uses the default constructor.\n> >\n> > Replace default constructor StreamConfiguration() by it's parametrized\n> > counterpart by using StreamFormats in generateConfiguration() in rkisp1\n> >\n> > Also, use erase(), instead of replace() in validate() to prevent it from\n> > creating a new instance with empty constructor.\n> >\n> > Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in>\n> > ---\n> > Changes since v1:\n> > \t- replace resize() by erase() in validate() to prevent it from\n> > creating a new instance with empty constructor.\n> >\n> > WIP:\n> >         - It fails to build as other pipelines still use default\n> >           constructor.\n> >\n> >  include/libcamera/stream.h               |  4 ++-\n> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 39 ++++++++++++++++--------\n> >  src/libcamera/stream.cpp                 |  9 ------\n> >  3 files changed, 29 insertions(+), 23 deletions(-)\n> >\n> > diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h\n> > index b1441f8..c19aed6 100644\n> > --- a/include/libcamera/stream.h\n> > +++ b/include/libcamera/stream.h\n> > @@ -37,7 +37,6 @@ private:\n> >  };\n> >\n> >  struct StreamConfiguration {\n> > -\tStreamConfiguration();\n> >  \tStreamConfiguration(const StreamFormats &formats);\n> >\n> >  \tPixelFormat pixelFormat;\n> > @@ -52,8 +51,11 @@ struct StreamConfiguration {\n> >  \tstd::string toString() const;\n> >\n> >  private:\n> > +\tStreamConfiguration();\n> \n> Empty line between method and class data member.\n> \n> >  \tStream *stream_;\n> >  \tStreamFormats formats_;\n> > +\n> > +\tfriend class Stream;\n> \n> In most cases (that's bad as the library style is not consistent)\n> friends comes after the visibility modifier or before the method it\n> needs to access. In this case the constructor is the first method\n> declared after private, so friend should come between the two.\n\nThanks, I'll fix this up.\n\n> \n> private:\n>         friend class Stream;\n>         StreamConfiguration()\n> \n>         Stream *stream_;\n>         StreamFormats formats_;\n> \n> >  };\n> >\n> >  enum StreamRole {\n> > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > index 2f909ce..8e8414e 100644\n> > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n> > @@ -218,6 +218,21 @@ private:\n> >  \tCamera *activeCamera_;\n> >  };\n> >\n> > +namespace {\n> > +\n> > +static const std::array<PixelFormat, 8> formats{\n> > +\tPixelFormat(DRM_FORMAT_YUYV),\n> > +\tPixelFormat(DRM_FORMAT_YVYU),\n> > +\tPixelFormat(DRM_FORMAT_VYUY),\n> > +\tPixelFormat(DRM_FORMAT_NV16),\n> > +\tPixelFormat(DRM_FORMAT_NV61),\n> > +\tPixelFormat(DRM_FORMAT_NV21),\n> > +\tPixelFormat(DRM_FORMAT_NV12),\n> > +\t/* \\todo Add support for 8-bit greyscale to DRM formats */\n> > +};\n> > +\n> > +} /* namespace */\n> > +\n> >  RkISP1Frames::RkISP1Frames(PipelineHandler *pipe)\n> >  \t: pipe_(dynamic_cast<PipelineHandlerRkISP1 *>(pipe))\n> >  {\n> > @@ -430,17 +445,6 @@ RkISP1CameraConfiguration::RkISP1CameraConfiguration(Camera *camera,\n> >\n> >  CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n> >  {\n> > -\tstatic const std::array<PixelFormat, 8> formats{\n> > -\t\tPixelFormat(DRM_FORMAT_YUYV),\n> > -\t\tPixelFormat(DRM_FORMAT_YVYU),\n> > -\t\tPixelFormat(DRM_FORMAT_VYUY),\n> > -\t\tPixelFormat(DRM_FORMAT_NV16),\n> > -\t\tPixelFormat(DRM_FORMAT_NV61),\n> > -\t\tPixelFormat(DRM_FORMAT_NV21),\n> > -\t\tPixelFormat(DRM_FORMAT_NV12),\n> > -\t\t/* \\todo Add support for 8-bit greyscale to DRM formats */\n> > -\t};\n> > -\n> >  \tconst CameraSensor *sensor = data_->sensor_;\n> >  \tStatus status = Valid;\n> >\n> > @@ -449,7 +453,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()\n> >\n> >  \t/* Cap the number of entries to the available streams. */\n> >  \tif (config_.size() > 1) {\n> > -\t\tconfig_.resize(1);\n> > +\t\tconfig_.erase(config_.begin() + 1, config_.end() - 1);\n> \n> Just config.end(), I bet STL containers handles being() and end()\n> in the right way.\n\nYes sorry, I read the documentation again. erase() erases [first,\nlast)..it's open bracket at last. I'll fix this. But begin() + 1 is\nright, as we need the first element intact.\nThanks, I'll change this\n\n> \n> >  \t\tstatus = Adjusted;\n> >  \t}\n> >\n> > @@ -537,7 +541,16 @@ CameraConfiguration *PipelineHandlerRkISP1::generateConfiguration(Camera *camera\n> >  \tif (roles.empty())\n> >  \t\treturn config;\n> >\n> > -\tStreamConfiguration cfg{};\n> > +\tstd::map<PixelFormat, std::vector<SizeRange>> pixelformats;\n> > +\n> > +\tfor (PixelFormat pixelformat : formats) {\n> > +\t\tstd::vector<SizeRange> sizes{\n> > +\t\t\tSizeRange{ { 32, 16 }, { 4416, 3312 } }\n> > +\t\t};\n> > +\t\tpixelformats[pixelformat] = sizes;\n> > +\t}\n> > +\tStreamFormats format(pixelformats);\n> > +\tStreamConfiguration cfg(format);\n> \n> This can be later optimized on top. I wonder, in example what going through\n> a StreamFormats gives us. Not on this patch, it was there already.\n\nYes, I thought I'll optimise this after I get a thumbs-up on the\nsize-range that I have used.\n\nI don't know exactly, but I think it's because since we already know the\nstreamformats (pixelsformats..the sizes) for these pipelines, we must not\nuse an empty constructor object and define things later, we should pass\nthem in the parametrized constructor directly?? \n\n> \n> >  \tcfg.pixelFormat = PixelFormat(DRM_FORMAT_NV12);\n> >  \tcfg.size = data->sensor_->resolution();\n> >\n> > diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp\n> > index ea3d214..96b3dc5 100644\n> > --- a/src/libcamera/stream.cpp\n> > +++ b/src/libcamera/stream.cpp\n> > @@ -274,15 +274,6 @@ SizeRange StreamFormats::range(const PixelFormat &pixelformat) const\n> >   * configured for a single video stream.\n> >   */\n> >\n> > -/**\n> > - * \\todo This method is deprecated and should be removed once all pipeline\n> > - * handlers provied StreamFormats.\n> > - */\n> > -StreamConfiguration::StreamConfiguration()\n> > -\t: pixelFormat(0), stream_(nullptr)\n> > -{\n> > -}\n> > -\n> \n> Nope, as reported, removing the constructor implementation will give\n> you linkage errors. Even if private, it has to be defined somewhere.\n> \n> To try if at least this pipeline handlers build right, you can remove\n> from src/libcamera/pipeline/meson.build the other pipeline handlers\n> (and disable tests as well, as you will have an error there too)\n> \n\nOkay, I'll do this and check.\n\nThanks for your time!\n\n> Thanks\n>   j\n> \n> >  /**\n> >   * \\brief Construct a configuration with stream formats\n> >   */\n> > --\n> > 2.17.1\n> >","headers":{"Return-Path":"<kgupta@es.iitr.ac.in>","Received":["from mail-pf1-x432.google.com (mail-pf1-x432.google.com\n\t[IPv6:2607:f8b0:4864:20::432])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EEFBD60415\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 21 Mar 2020 22:35:23 +0100 (CET)","by mail-pf1-x432.google.com with SMTP id f206so5316717pfa.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 21 Mar 2020 14:35:23 -0700 (PDT)","from kaaira-HP-Pavilion-Notebook ([103.113.213.154])\n\tby smtp.gmail.com with ESMTPSA id\n\tk2sm8342595pgj.16.2020.03.21.14.35.18\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tSat, 21 Mar 2020 14:35:21 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=es-iitr-ac-in.20150623.gappssmtp.com; s=20150623;\n\th=from:date:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:in-reply-to:user-agent;\n\tbh=fhz8yMMCedSmKTJD3LqWPXK2L/nYs6702GnJyTyq9Q0=;\n\tb=1oGqYj1+PqKpMxT44w9V7sI4Kkq3GFXG7Yy7om8jtHKxoSLanMG02x6yQ5Bg3JmFjz\n\tKiDQ61X1Kc4TW3BsAS+XLmT2DUk9Xb5dhYdqEcmekHWOS575he3MjPt0OKFdH8EGEuFN\n\tfq/60j1rOO9UwyfZ6ZJmB10nzbQr0lj9Fpr74WJGA91R9C1lztu47Z7p+nYMhwoUv7zf\n\t96i24QcKkmZxtdgyTqGx1/WKgVSGAAPPd+7H4bv3FZJkWXW0Icf6Z5li0kSqJQvDcSVd\n\tkE+4TgL15tLK7yEeovG2N1KeSpr/MVvI2qxIYQl82oRvL19HiyZRfgfGCfVIfpgcxVqx\n\t+g+Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:date:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to:user-agent;\n\tbh=fhz8yMMCedSmKTJD3LqWPXK2L/nYs6702GnJyTyq9Q0=;\n\tb=AcbDKjRCZ7mxGg5YK0BFiXF6EiN4h4kaDdQI4VweXpxulzevR9Pp80ePzY1c6dghTj\n\teSAFmxKNi2i/fozsKqNGHZb+KeT6bm4GEM3mVCRcv8Ce3QcaO8BxGiRNUHOr+Ifqhp/a\n\t0D+7BEGdQKxi6AedoYAEjnxWGaL2sGyJBds4X6AGM/Y4hmZPDQ1XvjnGHKYTEC8aKNOO\n\tCvUvxfZkSQ9wfYi2X7jAUpdSY8J/CquwbSxlVFteg5A/OcHR0npKlAzLceFTdlLanja/\n\tN379uSfLG9MIce2IWr0/gxlkkNGfOGO3OTsvK0EC9tAMoX13ifWkD3Ji3GFhSFqSo+J0\n\tv+hQ==","X-Gm-Message-State":"ANhLgQ0qJru/rJXWcRqmNoCZ32vRhAn9U99bp61+bjVUAeXWYuLWPzSm\n\tieAd6+nn+W2a3s+1EvzwIhzTXw==","X-Google-Smtp-Source":"ADFU+vu1GIwPK67skhx5o1uS9kJh2XfeZj4bEE/TdiyHzQms3z4LZz6LkMbSqZCNGbPCdw0zC2Rc+A==","X-Received":"by 2002:a62:18cf:: with SMTP id\n\t198mr17227571pfy.277.1584826521789; \n\tSat, 21 Mar 2020 14:35:21 -0700 (PDT)","From":"Kaaira Gupta <kgupta@es.iitr.ac.in>","X-Google-Original-From":"Kaaira Gupta <Kaairakgupta@es.iitr.ac.in>","Date":"Sun, 22 Mar 2020 03:05:14 +0530","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"Kaaira Gupta <kgupta@es.iitr.ac.in>, libcamera-devel@lists.libcamera.org,\n\tkieran.bingham@ideasonboard.com,\n\tHelen Koike <helen.koike@collabora.com>, \n\tVaishali Thakkar <vthakkar@vaishalithakkar.in>","Message-ID":"<20200321213514.GA18554@kaaira-HP-Pavilion-Notebook>","References":"<20200321183246.GA14651@kaaira-HP-Pavilion-Notebook>\n\t<20200321192316.nscg3gsbyzg7tizs@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20200321192316.nscg3gsbyzg7tizs@uno.localdomain>","User-Agent":"Mutt/1.9.4 (2018-02-28)","Subject":"Re: [libcamera-devel] [PATCH LIBCAMERA v2] libcamera: rkisp1: Use\n\tparametered constructor instead of default","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>","X-List-Received-Date":"Sat, 21 Mar 2020 21:35:27 -0000"}}]