[libcamera-devel] [PATCH 1/3] libcamera: media_device: Add DeviceInfo features
Jacopo Mondi
jacopo at jmondi.org
Wed Jan 2 11:15:54 CET 2019
Hi Laurent,
thanks for re-submitting these patches
On Wed, Jan 02, 2019 at 02:49:01AM +0200, Laurent Pinchart wrote:
> From: Jacopo Mondi <jacopo at jmondi.org>
>
> Add the features of the DeviceInfo class needed to replace it with
> MediaDevice.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/include/media_device.h | 5 +++
> src/libcamera/media_device.cpp | 52 ++++++++++++++++++++++++++--
> 2 files changed, 55 insertions(+), 2 deletions(-)
>
> diff --git a/src/libcamera/include/media_device.h b/src/libcamera/include/media_device.h
> index d787be391882..3fcdb4b4d5f8 100644
> --- a/src/libcamera/include/media_device.h
> +++ b/src/libcamera/include/media_device.h
> @@ -24,6 +24,10 @@ public:
> MediaDevice(const std::string &devnode);
> ~MediaDevice();
>
> + bool acquire();
> + void release() { acquired_ = false; }
> + bool busy() const { return acquired_; }
> +
> int open();
> void close();
>
> @@ -41,6 +45,7 @@ private:
> std::string devnode_;
> int fd_;
> bool valid_;
> + bool acquired_;
>
> std::map<unsigned int, MediaObject *> objects_;
> MediaObject *object(unsigned int id);
> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp
> index 1bd4f43a0c79..605e504be124 100644
> --- a/src/libcamera/media_device.cpp
> +++ b/src/libcamera/media_device.cpp
> @@ -52,7 +52,11 @@ namespace libcamera {
> * controller device node. It can be closed at any time with a call to close().
> * This will not invalidate the media graph and all cached media objects remain
> * valid and can be accessed normally. The device can then be later reopened if
> - * needed to perform other operations that interact with the device node.
> + * needed to perform other operations that interect with the device node.
s/interect/interact/
> + *
> + * Media device can be claimed for exclusive use with acquire(), released with
> + * release() and tested with busy(). This mechanism is aimed at pipeline
> + * managers to claim media devices they support during enumeration.
> */
>
> /**
> @@ -63,7 +67,7 @@ namespace libcamera {
> * populated with open() and populate() before the media graph can be queried.
> */
> MediaDevice::MediaDevice(const std::string &devnode)
> - : devnode_(devnode), fd_(-1), valid_(false)
> + : devnode_(devnode), fd_(-1), valid_(false), acquired_(false)
> {
> }
>
> @@ -74,6 +78,50 @@ MediaDevice::~MediaDevice()
> clear();
> }
>
> +/**
> + * \brief Claim a device for exclusive use
> + *
> + * The device claiming mechanism offers simple media device access arbitration
> + * between multiple users. When the media device is created, it is available to
> + * all users. Users can query the media graph to determine whether they can
> + * support the device and, if they do, claim the device for exclusive use. Other
> + * users are then expected to skip over media devices in use as reported by the
> + * busy() function.
> + *
> + * Once claimed the device shall be released by its user when not needed anymore
> + * by calling the release() function.
> + *
> + * Exclusive access is only guaranteed if all users of the media device abide by
s/by/to ?
> + * the device claiming mechanism, as it isn't enforced by the media device
> + * itself.
> + *
> + * \return true if the device was successfully claimed, or false if it was
> + * already in use
> + * \sa release(), busy()
> + */
> +bool MediaDevice::acquire()
> +{
> + if (acquired_)
> + return false;
> +
> + acquired_ = true;
> + return true;
> +}
> +
> +/**
> + * \fn MediaDevice::release()
> + * \brief Release a device previously claimed for exclusive use
> + * \sa acquire(), busy()
> + */
> +
> +/**
> + * \fn MediaDevice::busy()
> + * \brief Check if a device is in use
> + * \return true if the device has been claimed for exclusive user, or false if
s/user/use
> + * it is available
> + * \sa acquire(), release()
> + */
> +
With this minor things addressed, please push
Thanks
j
> /**
> * \brief Open a media device and retrieve device information
> *
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190102/15168970/attachment.sig>
More information about the libcamera-devel
mailing list