Oak Video Editor 项目结构概览(中文) ========================== 这份文档是基于当前仓库目录组织的快速导航,便于后续查找代码位置。 顶层目录 -------- - app: 主应用源码入口,涵盖核心、渲染、UI、插件、节点系统等。 - cmake: CMake 相关脚本与模块。 - docker: 构建/运行相关的容器配置。 - docs: 项目文档(你现在正在看的位置)。 - ext: 可能包含外部依赖或子模块(按需查看)。 - tests: 测试代码与用例。 - third_party: 第三方库及其源码(如 OpenFX HostSupport)。 - build、cmake-build-debug、test_compile: 构建产物或构建目录(通常不需要手动改)。 app 目录(核心模块) ------------------- - app/core.*: 应用核心入口、初始化流程。 - app/main.cpp: 程序入口点。 - app/version.*: 版本信息与构建元数据。 - app/common: 通用基础设施与工具类(日志、路径、字符串等)。 - app/config: 配置加载与项目设置。 - app/render: 渲染子系统(帧缓存、渲染管线、插件渲染桥接等)。 - app/node: 节点系统,节点类型与图结构的核心逻辑。 - app/widget: UI 控件与节点视图(节点图、参数面板等)。 - app/panel: UI 面板组织与管理。 - app/window: 窗口与主界面。 - app/timeline: 时间线与剪辑管理。 - app/tool: 交互工具(选择、裁剪等)。 - app/undo: 撤销/重做系统。 - app/task: 异步任务与后台作业。 - app/audio: 音频处理与播放。 - app/codec: 编解码相关支持。 - app/shaders: 渲染着色器资源。 - app/ts: 时间/时间轴相关通用类型。 - app/dialog: 对话框与提示类 UI。 - app/cli: 命令行工具入口或相关实现。 - app/pluginSupport: OpenFX 插件 Host 侧实现(Clip/Image/Param/Host/PluginInstance 等)。 - app/packaging: 打包或发布相关逻辑。 重点文件索引(按模块) ---------------------- 下面列的是“常用/核心入口”文件,不是完整清单,但足够定位主要流程。 核心入口与全局 ------------- - app/main.cpp: 程序入口。 - app/core.h、app/core.cpp: 应用生命周期与初始化总控。 - app/version.h、app/version.cpp: 版本与构建信息。 渲染系统 -------- - app/render/renderer.h、app/render/renderer.cpp: 渲染主调度。 - app/render/rendermanager.h、app/render/rendermanager.cpp: 渲染队列与任务管理。 - app/render/renderticket.h、app/render/renderticket.cpp: 单次渲染请求。 - app/render/renderprocessor.h、app/render/renderprocessor.cpp: 渲染处理管线。 - app/render/texture.h、app/render/texture.cpp: 纹理/帧数据容器。 - app/render/videoparams.h、app/render/videoparams.cpp: 视频格式参数。 - app/render/job/pluginjob.h、app/render/job/pluginjob.cpp: 插件渲染作业。 - app/render/plugin/pluginrenderer.h、app/render/plugin/pluginrenderer.cpp: OpenFX 插件渲染桥接。 节点系统 -------- - app/node/node.h、app/node/node.cpp: 节点基类与生命周期。 - app/node/param.h、app/node/param.cpp: 节点参数与动画/关键帧。 - app/node/value.h、app/node/value.cpp: 节点值与运行时数据。 - app/node/factory.h、app/node/factory.cpp: 节点注册与创建。 - app/node/traverser.h、app/node/traverser.cpp: 图遍历与求值。 - app/node/plugins/Plugin.h、app/node/plugins/Plugin.cpp: OpenFX 插件节点。 OpenFX Host 侧实现 ------------------ - app/pluginSupport/OliveHost.h、app/pluginSupport/OliveHost.cpp: OpenFX Host 入口与消息接口。 - app/pluginSupport/OlivePluginInstance.h、app/pluginSupport/OlivePluginInstance.cpp: 插件实例生命周期与参数管理。 - app/pluginSupport/OliveClip.h、app/pluginSupport/OliveClip.cpp: Clip 实例与图像读写桥接。 - app/pluginSupport/image.h、app/pluginSupport/image.cpp: OpenFX Image 封装与数据映射。 - app/pluginSupport/paraminstance.h、app/pluginSupport/paraminstance.cpp: 参数实例实现。 - third_party/openfx/HostSupport/include/ofxhImageEffect.h: HostSupport 核心接口。 节点 UI(Node View) ------------------- - app/widget/nodeview/nodeview.h、app/widget/nodeview/nodeview.cpp: 节点视图主控。 - app/widget/nodeview/nodeviewitem.h、app/widget/nodeview/nodeviewitem.cpp: 节点渲染与交互。 - app/widget/nodeview/nodeviewscene.h、app/widget/nodeview/nodeviewscene.cpp: QGraphicsScene 逻辑。 - app/widget/nodeview/nodeviewedge.h、app/widget/nodeview/nodeviewedge.cpp: 连线显示。 参数 UI(Param View) -------------------- - app/widget/nodeparamview/nodeparamview.h、app/widget/nodeparamview/nodeparamview.cpp: 参数面板主控。 - app/widget/nodeparamview/nodeparamviewitem.h、app/widget/nodeparamview/nodeparamviewitem.cpp: 参数项容器与布局。 - app/widget/nodeparamview/nodeparamviewwidgetbridge.h、app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp: 参数类型到控件的桥接。 - app/widget/nodeparamview/nodeparamviewtextedit.h、app/widget/nodeparamview/nodeparamviewtextedit.cpp: 多行文本参数控件。 面板与窗口 ---------- - app/panel/panelmanager.h、app/panel/panelmanager.cpp: 面板管理器与切换逻辑。 - app/panel/timebased/timebased.h、app/panel/timebased/timebased.cpp: 时间基面板基类(时间轴/视图共享逻辑)。 - app/panel/node/node.h、app/panel/node/node.cpp: 节点面板入口。 - app/panel/param/param.h、app/panel/param/param.cpp: 参数面板入口。 - app/window: 主窗口与窗口级 UI 结构。 时间线/播放核心 -------------- - app/node/output/viewer/viewer.h、app/node/output/viewer/viewer.cpp: Viewer 输出节点(播放头/长度/渲染请求)。 - app/widget/viewer/viewer.h、app/widget/viewer/viewer.cpp: Viewer 面板与播放控制。 - app/widget/timelinewidget/timelinewidget.h、app/widget/timelinewidget/timelinewidget.cpp: 时间线 UI 与交互主控。 进度与任务 UI ------------ - app/dialog/progress/progress.h、app/dialog/progress/progress.cpp: 通用进度对话框。 - app/widget/taskview/taskviewitem.h、app/widget/taskview/taskviewitem.cpp: 任务进度条展示。 撤销/编辑分组 ------------ - app/undo/undocommand.h、app/undo/undocommand.cpp: UndoCommand 与 MultiUndoCommand 的基础实现。 - app/undo/undostack.h、app/undo/undostack.cpp: 撤销栈(无原生“批量编辑”接口)。 - app/pluginSupport/OlivePluginInstance.h、app/pluginSupport/OlivePluginInstance.cpp: OpenFX editBegin/editEnd 触发时创建批量撤销分组。 - app/pluginSupport/OlivePluginInstance.cpp: DeferredRedoCommand 包装已应用的命令,避免批量 push 时重复执行。 - app/pluginSupport/paraminstance.h、app/pluginSupport/paraminstance.cpp: 参数 Set 走统一的 SubmitUndoCommand 接口,支持批量合并。 与 OpenFX 相关的主要位置 ----------------------- - app/pluginSupport: OpenFX HostSupport 的封装与 Olive 侧实现。 - app/render/plugin: 插件渲染调度与帧处理逻辑。 - app/node/plugins: 插件节点定义与 UI 参数桥接。 - third_party/openfx: OpenFX HostSupport 源码与接口头文件。 构建与配置 ---------- - CMakeLists.txt: 根构建配置入口。 - cmake/: 自定义 CMake 模块与工具链脚本。 其他说明 -------- - README.md: 项目整体说明与开发入口。 - TODO-zh.md: OpenFX 支持的中文 TODO 说明。 流程图/调用关系(ASCII) ----------------------- OpenFX 插件渲染主流程(逻辑简化): ``` Node(Graph) -> app/node/plugins/Plugin.cpp -> app/render/plugin/pluginrenderer.cpp -> app/pluginSupport/OlivePluginInstance.cpp -> app/pluginSupport/OliveClip.cpp -> app/pluginSupport/image.cpp -> app/render/texture.cpp / AVFrame 映射 ``` OpenFX 参数 UI 生成流程(逻辑简化): ``` OFX Param Descriptor -> app/pluginSupport/OlivePluginInstance.cpp (newParam) -> app/node/plugins/Plugin.cpp (Node Input 生成) -> app/widget/nodeparamview/nodeparamview.cpp -> app/widget/nodeparamview/nodeparamviewwidgetbridge.cpp (控件桥接) ``` 插件消息展示流程(逻辑简化): ``` OFX Host Message -> app/pluginSupport/OliveHost.cpp (保存消息) -> app/pluginSupport/OlivePluginInstance.cpp (发出消息数量变化) -> app/widget/nodeview/nodeviewitem.cpp (节点右上角徽标) -> app/widget/nodeparamview/nodeparamviewitem.cpp (面板顶部消息) ```