Commit Graph
100 Commits
Author SHA1 Message Date
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