libcamera: camera_sensor: Introduce CameraSensorFactory

Introduce a factory to create CameraSensor derived classes instances by
inspecting the sensor media entity name and provide a convenience macro
to register specialized sensor handlers.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Jacopo Mondi 2019-12-17 12:47:51 +01:00
parent 27cece6653
commit 6ba23735b9
12 changed files with 233 additions and 40 deletions

View file

@ -52,8 +52,8 @@ protected:
return TestFail;
}
sensor_ = new CameraSensor(entity);
if (sensor_->init() < 0) {
sensor_ = CameraSensorFactoryBase::create(entity);
if (!sensor_) {
cerr << "Unable to initialise camera sensor" << endl;
return TestFail;
}
@ -118,13 +118,12 @@ protected:
void cleanup()
{
delete sensor_;
}
private:
std::unique_ptr<DeviceEnumerator> enumerator_;
std::shared_ptr<MediaDevice> media_;
CameraSensor *sensor_;
std::unique_ptr<CameraSensor> sensor_;
CameraLens *lens_;
};

View file

@ -64,8 +64,8 @@ int V4L2VideoDeviceTest::init()
format.size.height = 480;
if (driver_ == "vimc") {
sensor_ = new CameraSensor(media_->getEntityByName("Sensor A"));
if (sensor_->init())
sensor_ = CameraSensorFactoryBase::create(media_->getEntityByName("Sensor A"));
if (!sensor_)
return TestFail;
debayer_ = new V4L2Subdevice(media_->getEntityByName("Debayer A"));
@ -98,6 +98,5 @@ void V4L2VideoDeviceTest::cleanup()
capture_->close();
delete debayer_;
delete sensor_;
delete capture_;
}

View file

@ -36,7 +36,7 @@ protected:
std::string entity_;
std::unique_ptr<libcamera::DeviceEnumerator> enumerator_;
std::shared_ptr<libcamera::MediaDevice> media_;
libcamera::CameraSensor *sensor_;
std::unique_ptr<libcamera::CameraSensor> sensor_;
libcamera::V4L2Subdevice *debayer_;
libcamera::V4L2VideoDevice *capture_;
std::vector<std::unique_ptr<libcamera::FrameBuffer>> buffers_;