Commit Graph
53 Commits
Author SHA1 Message Date
itsmattkc f6760386ce renderer: improved handling of pixel aspect ratio and footage cache 2020-08-21 14:43:13 +10:00
itsmattkc 28dcff10c0 various: implement sequence pixel aspect ratios and interlacing settings
Implements the following:
- Sequences have pixel aspect ratios that work in tandem with footage PARs
  to render footage correctly. Viewer and export also acknowledge PARs
- Sequences can have interlacing settings. This doesn't do anything yet,
  eventually the renderer will need to interlace/deinterlace/reinterlace
  appropriately in order to conform all the footage to the sequence. Export
  acknowledges interlacing, but this only affects metadata, not the image.
2020-08-10 01:47:26 +10:00
itsmattkc edeeed49ba various: enabled config saving 2020-08-08 02:44:39 +10:00
itsmattkc fb05594b50 various: allow setting footage aspect ratios
We had support for detecting aspect ratios and respecting them in the
render, but this allows people to not only see the aspect ratio in use,
but also override it with their own.
2020-07-25 00:58:01 +10:00
itsmattkc 662d66ad10 transitions: extended transition logic
General code and functionality improvements. Moved more code out of the
OpenGL backend for portability. Implemented audio transitions.
Implemented basic transition animation curve settings.
2020-07-16 00:36:21 +10:00
itsmattkc e67b801a50 renderer: treat buffer inputs as texture inputs when appropriate
Fixes bug where a null buffer would not set a null texture.
2020-07-14 22:32:27 +10:00
itsmattkc 65ccac1dfe renderer: fixed bug that would render frames even after hash matching
Also enables the -Wshadow GCC warning to warn against the code bug that
caused this issue (and has caused other issues like it in the past).
2020-06-19 20:25:05 +10:00
itsmattkc b2a3cede2c renderer: re-use the same opengl instance for all background rendering
Previously the OpenGL instance was tied to each render/cache task,
creating and destroying it each time one started and stopped. This was
completely unnecessary since the instance holds no state and can be
shared by all of the render tasks without having to expensively start
a new one.
2020-06-19 17:06:14 +10:00
itsmattkc 5c5f09a20c renderer: added generate job
For nodes that produce an image on the CPU before sending it to the GPU.
2020-06-13 03:01:23 +10:00
itsmattkc af5097bf5f nodes: revert shader ID to string
Much easier to manage this way and fixes a compile issue on several
platforms.
2020-06-12 16:02:29 +10:00
itsmattkc 955d4ce910 opengl: clear ping-pong texture before blitting to it 2020-06-12 03:44:43 +10:00
itsmattkc dd7af0e6bd nodes: minor overhaul to functionality
The nodes now have more control over how their accelerated shaders/sample
functions are run, as well as how items are popped off the value tables.
This allows for various optimizations that we didn't have access to before.
2020-06-12 00:54:15 +10:00
itsmattkc 71ec148e76 renderer: moved all shader code into one solidified function
Makes texture-based optimizations easier when they're all in one place.
2020-06-10 01:54:02 +10:00
itsmattkc 2fc1ccebf7 openglproxy: implemented extra function for loading pre-cached frames into textures 2020-06-09 02:35:41 +10:00
itsmattkc 430561e2ac sequence: made divider a sequence parameter rather than a viewer parameter
Doing this makes the preview resolution an explicit project setting rather
than a temporary UI setting. This will allow more consistency when caching.
2020-06-08 14:41:35 +10:00
itsmattkc 87e7564222 cache: heavily reworked exporting for new system
Also cleans up cache in general and moves it to the Task infrastructure.
2020-05-19 23:35:17 +10:00
itsmattkc 814bbe8c22 fixed various segfaults in decoder and renderer 2020-05-18 02:40:58 +10:00
itsmattkc 8795e51452 renderer: massive overhaul to move to a vastly simplified threading system 2020-05-15 00:52:45 +10:00
itsmattkc 65705d580d renderer: keep frames in vram while paused
Saves some GPU cycles when adjusting parameters.
2020-05-08 00:32:02 +10:00
itsmattkc c387ce1cd7 polygon node: early crude implementation 2020-05-05 00:22:49 +10:00
itsmattkc 2b1640ac04 frame/texture: use dividers when allocating buffers
Allows render pipeline to know the "real" and "simulated" resolution of a
divided buffer.
2020-05-04 01:08:46 +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 ac3f49a845 nodes: moved matrix input on "video input" elsewhere
Rather than plugging a matrix into the video input node, the matrix is now
multiplied by the video input using a math node. This is probably more
sensible from a user perspective.

This also means the renderer is tolerant of texture sizes that are not equal
to the sequence size, however most nodes will downsample the texture to the
sequence size (and if not, it will be downsampled once it is cached). Textures
will still *always* be in reference space and the sequence's format. This seems
like the best compromise between backend and frontend congruity.
2020-04-27 04:11:24 +10:00
itsmattkc fef29db754 export: fixed bug that failed to export video if using a different export resolution 2020-04-23 02:00:49 +10:00
itsmattkc 361a986b79 renderer: added path for generating resized frames from textures 2020-04-22 22:58:00 +10:00
itsmattkc c9e797abdf various: conformed frame usages to respect stride 2020-04-22 15:54:47 +10:00
itsmattkc 38fcad6a3f cache: fixed signalling issue where changing default input didn't update the cache 2020-04-21 23:48:26 +10:00
itsmattkc d3b71e6576 nodes: color management when setting color parameters is now preserved 2020-04-18 17:43:37 +10:00
itsmattkc 2f80be437a node: fixed issue with "taking" values from input tables
As opposed to simply leaving all values in the table, nodes can now "take"
values that they use to free up memory (e.g. "taking" input buffers if they're
used to produce an output buffer).

This is a fairly large change, expect regressions.
2020-04-16 23:12:05 +10:00
itsmattkc a0a7d106dc mathnode: implemented add/subtract/multiply/divide/power functions
Includes implementing combobox UI for the NodeParamViewWidgetBridge.
2020-04-15 01:52:24 +10:00
itsmattkc a8fbe686e2 openglrenderer: retrieve frame in each worker thread rather than in the proxy thread
Since we now have decoders in each thread, we can parallelize by retrieving
frames in each thread as well.
2020-04-11 17:37:00 +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 626c50477c renderer: set null value on shader if no value was found in the table 2020-04-04 19:28:38 +11:00
itsmattkc 615e227f9a renderer: convert footage frames to reference pixel format
Due to an oversight, incoming footage frames were NOT converted to the
working pixel format (usually half or float). For most frames, this meant the
OCIO conversion would occur on frames while they were still in their source
format (usually either RGB8 or RGB16). This leads to rounding error
inaccuracies, but even worse GLSL will clamp integer textures to 1.0 potentially
losing a lot of data.

While later nodes would correctly convert to the appropriate format, by then it
would be too late. This commit corrects this issue, converting the frames to
float during the OCIO shader pass.
2020-04-04 14:15:18 +11:00
itsmattkc 07d1123978 renderer: disassociate requires float as well, so we may as well do the version before 2020-04-04 12:24:36 +11:00
itsmattkc ce88da80ef openglproxy: for shader inputs, use our new Color class instead of QColor 2020-04-04 04:15:57 +11:00
itsmattkc e1ca5f2f82 various: removed hardcoded OCIO::ROLE_SCENE_LINEAR to allow for a configurable reference space 2020-04-03 01:30:47 +11:00
itsmattkc f3290003be colordialog/wheel/gradient: implemented basic UI components for color picking 2020-04-02 13:02:30 +11:00
itsmattkc 1363d2b94c mathnode: expanded math node
Implemented handling of various different types.
2020-04-01 05:21:50 +11:00
itsmattkc 7100d00060 nodes: made changes to the node system to allow for context sensitive shader code
Primarily implemented for the math node so a new shader can be generated and
compiled based on what inputs the node is receiving.
2020-03-29 03:11:30 +11:00
itsmattkc 2ac6b601bf renderer: fixed segfault when no texture is generated 2020-03-13 17:03:27 +11:00
itsmattkc 3f043496f3 nodeparam: allowed for dynamic nodeparam property change to affect UI widgets
immediately
2020-03-07 02:16:48 +11:00
itsmattkc 0f5cd40c45 exporter: add ability to cancel exports (including a confirm to cancel if the
user closes the dialog mid-export)
2020-03-03 02:37:18 +11:00
itsmattkc c44c73e376 renderer: handle null frame
Minor reliability improvement.
2020-03-02 14:42:20 +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 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 78daf9e28a exporter: updated exporter to function with new render system 2020-02-25 20:03:15 +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 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