[libcamera-devel] [PATCH v2 6/8] libcamera: v4l2_videodevice: Add multiplanar argument to toV4L2PixelFormat

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Jul 23 19:46:48 CEST 2022


Hi Jacopo,

Thank you for the patch.

On Sat, Jul 23, 2022 at 11:53:28AM +0200, Jacopo Mondi via libcamera-devel wrote:
> The toV4L2PixelFormat() function selects which V4L2 format variant to
> use (contiguous planes vs non-contiguous version) by using video device
> multiplanar API from the capabilities.
> 
> The isMultiplanar() function however verifies if the video device uses
> the singleplanar or the multiplanar V4L2 API, something which is
> unrelated to the format variant to use.
> 
> Add a 'multiplanar' flag, which defaults to false, to the
> toV4L2PixelFormat() function to allow explicit selection of the format
> variant.

None of the callers set multiplanar to true in this series, so I'd drop
this patch (see the review of the previous patch for more details).

> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  include/libcamera/internal/v4l2_videodevice.h |  3 ++-
>  src/libcamera/v4l2_videodevice.cpp            | 13 +++++++------
>  2 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
> index 6d8850c99afd..64296c5849f2 100644
> --- a/include/libcamera/internal/v4l2_videodevice.h
> +++ b/include/libcamera/internal/v4l2_videodevice.h
> @@ -228,7 +228,8 @@ public:
>  	static std::unique_ptr<V4L2VideoDevice>
>  	fromEntityName(const MediaDevice *media, const std::string &entity);
>  
> -	V4L2PixelFormat toV4L2PixelFormat(const PixelFormat &pixelFormat) const;
> +	V4L2PixelFormat toV4L2PixelFormat(const PixelFormat &pixelFormat,
> +					  bool multiplanar = false) const;
>  
>  protected:
>  	std::string logPrefix() const override;
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index a3242ba755c0..767ab2361ef5 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1992,23 +1992,24 @@ V4L2VideoDevice::fromEntityName(const MediaDevice *media,
>  /**
>   * \brief Convert \a PixelFormat to one of the device supported V4L2 FourCC
>   * \param[in] pixelFormat The PixelFormat to convert
> + * \param[in] multiplanar Use the multiplanar format version, default to false
>   *
>   * Convert a\ pixelformat to a V4L2 FourCC that is known to be supported by
>   * the video device.
>   *
> - * For multiplanar formats, the V4L2 format variant (contiguous or
> - * non-contiguous planes) is selected automatically based on the capabilities
> - * of the video device. If the video device supports the V4L2 multiplanar API,
> - * non-contiguous formats are preferred.
> + * V4L2 defines different format variants for the same format when using
> + * contiguous or non-contiguous planes. The \a multiplanar parameter allows
> + * to select which variant to use.
>   *
>   * \return The V4L2PixelFormat corresponding to \a pixelFormat or an invalid
>   * PixelFormat if \a pixelFormat is not supported by the video device
>   */
> -V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelFormat) const
> +V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelFormat,
> +						   bool multiplanar) const
>  {
>  	std::vector<V4L2PixelFormat> deviceFormats = enumPixelformats(0);
>  	std::vector<V4L2PixelFormat> v4l2PixelFormats =
> -		V4L2PixelFormat::fromPixelFormat(pixelFormat, caps_.isMultiplanar());
> +		V4L2PixelFormat::fromPixelFormat(pixelFormat, multiplanar);
>  
>  	for (const V4L2PixelFormat &v4l2Format : v4l2PixelFormats) {
>  		auto it = std::find_if(deviceFormats.begin(), deviceFormats.end(),

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list