mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 11:19:58 +01:00
File path in mix session file add a relative reference to the location of the session mix file. If SessionCreator cannot find the absolute path, it tries to load the file at the relative location. Done for MediaSource, SessionFileSource and SequenceSource.
149 lines
4.1 KiB
C++
149 lines
4.1 KiB
C++
#ifndef MIXER_H
|
|
#define MIXER_H
|
|
|
|
#include "GeometryView.h"
|
|
#include "MixingView.h"
|
|
#include "LayerView.h"
|
|
#include "TextureView.h"
|
|
#include "TransitionView.h"
|
|
#include "Session.h"
|
|
#include "Selection.h"
|
|
|
|
namespace tinyxml2 {
|
|
class XMLElement;
|
|
}
|
|
|
|
class SessionSource;
|
|
|
|
class Mixer
|
|
{
|
|
// Private Constructor
|
|
Mixer();
|
|
Mixer(Mixer const& copy) = delete;
|
|
Mixer& operator=(Mixer const& copy) = delete;
|
|
|
|
public:
|
|
|
|
static Mixer& manager()
|
|
{
|
|
// The only instance
|
|
static Mixer _instance;
|
|
return _instance;
|
|
}
|
|
|
|
static Selection& selection()
|
|
{
|
|
// The only instance
|
|
static Selection _selection;
|
|
return _selection;
|
|
}
|
|
|
|
// update session and all views
|
|
void update();
|
|
inline float dt() const { return dt_;} // in miliseconds
|
|
inline int fps() const { return int(roundf(1000.f/dt__));}
|
|
|
|
// draw session and current view
|
|
void draw();
|
|
|
|
// creation of sources
|
|
Source * createSourceFile (const std::string &path);
|
|
Source * createSourceMultifile(const std::list<std::string> &list_files, uint fps);
|
|
Source * createSourceClone (const std::string &namesource = "");
|
|
Source * createSourceRender ();
|
|
Source * createSourceStream (const std::string &gstreamerpipeline);
|
|
Source * createSourcePattern(uint pattern, glm::ivec2 res);
|
|
Source * createSourceDevice (const std::string &namedevice);
|
|
Source * createSourceNetwork(const std::string &nameconnection);
|
|
Source * createSourceGroup ();
|
|
|
|
// operations on sources
|
|
void addSource (Source *s);
|
|
void deleteSource (Source *s);
|
|
void renameSource (Source *s, const std::string &newname = "");
|
|
void attach (Source *s);
|
|
void detach (Source *s);
|
|
void deselect (Source *s);
|
|
void deleteSelection();
|
|
void groupSelection();
|
|
|
|
// current source
|
|
Source * currentSource ();
|
|
void setCurrentSource (Source *s);
|
|
void setCurrentSource (std::string namesource);
|
|
void setCurrentSource (Node *node);
|
|
void setCurrentSource (uint64_t id);
|
|
void setCurrentNext ();
|
|
void setCurrentPrevious ();
|
|
void unsetCurrentSource ();
|
|
|
|
void setCurrentIndex (int index);
|
|
void moveIndex (int current_index, int target_index);
|
|
int indexCurrentSource ();
|
|
|
|
// browsing into sources
|
|
Source * findSource (Node *node);
|
|
Source * findSource (std::string name);
|
|
Source * findSource (uint64_t id);
|
|
SourceList findSources (float depth_from, float depth_to);
|
|
SourceList validate(const SourceList &list);
|
|
|
|
// management of view
|
|
View *view (View::Mode m = View::INVALID);
|
|
void setView (View::Mode m);
|
|
|
|
void conceal (Source *s);
|
|
void uncover (Source *s);
|
|
bool concealed(Source *s);
|
|
|
|
// manipulate, load and save sessions
|
|
inline Session *session () const { return session_; }
|
|
void clear ();
|
|
void save ();
|
|
void saveas (const std::string& filename);
|
|
void load (const std::string& filename);
|
|
void import (const std::string& filename);
|
|
void import (SessionSource *source);
|
|
void merge (Session *session);
|
|
void merge (SessionSource *source);
|
|
void set (Session *session);
|
|
|
|
// operations depending on transition mode
|
|
void close (bool smooth = false);
|
|
void open (const std::string& filename, bool smooth = false);
|
|
|
|
// create sources if clipboard contains well-formed xml text
|
|
void paste (const std::string& clipboard);
|
|
void restore(tinyxml2::XMLElement *sessionNode);
|
|
|
|
protected:
|
|
|
|
Session *session_;
|
|
Session *back_session_;
|
|
std::list<Session *> garbage_;
|
|
bool sessionSwapRequested_;
|
|
void swap();
|
|
|
|
SourceList candidate_sources_;
|
|
SourceList stash_;
|
|
void insertSource (Source *s, View::Mode m = View::INVALID);
|
|
bool replaceSource (Source *from, Source *to);
|
|
bool recreateSource(Source *s);
|
|
|
|
void setCurrentSource(SourceList::iterator it);
|
|
SourceList::iterator current_source_;
|
|
int current_source_index_;
|
|
|
|
View *current_view_;
|
|
MixingView mixing_;
|
|
GeometryView geometry_;
|
|
LayerView layer_;
|
|
TextureView appearance_;
|
|
TransitionView transition_;
|
|
|
|
float dt_;
|
|
float dt__;
|
|
};
|
|
|
|
#endif // MIXER_H
|