Files
oak-editor/docs/zh/structure.md
T
2026-01-05 16:22:26 +08:00

8.2 KiB
Raw Blame History

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 核心接口。

节点 UINode 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: 连线显示。

参数 UIParam 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 (面板顶部消息)