[{"id":11244,"web_url":"https://patchwork.libcamera.org/comment/11244/","msgid":"<20200708143709.GA20298@pendragon.ideasonboard.com>","date":"2020-07-08T14:37:09","subject":"Re: [libcamera-devel] [PATCH v4 04/21] libcamera: V4L2VideoDevice:\n\tAdd tryFormat","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Wed, Jul 08, 2020 at 10:44:00PM +0900, Paul Elder wrote:\n> Add tryFormat and its variations (meta, single-plane, multi-plane) to\n> V4L2VideoDevice.\n> \n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> ---\n> Changes in v4:\n> - merge tryFormat{Meta,Multiplane,SinglePlane} into setFormat with a\n>   flag\n> \n> New in v3\n> ---\n>  include/libcamera/internal/v4l2_videodevice.h |  7 +--\n>  src/libcamera/v4l2_videodevice.cpp            | 50 ++++++++++++++-----\n>  2 files changed, 42 insertions(+), 15 deletions(-)\n> \n> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> index 4d21f5a..fb4c0aa 100644\n> --- a/include/libcamera/internal/v4l2_videodevice.h\n> +++ b/include/libcamera/internal/v4l2_videodevice.h\n> @@ -186,6 +186,7 @@ public:\n>  \tconst V4L2Capability &caps() const { return caps_; }\n>  \n>  \tint getFormat(V4L2DeviceFormat *format);\n> +\tint tryFormat(V4L2DeviceFormat *format);\n>  \tint setFormat(V4L2DeviceFormat *format);\n>  \tstd::map<V4L2PixelFormat, std::vector<SizeRange>> formats(uint32_t code = 0);\n>  \n> @@ -217,13 +218,13 @@ protected:\n>  \n>  private:\n>  \tint getFormatMeta(V4L2DeviceFormat *format);\n> -\tint setFormatMeta(V4L2DeviceFormat *format);\n> +\tint trySetFormatMeta(V4L2DeviceFormat *format, bool set);\n>  \n>  \tint getFormatMultiplane(V4L2DeviceFormat *format);\n> -\tint setFormatMultiplane(V4L2DeviceFormat *format);\n> +\tint trySetFormatMultiplane(V4L2DeviceFormat *format, bool set);\n>  \n>  \tint getFormatSingleplane(V4L2DeviceFormat *format);\n> -\tint setFormatSingleplane(V4L2DeviceFormat *format);\n> +\tint trySetFormatSingleplane(V4L2DeviceFormat *format, bool set);\n>  \n>  \tstd::vector<V4L2PixelFormat> enumPixelformats(uint32_t code);\n>  \tstd::vector<SizeRange> enumSizes(V4L2PixelFormat pixelFormat);\n> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> index 3614b2e..16c78b6 100644\n> --- a/src/libcamera/v4l2_videodevice.cpp\n> +++ b/src/libcamera/v4l2_videodevice.cpp\n> @@ -723,6 +723,26 @@ int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)\n>  \t\treturn getFormatSingleplane(format);\n>  }\n>  \n> +/**\n> + * \\brief Try an image format on the V4L2 video device\n> + * \\param[inout] format The image format to test applicability to the video device\n> + *\n> + * Try the supplied \\a format on the video device without applying it, returning\n> + * the format that would be applied. This is equivalent to setFormat(), except\n> + * that the device configuration is not changed.\n> + *\n> + * \\return 0 on success or a negative error code otherwise\n> + */\n> +int V4L2VideoDevice::tryFormat(V4L2DeviceFormat *format)\n> +{\n> +\tif (caps_.isMeta())\n> +\t\treturn trySetFormatMeta(format, false);\n> +\telse if (caps_.isMultiplanar())\n> +\t\treturn trySetFormatMultiplane(format, false);\n> +\telse\n> +\t\treturn trySetFormatSingleplane(format, false);\n> +}\n> +\n>  /**\n>   * \\brief Configure an image format on the V4L2 video device\n>   * \\param[inout] format The image format to apply to the video device\n> @@ -735,11 +755,11 @@ int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)\n>  int V4L2VideoDevice::setFormat(V4L2DeviceFormat *format)\n>  {\n>  \tif (caps_.isMeta())\n> -\t\treturn setFormatMeta(format);\n> +\t\treturn trySetFormatMeta(format, true);\n>  \telse if (caps_.isMultiplanar())\n> -\t\treturn setFormatMultiplane(format);\n> +\t\treturn trySetFormatMultiplane(format, true);\n>  \telse\n> -\t\treturn setFormatSingleplane(format);\n> +\t\treturn trySetFormatSingleplane(format, true);\n>  }\n>  \n>  int V4L2VideoDevice::getFormatMeta(V4L2DeviceFormat *format)\n> @@ -765,7 +785,7 @@ int V4L2VideoDevice::getFormatMeta(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>  \n> -int V4L2VideoDevice::setFormatMeta(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatMeta(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_meta_format *pix = &v4l2Format.fmt.meta;\n> @@ -774,9 +794,11 @@ int V4L2VideoDevice::setFormatMeta(V4L2DeviceFormat *format)\n>  \tv4l2Format.type = bufferType_;\n>  \tpix->dataformat = format->fourcc;\n>  \tpix->buffersize = format->planes[0].size;\n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n\nNo need for the extra parentheses. Same in the next two functions.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\n>  \n> @@ -820,7 +842,7 @@ int V4L2VideoDevice::getFormatMultiplane(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>  \n> -int V4L2VideoDevice::setFormatMultiplane(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatMultiplane(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_pix_format_mplane *pix = &v4l2Format.fmt.pix_mp;\n> @@ -838,9 +860,11 @@ int V4L2VideoDevice::setFormatMultiplane(V4L2DeviceFormat *format)\n>  \t\tpix->plane_fmt[i].sizeimage = format->planes[i].size;\n>  \t}\n>  \n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\n>  \n> @@ -883,7 +907,7 @@ int V4L2VideoDevice::getFormatSingleplane(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>  \n> -int V4L2VideoDevice::setFormatSingleplane(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatSingleplane(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_pix_format *pix = &v4l2Format.fmt.pix;\n> @@ -895,9 +919,11 @@ int V4L2VideoDevice::setFormatSingleplane(V4L2DeviceFormat *format)\n>  \tpix->pixelformat = format->fourcc;\n>  \tpix->bytesperline = format->planes[0].bpl;\n>  \tpix->field = V4L2_FIELD_NONE;\n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\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 605C2BD790\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2020 14:37:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D712C6114C;\n\tWed,  8 Jul 2020 16:37:16 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8ED5D610F4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2020 16:37:15 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi\n\t[81.175.216.236])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 015AF51B;\n\tWed,  8 Jul 2020 16:37:14 +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=\"UMzD4FY9\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1594219035;\n\tbh=DcQFeZO5QAfdc5x3hMNwEaATNIOuSXVR9JMMemjALNU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=UMzD4FY9NDS6IKIqk+OA3cUbiLywjC5C1CPpoaUxVQgQdTthhLKjVDgZvDxmee/Dk\n\t0LavH3MaN3k7h9BT4AiCB7c1FYYHMT1d06tRjDsGV63daJk1YAynbj4DWEixkImBMl\n\tOb65bSAq8SwMu+4i9x52PZ9D77BNsiQ9gUG5nTOQ=","Date":"Wed, 8 Jul 2020 17:37:09 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20200708143709.GA20298@pendragon.ideasonboard.com>","References":"<20200708134417.67747-1-paul.elder@ideasonboard.com>\n\t<20200708134417.67747-5-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200708134417.67747-5-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 04/21] libcamera: V4L2VideoDevice:\n\tAdd tryFormat","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>"}},{"id":11271,"web_url":"https://patchwork.libcamera.org/comment/11271/","msgid":"<20200708214707.ageqjpjgshwsmug7@uno.localdomain>","date":"2020-07-08T21:47:07","subject":"Re: [libcamera-devel] [PATCH v4 04/21] libcamera: V4L2VideoDevice:\n\tAdd tryFormat","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul,\n\nOn Wed, Jul 08, 2020 at 10:44:00PM +0900, Paul Elder wrote:\n> Add tryFormat and its variations (meta, single-plane, multi-plane) to\n> V4L2VideoDevice.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n> Changes in v4:\n> - merge tryFormat{Meta,Multiplane,SinglePlane} into setFormat with a\n>   flag\n>\n> New in v3\n> ---\n>  include/libcamera/internal/v4l2_videodevice.h |  7 +--\n>  src/libcamera/v4l2_videodevice.cpp            | 50 ++++++++++++++-----\n>  2 files changed, 42 insertions(+), 15 deletions(-)\n>\n> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h\n> index 4d21f5a..fb4c0aa 100644\n> --- a/include/libcamera/internal/v4l2_videodevice.h\n> +++ b/include/libcamera/internal/v4l2_videodevice.h\n> @@ -186,6 +186,7 @@ public:\n>  \tconst V4L2Capability &caps() const { return caps_; }\n>\n>  \tint getFormat(V4L2DeviceFormat *format);\n> +\tint tryFormat(V4L2DeviceFormat *format);\n>  \tint setFormat(V4L2DeviceFormat *format);\n>  \tstd::map<V4L2PixelFormat, std::vector<SizeRange>> formats(uint32_t code = 0);\n>\n> @@ -217,13 +218,13 @@ protected:\n>\n>  private:\n>  \tint getFormatMeta(V4L2DeviceFormat *format);\n> -\tint setFormatMeta(V4L2DeviceFormat *format);\n> +\tint trySetFormatMeta(V4L2DeviceFormat *format, bool set);\n>\n>  \tint getFormatMultiplane(V4L2DeviceFormat *format);\n> -\tint setFormatMultiplane(V4L2DeviceFormat *format);\n> +\tint trySetFormatMultiplane(V4L2DeviceFormat *format, bool set);\n>\n>  \tint getFormatSingleplane(V4L2DeviceFormat *format);\n> -\tint setFormatSingleplane(V4L2DeviceFormat *format);\n> +\tint trySetFormatSingleplane(V4L2DeviceFormat *format, bool set);\n>\n>  \tstd::vector<V4L2PixelFormat> enumPixelformats(uint32_t code);\n>  \tstd::vector<SizeRange> enumSizes(V4L2PixelFormat pixelFormat);\n> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp\n> index 3614b2e..16c78b6 100644\n> --- a/src/libcamera/v4l2_videodevice.cpp\n> +++ b/src/libcamera/v4l2_videodevice.cpp\n> @@ -723,6 +723,26 @@ int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)\n>  \t\treturn getFormatSingleplane(format);\n>  }\n>\n> +/**\n> + * \\brief Try an image format on the V4L2 video device\n> + * \\param[inout] format The image format to test applicability to the video device\n> + *\n> + * Try the supplied \\a format on the video device without applying it, returning\n> + * the format that would be applied. This is equivalent to setFormat(), except\n> + * that the device configuration is not changed.\n> + *\n> + * \\return 0 on success or a negative error code otherwise\n> + */\n> +int V4L2VideoDevice::tryFormat(V4L2DeviceFormat *format)\n> +{\n> +\tif (caps_.isMeta())\n> +\t\treturn trySetFormatMeta(format, false);\n> +\telse if (caps_.isMultiplanar())\n> +\t\treturn trySetFormatMultiplane(format, false);\n> +\telse\n> +\t\treturn trySetFormatSingleplane(format, false);\n> +}\n> +\n>  /**\n>   * \\brief Configure an image format on the V4L2 video device\n>   * \\param[inout] format The image format to apply to the video device\n> @@ -735,11 +755,11 @@ int V4L2VideoDevice::getFormat(V4L2DeviceFormat *format)\n>  int V4L2VideoDevice::setFormat(V4L2DeviceFormat *format)\n>  {\n>  \tif (caps_.isMeta())\n> -\t\treturn setFormatMeta(format);\n> +\t\treturn trySetFormatMeta(format, true);\n>  \telse if (caps_.isMultiplanar())\n> -\t\treturn setFormatMultiplane(format);\n> +\t\treturn trySetFormatMultiplane(format, true);\n>  \telse\n> -\t\treturn setFormatSingleplane(format);\n> +\t\treturn trySetFormatSingleplane(format, true);\n>  }\n>\n>  int V4L2VideoDevice::getFormatMeta(V4L2DeviceFormat *format)\n> @@ -765,7 +785,7 @@ int V4L2VideoDevice::getFormatMeta(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>\n> -int V4L2VideoDevice::setFormatMeta(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatMeta(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_meta_format *pix = &v4l2Format.fmt.meta;\n> @@ -774,9 +794,11 @@ int V4L2VideoDevice::setFormatMeta(V4L2DeviceFormat *format)\n>  \tv4l2Format.type = bufferType_;\n>  \tpix->dataformat = format->fourcc;\n>  \tpix->buffersize = format->planes[0].size;\n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\n>\n> @@ -820,7 +842,7 @@ int V4L2VideoDevice::getFormatMultiplane(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>\n> -int V4L2VideoDevice::setFormatMultiplane(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatMultiplane(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_pix_format_mplane *pix = &v4l2Format.fmt.pix_mp;\n> @@ -838,9 +860,11 @@ int V4L2VideoDevice::setFormatMultiplane(V4L2DeviceFormat *format)\n>  \t\tpix->plane_fmt[i].sizeimage = format->planes[i].size;\n>  \t}\n>\n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\n>\n> @@ -883,7 +907,7 @@ int V4L2VideoDevice::getFormatSingleplane(V4L2DeviceFormat *format)\n>  \treturn 0;\n>  }\n>\n> -int V4L2VideoDevice::setFormatSingleplane(V4L2DeviceFormat *format)\n> +int V4L2VideoDevice::trySetFormatSingleplane(V4L2DeviceFormat *format, bool set)\n>  {\n>  \tstruct v4l2_format v4l2Format = {};\n>  \tstruct v4l2_pix_format *pix = &v4l2Format.fmt.pix;\n> @@ -895,9 +919,11 @@ int V4L2VideoDevice::setFormatSingleplane(V4L2DeviceFormat *format)\n>  \tpix->pixelformat = format->fourcc;\n>  \tpix->bytesperline = format->planes[0].bpl;\n>  \tpix->field = V4L2_FIELD_NONE;\n> -\tret = ioctl(VIDIOC_S_FMT, &v4l2Format);\n> +\tret = ioctl((set ? VIDIOC_S_FMT : VIDIOC_TRY_FMT), &v4l2Format);\n>  \tif (ret) {\n> -\t\tLOG(V4L2, Error) << \"Unable to set format: \" << strerror(-ret);\n> +\t\tLOG(V4L2, Error)\n> +\t\t\t<< \"Unable to \" << (set ? \"set\" : \"try\")\n> +\t\t\t<< \" format: \" << strerror(-ret);\n>  \t\treturn ret;\n>  \t}\n>\n> --\n> 2.27.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":"<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 B6799BD792\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2020 21:43:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 61EAF61178;\n\tWed,  8 Jul 2020 23:43:36 +0200 (CEST)","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 DD8DE61163\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2020 23:43:34 +0200 (CEST)","from uno.localdomain (2-224-242-101.ip172.fastwebnet.it\n\t[2.224.242.101]) (Authenticated sender: jacopo@jmondi.org)\n\tby relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 41EF8C0005;\n\tWed,  8 Jul 2020 21:43:34 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Wed, 8 Jul 2020 23:47:07 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20200708214707.ageqjpjgshwsmug7@uno.localdomain>","References":"<20200708134417.67747-1-paul.elder@ideasonboard.com>\n\t<20200708134417.67747-5-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20200708134417.67747-5-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 04/21] libcamera: V4L2VideoDevice:\n\tAdd tryFormat","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>"}}]