Mike-Solar 3845c31b37 perf(plugin): eliminate GPU↔CPU ping-pong in OFX render path
This commit removes redundant readbacks and uploads in the OpenFX
  plugin pipeline, achieving zero-copy rendering for GL-capable
  plugins and reducing CPU path overhead.

  PluginRenderer (OpenGL path):
  - Skip ReadbackTextureToFrame + ConvertFrameIfNeeded + Upload after
    plugin render. The destination texture is already valid on GPU.
  - Pass readback_cpu=false to setInputTexture() so input textures are
    provided via loadTexture() (GL texture IDs) instead of being
    downloaded to CPU Image buffers.
  - Remove duplicate ReadbackTextureToFrame block between
    getClipPreferences and the second setInputTexture call.

  OliveClipInstance:
  - Add optional bool readback_cpu=true to setInputTexture(). When
    false, only params and input_textures_ are updated; CPU readback
    and memcpy into Image are skipped.
  - Add pruneImagesCache() to prevent unbounded growth of images_.
    Input clips are limited to 8 cached frames; output clips are
    left untouched.

  Micro-optimizations:
  - Replace per-row memcpy loops with single block memcpy when
    src/dst strides are contiguous (common case in Olive pipeline).
  - Remove dead GL_PREAMBLE macro definition.

  fix(viewer): resolve playback head lag, frozen frames, and pause delay

  Three playback pipeline behavioral issues are fixed:

  1. Prequeue blocked playhead start:
     Reduce kVideoPlaybackInterval from 0.5s to 0.1s. This lowers
     prequeue length from 15–30 frames to 3–6 frames, so the
     playback timer starts much sooner after pressing Play.

  2. Frozen display during playback:
     Relax the hard frame-drop logic in RendererGeneratedFrameForQueue.
     When the queue has fewer than 2 frames, keep late frames instead
     of dropping them, preventing the viewer from freezing entirely
     when rendering cannot keep up with playback speed.

  3. Delayed frame update after pause:
     Cancel in-flight render tickets in PauseInternal() before
     deleting queue watchers. Previously the render thread continued
     processing stale playback frames, blocking the single-frame
     render requested by UpdateTextureFromNode().
2026-05-16 16:45:13 +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%