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:
parent
1c4f156332
commit
167f751701
3 changed files with 97 additions and 0 deletions
|
@ -21,6 +21,8 @@ includes = [
|
|||
libcamera_internal_includes,
|
||||
]
|
||||
|
||||
subdir('pipeline')
|
||||
|
||||
libudev = dependency('libudev')
|
||||
|
||||
libcamera = shared_library('camera',
|
||||
|
|
3
src/libcamera/pipeline/meson.build
Normal file
3
src/libcamera/pipeline/meson.build
Normal file
|
@ -0,0 +1,3 @@
|
|||
libcamera_sources += files([
|
||||
'vimc.cpp',
|
||||
])
|
92
src/libcamera/pipeline/vimc.cpp
Normal file
92
src/libcamera/pipeline/vimc.cpp
Normal 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 */
|
Loading…
Add table
Add a link
Reference in a new issue