To match the enumerated media devices, each registered pipeline handler is used in no specific order. It is a limitation when several pipelines can match the devices, and user has to select a specific pipeline. For this purpose, environment variable LIBCAMERA_PIPELINES_MATCH_LIST is created to give the option to define an ordered list of pipelines to match on. LIBCAMERA_PIPELINES_MATCH_LIST="<name1>[,<name2>[,<name3>...]]]" Example: LIBCAMERA_PIPELINES_MATCH_LIST="rkisp1,simple" Signed-off-by: Julien Vuillaumier <julien.vuillaumier@nxp.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
70 lines
1.5 KiB
C++
70 lines
1.5 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2023, Ideas on Board Oy.
|
|
*
|
|
* Camera manager private data
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <libcamera/camera_manager.h>
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <sys/types.h>
|
|
#include <vector>
|
|
|
|
#include <libcamera/base/class.h>
|
|
#include <libcamera/base/mutex.h>
|
|
#include <libcamera/base/thread.h>
|
|
#include <libcamera/base/thread_annotations.h>
|
|
|
|
#include "libcamera/internal/ipa_manager.h"
|
|
#include "libcamera/internal/process.h"
|
|
|
|
namespace libcamera {
|
|
|
|
class Camera;
|
|
class DeviceEnumerator;
|
|
|
|
class CameraManager::Private : public Extensible::Private, public Thread
|
|
{
|
|
LIBCAMERA_DECLARE_PUBLIC(CameraManager)
|
|
|
|
public:
|
|
Private();
|
|
|
|
int start();
|
|
void addCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);
|
|
void removeCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);
|
|
|
|
protected:
|
|
void run() override;
|
|
|
|
private:
|
|
int init();
|
|
void createPipelineHandlers();
|
|
void pipelineFactoryMatch(const PipelineHandlerFactoryBase *factory);
|
|
void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);
|
|
|
|
/*
|
|
* This mutex protects
|
|
*
|
|
* - initialized_ and status_ during initialization
|
|
* - cameras_ after initialization
|
|
*/
|
|
mutable Mutex mutex_;
|
|
std::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
|
|
|
|
ConditionVariable cv_;
|
|
bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
|
|
int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
|
|
|
|
std::unique_ptr<DeviceEnumerator> enumerator_;
|
|
|
|
IPAManager ipaManager_;
|
|
ProcessManager processManager_;
|
|
};
|
|
|
|
} /* namespace libcamera */
|