54 Commits

Author SHA1 Message Date
Jonathan Thomas be99ec02c6 Migrate object detection to YOLOv5 ONNX
- Replace YOLOv3 Darknet loading with YOLOv5 ONNX model loading and validation.
- Parse YOLOv5 outputs with top class candidates for smoother labels.
- Improve SORT tracking with class-score smoothing and stricter geometry gates.
- Prevent active tracks from hopping to adjacent objects or tiny nested detections.
- Keep object ids stable through protobuf load/save and add an object-detection debug example.
- Add class-based default colors and matching border/background defaults.
- Add All Objects pseudo-selection support for tracked-object properties.
- Honor tracked-object corner radius when using tracker/object detector masks.
- Add regression tests for tracking stability, all-object styling, masks, and keyframes.
2026-05-10 21:48:24 -05:00
Jonathan Thomas 991b29cca0 Merge remote-tracking branch 'origin/develop' into qt6-support 2026-04-10 17:20:06 -05:00
Jonathan Thomas f31010b7b7 Fixing some Codacy nitpicks in the vulkan benchmark code 2026-03-26 19:07:55 -05:00
Jonathan Thomas 0c37eadc70 Pipeline VulkanDirect benchmark by submitting GPU work before decoding next frame 2026-03-26 13:14:10 -05:00
Jonathan Thomas ed12e252aa Fixing some Codacy nitpicks in our Vulkan benchmark code 2026-03-25 22:04:24 -05:00
Jonathan Thomas 51eba65c5a Fixing deadlocks on RTX and cuda and fixing cmake to allow for better vulkan detection. Performance is not great though on the RTX gpu. 2026-03-25 17:02:37 -05:00
Jonathan Thomas 1414a4afeb - Added an optional vulkan-benchmark executable without changing normal libopenshot builds.
- Built a small benchmark matrix to compare CPU and GPU pipelines on the same video.
- Added --row so each path can run by itself for debugging and stable testing.
- Switched the benchmark to a more realistic preview-style workload instead of full-size-only transforms.
- Added PNG dump support so rows can save sample output frames for visual verification.
- The custom Vulkan path now does real preview scaling and alpha overlay, and can stay fully on-GPU for Vulkan decode.
- Added runtime detection for VAAPI, CUDA, and Vulkan, so unsupported rows skip cleanly on different systems.
- Added CUDA benchmark rows for NVIDIA systems, while keeping VAAPI and Vulkan conditional at runtime.
2026-03-25 13:13:52 -05:00
Jonathan Thomas 867473ab59 Merge remote-tracking branch 'origin/develop' into qt6-support 2026-03-12 23:03:07 -05: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
Jonathan Thomas 6c1f687afc Merge branch 'develop' into qt6-support 2026-02-13 23:07:53 -06:00
Jonathan Thomas 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
2026-02-06 16:46:40 -06:00
Jonathan Thomas 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. 2025-12-17 22:59:25 -06:00
Jonathan Thomas 16f791a55a Adding missing <sstream> includes for older compilers, and because it should be included anyway 2025-12-16 18:23:57 -06:00
Jonathan Thomas 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. 2025-11-18 18:11:37 -06:00
Jonathan Thomas e25763d089 Adding awareness of DOMAIN_MIN and DOMAIN_MAX properties of LUT Color Map files and new unit tests to validate them 2025-11-18 17:36:30 -06:00
Jonathan Thomas 2f82e7d27b Adding support for 1D and 3D LUT Color Map files. Also added new unit tests to verify 1D and 3D LUT files. 2025-11-18 14:26:59 -06:00
Jonathan Thomas 021c6ecc07 Adding unit tests to validate FFmpegReader, Clip, and Timeline frame accuracy of GIF files, plus GIF with time curves. 2025-09-12 22:57:26 -05:00
Jonathan Thomas a07fe18a14 Adding 5 Spherical test images (needed for unit tests) 2025-09-10 21:33:37 -05:00
Jonathan Thomas 2d6db64b52 Incorporating VideoCacheThread into openshot-example executable, to experiment with caching during export. It works great! 2025-06-06 15:33:04 -05:00
Jonathan Thomas a4b2af4eb8 Adding FFmpegWriter into openshot-example executable to test with valgrind heapgrind. 2025-06-05 19:38:53 -05:00
Jonathan Thomas 6e73a23259 Changing example program to time decoding of test video, forwards and backwards, with time print-outs. 2025-06-04 17:19:01 -05:00
Jonathan Thomas 48a7a07066 Initial ColorMap effect, which loads a LUT (.cube) file and applies color grading by mapping colors by channel. 2025-05-24 15:30:16 -05:00
Jonathan Thomas ec890fe74d Adding unit tests for spherical project effect, using 2 PNG assets 2025-05-21 18:25:22 -05:00
Jonathan Thomas 09ce05bbf2 Many improvements for smooth audio playback when 'time' keyframes are used for time remapping.
- Added new Frame::ReverseAudio() helper method - for time keyframe support playing backwards audio
- Fixed math rounding error on time keyframe Resampler, to use the rounded source samples value
- Removed some unused args and Frame audio methods
- Reset FrameMapper resample context when non-adjacent frames are requested
- Correctly reverse Frame audio if a time keyframe is present, and reversing audio
- Rewrite Keyframe::IsIncreasing() function, to give accurate direction of time keyframes at any index (special logic to support first and last indexes)
- Fixed Keyframe unit tests - since logic has changed a bit
- Improved time mapping unit tests
- Replace many c-style casts with static_cast
- Added new sine.wav test file
2023-03-10 01:15:14 -06:00
Jonathan Thomas 70e86ef044 Improved Profile Class (Helper methods, Sortable, Unit tests) (#895)
* Removing legacy profile property. Add new operators for Profile classes (for comparison). Also added new functions to generate different variations of the Profile data (key, short name, long name, long name w/description).

* Add empty constructor for Profile class, and new Profile unit tets

* Adding zero padding to profile Key function, for easier sorting: 01920x1080i2997_16:09

* Clear setfill flag after creating Key() output

* Updating example exe to load an *.osp project file via C++, which makes debugging complex broken projects much easier.

* - Add new unit test to FFmpegWriter to create an animated GIF and verify it can be wrapped with a FrameMapper (with no audio track)
- Improve FrameMapper to ignore missing audio data (i.e. when no audio samples present, don't try and find them or resample them)

* Fix some whitespace issues

* Fix inline documentation mistype

* Fixed missing reuse licensing on new example profile files

* Changing Profile::Key() format to exclude the : character, since Windows file names cannot contain that

* - Large memory leak fixed in FFmpegWriter when closing the video & audio contexts
- Reducing # of cached frames and rescalers to 1, since we no longer use OMP and this is unneeded - we need to refactor much of this code out eventually

* - Fixing whitespace issues
- Code clean-up / line wrapping / etc...
2023-02-02 16:29:38 -06:00