diff --git a/.appveyor/build.bat b/.appveyor/build.bat
deleted file mode 100644
index fa4e48ecc..000000000
--- a/.appveyor/build.bat
+++ /dev/null
@@ -1,117 +0,0 @@
-REM Get git hash in variable [this seems to be the most efficient way]
-git rev-parse --short=8 HEAD > hash.txt
-git rev-parse HEAD > longhash.txt
-set /p GITHASH= < hash.txt
-set /p GITLONGHASH= < longhash.txt
-set /p TRAVIS_COMMIT= < longhash.txt
-
-REM Set up Visual Studio x64 environment
-call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
-
-REM Install 64-bit packages
-set VCPKG_DEFAULT_TRIPLET=x64-windows
-
-REM Hack to only install release builds for time
-echo set(VCPKG_BUILD_TYPE release) >> C:\Tools\vcpkg\triplets\x64-windows.cmake
-
-REM Install Open*IO libraries
-vcpkg install opencolorio
-vcpkg install openimageio
-
-REM Integrate libraries
-cd c:\tools\vcpkg
-vcpkg integrate install
-cd %APPVEYOR_BUILD_FOLDER%
-
-REM Acquire FFmpeg
-set FFMPEG_VER=ffmpeg-4.2.3-win64
-curl https://ffmpeg.zeranoe.com/builds/win64/dev/%FFMPEG_VER%-dev.zip > %FFMPEG_VER%-dev.zip
-curl https://ffmpeg.zeranoe.com/builds/win64/shared/%FFMPEG_VER%-shared.zip > %FFMPEG_VER%-shared.zip
-7z x %FFMPEG_VER%-dev.zip
-7z x %FFMPEG_VER%-shared.zip
-
-REM Acquire Google Crashpad
-git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
-set PATH=%PATH%;%APPVEYOR_BUILD_FOLDER%\depot_tools
-
-REM Run `fetch` through cmd /c since fetch is a batch file that seems to call exit
-cmd /c fetch crashpad
-cd crashpad
-cmd /c gn gen out/Default
-
-REM Patch to build a dynamic release instead of a static release
-ren out\Default\toolchain.ninja toolchain.ninja.old
-sed "s/${cflags_c}/${cflags_c} \/MD/g" out\Default\toolchain.ninja.old > out\Default\toolchain.ninja
-
-REM Build Crashpad
-ninja.exe -C out/Default
-cd ..
-
-REM Add Qt, FFmpeg, and Crashpad to path
-set PATH=%PATH%;C:\Qt\5.13.2\msvc2017_64\bin;%APPVEYOR_BUILD_FOLDER%\%FFMPEG_VER%-dev;%APPVEYOR_BUILD_FOLDER%\crashpad;%APPVEYOR_BUILD_FOLDER%\crashpad\out\Default
-
-REM Run cmake
-cmake -G "Ninja" . -DCMAKE_TOOLCHAIN_FILE=c:/Tools/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo
-
-REM Build with Ninja
-ninja.exe || exit /B 1
-
-REM If this is a pull request, no further packaging/deploying needs to be done
-if NOT "%APPVEYOR_PULL_REQUEST_NUMBER%" == "" goto end
-
-REM Create Crashpad symbol file and upload it
-C:\msys64\usr\bin\wget.exe https://github.com/google/breakpad/blob/master/src/tools/windows/binaries/dump_syms.exe?raw=true -O dump_syms.exe
-dump_syms app\olive-editor.pdb > olive-editor.sym
-curl -F symfile=@olive-editor.sym https://olivevideoeditor.org/crashpad/symbols.php
-
-REM Start building package
-mkdir olive-editor
-cd olive-editor
-copy ..\app\olive-editor.exe .
-copy ..\app\olive-editor.pdb .
-copy ..\app\crashhandler.exe .
-copy ..\crashpad\out\Default\crashpad_handler.exe .
-windeployqt olive-editor.exe
-copy ..\%FFMPEG_VER%-shared\bin\*.dll .
-copy ..\app\*.dll .
-
-REM Package done, begin deployment
-cd ..
-set PKGNAME=Olive-%GITHASH%-Windows-x86_64
-
-REM Create installer
-copy app\packaging\windows\nsis\* .
-"C:/Program Files (x86)/NSIS/makensis.exe" -V4 -DX64 "-XOutFile %PKGNAME%.exe" olive.nsi
-
-REM Create portable
-copy nul olive-editor\portable
-7z a %PKGNAME%.zip olive-editor
-
-REM If this was a tagged build, upload
-if "%APPVEYOR_REPO_TAG%"=="true" GOTO upload
-
-REM Else, if this is a continuous build, check if this commit is the most recent
-
-REM Force locale to UTF-8 or grep -P fails
-set LC_ALL=en_US.UTF-8
-
-curl -H "Authorization: token %GITHUB_TOKEN%" https://api.github.com/repos/olive-editor/olive/commits/master > repoinfo.txt
-grep -Po '(?^<=: \")(([a-z0-9])\w+)(?=\")' -m 1 repoinfo.txt > latestcommit.txt
-set /p REMOTEHASH= < latestcommit.txt
-if "%REMOTEHASH%"=="%GITLONGHASH%" GOTO upload
-
-REM The previous if statements failed, skip to the end
-GOTO end
-
-:upload
-set /p UPLOADTOOL_BODY= < latestcommit.txt
-
-curl -L https://github.com/probonopd/uploadtool/raw/master/upload.sh > upload.sh
-bash upload.sh Olive*.zip
-bash upload.sh Olive*.exe
-
-:end
-REM Check if this build should set up a debugging session
-IF "%ENABLE_RDP%"=="1" (
- powershell -command "$blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))"
-)
diff --git a/.github/ISSUE_TEMPLATE/01-crash_issue.md b/.github/ISSUE_TEMPLATE/01-crash_issue.md
index 24f1d03ec..d3d24f556 100644
--- a/.github/ISSUE_TEMPLATE/01-crash_issue.md
+++ b/.github/ISSUE_TEMPLATE/01-crash_issue.md
@@ -5,10 +5,12 @@ title: '[CRASH] '
labels: 'Crash, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-build_issue.md b/.github/ISSUE_TEMPLATE/50-build_issue.md
index 556e4cabe..3f50177f3 100644
--- a/.github/ISSUE_TEMPLATE/50-build_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-build_issue.md
@@ -1,17 +1,19 @@
---
name: Build/Packaging
about: >-
- Report an issue related to compiling or packaging (including continuous
- integration). Note that we do not officially support custom build
+ Report an issue related to compiling or packaging.
+ Note that we do not officially support custom build
configurations and may not address issues involving them.
title: '[BUILD] '
labels: 'Building/Packaging, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-cache_issue.md b/.github/ISSUE_TEMPLATE/50-cache_issue.md
index aa67eb877..049da13e6 100644
--- a/.github/ISSUE_TEMPLATE/50-cache_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-cache_issue.md
@@ -8,10 +8,12 @@ title: '[CACHE] '
labels: 'Disk Cache, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-codec_issue.md b/.github/ISSUE_TEMPLATE/50-codec_issue.md
index c0a94eef6..623f24968 100644
--- a/.github/ISSUE_TEMPLATE/50-codec_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-codec_issue.md
@@ -7,10 +7,12 @@ title: '[CODEC] '
labels: 'Codec, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-color_issue.md b/.github/ISSUE_TEMPLATE/50-color_issue.md
index 7fb55c049..e779730a2 100644
--- a/.github/ISSUE_TEMPLATE/50-color_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-color_issue.md
@@ -7,10 +7,12 @@ title: '[COLOR] '
labels: 'Color Management, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-editing_issue.md b/.github/ISSUE_TEMPLATE/50-editing_issue.md
index 08d8cb93f..a96d26652 100644
--- a/.github/ISSUE_TEMPLATE/50-editing_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-editing_issue.md
@@ -7,10 +7,12 @@ title: '[EDIT] '
labels: 'Timeline/Editing, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-export_issue.md b/.github/ISSUE_TEMPLATE/50-export_issue.md
index 9f7544115..22bda9eb2 100644
--- a/.github/ISSUE_TEMPLATE/50-export_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-export_issue.md
@@ -7,10 +7,12 @@ title: '[EXPORT] '
labels: 'Export, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-node_issue.md b/.github/ISSUE_TEMPLATE/50-node_issue.md
index 3d60610aa..a272691d0 100644
--- a/.github/ISSUE_TEMPLATE/50-node_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-node_issue.md
@@ -7,10 +7,12 @@ title: '[NODES] '
labels: 'Nodes/Compositing, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-playback_issue.md b/.github/ISSUE_TEMPLATE/50-playback_issue.md
index 14aa90f62..2b64327c1 100644
--- a/.github/ISSUE_TEMPLATE/50-playback_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-playback_issue.md
@@ -7,10 +7,12 @@ title: '[PLAYBACK] '
labels: 'Playback, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-project_issue.md b/.github/ISSUE_TEMPLATE/50-project_issue.md
index 1cf79b649..b9c9abd11 100644
--- a/.github/ISSUE_TEMPLATE/50-project_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-project_issue.md
@@ -7,10 +7,12 @@ title: '[PROJECT] '
labels: 'Project, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-renderer_issue.md b/.github/ISSUE_TEMPLATE/50-renderer_issue.md
index 4f6ffd0da..a9b4a8413 100644
--- a/.github/ISSUE_TEMPLATE/50-renderer_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-renderer_issue.md
@@ -7,10 +7,12 @@ title: '[RENDER] '
labels: 'Renderer, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/ISSUE_TEMPLATE/50-ui_issue.md b/.github/ISSUE_TEMPLATE/50-ui_issue.md
index 251a65b1e..972f06416 100644
--- a/.github/ISSUE_TEMPLATE/50-ui_issue.md
+++ b/.github/ISSUE_TEMPLATE/50-ui_issue.md
@@ -7,10 +7,12 @@ title: '[UI] '
labels: 'User Interface, Triage'
assignees: ''
---
-**Commit Hash**
+
+
+**Commit Hash**
-**Platform**
+**Platform**
**Summary**
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index f68c7c77a..02d7fd7b5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -158,29 +158,11 @@ jobs:
with:
version: 5.15.1
- - name: Acquire FFmpeg
+ - name: Acquire Dependencies
shell: bash
run: |
- $DOWNLOAD_TOOL https://olivevideoeditor.org/deps/ffmpeg-win.7z
- $EXTRACT_TOOL ffmpeg-win.7z
-
- - name: Acquire OpenColorIO
- shell: bash
- run: |
- $DOWNLOAD_TOOL https://olivevideoeditor.org/deps/ocio-win.7z
- $EXTRACT_TOOL ocio-win.7z
-
- - name: Acquire OpenEXR
- shell: bash
- run: |
- $DOWNLOAD_TOOL https://olivevideoeditor.org/deps/openexr-win.7z
- $EXTRACT_TOOL openexr-win.7z
-
- - name: Acquire OpenImageIO
- shell: bash
- run: |
- $DOWNLOAD_TOOL https://olivevideoeditor.org/deps/oiio-win.7z
- $EXTRACT_TOOL oiio-win.7z
+ $DOWNLOAD_TOOL https://olivevideoeditor.org/deps/dep-win.7z
+ $EXTRACT_TOOL dep-win.7z
- name: Acquire Crashpad
shell: bash
diff --git a/.gitignore b/.gitignore
index eaf33fa1c..88b977edd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,39 @@
-*.pro.user*
-Makefile
-.qmake.stash
-effects/frei0r
-ts/*.qm
-docs
-history
-build/
-.DS_Store
+# CMake artifacts
+/build*/
-.vscode
-.vs
+# Doxygen
+/docs/
+
+# Visual Studio (Code)
+.localhistory/
+.history/
+.vscode/
+.vs/
+/out/
CmakeSettings.json
+# macOS General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Windows folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares (Windows)
+$RECYCLE.BIN/
+
+# Windows shortcuts
+*.lnk
+
#
-# Qt ignores taken from https://github.com/github/gitignore
+# Qt ignores taken from https://github.com/github/gitignore/blob/master/Qt.gitignore
#
# C++ objects and libs
@@ -24,6 +44,7 @@ CmakeSettings.json
*.la
*.lai
*.so
+*.so.*
*.dll
*.dylib
@@ -46,6 +67,8 @@ ui_*.h
*.jsc
Makefile*
*build-*
+*.qm
+*.prl
# Qt unit tests
target_wrapper.*
@@ -65,3 +88,5 @@ compile_commands.json
# QtCreator local machine specific files for imported projects
*creator.user*
+
+*_qmlcache.qrc
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 9b7b9d3ff..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-language: cpp
-
-matrix:
- include:
- - os: linux
- env: ARCH=x86_64
- compiler: gcc
- sudo: require
- dist: xenial
- - os: osx
- osx_image: xcode10.3
- before_cache:
- - brew cleanup
- cache:
- directories:
- - $HOME/Library/Caches/Homebrew
- addons:
- homebrew:
- packages:
- - ffmpeg
- - qt5
- - grep
- - opencolorio
- - openimageio
- update: true
- # Can't build on Windows - affected by https://travis-ci.community/t/current-known-issues-please-read-this-before-posting-a-new-topic/264/10
- # - os: windows
-
-before_install:
- - source ./.travis/before_install.sh
-
-install:
- - source ./.travis/install.sh
-
-script:
- - source ./.travis/script.sh
-
-after_success:
- - source ./.travis/after_success.sh
-
-branches:
- except:
- - # Do not build tags that we create when we upload to GitHub Releases
- - /^(?i:continuous)/
diff --git a/.travis/after_success.sh b/.travis/after_success.sh
deleted file mode 100644
index e189720f2..000000000
--- a/.travis/after_success.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-# Check if there's been a new commit since this build, and if so don't upload it
-
-GREP_PATH=grep
-
-if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
- GREP_PATH=ggrep
-fi
-
-# Get current repo commit from GitHub (problems arose from trying to pipe cURL directly into grep, so we buffer it through a file)
-REMOTE=$(curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/repos/olive-editor/olive/commits/master | $GREP_PATH -Po '(?<=: \")(([a-z0-9])\w+)(?=\")' -m 1 --)
-LOCAL=$(git rev-parse HEAD)
-
-if [ "$TRAVIS_TAG" != "" ] || [ "$REMOTE" == "$LOCAL" ]
-then
- echo "[INFO] Still current. Uploading..."
-
- export UPLOADTOOL_BODY=$(cat release.txt)
-
- # Retrieve upload tool
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
-
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
-
- bash upload.sh Olive*.zip
-
- elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
-
- find appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq
-
- bash upload.sh Olive*.AppImage*
-
- fi
-
-else
-
- echo "[INFO] No longer current. $REMOTE vs $LOCAL - aborting upload."
-
-fi
diff --git a/.travis/before_install.sh b/.travis/before_install.sh
deleted file mode 100644
index 569d5f5bb..000000000
--- a/.travis/before_install.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-
-if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
-
- # Qt 5.11
- sudo add-apt-repository ppa:beineri/opt-qt-5.11.0-xenial -y
-
- # FFmpeg 4.x
- sudo add-apt-repository ppa:jonathonf/ffmpeg-4 -y
-
- # OpenColorIO
- sudo add-apt-repository ppa:olive-editor/opencolorio -y
-
- # Update apt
- sudo apt-get update -qq
-
-fi
diff --git a/.travis/install.sh b/.travis/install.sh
deleted file mode 100644
index 8d57de697..000000000
--- a/.travis/install.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-
-if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
-
- export PATH="/usr/local/opt/qt/bin:/usr/local/opt/python@2/libexec/bin:$PATH"
-
-elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
-
- sudo apt-get -y -o Dpkg::Options::="--force-overwrite" install qt511base qt511multimedia qt511svg qt511tools libavformat-dev libavcodec-dev libavfilter-dev libavutil-dev libswscale-dev libswresample-dev libopencolorio-dev libopenimageio-dev libgl1-mesa-dev
- source /opt/qt*/bin/qt*-env.sh
-
- # Acquire latest cmake (apt somehow gets the wrong version?)
- wget -c https://github.com/Kitware/CMake/releases/download/v3.17.2/cmake-3.17.2-Linux-x86_64.sh -O cmake.sh
- chmod +x cmake.sh
- ./cmake.sh --skip-license --prefix=cmake --exclude-dir
- export PATH=$PWD/cmake/bin:$PATH
-
-fi
diff --git a/.travis/script.sh b/.travis/script.sh
deleted file mode 100644
index 4a7a7fa2c..000000000
--- a/.travis/script.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/bash
-
-# linuxdeployqt uses this for naming the file
-export VERSION=$(git rev-parse --short=8 HEAD)
-
-if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
-
- # Generate Makefile
- cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo
-
- # Make
- make -j$(sysctl -n hw.ncpu)
-
- # Handle compile failure
- if [ "$?" != "0" ]
- then
- exit 1
- fi
-
- BUNDLE_NAME=Olive.app
-
- # Move bundle to working directory
- mv app/$BUNDLE_NAME .
-
- # Move Qt deps into bundle
- macdeployqt $BUNDLE_NAME
-
- # Fix other deps that macdeployqt missed
- curl -fLOSs --retry 3 https://github.com/arl/macdeployqtfix/raw/master/macdeployqtfix.py
- python2 macdeployqtfix.py $BUNDLE_NAME/Contents/MacOS/Olive /usr/local/Cellar/qt5/5.*/
-
- # Fix deps on crash handler
- python2 macdeployqtfix.py $BUNDLE_NAME/Contents/MacOS/olive-crashhandler /usr/local/Cellar/qt5/5.*/
-
- # Fix OpenEXR libs that seem to be missed by both macdeployqt _and_ macdeployqtfix
- cd $BUNDLE_NAME/Contents/Frameworks
- exrlib=(libImath-*.dylib libHalf-*.dylib libIexMath-*.dylib libIex-*.dylib libIlmThread-*.dylib)
-
- for a in ${exrlib[@]}; do
- for b in ${exrlib[@]}; do
- install_name_tool -change @rpath/$b @executable_path/../Frameworks/$b $a
- done
- done
-
- cd ../../..
-
- # Distribute in zip
- zip -r Olive-$VERSION-macOS.zip $BUNDLE_NAME
-
-elif [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
-
- # Generate Makefile
- cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo
-
- # Make
- make -j$(nproc)
-
- # Handle compile failure
- if [ "$?" != "0" ]
- then
- exit 1
- fi
-
- # Use `make install` on `appdir` to place files in the correct place
- make DESTDIR=appdir install
-
- # Download linuxdeployqt
- wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
- chmod a+x linuxdeployqt-continuous-x86_64.AppImage
-
- unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
-
- # Use linuxdeployqt to set up dependencies
- ./linuxdeployqt-continuous-x86_64.AppImage appdir/usr/local/share/applications/*.desktop -extra-plugins=imageformats/libqsvg.so -appimage
-
-fi
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e9e35c5a9..ef3600f54 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,12 +1,29 @@
# Contributing to Olive
-Thank you for your interest in contributing to Olive! In order to keep the code as readable and maintainable as possible, code submitted should abide by the following standards:
+Thank you for your interest in contributing to Olive!
-### Standards
+## Reporting issues
-When contributing to Olive, it's recommended to use the following rules:
+Bug reports help to make the software more stable and usable.
+Please read the pinned [issue #1175](https://github.com/olive-editor/olive/issues/1175)
+for guidelines before you create a new issue.
-* The code style generally follows the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) including, but not limited to:
+## Writing code
+
+Code contributions are welcome. Note that the code base is rapidly changing in
+the current stage of development however. There is some documentation in the form
+of code comments, including Javadoc in header files. Feel free to reach out via
+an issue or pull request if you have questions about the architecture or
+implementation details.
+
+### Code Standards
+
+In order to keep the code as readable and maintainable as possible, code
+submitted should abide by the following standards:
+
+* The code style generally follows the
+ [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)
+ including, but not limited to:
* Indentation is 2 spaces wide, spaces only (no tabs)
* `lowercase_underscored_variable_names`
* `lowercase_underscored_functions()` or `SentenceCaseFunctions()`
diff --git a/app/core.cpp b/app/core.cpp
index 0a7e9fd9e..608b79da7 100644
--- a/app/core.cpp
+++ b/app/core.cpp
@@ -924,6 +924,7 @@ bool Core::SaveProjectAs(ProjectPtr p)
{
QFileDialog fd(main_window_, tr("Save Project As"));
+ fd.setAcceptMode(QFileDialog::AcceptSave);
fd.setNameFilter(GetProjectFilter(false));
if (fd.exec() == QDialog::Accepted) {
diff --git a/app/render/colormanager.cpp b/app/render/colormanager.cpp
index d38d9d7fc..30a0b90db 100644
--- a/app/render/colormanager.cpp
+++ b/app/render/colormanager.cpp
@@ -69,11 +69,10 @@ OCIO::ConstConfigRcPtr ColorManager::GetDefaultConfig()
void ColorManager::SetUpDefaultConfig()
{
- OCIO_SET_C_LOCALE_FOR_SCOPE;
-
if (!qgetenv("OCIO").isEmpty()) {
// Attempt to set config from "OCIO" environment variable
try {
+ OCIO_SET_C_LOCALE_FOR_SCOPE;
default_config_ = OCIO::Config::CreateFromEnv();
return;
@@ -91,7 +90,10 @@ void ColorManager::SetUpDefaultConfig()
qDebug() << "Extracting default OCIO config to" << dir;
- default_config_ = CreateConfigFromFile(QDir(dir).filePath(QStringLiteral("config.ocio")));
+ {
+ OCIO_SET_C_LOCALE_FOR_SCOPE;
+ default_config_ = CreateConfigFromFile(QDir(dir).filePath(QStringLiteral("config.ocio")));
+ }
}
void ColorManager::SetConfig(const QString &filename)
diff --git a/app/ui/style/olive-dark/png/new.128.png b/app/ui/style/olive-dark/png/new.128.png
index 68cf53297..7b8c6b8e8 100644
Binary files a/app/ui/style/olive-dark/png/new.128.png and b/app/ui/style/olive-dark/png/new.128.png differ
diff --git a/app/ui/style/olive-dark/png/new.16.png b/app/ui/style/olive-dark/png/new.16.png
index 08465e682..d69c1e387 100644
Binary files a/app/ui/style/olive-dark/png/new.16.png and b/app/ui/style/olive-dark/png/new.16.png differ
diff --git a/app/ui/style/olive-dark/png/new.32.png b/app/ui/style/olive-dark/png/new.32.png
index da2c2927d..314977971 100644
Binary files a/app/ui/style/olive-dark/png/new.32.png and b/app/ui/style/olive-dark/png/new.32.png differ
diff --git a/app/ui/style/olive-dark/png/new.64.png b/app/ui/style/olive-dark/png/new.64.png
index ddb69f86f..9c3e97453 100644
Binary files a/app/ui/style/olive-dark/png/new.64.png and b/app/ui/style/olive-dark/png/new.64.png differ
diff --git a/app/ui/style/olive-dark/svg/new.svg b/app/ui/style/olive-dark/svg/new.svg
index 82429f30b..933cf4cab 100644
--- a/app/ui/style/olive-dark/svg/new.svg
+++ b/app/ui/style/olive-dark/svg/new.svg
@@ -1,6 +1,4 @@
-
-
diff --git a/app/ui/style/olive-light/png/new.128.png b/app/ui/style/olive-light/png/new.128.png
index 867ee4520..3f20d71e5 100644
Binary files a/app/ui/style/olive-light/png/new.128.png and b/app/ui/style/olive-light/png/new.128.png differ
diff --git a/app/ui/style/olive-light/png/new.16.png b/app/ui/style/olive-light/png/new.16.png
index 1d478fe4c..dbdf400b2 100644
Binary files a/app/ui/style/olive-light/png/new.16.png and b/app/ui/style/olive-light/png/new.16.png differ
diff --git a/app/ui/style/olive-light/png/new.32.png b/app/ui/style/olive-light/png/new.32.png
index c63d512f7..d02612005 100644
Binary files a/app/ui/style/olive-light/png/new.32.png and b/app/ui/style/olive-light/png/new.32.png differ
diff --git a/app/ui/style/olive-light/png/new.64.png b/app/ui/style/olive-light/png/new.64.png
index 7f6461164..02178dbe3 100644
Binary files a/app/ui/style/olive-light/png/new.64.png and b/app/ui/style/olive-light/png/new.64.png differ
diff --git a/app/ui/style/olive-light/svg/new.svg b/app/ui/style/olive-light/svg/new.svg
index 482ad42da..f600b7e82 100644
--- a/app/ui/style/olive-light/svg/new.svg
+++ b/app/ui/style/olive-light/svg/new.svg
@@ -1,6 +1,4 @@
-
-
diff --git a/appveyor.yml b/appveyor.yml
deleted file mode 100644
index 436930972..000000000
--- a/appveyor.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-version: "{build}"
-image: Visual Studio 2017
-environment:
- TRAVIS_REPO_SLUG: olive-editor/olive
-
-# Hack to not build the "continuous" tag (https://github.com/appveyor/ci/issues/486)
-# FIXME: Will unfortunately skip release tags
-skip_tags: true
-
-install:
-- cd C:\Tools\vcpkg
-- git pull
-- .\bootstrap-vcpkg.bat
-- cd %APPVEYOR_BUILD_FOLDER%
-build_script:
-- cmd: .appveyor\build.bat
-#artifacts:
-#- path: Olive*.zip
-# name: Olive Portable
-#- path: Olive*.exe
-# name: Olive Installer
-cache: c:\tools\vcpkg\installed\
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 000000000..750c17e64
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,62 @@
+# Docker Images
+
+Olive uses Docker containers for continuous integration on Linux.
+No Docker images are involved for the Windows and macOS CI.
+
+## Overview
+
+`ci-common` is the shared build image with GCC, Clang and packages that are
+needed by most dependent images. It is used to compile Olive's dependencies
+in a controlled environment. The final CI image `ci-olive` is assembled from
+images maintained by the Olive team as well as from
+[aswf-docker](https://github.com/AcademySoftwareFoundation/aswf-docker/).
+
+Dependency hierarchy:
+
+1. `ci-common`
+2. `ci-otio`, `ci-crashpad`, `ci-ffmpeg`
+3. `ci-olive`
+
+## Usage
+
+Pull images from [Docker Hub](https://hub.docker.com/u/olivevideoeditor):
+
+```
+docker pull olivevideoeditor/ci-common:2
+docker pull olivevideoeditor/ci-package-otio
+docker pull olivevideoeditor/ci-package-crashpad
+docker pull olivevideoeditor/ci-package-ffmpeg:4.2.4
+docker pull olivevideoeditor/ci-olive:2021.2
+```
+
+Use `ci-olive` image as local build container, by mounting working copy at
+`~/olive` into guest system at `/opt/olive/olive`:
+
+```bash
+docker run --rm -it -v ~/olive:/opt/olive/olive olivevideoeditor/ci-olive:2021.2
+mkdir build
+cd build
+cmake .. -G Ninja
+cmake --build .
+```
+
+Rebuild all images locally:
+
+```
+cd docker
+docker build -t olivevideoeditor/ci-common:2 -f ci-common/Dockerfile .
+docker build -t olivevideoeditor/ci-package-otio -f ci-otio/Dockerfile .
+docker build -t olivevideoeditor/ci-package-crashpad -f ci-crashpad/Dockerfile .
+docker build -t olivevideoeditor/ci-package-ffmpeg:4.2.4 -f ci-ffmpeg/Dockerfile .
+docker build -t olivevideoeditor/ci-olive:2021.2 -f ci-olive/Dockerfile .
+```
+
+Publish images:
+
+```
+docker push olivevideoeditor/ci-common:2
+docker push olivevideoeditor/ci-package-otio
+docker push olivevideoeditor/ci-package-crashpad
+docker push olivevideoeditor/ci-package-ffmpeg:4.2.4
+docker push olivevideoeditor/ci-olive:2021.2
+```
diff --git a/docker/ci-ffmpeg/Dockerfile b/docker/ci-ffmpeg/Dockerfile
index 8a664ca02..0c3d05273 100644
--- a/docker/ci-ffmpeg/Dockerfile
+++ b/docker/ci-ffmpeg/Dockerfile
@@ -9,8 +9,17 @@ ARG CI_COMMON_VERSION=2
ARG FFMPEG_VERSION=4.2.4
ARG NASM_VERSION=2.15.03
ARG YASM_VERSION=1.3.0
-ARG LAME_VERSION=3.100
+ARG X265_VERSION=3.4
+ARG OGG_VERSION=1.3.4
ARG OPUS_VERSION=1.3.1
+ARG VORBIS_VERSION=1.3.7
+ARG THEORA_VERSION=1.1.1
+ARG VPX_VERSION=1.9.0
+ARG WEBP_VERSION=1.1.0
+ARG LAME_VERSION=3.100
+ARG XVID_VERSION=1.3.5
+ARG OPENJPEG_VERSION=2.3.1
+ARG LIBPNG_VERSION=1.6.31
# TODO: Make version of x264, x265 and libvpx selectable?
ARG NUM_JOBS=2
@@ -21,8 +30,17 @@ ARG CI_COMMON_VERSION
ARG FFMPEG_VERSION
ARG NASM_VERSION
ARG YASM_VERSION
-ARG LAME_VERSION
+ARG X265_VERSION
+ARG OGG_VERSION
ARG OPUS_VERSION
+ARG VORBIS_VERSION
+ARG THEORA_VERSION
+ARG VPX_VERSION
+ARG WEBP_VERSION
+ARG LAME_VERSION
+ARG XVID_VERSION
+ARG OPENJPEG_VERSION
+ARG LIBPNG_VERSION
# TODO: Make version of x264, x265 and libvpx selectable?
ARG NUM_JOBS=2
@@ -43,8 +61,17 @@ ENV OLIVE_ORG=${OLIVE_ORG} \
FFMPEG_VERSION=${FFMPEG_VERSION} \
NASM_VERSION=${NASM_VERSION} \
YASM_VERSION=${YASM_VERSION} \
- LAME_VERSION=${LAME_VERSION} \
+ X265_VERSION=${X265_VERSION} \
+ OGG_VERSION=${OGG_VERSION} \
OPUS_VERSION=${OPUS_VERSION} \
+ VORBIS_VERSION=${VORBIS_VERSION} \
+ THEORA_VERSION=${THEORA_VERSION} \
+ VPX_VERSION=${VPX_VERSION} \
+ WEBP_VERSION=${WEBP_VERSION} \
+ LAME_VERSION=${LAME_VERSION} \
+ XVID_VERSION=${XVID_VERSION} \
+ OPENJPEG_VERSION=${OPENJPEG_VERSION} \
+ LIBPNG_VERSION=${LIBPNG_VERSION} \
NUM_JOBS=${NUM_JOBS} \
OLIVE_INSTALL_PREFIX=/usr/local
diff --git a/docker/scripts/build_ffmpeg.sh b/docker/scripts/build_ffmpeg.sh
index 1f2c36a91..7853903b3 100644
--- a/docker/scripts/build_ffmpeg.sh
+++ b/docker/scripts/build_ffmpeg.sh
@@ -46,6 +46,7 @@ wait
# Set up libx264
{
+ # TODO: Checkout stable branch instead of master?
git clone --depth 1 "https://code.videolan.org/videolan/x264.git"
cd x264
./configure \
@@ -53,7 +54,7 @@ wait
--enable-shared \
--enable-pic \
--disable-cli
- make -j${NUM_JOBS}
+ make
make install
cd ..
rm -rf x264
@@ -63,18 +64,121 @@ wait
{
# BitBucket dropped support for Mercurial repos
#hg clone https://bitbucket.org/multicoreware/x265
- git clone --depth 1 "https://bitbucket.org/multicoreware/x265_git.git" x265
+ # Need to fetch tags (off by default for shallow clones) or checkout a tag to avoid pkg-config error
+ git clone --depth 1 --branch "${X265_VERSION}" "https://bitbucket.org/multicoreware/x265_git.git" x265
cd x265/build/linux
cmake \
-G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="${OLIVE_INSTALL_PREFIX}" \
../../source
- make -j${NUM_JOBS}
+ make
make install
cd ../../..
rm -rf x265
} &
+# Set up libogg
+{
+ curl -fLsS -o libogg.tar.gz "http://downloads.xiph.org/releases/ogg/libogg-${OGG_VERSION}.tar.gz"
+ tar xf libogg.tar.gz
+ rm -f libogg.tar.gz
+ cd libogg*
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared
+ make
+ make install
+ cd ..
+ rm -rf libogg*
+} &
+
+# Set up libopus
+{
+ curl -fLsS -o opus.tar.gz "https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz"
+ tar xf opus.tar.gz
+ rm -f opus.tar.gz
+ cd opus*
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared
+ make
+ make install
+ cd ..
+ rm -rf opus*
+} &
+
+# join jobs, libvorbis and libtheora depend on libogg
+wait
+
+# Set up libvorbis
+{
+ curl -fLsS -o libvorbis.tar.gz "http://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VERSION}.tar.gz"
+ tar xf libvorbis.tar.gz
+ rm -f libvorbis.tar.gz
+ cd libvorbis*
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --with-ogg="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared
+ make
+ make install
+ cd ..
+ rm -rf libvorbis*
+} &
+
+# Set up libtheora
+{
+ curl -fLsS -o libtheora.tar.gz "http://downloads.xiph.org/releases/theora/libtheora-${THEORA_VERSION}.tar.gz"
+ tar xf libtheora.tar.gz
+ rm -f libtheora.tar.gz
+ cd libtheora*
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --with-ogg="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared
+ make
+ make install
+ cd ..
+ rm -rf libtheora*
+} &
+
+# Set up libvpx
+{
+ git clone --depth 1 --branch "v${VPX_VERSION}" "https://chromium.googlesource.com/webm/libvpx.git"
+ cd libvpx
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared \
+ --enable-pic \
+ --enable-vp8 \
+ --enable-vp9 \
+ --enable-vp9-highbitdepth \
+ --as=yasm \
+ --disable-examples \
+ --disable-unit-tests \
+ --disable-docs \
+ --disable-install-bins
+ make
+ make install
+ cd ..
+ rm -rf libvpx
+} &
+
+### Set up libwebp
+{
+ curl -fLsS -o libwebp.tar.gz "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${WEBP_VERSION}.tar.gz"
+ tar xf libwebp.tar.gz
+ rm -f libwebp.tar.gz
+ cd libwebp*
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}" \
+ --enable-shared
+ make
+ make install
+ cd ..
+ rm -rf libwebp*
+} &
+
# Set up libmp3lame
{
curl -fLsS -o lame.tar.gz "https://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION}/lame-${LAME_VERSION}.tar.gz"
@@ -86,45 +190,54 @@ wait
--enable-shared \
--enable-nasm \
--disable-frontend
- make -j${NUM_JOBS}
+ make
make install
cd ..
rm -rf lame*
} &
-# Set up libopus
+### Set up xvid
{
- curl -fLsS -o opus.tar.gz "https://archive.mozilla.org/pub/opus/opus-${OPUS_VERSION}.tar.gz"
- tar xf opus.tar.gz
- rm -f opus.tar.gz
- cd opus*
+ curl -fLsS -o xvidcore.tar.gz "http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz"
+ tar xf xvidcore.tar.gz
+ rm -f xvidcore.tar.gz
+ cd xvidcore/build/generic
./configure \
--prefix="${OLIVE_INSTALL_PREFIX}" \
- --enable-shared
- make -j${NUM_JOBS}
+ --bindir="${OLIVE_INSTALL_PREFIX}/bin"
+ make
make install
- cd ..
- rm -rf opus*
+ cd ../../..
+ rm -rf xvidcore
} &
-# Set up libvpx
+# Set up openjpeg
{
- git clone --depth 1 "https://chromium.googlesource.com/webm/libvpx.git"
- cd libvpx
- ./configure \
- --prefix="${OLIVE_INSTALL_PREFIX}" \
- --enable-shared \
- --enable-pic \
- --enable-vp9-highbitdepth \
- --as=yasm \
- --disable-examples \
- --disable-unit-tests \
- --disable-docs \
- --disable-install-bins
- make -j${NUM_JOBS}
+ curl -fLsS -o openjpeg.tar.gz "https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz"
+ tar xf openjpeg.tar.gz
+ rm -f openjpeg.tar.gz
+ cd openjpeg*
+ cmake \
+ -DBUILD_THIRDPARTY:BOOL=ON \
+ -DCMAKE_INSTALL_PREFIX="${OLIVE_INSTALL_PREFIX}" \
+ .
+ make
make install
cd ..
- rm -rf libvpx
+ rm -rf openjpeg*
+} &
+
+# Set up libpng
+{
+ git clone --depth 1 "https://git.code.sf.net/p/libpng/code" libpng --branch "v${LIBPNG_VERSION}"
+ cd libpng
+ ./autogen.sh
+ ./configure \
+ --prefix="${OLIVE_INSTALL_PREFIX}"
+ make check
+ make install
+ cd ..
+ rm -rf libpng
} &
# join all jobs
@@ -142,11 +255,16 @@ PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure \
--enable-version3 \
--enable-shared \
--enable-libfreetype \
- --enable-libmp3lame \
- --enable-libopus \
- --enable-libvpx \
--enable-libx264 \
--enable-libx265 \
+ --enable-libopus \
+ --enable-libvorbis \
+ --enable-libtheora \
+ --enable-libvpx \
+ --enable-libwebp \
+ --enable-libmp3lame \
+ --enable-libxvid \
+ --enable-libopenjpeg \
--prefix="${OLIVE_INSTALL_PREFIX}" \
--extra-libs=-lpthread \
--extra-libs=-lm \
diff --git a/docker/scripts/common/install_yumpackages.sh b/docker/scripts/common/install_yumpackages.sh
index f5003675c..064c5e1f1 100644
--- a/docker/scripts/common/install_yumpackages.sh
+++ b/docker/scripts/common/install_yumpackages.sh
@@ -26,6 +26,7 @@ yum install --setopt=tsflags=nodocs -y \
libxkbcommon-x11-devel \
libXScrnSaver libXScrnSaver-devel \
mesa-libGL-devel \
+ numactl-devel \
openjpeg2-devel \
pciutils-devel \
pulseaudio-libs pulseaudio-libs-devel \