Immutable
release. Only release title and notes can be modified.
Oak Video Editor v0.4.2 — Release Notes / 更新说明
主题 / Theme:测试覆盖大扩充与集中 Bug 修复(无 GPU 环境可运行的 gtest)
Test coverage expansion & bug-fix round (headless, GPU-free gtest)
中文版
概览
- 测试规模:642 → 1,985 个用例(+1,343),新增测试文件 55 个,全部在 offscreen QPA、无 GPU 环境通过,全量 0 失败(56 个为既有 GPU 后端门控跳过)。
- 修复真实 Bug 70+ 个(其中崩溃/UB 类约 20 个),绝大部分附带锁定回归的测试。
- 行覆盖率(gcov):音频子系统 64% → 80.3%,节点相关 28% → 69.3%,渲染子系统 23% → 39.9%(剔除 GPU 文件后约 66%),插件 24% → 33.6%。
主要 Bug 修复(按类别)
崩溃 / 稳定性
AudioPlaybackCache零填充从未写入(write(const char*)按 C 字符串截断)且WriteSilence()死循环。NodeKeyframe默认构造函数遗留未初始化指针;Project在默认 OCIO 配置初始化前构造即段错误;Core::ShowStatusBarMessage、PanelManager单例、ProjectLoadTask、未知图形后端下的RenderManager成员、CurveView/SeekableWidget空解引用等十余处崩溃修复。NodeGroup::GetInputName、DespillNode无项目上下文、Sequence::GetTrackFromReference、PortAudio 设备索引等空指针/越界防护。
逻辑错误
- 波形同步:
PanNode关键帧声像被静默忽略、ViewerOutput音频流 tag 丢失、AudioVisualWaveform下溢越界读与长度记账错误。 - 节点:
MathNode/TrigonometryNode组合框与枚举错位、递归移动依赖失效、RemoveAllKeyframes 撤销失效、NodeValueTable::Has误用位运算、Project::cache_path()自定义路径分支反转、失败素材探测被永久缓存、富文本半透明色 RGB 丢失、序列预设交错模式丢失、mosaic 单轴匹配失效等。 - 构建:
CMAKE_C_FLAGS未加引号导致自定义编译标志破坏构建。
资源 / 状态
delete_all_keyframes死循环、TrackList信号连接泄漏、Renderer::Destroy颜色缓存资源泄漏、OpacityEffect内部节点泄漏、磁盘缓存自定义路径失效。
兼容修复
- 序列化 ID 拼写统一(ChromaKey
tolerence→tolerance,flip/ripple/swirl/tile/wave 节点 ID 域统一),旧项目文件通过新增的旧 ID 映射钩子照常加载(值与连接均保留)。
CI / 跨平台
- Windows 路径分隔符导致的测试失败、OCIO 默认配置按需初始化(Windows 套件顺序崩溃)、硬解帧断言按平台区分、图标断言兼容不同 Qt 构建、macOS 上
ViewerSmokeTimer.DifferentTimebases对调度抖动过敏感。
打包
- Vulkan 渲染后端现在随所有平台的安装包发布(此前只有 OpenGL 后端
liboakgl):Linux 各包(AppImage/deb/rpm/Arch)启用 Vulkan 构建并随包携带liboakvulkan(AppImage 同时捆绑 libvulkan,deb/rpm 依赖声明补充libvulkan1/vulkan-loader);macOS 补充vulkan-loader依赖并导出VULKAN_SDK(此前 Vulkan 后端在 macOS 从未被构建);Windows 原本已包含oakvulkan.dll。 libffmpeg_bridge.so安装位置从非标准的/usr/ffmpeg_bridge/bin改为标准的lib目录。- 构建指南(中英)补充 macOS Vulkan 后端依赖与
VULKAN_SDK设置。
English Version
Overview
- 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).
- 70+ real bugs fixed (~20 crash/UB-class), most locked in by regression tests.
- Line coverage (gcov): audio 64% → 80.3%, node 28% → 69.3%, render 23% → 39.9% (~66% excluding GPU-only files), plugin 24% → 33.6%.
Key Bug Fixes (by category)
Crashes / stability
AudioPlaybackCachezero padding never written (write(const char*)truncated at NUL) plus aWriteSilence()infinite loop.- Uninitialized
NodeKeyframepointers;Projectconstruction before OCIO default config (segfault);Core::ShowStatusBarMessage,PanelManagersingleton,ProjectLoadTask,RenderManagermembers under unknown backends,CurveView/SeekableWidgetderefs — a dozen crash fixes. - Null/out-of-range guards for
NodeGroup::GetInputName,DespillNodewithout a project,Sequence::GetTrackFromReference, PortAudio device indices.
Logic errors
- Sync:
PanNodekeyframed pan silently dropped,ViewerOutputaudio stream tag lost,AudioVisualWaveformunsigned underflow and length bookkeeping. - Nodes:
MathNode/TrigonometryNodecombo/enum misalignment, recursive dependency move, broken RemoveAllKeyframes undo,NodeValueTable::Hasbitwise misuse, invertedProject::cache_path()custom branch, failed footage probes cached forever, rich-text alpha color RGB loss, sequence preset interlacing loss, mosaic single-axis skip. - Build: unquoted
CMAKE_C_FLAGSbroke any custom C flags.
Resources / state
delete_all_keyframesinfinite loop,TrackListsignal leak,Renderer::Destroycolor-cache leak,OpacityEffectinternal node leak, dead custom disk-cache path.
Compatibility
- Serialized ID typos unified (ChromaKey
tolerence→tolerance, flip/ripple/swirl/tile/wave node ID domain); old projects keep loading via a new legacy-ID mapping hook (values and connections preserved).
CI / cross-platform
- 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.DifferentTimebasestoo sensitive to scheduling jitter on macOS.
Packaging
- The Vulkan render backend now ships in every platform's package (previously only the OpenGL backend
liboakgl): Linux packages (AppImage/deb/rpm/Arch) build with Vulkan enabled and bundleliboakvulkan(the AppImage also bundles libvulkan; deb/rpm gainlibvulkan1/vulkan-loaderdependencies); macOS adds thevulkan-loaderdependency and exportsVULKAN_SDK(the Vulkan backend was never built on macOS before); Windows already shippedoakvulkan.dll. libffmpeg_bridge.sonow installs into the standardlibdirectory instead of the non-standard/usr/ffmpeg_bridge/bin.- Build guides (EN/ZH) document the macOS Vulkan backend dependencies and the
VULKAN_SDKvariable.