diff --git a/io/loadthread.cpp b/io/loadthread.cpp index 001d29669..b01c9a14c 100644 --- a/io/loadthread.cpp +++ b/io/loadthread.cpp @@ -10,7 +10,6 @@ #include "project/transition.h" #include "project/effect.h" #include "playback/playback.h" -#include "ui_project.h" #include "io/previewgenerator.h" #include "dialogs/loaddialog.h" #include "project/media.h" @@ -32,6 +31,7 @@ LoadThread::LoadThread(LoadDialog* l, bool a) : ld(l), autorecovery(a), cancelle connect(this, SIGNAL(finished()), this, SLOT(deleteLater())); connect(this, SIGNAL(success()), this, SLOT(success_func())); connect(this, SIGNAL(error()), this, SLOT(error_func())); + connect(this, SIGNAL(start_create_dual_transition(const TransitionData*,Clip*,Clip*,const EffectMeta*)), this, SLOT(create_dual_transition(const TransitionData*,Clip*,Clip*,const EffectMeta*))); connect(this, SIGNAL(start_create_effect_ui(QXmlStreamReader*, Clip*, int, const EffectMeta*, long, bool)), this, SLOT(create_effect_ui(QXmlStreamReader*, Clip*, int, const EffectMeta*, long, bool))); } @@ -491,11 +491,10 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) { dout << "[WARNING] Failed to link transition with name:" << td.name; if (td.otc != NULL) td.otc->opening_transition = -1; if (td.ctc != NULL) td.ctc->closing_transition = -1; - } else { - int transition_index = create_transition(primary, secondary, meta); - primary->sequence->transitions.at(transition_index)->set_length(td.length); - if (td.otc != NULL) td.otc->opening_transition = transition_index; - if (td.ctc != NULL) td.ctc->closing_transition = transition_index; + } else { + emit start_create_dual_transition(&td, primary, secondary, meta); + + waitCond.wait(&mutex); } } } @@ -722,6 +721,14 @@ void LoadThread::create_effect_ui( c->closing_transition = transition_index; } } - waitCond.wakeAll(); + waitCond.wakeAll(); +} + +void LoadThread::create_dual_transition(const TransitionData* td, Clip* primary, Clip* secondary, const EffectMeta* meta) { + int transition_index = create_transition(primary, secondary, meta); + primary->sequence->transitions.at(transition_index)->set_length(td->length); + if (td->otc != NULL) td->otc->opening_transition = transition_index; + if (td->ctc != NULL) td->ctc->closing_transition = transition_index; + waitCond.wakeAll(); } diff --git a/io/loadthread.h b/io/loadthread.h index d0b86f5f9..572e7b8d4 100644 --- a/io/loadthread.h +++ b/io/loadthread.h @@ -12,6 +12,7 @@ struct Footage; struct Clip; struct Sequence; class LoadDialog; +class TransitionData; struct EffectMeta; class LoadThread : public QThread @@ -25,11 +26,13 @@ signals: void success(); void error(); void start_create_effect_ui(QXmlStreamReader* stream, Clip* c, int type, const EffectMeta* meta, long effect_length, bool effect_enabled); + void start_create_dual_transition(const TransitionData* td, Clip* primary, Clip* secondary, const EffectMeta* meta); void report_progress(int p); private slots: void error_func(); void success_func(); void create_effect_ui(QXmlStreamReader* stream, Clip* c, int type, const EffectMeta* meta, long effect_length, bool effect_enabled); + void create_dual_transition(const TransitionData* td, Clip* primary, Clip* secondary, const EffectMeta* meta); private: LoadDialog* ld; bool autorecovery; diff --git a/panels/project.cpp b/panels/project.cpp index 5f4c3cec7..dc391ae0b 100644 --- a/panels/project.cpp +++ b/panels/project.cpp @@ -1,5 +1,4 @@ #include "project.h" -#include "ui_project.h" #include "project/footage.h" #include "panels/panels.h" @@ -23,8 +22,10 @@ #include "dialogs/loaddialog.h" #include "io/clipboard.h" #include "project/media.h" +#include "ui/sourcetable.h" #include "debug.h" +#include #include #include #include @@ -39,6 +40,7 @@ #include #include #include +#include extern "C" { #include diff --git a/project/media.cpp b/project/media.cpp index 7f190effe..bb01dc72e 100644 --- a/project/media.cpp +++ b/project/media.cpp @@ -270,10 +270,9 @@ QVariant Media::data(int column, int role) { double r = 30; if (f->video_tracks.size() > 0 && !qIsNull(f->video_tracks.at(0)->video_frame_rate)) r = f->video_tracks.at(0)->video_frame_rate; - //if (!qIsNull(r)) { - long len = f->get_length_in_frames(r); - if (len > 0) return frame_to_timecode(len, config.timecode_view, r); - //} + + long len = f->get_length_in_frames(r); + if (len > 0) return frame_to_timecode(len, config.timecode_view, r); } break; case 2: