summaryrefslogtreecommitdiff
path: root/include/libcamera_c/camera_c.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libcamera_c/camera_c.h')
-rw-r--r--include/libcamera_c/camera_c.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/include/libcamera_c/camera_c.h b/include/libcamera_c/camera_c.h
new file mode 100644
index 00000000..74c5fbea
--- /dev/null
+++ b/include/libcamera_c/camera_c.h
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "request_c.h"
+
+enum stream_roles {
+ RAW,
+ STILL_CAPTURE,
+ VIDEO_RECORDING,
+ VIEWFINDER,
+};
+
+#ifdef __cplusplus
+#include <memory>
+
+#include <libcamera.h>
+
+typedef std::unique_ptr<libcamera::CameraConfiguration> camera_configuration_t;
+typedef libcamera::Camera * camera_t;
+typedef std::shared_ptr<libcamera::Camera> managed_camera_t;
+
+extern "C" {
+
+#else /* __cplusplus */
+#include <stddef.h>
+
+typedef struct camera_configuration {
+#define LIBCAMERA_UNIQUE_PTR 8
+ char padding[LIBCAMERA_UNIQUE_PTR];
+} camera_configuration_t;
+
+/* pointer to Camera */
+typedef void * camera_t;
+
+/* Camera wrapped in a shared_ptr*/
+struct managed_camera {
+#define LIBCAMERA_SHARED_PTR 16
+ char padding[LIBCAMERA_SHARED_PTR];
+};
+typedef struct managed_camera managed_camera_t;
+#endif
+
+const char *camera_id(camera_t);
+const char *shared_ptr_camera_id(const managed_camera_t *);
+
+void camera_put(managed_camera_t *);
+
+void camera_generate_configuration(managed_camera_t *, enum stream_roles *,
+ size_t, camera_configuration_t *);
+
+void camera_drop_configuration(camera_configuration_t *);
+
+void camera_acquire(managed_camera_t *);
+void camera_release(managed_camera_t *);
+
+void camera_configure(managed_camera_t *, camera_configuration_t *);
+
+void camera_create_request(managed_camera_t *, request_t *);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */ \ No newline at end of file