Commit Graph
112 Commits
Author SHA1 Message Date
itsmattkc 373eeaeacd renderer: when invalidating visible, kick the workers into emit mode 2020-05-07 01:29:05 +10:00
itsmattkc c61adbf2a2 videorenderer: if an InvalidateVisible() signal comes through, cancel the queue
Optimization that frees up the GPU as quickly as possible when the user starts
making changes that may require quick feedback.
2020-05-07 00:56:16 +10:00
itsmattkc c387ce1cd7 polygon node: early crude implementation 2020-05-05 00:22:49 +10:00
itsmattkc cfc5ce24a3 Merge branch 'master' into gizmos 2020-05-02 17:06:49 +10:00
itsmattkc 4906bb7d53 scopes: don't use shared context
OpenGL shared contexts (through Qt at least) seem to be buggy. Scopes have been
shifted to a non-shared approach as a result.
2020-04-28 17:08:52 +10:00
itsmattkc 1cca9de7c5 gizmos: implemented pathway for node to draw on the viewer 2020-04-27 04:34:36 +10:00
itsmattkc 53ae25a7cb nodes: optimize node graph changes by only updating from inputs that changed
A huge optimization that ensures only the parts of a node graph that have
changed get pushed to the renderer. For thread-safety, the node graph is
copied elsewhere so that users can make changes asynchronously and the graph
can update when its threads are ready. Up until now, if an input value changed,
every node's values would be re-copied, or worse, if a connection was changed,
the entire graph would be recopied. This has been negligible in testing since
we've been largely testing with small graphs, but for massive projects, it's
important that this be as optimized as possible.
2020-04-26 04:16:15 +10:00
itsmattkc acef99eb17 renamed viewerglwidget to viewerdisplaywidget
Initially this class was named to provide the possibility of supporting other
APIs, however this abstraction has been done with a base class instead.
2020-04-25 14:46:30 +10:00
itsmattkc 8c44f8d03d viewer/various: split off color management into separate base class
Also moves scopes to said base class.
2020-04-24 03:45:07 +10:00
itsmattkc 7768925826 manageddisplay: started base class for widgets that are managed 2020-04-24 00:17:32 +10:00
itsmattkc 1f34b89950 viewer: removed unnecessary debug line 2020-04-23 18:06:49 +10:00
itsmattkc 6c1e90665f colormanagement: moved from passing DVL strings everywhere to a consolidated ColorTransform struct 2020-04-23 01:17:58 +10:00
itsmattkc ccb02d30aa colormanager: implement default config 2020-04-22 05:08:33 +10:00
itsmattkc 05eae1e28a audio: don't use a shared QIODevice
This system was kind of janky anyway. It makes more sense ultimately for the
audio management classes to contain the file handle rather than the renderer.
2020-04-21 17:55:55 +10:00
itsmattkc 0ced48d4df histogram: implemented color management 2020-04-21 01:59:06 +10:00
itsmattkc 6f4bf70d3e scope: implemented waveform scope 2020-04-20 22:58:29 +10:00
itsmattkc 2849ae210c timeline/viewer: reimplemented "play in to out" and "loop" 2020-04-19 17:22:32 +10:00
itsmattkc 410f3d25dc fixed menu bugs introduced in f2bff5f150
Turns out setting a QMenu parent *not* in the constructor leads to very strange
behavior. All parents are now set in the constructor.
2020-04-19 16:19:08 +10:00
itsmattkc f2bff5f150 menu: ensure all addMenu() calls are followed with setParent() calls
Ensures memory taken by creating a new menu is freed.
2020-04-19 01:26:54 +10:00
itsmattkc 77c0db55a5 viewer: implemented display of title/action safe margins 2020-04-17 18:59:17 +10:00
itsmattkc aac47ba776 viewer: re-queue video renderer even when beyond the length
Ensures video renderer always renders where the playhead is.
2020-04-13 13:19:08 +10:00
itsmattkc 7bc7b6098b ui: moved remaining QMenus to our Menu class
Mainly to take advantage of Menu's specific styling on certain platforms to
keep a consistency.
2020-04-08 00:46:30 +10:00
itsmattkc 1aa87cbda6 various: encapsulate all code in the olive namespace to avoid name collisions
Large-scale code cleanup. Also adds a license to the top of all files that were
missing it.
2020-04-06 15:29:53 +10:00
itsmattkc 59fa80ae57 ui: on windows, use native menus
Minor UI improvement for Windows users.
2020-04-06 00:14:36 +10:00
itsmattkc 1319d7141f viewer: re-implemented auto viewer full screen from menubar/keyboard shortcut 2020-04-01 19:22:53 +11:00
itsmattkc ed48d24cbc viewerwindow: implemented displaying a viewer image fullscreen on another monitor
Implements an extra widget to display images on a separate monitor. Both
viewers have separate display color controls since different monitors may
conform to different standards/transforms.
2020-04-01 19:21:25 +11:00
itsmattkc 6ea6dd810e pixelsampler: added pixel sampler panel
When visible, this panel will show the current reference and display transformed
color under the cursor of any viewer.
2020-04-01 16:57:10 +11:00
itsmattkc 3c3543a2a9 viewer: avoid divide by zero on sequences with zero length 2020-03-21 13:15:11 +11:00
itsmattkc fed17e35fa audiowaveformview: optimizes waveform to only redraw when necessary
Draws to a pixmap only when the waveform changes so it doesn't have to be
regenerated on every draw. Also renames WaveformView to AudioWaveformView
2020-03-18 14:44:05 +11:00
itsmattkc 1c192100c2 viewer: fixed bug where seeking would be stuck to one frame 2020-03-17 00:01:18 +11:00
itsmattkc 50061e4e55 waveformview: show in/out points in waveformview
Moved drawing routines to the base class that is used by both TimeRuler
and WaveformView
2020-03-15 18:21:14 +11:00
itsmattkc a56484d3e6 timelinescaledobject: implemented minimum scale
Used by Viewer to keep TimeRuler and WaveformView within restrictions.
2020-03-14 22:34:23 +11:00
itsmattkc 7f2dcc8200 waveformview: made UI seekable 2020-03-14 01:57:40 +11:00
itsmattkc 73d693f2d5 waveformview: implemented basic waveformview display 2020-03-14 01:22:03 +11:00
itsmattkc c1c8067ee7 viewer: implemented basic zoom
No scrolling functionality yet, but the zoom is functional and efficient.
2020-03-13 16:41:09 +11:00
itsmattkc 0418c8ab85 viewer: began waveformview widget 2020-03-13 16:02:18 +11:00
itsmattkc e2fe9ad548 viewer: folded waveform view into base viewer widget class 2020-03-13 15:48:09 +11:00
itsmattkc 9e4c79699e node: split off traversing functions from renderer for usage elsewhere
Fixes issue where Viewer node wouldn't pick up correct length if a tracks
weren't in use.
2020-03-13 15:31:15 +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 fceb1e8d3e viewer: re-render both video and audio if parameters change 2020-02-24 11:57:39 +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 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 03bdf01357 decoder/renderer: no longer index automatically as part of the retrieve
functions

Indexing is a lengthy process and had a high chance of getting RenderWorkers
stuck doing it rather than being responsive to cache requests. This commit
introduces a system where workers never index media, but instead signal that
media is not ready to their RenderBackends which ensure that the media gets
indexed and re-queues the affected frames when those indexes are ready.
2020-02-19 11:44:29 +11:00
itsmattkc 8265fef5c5 viewer: update renderer parameters if the viewer node's parameters have changed 2020-02-17 15:34:26 +11:00
itsmattkc ceb70a1870 viewer: use internal texture to allow viewer to control texture as part of its
context

More intuitive code flow and allows the user to undock the viewer (which
forcibly destroys and recreates the context) and the viewer will handle
creation of the new texture in said new context.
2020-02-16 18:24:49 +11:00
itsmattkc 1776615999 viewer: map context menu position from sender rather than itself 2020-02-16 00:57:34 +11:00
itsmattkc d66425c324 prepared gl improvements for merge 2020-02-14 02:35:10 +11:00
itsmattkc 6a47b05ab8 work on oslworker 2020-02-14 02:13:38 +11:00
itsmattkc 40e8aec285 viewer: minor code improvements 2020-02-03 01:27:45 +11:00
itsmattkc 9b7cbb3fbd viewer: automatically update maximum scroll from media length 2020-02-01 23:09:25 +11:00