[{"id":25392,"web_url":"https://patchwork.libcamera.org/comment/25392/","msgid":"<20221012072345.7w64fzeu7nlhbtpn@uno.localdomain>","date":"2022-10-12T07:23:45","subject":"Re: [libcamera-devel] [PATCH v5 3/9] libcamera:\n\tipa_data_serializer: Add serializer for Flags","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul\n\nOn Tue, Oct 11, 2022 at 07:58:53PM +0900, Paul Elder via libcamera-devel wrote:\n> Implement an IPADataSerializer for Flags.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> ---\n> No change in v5\n>\n> No change in v4\n>\n> No change in v3\n>\n> Changes in v2:\n> - use Flags's Type cast to avoid friend class\n> ---\n>  .../libcamera/internal/ipa_data_serializer.h  | 46 +++++++++++++++++++\n>  1 file changed, 46 insertions(+)\n>\n> diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h\n> index 30bdaebc..981d2f5c 100644\n> --- a/include/libcamera/internal/ipa_data_serializer.h\n> +++ b/include/libcamera/internal/ipa_data_serializer.h\n> @@ -14,6 +14,7 @@\n>  #include <type_traits>\n>  #include <vector>\n>\n> +#include <libcamera/base/flags.h>\n>  #include <libcamera/base/log.h>\n>\n>  #include <libcamera/control_ids.h>\n> @@ -301,6 +302,51 @@ public:\n>  \t}\n>  };\n>\n> +/* Serialization format for Flags is same as for PODs */\n> +template<typename E>\n> +class IPADataSerializer<Flags<E>>\n> +{\n> +public:\n> +\tstatic std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>\n> +\tserialize(const Flags<E> &data, [[maybe_unused]] ControlSerializer *cs = nullptr)\n> +\t{\n> +\t\tstd::vector<uint8_t> dataVec;\n> +\t\tdataVec.reserve(sizeof(Flags<E>));\n> +\t\tappendPOD<uint32_t>(dataVec, static_cast<typename Flags<E>::Type>(data));\n> +\n> +\t\treturn { dataVec, {} };\n> +\t}\n> +\n> +\tstatic Flags<E> deserialize(std::vector<uint8_t> &data,\n> +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> +\t{\n> +\t\treturn deserialize(data.cbegin(), data.end());\n\nnit: deserialize() wants a \"std::vector<uint8_t>::const_iterator dataEnd\".\nShould you use cend()?\n\nThis apart\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> +\t}\n> +\n> +\tstatic Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n> +\t\t\t\t    std::vector<uint8_t>::const_iterator dataEnd,\n> +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> +\t{\n> +\t\treturn Flags<E>{ static_cast<E>(readPOD<uint32_t>(dataBegin, 0, dataEnd)) };\n> +\t}\n> +\n> +\tstatic Flags<E> deserialize(std::vector<uint8_t> &data,\n> +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD> &fds,\n> +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> +\t{\n> +\t\treturn deserialize(data.cbegin(), data.end());\n> +\t}\n> +\n> +\tstatic Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n> +\t\t\t\t    std::vector<uint8_t>::const_iterator dataEnd,\n> +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsBegin,\n> +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsEnd,\n> +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> +\t{\n> +\t\treturn deserialize(dataBegin, dataEnd);\n> +\t}\n> +};\n> +\n>  #endif /* __DOXYGEN__ */\n>\n>  } /* namespace libcamera */\n> --\n> 2.30.2\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 10ED4C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 12 Oct 2022 07:23:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6843B62D88;\n\tWed, 12 Oct 2022 09:23:48 +0200 (CEST)","from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::222])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0EDC3603D4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 12 Oct 2022 09:23:47 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 9A4CE40008;\n\tWed, 12 Oct 2022 07:23:46 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665559428;\n\tbh=IclubilvV4gAXImQN3Ld3K8nxDmAWvMzfHGV9g1+rPg=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=TV7SyskVqZm9CaEWVlClWe6Ya3PUtx76nc1pJAzBoeZZ7BGafS94o3pu3SIi63Jzq\n\tielftuqISUsYJ0Y+EnIYgAipLUFLU+V39k4vTe47FLh1j7F0vz2dPIy3FOMWbRJjEi\n\tU4nT0HdKwcp06/h8dR40kSO1u79hkhomJyJ4NzYwhNbjLOf7KQXqY0ZXyAT8WcYpbZ\n\tGzwHX9h1C6FleEwSV2n1+5Z2rZRuxrxbRG85ydS7c/ObTfzYx3f5laJ/qBzSq34SdJ\n\tvPL8zBMhbVBjnB4+H0EE0/ODXQJBVynwwGbsOKcGYxLzDrBAa254ssYjiDSEyyIKvm\n\twIjCM4DKwCAiQ==","Date":"Wed, 12 Oct 2022 09:23:45 +0200","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20221012072345.7w64fzeu7nlhbtpn@uno.localdomain>","References":"<20221011105859.457567-1-paul.elder@ideasonboard.com>\n\t<20221011105859.457567-4-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20221011105859.457567-4-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 3/9] libcamera:\n\tipa_data_serializer: Add serializer for Flags","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>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25443,"web_url":"https://patchwork.libcamera.org/comment/25443/","msgid":"<20221018035358.GA3814735@pyrite.rasen.tech>","date":"2022-10-18T03:53:58","subject":"Re: [libcamera-devel] [PATCH v5 3/9] libcamera:\n\tipa_data_serializer: Add serializer for Flags","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"Hi Jacopo,\n\nOn Wed, Oct 12, 2022 at 09:23:45AM +0200, Jacopo Mondi wrote:\n> Hi Paul\n> \n> On Tue, Oct 11, 2022 at 07:58:53PM +0900, Paul Elder via libcamera-devel wrote:\n> > Implement an IPADataSerializer for Flags.\n> >\n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >\n> > ---\n> > No change in v5\n> >\n> > No change in v4\n> >\n> > No change in v3\n> >\n> > Changes in v2:\n> > - use Flags's Type cast to avoid friend class\n> > ---\n> >  .../libcamera/internal/ipa_data_serializer.h  | 46 +++++++++++++++++++\n> >  1 file changed, 46 insertions(+)\n> >\n> > diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h\n> > index 30bdaebc..981d2f5c 100644\n> > --- a/include/libcamera/internal/ipa_data_serializer.h\n> > +++ b/include/libcamera/internal/ipa_data_serializer.h\n> > @@ -14,6 +14,7 @@\n> >  #include <type_traits>\n> >  #include <vector>\n> >\n> > +#include <libcamera/base/flags.h>\n> >  #include <libcamera/base/log.h>\n> >\n> >  #include <libcamera/control_ids.h>\n> > @@ -301,6 +302,51 @@ public:\n> >  \t}\n> >  };\n> >\n> > +/* Serialization format for Flags is same as for PODs */\n> > +template<typename E>\n> > +class IPADataSerializer<Flags<E>>\n> > +{\n> > +public:\n> > +\tstatic std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>\n> > +\tserialize(const Flags<E> &data, [[maybe_unused]] ControlSerializer *cs = nullptr)\n> > +\t{\n> > +\t\tstd::vector<uint8_t> dataVec;\n> > +\t\tdataVec.reserve(sizeof(Flags<E>));\n> > +\t\tappendPOD<uint32_t>(dataVec, static_cast<typename Flags<E>::Type>(data));\n> > +\n> > +\t\treturn { dataVec, {} };\n> > +\t}\n> > +\n> > +\tstatic Flags<E> deserialize(std::vector<uint8_t> &data,\n> > +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> > +\t{\n> > +\t\treturn deserialize(data.cbegin(), data.end());\n> \n> nit: deserialize() wants a \"std::vector<uint8_t>::const_iterator dataEnd\".\n> Should you use cend()?\n\nYeah, I should :S\n\n\nThanks,\n\nPaul\n\n> \n> This apart\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> > +\t}\n> > +\n> > +\tstatic Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n> > +\t\t\t\t    std::vector<uint8_t>::const_iterator dataEnd,\n> > +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> > +\t{\n> > +\t\treturn Flags<E>{ static_cast<E>(readPOD<uint32_t>(dataBegin, 0, dataEnd)) };\n> > +\t}\n> > +\n> > +\tstatic Flags<E> deserialize(std::vector<uint8_t> &data,\n> > +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD> &fds,\n> > +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> > +\t{\n> > +\t\treturn deserialize(data.cbegin(), data.end());\n> > +\t}\n> > +\n> > +\tstatic Flags<E> deserialize(std::vector<uint8_t>::const_iterator dataBegin,\n> > +\t\t\t\t    std::vector<uint8_t>::const_iterator dataEnd,\n> > +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsBegin,\n> > +\t\t\t\t    [[maybe_unused]] std::vector<SharedFD>::const_iterator fdsEnd,\n> > +\t\t\t\t    [[maybe_unused]] ControlSerializer *cs = nullptr)\n> > +\t{\n> > +\t\treturn deserialize(dataBegin, dataEnd);\n> > +\t}\n> > +};\n> > +\n> >  #endif /* __DOXYGEN__ */\n> >\n> >  } /* namespace libcamera */\n> > --\n> > 2.30.2\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 305CEBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 18 Oct 2022 03:54:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7A32B62E0A;\n\tTue, 18 Oct 2022 05:54:08 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AF98861F55\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 18 Oct 2022 05:54:06 +0200 (CEST)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1F4998CC;\n\tTue, 18 Oct 2022 05:54:04 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666065248;\n\tbh=G/CI6mCSMwCmBPt1RYvXua2ix1rjctPFV0OEGew94G0=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=KZfdR+sa1RyHEJtjDcHqd3OonmB9RjAH12ZvKJn37J48/SRPZR6AolfbX+Pwjw0Ee\n\tA4nCTC/A8qlSvN1Xb4L8s1hFrFzKlbvFkWe7BE/JSZK+KqA5hxPrjn+O8x01G3XRQb\n\tDQuPtgy4OYgssYXqsrybPzRwfc0PWtm4bK6TdwUjwgXkTLhs6ctyvs4H9Cj9hcIzV3\n\tdX6qxUUkbwoYGaWUaVt/vrQi2cYy2h7Olmi119sgYMLvhnF3DayhTOKpJ3TN23J/FH\n\tEQ3VGDO9btMsjgF822G0Tp51JhnLTQ5HmFonsmrI6KSeLQ7hH++TOwtRXsTB1P+cah\n\thtzfYGtNPpZ9A==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666065246;\n\tbh=G/CI6mCSMwCmBPt1RYvXua2ix1rjctPFV0OEGew94G0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=SiSB+NEHI8P1YZJtnPgTujY/GtsvJiuplB6td/QSGbATpUzQu4vfN84d8do9uqz6O\n\tLJ3DN72xcnRWQXsVOdtpEJwYZa+fZAsDgDE4HsZhXXG3rXUGtppaUaWzR+H+D2wuSK\n\tkpo13EWZ64Lp+4qBNpKcbCf7Aawm94mr7Qjg/2R4="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"SiSB+NEH\"; dkim-atps=neutral","Date":"Tue, 18 Oct 2022 12:53:58 +0900","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<20221018035358.GA3814735@pyrite.rasen.tech>","References":"<20221011105859.457567-1-paul.elder@ideasonboard.com>\n\t<20221011105859.457567-4-paul.elder@ideasonboard.com>\n\t<20221012072345.7w64fzeu7nlhbtpn@uno.localdomain>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20221012072345.7w64fzeu7nlhbtpn@uno.localdomain>","Subject":"Re: [libcamera-devel] [PATCH v5 3/9] libcamera:\n\tipa_data_serializer: Add serializer for Flags","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>","From":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]