[{"id":973,"web_url":"https://patchwork.libcamera.org/comment/973/","msgid":"<20190228221635.GP7811@pendragon.ideasonboard.com>","date":"2019-02-28T22:16:57","subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","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 Thu, Feb 28, 2019 at 09:01:50PM +0100, Jacopo Mondi wrote:\n> Add test to list formats on a v4l2 subdevice.\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  test/v4l2_subdevice/list_formats.cpp | 85 ++++++++++++++++++++++++++++\n>  test/v4l2_subdevice/meson.build      |  1 +\n>  2 files changed, 86 insertions(+)\n>  create mode 100644 test/v4l2_subdevice/list_formats.cpp\n> \n> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp\n> new file mode 100644\n> index 000000000000..b902a198b17e\n> --- /dev/null\n> +++ b/test/v4l2_subdevice/list_formats.cpp\n> @@ -0,0 +1,85 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2019, Google Inc.\n> + *\n> + * libcamera V4L2 Subdevice format handling test\n> + */\n> +\n> +#include <iostream>\n> +#include <vector>\n> +\n> +#include \"geometry.h\"\n> +#include \"v4l2_subdevice.h\"\n> +#include \"v4l2_subdevice_test.h\"\n> +\n> +using namespace std;\n> +using namespace libcamera;\n> +\n> +/* List image formats on the \"Scaler\" subdevice of vimc media device.  */\n> +\n> +class ListFormatsTest : public V4L2SubdeviceTest\n> +{\n> +protected:\n> +\tint run() override;\n> +\n> +private:\n> +\tvoid printFormats(unsigned int pad, unsigned code,\n> +\t\t\t  std::vector<SizeRange> &formats);\n> +};\n> +\n> +void ListFormatsTest::printFormats(unsigned int pad,\n> +\t\t\t\t   unsigned int code,\n> +\t\t\t\t   std::vector<SizeRange> &sizes)\n> +{\n> +\tcout << \"Enumerate formats on pad \" << pad << endl;\n> +\tfor (SizeRange &size : sizes) {\n> +\t\tcout << \"\tMbus code: 0x\" << hex << code << endl;\n\nI'd write \"media bus code\" in full, or if you want to abbreviate, \"mbus\ncode\".\n\nShould you ensure that at least 4 characters get printed ?\n\n> +\t\tcout << \"\tmin Width: \" << dec << size.minWidth << endl;\n> +\t\tcout << \"\tmin Height: \" << dec << size.minHeight << endl;\n> +\t\tcout << \"\tmax Width: \" << dec << size.maxWidth << endl;\n> +\t\tcout << \"\tmax Height: \" << dec << size.maxHeight << endl;\n\ns/Width/width/ and s/Height/height/ ?\n\n> +\t}\n> +}\n> +\n> +int ListFormatsTest::run()\n> +{\n> +\t/* List all formats available on existing \"Scaler\" pads. */\n> +\tstd::map<unsigned int, std::vector<SizeRange>> formats;\n> +\n> +\tformats = scaler_->formats(0);\n> +\tif (formats.size() == 0) {\n> +\t\tcerr << \"Failed to list formats on pad 0 of subdevice \"\n> +\t\t     << scaler_->deviceName() << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\tauto it = formats.begin();\n> +\twhile (it != formats.end()) {\n> +\t\tprintFormats(0, it->first, it->second);\n> +\t\t++it;\n> +\t}\n\nHow about\n\n\tfor (auto it = formats.begin(); it != formats.end(); ++it)\n\t\tprintFormats(0, it->first, it->second);\n\n> +\n> +\tformats = scaler_->formats(1);\n> +\tif (formats.size() == 0) {\n> +\t\tcerr << \"Failed to list formats on pad 1 of subdevice \"\n> +\t\t     << scaler_->deviceName() << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\tit = formats.begin();\n> +\twhile (it != formats.end()) {\n> +\t\tprintFormats(1, it->first, it->second);\n> +\t\t++it;\n> +\t}\n\nSame here.\n\n> +\n> +\t/* List format on a non-existing pad, format vector shall be empty. */\n> +\tformats = scaler_->formats(2);\n> +\tif (formats.size() != 0) {\n\nMaybe\n\n\tif (!formats.empty()) {\n\n> +\t\tcerr << \"Listing formats on non-existing pad 2 of subdevice \"\n> +\t\t     << scaler_->deviceName()\n> +\t\t     << \" should return an empty format list\" << endl;\n> +\t\treturn TestFail;\n> +\t}\n> +\n> +\treturn TestPass;\n> +}\n> +\n> +TEST_REGISTER(ListFormatsTest);\n> diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\n> index f45dca0d23d7..80cfbbbf9413 100644\n> --- a/test/v4l2_subdevice/meson.build\n> +++ b/test/v4l2_subdevice/meson.build\n> @@ -1,4 +1,5 @@\n>  v4l2_subdevice_tests = [\n> +  [ 'list_formats',             'list_formats.cpp'],\n>    [ 'test_formats',             'test_formats.cpp'],\n>  ]\n>","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4DB17610B6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 28 Feb 2019 23:17:04 +0100 (CET)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BA85949;\n\tThu, 28 Feb 2019 23:17:02 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1551392222;\n\tbh=ZWpHMmrwMAo2+47exLQS8ZxGasxGXKhuNwccOT5ypOo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=H1nBmn9Dnvi08odZbcVc4AD49e7GIyK3BQVjPSZD87+NLsNy817furGgBtMNu9+4i\n\tUIzL7uZ6aXihrUz+P9pvb0NKpY6PZYoY0U0Lqk4H0M7RjqYi4Q0GGH0KAfZzpQH0/Z\n\ttpRNHP/gtPdTJmnmR4tUcAh8adEu4V/GPrEQ5vuI=","Date":"Fri, 1 Mar 2019 00:16:57 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190228221635.GP7811@pendragon.ideasonboard.com>","References":"<20190228200151.2948-1-jacopo@jmondi.org>\n\t<20190228200151.2948-9-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20190228200151.2948-9-jacopo@jmondi.org>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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":"Thu, 28 Feb 2019 22:17:04 -0000"}},{"id":982,"web_url":"https://patchwork.libcamera.org/comment/982/","msgid":"<20190301092703.od4l2y63okqhvhqo@uno.localdomain>","date":"2019-03-01T09:27:03","subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Fri, Mar 01, 2019 at 12:16:57AM +0200, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> Thank you for the patch.\n>\n> On Thu, Feb 28, 2019 at 09:01:50PM +0100, Jacopo Mondi wrote:\n> > Add test to list formats on a v4l2 subdevice.\n> >\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  test/v4l2_subdevice/list_formats.cpp | 85 ++++++++++++++++++++++++++++\n> >  test/v4l2_subdevice/meson.build      |  1 +\n> >  2 files changed, 86 insertions(+)\n> >  create mode 100644 test/v4l2_subdevice/list_formats.cpp\n> >\n> > diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp\n> > new file mode 100644\n> > index 000000000000..b902a198b17e\n> > --- /dev/null\n> > +++ b/test/v4l2_subdevice/list_formats.cpp\n> > @@ -0,0 +1,85 @@\n> > +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > +/*\n> > + * Copyright (C) 2019, Google Inc.\n> > + *\n> > + * libcamera V4L2 Subdevice format handling test\n> > + */\n> > +\n> > +#include <iostream>\n> > +#include <vector>\n> > +\n> > +#include \"geometry.h\"\n> > +#include \"v4l2_subdevice.h\"\n> > +#include \"v4l2_subdevice_test.h\"\n> > +\n> > +using namespace std;\n> > +using namespace libcamera;\n> > +\n> > +/* List image formats on the \"Scaler\" subdevice of vimc media device.  */\n> > +\n> > +class ListFormatsTest : public V4L2SubdeviceTest\n> > +{\n> > +protected:\n> > +\tint run() override;\n> > +\n> > +private:\n> > +\tvoid printFormats(unsigned int pad, unsigned code,\n> > +\t\t\t  std::vector<SizeRange> &formats);\n> > +};\n> > +\n> > +void ListFormatsTest::printFormats(unsigned int pad,\n> > +\t\t\t\t   unsigned int code,\n> > +\t\t\t\t   std::vector<SizeRange> &sizes)\n> > +{\n> > +\tcout << \"Enumerate formats on pad \" << pad << endl;\n> > +\tfor (SizeRange &size : sizes) {\n> > +\t\tcout << \"\tMbus code: 0x\" << hex << code << endl;\n>\n> I'd write \"media bus code\" in full, or if you want to abbreviate, \"mbus\n> code\".\n>\n> Should you ensure that at least 4 characters get printed ?\n\nSorry, didn't get this..\n\n>\n> > +\t\tcout << \"\tmin Width: \" << dec << size.minWidth << endl;\n> > +\t\tcout << \"\tmin Height: \" << dec << size.minHeight << endl;\n> > +\t\tcout << \"\tmax Width: \" << dec << size.maxWidth << endl;\n> > +\t\tcout << \"\tmax Height: \" << dec << size.maxHeight << endl;\n>\n> s/Width/width/ and s/Height/height/ ?\n>\n> > +\t}\n> > +}\n> > +\n> > +int ListFormatsTest::run()\n> > +{\n> > +\t/* List all formats available on existing \"Scaler\" pads. */\n> > +\tstd::map<unsigned int, std::vector<SizeRange>> formats;\n> > +\n> > +\tformats = scaler_->formats(0);\n> > +\tif (formats.size() == 0) {\n> > +\t\tcerr << \"Failed to list formats on pad 0 of subdevice \"\n> > +\t\t     << scaler_->deviceName() << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\tauto it = formats.begin();\n> > +\twhile (it != formats.end()) {\n> > +\t\tprintFormats(0, it->first, it->second);\n> > +\t\t++it;\n> > +\t}\n>\n> How about\n>\n> \tfor (auto it = formats.begin(); it != formats.end(); ++it)\n> \t\tprintFormats(0, it->first, it->second);\n>\n> > +\n> > +\tformats = scaler_->formats(1);\n> > +\tif (formats.size() == 0) {\n> > +\t\tcerr << \"Failed to list formats on pad 1 of subdevice \"\n> > +\t\t     << scaler_->deviceName() << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\tit = formats.begin();\n> > +\twhile (it != formats.end()) {\n> > +\t\tprintFormats(1, it->first, it->second);\n> > +\t\t++it;\n> > +\t}\n>\n> Same here.\n>\n> > +\n> > +\t/* List format on a non-existing pad, format vector shall be empty. */\n> > +\tformats = scaler_->formats(2);\n> > +\tif (formats.size() != 0) {\n>\n> Maybe\n>\n> \tif (!formats.empty()) {\n>\n\nOk, I'll update this.\n\nThanks\n  j\n\n> > +\t\tcerr << \"Listing formats on non-existing pad 2 of subdevice \"\n> > +\t\t     << scaler_->deviceName()\n> > +\t\t     << \" should return an empty format list\" << endl;\n> > +\t\treturn TestFail;\n> > +\t}\n> > +\n> > +\treturn TestPass;\n> > +}\n> > +\n> > +TEST_REGISTER(ListFormatsTest);\n> > diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\n> > index f45dca0d23d7..80cfbbbf9413 100644\n> > --- a/test/v4l2_subdevice/meson.build\n> > +++ b/test/v4l2_subdevice/meson.build\n> > @@ -1,4 +1,5 @@\n> >  v4l2_subdevice_tests = [\n> > +  [ 'list_formats',             'list_formats.cpp'],\n> >    [ 'test_formats',             'test_formats.cpp'],\n> >  ]\n> >\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 45D51610B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Mar 2019 10:26:34 +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 relay7-d.mail.gandi.net (Postfix) with ESMTPSA id CD43520011;\n\tFri,  1 Mar 2019 09:26:33 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Fri, 1 Mar 2019 10:27:03 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190301092703.od4l2y63okqhvhqo@uno.localdomain>","References":"<20190228200151.2948-1-jacopo@jmondi.org>\n\t<20190228200151.2948-9-jacopo@jmondi.org>\n\t<20190228221635.GP7811@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"edmqzfatjok4ivzs\"","Content-Disposition":"inline","In-Reply-To":"<20190228221635.GP7811@pendragon.ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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, 01 Mar 2019 09:26:34 -0000"}},{"id":986,"web_url":"https://patchwork.libcamera.org/comment/986/","msgid":"<20190301100618.GA26239@pendragon.ideasonboard.com>","date":"2019-03-01T10:06:18","subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Fri, Mar 01, 2019 at 10:27:03AM +0100, Jacopo Mondi wrote:\n> On Fri, Mar 01, 2019 at 12:16:57AM +0200, Laurent Pinchart wrote:\n> > On Thu, Feb 28, 2019 at 09:01:50PM +0100, Jacopo Mondi wrote:\n> >> Add test to list formats on a v4l2 subdevice.\n> >>\n> >> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> >> ---\n> >>  test/v4l2_subdevice/list_formats.cpp | 85 ++++++++++++++++++++++++++++\n> >>  test/v4l2_subdevice/meson.build      |  1 +\n> >>  2 files changed, 86 insertions(+)\n> >>  create mode 100644 test/v4l2_subdevice/list_formats.cpp\n> >>\n> >> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp\n> >> new file mode 100644\n> >> index 000000000000..b902a198b17e\n> >> --- /dev/null\n> >> +++ b/test/v4l2_subdevice/list_formats.cpp\n> >> @@ -0,0 +1,85 @@\n> >> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> >> +/*\n> >> + * Copyright (C) 2019, Google Inc.\n> >> + *\n> >> + * libcamera V4L2 Subdevice format handling test\n> >> + */\n> >> +\n> >> +#include <iostream>\n> >> +#include <vector>\n> >> +\n> >> +#include \"geometry.h\"\n> >> +#include \"v4l2_subdevice.h\"\n> >> +#include \"v4l2_subdevice_test.h\"\n> >> +\n> >> +using namespace std;\n> >> +using namespace libcamera;\n> >> +\n> >> +/* List image formats on the \"Scaler\" subdevice of vimc media device.  */\n> >> +\n> >> +class ListFormatsTest : public V4L2SubdeviceTest\n> >> +{\n> >> +protected:\n> >> +\tint run() override;\n> >> +\n> >> +private:\n> >> +\tvoid printFormats(unsigned int pad, unsigned code,\n> >> +\t\t\t  std::vector<SizeRange> &formats);\n> >> +};\n> >> +\n> >> +void ListFormatsTest::printFormats(unsigned int pad,\n> >> +\t\t\t\t   unsigned int code,\n> >> +\t\t\t\t   std::vector<SizeRange> &sizes)\n> >> +{\n> >> +\tcout << \"Enumerate formats on pad \" << pad << endl;\n> >> +\tfor (SizeRange &size : sizes) {\n> >> +\t\tcout << \"\tMbus code: 0x\" << hex << code << endl;\n> >\n> > I'd write \"media bus code\" in full, or if you want to abbreviate, \"mbus\n> > code\".\n> >\n> > Should you ensure that at least 4 characters get printed ?\n> \n> Sorry, didn't get this..\n\nI meant the equivalent of the 0x%04x printf specifier.\n\n> >> +\t\tcout << \"\tmin Width: \" << dec << size.minWidth << endl;\n> >> +\t\tcout << \"\tmin Height: \" << dec << size.minHeight << endl;\n> >> +\t\tcout << \"\tmax Width: \" << dec << size.maxWidth << endl;\n> >> +\t\tcout << \"\tmax Height: \" << dec << size.maxHeight << endl;\n> >\n> > s/Width/width/ and s/Height/height/ ?\n> >\n> >> +\t}\n> >> +}\n> >> +\n> >> +int ListFormatsTest::run()\n> >> +{\n> >> +\t/* List all formats available on existing \"Scaler\" pads. */\n> >> +\tstd::map<unsigned int, std::vector<SizeRange>> formats;\n> >> +\n> >> +\tformats = scaler_->formats(0);\n> >> +\tif (formats.size() == 0) {\n> >> +\t\tcerr << \"Failed to list formats on pad 0 of subdevice \"\n> >> +\t\t     << scaler_->deviceName() << endl;\n> >> +\t\treturn TestFail;\n> >> +\t}\n> >> +\tauto it = formats.begin();\n> >> +\twhile (it != formats.end()) {\n> >> +\t\tprintFormats(0, it->first, it->second);\n> >> +\t\t++it;\n> >> +\t}\n> >\n> > How about\n> >\n> > \tfor (auto it = formats.begin(); it != formats.end(); ++it)\n> > \t\tprintFormats(0, it->first, it->second);\n> >\n> >> +\n> >> +\tformats = scaler_->formats(1);\n> >> +\tif (formats.size() == 0) {\n> >> +\t\tcerr << \"Failed to list formats on pad 1 of subdevice \"\n> >> +\t\t     << scaler_->deviceName() << endl;\n> >> +\t\treturn TestFail;\n> >> +\t}\n> >> +\tit = formats.begin();\n> >> +\twhile (it != formats.end()) {\n> >> +\t\tprintFormats(1, it->first, it->second);\n> >> +\t\t++it;\n> >> +\t}\n> >\n> > Same here.\n> >\n> >> +\n> >> +\t/* List format on a non-existing pad, format vector shall be empty. */\n> >> +\tformats = scaler_->formats(2);\n> >> +\tif (formats.size() != 0) {\n> >\n> > Maybe\n> >\n> > \tif (!formats.empty()) {\n> >\n> \n> Ok, I'll update this.\n> \n> >> +\t\tcerr << \"Listing formats on non-existing pad 2 of subdevice \"\n> >> +\t\t     << scaler_->deviceName()\n> >> +\t\t     << \" should return an empty format list\" << endl;\n> >> +\t\treturn TestFail;\n> >> +\t}\n> >> +\n> >> +\treturn TestPass;\n> >> +}\n> >> +\n> >> +TEST_REGISTER(ListFormatsTest);\n> >> diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\n> >> index f45dca0d23d7..80cfbbbf9413 100644\n> >> --- a/test/v4l2_subdevice/meson.build\n> >> +++ b/test/v4l2_subdevice/meson.build\n> >> @@ -1,4 +1,5 @@\n> >>  v4l2_subdevice_tests = [\n> >> +  [ 'list_formats',             'list_formats.cpp'],\n> >>    [ 'test_formats',             'test_formats.cpp'],\n> >>  ]\n> >>","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["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 60AF4610B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Mar 2019 11:06:25 +0100 (CET)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1FD8249;\n\tFri,  1 Mar 2019 11:06:24 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1551434784;\n\tbh=C2R8d9TV+N46Suszsr1BIuYL9HTfjni5P/xEToY8YWA=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=gc4bBu0C3aDZPiyhnltHFQNjglwtexWft8ur6pLpWMQusj5rzG+3rlekU92Mk//0P\n\tQcOcbYeUJtS/NWIadssyTg8aswvP7m1z3zkQWTd1IxbmyRPbLkz5DwFKBolL9yLDA3\n\tUbBKprqjqxb2uPE+KIaUBynJYfNKiClm/CQAZu2M=","Date":"Fri, 1 Mar 2019 12:06:18 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190301100618.GA26239@pendragon.ideasonboard.com>","References":"<20190228200151.2948-1-jacopo@jmondi.org>\n\t<20190228200151.2948-9-jacopo@jmondi.org>\n\t<20190228221635.GP7811@pendragon.ideasonboard.com>\n\t<20190301092703.od4l2y63okqhvhqo@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20190301092703.od4l2y63okqhvhqo@uno.localdomain>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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, 01 Mar 2019 10:06:25 -0000"}},{"id":987,"web_url":"https://patchwork.libcamera.org/comment/987/","msgid":"<20190301101943.xiuuwhkoiunufk4z@uno.localdomain>","date":"2019-03-01T10:19:43","subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Fri, Mar 01, 2019 at 12:06:18PM +0200, Laurent Pinchart wrote:\n> Hi Jacopo,\n>\n> On Fri, Mar 01, 2019 at 10:27:03AM +0100, Jacopo Mondi wrote:\n> > On Fri, Mar 01, 2019 at 12:16:57AM +0200, Laurent Pinchart wrote:\n> > > On Thu, Feb 28, 2019 at 09:01:50PM +0100, Jacopo Mondi wrote:\n> > >> Add test to list formats on a v4l2 subdevice.\n> > >>\n> > >> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > >> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > >> ---\n> > >>  test/v4l2_subdevice/list_formats.cpp | 85 ++++++++++++++++++++++++++++\n> > >>  test/v4l2_subdevice/meson.build      |  1 +\n> > >>  2 files changed, 86 insertions(+)\n> > >>  create mode 100644 test/v4l2_subdevice/list_formats.cpp\n> > >>\n> > >> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp\n> > >> new file mode 100644\n> > >> index 000000000000..b902a198b17e\n> > >> --- /dev/null\n> > >> +++ b/test/v4l2_subdevice/list_formats.cpp\n> > >> @@ -0,0 +1,85 @@\n> > >> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > >> +/*\n> > >> + * Copyright (C) 2019, Google Inc.\n> > >> + *\n> > >> + * libcamera V4L2 Subdevice format handling test\n> > >> + */\n> > >> +\n> > >> +#include <iostream>\n> > >> +#include <vector>\n> > >> +\n> > >> +#include \"geometry.h\"\n> > >> +#include \"v4l2_subdevice.h\"\n> > >> +#include \"v4l2_subdevice_test.h\"\n> > >> +\n> > >> +using namespace std;\n> > >> +using namespace libcamera;\n> > >> +\n> > >> +/* List image formats on the \"Scaler\" subdevice of vimc media device.  */\n> > >> +\n> > >> +class ListFormatsTest : public V4L2SubdeviceTest\n> > >> +{\n> > >> +protected:\n> > >> +\tint run() override;\n> > >> +\n> > >> +private:\n> > >> +\tvoid printFormats(unsigned int pad, unsigned code,\n> > >> +\t\t\t  std::vector<SizeRange> &formats);\n> > >> +};\n> > >> +\n> > >> +void ListFormatsTest::printFormats(unsigned int pad,\n> > >> +\t\t\t\t   unsigned int code,\n> > >> +\t\t\t\t   std::vector<SizeRange> &sizes)\n> > >> +{\n> > >> +\tcout << \"Enumerate formats on pad \" << pad << endl;\n> > >> +\tfor (SizeRange &size : sizes) {\n> > >> +\t\tcout << \"\tMbus code: 0x\" << hex << code << endl;\n> > >\n> > > I'd write \"media bus code\" in full, or if you want to abbreviate, \"mbus\n> > > code\".\n> > >\n> > > Should you ensure that at least 4 characters get printed ?\n> >\n> > Sorry, didn't get this..\n>\n> I meant the equivalent of the 0x%04x printf specifier.\n\nI guess that would be a nasty\n\ncout << \"\tMbus code: 0x\" << setfill('0') << setw(4) << hex << code << endl;\n\nI hate streams, really.\n\nI'll change this.\n\nPermission to push this one as well, once I've updated this?\n\nThanks\n  j\n\n>\n> > >> +\t\tcout << \"\tmin Width: \" << dec << size.minWidth << endl;\n> > >> +\t\tcout << \"\tmin Height: \" << dec << size.minHeight << endl;\n> > >> +\t\tcout << \"\tmax Width: \" << dec << size.maxWidth << endl;\n> > >> +\t\tcout << \"\tmax Height: \" << dec << size.maxHeight << endl;\n> > >\n> > > s/Width/width/ and s/Height/height/ ?\n> > >\n> > >> +\t}\n> > >> +}\n> > >> +\n> > >> +int ListFormatsTest::run()\n> > >> +{\n> > >> +\t/* List all formats available on existing \"Scaler\" pads. */\n> > >> +\tstd::map<unsigned int, std::vector<SizeRange>> formats;\n> > >> +\n> > >> +\tformats = scaler_->formats(0);\n> > >> +\tif (formats.size() == 0) {\n> > >> +\t\tcerr << \"Failed to list formats on pad 0 of subdevice \"\n> > >> +\t\t     << scaler_->deviceName() << endl;\n> > >> +\t\treturn TestFail;\n> > >> +\t}\n> > >> +\tauto it = formats.begin();\n> > >> +\twhile (it != formats.end()) {\n> > >> +\t\tprintFormats(0, it->first, it->second);\n> > >> +\t\t++it;\n> > >> +\t}\n> > >\n> > > How about\n> > >\n> > > \tfor (auto it = formats.begin(); it != formats.end(); ++it)\n> > > \t\tprintFormats(0, it->first, it->second);\n> > >\n> > >> +\n> > >> +\tformats = scaler_->formats(1);\n> > >> +\tif (formats.size() == 0) {\n> > >> +\t\tcerr << \"Failed to list formats on pad 1 of subdevice \"\n> > >> +\t\t     << scaler_->deviceName() << endl;\n> > >> +\t\treturn TestFail;\n> > >> +\t}\n> > >> +\tit = formats.begin();\n> > >> +\twhile (it != formats.end()) {\n> > >> +\t\tprintFormats(1, it->first, it->second);\n> > >> +\t\t++it;\n> > >> +\t}\n> > >\n> > > Same here.\n> > >\n> > >> +\n> > >> +\t/* List format on a non-existing pad, format vector shall be empty. */\n> > >> +\tformats = scaler_->formats(2);\n> > >> +\tif (formats.size() != 0) {\n> > >\n> > > Maybe\n> > >\n> > > \tif (!formats.empty()) {\n> > >\n> >\n> > Ok, I'll update this.\n> >\n> > >> +\t\tcerr << \"Listing formats on non-existing pad 2 of subdevice \"\n> > >> +\t\t     << scaler_->deviceName()\n> > >> +\t\t     << \" should return an empty format list\" << endl;\n> > >> +\t\treturn TestFail;\n> > >> +\t}\n> > >> +\n> > >> +\treturn TestPass;\n> > >> +}\n> > >> +\n> > >> +TEST_REGISTER(ListFormatsTest);\n> > >> diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\n> > >> index f45dca0d23d7..80cfbbbf9413 100644\n> > >> --- a/test/v4l2_subdevice/meson.build\n> > >> +++ b/test/v4l2_subdevice/meson.build\n> > >> @@ -1,4 +1,5 @@\n> > >>  v4l2_subdevice_tests = [\n> > >> +  [ 'list_formats',             'list_formats.cpp'],\n> > >>    [ 'test_formats',             'test_formats.cpp'],\n> > >>  ]\n> > >>\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","headers":{"Return-Path":"<jacopo@jmondi.org>","Received":["from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A77EC610B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Mar 2019 11:19:13 +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 relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 3A4B21C0008;\n\tFri,  1 Mar 2019 10:19:13 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Fri, 1 Mar 2019 11:19:43 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190301101943.xiuuwhkoiunufk4z@uno.localdomain>","References":"<20190228200151.2948-1-jacopo@jmondi.org>\n\t<20190228200151.2948-9-jacopo@jmondi.org>\n\t<20190228221635.GP7811@pendragon.ideasonboard.com>\n\t<20190301092703.od4l2y63okqhvhqo@uno.localdomain>\n\t<20190301100618.GA26239@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"d6l4rr7a4tonhamc\"","Content-Disposition":"inline","In-Reply-To":"<20190301100618.GA26239@pendragon.ideasonboard.com>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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, 01 Mar 2019 10:19:13 -0000"}},{"id":988,"web_url":"https://patchwork.libcamera.org/comment/988/","msgid":"<20190301104020.GC26239@pendragon.ideasonboard.com>","date":"2019-03-01T10:40:20","subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nOn Fri, Mar 01, 2019 at 11:19:43AM +0100, Jacopo Mondi wrote:\n> On Fri, Mar 01, 2019 at 12:06:18PM +0200, Laurent Pinchart wrote:\n> > On Fri, Mar 01, 2019 at 10:27:03AM +0100, Jacopo Mondi wrote:\n> > > On Fri, Mar 01, 2019 at 12:16:57AM +0200, Laurent Pinchart wrote:\n> > > > On Thu, Feb 28, 2019 at 09:01:50PM +0100, Jacopo Mondi wrote:\n> > > >> Add test to list formats on a v4l2 subdevice.\n> > > >>\n> > > >> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > >> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > >> ---\n> > > >>  test/v4l2_subdevice/list_formats.cpp | 85 ++++++++++++++++++++++++++++\n> > > >>  test/v4l2_subdevice/meson.build      |  1 +\n> > > >>  2 files changed, 86 insertions(+)\n> > > >>  create mode 100644 test/v4l2_subdevice/list_formats.cpp\n> > > >>\n> > > >> diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp\n> > > >> new file mode 100644\n> > > >> index 000000000000..b902a198b17e\n> > > >> --- /dev/null\n> > > >> +++ b/test/v4l2_subdevice/list_formats.cpp\n> > > >> @@ -0,0 +1,85 @@\n> > > >> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> > > >> +/*\n> > > >> + * Copyright (C) 2019, Google Inc.\n> > > >> + *\n> > > >> + * libcamera V4L2 Subdevice format handling test\n> > > >> + */\n> > > >> +\n> > > >> +#include <iostream>\n> > > >> +#include <vector>\n> > > >> +\n> > > >> +#include \"geometry.h\"\n> > > >> +#include \"v4l2_subdevice.h\"\n> > > >> +#include \"v4l2_subdevice_test.h\"\n> > > >> +\n> > > >> +using namespace std;\n> > > >> +using namespace libcamera;\n> > > >> +\n> > > >> +/* List image formats on the \"Scaler\" subdevice of vimc media device.  */\n> > > >> +\n> > > >> +class ListFormatsTest : public V4L2SubdeviceTest\n> > > >> +{\n> > > >> +protected:\n> > > >> +\tint run() override;\n> > > >> +\n> > > >> +private:\n> > > >> +\tvoid printFormats(unsigned int pad, unsigned code,\n> > > >> +\t\t\t  std::vector<SizeRange> &formats);\n> > > >> +};\n> > > >> +\n> > > >> +void ListFormatsTest::printFormats(unsigned int pad,\n> > > >> +\t\t\t\t   unsigned int code,\n> > > >> +\t\t\t\t   std::vector<SizeRange> &sizes)\n> > > >> +{\n> > > >> +\tcout << \"Enumerate formats on pad \" << pad << endl;\n> > > >> +\tfor (SizeRange &size : sizes) {\n> > > >> +\t\tcout << \"\tMbus code: 0x\" << hex << code << endl;\n> > > >\n> > > > I'd write \"media bus code\" in full, or if you want to abbreviate, \"mbus\n> > > > code\".\n> > > >\n> > > > Should you ensure that at least 4 characters get printed ?\n> > >\n> > > Sorry, didn't get this..\n> >\n> > I meant the equivalent of the 0x%04x printf specifier.\n> \n> I guess that would be a nasty\n> \n> cout << \"\tMbus code: 0x\" << setfill('0') << setw(4) << hex << code << endl;\n> \n> I hate streams, really.\n\nCan't disagree with you on that one :-(\n\n> I'll change this.\n> \n> Permission to push this one as well, once I've updated this?\n\nPlease do, with my\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> > > >> +\t\tcout << \"\tmin Width: \" << dec << size.minWidth << endl;\n> > > >> +\t\tcout << \"\tmin Height: \" << dec << size.minHeight << endl;\n> > > >> +\t\tcout << \"\tmax Width: \" << dec << size.maxWidth << endl;\n> > > >> +\t\tcout << \"\tmax Height: \" << dec << size.maxHeight << endl;\n> > > >\n> > > > s/Width/width/ and s/Height/height/ ?\n> > > >\n> > > >> +\t}\n> > > >> +}\n> > > >> +\n> > > >> +int ListFormatsTest::run()\n> > > >> +{\n> > > >> +\t/* List all formats available on existing \"Scaler\" pads. */\n> > > >> +\tstd::map<unsigned int, std::vector<SizeRange>> formats;\n> > > >> +\n> > > >> +\tformats = scaler_->formats(0);\n> > > >> +\tif (formats.size() == 0) {\n> > > >> +\t\tcerr << \"Failed to list formats on pad 0 of subdevice \"\n> > > >> +\t\t     << scaler_->deviceName() << endl;\n> > > >> +\t\treturn TestFail;\n> > > >> +\t}\n> > > >> +\tauto it = formats.begin();\n> > > >> +\twhile (it != formats.end()) {\n> > > >> +\t\tprintFormats(0, it->first, it->second);\n> > > >> +\t\t++it;\n> > > >> +\t}\n> > > >\n> > > > How about\n> > > >\n> > > > \tfor (auto it = formats.begin(); it != formats.end(); ++it)\n> > > > \t\tprintFormats(0, it->first, it->second);\n> > > >\n> > > >> +\n> > > >> +\tformats = scaler_->formats(1);\n> > > >> +\tif (formats.size() == 0) {\n> > > >> +\t\tcerr << \"Failed to list formats on pad 1 of subdevice \"\n> > > >> +\t\t     << scaler_->deviceName() << endl;\n> > > >> +\t\treturn TestFail;\n> > > >> +\t}\n> > > >> +\tit = formats.begin();\n> > > >> +\twhile (it != formats.end()) {\n> > > >> +\t\tprintFormats(1, it->first, it->second);\n> > > >> +\t\t++it;\n> > > >> +\t}\n> > > >\n> > > > Same here.\n> > > >\n> > > >> +\n> > > >> +\t/* List format on a non-existing pad, format vector shall be empty. */\n> > > >> +\tformats = scaler_->formats(2);\n> > > >> +\tif (formats.size() != 0) {\n> > > >\n> > > > Maybe\n> > > >\n> > > > \tif (!formats.empty()) {\n> > > >\n> > >\n> > > Ok, I'll update this.\n> > >\n> > > >> +\t\tcerr << \"Listing formats on non-existing pad 2 of subdevice \"\n> > > >> +\t\t     << scaler_->deviceName()\n> > > >> +\t\t     << \" should return an empty format list\" << endl;\n> > > >> +\t\treturn TestFail;\n> > > >> +\t}\n> > > >> +\n> > > >> +\treturn TestPass;\n> > > >> +}\n> > > >> +\n> > > >> +TEST_REGISTER(ListFormatsTest);\n> > > >> diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\n> > > >> index f45dca0d23d7..80cfbbbf9413 100644\n> > > >> --- a/test/v4l2_subdevice/meson.build\n> > > >> +++ b/test/v4l2_subdevice/meson.build\n> > > >> @@ -1,4 +1,5 @@\n> > > >>  v4l2_subdevice_tests = [\n> > > >> +  [ 'list_formats',             'list_formats.cpp'],\n> > > >>    [ 'test_formats',             'test_formats.cpp'],\n> > > >>  ]\n> > > >>","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 22E28610B2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Mar 2019 11:40:27 +0100 (CET)","from pendragon.ideasonboard.com\n\t(dfj612yhrgyx302h3jwwy-3.rev.dnainternet.fi\n\t[IPv6:2001:14ba:21f5:5b00:ce28:277f:58d7:3ca4])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 835EE49;\n\tFri,  1 Mar 2019 11:40:26 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1551436826;\n\tbh=L3P4G9gHxMFMzprSveqWEpHWectf29Vsj8+7UKV+Lqg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=VICZzk6eZ4sawVE8zByjxGs4pSV4WWL1bJyp6asooWXetJBDJEE5eN83pTi1OGq6B\n\tDd7gUUj2EeAr0THs5UufWKolUb1V6MjibGcPPsLq2e5h/BF66iJLXTRN7bhyEAEVKS\n\t/jrOPpdevjiJyErrYGGvyh8j2Z3TGGFK8k13ZC1I=","Date":"Fri, 1 Mar 2019 12:40:20 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190301104020.GC26239@pendragon.ideasonboard.com>","References":"<20190228200151.2948-1-jacopo@jmondi.org>\n\t<20190228200151.2948-9-jacopo@jmondi.org>\n\t<20190228221635.GP7811@pendragon.ideasonboard.com>\n\t<20190301092703.od4l2y63okqhvhqo@uno.localdomain>\n\t<20190301100618.GA26239@pendragon.ideasonboard.com>\n\t<20190301101943.xiuuwhkoiunufk4z@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20190301101943.xiuuwhkoiunufk4z@uno.localdomain>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v5 8/9] test: v4l2_subdevice: Add\n\tListFormat test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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, 01 Mar 2019 10:40:27 -0000"}}]