30 Commits

Author SHA1 Message Date
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 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 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 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 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
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
FeRD (Frank Dana) 59108504e3 Code changes for compatibility with JUCE 6.x
- Replace all juce::CriticalSection with std::recursive_mutex
- Replace all juce::AudioSampleBuffer with juce::AudioBuffer<float>
- Eliminate implicit reliance on 'using namespace juce;'
- Replace OpenShotAudio.h includes with targeted juce modules
2021-11-09 06:22:25 -05:00
Frank Dana 2d2a062bdc Remove (broken) BlackMagic DeckLink support (#760) 2021-10-20 06:49:08 -04:00
Frank Dana 59138ea3e4 Adopt license management via Reuse project/tool (#711)
* reuse-managed license/copyright headers

reuse is a tool for compliance with the REUSE recommendations. See
<https://reuse.software/> for more information, and
<https://reuse.readthedocs.io/> for the online documentation.

* Set jsoncpp license
* Add MIT license for Decklink sources
* Explicitly license examples/
  - Add headers to source files
  - Change blanket licensing in .reuse/dep5 to only cover binary media
  - Import CC-BY-3.0 license and assign to sintel_trailer
2021-10-16 01:26:26 -04:00
FeRD (Frank Dana) 76fb7c8013 Rename AudioSampleBuffer to AudioBuffer<float>
For a long time now, juce::AudioSampleBuffer has been nothing but an
alias for its true (templated) type, AudioBuffer<float>.
2021-08-24 13:11:00 -04:00
Frank Dana 09eb807507 CMake: USE_SWIG_DEPENDENCIES for CMake 3.20+ (#691) 2021-06-25 01:05:59 -04:00
Frank Dana dbaac4debd Merge branch 'develop' into frac-python-types 2021-01-27 03:50:45 -05:00
FeRD (Frank Dana) 3a0d88adcf Property fixes for bindings 2021-01-13 10:59:13 -05:00
FeRD (Frank Dana) b445d6df6c Propagate library defs to swig 2021-01-13 08:31:34 -05:00
FeRD (Frank Dana) b280fbd082 Bindings: Add template specializations 2020-12-04 11:28:59 -05:00
Jonathan Thomas ac73bd965d Fixing an issue caused by timeline::GetClip returning a ClipBase instead of a Clip (broke waveform generation).
Also adding a swig definition for the Caption effect.
2020-12-03 10:52:27 -06:00
FeRD (Frank Dana) a1e44edad4 Merge branch 'develop' into clip-refactor-keyframes 2020-10-19 16:28:49 -04:00
FeRD (Frank Dana) d910949189 CMake: Code and Find module tweaks
- FindOpenShotAudio takes over -DDEBUG, -DHAVE_ISFINITE logic
  (now set on OpenShot::Audio target when appropriate)
- Tweaks to BlackMagic dependency discovery
- Reverse the test-disabling logic, `DISABLE_TESTS FALSE` cache
  variable changed to `ENABLE_TESTS TRUE`
2020-10-18 11:04:28 -04:00