Commit Graph
79 Commits
Author SHA1 Message Date
itsmattkc 898ea25e89 finished merge of viewer and footage 2021-04-06 13:08:56 +10:00
itsmattkc 4066fcba90 began merging footage and viewer 2021-04-05 16:41:37 +10:00
itsmattkc cfbf563b2e ensure cache modified time is accurate 2021-02-22 00:23:34 +11:00
itsmattkc d7c5ac4b44 implement entire project in nodes
Project items are now represented directly in nodes opening up more versatility and possibilities. This is the first iteration of this and will be buggy. Need to test thoroughly.
2021-02-15 21:31:57 +11:00
itsmattkc 81c1922911 use strings to connect nodes
This makes the node system somewhat more high-level with the intent of making
working with them far more flexible and stable. By making the architecture more
abstracted, it becomes far less rigid which should allow us to do even more
with it and make it much less crash prone.
2021-02-09 15:48:37 +11:00
itsmattkc 57aa53cc79 ensure blocks are transformed when hashing
Fixes cache glitch
2021-01-18 10:45:07 +11:00
itsmattkc 91740dd823 reworked all timeline commands
I'll be honest, this stuff probably caused a lot of crashes. Objects were constantly created and destroyed without the foresight that other commands might be using them. This should fix a lot of that.
2021-01-15 14:36:21 +11:00
itsmattkc b83677e319 moved input signals to graph to prevent signal desyncs 2021-01-14 10:32:42 +11:00
itsmattkc f7883bd02c began some rewrites to timeline drawing 2021-01-14 10:30:20 +11:00
itsmattkc fbdda3d6d4 various code cleanups 2021-01-13 12:05:05 +11:00
itsmattkc 8f729203fc some timeline refactoring, preparing for rewrites 2021-01-09 11:41:33 +11:00
itsmattkc 3337be07e5 use QVector instead of QList for block cache 2021-01-09 10:41:13 +11:00
itsmattkc 181235f6ce began new infrastructure
Yep, this is another one of my "famous" sweeping rewrites. Expect things to break.

Goals for this are:
- Greatly simplify node connections (particularly with arrays) so the code requires less maintenance/is more stable
- Redesign node structure to address issues where UI would stall for lengthy periods of time
- Less reliance on shared ptrs/greater reliance on QObject system for inheritance/memory management
- General code cleanup and improvements
2021-01-05 11:20:38 +11:00
itsmattkc 75d4cd899b use hardcoded namespace
The macro defined namespaces confused the hell out of lupdate and more or less broke translations permanently. Looks like the only way we can do it is to have a hardcoded namespace, which goes against my instinct, but honestly how likely is it that we'll change the namespace anyway (I guess forks might want to do it, but that's their problem ;) )
2020-11-17 20:24:42 +11:00
itsmattkc d241090a9f finally updated the copyright year 2020-11-17 20:13:22 +11:00
itsmattkc 1b9bf6d92c switched many QLists for QVectors
Minor optimization
2020-11-16 16:17:43 +11:00
itsmattkc 13dd31d5be began rewrite of renderer inner workings 2020-11-06 20:18:10 +11:00
itsmattkc 0d102defab tracks: use node label instead of separate name string 2020-10-10 20:17:25 +11:00
itsmattkc 4204910796 nodes: link edges to IDs rather than objects
Allows code to know whether the connected parameters has been removed or
not.
2020-10-02 16:04:50 +10:00
itsmattkc f0928814fc track: store height in "units" rather than pixels
Fixes DPI scalability issue if a project ever moved from a display with
one DPI to another.
2020-08-22 00:23:46 +10:00
itsmattkc de74adeb5e nodes: improved changed signal processing
Improves stability and cache reliability.

Earlier iterations were prone to skipping necessary signals (usually
leading to some sort of assert fail), particularly when track
optimizations were used. Those optimizations have been moved to the
viewer node so there's a higher degree of control over which signals
get optimized and in which ways.
2020-07-16 00:32:00 +10:00
itsmattkc 593316876f track: save and load track heights to and from project files 2020-06-05 16:12:00 +10:00
itsmattkc b143b39869 track: provide control over invalidation when setting length 2020-06-05 15:21:11 +10:00
itsmattkc de3288893d renderer: move waveform generation into worker and mutex the waveform
Addresses scheduling issues where a backend might be closed (or even
destroyed) before it processes a waveform signal from a worker. Requires
extra multithreading code.
2020-06-05 15:18:14 +10:00
itsmattkc 0e87762afa waveforms: moved waveform to track rather than block
This is a much more robust and thread-safe system of storing the waveforms.
2020-06-04 18:03:21 +10:00
itsmattkc f2050a0342 timeline: optimized rippling workarea, rippling to in/out, and the ripple tool
Use cache shift functionality introduced in previous commit to optimize
timeline usage.
2020-06-02 04:24:12 +10:00
itsmattkc a62960ecc0 track: block length changed signals until the cache can be invalidated
Optimization, prevents unnecessary processing.
2020-06-01 13:08:08 +10:00
itsmattkc c2e47a296c timeline: heavily optimized and improved nearly all timeline optimizations
Features a lot of timeline-related cache optimizations as well as general
optimizations and improvements in timeline behavior. Should improve
usability significantly.
2020-06-01 04:42:59 +10:00
itsmattkc acee6c5958 timeline: reworked ripple/edit to behavior and documented some track behavior 2020-05-31 01:21:08 +10:00
itsmattkc 8b872e7c29 track: smarter block detection code
Improves on the code before it in reliability (perhaps at the expense of some
cycles).
2020-05-25 22:12:25 +10:00
itsmattkc 863ae1b913 a first attempt at a new render system 2020-05-14 14:43:03 +10:00
itsmattkc 74d252c5c0 nodes: use defined categories rather than arbitrary string based 2020-05-05 22:12:15 +10:00
itsmattkc aecfa842c3 nodes: moved hashing to nodes so they can override behavior if they wish 2020-04-30 01:56:08 +10:00
itsmattkc ac3f49a845 nodes: moved matrix input on "video input" elsewhere
Rather than plugging a matrix into the video input node, the matrix is now
multiplied by the video input using a math node. This is probably more
sensible from a user perspective.

This also means the renderer is tolerant of texture sizes that are not equal
to the sequence size, however most nodes will downsample the texture to the
sequence size (and if not, it will be downsampled once it is cached). Textures
will still *always* be in reference space and the sequence's format. This seems
like the best compromise between backend and frontend congruity.
2020-04-27 04:11:24 +10:00
itsmattkc f61321d68b nodes/timeline: correctly detect when tracks are removed from the graph
Fixes several segfaults that could result from this occurring.
2020-04-27 01:01:12 +10:00
itsmattkc 53ae25a7cb nodes: optimize node graph changes by only updating from inputs that changed
A huge optimization that ensures only the parts of a node graph that have
changed get pushed to the renderer. For thread-safety, the node graph is
copied elsewhere so that users can make changes asynchronously and the graph
can update when its threads are ready. Up until now, if an input value changed,
every node's values would be re-copied, or worse, if a connection was changed,
the entire graph would be recopied. This has been negligible in testing since
we've been largely testing with small graphs, but for massive projects, it's
important that this be as optimized as possible.
2020-04-26 04:16:15 +10:00
itsmattkc 9d9825d8e1 trackviewitem: receive signal when mute is changed from another source 2020-04-19 16:26:48 +10:00
itsmattkc 1aa87cbda6 various: encapsulate all code in the olive namespace to avoid name collisions
Large-scale code cleanup. Also adds a license to the top of all files that were
missing it.
2020-04-06 15:29:53 +10:00
itsmattkc 2bda306866 timeline/various: implemented block copy/paste
Implemented the ability to copy/paste blocks/clips in the timeline. This did
require some large scale changes and reworking of the copy/paste system
introduced a few commits ago, but should be largely functional now.
2020-03-31 02:19:05 +11:00
itsmattkc 38a30b584a timeline: implemented some base ripple delete functionality 2020-03-07 18:07:55 +11:00
itsmattkc 7bf2422c44 moved timeline tracktypes into timelinecommon.h 2020-01-06 15:34:12 +11:00
itsmattkc 2b24fae26f implemented vertical "zooming" in the TimelineWidget and CurveView
This comes in the form of changing the vertical scale in the CurveView and
adjusting all track heights in the Timeline.
2019-12-31 00:23:28 +11:00
itsmattkc 323718bc11 moved timeline undoable commands to using the new NodeAddCommand
Previous iteration used some "magic code" that added clips automatically to the
timeline. This was functional but ultimately outside of the undo commands'
control meaning nodes could be infinitely added and abandoned. This makes the
add process part of the undo command which means it's all undoable as the user
would expect.
2019-12-14 00:04:57 +11:00
itsmattkc 79c2953662 implemented track locking in the timeline widget 2019-12-11 16:34:38 +11:00
itsmattkc 7117616635 allow track muting 2019-12-11 13:54:40 +11:00
itsmattkc 58bcbca4c5 wrote mechanisms that allow the tracks to be resized from the trackview 2019-12-08 15:14:43 +11:00
itsmattkc 351d4a246e use NodeInputArray for tracks as well
These were introduced for the new Block system and make just as much sense for
the Track system. They've now been implemented for both.
2019-12-06 20:34:19 +11:00
itsmattkc a8f435bc5c started removing track_input from track 2019-12-06 04:34:03 +11:00
itsmattkc c32a1c8be2 removed last of the NodeOutput dependencies
Since all Nodes have an output that provides all output values now, we now
never need to add an output from a Node derivative. These changes remove the
last of them and disable the ability to add more outputs from a derivative.
2019-12-06 04:21:55 +11:00
itsmattkc d25dda5275 removed all dependence on NodeOutputs
If Nodes only have the one output, we don't need to do so much differentiation
between them. Previous iteration used outputs as like a distinct function
within a Node (e.g. length output would return one result, buffer output would
produce a different result - each run different code to produce their results).
Now in this iteration, it's more accurate to say a Node is just one function
(which seems more appropriate for a node system anyway).
2019-12-06 00:23:26 +11:00