Commit Graph
135 Commits
Author SHA1 Message Date
itsmattkc a1f5c85f49 various: use simpler/smarter XML reading functions
Should address any XML parsing issues and allows for simpler, more maintainable
code. Should also address a crash that could occur when pasting nodes that had
inputs that weren't copied.
2020-03-17 02:38:17 +11:00
itsmattkc 34f60e639a nodeview: implemented copying/pasting nodes
Re-uses XML-based project saving/loading functions to store nodes, their
parameters, and their connections in a text-based format in the clipboard.
2020-03-15 20:01:58 +11:00
itsmattkc dc37389d02 timeline: implemented in/out points 2020-03-08 01:06:45 +11:00
itsmattkc f800ca38c3 crashhandler: renamed executable in case it's packaged in a global
application folder like /usr/bin
2020-03-02 16:07:44 +11:00
itsmattkc 3ba27b5fc1 crashhandler: removed old test code 2020-02-28 13:40:35 +11:00
itsmattkc ff69e69be4 crashhandler: updated for linux 2020-02-28 13:37:02 +11:00
itsmattkc c32ed5955c implemented simple crash handler 2020-02-28 13:21:32 +11:00
itsmattkc 8cb74a8218 functiontimer: created convenience class to help when profiling functions 2020-02-20 17:47:33 +11:00
itsmattkc 03bdf01357 decoder/renderer: no longer index automatically as part of the retrieve
functions

Indexing is a lengthy process and had a high chance of getting RenderWorkers
stuck doing it rather than being responsive to cache requests. This commit
introduces a system where workers never index media, but instead signal that
media is not ready to their RenderBackends which ensure that the media gets
indexed and re-queues the affected frames when those indexes are ready.
2020-02-19 11:44:29 +11:00
itsmattkc 22046535ca various: added hooks so that various lengthy functions could be cancelled from another thread 2020-02-17 02:10:12 +11:00
itsmattkc 2ba928fa1f code cleanup: renamed qtversionabstraction.h to qtutils.h 2020-02-08 00:13:38 +11:00
itsmattkc b713ab47eb keyframes: only update active frames even from curve and param editor
When adjusting a slider, keyframe time, or curve value, it is undesirable to
re-cache the entire affected area while the user is still dragging UI objects.
Since the video is unlikely to be playing, the priority must go to the
currently active frame so the user gets visual feedback on the rendered image
as soon as possible. This was implemented in some areas, but this commit should
have that functionality in all areas.
2020-01-25 17:51:34 +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 e6b45c75c3 fixed bug where scrubbed frames would be cached but not committed to the hashmap 2020-01-17 18:13:49 +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 d32306f88b only disk cache around the playhead 2020-01-10 20:35:48 +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 7bf2422c44 moved timeline tracktypes into timelinecommon.h 2020-01-06 15:34:12 +11:00
itsmattkc ef91f81e0f implemented cursors in the timeline
Note: this does not use the cursor SVGs in app/ui/cursors since I was never
really satisfied with them. They're kept for posterity for the time being.
2020-01-03 17:58:07 +11:00
itsmattkc 7f796bd99f revised video renderer's invalidate cache to use ranges rather than discrete
frames

Previously, when the video renderer received a dirty cache signal, it would
proceed to extract all frames from the range and queue them. However, this could
be extremely slow for long ranges since it had to iterate through the entire
range and calculate the individual frames it contained. Now, we use the same
range combining system as audio and automatically calculate the next frame
within the range only when necessary. Essentially the same work, but split up
over time and done only when needed leading to no discernible UI pause when
invalidating cache.
2020-01-03 15:50:43 +11:00
itsmattkc db146b376a implemented core UI caching feedback functionality
Not a perfect implementation yet, but this shows UI feedback on what frames are
cached and which ones aren't.
2020-01-03 05:38:20 +11:00
itsmattkc e41fdbd6e3 implemented autoscrolling derivatives of TimelineViewBase around the playhead 2019-12-31 19:17:40 +11:00
itsmattkc 994d8be961 implemented bezier interpolation into parameters inputs 2019-12-28 23:21:07 +11:00
itsmattkc 855fe5e93f fully implemented setting keyframes and standard values in the NodeParamView
Widget now supports creating keyframe and standard values, supports dragging
from sliders (not creating an undo command for each drag), and everything is
undoable.
2019-12-27 14:51:21 +11:00
itsmattkc 61c60e00d6 various small code cleanups and improvements
Largely refactoring work to make the code somewhat nicer to work with.
2019-12-26 19:00:08 +11:00
itsmattkc 520b8b46fa place timecode conversion functions into a Timecode class rather than an olive namespace
Code cleanup and improvement.
2019-12-26 17:20:58 +11:00
itsmattkc d4ee33405b implemented speed/duration dialog and most of its functionality
An earlier commit implementing media in and out parameters was primarily for
this addition. A simple control dialog for the clip's speed presentation
reimplemented from the old codebase.
2019-12-17 03:58:12 +11:00
itsmattkc 72f2d06ab3 fixed timecodes showing negative numbers between tokens 2019-12-14 23:13:37 +11:00
itsmattkc 3bfe333878 replaced QString uses with QStringLiteral
Minor code optimization according to Qt documentation.
2019-12-10 00:42:31 +11:00
itsmattkc 4bb874a154 fix sigfpe on timecode function if the timebase isn't valid 2019-12-09 23:43:03 +11:00
itsmattkc 2fe03debec reimplement string timecode to frame number conversion 2019-12-08 00:10:43 +11:00
itsmattkc cbf4d5b8c7 removed reference to deleted file in cmake 2019-12-03 13:07:03 +11:00
itsmattkc 6973919481 removed never used (and slow) qlist-related functions 2019-12-02 01:40:12 +11:00
itsmattkc 2889811b7b improved documentation on DISABLE_COPY_MOVE macros 2019-11-27 09:50:30 +10:00
itsmattkc d5b1768d70 reimplement Q_DISABLE_COPY_MOVE for full compatibility with versions < 5.13
I was under the impression Q_DISABLE_COPY_MOVE was a much older function than
it is. Since we historically target 5.6 and these functions are small
convenience functions, I just implemented them in the actual codebase.
2019-11-24 14:57:57 +09:00
itsmattkc c6d5fbae8c moved timerange functions to timerange class 2019-11-17 12:29:09 +09:00
itsmattkc 0081511f18 Merge branch 'master' of https://github.com/olive-editor/olive 2019-11-15 14:00:06 +09:00
itsmattkc 16f80386e8 added qhash functions for timerange and rational
So these keys can be used in QHash containers, they need functions for how to
create those hashes.
2019-11-15 13:55:05 +09:00
lightyear15 96074d3f3a timerange quick refactor
std::swap can saves some lines of code,
and less code means less to maintain
2019-11-08 22:02:55 +01:00
itsmattkc fea9fb24aa Merge branch 'master' of https://github.com/olive-editor/olive 2019-11-06 09:16:16 +11:00
itsmattkc 663ae56ac4 more coherent render threading for now
Once again, conceptually this system should work, however it does not seem to
be the most efficient and it wouldn't surprise me if the multithreading was
eventually upgraded to an even more coherent system one day. However for
"core principles" this should be fairly decent.
2019-11-03 04:05:43 +11:00
itsmattkc 16ac2fc0e1 sweeping node graph changes for new rendering pipeline
The new rendering pipeline strives to simplify the nodes themselves as much
as possible and move much of the logic to an external rendering engine. This
change removes all of the responsibilities that no longer belong to the
nodes themselves and will soon be folded into the renderer.
2019-11-02 01:39:37 +11:00
lightyear15 2453b1d10c Code Cleanup: common: removing default constructors
As C++11 is the adopted standard, trivial constructors are not needed,
compiler can generate it for us.
2019-10-26 21:39:34 +02:00
itsmattkc 2fdf78df4a implemented preliminary pre-cacher for audio
FFmpegDecoder now implements an "indexer" for audio, which actually just
extracts the raw PCM audio from an audio codec and saves it to disk
2019-10-24 16:36:26 +11:00
itsmattkc 7dec79ceaa various changes to rendering flow and structure 2019-10-23 00:42:52 +11:00
itsmattkc 09b3a1970d underline clips that are linked 2019-10-17 11:07:36 +11:00
itsmattkc 578345693b improved windows functionality 2019-10-16 22:32:51 +11:00
itsmattkc 79d1f99fa8 removed active instance count from rational class 2019-10-11 10:59:19 +11:00
itsmattkc fb585413a5 fixed bug in rational that caused integer overflows 2019-10-11 09:35:28 +11:00