Merge branch 'master' into nodeview-redux
This commit is contained in:
+1
-1
@@ -80,7 +80,7 @@ add_library(libolive-editor
|
||||
# Remove prefix - prevents CMake calling it "liblibolive-editor"
|
||||
set_target_properties(libolive-editor PROPERTIES PREFIX "")
|
||||
|
||||
# Add applicaton
|
||||
# Add application
|
||||
add_executable(olive-editor
|
||||
main.cpp
|
||||
$<TARGET_OBJECTS:libolive-editor>
|
||||
|
||||
@@ -102,7 +102,7 @@ void AudioManager::StartOutput(AudioPlaybackCache *cache, qint64 offset, int pla
|
||||
// Move to output manager's thread
|
||||
device->moveToThread(&output_thread_);
|
||||
|
||||
// Queue to output manger in other thread
|
||||
// Queue to output manager in other thread
|
||||
QMetaObject::invokeMethod(output_manager_,
|
||||
"PullFromDevice",
|
||||
Qt::QueuedConnection,
|
||||
|
||||
@@ -235,7 +235,7 @@ void AudioVisualWaveform::Shift(const rational &from, const rational &to)
|
||||
|
||||
AudioVisualWaveform::Sample AudioVisualWaveform::GetSummaryFromTime(const rational &start, const rational &length) const
|
||||
{
|
||||
// Find mipmap that requries
|
||||
// Find mipmap that requires
|
||||
auto using_mipmap = GetMipmapForScale(length.flipped().toDouble());
|
||||
|
||||
double rate_dbl = using_mipmap->first.toDouble();
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/**
|
||||
* @brief Command-line argument parser
|
||||
*
|
||||
* You may be wondering why we don't use QCommandLineParser instead of a custom implmentation like
|
||||
* You may be wondering why we don't use QCommandLineParser instead of a custom implementation like
|
||||
* this. The reason why is because QCommandLineParser requires a QApplication object of some kind
|
||||
* to already have been created before it can parse anything, but we need to be able to control
|
||||
* whether a QApplication (GUI-mode) or a QCoreApplication (CLI-mode) is created which is set by
|
||||
|
||||
@@ -309,7 +309,7 @@ bool rational::operator<(const rational &rhs) const
|
||||
|
||||
if (rhs == RATIONAL_MAX
|
||||
|| *this == RATIONAL_MIN) {
|
||||
// We will always wither be LESS THAN (true) or EQUAL (false)
|
||||
// We will always either be LESS THAN (true) or EQUAL (false)
|
||||
return (*this != rhs);
|
||||
}
|
||||
|
||||
@@ -342,7 +342,7 @@ bool rational::operator<=(const rational &rhs) const
|
||||
|
||||
if (rhs == RATIONAL_MAX
|
||||
|| *this == RATIONAL_MIN) {
|
||||
// We will always wither be LESS THAN (true) or EQUAL (true)
|
||||
// We will always either be LESS THAN (true) or EQUAL (true)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <QMessageBox>
|
||||
|
||||
#include "config/config.h"
|
||||
#include "core.h"
|
||||
|
||||
namespace olive {
|
||||
|
||||
@@ -53,7 +54,7 @@ DiskCacheDialog::DiskCacheDialog(DiskCacheFolder *folder, QWidget* parent) :
|
||||
row++;
|
||||
|
||||
clear_cache_btn_ = new QPushButton(tr("Clear Disk Cache"));
|
||||
connect(clear_cache_btn_, &QPushButton::clicked, this, &DiskCacheDialog::ClearDiskCache);
|
||||
connect(clear_cache_btn_, &QPushButton::clicked, this, static_cast<void(DiskCacheDialog::*)()>(&DiskCacheDialog::ClearDiskCache));
|
||||
layout->addWidget(clear_cache_btn_, row, 1);
|
||||
|
||||
row++;
|
||||
@@ -86,20 +87,25 @@ void DiskCacheDialog::accept()
|
||||
|
||||
void DiskCacheDialog::ClearDiskCache()
|
||||
{
|
||||
if (QMessageBox::question(this,
|
||||
tr("Clear Disk Cache"),
|
||||
tr("Are you sure you want to clear the disk cache in '%1'?").arg(Config::Current()["DiskCachePath"].toString()),
|
||||
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
|
||||
clear_cache_btn_->setEnabled(false);
|
||||
ClearDiskCache(folder_->GetPath(), this, clear_cache_btn_);
|
||||
}
|
||||
|
||||
if (DiskManager::instance()->ClearDiskCache(folder_->GetPath())) {
|
||||
clear_cache_btn_->setText(tr("Disk Cache Cleared"));
|
||||
void DiskCacheDialog::ClearDiskCache(const QString &path, QWidget *parent, QPushButton *clear_btn)
|
||||
{
|
||||
if (QMessageBox::question(parent,
|
||||
tr("Clear Disk Cache"),
|
||||
tr("Are you sure you want to clear the disk cache in '%1'?").arg(path),
|
||||
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
|
||||
if (clear_btn) clear_btn->setEnabled(false);
|
||||
|
||||
if (DiskManager::instance()->ClearDiskCache(path)) {
|
||||
if (clear_btn) clear_btn->setText(tr("Disk Cache Cleared"));
|
||||
} else {
|
||||
QMessageBox::information(this,
|
||||
QMessageBox::information(parent,
|
||||
tr("Clear Disk Cache"),
|
||||
tr("Disk cache failed to fully clear. You may have to delete the cache files manually."),
|
||||
QMessageBox::Ok);
|
||||
clear_cache_btn_->setText(tr("Disk Cache Partially Cleared"));
|
||||
if (clear_btn) clear_btn->setText(tr("Disk Cache Partially Cleared"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,8 @@ class DiskCacheDialog : public QDialog
|
||||
public:
|
||||
DiskCacheDialog(DiskCacheFolder* folder, QWidget* parent = nullptr);
|
||||
|
||||
static void ClearDiskCache(const QString &path, QWidget *parent, QPushButton *clear_btn = nullptr);
|
||||
|
||||
public slots:
|
||||
virtual void accept() override;
|
||||
|
||||
|
||||
@@ -43,60 +43,67 @@ QString SubtitleParams::GenerateASSHeader()
|
||||
static const int kAssBorderStyle = 1;
|
||||
static const int kAssAlignment = 2;
|
||||
|
||||
static const QString kFormatHeader = QStringLiteral(
|
||||
"[Script Info]\r\n"
|
||||
"; Script generated by %1 %2\r\n"
|
||||
"ScriptType: v4.00+\r\n"
|
||||
"PlayResX: %3\r\n"
|
||||
"PlayResY: %4\r\n"
|
||||
"ScaledBorderAndShadow: yes\r\n"
|
||||
"\r\n"
|
||||
QString ass_code;
|
||||
|
||||
/* ASSv4 header */
|
||||
"[V4+ Styles]\r\n"
|
||||
"Format: Name, "
|
||||
"Fontname, Fontsize, "
|
||||
"PrimaryColour, SecondaryColour, OutlineColour, BackColour, "
|
||||
"Bold, Italic, Underline, StrikeOut, "
|
||||
"ScaleX, ScaleY, "
|
||||
"Spacing, Angle, "
|
||||
"BorderStyle, Outline, Shadow, "
|
||||
"Alignment, MarginL, MarginR, MarginV, "
|
||||
"Encoding\r\n"
|
||||
// Header info
|
||||
ass_code.append(QStringLiteral("[Script Info]\r\n"));
|
||||
ass_code.append(QStringLiteral("; Script generated by %1 %2\r\n").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion()));
|
||||
ass_code.append(QStringLiteral("ScriptType: v4.00+\r\n"));
|
||||
ass_code.append(QStringLiteral("PlayResX: %1\r\n").arg(QString::number(kAssDefaultPlayResX)));
|
||||
ass_code.append(QStringLiteral("PlayResY: %1\r\n").arg(QString::number(kAssDefaultPlayResY)));
|
||||
ass_code.append(QStringLiteral("ScaledBorderAndShadow: yes\r\n"));
|
||||
ass_code.append(QStringLiteral("\r\n"));
|
||||
|
||||
"Style: "
|
||||
"Default," /* Name */
|
||||
"%5,%6," /* Font{name,size} */
|
||||
"&H%7,&H%8,&H%9,&H%10," /* {Primary,Secondary,Outline,Back}Colour */
|
||||
"%11,%12,%13,%14," /* Bold, Italic, Underline, StrikeOut */
|
||||
"100,100," /* Scale{X,Y} */
|
||||
"0,0," /* Spacing, Angle */
|
||||
"%15,1,0," /* BorderStyle, Outline, Shadow */
|
||||
"%16,10,10,10," /* Alignment, Margin[LRV] */
|
||||
"0\r\n" /* Encoding */
|
||||
// ASSv4 header
|
||||
ass_code.append(QStringLiteral("[V4+ Styles]\r\n"));
|
||||
ass_code.append(QStringLiteral("Format: Name, "));
|
||||
ass_code.append(QStringLiteral("Fontname, Fontsize, "));
|
||||
ass_code.append(QStringLiteral("PrimaryColour, SecondaryColour, OutlineColour, BackColour, "));
|
||||
ass_code.append(QStringLiteral("Bold, Italic, Underline, StrikeOut, "));
|
||||
ass_code.append(QStringLiteral("ScaleX, ScaleY, "));
|
||||
ass_code.append(QStringLiteral("Spacing, Angle, "));
|
||||
ass_code.append(QStringLiteral("BorderStyle, Outline, Shadow, "));
|
||||
ass_code.append(QStringLiteral("Alignment, MarginL, MarginR, MarginV, "));
|
||||
ass_code.append(QStringLiteral("Encoding\r\n"));
|
||||
ass_code.append(QStringLiteral("Style: "));
|
||||
|
||||
"\r\n"
|
||||
"[Events]\r\n"
|
||||
"Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n"
|
||||
);
|
||||
// Name
|
||||
ass_code.append(QStringLiteral("Default,"));
|
||||
|
||||
return kFormatHeader.arg(QCoreApplication::applicationName(),
|
||||
QCoreApplication::applicationVersion(),
|
||||
QString::number(kAssDefaultPlayResX),
|
||||
QString::number(kAssDefaultPlayResY),
|
||||
kAssDefaultFont,
|
||||
QString::number(kAssDefaultFontSize),
|
||||
QString::number(kAssDefaultPrimaryColor, 16),
|
||||
QString::number(kAssDefaultSecondaryColor, 16),
|
||||
QString::number(kAssDefaultOutlineColor, 16),
|
||||
QString::number(kAssDefaultBackColor, 16),
|
||||
QString::number(kAssBold),
|
||||
QString::number(kAssItalic),
|
||||
QString::number(kAssUnderline),
|
||||
QString::number(kAssStrike),
|
||||
QString::number(kAssBorderStyle),
|
||||
QString::number(kAssAlignment)
|
||||
);
|
||||
// Font{name,size}
|
||||
ass_code.append(QStringLiteral("%1,%2,").arg(kAssDefaultFont, QString::number(kAssDefaultFontSize)));
|
||||
|
||||
// {Primary,Secondary,Outline,Back}Colour
|
||||
ass_code.append(QStringLiteral("&H%1,&H%2,&H%3,&H%4,").arg(QString::number(kAssDefaultPrimaryColor, 16),
|
||||
QString::number(kAssDefaultSecondaryColor, 16),
|
||||
QString::number(kAssDefaultOutlineColor, 16),
|
||||
QString::number(kAssDefaultBackColor, 16)));
|
||||
|
||||
// Bold, Italic, Underline, StrikeOut
|
||||
ass_code.append(QStringLiteral("%1,%2,%3,%4,").arg(QString::number(kAssBold),
|
||||
QString::number(kAssItalic),
|
||||
QString::number(kAssUnderline),
|
||||
QString::number(kAssStrike)));
|
||||
|
||||
// Scale{X,Y}
|
||||
ass_code.append(QStringLiteral("100,100,"));
|
||||
|
||||
// Spacing, Angle
|
||||
ass_code.append(QStringLiteral("0,0,"));
|
||||
|
||||
// BorderStyle, Outline, Shadow
|
||||
ass_code.append(QStringLiteral("%1,1,0,").arg(QString::number(kAssBorderStyle)));
|
||||
|
||||
// Alignment, Margin[LRV]
|
||||
ass_code.append(QStringLiteral("%1,10,10,10,").arg(QString::number(kAssAlignment)));
|
||||
|
||||
// Encoding
|
||||
ass_code.append(QStringLiteral("0\r\n"));
|
||||
ass_code.append(QStringLiteral("\r\n"));
|
||||
ass_code.append(QStringLiteral("[Events]\r\n"));
|
||||
ass_code.append(QStringLiteral("Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\r\n"));
|
||||
|
||||
return ass_code;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ SliderLabel::SliderLabel(QWidget *parent) :
|
||||
// Allow users to tab to this widget
|
||||
setFocusPolicy(Qt::TabFocus);
|
||||
|
||||
// Add ccustom context menu
|
||||
// Add custom context menu
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
}
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ private:
|
||||
QMatrix4x4 translate_matrix_;
|
||||
|
||||
/**
|
||||
* @breif Scale only matrix.
|
||||
* @brief Scale only matrix.
|
||||
*/
|
||||
QMatrix4x4 scale_matrix_;
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "config/config.h"
|
||||
#include "core.h"
|
||||
#include "dialog/actionsearch/actionsearch.h"
|
||||
#include "dialog/diskcache/diskcachedialog.h"
|
||||
#include "dialog/task/task.h"
|
||||
#include "panel/panelmanager.h"
|
||||
#include "tool/tool.h"
|
||||
@@ -171,6 +172,10 @@ MainMenu::MainMenu(MainWindow *parent) :
|
||||
sequence_cache_item_ = sequence_menu_->AddItem("seqcache", this, &MainMenu::SequenceCacheTriggered);
|
||||
sequence_cache_in_to_out_item_ = sequence_menu_->AddItem("seqcacheinout", this, &MainMenu::SequenceCacheInOutTriggered);
|
||||
|
||||
sequence_menu_->addSeparator();
|
||||
|
||||
sequence_disk_cache_clear_item_ = sequence_menu_->AddItem("seqcacheclear", this, &MainMenu::SequenceCacheClearTriggered);
|
||||
|
||||
//
|
||||
// WINDOW MENU
|
||||
//
|
||||
@@ -614,6 +619,14 @@ void MainMenu::SequenceCacheInOutTriggered()
|
||||
Core::instance()->CacheActiveSequence(true);
|
||||
}
|
||||
|
||||
void MainMenu::SequenceCacheClearTriggered()
|
||||
{
|
||||
DiskCacheDialog::ClearDiskCache(
|
||||
Core::instance()->GetActiveProject()->cache_path(),
|
||||
Core::instance()->main_window()
|
||||
);
|
||||
}
|
||||
|
||||
void MainMenu::HelpFeedbackTriggered()
|
||||
{
|
||||
QDesktopServices::openUrl(QStringLiteral("https://github.com/olive-editor/olive/issues"));
|
||||
@@ -686,6 +699,7 @@ void MainMenu::Retranslate()
|
||||
sequence_menu_->setTitle(tr("&Sequence"));
|
||||
sequence_cache_item_->setText(tr("Cache Entire Sequence"));
|
||||
sequence_cache_in_to_out_item_->setText(tr("Cache Sequence In/Out"));
|
||||
sequence_disk_cache_clear_item_->setText(tr("Clear Disk Cache"));
|
||||
|
||||
// Window menu
|
||||
window_menu_->setTitle(tr("&Window"));
|
||||
|
||||
@@ -179,6 +179,7 @@ private slots:
|
||||
|
||||
void SequenceCacheTriggered();
|
||||
void SequenceCacheInOutTriggered();
|
||||
void SequenceCacheClearTriggered();
|
||||
|
||||
void HelpFeedbackTriggered();
|
||||
|
||||
@@ -249,6 +250,7 @@ private:
|
||||
Menu* sequence_menu_;
|
||||
QAction* sequence_cache_item_;
|
||||
QAction* sequence_cache_in_to_out_item_;
|
||||
QAction* sequence_disk_cache_clear_item_;
|
||||
|
||||
Menu* window_menu_;
|
||||
QAction* window_menu_separator_;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#
|
||||
# Uses { command } & pattern for parallelism https://gist.github.com/thenadz/6c0584d42fb007582fbc
|
||||
#
|
||||
# TOOD: Use advanced options such as LTO? e.g. https://code.videolan.org/videolan/x264/-/blob/master/configure
|
||||
# TODO: Use advanced options such as LTO? e.g. https://code.videolan.org/videolan/x264/-/blob/master/configure
|
||||
# TODO: Enable debug symbols? (Or is it opt-out?)
|
||||
# TODO: Add more ffmpeg libraries? See https://raw.githubusercontent.com/jrottenberg/ffmpeg/master/docker-images/4.2/centos7/Dockerfile
|
||||
|
||||
|
||||
Reference in New Issue
Block a user