added correct frei0r overriding and fixed loading message boxes

This commit is contained in:
itsmattkc
2019-01-21 11:42:24 +11:00
parent ae4fdf4846
commit 80507264ec
6 changed files with 125 additions and 99 deletions
+40 -40
View File
@@ -33,17 +33,17 @@ class QOpenGLTexture;
struct Clip
{
Clip(Sequence* s);
Clip(Sequence* s);
~Clip();
Clip* copy(Sequence* s);
void reset_audio();
Clip* copy(Sequence* s);
void reset_audio();
void reset();
void refresh();
long get_clip_in_with_transition();
long get_clip_in_with_transition();
long get_timeline_in_with_transition();
long get_timeline_out_with_transition();
long getLength();
double getMediaFrameRate();
double getMediaFrameRate();
long getMaximumLength();
void recalculateMaxLength();
int getWidth();
@@ -56,39 +56,39 @@ struct Clip
void queue_remove_earliest();
// timeline variables (should be copied in copy())
bool enabled;
long clip_in;
long timeline_in;
long timeline_out;
int track;
bool enabled;
long clip_in;
long timeline_in;
long timeline_out;
int track;
QString name;
quint8 color_r;
quint8 color_g;
quint8 color_b;
Media* media;
int media_stream;
quint8 color_r;
quint8 color_g;
quint8 color_b;
Media* media;
int media_stream;
double speed;
double cached_fr;
double cached_fr;
bool reverse;
bool maintain_audio_pitch;
bool autoscale;
// other variables (should be deep copied/duplicated in copy())
QList<Effect*> effects;
QVector<int> linked;
int opening_transition;
Transition* get_opening_transition();
int closing_transition;
Transition* get_closing_transition();
QList<Effect*> effects;
QVector<int> linked;
int opening_transition;
Transition* get_opening_transition();
int closing_transition;
Transition* get_closing_transition();
// media handling
AVFormatContext* formatCtx;
AVStream* stream;
AVCodec* codec;
AVCodecContext* codecCtx;
AVPacket* pkt;
AVFormatContext* formatCtx;
AVStream* stream;
AVCodec* codec;
AVCodecContext* codecCtx;
AVPacket* pkt;
AVFrame* frame;
AVDictionary* opts;
AVDictionary* opts;
long calculated_length;
// temporary variables
@@ -96,23 +96,23 @@ struct Clip
bool undeletable;
bool reached_end;
bool pkt_written;
bool open;
bool finished_opening;
bool replaced;
bool open;
bool finished_opening;
bool replaced;
bool ignore_reverse;
int pix_fmt;
// caching functions
bool use_existing_frame;
bool multithreaded;
bool multithreaded;
Cacher* cacher;
QWaitCondition can_cache;
QWaitCondition can_cache;
int max_queue_size;
QVector<AVFrame*> queue;
QMutex queue_lock;
QMutex lock;
QMutex lock;
QMutex open_lock;
int64_t last_invalid_ts;
int64_t last_invalid_ts;
// converters/filters
AVFilterGraph* filter_graph;
@@ -121,15 +121,15 @@ struct Clip
// video playback variables
QOpenGLFramebufferObject** fbo;
QOpenGLTexture* texture;
QOpenGLTexture* texture;
long texture_frame;
// audio playback variables
int64_t reverse_target;
int frame_sample_index;
int audio_buffer_write;
bool audio_reset;
bool audio_just_reset;
int frame_sample_index;
unsigned long audio_buffer_write;
bool audio_reset;
bool audio_just_reset;
long audio_target_frame;
};
+41 -38
View File
@@ -166,38 +166,39 @@ void init_effects() {
}
#ifndef NOFREI0R
void load_frei0r_effects_worker(const QString& dir, EffectMeta& em) {
QDir search_dir(dir);
if (search_dir.exists()) {
QList<QString> entry_list = search_dir.entryList(LibFilter(), QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
for (int j=0;j<entry_list.size();j++) {
QString entry_path = search_dir.filePath(entry_list.at(j));
if (QFileInfo(entry_path).isDir()) {
load_frei0r_effects_worker(entry_path, em);
} else {
ModulePtr effect = LibLoad(entry_path);
if (effect != nullptr) {
f0rGetPluginInfo get_info_func = reinterpret_cast<f0rGetPluginInfo>(LibAddress(effect, "f0r_get_plugin_info"));
if (get_info_func != nullptr) {
f0r_plugin_info_t info;
get_info_func(&info);
void load_frei0r_effects_worker(const QString& dir, EffectMeta& em, QVector<QString>& loaded_names) {
QDir search_dir(dir);
if (search_dir.exists()) {
QList<QString> entry_list = search_dir.entryList(LibFilter(), QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot);
for (int j=0;j<entry_list.size();j++) {
QString entry_path = search_dir.filePath(entry_list.at(j));
if (QFileInfo(entry_path).isDir()) {
load_frei0r_effects_worker(entry_path, em, loaded_names);
} else {
ModulePtr effect = LibLoad(entry_path);
if (effect != nullptr) {
f0rGetPluginInfo get_info_func = reinterpret_cast<f0rGetPluginInfo>(LibAddress(effect, "f0r_get_plugin_info"));
if (get_info_func != nullptr) {
f0r_plugin_info_t info;
get_info_func(&info);
if (info.plugin_type == F0R_PLUGIN_TYPE_FILTER
&& info.color_model == F0R_COLOR_MODEL_RGBA8888) {
em.name = info.name;
em.path = dir;
em.filename = entry_list.at(j);
if (!loaded_names.contains(info.name)
&& info.plugin_type == F0R_PLUGIN_TYPE_FILTER
&& info.color_model == F0R_COLOR_MODEL_RGBA8888) {
em.name = info.name;
em.path = dir;
em.filename = entry_list.at(j);
effects.append(em);
}
effects.append(em);
}
// qDebug() << "Found:" << info.name << "by" << info.author;
}
LibClose(effect);
}
}
LibClose(effect);
}
// qDebug() << search_dir.filePath(entry_list.at(j));
}
}
}
}
}
}
}
void load_frei0r_effects() {
@@ -211,20 +212,22 @@ void load_frei0r_effects() {
// add defined paths for frei0r plugins on unix
#if defined(__APPLE__) || defined(__linux__)
effect_dirs.append(QDir::homePath() + "/.frei0r-1/lib");
effect_dirs.append("/usr/local/lib/frei0r-1");
effect_dirs.append("/usr/lib/frei0r-1");
effect_dirs.append(QDir::homePath() + "/.frei0r-1/lib");
effect_dirs.append("/usr/local/lib/frei0r-1");
effect_dirs.append("/usr/lib/frei0r-1");
#endif
// search for paths
EffectMeta em;
em.category = "Frei0r";
em.type = EFFECT_TYPE_EFFECT;
em.subtype = EFFECT_TYPE_VIDEO;
em.internal = EFFECT_INTERNAL_FREI0R;
QVector<QString> loaded_names;
// search for paths
EffectMeta em;
em.category = "Frei0r";
em.type = EFFECT_TYPE_EFFECT;
em.subtype = EFFECT_TYPE_VIDEO;
em.internal = EFFECT_INTERNAL_FREI0R;
for (int i=0;i<effect_dirs.size();i++) {
load_frei0r_effects_worker(effect_dirs.at(i), em);
load_frei0r_effects_worker(effect_dirs.at(i), em, loaded_names);
}
}
#endif