Jonathan Thomas
04f9ccbe83
Discover Linux camera modes through native V4L2 queries
2026-09-19 15:10:01 -05:00
Jonathan Thomas
68018f2d49
Add missing REUSE licensing headers for logging files
2026-09-15 15:58:33 -05:00
Jonathan Thomas
961775aa3d
Support legacy MinGW Python DLL lookup in logger tests
2026-09-15 15:19:40 -05:00
Jonathan Thomas
8e4bc29c30
Fix logger compatibility with older macOS and Windows test DLL loading
2026-09-15 13:18:19 -05:00
Jonathan Thomas
ea75014f08
Replace ZeroMQ logging with independent file and console logging
...
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.
2026-09-14 22:46:20 -05:00
Jonathan Thomas
98f797d405
Add timer effect
2026-06-25 23:14:34 -05:00
Jonathan Thomas
8bae3afb62
Add Linux screen and camera capture readers
...
Introduce FFmpeg-backed live capture readers for X11 screen capture and v4l2 camera devices, including JSON/settings support, Python bindings, public OpenShot includes, and focused metadata validation tests.
2026-06-15 23:09:52 -05:00
Jonathan Thomas
3e9de94ecc
Reverting changes to python detection in libopenshot, so we don't break our Mac builder by including the wrong version of python at this moment. We'll revisit in the future.
2026-05-29 10:03:43 -05:00
Jonathan Thomas
70ec155627
Add JUCE audio recorder and fix FFmpegWriter FLAC duration
...
- Add AudioRecorder with input device capture, monitoring, recording, stats, level snapshots, and waveform snapshots
- Add AudioRecorder settings, level data, waveform chunk data, and frame factory helpers
- Expose AudioRecorder and related APIs to Python/SWIG
- Add AudioDevices input device listing support
- Register AudioRecorder in CMake and OpenShot public headers
- Write recorded audio through FFmpegWriter using configured codec, sample rate, channels, layout, and bitrate
- Finalize recorder writers cleanly on stop/close, including prepared recordings that never start
- Update FFmpegWriter audio timestamps, packet durations, encoder flush behavior, and stream duration metadata
- Fix FLAC outputs so FFmpegReader reports valid duration and video length after recording
- Improve AudioWaveformer extraction for audio files with missing/unknown duration metadata
- Add AudioRecorder unit tests for validation, monitoring, waveform, levels, and synthetic recording behavior
- Add AudioWaveformer/FFmpegWriter regression coverage for FLAC duration and waveform extraction
2026-05-28 06:47:37 -05:00
Jonathan Thomas
e3151d577b
Clean-up and modernization of our cmake build system
...
- Modernized SWIG policy handling for Python, Ruby, and Java without raising the project-wide CMake policy version.
- Switched Python discovery to Python3 on CMake 3.12+, with legacy PythonInterp/PythonLibs fallback for older CMake.
- Removed dead pre-CMake-3.8 SWIG branches.
- Quieted optional babl pkg-config probing.
- Changed FFmpeg probing so avresample is only checked if swresample is unavailable.
- Cleaned Java binding debug configure messages.
- Addressed the SWIG build warnings:
- Added SWIG-only juce::Thread declaration for Python/Ruby/Java.
- Added Python QWidget typecheck precedence.
- Filtered known Ruby binding limitations for multiple inheritance and unexposed Profile operators.
- Suppressed Java-only SWIG categories for unsupported operators/proxy limitations via Java SWIG flags.
2026-05-24 17:31:52 -05:00
Jonathan Thomas
51ee44ab33
Adding new Denoise effect
...
- Adds a new DenoiseImage video effect for reducing luma grain and color speckles with adaptive spatial filtering, conservative temporal blending, motion protection, and brightness response controls.
- Added to openshot-benchmark
- New unit tests
2026-05-05 21:19:26 -05:00
Jonathan Thomas
8ede4d777e
Add Film Grain effect with deterministic, keyframeable controls, profile-scaled grain rendering, bindings, registration, and unit tests. Also update Analog Tape artifact
...
scaling so preview and export sizes stay visually consistent.
2026-04-24 23:06:55 -05:00
Jonathan Thomas
449a4f5e9f
Add a new FrameScope class which analyzes color and audio data for a frame.
2026-04-19 15:11:54 -05:00
Jonathan Thomas
991b29cca0
Merge remote-tracking branch 'origin/develop' into qt6-support
2026-04-10 17:20:06 -05:00
Jonathan Thomas
6c67d762cb
Adding new MaxDecodeSize functionality to ReaderBase, which allows FFmpegReader and QtImageReaders to inspect and thumbnail clips much faster, and no longer be forced to do that a full resolution. Also refactoring CreateReader() inside Clip() constructor, so it can be called outside of the constructor, for example, when needing to create a reader for inspection or thumbnailing in openshot-qt.
2026-03-30 14:59:06 -05:00
Jonathan Thomas
c7b36d9215
Slight refactor to our Python swig bindings to better support Arm64 pointer address space (required for Android)
2026-02-03 11:20:12 -06:00
Jonathan Thomas
44f92a0387
Improving swig to wrap pointers as PyLong_AsVoidPtr - to avoid Android memory addresses overflowing as an int.
2026-02-02 21:14:01 -06:00
Jonathan Thomas
23b4e748ea
Improving swig bindings for Python, Java, and Ruby for access direct pixel byte array:
...
Example Code Snippets:
Python:
import openshot
r = openshot.FFmpegReader("/home/jonathan/Pictures/ChatGPT Image Mar 27, 2025, 09_50_56 AM.png")
r.Open()
f = r.GetFrame(1)
buf = f.GetPixelsBytes()
w, h = f.GetWidth(), f.GetHeight()
stride = f.GetBytesPerLine()
Ruby:
require "openshot"
r = Openshot::FFmpegReader.new("/home/jonathan/Pictures/ChatGPT Image Mar 27, 2025, 09_50_56 AM.png")
r.Open()
f = r.GetFrame(1)
buf = f.GetPixelsBytes
w = f.GetWidth
h = f.GetHeight
stride = f.GetBytesPerLine
2025-12-22 13:46:41 -06:00
Jonathan Thomas
3f60f601ca
Take 2: Trying again to fix the python fallback directory detection for Launchpad build servers
2025-12-16 23:23:07 -06:00
Jonathan Thomas
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.
2025-12-16 21:05:23 -06:00
Jonathan Thomas
68d3850efa
Exposing VideoCacheThread to SWIG bindings for Python, Ruby, and Java. This will be called from openshot-qt in Python, to speed up exports.
2025-06-06 15:33:43 -05:00
Jonathan Thomas
26e6ef404c
Adding reuse copyright and licensing info
2025-05-31 17:56:32 -05:00
Jonathan Thomas
efedc09cd9
Initial GDExtension demo code, which can initialize a Timeline and FFmpegReader instance, print Profiles, and send an Image into Godot 4.4/4.5. This is highly experimental, and disabled by default. Requires ENABLE_GODOT=1 to build, and manually copying the gdextension and bindings/godot/*.so file into your Godot project bin. NOTE: This also required a locally compiled version of Godot and Godot-cpp.
2025-05-31 16:00:10 -05:00
Jonathan Thomas
d26ef4dcbb
Merge branch 'develop' into lens-flare
2025-05-28 20:34:51 -05:00
Jonathan Thomas
3db2fe14fb
Adding unit tests for Lens Flare effect, and adding effect to Python SWIG bindings
2025-05-28 17:40:47 -05:00