libcamera: pipeline: simple: Store streams in a vector

To prepare for multiple streams support, store the streams in a vector
in the SimpleCameraData class.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Phi-Bang Nguyen <pnguyen@baylibre.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2020-12-24 17:54:07 +02:00
parent 973c12488c
commit fe29aa6761

View File

@@ -61,7 +61,6 @@ public:
SimpleCameraData(SimplePipelineHandler *pipe, MediaEntity *sensor);
bool isValid() const { return sensor_ != nullptr; }
std::set<Stream *> streams() { return { &stream_ }; }
int init();
int setupLinks();
@@ -80,7 +79,7 @@ public:
SizeRange outputSizes;
};
Stream stream_;
std::vector<Stream> streams_;
std::unique_ptr<CameraSensor> sensor_;
std::list<Entity> entities_;
V4L2VideoDevice *video_;
@@ -169,6 +168,8 @@ SimpleCameraData::SimpleCameraData(SimplePipelineHandler *pipe,
{
int ret;
streams_.resize(1);
/*
* Walk the pipeline towards the video node and store all entities
* along the way.
@@ -620,7 +621,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
LOG(SimplePipeline, Debug) << "Using format converter";
}
cfg.setStream(&data->stream_);
cfg.setStream(&data->streams_[0]);
return 0;
}
@@ -645,7 +646,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
{
SimpleCameraData *data = cameraData(camera);
V4L2VideoDevice *video = data->video_;
unsigned int count = data->stream_.configuration().bufferCount;
unsigned int count = data->streams_[0].configuration().bufferCount;
int ret;
if (useConverter_)
@@ -696,7 +697,7 @@ void SimplePipelineHandler::stop(Camera *camera)
int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)
{
SimpleCameraData *data = cameraData(camera);
Stream *stream = &data->stream_;
Stream *stream = &data->streams_[0];
FrameBuffer *buffer = request->findBuffer(stream);
if (!buffer) {
@@ -825,9 +826,13 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)
if (ret < 0)
continue;
std::set<Stream *> streams;
std::transform(data->streams_.begin(), data->streams_.end(),
std::inserter(streams, streams.end()),
[](Stream &stream) { return &stream; });
std::shared_ptr<Camera> camera =
Camera::create(this, data->sensor_->id(),
data->streams());
Camera::create(this, data->sensor_->id(), streams);
registerCamera(std::move(camera), std::move(data));
registered = true;
}