[{"id":1889,"web_url":"https://patchwork.libcamera.org/comment/1889/","msgid":"<20190613152255.p3nwiawfyuyzh5wh@uno.localdomain>","date":"2019-06-13T15:22:55","subject":"Re: [libcamera-devel] [PATCH v2 06/16] libcamera: v4l2_subdevice:\n\tBreakout mbus code enumeration","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Niklas,\n\nOn Wed, Jun 12, 2019 at 02:43:49AM +0200, Niklas Söderlund wrote:\n> Simplify frame size enumeration by breaking out mbus code enumeration in\n> a helper, making the code easier to read while also preparing for\n> enhancing the frame size enumeration. There is no functional change.\n>\n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> ---\n>  src/libcamera/include/v4l2_subdevice.h |  1 +\n>  src/libcamera/v4l2_subdevice.cpp       | 59 ++++++++++++++------------\n>  2 files changed, 34 insertions(+), 26 deletions(-)\n>\n> diff --git a/src/libcamera/include/v4l2_subdevice.h b/src/libcamera/include/v4l2_subdevice.h\n> index 3e4e5107aebeee06..e714e2575022c04d 100644\n> --- a/src/libcamera/include/v4l2_subdevice.h\n> +++ b/src/libcamera/include/v4l2_subdevice.h\n> @@ -57,6 +57,7 @@ protected:\n>  \tstd::string logPrefix() const;\n>\n>  private:\n> +\tstd::vector<unsigned int> enumPadCodes(unsigned int pad);\n>  \tint enumPadSizes(unsigned int pad, unsigned int code,\n>  \t\t\t std::vector<SizeRange> *size);\n>\n> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp\n> index fceee33156e94212..99e202fa264af5a6 100644\n> --- a/src/libcamera/v4l2_subdevice.cpp\n> +++ b/src/libcamera/v4l2_subdevice.cpp\n> @@ -203,37 +203,15 @@ int V4L2Subdevice::setCompose(unsigned int pad, Rectangle *rect)\n>  FormatEnum V4L2Subdevice::formats(unsigned int pad)\n>  {\n>  \tFormatEnum formatMap = {};\n> -\tstruct v4l2_subdev_mbus_code_enum mbusEnum = {};\n> -\tint ret;\n>\n>  \tif (pad >= entity_->pads().size()) {\n>  \t\tLOG(V4L2Subdev, Error) << \"Invalid pad: \" << pad;\n> -\t\treturn formatMap;\n> +\t\treturn {};\n>  \t}\n>\n> -\tmbusEnum.pad = pad;\n> -\tmbusEnum.index = 0;\n> -\tmbusEnum.which = V4L2_SUBDEV_FORMAT_ACTIVE;\n> -\twhile (true) {\n> -\t\tret = ioctl(fd_, VIDIOC_SUBDEV_ENUM_MBUS_CODE, &mbusEnum);\n> -\t\tif (ret)\n> -\t\t\tbreak;\n> -\n> -\t\tret = enumPadSizes(pad, mbusEnum.code,\n> -\t\t\t\t   &formatMap[mbusEnum.code]);\n> -\t\tif (ret)\n> -\t\t\tbreak;\n> -\n> -\t\tmbusEnum.index++;\n> -\t}\n> -\n> -\tif (ret && (errno != EINVAL && errno != ENOTTY)) {\n> -\t\tret = -errno;\n> -\t\tLOG(V4L2Subdev, Error)\n> -\t\t\t<< \"Unable to enumerate formats on pad \" << pad\n> -\t\t\t<< \": \" << strerror(-ret);\n> -\t\tformatMap.clear();\n> -\t}\n> +\tfor (unsigned int code : enumPadCodes(pad))\n> +\t\tif (enumPadSizes(pad, code, &formatMap[code]))\n> +\t\t\treturn {};\n>\n>  \treturn formatMap;\n>  }\n> @@ -328,6 +306,35 @@ std::string V4L2Subdevice::logPrefix() const\n>  \treturn \"'\" + entity_->name() + \"'\";\n>  }\n>\n> +std::vector<unsigned int> V4L2Subdevice::enumPadCodes(unsigned int pad)\n> +{\n> +\tstd::vector<unsigned int> codes;\n> +\tint ret;\n> +\n> +\tfor (unsigned int index = 0; ; index++) {\n> +\t\tstruct v4l2_subdev_mbus_code_enum mbusEnum = {};\n> +\t\tmbusEnum.pad = pad;\n> +\t\tmbusEnum.index = index;\n> +\t\tmbusEnum.which = V4L2_SUBDEV_FORMAT_ACTIVE;\n> +\n> +\t\tret = ioctl(fd_, VIDIOC_SUBDEV_ENUM_MBUS_CODE, &mbusEnum);\n> +\t\tif (ret)\n> +\t\t\tbreak;\n> +\n> +\t\tcodes.push_back(mbusEnum.code);\n> +\t}\n> +\n> +\tif (ret && errno != EINVAL) {\n> +\t\tret = errno;\n> +\t\tLOG(V4L2Subdev, Error)\n> +\t\t\t<< \"Unable to enumerate formats on pad \" << pad\n> +\t\t\t<< \": \" << strerror(ret);\n> +\t\treturn {};\n> +\t}\n> +\n> +\treturn codes;\n> +}\n> +\n\nI welcome this patch!\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n\n>  int V4L2Subdevice::enumPadSizes(unsigned int pad,unsigned int code,\n>  \t\t\t\tstd::vector<SizeRange> *sizes)\n>  {\n> --\n> 2.21.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":"<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 3690061EC6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Jun 2019 17:21:43 +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 relay7-d.mail.gandi.net (Postfix) with ESMTPSA id BAC7B20004;\n\tThu, 13 Jun 2019 15:21:42 +0000 (UTC)"],"X-Originating-IP":"2.224.242.101","Date":"Thu, 13 Jun 2019 17:22:55 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190613152255.p3nwiawfyuyzh5wh@uno.localdomain>","References":"<20190612004359.15772-1-niklas.soderlund@ragnatech.se>\n\t<20190612004359.15772-7-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"multipart/signed; micalg=pgp-sha256;\n\tprotocol=\"application/pgp-signature\"; boundary=\"pavw3denwx5eicto\"","Content-Disposition":"inline","In-Reply-To":"<20190612004359.15772-7-niklas.soderlund@ragnatech.se>","User-Agent":"NeoMutt/20180716","Subject":"Re: [libcamera-devel] [PATCH v2 06/16] libcamera: v4l2_subdevice:\n\tBreakout mbus code enumeration","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, 13 Jun 2019 15:21:43 -0000"}}]