libcamera: store stream pointers in sets instead of a vectors
The arrays that store Stream pointers shall always contain unique values. Storing them in vectors opens up for the same stream pointer appearing twice. Remove this possibility by storing them in a set which guarantees each element is unique. 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:
@@ -66,7 +66,7 @@ LOG_DECLARE_CATEGORY(Camera)
|
||||
*/
|
||||
std::shared_ptr<Camera> Camera::create(PipelineHandler *pipe,
|
||||
const std::string &name,
|
||||
const std::vector<Stream *> &streams)
|
||||
const std::set<Stream *> &streams)
|
||||
{
|
||||
struct Allocator : std::allocator<Camera> {
|
||||
void construct(void *p, PipelineHandler *pipe,
|
||||
@@ -188,7 +188,7 @@ void Camera::release()
|
||||
*
|
||||
* \return An array of all the camera's streams.
|
||||
*/
|
||||
const std::vector<Stream *> &Camera::streams() const
|
||||
const std::set<Stream *> &Camera::streams() const
|
||||
{
|
||||
return streams_;
|
||||
}
|
||||
@@ -210,7 +210,7 @@ const std::vector<Stream *> &Camera::streams() const
|
||||
* empty list on error.
|
||||
*/
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
Camera::streamConfiguration(std::vector<Stream *> &streams)
|
||||
Camera::streamConfiguration(std::set<Stream *> &streams)
|
||||
{
|
||||
if (disconnected_ || !streams.size())
|
||||
return std::map<Stream *, StreamConfiguration>{};
|
||||
@@ -264,7 +264,7 @@ int Camera::configureStreams(std::map<Stream *, StreamConfiguration> &config)
|
||||
const StreamConfiguration &cfg = iter.second;
|
||||
|
||||
stream->configuration_ = cfg;
|
||||
activeStreams_.push_back(stream);
|
||||
activeStreams_.insert(stream);
|
||||
|
||||
/*
|
||||
* Allocate buffer objects in the pool.
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
virtual bool match(DeviceEnumerator *enumerator) = 0;
|
||||
|
||||
virtual std::map<Stream *, StreamConfiguration>
|
||||
streamConfiguration(Camera *camera, std::vector<Stream *> &streams) = 0;
|
||||
streamConfiguration(Camera *camera, std::set<Stream *> &streams) = 0;
|
||||
virtual int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) = 0;
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ public:
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams) override;
|
||||
std::set<Stream *> &streams) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
|
||||
@@ -95,7 +95,7 @@ PipelineHandlerIPU3::~PipelineHandlerIPU3()
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
PipelineHandlerIPU3::streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams)
|
||||
std::set<Stream *> &streams)
|
||||
{
|
||||
IPU3CameraData *data = cameraData(camera);
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
@@ -374,7 +374,7 @@ void PipelineHandlerIPU3::registerCameras()
|
||||
std::unique_ptr<IPU3CameraData> data = utils::make_unique<IPU3CameraData>();
|
||||
|
||||
std::string cameraName = sensor->name() + " " + std::to_string(id);
|
||||
std::vector<Stream *> streams{ &data->stream_ };
|
||||
std::set<Stream *> streams{ &data->stream_ };
|
||||
std::shared_ptr<Camera> camera = Camera::create(this, cameraName, streams);
|
||||
|
||||
/*
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams) override;
|
||||
std::set<Stream *> &streams) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
|
||||
@@ -63,7 +63,7 @@ PipelineHandlerUVC::~PipelineHandlerUVC()
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
PipelineHandlerUVC::streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams)
|
||||
std::set<Stream *> &streams)
|
||||
{
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
|
||||
@@ -171,7 +171,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<Stream *> streams{ &stream_ };
|
||||
std::set<Stream *> streams{ &stream_ };
|
||||
std::shared_ptr<Camera> camera = Camera::create(this, media_->model(), streams);
|
||||
registerCamera(std::move(camera));
|
||||
hotplugMediaDevice(media_.get());
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams) override;
|
||||
std::set<Stream *> &streams) override;
|
||||
int configureStreams(Camera *camera,
|
||||
std::map<Stream *, StreamConfiguration> &config) override;
|
||||
|
||||
@@ -62,7 +62,7 @@ PipelineHandlerVimc::~PipelineHandlerVimc()
|
||||
|
||||
std::map<Stream *, StreamConfiguration>
|
||||
PipelineHandlerVimc::streamConfiguration(Camera *camera,
|
||||
std::vector<Stream *> &streams)
|
||||
std::set<Stream *> &streams)
|
||||
{
|
||||
std::map<Stream *, StreamConfiguration> configs;
|
||||
|
||||
@@ -171,7 +171,7 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<Stream *> streams{ &stream_ };
|
||||
std::set<Stream *> streams{ &stream_ };
|
||||
std::shared_ptr<Camera> camera = Camera::create(this, "VIMC Sensor B",
|
||||
streams);
|
||||
registerCamera(std::move(camera));
|
||||
|
||||
Reference in New Issue
Block a user