diff options
Diffstat (limited to 'src/py/libcamera/py_camera_manager.h')
-rw-r--r-- | src/py/libcamera/py_camera_manager.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/py/libcamera/py_camera_manager.h b/src/py/libcamera/py_camera_manager.h new file mode 100644 index 00000000..9c15f814 --- /dev/null +++ b/src/py/libcamera/py_camera_manager.h @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> + */ + +#pragma once + +#include <mutex> + +#include <libcamera/libcamera.h> + +#include <pybind11/smart_holder.h> + +using namespace libcamera; + +class PyCameraManager +{ +public: + PyCameraManager(); + ~PyCameraManager(); + + pybind11::list cameras(); + std::shared_ptr<Camera> get(const std::string &name) { return cameraManager_->get(name); } + + static const std::string &version() { return CameraManager::version(); } + + int eventFd() const { return eventFd_; } + + std::vector<pybind11::object> getReadyRequests(); + + void handleRequestCompleted(Request *req); + +private: + std::unique_ptr<CameraManager> cameraManager_; + + int eventFd_ = -1; + std::mutex completedRequestsMutex_; + std::vector<Request *> completedRequests_; + + void writeFd(); + void readFd(); + void pushRequest(Request *req); + std::vector<Request *> getCompletedRequests(); +}; |