Commit Graph
1878 Commits
Author SHA1 Message Date
itsmattkc 91f1be90a9 opengl: isolate all functions to one thread 2020-02-03 18:14:58 +11:00
itsmattkc 776cfd87c8 renderer: minor code improvements 2020-02-03 12:41:20 +11:00
itsmattkc 0c46b0c471 decodercache: don't need thread-safe functions anymore 2020-02-03 01:29:29 +11:00
itsmattkc caf0d3d42a renderer: minor code improvements 2020-02-03 01:29:03 +11:00
itsmattkc 40e8aec285 viewer: minor code improvements 2020-02-03 01:27:45 +11:00
itsmattkc 110b5741e0 nodes: remove user input mutexes
These were no longer ever used and thus served no purpose.
2020-02-03 01:27:00 +11:00
itsmattkc 9b7cbb3fbd viewer: automatically update maximum scroll from media length 2020-02-01 23:09:25 +11:00
itsmattkc c0360abee1 toolpanel: override Retranslate() 2020-02-01 22:28:14 +11:00
itsmattkc 2fef893fd0 panels: override Retranslate() rather than reimplementing changeEvent() in every derivative 2020-02-01 22:11:14 +11:00
itsmattkc 42989994ca fixed reference to DBL_MAX 2020-02-01 21:35:30 +11:00
itsmattkc 4213209727 fixed gcc compilation issue 2020-02-01 21:27:06 +11:00
itsmattkc 17c1493aa7 all time-based panels are now derived from a common base class
Cuts down on a lot of duplicate code between
TimelineWidget/ViewerWidget/CurveWidget/NodeParamView
and TimelinePanel/ViewerPanel/CurvePanel/ParamPanel since they all use similar
time functions.
2020-02-01 19:39:43 +11:00
itsmattkc 5d58479f0a oiiodecoder: fixed erroneous processing of extension_list 2020-01-26 14:43:45 +11:00
itsmattkc 0469fac4a9 node: send invalidatevisible signal through graph
When dragging a value in the UI, we use a "single frame update" because we want
to prioritize the currently visible frame to give visual feedback as soon as
possible. Previously, we generated a single frame InvalidateCache() signal
from the widgets themselves, but this had the major downside of not necessarily
emitting the time that the viewer was actually showing (due to either node time
transformations or times differing between the effects panels and the viewer
panels). Now, we send a different signal that viewers can handle themselves to
update the time that they're currently showing. This means the fast updating
will work no matter how many viewers are connected at whatever time each viewer
is set to.
2020-01-26 14:16:22 +11:00
itsmattkc ce17d94b12 timeline: don't show speed dialog if no blocks are selected
Prevents segfault opening SpeedDurationDialog with an empty clip list.
2020-01-26 13:37:47 +11:00
itsmattkc f068c425d2 viewer: provide UI to set preview resolution
Previews don't need to be rendered full resolution, particularly since the
preview is hardly ever 1:1 size of the sequence. The functionality to render
at lower resolutions already existed, but there was no UI for it. This commit
implements UI to set the resolution divider on the viewer.
2020-01-26 13:27:06 +11:00
itsmattkc 8c0dfb6875 imagestream: fixed segfault when changing a project's default input colorspace 2020-01-26 12:22:30 +11:00
itsmattkc 490a634473 oiiodecoder: fixed segfault caused by some OIIO decoders if they received
unexpected data

When "probing" footage, Olive runs it past all of its decoders until one
responds that it can decode this file. However this caused issues when some
OIIO decoders would erroneously pick up incompatible files, try to read them
and segfault the entire app (notable OpenJPEG with MPEG-4 and RLA with WAVE
audio). We now use the file extension to check with OIIO if it "should" be
compatible before actually testing if it is.

This is not a "perfect" solution (i.e. someone could recreate the segfault by
renaming an MPEG-4 file to an image extension like .JPG), but is probably as
much as can be done Olive-side and should filter out all segfaults under normal
circumstances.
2020-01-26 11:54:49 +11:00
itsmattkc 6bef94b3e2 qt: fixed strange UI issue where hidden floating dock widgets would show as
transparent cuts through the main window on linux

For some reason, setting not visible *after* setting floating would cause this
issue. The other way around does not.
2020-01-26 11:38:24 +11:00
itsmattkc 8b0c7edfec OIIO: added support for OIIO 1.x
OIIO 2.x uses std::unique_ptr while 1.x uses raw pointers. Olive can now handle
both, manually destroying the raw pointers when necessary if running on OIIO
1.x.
2020-01-26 11:33:45 +11:00
itsmattkc 0e82ec600d keyframes: implemented same single frame strategy on bezier control points 2020-01-25 18:00:35 +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 80c48c7633 block: fixed bug that broke single frame updating from a slider
Optimization that only invalidates cache when the user has stopped sliding to
keep the UI responsive.
2020-01-25 17:01:21 +11:00
itsmattkc f5fe87d959 track: reimplemented invalidate cache block
Optimizes working in the timeline by only invalidating cache when necessary.
2020-01-25 16:38:18 +11:00
itsmattkc 7bb8da8d79 node: rewrote problematic GetExclusiveDependencies() function
Function would erroneously pick up nodes that weren't actually dependencies.
2020-01-25 16:37:28 +11:00
itsmattkc 420e01002e dialogs: fixed regression that broke audio 2020-01-25 13:40:23 +11:00
itsmattkc 3f85ce8a7a diskmanager: clearing disk cache at runtime will correctly signal renderers
Clearing the disk cache in the preferences will correctly communicate to
renderers that those frames are now deleted.
2020-01-25 12:18:46 +11:00
itsmattkc 149d125e39 msvc: updated code for higher warning level 2020-01-24 12:00:55 +11:00
itsmattkc 5d1b379cb8 cmake: use high warning level in msvc 2020-01-24 01:37:06 +11:00
itsmattkc a629b1839d rendercanceldialog: pass through qshowevent 2020-01-24 01:36:52 +11:00
itsmattkc a3c932693a exportdialog: use wait for close code from previous commit when closing the
export dialog
2020-01-22 19:51:57 +11:00
itsmattkc 24f7eeb210 renderer: implemented function to wait for workers in the main thread
The workers run in separate threads meaning if any significant change is made
(e.g. parameters changing, or even closing the program), these workers may still
be mid-render. This is particularly problematic when closing since the nodes a
worker is rendering may be deleted mid-render. Render backends now have a
function that pauses the main thread (but starts a second event loop so the UI
isn't frozen) until the worker threads are all finished. This way, massive
changes can be made safely without race conditions.
2020-01-22 17:11:17 +11:00
itsmattkc fdbaa75dff renderer: allow parameters to be changed mid-session 2020-01-22 14:05:37 +11:00
itsmattkc 8932a5abeb preferences: allow users to set the default still image length 2020-01-21 14:31:45 +11:00
itsmattkc 28d0aecd0e openglcolorprocessor: delete texture when context is about to be destroyed 2020-01-20 16:09:29 +11:00
itsmattkc cfff198503 Merge branch 'version-from-cmake' of https://github.com/eszlari/olive into eszlari-version-from-cmake 2020-01-20 06:07:46 +11:00
itsmattkc c0300371c7 ffmpegdecoder: fixed flawed debug line 2020-01-20 04:58:39 +11:00
itsmattkc 6eab464abb appveyor: create windows installer 2020-01-20 04:48:10 +11:00
itsmattkc 562891c391 renderer: handle ffmpeg returning a zero aspect ratio
We try to handle aspect ratios in metadata (e.g. stretching 1440x1080 videos
out to 1920x1080 when requested), and FFmpeg will usually return a 1/1
aspect ratio even if it can't determine an aspect ratio. However, as mentioned
in the documentation, sometimes it returns a 0/0 aspect ratio when it can't
determine an aspect ratio, which we didn't handle and would lead to the code
allocating a buffer with a 0px height. This commit handles both 1/1 and 0/0
aspect ratios in accordance with the FFmpeg documentation.

Reference: https://www.ffmpeg.org/doxygen/4.0/structAVFrame.html#a62f9c20541a83d37db7072126ff0060d
2020-01-20 04:07:42 +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 1dfac0ea7f timeline: removed unused variable in undo command 2020-01-19 23:52:23 +11:00
itsmattkc 61c697689b addressed linker issue on some versions of gcc 2020-01-19 22:00:34 +11:00
itsmattkc 4697b98980 fixed gcc compile issues 2020-01-19 20:39:48 +11:00
itsmattkc 1101b58ee8 allow setting of pixel format/ocio method/sample format in preferences
Implementation isn't perfect yet, viewer/renderer doesn't update yet when
the preference is changed so a sequence needs to be re-opened for the change to
take effect.
2020-01-18 03:37:36 +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 3c139b8274 fixed bug where deleting clips in currently caching sequences would fail to
cache when something took its place
2020-01-17 14:12:13 +11:00
itsmattkc f8f932112c fixed bug where the node remove with exclusive deps command would never run 2020-01-17 13:56:45 +11:00
itsmattkc 0bc176fd62 use less threads on cache
By using one thread per logical CPU thread, we seemed to completely saturate
the CPU which would kill the performance of the main/GUI thread (despite the
other threads being low priority). We now use half of the logical threads, which
still sees good CPU usage and minimal performance impact while allowing the
main thread to respond to user actions.
2020-01-17 04:37:47 +11:00
itsmattkc 653709dc84 try to index media immediately on import
Since indexing is supplemental, it can be made a background task that can occur
at more or less any time. So we run it as soon as possible.
2020-01-17 03:58:29 +11:00
itsmattkc 63b3c60017 allow editing sequence properties in projectexplorer 2020-01-16 15:01:13 +11:00