Two user-mandated amendments: - Decode must be GPU wherever possible and share the render GPU's memory: hardware surfaces (NV12/P010) are imported as GPU textures via the platform interop paths (DMA-BUF / DXGI / IOSurface / CUDA-Vulkan), av_hwframe_transfer_data is never executed on the hw path, and CPU decode + staging upload demotes to fallback only. FFmpeg hwaccel first (the hwdecode.rs device model already builds the device contexts; upstream Olive has no hw decode at all, so the reference for this part is FFmpeg + the existing crate), hand-written GPU decode strictly second. YUV->RGB becomes a built-in GPU pass replacing CPU swscale. Milestone M5 becomes the GPU-decode zero-copy track with HW_TRANSFERS zero as its acceptance counter. - The Job graph becomes a real adjacency structure (no linear table, no 2D array, possibly not fully connected) with a fixed pair of virtual GraphInput/GraphOutput nodes per graph: connected by default, undeletable, un-duplicable, shown in the node editor. resolve is a Kahn-style BFS from the input node — multi-input joins wait for every input, multi-output fans out, the order is deterministic and graph-explicit, cycles error out, unreachable nodes never run — until every branch converges at the output node. M0 splits into M0a (Job enum + single-loop match) and M0b (virtual endpoints + BFS + node-editor display).
长期计划(plans)
本目录收纳 Oak 的中长期规划文档与并行执行计划。已完成的战役
文档归档在 completed/;进行中的计划在下方目录。
目录
| 文档 | 内容 | 启动前提 |
|---|---|---|
ai-agent-design.md |
AI Agent 插件设计(已按 OPP/1 重写):多模态 LLM 作为外部插件经策展工具面自动剪辑,render.* 取帧回喂形成"编辑→看图→再编辑"视觉闭环;事务化编辑、双层确认、声明式 AI 面板、Mock LLM/回放夹具测试、A1–A5 里程碑 |
external-plugin-system P1–P3 完成(面板需 P4) |
external-plugin-system.md |
外部功能插件系统:插件=独立进程(非库加载),JSON-RPC over stdio 控制面 + shm 数据面(泛化 M15 render-worker 传输);策展宿主 API(事务化可撤销编辑、取帧回喂 AI)、声明式/像素面双 UI 路径、能力位与确认模式;含与 ai-agent-design.md 的关系与 P1–P6 里程碑 | 已解锁(RIIR + M15 完成),随时启动 |
external-plugin-protocol.md |
插件协议规范 OPP/1:NDJSON 分帧 + JSON-RPC 2.0 双向信封、握手/心跳/关闭、全量方法/事件/错误码、编辑事务协议、shm 数据面(无头部无锁)、声明式与像素面 UI 协议、限流配额、版本演进规则、AI 粗剪报文示例 | 随 external-plugin-system 启动 |
render-pipeline-threads.md |
渲染管线改造:单解码线程 + 单渲染线程 + 主进程上屏(GPU 单队列,多进程无意义);解码硬解优先且零拷贝(FFmpeg hwaccel 经 DMA-BUF/DXGI/IOSurface/CUDA 导入,CPU 解码上传仅 fallback,手写 GPU 解码为次选);OpenFX 收编进唯一隔离进程;decode→render→present 三队列流水线;内置效果全 GPU 零拷贝;resolve 重写为 match+Job 单循环并升级为 Job 图(GraphInput/GraphOutput 虚拟端点可见、禁删,从输入节点 Kahn 形态 BFS 至全部分支汇聚输出节点);M0a–M5 里程碑 | 已解锁,随时启动(M0a 独立先行) |
其他参考
- 构建:
docs/zh/build.md、docs/zh/build_macos-zh.md - 工程文件:
docs/zh/project-file-reference.md - 代码风格与 Google Test 要求:
CONTRIBUTING.md(仓库根)