[{"id":3201,"web_url":"https://patchwork.libcamera.org/comment/3201/","msgid":"<20191206222243.GP28879@bigcity.dyn.berto.se>","date":"2019-12-06T22:22:43","subject":"Re: [libcamera-devel] [PATCH v2 06/10] libcamera: camera_sensor:\n\tParse camera 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 patch.\n\nOn 2019-12-05 21:43:46 +0100, Jacopo Mondi wrote:\n> Parse and collect camera sensor properties by inspecting the associated\n> v4l2 controls.\n> \n> Augment the CameraSensor class with an operation to retrieve the\n> collected properties.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  src/libcamera/camera_sensor.cpp       | 46 ++++++++++++++++++++++++++-\n>  src/libcamera/include/camera_sensor.h |  7 ++--\n>  2 files changed, 50 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> index 86f0c772861b..5c7a73ab0c4e 100644\n> --- a/src/libcamera/camera_sensor.cpp\n> +++ b/src/libcamera/camera_sensor.cpp\n> @@ -13,6 +13,8 @@\n>  #include <limits.h>\n>  #include <math.h>\n>  \n> +#include <libcamera/property_ids.h>\n> +\n>  #include \"formats.h\"\n>  #include \"utils.h\"\n>  #include \"v4l2_subdevice.h\"\n> @@ -47,7 +49,7 @@ LOG_DEFINE_CATEGORY(CameraSensor);\n>   * Once constructed the instance must be initialized with init().\n>   */\n>  CameraSensor::CameraSensor(const MediaEntity *entity)\n> -\t: entity_(entity)\n> +\t: entity_(entity), properties_(properties::properties)\n>  {\n>  \tsubdev_ = new V4L2Subdevice(entity);\n>  }\n> @@ -89,6 +91,42 @@ int CameraSensor::init()\n>  \tif (ret < 0)\n>  \t\treturn ret;\n>  \n> +\t/* Retrieve and store the camera sensor properties. */\n> +\tconst ControlInfoMap &controls = subdev_->controls();\n> +\tint32_t propertyValue;\n> +\n> +\t/* Camera Location: default is front location. */\n> +\tconst auto &locationControl = controls.find(V4L2_CID_CAMERA_SENSOR_LOCATION);\n> +\tif (locationControl != controls.end()) {\n> +\t\tint32_t v4l2Location =\n> +\t\t\tlocationControl->second.def().get<int32_t>();\n> +\t\tswitch (v4l2Location) {\n> +\t\tcase V4L2_LOCATION_EXTERNAL:\n> +\t\t\tpropertyValue = CAMERA_LOCATION_EXTERNAL;\n> +\t\t\tbreak;\n> +\t\tcase V4L2_LOCATION_FRONT:\n> +\t\t\tpropertyValue = CAMERA_LOCATION_FRONT;\n> +\t\t\tbreak;\n> +\t\tcase V4L2_LOCATION_BACK:\n> +\t\t\tpropertyValue = CAMERA_LOCATION_BACK;\n> +\t\t\tbreak;\n> +\t\tdefault:\n> +\t\t\tLOG(CameraSensor, Error)\n> +\t\t\t\t<< \"Unsupported camera location: \" << v4l2Location;\n> +\t\t\treturn -EINVAL;\n> +\t\t}\n> +\t} else {\n> +\t\tpropertyValue = CAMERA_LOCATION_FRONT;\n> +\t}\n> +\tproperties_.set(properties::Location, propertyValue);\n> +\n> +\t/* Camera Rotation: default is 0 degrees. */\n> +\tpropertyValue = 0;\n> +\tconst auto &rotationControl = controls.find(V4L2_CID_CAMERA_SENSOR_ROTATION);\n> +\tif (rotationControl != controls.end())\n> +\t\tpropertyValue = rotationControl->second.def().get<int32_t>();\n> +\tproperties_.set(properties::Rotation, propertyValue);\n> +\n>  \t/* Enumerate and cache media bus codes and sizes. */\n>  \tconst ImageFormats formats = subdev_->formats(0);\n>  \tif (formats.isEmpty()) {\n> @@ -284,6 +322,12 @@ int CameraSensor::getControls(ControlList *ctrls)\n>  \treturn subdev_->getControls(ctrls);\n>  }\n>  \n> +/**\n> + * \\fn CameraSensor::properties()\n> + * \\brief Retrieve the camera sensor properties\n> + * \\return The list of camera sensor properties\n> + */\n> +\n>  /**\n>   * \\brief Write controls to the sensor\n>   * \\param[in] ctrls The list of controls to write\n> diff --git a/src/libcamera/include/camera_sensor.h b/src/libcamera/include/camera_sensor.h\n> index 1fb36a4f4951..99cff98128dc 100644\n> --- a/src/libcamera/include/camera_sensor.h\n> +++ b/src/libcamera/include/camera_sensor.h\n> @@ -10,14 +10,13 @@\n>  #include <string>\n>  #include <vector>\n>  \n> +#include <libcamera/controls.h>\n>  #include <libcamera/geometry.h>\n>  \n>  #include \"log.h\"\n>  \n>  namespace libcamera {\n>  \n> -class ControlInfoMap;\n> -class ControlList;\n>  class MediaEntity;\n>  class V4L2Subdevice;\n>  \n> @@ -47,6 +46,8 @@ public:\n>  \tint getControls(ControlList *ctrls);\n>  \tint setControls(ControlList *ctrls);\n>  \n> +\tconst ControlList &properties() const { return properties_; }\n> +\n>  protected:\n>  \tstd::string logPrefix() const;\n>  \n> @@ -56,6 +57,8 @@ private:\n>  \n>  \tstd::vector<unsigned int> mbusCodes_;\n>  \tstd::vector<Size> sizes_;\n> +\n> +\tControlList properties_;\n>  };\n>  \n>  } /* namespace libcamera */\n> -- \n> 2.23.0\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x234.google.com (mail-lj1-x234.google.com\n\t[IPv6:2a00:1450:4864:20::234])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CE19860BBC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Dec 2019 23:22:45 +0100 (CET)","by mail-lj1-x234.google.com with SMTP id k8so9280338ljh.5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 06 Dec 2019 14:22:45 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\tc20sm7240533ljj.55.2019.12.06.14.22.44\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 06 Dec 2019 14:22:44 -0800 (PST)"],"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\t:user-agent; bh=u0oX8JtV0at35hTE3I2GLC3yANfNXwplXD00P51ILt0=;\n\tb=sZTNDNxrirDyR1P0yPXltfZwtbrE/HYAK5WY7L/GhZNrQHStd0qRC8BkrRZv/GSnWT\n\tBDpqV1GdPedZbsoVFEgmktInl5O/Ji2zZB1ip+H7RgowEFkJItq6gO7sHe0zj/OuO/vO\n\t9KE6waIlxqNEEpqZF7T4I4dekPuJCV6yLXwvanIRMnes7CWQzVwOpDUwWLLnT8gJei+O\n\tjh+pLaMPYPhjWypCqVrQ7pyPD3YfUf3JCJhakd3mHvnlkBNc1iOVX5q80UmHUfDHD8QE\n\tIlSE9mic2FzqIQ7uK8hq4/liGx3gsatL1J/3eVuJsqL/kwhh34OhdL8hn84nD7PdRm7U\n\ttKEw==","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:user-agent;\n\tbh=u0oX8JtV0at35hTE3I2GLC3yANfNXwplXD00P51ILt0=;\n\tb=RfLCm+3WbF/68cTZ7J2X43KTmkQUHEzUmxQieO1dtMHNKsYrxPPq///V6797sxPJRw\n\tBqlL7eRQec2KqVEwVRM2XxOXKpwJ3rHKlGHNTnr9eV6wRlnE4bAU5HwXWCuBaz2iplu2\n\tdS6BiBo6AQ9eAvKneH742N+LoghQ6DRdfyHYdDt/E6sP3ZmFTNevAe7YDpk8NDmklSWI\n\tPSvTsu+R3fHOacqSqpIEH7lToBtmWlacDJgT4WbLLnRSLYHvSCxF8JI9Aw3B4RPcYBMC\n\tAJSsgV6K6WlRfJtbDKVd59FTk6ABpq4753QpxhwsdIFbWI9Lh/ry4u36Xx2ULoHP2z4h\n\twb6A==","X-Gm-Message-State":"APjAAAVX9842ZobCU5G7WVyFEbv+/fhFEDrTAODmxs8DRFkDzSmTzCj5\n\tuo2CGqrY36qqK42riaFxURh+cg==","X-Google-Smtp-Source":"APXvYqwKjdeTcFZ+yE4KgjNNuzRroQAemXDhTX2JdyiZI/SeuUF58DgyiVonkRm5HAjASn/lAuJwDg==","X-Received":"by 2002:a2e:9592:: with SMTP id w18mr9791193ljh.98.1575670965188;\n\tFri, 06 Dec 2019 14:22:45 -0800 (PST)","Date":"Fri, 6 Dec 2019 23:22:43 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20191206222243.GP28879@bigcity.dyn.berto.se>","References":"<20191205204350.28196-1-jacopo@jmondi.org>\n\t<20191205204350.28196-7-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20191205204350.28196-7-jacopo@jmondi.org>","User-Agent":"Mutt/1.12.1 (2019-06-15)","Subject":"Re: [libcamera-devel] [PATCH v2 06/10] libcamera: camera_sensor:\n\tParse camera 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>","X-List-Received-Date":"Fri, 06 Dec 2019 22:22:46 -0000"}},{"id":3205,"web_url":"https://patchwork.libcamera.org/comment/3205/","msgid":"<20191206224603.GT28879@bigcity.dyn.berto.se>","date":"2019-12-06T22:46:03","subject":"Re: [libcamera-devel] [PATCH v2 06/10] libcamera: camera_sensor:\n\tParse camera properties","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"On 2019-12-06 23:22:45 +0100, Niklas Söderlund wrote:\n> Hi Jacopo,\n> \n> Thanks for your patch.\n> \n> On 2019-12-05 21:43:46 +0100, Jacopo Mondi wrote:\n> > Parse and collect camera sensor properties by inspecting the associated\n> > v4l2 controls.\n> > \n> > Augment the CameraSensor class with an operation to retrieve the\n> > collected properties.\n> > \n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> \n> > ---\n> >  src/libcamera/camera_sensor.cpp       | 46 ++++++++++++++++++++++++++-\n> >  src/libcamera/include/camera_sensor.h |  7 ++--\n> >  2 files changed, 50 insertions(+), 3 deletions(-)\n> > \n> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp\n> > index 86f0c772861b..5c7a73ab0c4e 100644\n> > --- a/src/libcamera/camera_sensor.cpp\n> > +++ b/src/libcamera/camera_sensor.cpp\n> > @@ -13,6 +13,8 @@\n> >  #include <limits.h>\n> >  #include <math.h>\n> >  \n> > +#include <libcamera/property_ids.h>\n> > +\n> >  #include \"formats.h\"\n> >  #include \"utils.h\"\n> >  #include \"v4l2_subdevice.h\"\n> > @@ -47,7 +49,7 @@ LOG_DEFINE_CATEGORY(CameraSensor);\n> >   * Once constructed the instance must be initialized with init().\n> >   */\n> >  CameraSensor::CameraSensor(const MediaEntity *entity)\n> > -\t: entity_(entity)\n> > +\t: entity_(entity), properties_(properties::properties)\n> >  {\n> >  \tsubdev_ = new V4L2Subdevice(entity);\n> >  }\n> > @@ -89,6 +91,42 @@ int CameraSensor::init()\n> >  \tif (ret < 0)\n> >  \t\treturn ret;\n> >  \n> > +\t/* Retrieve and store the camera sensor properties. */\n> > +\tconst ControlInfoMap &controls = subdev_->controls();\n> > +\tint32_t propertyValue;\n> > +\n> > +\t/* Camera Location: default is front location. */\n> > +\tconst auto &locationControl = controls.find(V4L2_CID_CAMERA_SENSOR_LOCATION);\n> > +\tif (locationControl != controls.end()) {\n> > +\t\tint32_t v4l2Location =\n> > +\t\t\tlocationControl->second.def().get<int32_t>();\n> > +\t\tswitch (v4l2Location) {\n> > +\t\tcase V4L2_LOCATION_EXTERNAL:\n> > +\t\t\tpropertyValue = CAMERA_LOCATION_EXTERNAL;\n> > +\t\t\tbreak;\n> > +\t\tcase V4L2_LOCATION_FRONT:\n> > +\t\t\tpropertyValue = CAMERA_LOCATION_FRONT;\n> > +\t\t\tbreak;\n> > +\t\tcase V4L2_LOCATION_BACK:\n> > +\t\t\tpropertyValue = CAMERA_LOCATION_BACK;\n> > +\t\t\tbreak;\n> > +\t\tdefault:\n> > +\t\t\tLOG(CameraSensor, Error)\n> > +\t\t\t\t<< \"Unsupported camera location: \" << v4l2Location;\n> > +\t\t\treturn -EINVAL;\n> > +\t\t}\n> > +\t} else {\n> > +\t\tpropertyValue = CAMERA_LOCATION_FRONT;\n> > +\t}\n> > +\tproperties_.set(properties::Location, propertyValue);\n> > +\n> > +\t/* Camera Rotation: default is 0 degrees. */\n> > +\tpropertyValue = 0;\n> > +\tconst auto &rotationControl = controls.find(V4L2_CID_CAMERA_SENSOR_ROTATION);\n> > +\tif (rotationControl != controls.end())\n> > +\t\tpropertyValue = rotationControl->second.def().get<int32_t>();\n> > +\tproperties_.set(properties::Rotation, propertyValue);\n\nReading 9/10 I wonder if we should not enforce a bound here instead of \nin the Android HAL component.\n\n> > +\n> >  \t/* Enumerate and cache media bus codes and sizes. */\n> >  \tconst ImageFormats formats = subdev_->formats(0);\n> >  \tif (formats.isEmpty()) {\n> > @@ -284,6 +322,12 @@ int CameraSensor::getControls(ControlList *ctrls)\n> >  \treturn subdev_->getControls(ctrls);\n> >  }\n> >  \n> > +/**\n> > + * \\fn CameraSensor::properties()\n> > + * \\brief Retrieve the camera sensor properties\n> > + * \\return The list of camera sensor properties\n> > + */\n> > +\n> >  /**\n> >   * \\brief Write controls to the sensor\n> >   * \\param[in] ctrls The list of controls to write\n> > diff --git a/src/libcamera/include/camera_sensor.h b/src/libcamera/include/camera_sensor.h\n> > index 1fb36a4f4951..99cff98128dc 100644\n> > --- a/src/libcamera/include/camera_sensor.h\n> > +++ b/src/libcamera/include/camera_sensor.h\n> > @@ -10,14 +10,13 @@\n> >  #include <string>\n> >  #include <vector>\n> >  \n> > +#include <libcamera/controls.h>\n> >  #include <libcamera/geometry.h>\n> >  \n> >  #include \"log.h\"\n> >  \n> >  namespace libcamera {\n> >  \n> > -class ControlInfoMap;\n> > -class ControlList;\n> >  class MediaEntity;\n> >  class V4L2Subdevice;\n> >  \n> > @@ -47,6 +46,8 @@ public:\n> >  \tint getControls(ControlList *ctrls);\n> >  \tint setControls(ControlList *ctrls);\n> >  \n> > +\tconst ControlList &properties() const { return properties_; }\n> > +\n> >  protected:\n> >  \tstd::string logPrefix() const;\n> >  \n> > @@ -56,6 +57,8 @@ private:\n> >  \n> >  \tstd::vector<unsigned int> mbusCodes_;\n> >  \tstd::vector<Size> sizes_;\n> > +\n> > +\tControlList properties_;\n> >  };\n> >  \n> >  } /* namespace libcamera */\n> > -- \n> > 2.23.0\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":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lf1-x134.google.com (mail-lf1-x134.google.com\n\t[IPv6:2a00:1450:4864:20::134])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BA4E260BBC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Dec 2019 23:46:04 +0100 (CET)","by mail-lf1-x134.google.com with SMTP id v201so6407999lfa.11\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 06 Dec 2019 14:46:04 -0800 (PST)","from localhost (h-93-159.A463.priv.bahnhof.se. [46.59.93.159])\n\tby smtp.gmail.com with ESMTPSA id\n\ti19sm7454464ljj.24.2019.12.06.14.46.03\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 06 Dec 2019 14:46:03 -0800 (PST)"],"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\t:user-agent; bh=QI4tfd6rgQBEmLWcnsKltBgU26O59p5YaNrjb/9lGxE=;\n\tb=GdRHJ9e6jkmdFDOlTNJMc4Gzxj2hSbd0M4lGTJkEzmmL46lWRM2+2UCCgbmfiIvciy\n\t2DDv8pc7pNBV9+8x3CHqPaLUrn80o6ZE8R+PGzTIka6WDdaPftpsYdFKIV8WfdhAI4Zl\n\tdWrxMiQEu1vBLN0kk1s4C5UhoPJL5pREoggN+lohZgtOGdSuot0rXhzg5+wSgdl+9v+2\n\tPpGFhsz1hnXQuOS1Z/lOV720E3IR2i8hdQwnw00Xk74qugwx4SvXWMhE9uGQpARp8VzE\n\tSQn5pnj83PLlAm2kAPsrEJarC/smNq/dUeL/P0omY3Mwh5NXktzk8Pz/fT3F4H5d+9qe\n\teR9Q==","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:user-agent;\n\tbh=QI4tfd6rgQBEmLWcnsKltBgU26O59p5YaNrjb/9lGxE=;\n\tb=NaEM6SkMG31wpIbE0442bWRPgZXI6LNhYlVCLbon5+N1egMOoQF5BDw10mE5pcHplG\n\tPZOaaSo90QXQJ4vTA8ZyBtZGPV9BIuEBn3Mh+QMY19H1zpvrv0x7ebztUeLrb28qkDUP\n\tKTzoRC8PN49HrWSRX9yjmhKtaleFmcLK6IhiWs7dKe55hj3PtZAwRITmSEQ4HSjXl2Lf\n\tZSXU3zBtLON3u7sT0hT4YiyhtM+3knONPUk7bN9hoCFMwcMP64fMZZ9sAEX9jBs3Xin7\n\tlmz9GvtPkLTSzUH9tbdJMERB3exyxShsOZ8HtuhalmudC+4U+xngNnBoF2z1X3MfM/Hn\n\tt6iw==","X-Gm-Message-State":"APjAAAWvroHrXDx3I5Mm9uElcDxzRRNfMOUSgF4vnJA/78sbNgr0s4kC\n\tC/WbAWyBumQZG/lHSuzXAuqT6g4vlQY=","X-Google-Smtp-Source":"APXvYqzWqihXJt4KT9kbTgRyQgoGPEe/LAwvhUv6yomG6CpOrbqp4BWGhg83fheFn0SC3N6wzj/CdQ==","X-Received":"by 2002:a19:7701:: with SMTP id s1mr7989179lfc.180.1575672364194;\n\tFri, 06 Dec 2019 14:46:04 -0800 (PST)","Date":"Fri, 6 Dec 2019 23:46:03 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20191206224603.GT28879@bigcity.dyn.berto.se>","References":"<20191205204350.28196-1-jacopo@jmondi.org>\n\t<20191205204350.28196-7-jacopo@jmondi.org>\n\t<20191206222243.GP28879@bigcity.dyn.berto.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20191206222243.GP28879@bigcity.dyn.berto.se>","User-Agent":"Mutt/1.12.1 (2019-06-15)","Subject":"Re: [libcamera-devel] [PATCH v2 06/10] libcamera: camera_sensor:\n\tParse camera 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>","X-List-Received-Date":"Fri, 06 Dec 2019 22:46:04 -0000"}}]