Jonathan Thomas
04f9ccbe83
Discover Linux camera modes through native V4L2 queries
2026-09-19 15:10:01 -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
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
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
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
Jonathan Thomas
6a2f4f539f
Adding missing effects to .i swig files
2025-05-25 23:29:50 -05:00
HaiVQ
cd887c7e8e
Add Outline effect class and integrate into OpenShot
2024-12-10 17:13:34 +07:00
Jonathan Thomas
178cae48b7
Expose the Profile operators to SWIG for comparison
2024-10-10 12:46:16 -05:00
Jonathan Thomas
c838c126ad
Improvements to AudioWaveformer to use RMS (Root Mean Square), and return both average RMS and max RMS for graphing, including some new unit tests.
2022-11-01 15:17:03 -05:00
Jonathan Thomas
9cd7dd68a8
Wrap vector<float> in Swig mappings, and enable thread-safe access to swig wrappers - so our long running waveformer does not block the Python GIL
2022-10-31 14:20:18 -05:00
Jonathan Thomas
2326532820
Initial commit of AudioWaveformer class, which is designed to iterate any ReaderBase, and return a reduced "average" sample set - more useful for generating waveforms - for example, reduce a 44100 samples per second down to 20 samples per second.
2022-10-30 22:04:19 -05:00
Frank Dana
d909eccdf6
python/openshot.i: Convert to 4-space indents ( #820 )
2022-04-03 00:45:08 -04:00
Jonathan Thomas
9eda757885
Merge branch 'develop' into audio-devices
...
# Conflicts:
# src/AudioBufferSource.cpp
# src/AudioReaderSource.cpp
# src/AudioReaderSource.h
# src/Clip.cpp
# src/Frame.cpp
# src/Qt/AudioPlaybackThread.h
# src/audio_effects/Compressor.h
# src/audio_effects/Delay.h
# src/audio_effects/Echo.h
# src/audio_effects/Expander.h
2021-12-02 22:05:19 -06:00