Commit Graph

  • 3a50b9afc2 Paused and playback seek behavior now follows one rule: keep cache on in-range seeks, rebuild only on out-of-range seeks. comfy-ui Jonathan Thomas 2026-03-01 22:49:31 -06:00
  • 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 Jonathan Thomas 2026-03-01 22:08:59 -06:00
  • 438c74f340 Adding new args to openshot-benchmark, so each test can be run separately - useful for quick optimization validation. Jonathan Thomas 2026-03-01 21:25:27 -06:00
  • 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). Jonathan Thomas 2026-03-01 17:45:02 -06:00
  • 90d0710d78 Fixing some regressions in performance of Mask effect, and flickering cached frames during updates (i.e. property slider updates) Jonathan Thomas 2026-03-01 16:56:42 -06:00
  • 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. Jonathan Thomas 2026-03-01 14:19:27 -06:00
  • c74b07a21e Harden EffectBase mask reader access against runtime failures Jonathan Thomas 2026-02-27 12:33:14 -06:00
  • c1d4bf5bd8 Fix Profiles test temp-path helper after develop merge Jonathan Thomas 2026-02-27 12:29:48 -06:00
  • b39cb385e8 Merge branch 'develop' into comfy-ui Jonathan Thomas 2026-02-27 12:19:46 -06:00
  • 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. Jonathan Thomas 2026-02-26 13:22:06 -06:00
  • 1ee89c10f6 We fixed the warning by converting deprecated yuvj* formats to yuv* and explicitly setting color range in FFmpegReader Jonathan Thomas 2026-02-25 13:19:26 -06:00
  • 00f82c239f More improvements to EffectBase support of masks (allowing all effects to use animated masks better). Jonathan Thomas 2026-02-24 23:41:32 -06:00
  • 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. Jonathan Thomas 2026-02-24 23:05:37 -06:00
  • 9b042a3dc6 Merge pull request #1038 from OpenShot/fix-recursive-paint develop Jonathan Thomas 2026-02-24 22:31:55 -06:00
  • 1a44a6582c Fixing mac unit test failures due to filesystem dependency again,ughh. Jonathan Thomas 2026-02-24 13:05:39 -06:00
  • 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. Jonathan Thomas 2026-02-24 12:06:42 -06:00
  • 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. Jonathan Thomas 2026-02-23 22:51:32 -06:00
  • 9d3a3f18e5 Protecting Mask GetFrame from failure opening reader (Experimental for windows crash we are debugging) Jonathan Thomas 2026-02-23 22:40:44 -06:00
  • fbd07d78d3 Integrating Mask effect with invert mask property and unit tests. This allows the Mask effect to invert the mask easily. Jonathan Thomas 2026-02-23 21:09:27 -06:00
  • 18b08fe7c6 Fixing unit test paths for mac builders, crashing due to filesystem import (I think) Jonathan Thomas 2026-02-23 17:41:18 -06:00
  • 7c65748187 Fixing unit test paths for windows builders Jonathan Thomas 2026-02-23 17:25:23 -06:00
  • 7efc48006a Modify all throw InvalidFile(...) callsites: each now has a distinct message string, and adding unit tests to verify this. Jonathan Thomas 2026-02-23 16:55:49 -06:00
  • 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. Jonathan Thomas 2026-02-23 00:00:33 -06:00
  • 9d38ee10b5 Merge pull request #1037 from OpenShot/pts-offset-fix Jonathan Thomas 2026-02-15 23:49:06 -06:00
  • 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. Jonathan Thomas 2026-02-15 15:22:11 -06:00
  • 6c1f687afc Merge branch 'develop' into qt6-support qt6-support Jonathan Thomas 2026-02-13 23:07:53 -06:00
  • 22c808c2bb Merge pull request #1035 from OpenShot/caching-protections Jonathan Thomas 2026-02-13 20:25:15 -06:00
  • a7e9ba1d55 - src/FFmpegReader.cpp - Disable audio when decoder sample format is invalid (AV_SAMPLE_FMT_NONE). - Only synthesize channel layout when reported channels are actually valid (> 0). - src/AudioReaderSource.cpp - Added progress/validity guards in getNextAudioBlock() to prevent infinite loops on corrupt/empty audio frames. Jonathan Thomas 2026-02-13 12:13:44 -06:00
  • 429826be36 Fixing a few nitpicks in caching function to use local variables when available (instead of the atomic ones) Jonathan Thomas 2026-02-13 11:48:33 -06:00
  • c43092eaa5 Merge branch 'develop' into caching-protections Jonathan Thomas 2026-02-13 11:29:32 -06:00
  • 8c4db9ac0b Merge pull request #1036 from OpenShot/timeline-playback-length Jonathan Thomas 2026-02-13 11:01:34 -06:00
  • fb41a3c479 • - Fix VideoCacheThread::isReady() so preroll readiness is clamped by frames actually available to the timeline boundary (end/start), preventing playback from stalling in PLAY near the end. - Add regression coverage in tests/VideoCacheThread.cpp (isReady: clamps preroll requirement at timeline boundaries) for forward-near-end and backward-near-start cases. Jonathan Thomas 2026-02-12 23:41:51 -06:00
  • d70e80eac4 Harden playback/cache path for malformed media and concurrent timeline updates Jonathan Thomas 2026-02-11 20:11:47 -06:00
  • 57c1fb2ec3 Merge pull request #1034 from OpenShot/sparse-vfr-support Jonathan Thomas 2026-02-10 12:02:07 -06:00
  • 149456d13f Merge pull request #1032 from OpenShot/cache-before-playhead Jonathan Thomas 2026-02-10 11:51:21 -06:00
  • 2e4e12d2c7 Setting a minimum # of frames (floor) in Timeline, FFmpegReader, and FrameMapper - so low cpu/thread systems don't end up with a tiny # that makes passing our unit tests difficult. Jonathan Thomas 2026-02-09 22:10:32 -06:00
  • 6f63254c08 More changes to seek logic to pass unit tests on Windows. Jonathan Thomas 2026-02-09 21:35:06 -06:00
  • d6b54091d7 Adding minimum cache size floor, for systems with very few cores. This is required to fix a failure running unit tests on our GitLab runners. Jonathan Thomas 2026-02-09 21:14:45 -06:00
  • 367d21affe Fix FFmpeg seek fallback to avoid overshoot frame mismatches. Harden FFmpegReader::CheckSeek() when seek retries are exhausted. Jonathan Thomas 2026-02-09 20:51:24 -06:00
  • 01e60463db FFmpegReader: fix sparse-VFR stall and stabilize missing-frame image fallback Jonathan Thomas 2026-02-07 22:40:43 -06:00
  • f3c4504662 Improve benchmark regression caused by aggressive memory trimming, and caches that were too small. A new debounce strategy for memory trimming (1 time max per 30 seconds). Jonathan Thomas 2026-02-06 23:11:00 -06:00
  • de012ac6c8 Improve seek retry fallback and clean up hw decode logging - add adaptive seek fallback and switch fprintf to ZmqLogger - improves seeking on certain files by up to 30% (faster) - avoids situations where seeking too far would sometimes freeze on certain videos Jonathan Thomas 2026-02-06 16:46:40 -06:00
  • 43f9ed89ae VideoCacheThread: add directional preroll - start cache rebuilds with a preroll offset (settings-based) - tighten isReady to require frames ahead/behind playhead add unit tests for preroll clamping and readiness Jonathan Thomas 2026-02-05 12:39:06 -06:00
  • c7b36d9215 Slight refactor to our Python swig bindings to better support Arm64 pointer address space (required for Android) Jonathan Thomas 2026-02-03 11:20:12 -06:00
  • 44f92a0387 Improving swig to wrap pointers as PyLong_AsVoidPtr - to avoid Android memory addresses overflowing as an int. Jonathan Thomas 2026-02-02 21:14:01 -06:00
  • 23b4e748ea Improving swig bindings for Python, Java, and Ruby for access direct pixel byte array: Jonathan Thomas 2025-12-22 13:46:41 -06:00
  • a26ed32424 Adding missing packages to our linux install instructions doc: python3-zmq python3-pyqt5.qtwebengine Jonathan Thomas 2025-12-22 13:44:54 -06:00
  • bfca7ee8ad Adding Qt6 detection and compatibility, without breaking Qt5. -DUSE_QT6=AUTO|ON|OFF (default: AUTO; prefers Qt6 when available and CMake ≥3.16, ON forces Qt6, OFF forces Qt5). Also, a few version specific changes for API changes on Qt6, but it appears to work well. Jonathan Thomas 2025-12-17 22:59:25 -06:00
  • 47b308122f Merge pull request #1026 from OpenShot/install-prefix-python Jonathan Thomas 2025-12-16 23:23:44 -06:00
  • 3f60f601ca Take 2: Trying again to fix the python fallback directory detection for Launchpad build servers Jonathan Thomas 2025-12-16 23:23:07 -06:00
  • faa6827f1c Merge pull request #1025 from OpenShot/install-prefix-python Jonathan Thomas 2025-12-16 21:53:04 -06:00
  • 353e6ae4f1 Changing python install detected folder, to be relative folder. This is breaking on some build servers, due to returning an absolute path that is installed outside of the install prefix. Jonathan Thomas 2025-12-16 21:05:23 -06:00
  • ff45df1e99 Merge pull request #1024 from OpenShot/missing-sstream-includes Jonathan Thomas 2025-12-16 19:02:22 -06:00
  • 16f791a55a Adding missing <sstream> includes for older compilers, and because it should be included anyway Jonathan Thomas 2025-12-16 18:23:57 -06:00
  • 13e1d9d0b3 Merge pull request #1016 from OpenShot/release-20250612 Jonathan Thomas 2025-12-16 02:03:54 -06:00
  • 2a82bed607 Adding upscaling for crop effect + resize property - so cropping into higher resolution content does not become blurry. v0.5.0 Jonathan Thomas 2025-12-15 23:34:48 -06:00
  • bd59e6bb37 Fix mixing licensing headers Jonathan Thomas 2025-12-15 21:13:34 -06:00
  • 7fdd145dc2 Adding new memory trimming to more forcefully return memory to the OS after major memory clearing events (i.e. clearing all cache, closing readers, or large amounts of cache cleared). Also, refactoring default cache sizes in Timeline, FrameMapper, and FFmpegReader to better support high frame rate and high resolution videos (i.e. 4k 60 fps) so we don't immediately run out of memory. Jonathan Thomas 2025-12-14 23:53:36 -06:00
  • 1f06f03e9c Adding unit tests for image magic durations Jonathan Thomas 2025-12-10 18:38:07 -06:00
  • 94fab00048 Updating video_length and duration calculations to be consistent on image readers also (QtImageReader, ImageReader) Jonathan Thomas 2025-12-08 18:33:23 -06:00
  • eea55982fd FFmpegReader: add duration strategy modes and unify duration/frame calculations. This is a potentially breaking change, where we ensure all durations and video_length calculations coming from FFmpegReader are now fully consistent - even if we must slightly adjust a duration from the video or audio stream. This keeps the 2 attributes identical in meaning (video_length X FPS == duration, no exceptions). Unknown durations are no longer -1 video_length but 0, and 0 duration. Jonathan Thomas 2025-12-08 17:07:21 -06:00
  • af9a4893ed Fixing regression inside AudioWaveformer so it uses a proper detached reader, and no longer mutates the Clip's reader (preventing a bug which caused our video to disappear when waveforms were used on the clip) Jonathan Thomas 2025-11-24 18:33:25 -06:00
  • d4647b5525 Refactoring the AudioWaveformer again, this time to de-couple it from the actual clip object passed to it, and to no longer iterate over the potential longer time keyframes using GetFrame alone. Now, we only decode audio-streams, and only get the original samples (reduced sample rate drastically), and finally we apply keyframes (volume and time) to modify our original samples. This is a HUGE speed-up boost for waveform generation. Jonathan Thomas 2025-11-23 14:11:53 -06:00
  • 0dfc8a8a37 Updating 1D and 3D unit tests for Color Map to use a more obvious cube color map, with 1D = green and blue, and 3D = red and blue. Jonathan Thomas 2025-11-18 18:11:37 -06:00
  • e25763d089 Adding awareness of DOMAIN_MIN and DOMAIN_MAX properties of LUT Color Map files and new unit tests to validate them Jonathan Thomas 2025-11-18 17:36:30 -06:00
  • 1c912d8fd6 Fixing clip unit tests due to regression in the initial rotation keyframe Jonathan Thomas 2025-11-18 14:34:23 -06:00
  • 2f82e7d27b Adding support for 1D and 3D LUT Color Map files. Also added new unit tests to verify 1D and 3D LUT files. Jonathan Thomas 2025-11-18 14:26:59 -06:00
  • 355bea44d9 Fixing small regression on initial rotation keyframes from our previous commit. Jonathan Thomas 2025-11-18 13:43:40 -06:00
  • a7dfc596ca Fixing regression in Clip::init_reader_rotation() function, which could sometimes override scale_x and scale_y, when a rotation keyframe contained more than 1 point. Jonathan Thomas 2025-11-13 16:18:18 -06:00
  • 8d72b4b64b Updating godot git hash Jonathan Thomas 2025-11-13 16:17:07 -06:00
  • 5596344575 Fixing AudioWaveformer::ExtractSamples to pause temporarily when a clip's reader is closed, and resume extracting when it's open again. This prevents a very common crash / bug when generating waveforms for longer audio clips and continuing to make chagnes on the timeline (which closes all clips temporarily - interrupting the waveform extracting). Jonathan Thomas 2025-11-06 14:51:57 -06:00
  • 0932af2c1e Fixing race condition on unit test for AnalogTape (when comparing frame's getting modified) Jonathan Thomas 2025-10-11 16:45:43 -05:00
  • 7e29fc0935 Improving audio directionality, with new function: SetAudioDirection(), so we can safely flip audio buffer direction when needed (i.e. time curves, reversed time). Also adding a new SetDirectionHint function to FrameMapper class - so our Clip class can inform the FrameMapper of its direction at any given moment. Also, clear resampler when changing directions inside a Time curve (since the audio buffer will be flipped - the resampler internal cache must be cleared). Jonathan Thomas 2025-10-11 16:29:11 -05:00
  • fd2952752d Improving audio directionality, with new function: SetAudioDirection(), so we can safely flip audio buffer direction when needed (i.e. time curves, reversed time). Also adding a new SetDirectionHint function to FrameMapper class - so our Clip class can inform the FrameMapper of its direction at any given moment. Also, clear resampler when changing directions inside a Time curve (since the audio buffer will be flipped - the resampler internal cache must be cleared). Jonathan Thomas 2025-10-11 13:43:15 -05:00
  • 9a262882de A few small refactors of clip unit tests Jonathan Thomas 2025-09-30 23:09:32 -05:00
  • 4cef4da9ef Fixing a bug in Keyframe that caused the GetDelta() function to return 0.0 early - which was breaking reversed time curves (zero'ing out the first frame or two) Jonathan Thomas 2025-09-26 18:35:29 -05:00
  • 0c15c1692e Adding new reversed time curve unit test, to verify 230,000 samples are actually reversed over the length of the clip without skipping or missing a single one. Jonathan Thomas 2025-09-26 18:34:33 -05:00
  • c165eca5d8 Improving AudioWaveformer to be able to correctly generate waveforms for time-curved clips that have a modified duration/video_length (i.e. repeated clips, slowled down clips, etc...). Adding a new ReaderBase.h VideoLength() that can be overridden in Clip.cpp when time curves are involved. Jonathan Thomas 2025-09-22 12:28:12 -05:00
  • 01a4d9f6ef Fixing regression/bug in video cache thread - to correctly reset cached_frame_count, and make isReady() return correctly. The result of this bug was audio starting playback sooner than video - and some general jank around video caching. Jonathan Thomas 2025-09-15 18:20:05 -05:00
  • 3723fbd99f Fixing regression on Mac and Windows builds for Clip blend modes (color tolerances) Jonathan Thomas 2025-09-12 23:00:22 -05:00
  • 021c6ecc07 Adding unit tests to validate FFmpegReader, Clip, and Timeline frame accuracy of GIF files, plus GIF with time curves. Jonathan Thomas 2025-09-12 22:57:26 -05:00
  • fa4f44d108 Fixing small build error on benchmark includes Jonathan Thomas 2025-09-12 21:19:16 -05:00
  • a66727a687 Expanding Clip unit tests to include all composite blend modes available to libopenshot. Jonathan Thomas 2025-09-12 18:06:26 -05:00
  • 523ef17aa4 Adding composite/blend modes to libopenshot: -Normal -Darken -Multiply -Color Burn -Lighten -Screen -Color Dodge -Add -Overlay -Soft Light -Hard Light -Difference -Exclusion Jonathan Thomas 2025-09-12 17:47:41 -05:00
  • b94dcac3b4 Adding Benchmark executable to assist with performance testing and comparisons with different versions of OpenShot. Jonathan Thomas 2025-09-12 17:27:43 -05:00
  • a326f541a1 Fix bug with Wave effect that can cause colored bands to appear in certain cases, and added new wave effect unit test Jonathan Thomas 2025-09-12 15:07:51 -05:00
  • f2a5bfb581 Fixed AnalogTape tests and an unused Clip test line Jonathan Thomas 2025-09-12 15:04:14 -05:00
  • d77f3e5338 Improving performance on Clip class: - Replacing alpha with QPainter SetOpactity (much faster) - Fixing get_file_extension to not crash with filepaths that do no contain a "." - Removing render hints from apply_background (since no transform or text rendering), making compositing (faster in certain cases) - Optionally adding SmoothPixmapTransform based on a valid transform (faster in certain cases) - Skip Opacity for fully opaque clips - New Clip unit tests to validate new functionality Jonathan Thomas 2025-09-12 14:54:46 -05:00
  • 0570ad084b Large timeline clean-up, speed-up, and fix concurrency bugs: - make Add/Remove Effect methods thread safe - Fix RemoveClip memory leak - Improve performance of sorting clips by position and layer, cache some common accessors, and speed up "clip intersection" logic - Don't resize audio container in loop - do it once - Large refactor of looping through clips and finding top clip - Protect ClearAllCache from empty Readers, prevent crash - Expanded unit tests to include RemoveEffect, and test many of the changes in the commit. Jonathan Thomas 2025-09-11 23:27:41 -05:00
  • 1533b6ab1f Fixing SphericalEffect.cpp tests Jonathan Thomas 2025-09-11 22:08:38 -05:00
  • 9ca7e07b12 Adding more SphericalProjection unit tests - still a WIP Jonathan Thomas 2025-09-11 20:31:24 -05:00
  • 79846eacf8 Adding new Analog Tap effect: Vintage home video wobble, bleed, and grain. Jonathan Thomas 2025-09-10 22:44:30 -05:00
  • a07fe18a14 Adding 5 Spherical test images (needed for unit tests) Jonathan Thomas 2025-09-10 21:33:37 -05:00
  • a90b4d6c3e Improving fish eye support for SphericalProjection effect (4 types of fish eyes for input and output). Fixing lots of issues with virtual camera controls (so controls don't flip axis randomly) Jonathan Thomas 2025-09-10 17:11:41 -05:00
  • c23c0d14af Fixing regression in SphericalProjection.cpp effect - causing a unit test to fail Jonathan Thomas 2025-09-09 18:36:36 -05:00
  • f98da72050 Improve spherical projection effect to have better quality and separate input / output FOVs for fisheye processing. Jonathan Thomas 2025-09-08 18:02:36 -05:00
  • f68d18419a Improve GetMinFrame / GetMaxFrame functions for a timeline, to be inclusive on min, and exclusive on max (trying to prevent rounding errors on last frame) Jonathan Thomas 2025-09-08 15:59:29 -05:00
  • fbef1bcf04 Protect the video and audio codec name discovery flow, to prevent crash from unknown codecs. Jonathan Thomas 2025-09-07 15:02:26 -05:00
  • dd62f5b49e Protecting clip GetFrame from crash due to null frame, then setting the ->number property of a null frame. Jonathan Thomas 2025-09-05 14:48:35 -05:00
  • adff81fefc Fixing protobuf loading bug, preventing tracker and object detection from loading correctly. Jonathan Thomas 2025-08-12 17:46:56 -05:00