summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--video-ps3eye/CMakeLists.txt2
-rw-r--r--video-ps3eye/module.cpp33
-rw-r--r--video-ps3eye/module.hpp51
m---------video-ps3eye/ps3eye-driver0
-rw-r--r--video-ps3eye/shm-layout.hpp40
-rw-r--r--video-ps3eye/wrapper.cxx7
6 files changed, 132 insertions, 1 deletions
diff --git a/video-ps3eye/CMakeLists.txt b/video-ps3eye/CMakeLists.txt
index 98921f4f..2fac5f9c 100644
--- a/video-ps3eye/CMakeLists.txt
+++ b/video-ps3eye/CMakeLists.txt
@@ -23,6 +23,8 @@ endif()
if(TARGET ps3eye-driver)
otr_module(video-ps3eye)
+ link_libraries(ps3eye-driver)
+ add_executable(ps3eye-subprocess "wrapper.cxx")
if(WIN32)
set(path "${SDK_LIBUSB}/libusb-1.0.dll")
if(EXISTS "${path}")
diff --git a/video-ps3eye/module.cpp b/video-ps3eye/module.cpp
index b04c6acb..ac6d8807 100644
--- a/video-ps3eye/module.cpp
+++ b/video-ps3eye/module.cpp
@@ -1,5 +1,5 @@
#include "module.hpp"
-
+#if 0
#include <libusb.h>
int device_count()
@@ -48,3 +48,34 @@ bool check_device_exists()
return ret;
}
+static const QString camera_name = QStringLiteral("PS3 Eye open driver");
+
+namespace video::impl {
+
+std::vector<QString> ps3eye_camera_::camera_names() const
+{
+ if (check_device_exists())
+ return { camera_name };
+ else
+ return {};
+}
+std::unique_ptr<camera> ps3eye_camera_::make_camera(const QString& name)
+{
+ if (name == camera_name && check_device_exists())
+ return std::make_unique<ps3eye_camera>();
+ else
+ return {};
+}
+bool ps3eye_camera_::show_dialog(const QString& camera_name)
+{
+ // TODO
+ return false;
+}
+bool ps3eye_camera_::can_show_dialog(const QString& camera_name)
+{
+ return false;
+}
+
+} // ns video::impl
+
+#endif
diff --git a/video-ps3eye/module.hpp b/video-ps3eye/module.hpp
index a9283d14..357af14c 100644
--- a/video-ps3eye/module.hpp
+++ b/video-ps3eye/module.hpp
@@ -1,3 +1,54 @@
#pragma once
#include "video/camera.hpp"
+
+#if 0
+
+namespace video {
+
+struct OTR_VIDEO_EXPORT camera_
+{
+ camera_();
+ virtual ~camera_();
+
+ virtual std::vector<QString> camera_names() const = 0;
+ virtual std::unique_ptr<camera> make_camera(const QString& name) = 0;
+ virtual bool show_dialog(const QString& camera_name) = 0;
+ virtual bool can_show_dialog(const QString& camera_name) = 0;
+};
+
+struct OTR_VIDEO_EXPORT camera
+{
+ struct info final
+ {
+ // TODO: expose FOV-based focal length for regular webcams
+ int width = 0, height = 0, fps = 0;
+ double fx = 0, fy = 0; // focal length
+ double P_x = 0, P_y = 0; // principal point
+ double dist_c[8] {}; // distortion coefficients
+ };
+
+ camera();
+ virtual ~camera();
+
+ [[nodiscard]] virtual bool start(info& args) = 0;
+ virtual void stop() = 0;
+ virtual bool is_open() = 0;
+
+ virtual std::tuple<const frame&, bool> get_frame() = 0;
+ [[nodiscard]] virtual bool show_dialog() = 0;
+};
+
+} // ns video
+
+#endif
+
+namespace video::impl {
+struct ps3eye_camera_ : camera_
+{
+ std::vector<QString> camera_names() const override;
+ std::unique_ptr<camera> make_camera(const QString& name) override;
+ bool show_dialog(const QString& camera_name) override;
+ bool can_show_dialog(const QString& camera_name) override;
+};
+} // ns video::impl
diff --git a/video-ps3eye/ps3eye-driver b/video-ps3eye/ps3eye-driver
-Subproject 730d0dbc0b87c3c4a9a6b196d277ee143b37681
+Subproject 7a2dcb0ff586bd0865d35d964b75c4d0a29b4e9
diff --git a/video-ps3eye/shm-layout.hpp b/video-ps3eye/shm-layout.hpp
new file mode 100644
index 00000000..7fa29115
--- /dev/null
+++ b/video-ps3eye/shm-layout.hpp
@@ -0,0 +1,40 @@
+#pragma once
+#include <cstdint>
+
+namespace ps3eye {
+
+struct shm_out {
+ enum class mode : uint8_t { qvga, vga, };
+ enum class status : uint8_t { starting, running, fail, terminate, };
+
+ uint8_t settings_updated;
+ uint16_t framerate;
+ mode resolution;
+ status status_;
+ uint8_t sharpness, contrast, brightness, hue, saturation;
+ uint8_t gain, exposure, auto_gain, awb, test_pattern;
+};
+
+struct shm_in {
+ uint8_t settings_updated_ack;
+ uint8_t timecode;
+ union {
+ uint8_t data_320x240[320][240][3];
+ uint8_t data_640x480[640][480][3];
+ };
+};
+
+struct shm {
+ static constexpr unsigned _cacheline_len = 64;
+ static constexpr unsigned _padding_len =
+ (_cacheline_len - (sizeof(shm_in) & (_cacheline_len - 1))) & (_cacheline_len - 1);
+
+ using resolution = shm_out::mode;
+ using status = shm_out::status;
+
+ shm_out out;
+ const char* _padding[_padding_len];
+ shm_in in;
+};
+
+} // ns ps3eye
diff --git a/video-ps3eye/wrapper.cxx b/video-ps3eye/wrapper.cxx
new file mode 100644
index 00000000..add62992
--- /dev/null
+++ b/video-ps3eye/wrapper.cxx
@@ -0,0 +1,7 @@
+#include "shm-layout.hpp"
+
+int main(int argc, char** argv)
+{
+ (void)argc; (void)argv;
+ return 0;
+}