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
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
Jonathan Thomas
5c52be24c9
Fix Python install path detection for compatibility with Python 3.12+
2025-05-05 20:08:58 -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