summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline/simple
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/pipeline/simple')
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp39
1 files changed, 21 insertions, 18 deletions
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index d3e7f782..7fba495c 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -126,14 +126,15 @@ class SimplePipelineHandler;
struct SimplePipelineInfo {
const char *driver;
const char *converter;
+ unsigned int numStreams;
};
namespace {
static const SimplePipelineInfo supportedDevices[] = {
- { "imx7-csi", "pxp" },
- { "qcom-camss", nullptr },
- { "sun6i-csi", nullptr },
+ { "imx7-csi", "pxp", 1 },
+ { "qcom-camss", nullptr, 1 },
+ { "sun6i-csi", nullptr, 1 },
};
} /* namespace */
@@ -141,7 +142,9 @@ static const SimplePipelineInfo supportedDevices[] = {
class SimpleCameraData : public CameraData
{
public:
- SimpleCameraData(SimplePipelineHandler *pipe, MediaEntity *sensor);
+ SimpleCameraData(SimplePipelineHandler *pipe,
+ const SimplePipelineInfo *info,
+ MediaEntity *sensor);
bool isValid() const { return sensor_ != nullptr; }
@@ -259,13 +262,12 @@ private:
*/
SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
+ const SimplePipelineInfo *info,
MediaEntity *sensor)
- : CameraData(pipe)
+ : CameraData(pipe), streams_(info->numStreams)
{
int ret;
- streams_.resize(1);
-
/*
* Walk the pipeline towards the video node and store all entities
* along the way.
@@ -868,25 +870,26 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)
{
+ const SimplePipelineInfo *info = nullptr;
MediaDevice *converter = nullptr;
- for (const SimplePipelineInfo &info : supportedDevices) {
- DeviceMatch dm(info.driver);
+ for (const SimplePipelineInfo &inf : supportedDevices) {
+ DeviceMatch dm(inf.driver);
media_ = acquireMediaDevice(enumerator, dm);
- if (!media_)
- continue;
-
- if (!info.converter)
+ if (media_) {
+ info = &inf;
break;
-
- DeviceMatch converterMatch(info.converter);
- converter = acquireMediaDevice(enumerator, converterMatch);
- break;
+ }
}
if (!media_)
return false;
+ if (info->converter) {
+ DeviceMatch converterMatch(info->converter);
+ converter = acquireMediaDevice(enumerator, converterMatch);
+ }
+
/* Locate the sensors. */
std::vector<MediaEntity *> sensors;
@@ -930,7 +933,7 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)
for (MediaEntity *sensor : sensors) {
std::unique_ptr<SimpleCameraData> data =
- std::make_unique<SimpleCameraData>(this, sensor);
+ std::make_unique<SimpleCameraData>(this, info, sensor);
if (!data->isValid()) {
LOG(SimplePipeline, Error)
<< "No valid pipeline for sensor '"