itsmattkc
df837efbc6
merged timeline and viewer nodes together
2020-01-03 03:26:00 +11:00
itsmattkc
f13f5b5fdb
fixes memory leak in AudioManager
...
Ensures a thread that gets created gets deleted when it's done.
2020-01-03 02:44:33 +11:00
itsmattkc
02a790b041
simple file renames to better represent their new purposes
2020-01-03 02:36:30 +11:00
itsmattkc
0ac202078c
rewrite of audio output manager for vastly improved operation
...
Previously the audio output manager was a "hybrid device" that acted as a pull
device for audio devices and as a push device and device proxy for the rest of
the application. This approach turned out to be flawed, particularly in the
frequent opening and closing of the audio device (extremely slow). Since we
use both pulling (for constant playback) and pushing (audio scrubbing, short
bursts of sound), it needed a similar but different approach. This approach
will switch the output device from push mode (default) to pull mode (during
playback) only when necessary resulting in far less UI lag (basically
unnoticeable now) than the previous approach.
2020-01-03 02:33:11 +11:00
itsmattkc
8ec63abc74
moved audio output manager and device to separate thread
2020-01-03 00:32:23 +11:00
itsmattkc
7d0d73bcfe
use signal/slot threading for the audio refresh thread instead of subclassing QThread
2020-01-02 22:02:48 +11:00
itsmattkc
31af04fc6c
minor render pipeline improvements
...
Simple flow improvements of the rendering pipeline for efficiency and
reliability.
2020-01-02 06:01:23 +11:00
itsmattkc
f8839e74de
ensure texture is not copied in one thread while it's read in another
...
This seems to cause issues in the rendering pipeline, so this commit never lets
a texture copy and read occur at the same time.
2020-01-02 06:00:21 +11:00
itsmattkc
7eae6a85f8
fixed bug that wouldn't clear TrackViewItems when a new sequence was opened
2020-01-02 05:59:37 +11:00
itsmattkc
8b2514c1de
implemented automatically switching to the hand tool when middle clicking on
...
all TimelineViewBase derivatives
2020-01-02 05:44:40 +11:00
itsmattkc
dd77ea46a5
nodeinput: remove unused bool member
2020-01-02 05:04:46 +11:00
itsmattkc
fd2d0f941c
block: add access functions to primary block inputs (length/media in+out)
2020-01-02 05:04:10 +11:00
itsmattkc
bfb111a2b0
timelinewidget: don't include gaps in the rubberband selection and clean tracks
...
after deleting clips from them
2020-01-02 05:03:36 +11:00
itsmattkc
3492b72e05
pointer tool: only clean up tracks once per operation
2020-01-02 05:02:09 +11:00
itsmattkc
104415a4de
razor tool: only push an undocommand if blocks were actually detected to split
2020-01-02 05:01:39 +11:00
itsmattkc
ae71b206cd
updated timeline tools to allow rounding as well as flooring to find the frame
...
at the mouse cursor point
2020-01-02 04:11:50 +11:00
itsmattkc
e8fddc2d5b
improved renderer reliability
...
The renderer backend can now distinguish between jobs. Previously if two jobs
of the same frame were started (which is legal if the user made a change while
frames were still being rendered), an earlier job in some situations could
finish AFTER a later job, and the backend would have no way of distinguishing
between them. This meant a frame could be erroneously set to an old value
rather than the newest. This commit introduces job identification so that old
jobs are automatically discarded.
2020-01-02 03:21:38 +11:00
itsmattkc
62e94ca2cb
improved a number of pointer tool functions and fixed a number of bugs
2020-01-02 01:30:43 +11:00
itsmattkc
f65e1e52b5
implemented scroll wheel zooming in all TimelineViewBase derivatives
2019-12-31 19:49:09 +11:00
itsmattkc
e41fdbd6e3
implemented autoscrolling derivatives of TimelineViewBase around the playhead
2019-12-31 19:17:40 +11:00
itsmattkc
9c3e5b76b2
when zooming any TimelineViewBase derivative, zoom towards the playhead
2019-12-31 19:01:52 +11:00
itsmattkc
c2558b3d06
implemented inverted timeline scroll axes
...
Timeline scrolls horizontally by default with a preference to disable that
functionality.
2019-12-31 18:46:42 +11:00
itsmattkc
9060636499
correctly connect timeline and trackview so they vertically scroll in tandem
...
with each other
2019-12-31 18:29:23 +11:00
itsmattkc
41b53d7a7f
correctly upconvert the DefaultSequenceFrameRate from a legacy config file
2019-12-31 15:39:17 +11:00
itsmattkc
e1f7319151
for languages in the PreferencesDialog use a function that provides a more
...
appropriate name
2019-12-31 15:38:42 +11:00
itsmattkc
f669446692
fixed keyframeviewbase bug that led to unpredicatable mouse behavior
2019-12-31 15:38:14 +11:00
itsmattkc
acfbe421e2
implemented much of the general tab and behavior tab in the PreferencesDialog
2019-12-31 14:40:52 +11:00
itsmattkc
970f4b4793
MainWindow: auto size panels vertically as well by default
2019-12-31 03:11:39 +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
441555e9f2
fixed bug that wouldn't set a footage stream's enabled property correctly
2019-12-30 22:22:48 +11:00
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