mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 18:35:07 +03:00
libcamera: media_device: Only read device information in populate()
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@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
5868d73e77
commit
ef30be09eb
1 changed files with 22 additions and 29 deletions
|
@ -126,18 +126,11 @@ bool MediaDevice::acquire()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Open a media device and retrieve device information
|
* \brief Open the media device
|
||||||
*
|
|
||||||
* Before populating the media graph or performing any operation that interact
|
|
||||||
* 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
|
* \return 0 on success or a negative error code otherwise
|
||||||
|
* \retval -EBUSY Media device already open
|
||||||
|
* \sa close()
|
||||||
*/
|
*/
|
||||||
int MediaDevice::open()
|
int MediaDevice::open()
|
||||||
{
|
{
|
||||||
|
@ -156,20 +149,6 @@ int MediaDevice::open()
|
||||||
}
|
}
|
||||||
fd_ = ret;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,12 +175,13 @@ void MediaDevice::close()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Populate the media graph with media objects
|
* \brief Populate the MediaDevice with device information and media objects
|
||||||
*
|
*
|
||||||
* This function enumerates all media objects in the media device graph and
|
* This function retrieves the media device information and enumerates all
|
||||||
* creates their MediaObject representations. All entities, pads and links are
|
* media objects in the media device graph and creates their MediaObject
|
||||||
* stored as MediaEntity, MediaPad and MediaLink respectively, with cross-
|
* representations. All entities, pads and links are stored as MediaEntity,
|
||||||
* references between objects. Interfaces are not processed.
|
* MediaPad and MediaLink respectively, with cross-references between objects.
|
||||||
|
* Interfaces are not processed.
|
||||||
*
|
*
|
||||||
* Entities are stored in a separate list in the MediaDevice to ease lookup,
|
* Entities are stored in a separate list in the MediaDevice to ease lookup,
|
||||||
* while pads are accessible from the entity they belong to and links from the
|
* while pads are accessible from the entity they belong to and links from the
|
||||||
|
@ -225,6 +205,19 @@ int MediaDevice::populate()
|
||||||
if (ret)
|
if (ret)
|
||||||
return 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 done;
|
||||||
|
}
|
||||||
|
|
||||||
|
driver_ = info.driver;
|
||||||
|
model_ = info.model;
|
||||||
|
version_ = info.media_version;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep calling G_TOPOLOGY until the version number stays stable.
|
* Keep calling G_TOPOLOGY until the version number stays stable.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue