[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"latest-release":3},{"id":4,"version":5,"tag_name":5,"release_notes":6,"is_prerelease":7,"published_at":8,"assets":9},"5f29c9dd-2029-4a74-b9bb-622bb9f428f0","v0.4.2-alpha","# Oak Video Editor v0.4.2 — Release Notes \u002F 更新说明\r\n\r\n> 主题 \u002F Theme：测试覆盖大扩充与集中 Bug 修复（无 GPU 环境可运行的 gtest）\r\n> Test coverage expansion & bug-fix round (headless, GPU-free gtest)\r\n\r\n---\r\n\r\n## 中文版\r\n\r\n### 概览\r\n\r\n- 测试规模：**642 → 1,985 个用例**（+1,343），新增测试文件 **55 个**，全部在 offscreen QPA、无 GPU 环境通过，全量 **0 失败**（56 个为既有 GPU 后端门控跳过）。\r\n- 修复真实 Bug **70+ 个**（其中崩溃\u002FUB 类约 20 个），绝大部分附带锁定回归的测试。\r\n- 行覆盖率（gcov）：音频子系统 64% → **80.3%**，节点相关 28% → **69.3%**，渲染子系统 23% → **39.9%**（剔除 GPU 文件后约 66%），插件 24% → **33.6%**。\r\n\r\n### 主要 Bug 修复（按类别）\r\n\r\n**崩溃 \u002F 稳定性**\r\n- `AudioPlaybackCache` 零填充从未写入（`write(const char*)` 按 C 字符串截断）且 `WriteSilence()` 死循环。\r\n- `NodeKeyframe` 默认构造函数遗留未初始化指针；`Project` 在默认 OCIO 配置初始化前构造即段错误；`Core::ShowStatusBarMessage`、`PanelManager` 单例、`ProjectLoadTask`、未知图形后端下的 `RenderManager` 成员、`CurveView`\u002F`SeekableWidget` 空解引用等十余处崩溃修复。\r\n- `NodeGroup::GetInputName`、`DespillNode` 无项目上下文、`Sequence::GetTrackFromReference`、PortAudio 设备索引等空指针\u002F越界防护。\r\n\r\n**逻辑错误**\r\n- 波形同步：`PanNode` 关键帧声像被静默忽略、`ViewerOutput` 音频流 tag 丢失、`AudioVisualWaveform` 下溢越界读与长度记账错误。\r\n- 节点：`MathNode`\u002F`TrigonometryNode` 组合框与枚举错位、递归移动依赖失效、RemoveAllKeyframes 撤销失效、`NodeValueTable::Has` 误用位运算、`Project::cache_path()` 自定义路径分支反转、失败素材探测被永久缓存、富文本半透明色 RGB 丢失、序列预设交错模式丢失、mosaic 单轴匹配失效等。\r\n- 构建：`CMAKE_C_FLAGS` 未加引号导致自定义编译标志破坏构建。\r\n\r\n**资源 \u002F 状态**\r\n- `delete_all_keyframes` 死循环、`TrackList` 信号连接泄漏、`Renderer::Destroy` 颜色缓存资源泄漏、`OpacityEffect` 内部节点泄漏、磁盘缓存自定义路径失效。\r\n\r\n**兼容修复**\r\n- 序列化 ID 拼写统一（ChromaKey `tolerence`→`tolerance`，flip\u002Fripple\u002Fswirl\u002Ftile\u002Fwave 节点 ID 域统一），旧项目文件通过新增的旧 ID 映射钩子**照常加载**（值与连接均保留）。\r\n\r\n**CI \u002F 跨平台**\r\n- Windows 路径分隔符导致的测试失败、OCIO 默认配置按需初始化（Windows 套件顺序崩溃）、硬解帧断言按平台区分、图标断言兼容不同 Qt 构建、macOS 上 `ViewerSmokeTimer.DifferentTimebases` 对调度抖动过敏感。\r\n\r\n### 打包\r\n\r\n- **Vulkan 渲染后端现在随所有平台的安装包发布**（此前只有 OpenGL 后端 `liboakgl`）：Linux 各包（AppImage\u002Fdeb\u002Frpm\u002FArch）启用 Vulkan 构建并随包携带 `liboakvulkan`（AppImage 同时捆绑 libvulkan，deb\u002Frpm 依赖声明补充 `libvulkan1`\u002F`vulkan-loader`）；macOS 补充 `vulkan-loader` 依赖并导出 `VULKAN_SDK`（此前 Vulkan 后端在 macOS 从未被构建）；Windows 原本已包含 `oakvulkan.dll`。\r\n- `libffmpeg_bridge.so` 安装位置从非标准的 `\u002Fusr\u002Fffmpeg_bridge\u002Fbin` 改为标准的 `lib` 目录。\r\n- 构建指南（中英）补充 macOS Vulkan 后端依赖与 `VULKAN_SDK` 设置。\r\n\r\n---\r\n\r\n## English Version\r\n\r\n### Overview\r\n\r\n- Test suite: **642 → 1,985 cases** (+1,343) across **55 new test files**, all passing headless (offscreen QPA, no GPU) with **zero failures** (56 pre-existing GPU-gated skips).\r\n- **70+ real bugs fixed** (~20 crash\u002FUB-class), most locked in by regression tests.\r\n- Line coverage (gcov): audio 64% → **80.3%**, node 28% → **69.3%**, render 23% → **39.9%** (~66% excluding GPU-only files), plugin 24% → **33.6%**.\r\n\r\n### Key Bug Fixes (by category)\r\n\r\n**Crashes \u002F stability**\r\n- `AudioPlaybackCache` zero padding never written (`write(const char*)` truncated at NUL) plus a `WriteSilence()` infinite loop.\r\n- Uninitialized `NodeKeyframe` pointers; `Project` construction before OCIO default config (segfault); `Core::ShowStatusBarMessage`, `PanelManager` singleton, `ProjectLoadTask`, `RenderManager` members under unknown backends, `CurveView`\u002F`SeekableWidget` derefs — a dozen crash fixes.\r\n- Null\u002Fout-of-range guards for `NodeGroup::GetInputName`, `DespillNode` without a project, `Sequence::GetTrackFromReference`, PortAudio device indices.\r\n\r\n**Logic errors**\r\n- Sync: `PanNode` keyframed pan silently dropped, `ViewerOutput` audio stream tag lost, `AudioVisualWaveform` unsigned underflow and length bookkeeping.\r\n- Nodes: `MathNode`\u002F`TrigonometryNode` combo\u002Fenum misalignment, recursive dependency move, broken RemoveAllKeyframes undo, `NodeValueTable::Has` bitwise misuse, inverted `Project::cache_path()` custom branch, failed footage probes cached forever, rich-text alpha color RGB loss, sequence preset interlacing loss, mosaic single-axis skip.\r\n- Build: unquoted `CMAKE_C_FLAGS` broke any custom C flags.\r\n\r\n**Resources \u002F state**\r\n- `delete_all_keyframes` infinite loop, `TrackList` signal leak, `Renderer::Destroy` color-cache leak, `OpacityEffect` internal node leak, dead custom disk-cache path.\r\n\r\n**Compatibility**\r\n- Serialized ID typos unified (ChromaKey `tolerence`→`tolerance`, flip\u002Fripple\u002Fswirl\u002Ftile\u002Fwave node ID domain); old projects **keep loading** via a new legacy-ID mapping hook (values and connections preserved).\r\n\r\n**CI \u002F cross-platform**\r\n- Windows path-separator test failure, on-demand OCIO default config (Windows suite-order crash), hardware-decoded frame assertions per platform, icon assertions robust across Qt builds, `ViewerSmokeTimer.DifferentTimebases` too sensitive to scheduling jitter on macOS.\r\n\r\n### Packaging\r\n\r\n- **The Vulkan render backend now ships in every platform's package** (previously only the OpenGL backend `liboakgl`): Linux packages (AppImage\u002Fdeb\u002Frpm\u002FArch) build with Vulkan enabled and bundle `liboakvulkan` (the AppImage also bundles libvulkan; deb\u002Frpm gain `libvulkan1`\u002F`vulkan-loader` dependencies); macOS adds the `vulkan-loader` dependency and exports `VULKAN_SDK` (the Vulkan backend was never built on macOS before); Windows already shipped `oakvulkan.dll`.\r\n- `libffmpeg_bridge.so` now installs into the standard `lib` directory instead of the non-standard `\u002Fusr\u002Fffmpeg_bridge\u002Fbin`.\r\n- Build guides (EN\u002FZH) document the macOS Vulkan backend dependencies and the `VULKAN_SDK` variable.\r\n",false,"2026-07-17T14:13:21Z",[10,18,24,30,36,41],{"id":11,"platform":12,"arch":13,"filename":14,"size_bytes":15,"sync_status":16,"synced_at":17},"2e6bb5d8-2f64-48ba-b940-c3e0f01c37d4","linux",null,"oak-video-editor-0.4.1-Linux.rpm",15125479,"ready","2026-07-17T14:14:52.907685Z",{"id":19,"platform":12,"arch":20,"filename":21,"size_bytes":22,"sync_status":16,"synced_at":23},"3cd67d06-6861-4a31-b787-cb35d1a16fdb","x86_64","oak-video-editor-0.4.2_alpha-1-x86_64.pkg.tar.zst",14980453,"2026-07-17T14:14:55.261311Z",{"id":25,"platform":26,"arch":13,"filename":27,"size_bytes":28,"sync_status":16,"synced_at":29},"36e7d2c9-92f8-4725-a440-dfc691b76ff3","macos","Oak-Video-Editor-macOS.dmg",98206172,"2026-07-17T14:15:06.964868Z",{"id":31,"platform":32,"arch":20,"filename":33,"size_bytes":34,"sync_status":16,"synced_at":35},"ae7ef681-15d6-4279-be12-d4a5bb5cc10d","windows","Oak-Video-Editor-Windows-x64.exe",99333503,"2026-07-17T14:15:17.712799Z",{"id":37,"platform":12,"arch":20,"filename":38,"size_bytes":39,"sync_status":16,"synced_at":40},"b6f4f790-361d-4f5b-bc5d-35c4d23ecbbf","oak-video-editor_0.4.2-alpha_amd64.deb",17954018,"2026-07-17T14:15:22.155032Z",{"id":42,"platform":12,"arch":20,"filename":43,"size_bytes":44,"sync_status":16,"synced_at":45},"92f3c804-ad2e-4914-8cf3-343a4ba12ae0","Oak_Video_Editor-x86_64.AppImage",164698616,"2026-07-17T14:15:37.593446Z"]