Commit Graph
100 Commits
Author SHA1 Message Date
itsmattkc 420e01002e dialogs: fixed regression that broke audio 2020-01-25 13:40:23 +11:00
itsmattkc 3f85ce8a7a diskmanager: clearing disk cache at runtime will correctly signal renderers
Clearing the disk cache in the preferences will correctly communicate to
renderers that those frames are now deleted.
2020-01-25 12:18:46 +11:00
itsmattkc c26070bfb5 appveyor: set TRAVIS_COMMIT for upload.sh 2020-01-25 00:49:04 +11:00
itsmattkc 3cac4dfb51 appveyor: use skip_tags to skip continuous 2020-01-24 14:47:40 +11:00
itsmattkc ca63e6ff89 appveyor: don't build continuous and follow redirects when downloading 2020-01-24 13:12:14 +11:00
itsmattkc 6a6587d3e3 appveyor: force locale to make grep work 2020-01-24 12:57:57 +11:00
itsmattkc d56f425d9c travis: cache brew packages to save time on mac builds 2020-01-24 12:31:43 +11:00
itsmattkc f8ad15013a appveyor: exit script on compile failure 2020-01-24 12:05:14 +11:00
itsmattkc 149d125e39 msvc: updated code for higher warning level 2020-01-24 12:00:55 +11:00
itsmattkc 66ad2749af travis: fixed broken if statement 2020-01-24 10:20:56 +11:00
itsmattkc e5d6395a4f travis: fixed syntax error 2020-01-24 10:10:15 +11:00
itsmattkc 5d1b379cb8 cmake: use high warning level in msvc 2020-01-24 01:37:06 +11:00
itsmattkc a629b1839d rendercanceldialog: pass through qshowevent 2020-01-24 01:36:52 +11:00
itsmattkc da2597610d CI: test artifact system 2020-01-24 01:13:03 +11:00
itsmattkc a3c932693a exportdialog: use wait for close code from previous commit when closing the
export dialog
2020-01-22 19:51:57 +11:00
itsmattkc 24f7eeb210 renderer: implemented function to wait for workers in the main thread
The workers run in separate threads meaning if any significant change is made
(e.g. parameters changing, or even closing the program), these workers may still
be mid-render. This is particularly problematic when closing since the nodes a
worker is rendering may be deleted mid-render. Render backends now have a
function that pauses the main thread (but starts a second event loop so the UI
isn't frozen) until the worker threads are all finished. This way, massive
changes can be made safely without race conditions.
2020-01-22 17:11:17 +11:00
itsmattkc fdbaa75dff renderer: allow parameters to be changed mid-session 2020-01-22 14:05:37 +11:00
itsmattkc 8932a5abeb preferences: allow users to set the default still image length 2020-01-21 14:31:45 +11:00
itsmattkc 5d4535b06d travis: use libopenimageio2-dev package 2020-01-21 03:03:01 +11:00
itsmattkc 80d684870f travis: added opengl devel 2020-01-21 02:58:37 +11:00
itsmattkc 868a7d33ed Merge branch 'master' of https://github.com/olive-editor/olive 2020-01-21 02:48:46 +11:00
itsmattkc f4567a9a5b travis: added appropriate linux dependencies 2020-01-21 02:48:22 +11:00
itsmattkc 28d0aecd0e openglcolorprocessor: delete texture when context is about to be destroyed 2020-01-20 16:09:29 +11:00
itsmattkc 7a973b9b47 appveyor: use package cache libs 2020-01-20 06:40:50 +11:00
itsmattkc cfff198503 Merge branch 'version-from-cmake' of https://github.com/eszlari/olive into eszlari-version-from-cmake 2020-01-20 06:07:46 +11:00
itsmattkc 7c9c670b00 appveyor: fixed various issues with win64 builds 2020-01-20 05:48:43 +11:00
itsmattkc c0300371c7 ffmpegdecoder: fixed flawed debug line 2020-01-20 04:58:39 +11:00
itsmattkc 6eab464abb appveyor: create windows installer 2020-01-20 04:48:10 +11:00
itsmattkc d706bef0a1 appveyor: create deployment package 2020-01-20 04:41:56 +11:00
itsmattkc 562891c391 renderer: handle ffmpeg returning a zero aspect ratio
We try to handle aspect ratios in metadata (e.g. stretching 1440x1080 videos
out to 1920x1080 when requested), and FFmpeg will usually return a 1/1
aspect ratio even if it can't determine an aspect ratio. However, as mentioned
in the documentation, sometimes it returns a 0/0 aspect ratio when it can't
determine an aspect ratio, which we didn't handle and would lead to the code
allocating a buffer with a 0px height. This commit handles both 1/1 and 0/0
aspect ratios in accordance with the FFmpeg documentation.

Reference: https://www.ffmpeg.org/doxygen/4.0/structAVFrame.html#a62f9c20541a83d37db7072126ff0060d
2020-01-20 04:07:42 +11:00
itsmattkc cd06b2f4ac rational: validate values when constructed with AVRational
`rational` is supposed to "fix signs" and "reduce" whenever its values are set,
but I neglected to do this when its values were set by an AVRational. Now it
will do so on both.
2020-01-20 04:07:09 +11:00
itsmattkc 649ee04eef appveyor: acquire ffmpeg from zeranoe and include 2020-01-20 03:33:17 +11:00
itsmattkc 7948af1fc6 appveyor: add qt to path and cache vcpkg packages 2020-01-20 02:32:08 +11:00
itsmattkc a2aee3cf5c appveyor: get 64-bit packages and use vcpkg file in cmake 2020-01-20 01:23:55 +11:00
itsmattkc 1c5a11b80b appveyor: use jom and integrate vcpkg packages 2020-01-20 00:50:32 +11:00
itsmattkc 1dfac0ea7f timeline: removed unused variable in undo command 2020-01-19 23:52:23 +11:00
itsmattkc 48e6fd3955 travis: added error handling in build script 2020-01-19 23:37:36 +11:00
itsmattkc 52f060418e use vs2017 in windows builds 2020-01-19 23:09:03 +11:00
itsmattkc d59c730f4f update dependencies and path for linux/mac builds 2020-01-19 23:08:48 +11:00
itsmattkc cdb4de1513 travis: use xenial as the appimage base 2020-01-19 23:08:23 +11:00
itsmattkc 8f4910a7c8 travis: update linux dep install code 2020-01-19 22:20:30 +11:00
itsmattkc 6c280cc5e0 travis: test mac build without explicit path set 2020-01-19 22:14:20 +11:00
itsmattkc 1e3de12fb7 Merge branch 'master' of https://github.com/olive-editor/olive 2020-01-19 22:06:46 +11:00
itsmattkc 7877febac4 began rewrite of appveyor build 2020-01-19 22:04:53 +11:00
itsmattkc 61c697689b addressed linker issue on some versions of gcc 2020-01-19 22:00:34 +11:00
itsmattkc 4697b98980 fixed gcc compile issues 2020-01-19 20:39:48 +11:00
itsmattkc 1101b58ee8 allow setting of pixel format/ocio method/sample format in preferences
Implementation isn't perfect yet, viewer/renderer doesn't update yet when
the preference is changed so a sequence needs to be re-opened for the change to
take effect.
2020-01-18 03:37:36 +11:00
itsmattkc e6b45c75c3 fixed bug where scrubbed frames would be cached but not committed to the hashmap 2020-01-17 18:13:49 +11:00
itsmattkc 3c139b8274 fixed bug where deleting clips in currently caching sequences would fail to
cache when something took its place
2020-01-17 14:12:13 +11:00
itsmattkc f8f932112c fixed bug where the node remove with exclusive deps command would never run 2020-01-17 13:56:45 +11:00
itsmattkc 0bc176fd62 use less threads on cache
By using one thread per logical CPU thread, we seemed to completely saturate
the CPU which would kill the performance of the main/GUI thread (despite the
other threads being low priority). We now use half of the logical threads, which
still sees good CPU usage and minimal performance impact while allowing the
main thread to respond to user actions.
2020-01-17 04:37:47 +11:00
itsmattkc 653709dc84 try to index media immediately on import
Since indexing is supplemental, it can be made a background task that can occur
at more or less any time. So we run it as soon as possible.
2020-01-17 03:58:29 +11:00
itsmattkc 63b3c60017 allow editing sequence properties in projectexplorer 2020-01-16 15:01:13 +11:00
itsmattkc c6710b1359 correctly update the panel subtitles based on the media connected 2020-01-16 14:57:16 +11:00
itsmattkc 6771a2f1cb implemented footage loading from projects
Footage is a special case where the node parameters can reference objects that
exist outside of the graph. Therefore specific code is needed to
serialize/deserialize.
2020-01-15 18:26:42 +11:00
itsmattkc 75a9291cd2 refactored import function for greater robustness
The import function was written early on in the rewrite as a multithreaded
background task that was considered somewhat flawed. While it worked for the
most part, there were possibilities of race conditions that could have
potentially been fatal, particularly since media could theoretically be
deleted while the import/probe tasks were running in the background.

With the save/load functions coming in, it became even more complicated as
projects may include metadata about the footage that can't be implemented
easily when the footage is imported/probed in the background. Making importing
a modal task fixes all of these issues, it's still done in a background thread
to not hang the GUI thread, but the GUI thread can be briefly "paused" in a
user friendly way so that all these functions can be safer.
2020-01-15 15:19:14 +11:00
itsmattkc 16904c976f serialize rationals correctly and move block name to a node input
Since rationals aren't a known Qt format, the QVariant container can't
automatically convert them to and from strings (for XML serialization). We have
to hijack these functions and do the conversion manually for those types.

Also moved the block name type to a node input, which means it's serialized
and copied by default (I'm not sure why it wasn't already like this).
2020-01-14 00:59:49 +11:00
itsmattkc 0ea98be443 ensure objects are in the correct thread when loading
Since we load in a separate thread, when the QObject based objects are
instantiated, they're created with affinity to that separate thread. Now we
specifically ensure they are moved to the main thread after their creation.
2020-01-14 00:10:21 +11:00
itsmattkc 16878e3c25 implemented much of the project loading logic
Still not functional, but much of the groundwork is done.
2020-01-13 04:09:06 +11:00
itsmattkc bb57884cac added save functions to various classes
Each class is responsible for its own saving and loading from the XML data
in order to reduce the complexity of the save code.
2020-01-12 18:36:31 +11:00
itsmattkc fa95a61c7b implemented cancel feedback in project saving
The cancel button now sends a signal to the saving thread to stop.
2020-01-12 16:34:35 +11:00
itsmattkc 00b5672639 implemented saving UI
Implemented the file dialog, save progress dialog, and separate thread to save
in (saving needs to be done in a separate thread so the main/GUI thread doesn't
get blocked).
2020-01-12 16:26:05 +11:00
itsmattkc ca89e2b818 use lossless compression on indexed frames
We use Qt's built in zlib compression on the fastest setting (it was found that
higher compression took 5x as long with a negligible decrease in size). This
helps keep disk cache sizes low.
2020-01-12 04:21:07 +11:00
itsmattkc 3b2aa33960 store indexed frames in their native format
While there are clear efficiencies in storing the frame out of the codec,
there's little benefit to storing it in a format higher than its native pixel
format since the pixel conversion is generally fairly quick. This commit will
index all frames in their native pixel format.
2020-01-12 03:57:29 +11:00
itsmattkc 1c5d55012b video renderer will always render frames closest to the playhead first
A few commits ago, the render behavior was changed to only render within a
user-specified range of the playhead. This works well, but it would still
render from the start of the range (usually before the playhead) to the end,
meaning it couldn't keep up with the playhead as well as it should. This
commit prioritizes frames close to the playhead and renders outwards to
address this.
2020-01-12 01:14:56 +11:00
itsmattkc 0823c84fb2 acknowledge video stream start times 2020-01-11 17:44:52 +11:00
itsmattkc 5daf126e8d completed hybrid index system 2020-01-11 03:45:58 +11:00
itsmattkc 5798349f92 began hybrid indexing system
This index system will have awareness of the disk cache state and be able to
fill in and store frames as necessary while keeping the disk cache under
user defined limits.
2020-01-11 03:20:46 +11:00
itsmattkc 3f1326abe5 restored disk cache default limit to a sane number
It was temporarily set very low to test its behavior in extreme conditions.
2020-01-11 00:38:53 +11:00
itsmattkc 594b1a2b58 use sample aspect ratio correctly 2020-01-11 00:16:54 +11:00
itsmattkc ba94ea51cd read and utilize the aspect ratio metadata from video files 2020-01-11 00:08:16 +11:00
itsmattkc d32306f88b only disk cache around the playhead 2020-01-10 20:35:48 +11:00
itsmattkc ea42ca36f5 don't segregate disk cached frames by sequence
Allows disk cached frames to be re-used in any context if their hashes are
perfect matches.
2020-01-09 23:36:53 +11:00
itsmattkc 362cb9daef made auto-deleting cache on close an option
Previously we had no disk management whatsoever, so we cleared the cache on
every close just to prevent clogging up tester disk space. Now that we are
implementing disk management, there are better things to do on close regarding
disk cache. However, some users may still wish for the app to delete the cache
on close, so it's provided as an option.
2020-01-09 21:00:04 +11:00
itsmattkc 9c2c384833 created disk manager class
This is a singleton class that will manage the disk cache to ensure the size
stays at sane levels.
2020-01-09 20:20:47 +11:00
itsmattkc 7df52b7fd5 added disk preferences pane and the ability to set the disk cache location 2020-01-09 15:51:59 +11:00
itsmattkc b233bdf8c9 a fairly decent node auto-positioning algorithm, not perfect, but a good start 2020-01-09 04:03:47 +11:00
itsmattkc 7018973d09 basic auto-positioning implementation
Not perfect by any means, but nodes are now automatically placed in relation to
their surroundings and connections.
2020-01-09 01:41:23 +11:00
itsmattkc 1b34c5566d anchor node graphics item by their center
Makes auto-positioning them somewhat easier.
2020-01-09 01:40:06 +11:00
itsmattkc b697d2faec implemented settings for exporting ONLY video or ONLY audio 2020-01-08 02:59:30 +11:00
itsmattkc b8aabb7e01 updated exporter to work with new frame flow 2020-01-08 02:27:47 +11:00
itsmattkc c8baf4aa3e implemented rubberband zoom in timeline 2020-01-07 20:24:07 +11:00
itsmattkc 5bdc631da8 fixed bug caused by uninitialized variable in tempoprocessor 2020-01-07 20:23:45 +11:00
itsmattkc d9572fa4e5 only allow splitting clips 2020-01-07 19:04:24 +11:00
itsmattkc a616aaa182 correctly affect speed/reversing when shuttling audio 2020-01-07 16:41:30 +11:00
itsmattkc c938055293 fixed exporter connections, some of which have changed in recent commits 2020-01-07 12:42:43 +11:00
itsmattkc e09ff4abf6 handle transition track movement
Only allow transitions to move tracks if their attached blocks are moving
with them.
2020-01-07 03:06:51 +11:00
itsmattkc 2941dbff48 handle transitions that have been set to zero length
Transition is removed wholesale if its length is set to zero.
2020-01-07 02:28:31 +11:00
itsmattkc ee392e11c6 implemented transition moving
For dual transitions, this will shift around the mid point.
2020-01-07 02:08:35 +11:00
itsmattkc 5d8be03970 implemented support for trimming transitions 2020-01-07 01:47:58 +11:00
itsmattkc e71697f693 fixed bug in ripple remove undo command where blocks deleted at the start of
the track would be restored at the end
2020-01-06 18:13:56 +11:00
itsmattkc d3ed7f9863 hash the transition's progress
Since the transition progress directly affects the resulting image, it's
important to include it in the frame hash.
2020-01-06 17:25:38 +11:00
itsmattkc 8358d7d221 moved progress calculations from openglworker to transitionblock
These functions are universal transition functions that have use outside of
the OpenGL workers.
2020-01-06 16:35:45 +11:00
itsmattkc 8391a732b1 automatically store block connections in the transitionblock class
Convenience code that automatically returns valid blocks if they're connected.
2020-01-06 16:29:14 +11:00
itsmattkc 464dfb9be0 fixed audio renderer with new speed system 2020-01-06 16:16:36 +11:00
itsmattkc 402f031be2 fix connections for new tracktype namespace 2020-01-06 15:43:21 +11:00
itsmattkc 7bf2422c44 moved timeline tracktypes into timelinecommon.h 2020-01-06 15:34:12 +11:00
itsmattkc dae09abf45 use speed value instead of media out value
This functions more or less identically to using a media out value, but the
desired speed is preserved through block length changes, even if the block's
length is reduced to zero (i.e. no rounding errors).
2020-01-06 15:21:27 +11:00
itsmattkc 31b60664a7 Merge branch 'merge-timeline-and-viewer' 2020-01-04 02:45:26 +11:00
itsmattkc 0463106187 began timeline edit tool 2020-01-03 21:17:51 +11:00