#include <functional>
#include <map>
#include <memory>
+#include <mutex>
#include <set>
#include <string>
#include <thread>
return card_index;
}
+ void rewind()
+ {
+ std::lock_guard<std::mutex> lock(queue_mu);
+ command_queue.push_back(QueuedCommand { QueuedCommand::REWIND });
+ }
+
// CaptureInterface.
void set_video_frame_allocator(bmusb::FrameAllocator *allocator) override
{
std::atomic<bool> producer_thread_should_quit{false};
std::thread producer_thread;
+
+ std::mutex queue_mu;
+ struct QueuedCommand {
+ enum Command { REWIND } command;
+ };
+ std::vector<QueuedCommand> command_queue; // Protected by <queue_mu>.
};
#endif // !defined(_FFMPEG_CAPTURE_H)