[libcamera-devel] [PATCH v5 07/19] libcamera: v4l2_subdevice: Create device from entity name

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Apr 2 00:04:07 CEST 2019


Hi Jacopo,

Thank you for the patch.

On Tue, Mar 26, 2019 at 09:38:50AM +0100, Jacopo Mondi wrote:
> Add a static method to V4L2Subdevice class to create a V4L2Subdevice
> instance from a media entity name.
> 
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/libcamera/include/v4l2_subdevice.h |  5 +++++
>  src/libcamera/v4l2_subdevice.cpp       | 22 ++++++++++++++++++++++
>  2 files changed, 27 insertions(+)
> 
> diff --git a/src/libcamera/include/v4l2_subdevice.h b/src/libcamera/include/v4l2_subdevice.h
> index f42cccabda94..0067109931d1 100644
> --- a/src/libcamera/include/v4l2_subdevice.h
> +++ b/src/libcamera/include/v4l2_subdevice.h
> @@ -18,6 +18,8 @@
>  
>  namespace libcamera {
>  
> +class MediaDevice;
> +
>  struct V4L2SubdeviceFormat {
>  	uint32_t mbus_code;
>  	uint32_t width;
> @@ -29,6 +31,9 @@ struct V4L2SubdeviceFormat {
>  class V4L2Subdevice : protected Loggable
>  {
>  public:
> +	static V4L2Subdevice *fromEntityName(const MediaDevice *media,
> +					     const std::string &name);
> +
I would move this down, as static methods are usually put after the
non-static ones.

I would also rename the name argument to entity (I forgot to mention
this for patch 06/19, it applies there too).

I wonder if there would be an advantage in turning this into a
constructor for the V4L2Subdevice class, but in any case that could be
done later, so, with the above and below issues fixed,

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

>  	explicit V4L2Subdevice(const MediaEntity *entity);
>  	V4L2Subdevice(const V4L2Subdevice &) = delete;
>  	V4L2Subdevice &operator=(const V4L2Subdevice &) = delete;
> diff --git a/src/libcamera/v4l2_subdevice.cpp b/src/libcamera/v4l2_subdevice.cpp
> index 10925f9fe497..e28857c9aeb1 100644
> --- a/src/libcamera/v4l2_subdevice.cpp
> +++ b/src/libcamera/v4l2_subdevice.cpp
> @@ -16,6 +16,7 @@
>  
>  #include "geometry.h"
>  #include "log.h"
> +#include "media_device.h"
>  #include "media_object.h"
>  #include "v4l2_subdevice.h"
>  
> @@ -101,6 +102,27 @@ const std::string V4L2SubdeviceFormat::toString() const
>   * any device left open will be closed, and any resources released.
>   */
>  
> +/**
> + * \brief Create a new video subdevice instance from entity with \a name in
> + * media device \a media
> + * \param[in] media The media device where the entity is registered
> + * \param[in] name The media entity name
> + *
> + * Releasing memory of the newly created instance is responsibility of the

s/Releasing memory of the/Deleting the/
s/is responsibility/is the responsibility/

(applies to 06/19 too)

> + * caller of this function.
> + *
> + * \return A newly created V4L2Subdevice on success, nullptr otherwise
> + */
> +V4L2Subdevice *V4L2Subdevice::fromEntityName(const MediaDevice *media,
> +					     const std::string &name)
> +{
> +	MediaEntity *entity = media->getEntityByName(name);
> +	if (!entity)
> +		return nullptr;
> +
> +	return new V4L2Subdevice(entity);
> +}
> +
>  /**
>   * \brief Create a V4L2 subdevice from a MediaEntity using its device node
>   * path

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list