[libcamera-devel] [RFC 03/11] libcamera: media_device: Only read device information in populate()

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Apr 14 03:34:58 CEST 2019


There is no reason to reread the MEDIA_IOC_DEVICE_INFO information every
time the media device is opened. Move it populate() where it will be
read once together the other information about the media device.

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
 src/libcamera/media_device.cpp | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp
index ecb00a1d5abffe80..54706bb73a7591d5 100644
--- a/src/libcamera/media_device.cpp
+++ b/src/libcamera/media_device.cpp
@@ -131,9 +131,6 @@ bool MediaDevice::acquire()
  * with the device node associated with the media device, the device node must
  * be opened.
  *
- * This function also retrieves media device information from the device node,
- * which can be queried through driver().
- *
  * If the device is already open the function returns -EBUSY.
  *
  * \return 0 on success or a negative error code otherwise
@@ -155,20 +152,6 @@ int MediaDevice::open()
 	}
 	fd_ = ret;
 
-	struct media_device_info info = { };
-	ret = ioctl(fd_, MEDIA_IOC_DEVICE_INFO, &info);
-	if (ret) {
-		ret = -errno;
-		LOG(MediaDevice, Error)
-			<< "Failed to get media device info "
-			<< ": " << strerror(-ret);
-		return ret;
-	}
-
-	driver_ = info.driver;
-	model_ = info.model;
-	version_ = info.media_version;
-
 	return 0;
 }
 
@@ -224,6 +207,20 @@ int MediaDevice::populate()
 	if (ret)
 		return ret;
 
+	struct media_device_info info = {};
+	ret = ioctl(fd_, MEDIA_IOC_DEVICE_INFO, &info);
+	if (ret) {
+		ret = -errno;
+		LOG(MediaDevice, Error)
+			<< "Failed to get media device info "
+			<< ": " << strerror(-ret);
+		goto err_out;
+	}
+
+	driver_ = info.driver;
+	model_ = info.model;
+	version_ = info.media_version;
+
 	/*
 	 * Keep calling G_TOPOLOGY until the version number stays stable.
 	 */
-- 
2.21.0



More information about the libcamera-devel mailing list