itsmattkc
570fa4e5b0
implemented correct value changing in the CurveView widget
2019-12-30 22:22:30 +11:00
itsmattkc
0db13a96ab
implemented a footage viewer
...
Essentially a minor derivation of a viewer type that can automatically view
footage from the project (i.e. not in a sequence).
2019-12-30 20:17:48 +11:00
itsmattkc
55ea4a8177
implemented minor audio keyframing optimization
...
Since updating all input values per sample could be performance costly,
we now only update inputs that are either keyframing or connected to
another node
2019-12-30 20:17:02 +11:00
itsmattkc
e6c47b14f4
implemented audio keyframing
...
This mostly builds on the keyframing we already set up for video, but the
audio renderer will now appropriately updated keyframe inputs per sample in
accordance with keyframe values.
2019-12-30 20:14:45 +11:00
itsmattkc
7cc31e01e4
fixed issue that didn't disable the time slider correctly in the KeyframePropertiesDialog
2019-12-30 16:11:03 +11:00
itsmattkc
cb194b02bc
slider is now appropriately a different color when the widget is disabled
2019-12-30 16:09:21 +11:00
itsmattkc
f7dd751b54
new KeyframePropertiesDialog is now accessible from any KeyframeViewBase derivative
2019-12-30 16:06:13 +11:00
itsmattkc
41927512e9
fixed dodgy implementation of NodeInput::get_keyframe_at_time
...
This function didn't return the intended result. This bug has been fixed in this
commit.
2019-12-30 16:05:24 +11:00
itsmattkc
6ddabbaf3a
implemented keyframe properties dialog
...
Allows finer control over the keyframes and their bezier control handles.
2019-12-30 16:02:51 +11:00
itsmattkc
245aa44efc
implemented support for multilayered keyframes
...
This adds the ability to keyframe more than one value per input (e.g. a vec2,
vec3, etc.) so that you can animate, for example, an X axis separately from a
Y axis.
2019-12-30 04:47:23 +11:00
itsmattkc
ae84067084
reworked NodeInput to accept more than one keyframe "track"
...
To allow keyframing of each axis of a vector 2/3/4, without simply separating
the inputs for each axis, the NodeInputs need to support more than one keyframe
track with the ability to merge them into a single value when necessary.
2019-12-30 02:12:48 +11:00
itsmattkc
994d8be961
implemented bezier interpolation into parameters inputs
2019-12-28 23:21:07 +11:00
itsmattkc
1d3d52db9b
implemented the ability to modify bezier points in the curve editor
2019-12-28 22:40:30 +11:00
itsmattkc
4cd5e103b8
merged KeyframeView and CurveView to use the same base class
...
These classes had a ton of similarities, so they've now been modified to use
a common base class.
2019-12-28 18:47:54 +11:00
itsmattkc
26cafa7936
implemented bulk of curve editor's functionality
...
While certainly not entirely complete yet, this implements most of the UI
functionality of the graph editor.
2019-12-28 18:26:37 +11:00
itsmattkc
b65abe4881
use floor instead of round when calculating frame from cursor
...
Fixes a bug where clicking on the right of a frame would register as clicking
the next frame.
2019-12-28 04:47:27 +11:00
itsmattkc
f96abc2d82
set up sizing defaults
2019-12-28 02:09:23 +11:00
itsmattkc
d82acf9b7e
implemented basic animation curve editor widgets
...
Frontend is largely done, it just needs backend and connecting to other
widgets to function correctly.
2019-12-28 00:27:13 +11:00
itsmattkc
3c9b16555f
created curve editor panel
2019-12-28 00:26:42 +11:00
itsmattkc
bbef9badc7
implemented moving keyframes around in the NodeParamView
...
Can now change the time in the parameter panel.
2019-12-27 22:13:00 +11:00
itsmattkc
97b91d2050
synchronized the keyframeview and nodeparamview scroll to work together
2019-12-27 16:38:40 +11:00
itsmattkc
3e3963dfaa
implemented keyframe type changing
...
Implemented the UI to change a keyframe's type along with the ValueChanged
signals that should result.
2019-12-27 16:37:06 +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
9272858de2
send list to EmitCachedFrameReady() rather than one rational at a time
...
Since EmitCachedFrameReady() makes a copy of the texture, we can economize a lot
by re-using the same copied texture for all the times rather than making a
separate copy for each time.
2019-12-27 05:17:18 +11:00
itsmattkc
a4b3dc2ab4
fixed bug that caused flickering textures
...
The ViewerGLWidget would receive raw GLuint textures while most of Olive uses
an OpenGLTexture C++ wrapper. Unfortunately this would lead to the C++ wrapper
getting destroyed since its instance wasn't kept in the ViewerGLWidget. This
meant by the time the ViewerGLWidget would re-draw, the texture would have
already been destroyed leading to some black frames. This is now fixed.
2019-12-27 05:11:42 +11:00
itsmattkc
549427353d
updates to video render backend to speed up single frame previews
...
Allows single frame previews and improves communication with receiving
viewer classes.
2019-12-27 05:11:21 +11:00
itsmattkc
fe3c155b98
sliders now have feedback on whether they're being dragged or not
2019-12-27 04:15:27 +11:00
itsmattkc
e9663f953e
improved intelligent keyframe cache invalidation
...
Some minor code cleanups and also implementing invalidation when removing or
moving a keyframe.
2019-12-27 03:26:27 +11:00
itsmattkc
cc62c1edc9
implemented context sensitive value invalidation in NodeInput
...
NodeInput uses keyframe information to intelligently determine exactly which
time ranges must be re-cached.
2019-12-27 03:00:13 +11:00
itsmattkc
227db9d653
updated ParamPanel to be able to be connected with ViewerPanel and TimelinePanel
2019-12-27 02:41:31 +11:00
itsmattkc
e32376a8b7
updated NodeInputs to use a standard value as well as keyframed values
...
Previously the non-keyframed value was stored as a static keyframe but this
introduced issues when an input was in a state of keyframes being enabled but
0 keyframes existing. Having a standard value makes much more sense.
2019-12-27 02:06:41 +11:00
itsmattkc
7a512cc540
set some parameters to not-keyframable
2019-12-27 01:25:52 +11:00
itsmattkc
52672cc031
rewrote TimeRuler drawing function for improved code, performance, and functionality
2019-12-27 01:23:06 +11:00
itsmattkc
87eacb2869
fix input bug that doesn't deep copy keyframes correctly
2019-12-26 21:51:08 +11:00
itsmattkc
1a1a7f029a
changed waveinput error messages from debug to critical
2019-12-26 21:50:55 +11:00
itsmattkc
e8808f5e89
shifted IC unblocking until after the split is done since the clips won't change
2019-12-26 19:29:48 +11:00
itsmattkc
5d82aa1a7d
ensure playhead cannot be dragged below 0 in the TimelineViewBase
2019-12-26 19:03:44 +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
83077c939e
removed olive:: qualifier from MainWindow class
2019-12-26 17:41:31 +11:00
itsmattkc
7d907d7ee1
removed olive:: qualifier from icon:: namespace
2019-12-26 17:38:18 +11:00
itsmattkc
bb9284a894
moved tool enum to a Tool class
...
Code cleanup and improvement.
2019-12-26 17:35:25 +11:00
itsmattkc
d140094cf5
moved PanelManager to a more traditional singleton form
2019-12-26 17:27:30 +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
3b2fcf4aae
re-implement value setting for all other types than float in NodeParamViewWidgetBridge
...
Just updating code
2019-12-26 17:20:30 +11:00
itsmattkc
23001386d0
implemented base UI keyframe functionality
...
This commit implements much of the base functionality for creating and
destroying keyframes in the UI. Not complete yet, but getting there.
2019-12-26 16:32:08 +11:00
itsmattkc
a514265fc9
updated NodeKeyframe class to QObject for easier signal/slot handling
...
While the keyframes themselves are relatively simple, their usage is quite
complex and using QObjects as their base will help a ton of UI and backend
functionality.
2019-12-26 16:30:25 +11:00
itsmattkc
c62b59965e
updated nodes for new input structure
...
Since all NodeInputs will generally only need their data type and default
value set once, we place it all into the constructor for cleaner and easier
to manage code.
2019-12-26 16:29:56 +11:00
itsmattkc
97c192672e
constructed keyframeview and timeruler together inside nodeparamview and connected them
2019-12-25 02:42:07 +11:00
itsmattkc
d705a27d54
moved more functions to the base class in the vein of the previous commit
2019-12-25 02:41:40 +11:00
itsmattkc
4b48a73db3
moved some timelineview functions into a timelineviewbase for reusing
...
Later classes will feature similar functionality to the TimelineView, moving
them to a base class that can be easily reused seems like a good idea.
2019-12-25 02:20:23 +11:00
itsmattkc
dc6d498da8
began UI for keyframing
...
Largely extending the existing NodeParamView with functionality from the
previous release.
2019-12-25 01:20:46 +11:00
itsmattkc
aac8c5ec17
fixed speed changes on reversed clips in the speeddialog
2019-12-24 16:35:40 +11:00
itsmattkc
ac9690c5a7
ensure gcc will compile this file without warnings
2019-12-24 16:35:28 +11:00
itsmattkc
62f9e55609
implemented foundational reversed block code
...
Ensured renderers can handle clips that are reversed.
2019-12-24 16:17:33 +11:00
itsmattkc
f0cd480540
finished audio effects support in audio renderer
...
Working structure implemented in previous commit into the audio renderer is
complete in this commit.
2019-12-24 14:02:07 +11:00
itsmattkc
7ad2eae7a2
implemented volume and pan effects
...
This commit implements a structure for sample processing and two implemenations
of this structure in volume and pan effects.
2019-12-24 12:34:30 +11:00
itsmattkc
3a7b3ffac6
implemented audio exporting
...
The encoder was moved to its own thread and will transcode the PCM from the
audio renderer into the chosen codec while the video frames are still
received. The implementation isn't perfect and could use some cleaning up, but
it is functional at the moment.
2019-12-23 01:45:27 +11:00
itsmattkc
a8beae64ae
general improvements to the renderer backend to help keep rendering consistent and performant
2019-12-22 03:04:34 +11:00
itsmattkc
46855adea7
use a system of deferred maps to keep track of frames that don't need to be rendered twice
...
Mostly used for exporting to ensure all frames get accounted for when being
sent from the renderer to the exporter through signals/slots.
2019-12-22 03:03:08 +11:00
itsmattkc
8514590c83
implement transformation matrix in exporter backend
...
This was supposed to have been done, but was not.
2019-12-22 02:59:08 +11:00
itsmattkc
1e278b7b7e
share videorenderingparams in exportdialog and include a frame rate for rendering
2019-12-22 02:58:36 +11:00
itsmattkc
b24e2cd22b
enable multithreading on ffmpegencoder
2019-12-22 02:56:25 +11:00
itsmattkc
4cb6659dbb
cleaned up texture and texture reading classes
2019-12-21 21:30:42 +11:00
itsmattkc
a8a5e50d3a
update opengl exporter to pass encoderptr along to exporter base class
2019-12-21 20:40:09 +11:00
itsmattkc
04d39e27a8
copy texture before signalling it
...
Sending a texture directly from the texture cache is dangerous since once the
reference is relinquished, it could be picked up and used by another thread.
Copying the texture to a separate one takes a little extra time but lets the
viewer remain in control of that texture.
2019-12-21 20:38:15 +11:00
itsmattkc
57c0b93ba5
updated more classes for the moved decoder code a few commits back
2019-12-21 20:17:30 +11:00
itsmattkc
62d4603c76
allow access to the current frame rate from the ExportVideoTab to the ExportDialog
2019-12-21 20:14:52 +11:00
itsmattkc
ea1cd81a13
implemented signals for the export window's view/look changing
...
These were implemented for the display combobox correctly but not for the
view/look comboboxes.
2019-12-21 20:13:46 +11:00
itsmattkc
eaedd23c83
set up encoder when setting up the exporter
2019-12-21 20:13:22 +11:00
itsmattkc
355baa893a
cleaned opengl texture and framebuffer code
...
Minor code changes and improvements.
2019-12-21 20:08:20 +11:00
itsmattkc
401de26733
updated other classes for the previous commit's file moving
2019-12-21 20:07:14 +11:00
itsmattkc
f93c20819b
fixed incorrect algorithm in pixel converter
2019-12-21 20:04:44 +11:00
itsmattkc
ee31da9e71
merged encoder and decoder code into one folder since they can share quite a bit of code
2019-12-21 20:03:25 +11:00
itsmattkc
15e01c9452
update export dialog to use higher quality parameters
...
Since the backend parameters were hardcoded not too long ago, for testing the
parameters had to equal the backend parameters. Now that they are not hardcoded
we can use higher quality parameters in export contexts.
2019-12-20 04:41:26 +11:00
itsmattkc
1b844fb760
further progress on export dialog
...
Implemented setting up and running the export thread with valid parameters,
transformation matrix and color processor.
2019-12-20 04:39:11 +11:00
itsmattkc
38d35d1b88
updated viewer to set render backend format/mode
...
Yes, it's still hardcoded in the viewer for the time being, but moving it out
of the backend makes the backend format flexible for exporting.
2019-12-20 04:38:19 +11:00
itsmattkc
8ace197d66
improved backend encapsulation
...
Various backend improvements are included in this commit, mostly for the
benefit of exporting. These include:
- Moving more non-GL code from OpenGL derivatives into base classes
- An "export mode" that changes the cache behavior of video backends
- Using the Viewer's UUID introduced a few commits ago
- No longer hardcoding the pixel format/render mode in the backend (since
they'll inevitably differ when exporting vs previewing)
- Improved signalling for frames that are completed
2019-12-20 04:35:31 +11:00
itsmattkc
757aaa21c4
began exporter classes for handling render backends in an exporting context
2019-12-20 04:34:32 +11:00
itsmattkc
7844a2ed72
fixed race condition in appending to a list of exported cache references
2019-12-20 04:33:05 +11:00
itsmattkc
7a7d304268
use uuid for identifying viewers
...
To aid generating a cache ID, each viewer node needs a UUID. Previous iterations
tried to hash a name and time, but a UUID is a much more efficient way to do
this.
2019-12-20 04:32:17 +11:00
itsmattkc
7398cd3f1c
use viewer resolution/transform override to show cropping/stretching settings
2019-12-19 15:59:51 +11:00
itsmattkc
0ef00245ad
added functions to override the resolution and matrix transform of the viewer widget
...
While in most circumstances these shouldn't be used, they're useful for
showing things like export previews
2019-12-19 15:55:08 +11:00
itsmattkc
c5e16ed805
only show export dialog if the sequence is not empty
2019-12-19 15:53:56 +11:00
itsmattkc
b308f753b3
with Block::set_length_and_* functions, keep the speeds correct
...
With differently set speeds, these functions would mess with the timing in ways
that would be confusing to the user. Now they act in a much more intuitive way
and also prevent negative media times.
2019-12-19 02:26:30 +11:00
itsmattkc
0d51f606df
corrected sequence to media time formulas
...
Previous iteration would multiply the media in by the speed as well. This is
undesirable.
2019-12-19 02:04:53 +11:00
itsmattkc
93d95a0e14
removed legacy OLIVE_EFFECTS define in CMakeLists
...
These shaders are now embedded in the binary via resources.
2019-12-19 01:46:23 +11:00
itsmattkc
63086bc18d
improved msvc warning compliance
2019-12-19 01:44:49 +11:00
itsmattkc
05e10962f9
added convenience undo command for removing a node and its exclusive deps
2019-12-19 01:44:18 +11:00
itsmattkc
3fb7b40b61
fixed bug that would sometimes cause the track lengths to return 0
2019-12-19 01:43:10 +11:00
itsmattkc
4214b061e1
improved MSVC compile flags in app's CMakeLists
2019-12-19 01:41:10 +11:00
itsmattkc
2c79edeb0f
further improved msvc compilability
2019-12-18 23:35:02 +11:00
itsmattkc
37313bc212
only connect footage stream colorspace signal to video/image streams
2019-12-18 22:38:52 +11:00
itsmattkc
d1ace48ff9
started audio speed stretching
2019-12-18 22:38:34 +11:00
itsmattkc
836192df48
fixed circular dependency that oddly only occurred on MSVC
2019-12-18 16:49:42 +11:00
itsmattkc
821f98f970
updated FindOpenColorIO
...
This likely isn't necessary, but was one of the steps made trying to debug
MSVC compilation. Considering the previous iteration was from 2012 and this
one is from 2019, it may have other improvements.
2019-12-18 16:48:03 +11:00
itsmattkc
66ab1b4a08
updated speed/duration dialog for new slider display modes
...
General UI improvement.
2019-12-18 02:13:11 +11:00
itsmattkc
cde668b590
implemented percentage and decibel view modes for slider
...
A slider can now hold a float value and display it in the UI converted to
either a percentage or a decibel (still returning a linear float value
programmatically for the rest of the code).
2019-12-18 02:09:53 +11:00
itsmattkc
be0d857e38
snap footage imports to the timeline timebase
...
Earlier, footage that was not the same frame rate as the sequence had the chance
of their length value falling between a frame. This doesn't really help anything
with video since a frame is a discrete point in time, and only led to confusion
while navigating the timeline.
2019-12-18 01:21:25 +11:00
itsmattkc
aae756b44c
fixed regression from moving length to a nodeparam
...
Splitting commands would run CopyInputs after set_length. Since length is now
a parameter (aka a NodeInput) the former would override the latter breaking the
implementation. This commit fixes that.
2019-12-18 01:20:04 +11:00
itsmattkc
29ae366659
improved speed/duration implementation
...
This functionality is almost complete minus the reverse speed and any of the
audio implementation.
2019-12-18 01:19:17 +11:00