[{"id":1575,"web_url":"https://patchwork.libcamera.org/comment/1575/","msgid":"<20190511031907.GH12768@pendragon.ideasonboard.com>","date":"2019-05-11T03:19:07","subject":"Re: [libcamera-devel] [PATCH v2 03/11] libcamera: media_device:\n\tOnly read device information in populate()","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Niklas,\n\nThank you for the patch.\n\nOn Wed, May 08, 2019 at 05:18:23PM +0200, Niklas Söderlund wrote:\n> There is no reason to reread the MEDIA_IOC_DEVICE_INFO information every\n> time the media device is opened. Move it populate() where it will be\n> read once together the other information about the media device.\n> \n> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  src/libcamera/media_device.cpp | 51 +++++++++++++++-------------------\n>  1 file changed, 22 insertions(+), 29 deletions(-)\n> \n> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n> index 4b3b8f1fa3e6aaad..416a0d0c207ea72d 100644\n> --- a/src/libcamera/media_device.cpp\n> +++ b/src/libcamera/media_device.cpp\n> @@ -126,18 +126,11 @@ bool MediaDevice::acquire()\n>   */\n>  \n>  /**\n> - * \\brief Open a media device and retrieve device information\n> - *\n> - * Before populating the media graph or performing any operation that interact\n> - * with the device node associated with the media device, the device node must\n> - * be opened.\n> - *\n> - * This function also retrieves media device information from the device node,\n> - * which can be queried through driver().\n> - *\n> - * If the device is already open the function returns -EBUSY.\n> + * \\brief Open the media device\n>   *\n>   * \\return 0 on success or a negative error code otherwise\n> + * \\retval -EBUSY Media device already open\n> + * \\sa close()\n>   */\n>  int MediaDevice::open()\n>  {\n> @@ -156,20 +149,6 @@ int MediaDevice::open()\n>  \t}\n>  \tfd_ = ret;\n>  \n> -\tstruct media_device_info info = { };\n> -\tret = ioctl(fd_, MEDIA_IOC_DEVICE_INFO, &info);\n> -\tif (ret) {\n> -\t\tret = -errno;\n> -\t\tLOG(MediaDevice, Error)\n> -\t\t\t<< \"Failed to get media device info \"\n> -\t\t\t<< \": \" << strerror(-ret);\n> -\t\treturn ret;\n> -\t}\n> -\n> -\tdriver_ = info.driver;\n> -\tmodel_ = info.model;\n> -\tversion_ = info.media_version;\n> -\n>  \treturn 0;\n>  }\n>  \n> @@ -196,12 +175,13 @@ void MediaDevice::close()\n>  }\n>  \n>  /**\n> - * \\brief Populate the media graph with media objects\n> + * \\brief Populate the MediaDevice with device information and media objects\n>   *\n> - * This function enumerates all media objects in the media device graph and\n> - * creates their MediaObject representations. All entities, pads and links are\n> - * stored as MediaEntity, MediaPad and MediaLink respectively, with cross-\n> - * references between objects. Interfaces are not processed.\n> + * This function retrieves the media device information and enumerates all\n> + * media objects in the media device graph and creates their MediaObject\n> + * representations. All entities, pads and links are stored as MediaEntity,\n> + * MediaPad and MediaLink respectively, with cross-references between objects.\n> + * Interfaces are not processed.\n>   *\n>   * Entities are stored in a separate list in the MediaDevice to ease lookup,\n>   * while pads are accessible from the entity they belong to and links from the\n> @@ -225,6 +205,19 @@ int MediaDevice::populate()\n>  \tif (ret)\n>  \t\treturn ret;\n>  \n> +\tstruct media_device_info info = {};\n> +\tret = ioctl(fd_, MEDIA_IOC_DEVICE_INFO, &info);\n> +\tif (ret) {\n> +\t\tret = -errno;\n> +\t\tLOG(MediaDevice, Error)\n> +\t\t\t<< \"Failed to get media device info \" << strerror(-ret);\n> +\t\tgoto done;\n> +\t}\n> +\n> +\tdriver_ = info.driver;\n> +\tmodel_ = info.model;\n> +\tversion_ = info.media_version;\n> +\n>  \t/*\n>  \t * Keep calling G_TOPOLOGY until the version number stays stable.\n>  \t */\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":"<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 4AE7E60E4D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 11 May 2019 05:19:24 +0200 (CEST)","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 986792DF;\n\tSat, 11 May 2019 05:19:23 +0200 (CEST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1557544763;\n\tbh=Auv0wa5+W2Y2ZZtonS07Pk+TUHCctg6/0uhIQkd2pNU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Sfh1wlnSrUXTwilBBZ1AZwQuyRPJpBvdjHvMoUm2S74Djm4gJKUhgCJjNuXVpoM7s\n\t+nwIXfmtHKqtBL+QJmVZo8UammrZYuR/aqXU2sImcYqPBSuQam0rzo9V8+Jaqcqbrr\n\t1xAVpF8R3MGGvq1itDisvWdM1TAjnZ7ODaWG9qvE=","Date":"Sat, 11 May 2019 06:19:07 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Niklas =?utf-8?q?S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190511031907.GH12768@pendragon.ideasonboard.com>","References":"<20190508151831.12274-1-niklas.soderlund@ragnatech.se>\n\t<20190508151831.12274-4-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190508151831.12274-4-niklas.soderlund@ragnatech.se>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v2 03/11] libcamera: media_device:\n\tOnly read device information in populate()","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":"Sat, 11 May 2019 03:19:24 -0000"}}]