Add severity levels and environment configuration, preserve source aliases and raw crash-log output, and remove ZeroMQ build dependencies. Document the API and cover filtering, environment precedence, concurrent writes, and Python bindings.
Position PulseAudio and WASAPI loopback samples relative to recording start, dropping stale audio and preserving gaps without delaying subsequent sound. Request smaller PulseAudio fragments and tolerate bounded timestamp jitter to avoid crackling at packet boundaries.
Add regression coverage for both capture clocks, pre-recording buffers, late packets, gaps, queue overflow, reset, and sample continuity.
Serialize the FFmpeg capture Open path with GetFrame and Close using the
existing recursive mutex. Close still signals cancellation before waiting,
but cannot free a context while avformat_open_input or decoder setup uses it.
Clean up partially initialized resources on failure or cancellation.
Add a hardware-independent regression test that pauses a V4L2 open inside
FFmpeg and requests Close from another thread. It reproduces SIGSEGV with
the original implementation and passes with the fix, including 20 repeated
runs. All 15 camera/screen capture test cases pass (78 assertions).
Real-device AppImage validation remains necessary after rebuilding.
Sentry-related fix:
- OPENSHOT-BV93 (confirmed deletion path): Read a clip's position and duration
before removing it, since removal can immediately free the timeline-owned clip.
Additional coverage:
- Verify that deletion invalidates the former clip range without clearing
unrelated cached frames.
- Verify that repeating an already-completed deletion is harmless.
Validation: 518 native tests pass, with two unavailable VAAPI hardware tests
explicitly skipped. The deletion regression covers seven assertions. Valgrind
reported four invalid reads before the fix and zero errors after it.
The paired openshot-qt branch passes 598 Python tests, and Jonathan's manual
editing tests were reported stable.
This summary records the fix in the preceding commit. BV93 also contains other
crash stacks, so this does not claim the entire Sentry issue group is resolved.
RemoveClip frees JSON-owned clips. Cache invalidation in apply_json_to_clips previously read their position and duration after deletion. Capture bounds first.
Add a JSON insert/delete regression covering cache invalidation, unaffected frames, and repeated deletes. Valgrind reproduces four invalid reads against the installed pre-fix library and reports zero with this change. Native suite: 518 passed, two VAAPI prerequisite skips. This addresses a concrete defect in the BV93 timeline path, not every crash grouped under BV93.
Select /usr/local/openshot/ffmpeg-4.4, built without Tesseract, for package discovery and runtime library loading. Refresh cached FFmpeg discovery so reused build directories do not retain Homebrew library paths.
Keep the existing Xcode, SDK, deployment target, and OpenCV settings. Validated YAML parsing and git diff --check; the Mac pipeline still needs to run.
This branch addresses two of the top 10 Sentry reports ranked by affected users for openshot@4.0.0, first seen on or after 2026-08-30. Together with openshot-qt, this batch addresses seven reports. This summary commit documents the fixes in the preceding commits without rewriting their history.
- FYCZ: Enumerate JUCE audio device types before selecting the requested recording backend, preventing DirectSound input names from being passed to the default WASAPI backend.
- FYCC: Discard buffered decoder output during FFmpegReader shutdown instead of decoding and allocating more frames; retain codec and resource cleanup, with close/reopen regression coverage.
- Probe VAAPI device initialization using the linked FFmpeg library before hardware tests; report unavailable prerequisites as CTest skips without weakening decode assertions on healthy systems.
- Validation: Full suite completed with 517 passed, two VAAPI prerequisite skips, and zero failures (519 total); all seven AudioRecorder cases passed.
- Scope: This does not claim to fix general playback memory exhaustion; Windows recording hardware validation remains outstanding.
- FY5H, FYP5, and FYMJ remain outside the combined fix batch.
A render node and compiled FFmpeg support do not guarantee an operational VAAPI driver. Probe the exact adapter with the linked FFmpeg library and report missing prerequisites as skipped in CTest. Full suite: 517 passed, 2 skipped, 0 failed.