3137 Commits

Author SHA1 Message Date
Jonathan Thomas
3a50b9afc2 Paused and playback seek behavior now follows one rule: keep cache on in-range seeks, rebuild only on out-of-range seeks. 2026-03-01 22:49:31 -06:00
Jonathan Thomas
e9f2c4204c Optimizations to Mask, Brightness, and Saturation effects:
- Effect_Mask  7.38% faster
- Effect_Brightness  3.77% faster
- Effect_Saturation  22.10% faster
- Overall  3.34% faster
2026-03-01 22:08:59 -06:00
Jonathan Thomas
438c74f340 Adding new args to openshot-benchmark, so each test can be run separately - useful for quick optimization validation. 2026-03-01 21:25:27 -06:00
Jonathan Thomas
83d4d1f8ea Improving cache invalidation during playback, to add an epoch counter to Timeline, so we know when an update took place outside of timeline (i.e. in our video cache thread) and can rescan our entire cache range for potentially missing frames after cache invalidation). 2026-03-01 17:45:02 -06:00
Jonathan Thomas
90d0710d78 Fixing some regressions in performance of Mask effect, and flickering cached frames during updates (i.e. property slider updates) 2026-03-01 16:56:42 -06:00
Jonathan Thomas
4387f8b394 - Timeline composition no longer mutates cached clip frames (fixes trails/ghosting).
- Clip updates via ApplyJsonDiff now also clear clip cache (not just timeline/reader ranges).
- Added regressions for cache invalidation + no cached-frame mutation; kept paused preroll/cache-bar behavior intact.
2026-03-01 14:19:27 -06:00
Jonathan Thomas
c74b07a21e Harden EffectBase mask reader access against runtime failures 2026-02-27 12:33:14 -06:00
Jonathan Thomas
c1d4bf5bd8 Fix Profiles test temp-path helper after develop merge 2026-02-27 12:29:48 -06:00
Jonathan Thomas
b39cb385e8 Merge branch 'develop' into comfy-ui 2026-02-27 12:19:46 -06:00
Jonathan Thomas
ff22d416da - Playback updates no longer act like seeks.
- Scrubbing inside cached area keeps cache.
- Scrubbing outside cached area clears cache immediately.
- Preroll now starts on seek commit (release), not during drag.
- Temporary debug logs were removed.
- Tests were added for these behaviors.
2026-02-26 13:22:06 -06:00
Jonathan Thomas
1ee89c10f6 We fixed the warning by converting deprecated yuvj* formats to yuv* and explicitly setting color range in FFmpegReader 2026-02-25 13:19:26 -06:00
Jonathan Thomas
00f82c239f More improvements to EffectBase support of masks (allowing all effects to use animated masks better).
- Mask: Start/End (seconds) picks the exact part of a mask video to use.
  - Time Mode: Timeline follows project timing; Source FPS follows mask file timing.
  - Loop mode then defines playback behavior: Play Once, Repeat, or Ping-Pong.
2026-02-24 23:41:32 -06:00
Jonathan Thomas
666ffbe7f4 Fixing bug with some short videos returning cached frames due to EOF logic issue. I found this when testing short video mask files. Also, simplifying the mask caching to allow our readers to cache themselves. 2026-02-24 23:05:37 -06:00
Jonathan Thomas
9b042a3dc6 Merge pull request #1038 from OpenShot/fix-recursive-paint
Improving InvalidFile error handling to be unique, include file names
2026-02-24 22:31:55 -06:00
Jonathan Thomas
1a44a6582c Fixing mac unit test failures due to filesystem dependency again,ughh. 2026-02-24 13:05:39 -06:00
Jonathan Thomas
89350a0419 Setting has_static_image correctly when FFmpegReader opens image formats and a video_length == 1, so we have consistent behavior in OpenShot regardless of QtImageReader or FFmpegReader, when opening images. 2026-02-24 12:06:42 -06:00
Jonathan Thomas
f83802bdc0 Removing some code that re-inits readers and re-opens readers after SetJsonValue is called. I don't think this is needed anymore, but let's mark this as Experimental and risky commit though. 2026-02-23 22:51:32 -06:00
Jonathan Thomas
9d3a3f18e5 Protecting Mask GetFrame from failure opening reader (Experimental for windows crash we are debugging) 2026-02-23 22:40:44 -06:00
Jonathan Thomas
fbd07d78d3 Integrating Mask effect with invert mask property and unit tests. This allows the Mask effect to invert the mask easily. 2026-02-23 21:09:27 -06:00
Jonathan Thomas
18b08fe7c6 Fixing unit test paths for mac builders, crashing due to filesystem import (I think) 2026-02-23 17:41:18 -06:00
Jonathan Thomas
7c65748187 Fixing unit test paths for windows builders 2026-02-23 17:25:23 -06:00
Jonathan Thomas
7efc48006a Modify all throw InvalidFile(...) callsites: each now has a distinct message string, and adding unit tests to verify this.
So a crash line will now be more like:
  what(): FFmpegReader could not open media file. for file C:\...\TitleFileName%04d.png
  instead of only File could not be opened.
2026-02-23 16:55:49 -06:00
Jonathan Thomas
1ad401c66d - Added a new common mask_reader feature at EffectBase, so all video effects can be mask-limited automatically (audio effects ignore it).
- Added optional Mask Mode overrides for Blur, Saturation, Brightness, Hue, Pixelate, and Sharpen (Limit to Mask, Vary Strength).
- Kept unified mask property naming (mask_reader) with legacy JSON compatibility where needed.
- Added/updated unit tests for base mask behavior, per-effect mode behavior, and JSON round-trips.
- Fixed profile tests to write generated files into the build/test directory instead of the source examples/ folder.
2026-02-23 00:00:33 -06:00
Jonathan Thomas
9d38ee10b5 Merge pull request #1037 from OpenShot/pts-offset-fix
Fixes to PTS offsets when audio and video are not aligned - to prevent black initial frames
2026-02-15 23:49:06 -06:00
Jonathan Thomas
b7c37b84e4 - Fix FFmpegReader first-frame black regression by anchoring PTS offset to video start (and correcting video offset to use packet PTS), so AAC preroll/skip-samples no longer shifts frame 1.
- Add examples/test_aac_preroll.mp4 fixture (small, deterministic AAC-preroll sample) for reproducing and testing the regression.
2026-02-15 15:22:11 -06:00