Commit Graph
100 Commits
Author SHA1 Message Date
itsmattkc b134ac877f cmake: use better FindOpenEXR.cmake script 2020-02-29 01:17:41 +11:00
itsmattkc 163ad76456 renderer: rewrote frame compression algorithm
This function was noticeably lagging the main thread while caching. The
cause was OpenEXR's internal thread pool competing with our main
thread. Since we have our own system of worker threads, its thread pool
was unnecessary for caching, however for normal playback it was a useful
optimization. Unfortunately OIIO (which we were using to save EXRs)
didn't provide quite enough control over OpenEXR's threading behavior
(only providing control for over the global thread pool and not on
a per-image basis), so for caching we've switched to using OpenEXR
directly. This has noticeably sped up the main thread while causing no
noticeable slowdown to the caching process.
2020-02-29 01:00:17 +11:00
itsmattkc 2ec160525c cmake: made OpenEXR a direct dependency since we use it for
the caching system
2020-02-29 00:40:28 +11:00
itsmattkc 31edfdc28b crashhandlerdialog: added system information and made text area read only 2020-02-28 16:44:05 +11:00
itsmattkc 566a0729c1 timeruler: ignore cache signals if cache status isn't enabled
Minor optimization.
2020-02-28 15:49:26 +11:00
itsmattkc 15ac7f0e9d renderer: removed old signal that isn't used anymore 2020-02-28 15:49:02 +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 d1681bc294 travis: move app bundle to root before zipping 2020-02-27 18:42:08 +11:00
itsmattkc adcab06d4e fixed faulty while loop break 2020-02-27 18:15:55 +11:00
itsmattkc fde5e47901 projectexplorer:use if defined() and elif defined() for improved
compiler compatibility
2020-02-27 17:47:11 +11:00
itsmattkc f9a54ebdb6 renderer: remove frames from hash map as well when the diskmanager deletes
them
2020-02-27 17:46:49 +11:00
itsmattkc 735e180d5a pixelservice: use more widely supported OIIO function in image buffer
conversions
2020-02-27 17:19:59 +11:00
itsmattkc 273522f28a diskmanager: don't fail disk cache clear if the files simply don't exist
QFile::remove() will return false if the file doesn't exist, but
for our purposes that's as good as the file having been deleted.
2020-02-27 17:19:07 +11:00
itsmattkc a64f066e2e renderer: don't upconvert to RGBA if the source image is only RGB 2020-02-27 17:18:39 +11:00
itsmattkc 83c5cd2bc1 oiiodecoder: made line backwards compatible with OIIO < 2.1.x 2020-02-27 16:03:56 +11:00
itsmattkc a0f37ef827 pixelformat: added missing <memory> include for non-windows systems 2020-02-27 15:49:15 +11:00
itsmattkc d87b4fde8c renderer/decoder: use divider at the footage level
Optimizes rendering if a divider is being used.
2020-02-27 15:47:08 +11:00
itsmattkc 02ce48d0c6 various: pixel optimizations
Several things are accomplished in this commit, including:

- Use OIIO instead of our own functions for pixel format conversions
  (cleaner code/less for us to maintain)

- Fold all PixelService functions into the PixelFormat class
  (cleaner code)

- Moved OpenGL pixel definitions to OpenGL classes and out of the
  global classes.

- Add support for RGB buffers as well as RGBA (optimization)
2020-02-27 13:54:38 +11:00
itsmattkc 0624184b18 projectexplorer: re-implemented reveal in explorer function 2020-02-27 11:30:26 +11:00
itsmattkc 0fbffc9b8f ffmpegdecoder: mild code cleanup 2020-02-27 01:05:22 +11:00
itsmattkc 428cfc6210 exportdialog: use sequence name and project directory to auto-select export
filename
2020-02-27 00:58:19 +11:00
itsmattkc d7cde3b22e timelinewidget: clear block items before destruction
Prevents block items signalling anything after the TimelineWidget has already
been destroyed.
2020-02-26 14:36:51 +11:00
itsmattkc 9585786c4b exporter: removed unused and problematic function
This array this code made was never actually used and in fact the code was
potentially crash-prone.
2020-02-26 14:07:47 +11:00
itsmattkc 2fe680dccd Merge branch 'master' of https://github.com/olive-editor/olive 2020-02-26 11:39:08 +11:00
itsmattkc 0bef116020 oiiodecoder: set correct image stream
Fixes bug where loading a saved project with still images could crash.
2020-02-26 11:37:57 +11:00
itsmattkc e578ee6264 nodeviewedge: fixed float conversion warning 2020-02-26 01:59:46 +11:00
itsmattkc 7e7ff49777 nodeviewedge: use bezier curves instead of straight lines 2020-02-26 01:07:53 +11:00
itsmattkc 785160b86b nodeview: fixed crash when expanding a NodeViewItem with a NodeInputArray 2020-02-26 00:47:01 +11:00
itsmattkc bf7fc9a0c4 panels: selecting a clip in the timeline automatically selects the corresponding
nodes in the nodeview
2020-02-26 00:39:30 +11:00
itsmattkc 78daf9e28a exporter: updated exporter to function with new render system 2020-02-25 20:03:15 +11:00
itsmattkc ab19e445bd importtool: implemented auto-parameter detection from image streams too 2020-02-25 14:59:54 +11:00
itsmattkc 8d7b94658b footagepropertiesdialog: show colorspace and alpha association properties on
image streams
2020-02-25 14:59:48 +11:00
itsmattkc faffbb0f38 renderer: re-use already created textures if the images are known not to change 2020-02-25 14:57:49 +11:00
itsmattkc 5404fa628d cmake: use rc resource file on windows 2020-02-25 13:18:16 +11:00
itsmattkc fcb8e934c4 config: changed default cache range values 2020-02-24 12:34:28 +11:00
itsmattkc 9f17a23a42 videorenderframecache: use hash-prefix directory structure
Many file systems become inefficient with a lot of files in the same directory.
To solve this we use a semi-arbitrary system to split up all cache files into
several folders to keep things performant.
2020-02-24 12:34:16 +11:00
itsmattkc 2c16bb7c53 renderworker: removed unnecessary declaration 2020-02-24 11:58:38 +11:00
itsmattkc fceb1e8d3e viewer: re-render both video and audio if parameters change 2020-02-24 11:57:39 +11:00
itsmattkc 6239107670 ffmpegdecoder: run timer in main thread at all times 2020-02-24 11:56:48 +11:00
itsmattkc 08ed766771 audiorenderworker: fixed potential false positive in assert 2020-02-24 02:02:08 +11:00
itsmattkc 412ea9cede ffmpegdecoder: fixed bug with frame identification 2020-02-24 02:01:42 +11:00
itsmattkc 8f5a92af9c ffmpegframecache: removed unnecessary debug line 2020-02-24 02:01:21 +11:00
itsmattkc ff516b6202 audiorenderworker: added assert for problematic audio behavior that could
corrupt the heap
2020-02-23 22:20:01 +11:00
itsmattkc 6956e159e6 ffmpegdecoder: remove debug messages 2020-02-23 22:18:59 +11:00
itsmattkc d3bc12b2f5 ffmpegdecoder: use stricted memory interval 2020-02-23 22:18:10 +11:00
itsmattkc c7cb227abb ffmpegdecoder: fixed memory leak introduced in previous commit 2020-02-23 21:24:07 +11:00
itsmattkc b1cb8489df memory: try caching frameptrs instead of avframes so we have more control 2020-02-23 21:20:33 +11:00
itsmattkc 48cdb3a6dd memorymanager: rewrote entire memory management system 2020-02-23 20:29:51 +11:00
itsmattkc 3a90e76fec viewerglwidget: don't check for file exists since OIIO will do that for us 2020-02-23 13:48:02 +11:00
itsmattkc c2d518c681 audiorenderworker: fixed bad memcpy that would corrupt the heap 2020-02-23 13:46:28 +11:00
itsmattkc 813c2e411a rendercache/decodercache: moved qmutex that was only used by decodercache into
decodercache's derived class
2020-02-23 11:46:30 +11:00
itsmattkc 866db58965 taskmanager: use deleteLater rather than delete
This doesn't solve a known issue, but is probably cleaner/more robust code
regardless.
2020-02-23 11:45:16 +11:00
itsmattkc 7a95af7069 taskdialog: fixed issue that would sometimes kill a thread before it was
finished leading to a SIGABRT from qt
2020-02-23 11:44:30 +11:00
itsmattkc 0a74714f5d nodeview/nodepanel: implemented select all/deselect all functionality 2020-02-23 11:38:30 +11:00
itsmattkc 6facdc1f1b projectpanel/projectexplorer: added select all/deselect all functionality 2020-02-23 11:33:49 +11:00
itsmattkc f1f80c0a39 audiomanager: fixed segfault if olive is closed while the devices are getting
refreshed
2020-02-23 02:20:39 +11:00
itsmattkc 1c033e53d4 timeruler: fixed issue that caused dirty cache status to not appear sometimes 2020-02-22 20:08:28 +11:00
itsmattkc 0e7b051228 timelinewidget: show cache status in timeline too 2020-02-22 14:45:50 +11:00
itsmattkc 9cb04b0020 timelineview: simplified TrackRippleRemoveAreaCommand and fixed bug that
incorrectly calculated the splice copy's media in
2020-02-22 01:14:38 +11:00
itsmattkc c7a3906c97 timelineview: fixed bug that wouldn't invalidate all necessary regions of the
cache when using rippleremovearea
2020-02-22 00:49:57 +11:00
itsmattkc 65db108be2 openglcolorprocessor: renamed CreateOpenGL() to Create()
We hide ColorProcessor::Create() to create a derived class rather than the
base class and clear up confusion over the two functions existing.
2020-02-22 00:34:55 +11:00
itsmattkc acb107bd92 Merge branch 'master' of https://github.com/olive-editor/olive 2020-02-22 00:14:20 +11:00
itsmattkc 77c0c9d95a viewer: ported to openglcolorprocessor for simpler code and fixed bug that
snuck in breaking color managed display
2020-02-22 00:13:28 +11:00
itsmattkc 547990b920 ffmpegdecoder/memorymanager: fixed race condition in garbage collection 2020-02-21 23:15:09 +11:00
itsmattkc b0c9711974 ffmpegdecoder: fixed double mutex lock
Error() would call Close() getting stuck in a double mutex lock that could
stall workers. This commit fixes that.
2020-02-21 20:04:36 +11:00
itsmattkc 6c33e85162 decoder: don't start indexing any stream that doesn't need to be 2020-02-21 20:04:08 +11:00
itsmattkc 04759b88cf qt/opengl: fixed bug that caused black screen on some platforms 2020-02-21 18:21:07 +11:00
itsmattkc 5602b6a88b importtool: add "don't ask again" option on "no active sequence" dialog
In the previous commit, we added a dialog to give users options when dropping
footage on a sequence-less timeline panel. However some users will have a
preferred behavior that they'd want every time without having to go through
the messagebox, so we add a "don't ask again" option that stores the setting
in the application config.
2020-02-21 18:07:54 +11:00
itsmattkc 8f86fdd16e importtool: add user option for creating a sequence on drop
If there was anything that 0.1.x taught me, it was that a substantial number of
users did not understand that a new sequence was being made by dropping footage
onto an empty timeline and wouldn't know what to do if they wanted parameters
that differed from the footage they dragged in. This dialog makes the operation
clear and gives users an option to set the parameters on drop for convenience.
2020-02-21 17:48:24 +11:00
itsmattkc bac33e3d16 importtool: create a sequence automatically from dropped footage if one isn't
open already
2020-02-21 17:28:17 +11:00
itsmattkc 042c4616c7 Merge branch 'master' of https://github.com/olive-editor/olive 2020-02-21 14:55:50 +11:00
itsmattkc e149fc0117 memorymanager: updated system calls for linux 2020-02-21 14:51:47 +11:00
itsmattkc dcedf12dbe ffmpegdecoder: stop clear_timer on deconstruction 2020-02-21 14:25:27 +11:00
itsmattkc 78556c1511 audiomonitor: use QTimer::singleShot rather than connecting timeout() to stop()
Minor code improvement.
2020-02-21 14:22:53 +11:00
itsmattkc befaf34a4c oiiodecoder: use QStringLiteral()
Minor code improvement/optimization.
2020-02-21 14:21:53 +11:00
itsmattkc f769e88e6d taskmanager: restore one task per thread at idlepriority 2020-02-21 14:21:32 +11:00
itsmattkc e74c4c2d1c global: implemented rudimentary memory manager to use available system memory
without forcing the OS to page swap
2020-02-21 14:20:57 +11:00
itsmattkc 2e38e7e3fb indexmanager: moved files 2020-02-21 10:47:41 +11:00
itsmattkc 7797bf4971 ffmpegdecoder: added helper functions for memory handling 2020-02-21 01:18:21 +11:00
itsmattkc 3cffffdcee viewer: use vsync for updates rather than a timer
Improves viewer appearance and performance. Rather than using a timer roughly
set to the sequence's frame rate to update the viewer, the viewer synchronizes
itself to the display's refresh rate resulting in much smoother playback.
2020-02-21 00:42:46 +11:00
itsmattkc 4532c3884e ffmpegdecoder: fixed cast issue on gcc 2020-02-21 00:21:31 +11:00
itsmattkc 94f1d997ad slider: don't use prefix and suffix in text entry
UX improvement, ensures the text entry doesn't include anything that the slider
can't resolve back into a value.
2020-02-21 00:11:54 +11:00
itsmattkc 2299fda73a ffmpegdecoder: handle media that starts at a non-zero pts 2020-02-21 00:09:45 +11:00
itsmattkc 162c91ec52 ffmpegdecoder: allow probe duration pickup to be cancelled 2020-02-20 23:54:40 +11:00
itsmattkc bc2be7a2a4 ffmpegdecoder: use simpler loop to find duration if the container doesn't
provide one
2020-02-20 23:52:23 +11:00
itsmattkc 4c61abbbf0 preferencesdisktab: use cache clear button to provide user feedback rather than
a messagebox

A slightly more subtle way to provide feedback.
2020-02-20 23:35:50 +11:00
itsmattkc 73e639757e ffmpegdecoder: fix bug that slowed down low fps footage unnecessarily 2020-02-20 23:34:49 +11:00
itsmattkc be6fbfecdb videorenderworker: fixed improper QString::arg() usage 2020-02-20 19:44:48 +11:00
itsmattkc 9faa303368 viewerglwidget: fixed destroy function used with OIIO 1.x 2020-02-20 19:41:52 +11:00
itsmattkc 3bd1c885cf decoder: round double to int 2020-02-20 19:24:59 +11:00
itsmattkc b231720398 viewer: prevent shuttle left/right from ever pausing
If the speed ever goes from 1 or -1 to 0, it'll in/decrease the speed one more
so it doesn't pause.
2020-02-20 19:12:14 +11:00
itsmattkc 5a070f14de general: use IdlePriority rather than LowPriority
Fixes a number of playback stuttering and general UI lag issues by setting all
background tasks to IdlePriority rather than LowPriority. While it was assumed
LowPriority tasks would always get scheduled below NormalPriority (e.g. main
thread) tasks, it turns out this is not always the case. If the background tasks
start consuming a lot of CPU cycles, the scheduler may use "dynamic scheduling"
to schedule them above the main thread regardless leading to UI lag. This is
apparently the case for all thread priorities apart from IdlePriority, which
is allegedly a special case where threads are *only* scheduled when other
threads aren't busy ensuring the main thread stays responsive.
2020-02-20 17:48:50 +11:00
itsmattkc 054281596e videorenderer: use qmutexlocker in more cases
Minor code cleanup.
2020-02-20 17:48:28 +11:00
itsmattkc 8cb74a8218 functiontimer: created convenience class to help when profiling functions 2020-02-20 17:47:33 +11:00
itsmattkc e373c40853 ffmpegdecoder: handle eof in retrieve 2020-02-20 16:50:03 +11:00
itsmattkc 1e2f0220a2 viewerglwidget: use OIIO::ImageInput rather than OIIO::ImageBuf
Gives us better control over the file I/O (using ImageBuf would fail to
release file handles sometimes).
2020-02-20 16:39:30 +11:00
itsmattkc 654b679658 nodeview: set drop_edge to null after placement
Fixes segfault placing more than one node.
2020-02-20 16:39:04 +11:00
itsmattkc 4914182206 stroke: fixed duplicate id 2020-02-20 16:38:46 +11:00