- Add an LRU prerender cache (2–3 seconds ahead) and proxy clip support, implemented as incremental, compile-safe steps within the current architecture.
- Playback/render scheduling:
app/render/renderprocessor.cpp,app/render/plugin/pluginrenderer.cpp,app/node/traverser.cpp - Plugin node inputs/defaults:
app/node/plugins/Plugin.cpp - Clip image/texture fetch:
app/pluginSupport/OliveClip.cpp,app/pluginSupport/OliveClip.h - Node graph and values:
app/node/node.h,app/node/node.cpp,app/node/value.h - Project/serialization:
app/node/project/serializer/*
- Add a small cache module, e.g.
app/render/cache/framecache.h/.cpp. - Define:
FrameCacheKey(graph version/hash, time, params, proxy mode, render scale).FrameCacheEntry(AVFrame or Texture + metadata + byte size + last-used).FrameCacheAPI:get(key),put(key, entry),invalidateByVersion(version).
- Wire in a compile-only stub with no runtime usage.
- Add a lightweight “graph version” counter to
Nodeor a render pipeline owner. - Increment on param changes and graph edits.
- Expose a read-only version getter for the render pipeline.
- In
renderprocessor.cppplayback path, check cache before rendering:- If hit, present cached frame.
- If miss, render normally and
putinto cache.
- Keep budget small (few frames) to minimize risk.
- Add a render queue for time range [now, now+N] (N = 2–3s).
- Limit worker count (e.g., 2–3 tasks) to avoid UI starvation.
- Prioritize current frame > near future.
- On seek, cancel or drop stale tasks.
- Enforce memory budget and frame count cap.
- Evict least-recently-used entries.
- Cache CPU frames by default for safety.
- For GL outputs, upload from cached CPU frame when displayed.
- Optionally add GPU caching later behind a feature flag.
- Add counters for hit rate, average render time, and drops.
- Log only in debug builds.
- Extend clip metadata with:
proxy_path,proxy_width,proxy_height,proxy_codec,proxy_fps.
- Add read/write in
app/node/project/serializer/*.
- Add project-level and clip-level proxy mode:
Auto,ForceProxy,ForceOriginal.
- Add a simple resolver in clip/media source code that picks proxy if enabled.
- Add a background task to build proxies (using existing render/export tasks).
- Store output path and metadata on success.
- Add “Generate Proxy” action + proxy indicator.
- Add “Relink Proxy” dialog.
- Compare proxy vs original for timing and sync.
- Ensure proxies are ignored for export unless explicitly enabled.
- Add cache module + types (no references).
- Add graph version counter (increment on changes).
- Wire cache lookup for current frame only.
- Add prerender queue (2–3 seconds) with limited concurrency.
- Add LRU eviction + memory budget.
- Add cache invalidation on graph version change.
- Add basic metrics/logging.
- Add proxy metadata fields + serialization.
- Add proxy selection policy (Auto/Force modes).
- Add proxy generation task + UI entry points.
- Default cache size per hardware tier.
- Where to store proxy files on disk.
- Whether to cache GPU textures or CPU frames only.