New Reload source function

Generalize the reload of stream source to all types of sources. Enable OSC command to reload source.
This commit is contained in:
Bruno Herbelin
2023-11-14 11:12:21 +01:00
parent 7b9e71df40
commit 6735e5eaaa
13 changed files with 45 additions and 5 deletions

View File

@@ -209,6 +209,11 @@ void CloneSource::replay()
filter_->reset();
}
void CloneSource::reload()
{
replay();
}
guint64 CloneSource::playtime () const
{
if (filter_->type() != FrameBufferFilter::FILTER_PASSTHROUGH)

View File

@@ -20,6 +20,7 @@ public:
void play (bool on) override;
bool playable () const override;
void replay () override;
void reload() override;
guint64 playtime () const override;
uint texture() const override;
Failure failed() const override;

View File

@@ -612,6 +612,10 @@ bool Control::receiveSourceAttribute(Source *target, const std::string &attribut
else if ( attribute.compare(OSC_SOURCE_REPLAY) == 0) {
target->call( new RePlay() );
}
/// e.g. '/vimix/current/reload'
else if ( attribute.compare(OSC_SOURCE_RELOAD) == 0) {
target->reload();
}
/// e.g. '/vimix/current/alpha f 0.3'
else if ( attribute.compare(OSC_SOURCE_LOCK) == 0) {
float x = 1.f;

View File

@@ -38,6 +38,7 @@
#define OSC_SOURCE_PLAY "/play"
#define OSC_SOURCE_PAUSE "/pause"
#define OSC_SOURCE_REPLAY "/replay"
#define OSC_SOURCE_RELOAD "/reload"
#define OSC_SOURCE_ALPHA "/alpha"
#define OSC_SOURCE_LOOM "/loom"
#define OSC_SOURCE_TRANSPARENCY "/transparency"

View File

@@ -112,7 +112,7 @@ FilteringProgram::FilteringProgram(const std::string &name, const std::string &f
}
FilteringProgram::FilteringProgram(const FilteringProgram &other) :
name_(other.name_), code_(other.code_), parameters_(other.parameters_), two_pass_filter_(other.two_pass_filter_)
name_(other.name_), code_(other.code_), two_pass_filter_(other.two_pass_filter_), parameters_(other.parameters_)
{
}

View File

@@ -162,6 +162,11 @@ void MediaSource::replay ()
mediaplayer_->rewind();
}
void MediaSource::reload ()
{
mediaplayer_->reopen();
}
guint64 MediaSource::playtime () const
{
return mediaplayer_->position();

View File

@@ -18,6 +18,7 @@ public:
void play (bool) override;
bool playable () const override;
void replay () override;
void reload () override;
guint64 playtime () const override;
void render() override;
Failure failed() const override;

View File

@@ -162,6 +162,17 @@ void RenderSource::replay ()
reset_ = true;
}
void RenderSource::reload ()
{
// reset renderbuffer_
if (renderbuffer_)
delete renderbuffer_;
renderbuffer_ = nullptr;
// request next frame to reset
reset_ = true;
}
glm::vec3 RenderSource::resolution() const
{
if (rendered_output_ != nullptr)

View File

@@ -16,6 +16,7 @@ public:
bool playing () const override { return !paused_; }
void play (bool) override;
void replay () override;
void reload () override;
bool playable () const override { return true; }
guint64 playtime () const override { return runtime_; }
Failure failed () const override;

View File

@@ -277,10 +277,14 @@ void SessionFileSource::load(const std::string &p, uint level)
path_ = p;
// delete session
if (session_) {
if (session_)
delete session_;
session_ = nullptr;
}
session_ = nullptr;
// reset renderbuffer_
if (renderbuffer_)
delete renderbuffer_;
renderbuffer_ = nullptr;
// init session
if ( path_.empty() ) {
@@ -299,6 +303,11 @@ void SessionFileSource::load(const std::string &p, uint level)
ready_ = false;
}
void SessionFileSource::reload()
{
load(path_);
}
void SessionFileSource::init()
{
// init is first about getting the loaded session

View File

@@ -44,6 +44,7 @@ public:
// SessionFile Source specific interface
void load(const std::string &p = "", uint level = 0);
void reload () override;
inline std::string path() const { return path_; }

View File

@@ -184,6 +184,7 @@ public:
virtual bool playing () const = 0;
virtual void play (bool on) = 0;
virtual void replay () {}
virtual void reload () {}
virtual guint64 playtime () const { return 0; }
// a Source shall informs if the source failed (i.e. shall be deleted)

View File

@@ -34,13 +34,13 @@ public:
void play (bool) override;
bool playable () const override;
void replay () override;
void reload () override;
guint64 playtime () const override;
Failure failed() const override;
uint texture() const override;
// pure virtual interface
virtual Stream *stream() const = 0;
void reload ();
// Source interface
virtual void accept (Visitor& v) override;