show loading icon for proxy generation

This commit is contained in:
itsmattkc
2019-03-26 22:32:24 +11:00
parent 6b40a4ccf8
commit 091889fbe0
19 changed files with 310 additions and 148 deletions
+9 -2
View File
@@ -63,7 +63,8 @@ QString get_channel_layout_name(int channels, uint64_t layout) {
Media::Media() :
root(false),
type(-1)
type(-1),
disable_thumbnail_(false)
{
}
@@ -230,6 +231,11 @@ void Media::set_name(const QString &n) {
}
}
void Media::disable_thumbnail(bool disable)
{
disable_thumbnail_ = disable;
}
double Media::get_frame_rate(int stream) {
switch (get_type()) {
case MEDIA_TYPE_FOOTAGE:
@@ -308,7 +314,8 @@ QVariant Media::data(int column, int role) {
if (column == 0) {
if (get_type() == MEDIA_TYPE_FOOTAGE) {
Footage* f = to_footage();
if (f->video_tracks.size() > 0
if (!disable_thumbnail_
&& f->video_tracks.size() > 0
&& f->video_tracks.at(0).preview_done) {
return QIcon(QPixmap::fromImage(f->video_tracks.at(0).video_preview));
}
+2
View File
@@ -60,6 +60,7 @@ public:
int get_type();
const QString& get_name();
void set_name(const QString& n);
void disable_thumbnail(bool disable);
double get_frame_rate(int stream = -1);
int get_sampling_rate(int stream = -1);
@@ -95,6 +96,7 @@ private:
QString folder_name;
QString tooltip;
QIcon icon;
bool disable_thumbnail_;
};
#endif // MEDIA_H
+19 -12
View File
@@ -20,23 +20,24 @@
#include "proxygenerator.h"
#include "global/path.h"
#include "project/previewgenerator.h"
#include "ui/mainwindow.h"
#include <QDir>
#include <QFileInfo>
#include <QtMath>
#include <QStatusBar>
#include <QDebug>
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
}
#include <QDir>
#include <QFileInfo>
#include <QtMath>
#include <QStatusBar>
#include <QDebug>
#include "global/path.h"
#include "project/previewgenerator.h"
#include "ui/mediaiconservice.h"
#include "ui/mainwindow.h"
// TODO provide more codecs than just this one
enum AVCodecID temp_enc_codec = AV_CODEC_ID_PRORES;
ProxyGenerator::ProxyGenerator() : cancelled(false) {}
@@ -123,7 +124,7 @@ void ProxyGenerator::transcode(const ProxyInfo& info) {
enc_ctx->width = qFloor(dec_ctx->width*info.size_multiplier);
enc_ctx->height = qFloor(dec_ctx->height*info.size_multiplier);
enc_ctx->sample_aspect_ratio = dec_ctx->sample_aspect_ratio;
enc_ctx->pix_fmt = enc_codec->pix_fmts[0];
enc_ctx->pix_fmt = avcodec_find_best_pix_fmt_of_list(enc_codec->pix_fmts, dec_ctx->pix_fmt, 1, nullptr);
enc_ctx->framerate = dec_ctx->framerate;
enc_ctx->time_base = in_stream->time_base;
out_stream->time_base = in_stream->time_base;
@@ -356,9 +357,15 @@ void ProxyGenerator::run() {
// set skip to false
skip = false;
// set media icon to animated loading icon
olive::media_icon_service->SetMediaIcon(info.media, ICON_TYPE_LOADING);
// transcode proxy
transcode(info);
// set media icon back to video
olive::media_icon_service->SetMediaIcon(info.media, ICON_TYPE_VIDEO);
// we're finished with this proxy, remove it
proxy_queue.removeFirst();