From b267ac6d6d207b165c1f0fe3cb2fed5170166cb5 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 23 Jul 2018 01:55:32 +0100 Subject: [PATCH] improved image sequence detection heuristic --- io/media.cpp | 5 +++ io/media.h | 2 ++ panels/project.cpp | 78 +++++++++++++++++++++++++++++++-------------- panels/project.h | 2 +- playback/cacher.cpp | 2 +- project/clip.h | 2 +- 6 files changed, 64 insertions(+), 27 deletions(-) diff --git a/io/media.cpp b/io/media.cpp index d44dcc782..8d5ce4399 100644 --- a/io/media.cpp +++ b/io/media.cpp @@ -9,6 +9,10 @@ extern "C" { Media::Media() : ready(false) {} Media::~Media() { + reset(); +} + +void Media::reset() { for (int i=0;i audio_tracks; int save_id; bool ready; + long get_length_in_frames(double frame_rate); MediaStream* get_stream_from_file_index(int index); + void reset(); }; int guess_layout_from_channels(int channel_count); diff --git a/panels/project.cpp b/panels/project.cpp index 88c9879dc..6ac1c9198 100644 --- a/panels/project.cpp +++ b/panels/project.cpp @@ -133,11 +133,11 @@ void Project::start_preview_generator(QTreeWidgetItem* item, Media* media) { pg->start(QThread::LowPriority); } -QTreeWidgetItem* Project::import_file(QString file) { +QTreeWidgetItem* Project::import_file(QString file, QString imported_filename) { QTreeWidgetItem* item = new_item(); Media* m = new Media(); m->url = file; - m->name = file.mid(file.lastIndexOf('/')+1); + m->name = imported_filename.mid(file.lastIndexOf('/')+1); set_media_of_tree(item, m); // generate waveform/thumbnail in another thread @@ -300,9 +300,14 @@ void Project::delete_selected_media() { void Project::process_file_list(QStringList& files) { bool imported = false; + + QVector image_sequence_urls; + QVector image_sequence_importassequence; + TimelineAction* ta = new TimelineAction(); for (int i=0;iadd_media(import_file(file)); - imported = true; - project_changed = true; + if (!skip) { + ta->add_media(import_file(file, files.at(i))); + imported = true; + project_changed = true; + } } if (imported) { undo_stack.push(ta); diff --git a/panels/project.h b/panels/project.h index 13d49f7f0..46ba522eb 100644 --- a/panels/project.h +++ b/panels/project.h @@ -53,7 +53,7 @@ public: ~Project(); bool is_focused(); void clear(); - QTreeWidgetItem* import_file(QString url); + QTreeWidgetItem* import_file(QString url, QString imported_filename); void new_sequence(TimelineAction* ta, Sequence* s, bool open, QTreeWidgetItem* parent); QString get_next_sequence_name(); void delete_media(QTreeWidgetItem* item); diff --git a/playback/cacher.cpp b/playback/cacher.cpp index 6ebc170b9..fb77894bf 100644 --- a/playback/cacher.cpp +++ b/playback/cacher.cpp @@ -360,7 +360,7 @@ void cache_clip_worker(Clip* clip, long playhead, bool write_A, bool write_B, bo } void close_clip_worker(Clip* clip) { - // closes ffmpeg file handle and frees any memory used for caching + // closes ffmpeg file handle and frees any memory used for caching MediaStream* ms = clip->media->get_stream_from_file_index(clip->media_stream); if (clip->stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { sws_freeContext(clip->sws_ctx); diff --git a/project/clip.h b/project/clip.h index 2fcb247db..a149b2fba 100644 --- a/project/clip.h +++ b/project/clip.h @@ -58,7 +58,7 @@ struct Clip long getLength(); Media* media; // attached media int media_stream; - Sequence* sequence; + Sequence* sequence; // other variables (should be "duplicated" in copy()) QList effects;