libcamera: pipeline: vimc: add pipeline handler for vimc

Provide a pipeline handler for the virtual vimc driver.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Niklas Söderlund 2018-12-20 01:38:09 +01:00
parent 1c4f156332
commit 167f751701
3 changed files with 97 additions and 0 deletions

View file

@ -21,6 +21,8 @@ includes = [
libcamera_internal_includes,
]
subdir('pipeline')
libudev = dependency('libudev')
libcamera = shared_library('camera',

View file

@ -0,0 +1,3 @@
libcamera_sources += files([
'vimc.cpp',
])

View file

@ -0,0 +1,92 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2018, Google Inc.
*
* vimc.cpp - Pipeline handler for the vimc device
*/
#include <libcamera/camera.h>
#include "device_enumerator.h"
#include "pipeline_handler.h"
namespace libcamera {
class PipeHandlerVimc : public PipelineHandler
{
public:
PipeHandlerVimc();
~PipeHandlerVimc();
bool match(DeviceEnumerator *enumerator);
unsigned int count();
Camera *camera(unsigned int id) final;
private:
DeviceInfo *info_;
Camera *camera_;
};
PipeHandlerVimc::PipeHandlerVimc()
: info_(nullptr), camera_(nullptr)
{
}
PipeHandlerVimc::~PipeHandlerVimc()
{
if (camera_)
camera_->put();
if (info_)
info_->release();
}
unsigned int PipeHandlerVimc::count()
{
return 1;
}
Camera *PipeHandlerVimc::camera(unsigned int id)
{
if (id != 0)
return nullptr;
return camera_;
}
bool PipeHandlerVimc::match(DeviceEnumerator *enumerator)
{
DeviceMatch dm("vimc");
dm.add("Raw Capture 0");
dm.add("Raw Capture 1");
dm.add("RGB/YUV Capture");
dm.add("Sensor A");
dm.add("Sensor B");
dm.add("Debayer A");
dm.add("Debayer B");
dm.add("RGB/YUV Input");
dm.add("Scaler");
info_ = enumerator->search(dm);
if (!info_)
return false;
info_->acquire();
/*
* NOTE: A more complete Camera implementation could
* be passed the DeviceInfo(s) it controls here or
* a reference to the PipelineHandler. Which method
* will be chosen depends on how the Camera
* object is modeled.
*/
camera_ = new Camera("Dummy VIMC Camera");
return true;
}
REGISTER_PIPELINE_HANDLER(PipeHandlerVimc);
} /* namespace libcamera */