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
2026-04-12 01:26:41 +08:00
2026-01-16 21:22:05 +08:00
2026-01-16 21:22:05 +08:00
2026-05-14 01:51:14 +08:00
2026-04-12 01:08:22 +08:00
2026-01-10 18:56:58 +08:00
2026-01-16 21:11:24 +08:00
2025-11-23 16:39:30 +08:00
2026-01-16 21:22:05 +08:00
2025-08-03 22:50:36 +08:00
2026-01-05 14:24:28 +08:00
2026-01-05 14:24:28 +08:00
2024-05-13 14:49:53 +02:00
2026-01-05 16:22:26 +08:00
2026-01-05 16:22:26 +08:00
2026-01-17 16:53:54 +08:00
2026-01-17 16:53:54 +08:00
2026-01-05 16:22:26 +08:00
2026-01-05 21:31:35 +08:00

Oak Video EditorBuild status

Oak Video Editor is a free non-linear video editor for Windows, macOS, and Linux.

Unfortunately, the original author has not submitted code updates for over 7 months, and no public contact information (email or otherwise) is available to reach them directly.

This project is a community-maintained fork of Olive Video Editor. screen

NOTE: Oak Video Editor is alpha software and is considered highly unstable. While we highly appreciate users testing and providing usage information, please use at your own risk.

Binaries

The original author compiled following binaries:

OpenFX Support TODO

  • Implement plugin discovery/loading from a given path and populate the cache (currently creates host/cache only). app/pluginSupport/OliveHost.cpp
  • Wire output clip image storage: allocate a backing buffer, set kOfxImagePropData, and update bounds/rowBytes before render. app/pluginSupport/OliveClip.cpp
  • Provide real input clip image fetches (currently returns an empty Image for inputs). app/pluginSupport/OliveClip.cpp
  • Ensure render path sets per-frame output data and handles ROD/bounds correctly. app/render/plugin/pluginrenderer.cpp
  • Add missing param instance types (String, Double3D/Integer3D, Group/Page, Custom/Bytes) and mapping to node inputs. app/pluginSupport/OlivePluginInstance.cpp, app/node/plugins/Plugin.cpp
  • Implement editBegin/editEnd, progress, and timeline hooks instead of stubs. app/pluginSupport/OlivePluginInstance.cpp, app/pluginSupport/OlivePluginInstance.h
  • Integrate persistent message handling with the app UI (currently TODO placeholders). app/pluginSupport/OlivePluginInstance.cpp
  • Decide and enforce project extent/fielding behavior instead of the current placeholder comment. app/pluginSupport/OlivePluginInstance.cpp
  • Add OpenGL texture render suite support or explicitly disable it (currently loadTexture returns null). app/pluginSupport/OliveClip.h
S
Description
No description provided
Readme GPL-3.0
73 MiB
Languages
C++ 87.8%
C 8.2%
CMake 3.3%
GLSL 0.5%