[libcamera-devel] [PATCH 2/2] libcamera: pipeline: uvcvideo: add pipeline handler for uvcvideo

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jan 21 22:10:07 CET 2019


Hi Niklas,

Thank you for the patch.

On Mon, Jan 21, 2019 at 04:30:05PM +0100, Niklas Söderlund wrote:
> Provide a pipeline handler for uvcvideo devices. The entity names for
> uvc devices are different for different cameras so matching on entity
> names is not possible in the generic case. This leaves options to create
> specialized uvc pipeline handlers if needed to fit a specific models

s/uvc/UVC/
s/models/model's/

> needs.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/libcamera/pipeline/meson.build  |  1 +
>  src/libcamera/pipeline/uvcvideo.cpp | 59 +++++++++++++++++++++++++++++
>  2 files changed, 60 insertions(+)
>  create mode 100644 src/libcamera/pipeline/uvcvideo.cpp
> 
> diff --git a/src/libcamera/pipeline/meson.build b/src/libcamera/pipeline/meson.build
> index 615ecd20f1a21141..4da5d8cf9c4384bb 100644
> --- a/src/libcamera/pipeline/meson.build
> +++ b/src/libcamera/pipeline/meson.build
> @@ -1,3 +1,4 @@
>  libcamera_sources += files([
> +    'uvcvideo.cpp',
>      'vimc.cpp',
>  ])
> diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
> new file mode 100644
> index 0000000000000000..2579782e90caec5a
> --- /dev/null
> +++ b/src/libcamera/pipeline/uvcvideo.cpp
> @@ -0,0 +1,59 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * uvcvideo.cpp - Pipeline handler for uvcvideo devices
> + */
> +
> +#include <libcamera/camera.h>
> +#include <libcamera/camera_manager.h>
> +
> +#include "device_enumerator.h"
> +#include "media_device.h"
> +#include "pipeline_handler.h"
> +
> +namespace libcamera {
> +
> +class PipeHandlerUvcvideo : public PipelineHandler

How about PipelineHandlerUVC to retain the common prefix ?

> +{
> +public:
> +	PipeHandlerUvcvideo();
> +	~PipeHandlerUvcvideo();
> +
> +	bool match(CameraManager *manager, DeviceEnumerator *enumerator);
> +
> +private:
> +	MediaDevice *dev_;
> +};
> +
> +PipeHandlerUvcvideo::PipeHandlerUvcvideo()
> +	: dev_(nullptr)
> +{
> +}
> +
> +PipeHandlerUvcvideo::~PipeHandlerUvcvideo()
> +{
> +	if (dev_)
> +		dev_->release();
> +}
> +
> +bool PipeHandlerUvcvideo::match(CameraManager *manager, DeviceEnumerator *enumerator)
> +{
> +	DeviceMatch dm("uvcvideo");
> +
> +	dev_ = enumerator->search(dm);
> +
> +	if (!dev_)
> +		return false;
> +
> +	dev_->acquire();
> +
> +	std::shared_ptr<Camera> camera = Camera::create(dev_->model());

Does this guarantee unicity of the name ? I think we'll need more than
that, but it can probably be fixed later. I foresee the need for a
machine-parsable name and a human-readable description, along the lines
of "uvcvideo/1-5:1.0" and "Integrated_Webcam_HD", or
"uvcvideo/3-1.3:1.0" and "Logitech Portable Webcam C905 on USB port
3-1.3" (those are real examples).

> +	manager->addCamera(std::move(camera));
> +
> +	return true;

While this doesn't do much, it's a stumb that allows enumerating cameras
on most development platforms, so it's very useful as such. Let's get it
in, with the above issues fixed,

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

> +}
> +
> +REGISTER_PIPELINE_HANDLER(PipeHandlerUvcvideo);
> +
> +} /* namespace libcamera */

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list