Commit Graph
167 Commits
Author SHA1 Message Date
Mike-Solar ff0eee3a88 perf(plugin): cache PluginRenderer per-thread and skip redundant clip prefs
Fix three performance traps in the OFX plugin preview pipeline that
  caused slideshow-like performance when any plugin was active.

  1. Eliminate per-frame PluginRenderer creation (GL FBO alloc/free)

     RenderProcessor is stack-allocated per ticket, so its
     plugin_renderer_ member was constructed and destroyed every frame.
     PluginRenderer inherits OpenGLRenderer, whose PostInit() calls
     glGenFramebuffers() and whose destructor calls glDeleteFramebuffers().
     On Apple Silicon's TBDR this is pathologically expensive.

     Fix: use a thread_local cached PluginRenderer so each render thread
     creates it only once and reuses it forever.

  2. Call getClipPreferences() conditionally

     The code unconditionally called instance->getClipPreferences() on
     every single frame. This dispatches kOfxImageEffectActionGetClipPreferences
     into the plugin even when no inputs or parameters have changed.

     Fix: check areClipPrefsDirty() first. The OpenFX Host Support library
     already tracks this flag and sets it to true when slave params or clip
     connections change.

  3. Call ApplyParamOverrides() before renderAction

     ApplyParamOverrides() was defined but never invoked, so animated
     plugin parameters were never pushed into the OFX instance before
     rendering.

     Fix: call it after beginRenderAction() and before renderAction(),
     injecting the current NodeValueRow values at the correct OfxTime.
2026-05-16 17:34:29 +08:00
Mike-Solar 599c876d03 全链路强制F32 2026-05-14 01:51:14 +08:00
Mike-Solar bfb1b2fce4 update copyright back 2026-01-16 21:22:05 +08:00
Mike-Solar e851653fa3 尝试修复粉紫屏未果 2026-01-16 21:11:24 +08:00
Mike-Solar 4d393f3d23 尝试解决插件bug 2026-01-10 18:56:58 +08:00
Mike-Solar 8ed5660faf solve some bugs 2026-01-05 18:01:13 +08:00
Mike-Solar b8669f6a11 Change project name; 2026-01-05 16:22:26 +08:00
Mike-Solar f191486375 Implement multi-input OFX clip wiring and texture handling
Store PluginJob input values for lookup
Add per-clip texture inputs on plugin nodes
Map input clips to textures during render (with Source fallback)
2026-01-04 22:30:41 +08:00
Mike-Solar 8a7b6cf869 Add OFX plugin support and related infrastructure
This commit extends the OFX plugin support in Olive by:

- Initializing and scanning for OFX plugins
- Updating PluginNode to handle OFX plugin parameters and inputs
- Adding necessary methods and properties for OFX plugin integration
- Enhancing NodeFactory to include OFX plugin nodes
- Refactoring and renaming OliveInstance to OlivePluginInstance
- Introducing new classes for parameter handling (ParamInstance)
- Adding PluginJob for rendering OFX plugins
- Adjusting CMakeLists.txt files to include new source files
2025-11-09 17:03:56 +08:00
Mike-Solar 26e6924cdf feat: Implement OFX plugin support infrastructure
This commit adds comprehensive support for OFX plugins in Olive, including:

- Add plugin node infrastructure with getPlugin() method
- Implement OliveHost for managing OFX plugin instances
- Create OliveInstance to handle plugin parameter and timeline interactions
- Add OliveClip implementation for plugin clip handling
- Implement region of definition (RoD) and region of interest (RoI) functionality
- Add interactive mode support in Current class
- Integrate plugin rendering into RenderProcessor
- Fix include dependencies and remove unused OlivePlugin.cpp reference
2025-10-25 17:59:50 +08:00
Mike Solar 6fdfd03ffd update: update copyright 2025-08-05 17:12:49 +08:00
Mike Solar 74f73ab3be change: change code style to Linux style except indent. 2025-08-03 03:09:40 +08:00
itsmattkc 11e4e051c3 move undo files around for better organization 2023-02-20 16:09:22 -08:00
itsmattkc 9745b536f6 nodes: remove graph and merge into project 2023-02-17 14:13:03 -08:00
itsmattkc dd9c52ab59 start moving core frameworks to external libraries 2023-01-19 09:51:47 -08:00
itsmattkc 42ba84bf5f multicam: finished UI implementation 2022-10-03 17:24:09 -07:00
itsmattkc 6e183fe4be multicam: refactor to heavily optimize multicam monitor retrieval 2022-09-29 17:50:09 -07:00
itsmattkc c1c2d0bc05 Merge branch 'master' into multicam 2022-09-25 16:39:03 -07:00
itsmattkc f12553c80a renderprocessor: remove debug lines 2022-09-24 18:59:38 -07:00
itsmattkc c0d8ff403f nodes: rework so that jobs can be completely deferred
Big optimization requiring a lot of refactoring.
2022-09-24 18:44:59 -07:00
itsmattkc 825b06f7a7 render: only use cache in offline mode 2022-09-23 12:31:17 -07:00
itsmattkc b19730b1f5 nodes: store time with accelerated jobs
Fixes #2031
2022-09-23 02:55:18 -07:00
itsmattkc 3abc9eb1d1 nodes: revise means of limiting array elements 2022-09-19 08:55:37 -07:00
itsmattkc f157e5014d fix more instances where sample counts used int instead of size_t 2022-09-16 00:35:48 -07:00
itsmattkc bd3f024d01 render: check for more cancels 2022-09-14 10:08:43 -07:00
itsmattkc 21231540fd audio: use std vectors and size_t for sample indices 2022-09-01 12:52:23 -07:00
itsmattkc 54d0a94a20 Merge branch 'master' into cache-update 2022-08-18 08:12:46 -07:00
itsmattkc 30b64d9b9c render: reimplemented deinterlacing with new shader-based format conversion 2022-08-08 14:05:11 -07:00
itsmattkc 1ac205413c footage: allow overriding YCbCr range
Fixes #1354
2022-08-08 12:49:50 -07:00
itsmattkc 9636ec202d render: allow forcing channel count 2022-07-28 08:57:18 -07:00
itsmattkc 25e94112f8 viewer: implement lookahead to ensure footage is ready in advance 2022-07-26 14:49:19 -07:00
itsmattkc b0446e237b render: how the fuck did it do this? 2022-07-26 10:37:44 -07:00
itsmattkc e067acb999 renderprocessor: commit line that github desktop undid for no reason 2022-07-26 10:14:46 -07:00
itsmattkc 0d9727b6d2 architecture: move loop modes to clips 2022-07-17 15:22:36 -07:00
itsmattkc a8d46c4c5f render: fix issue responding to cancelled tasks 2022-07-10 12:54:55 -07:00
itsmattkc 3963797dee render: add extra flush when returning cpu frame 2022-07-09 21:46:02 -07:00
itsmattkc 7e1792cfea Merge branch 'master' into cache-update 2022-07-01 22:32:49 -05:00
itsmattkc 8ff3544cb3 renderer: add null checks 2022-07-01 21:38:29 -05:00
itsmattkc 1b1259225e render: handle missing cache frames 2022-06-06 20:06:55 -07:00
itsmattkc 25699ef05b cache: use disk states to share caches 2022-06-05 19:47:33 -07:00
itsmattkc 13299d0a3b cache: implemented base functionality for clip cache 2022-06-04 17:29:09 -07:00
itsmattkc 998b9ba482 Merge branch 'master' into hashremoval 2022-06-01 10:06:33 -07:00
itsmattkc 8939a3aa66 allow concurrent decoders for different blocks 2022-06-01 10:03:33 -07:00
itsmattkc eb9b1850ae minor code cleanup 2022-05-31 20:14:07 -07:00
itsmattkc 903d7bb1e6 Merge branch 'master' into hashremoval 2022-05-30 17:32:39 -07:00
itsmattkc 930848e07a decoder: make texture inside decoder 2022-05-29 18:33:35 -07:00
itsmattkc 2f7dc3c98b implemented separate waveform cache 2022-05-29 17:52:35 -07:00
itsmattkc 89b6cce2b2 Merge branch 'master' into hashremoval 2022-05-29 11:18:58 -07:00
itsmattkc 3d8c0114fb render: remove unused function 2022-05-27 11:20:38 -07:00
itsmattkc 6a65c0fa38 render: clamp audio samples when finalized 2022-05-27 10:04:30 -07:00