Skip to content
Snippets Groups Projects
Commit e9c02d35 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Support pause and use everywhere

parent 908d6272
No related branches found
No related tags found
1 merge request!135Implements #201 file stream pausing
Pipeline #15473 passed
This commit is part of merge request !135. Comments created here will be created in the context of that merge request.
......@@ -239,10 +239,11 @@ static void run(ftl::Configurable *root) {
group->setLatency(4);
group->setName("ReconGroup");
group->sync([splat,virt,&busy,&slave,&scene_A,&scene_B,&align](ftl::rgbd::FrameSet &fs) -> bool {
group->sync([splat,virt,&busy,&slave,&scene_A,&scene_B,&align,controls](ftl::rgbd::FrameSet &fs) -> bool {
//cudaSetDevice(scene->getCUDADevice());
if (slave.isPaused()) return true;
//if (slave.isPaused()) return true;
if (controls->value("paused", false)) return true;
if (busy) {
LOG(INFO) << "Group frameset dropped: " << fs.timestamp;
......
......@@ -6,10 +6,18 @@ using ftl::rgbd::Player;
Player::Player(std::istream &s) : stream_(&s), reader_(s) {
auto *c = ftl::config::find("/controls");
offset_ = 0;
if (c) {
paused_ = c->value("paused", false);
c->on("paused", [this,c](const ftl::config::Event &e) {
UNIQUE_LOCK(mtx_, lk);
paused_ = c->value("paused", false);
if (paused_) {
pause_time_ = last_ts_;
} else {
offset_ += last_ts_ - pause_time_;
}
});
looping_ = c->value("looping", true);
......@@ -30,18 +38,22 @@ Player::Player(std::istream &s) : stream_(&s), reader_(s) {
}
Player::~Player() {
// TODO: Remove callbacks
}
bool Player::read(int64_t ts) {
std::unique_lock<std::mutex> lk(mtx_, std::defer_lock);
if (!lk.try_lock()) return true;
last_ts_ = ts;
if (paused_) return true;
int64_t adjusted_ts = int64_t(float(ts - reader_.getStartTime()) * speed_) + reader_.getStartTime();
LOG(INFO) << "Adjusted = " << adjusted_ts;
int64_t adjusted_ts = int64_t(float(ts - reader_.getStartTime()) * speed_) + reader_.getStartTime() + offset_;
bool res = reader_.read(adjusted_ts);
if (looping_ && !res) {
reader_.end();
offset_ = 0;
stream_->clear();
stream_->seekg(0);
if (!reader_.begin()) {
......
......@@ -3,6 +3,7 @@
#include <iostream>
#include <ftl/codecs/reader.hpp>
#include <ftl/threads.hpp>
namespace ftl {
namespace rgbd {
......@@ -32,6 +33,12 @@ class Player {
bool reversed_;
bool looping_;
float speed_;
int64_t pause_time_;
int64_t offset_;
int64_t last_ts_;
MUTEX mtx_;
};
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment