forked from Green-Sky/tomato
move DVT conversion to connection
This commit is contained in:
parent
7cb4f67f96
commit
14a726ad75
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include "./frame_streams/sdl/video.hpp"
|
#include "./frame_streams/sdl/video.hpp"
|
||||||
#include "./frame_streams/frame_stream2.hpp"
|
#include "./frame_streams/frame_stream2.hpp"
|
||||||
|
#include "./frame_streams/locked_frame_stream.hpp"
|
||||||
|
#include "./frame_streams/sdl/video_push_converter.hpp"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -27,40 +29,6 @@ namespace Message {
|
|||||||
uint64_t getTimeMS(void);
|
uint64_t getTimeMS(void);
|
||||||
}
|
}
|
||||||
|
|
||||||
// threadsafe queue frame stream
|
|
||||||
// protected by a simple mutex lock
|
|
||||||
template<typename FrameType>
|
|
||||||
struct LockedFrameStream2 : public FrameStream2I<FrameType> {
|
|
||||||
std::mutex _lock;
|
|
||||||
|
|
||||||
std::deque<FrameType> _frames;
|
|
||||||
|
|
||||||
~LockedFrameStream2(void) {}
|
|
||||||
|
|
||||||
int32_t size(void) { return -1; }
|
|
||||||
|
|
||||||
std::optional<FrameType> pop(void) {
|
|
||||||
std::lock_guard lg{_lock};
|
|
||||||
|
|
||||||
if (_frames.empty()) {
|
|
||||||
return std::nullopt;
|
|
||||||
}
|
|
||||||
|
|
||||||
FrameType new_frame = std::move(_frames.front());
|
|
||||||
_frames.pop_front();
|
|
||||||
|
|
||||||
return std::move(new_frame);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool push(const FrameType& value) {
|
|
||||||
std::lock_guard lg{_lock};
|
|
||||||
|
|
||||||
_frames.push_back(value);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DebugVideoTapSink : public FrameStream2SinkI<SDLVideoFrame> {
|
struct DebugVideoTapSink : public FrameStream2SinkI<SDLVideoFrame> {
|
||||||
TextureUploaderI& _tu;
|
TextureUploaderI& _tu;
|
||||||
|
|
||||||
@ -80,7 +48,7 @@ struct DebugVideoTapSink : public FrameStream2SinkI<SDLVideoFrame> {
|
|||||||
float _v_interval_avg {0.f}; // s
|
float _v_interval_avg {0.f}; // s
|
||||||
} view;
|
} view;
|
||||||
|
|
||||||
std::shared_ptr<LockedFrameStream2<SDLVideoFrame>> stream;
|
std::shared_ptr<PushConversionVideoStream<LockedFrameStream2<SDLVideoFrame>>> stream;
|
||||||
};
|
};
|
||||||
std::vector<Writer> _writers;
|
std::vector<Writer> _writers;
|
||||||
|
|
||||||
@ -91,7 +59,7 @@ struct DebugVideoTapSink : public FrameStream2SinkI<SDLVideoFrame> {
|
|||||||
std::shared_ptr<FrameStream2I<SDLVideoFrame>> subscribe(void) override {
|
std::shared_ptr<FrameStream2I<SDLVideoFrame>> subscribe(void) override {
|
||||||
_writers.emplace_back(Writer{
|
_writers.emplace_back(Writer{
|
||||||
Writer::View{_id_counter++},
|
Writer::View{_id_counter++},
|
||||||
std::make_shared<LockedFrameStream2<SDLVideoFrame>>()
|
std::make_shared<PushConversionVideoStream<LockedFrameStream2<SDLVideoFrame>>>(SDL_PIXELFORMAT_RGBA32)
|
||||||
});
|
});
|
||||||
|
|
||||||
return _writers.back().stream;
|
return _writers.back().stream;
|
||||||
@ -127,7 +95,7 @@ struct DebugVideoTestSource : public FrameStream2SourceI<SDLVideoFrame> {
|
|||||||
_thread = std::thread([this](void) {
|
_thread = std::thread([this](void) {
|
||||||
while (!_stop) {
|
while (!_stop) {
|
||||||
if (!_readers.empty()) {
|
if (!_readers.empty()) {
|
||||||
auto* surf = SDL_CreateSurface(960, 720, SDL_PIXELFORMAT_ARGB32);
|
auto* surf = SDL_CreateSurface(960, 720, SDL_PIXELFORMAT_RGBA32);
|
||||||
|
|
||||||
// color
|
// color
|
||||||
static auto start_time = Message::getTimeMS();
|
static auto start_time = Message::getTimeMS();
|
||||||
|
@ -7,6 +7,11 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
// tips: you can force a SDL vido driver by setting an env:
|
||||||
|
// SDL_CAMERA_DRIVER=v4l2
|
||||||
|
// SDL_CAMERA_DRIVER=pipewire
|
||||||
|
// etc.
|
||||||
|
|
||||||
// while a stream is subscribed, have the camera device open
|
// while a stream is subscribed, have the camera device open
|
||||||
// and aquire and push frames from a thread
|
// and aquire and push frames from a thread
|
||||||
struct SDLVideo2InputDevice : public FrameStream2MultiSource<SDLVideoFrame> {
|
struct SDLVideo2InputDevice : public FrameStream2MultiSource<SDLVideoFrame> {
|
||||||
|
Loading…
Reference in New Issue
Block a user