fixed crash with missing media

This commit is contained in:
itsmattkc
2018-07-19 20:44:52 +01:00
parent 7e9e4ece87
commit a14c24ad27
3 changed files with 26 additions and 12 deletions
+12 -5
View File
@@ -28,21 +28,28 @@ void PreviewGenerator::parse_media() {
if (avcodec_find_decoder(fmt_ctx->streams[i]->codecpar->codec_id) == NULL) {
qDebug() << "[ERROR] Unsupported codec in stream %d.\n";
} else {
MediaStream* ms = new MediaStream();
ms->preview_done = false;
ms->file_index = i;
MediaStream* ms = media->get_stream_from_file_index(i);
bool append = false;
if (ms == NULL) {
ms = new MediaStream();
ms->preview_done = false;
ms->file_index = i;
append = true;
}
if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
bool infinite_length = (fmt_ctx->streams[i]->avg_frame_rate.den == 0);
ms->video_width = fmt_ctx->streams[i]->codecpar->width;
ms->video_height = fmt_ctx->streams[i]->codecpar->height;
ms->video_frame_rate = (infinite_length) ? 0 : av_q2d(fmt_ctx->streams[i]->avg_frame_rate);
ms->infinite_length = infinite_length;
media->video_tracks.append(ms);
if (append) media->video_tracks.append(ms);
} else if (fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
ms->audio_channels = fmt_ctx->streams[i]->codecpar->channels;
ms->audio_layout = fmt_ctx->streams[i]->codecpar->channel_layout;
ms->audio_frequency = fmt_ctx->streams[i]->codecpar->sample_rate;
media->audio_tracks.append(ms);
if (append) media->audio_tracks.append(ms);
} else {
delete ms;
}
}
}
+13 -7
View File
@@ -122,6 +122,16 @@ void Project::new_sequence(TimelineAction *ta, Sequence *s, bool open, QTreeWidg
project_changed = true;
}
void Project::start_preview_generator(QTreeWidgetItem* item, Media* media) {
// set up throbber animation
MediaThrobber* throbber = new MediaThrobber(item);
PreviewGenerator* pg = new PreviewGenerator(item, media);
connect(pg, SIGNAL(set_icon(int)), throbber, SLOT(stop(int)));
connect(pg, SIGNAL(finished()), pg, SLOT(deleteLater()));
pg->start(QThread::LowPriority);
}
QTreeWidgetItem* Project::import_file(QString file) {
QTreeWidgetItem* item = new_item();
Media* m = new Media();
@@ -129,13 +139,8 @@ QTreeWidgetItem* Project::import_file(QString file) {
m->name = file.mid(file.lastIndexOf('/')+1);
set_media_of_tree(item, m);
// set up throbber animation
MediaThrobber* throbber = new MediaThrobber(item);
// generate waveform/thumbnail in another thread
PreviewGenerator* pg = new PreviewGenerator(item, m);
connect(pg, SIGNAL(set_icon(int)), throbber, SLOT(stop(int)));
pg->start(QThread::LowPriority);
start_preview_generator(item, m);
return item;
}
@@ -541,7 +546,8 @@ bool Project::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
find_loaded_folder_by_id(folder)->addChild(item);
}
m->ready = true;
// analyze media to see if it's the same
start_preview_generator(item, m);
loaded_media.append(m);
}
+1
View File
@@ -82,6 +82,7 @@ private:
QTreeWidgetItem* find_loaded_folder_by_id(int id);
void add_recent_project(QString url);
void get_media_from_table(QList<QTreeWidgetItem*> items, QList<QTreeWidgetItem*>& list, int type);
void start_preview_generator(QTreeWidgetItem* item, Media* media);
private slots:
void rename_media(QTreeWidgetItem* item, int column);
void clear_recent_projects();