- 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
- Equivalents of operator* and operator/ templates are provided
by implemening `__mul__`, `__rmul__`, __truediv__`, `__rtruediv__`
in Python code for `openshot.Fraction` class
- An implementation of `__format__` is also provided, allowing
numeric format strings to be used directly on Fraction objects,
e.g. `v = Fraction(3, 9); print(f"{v:0.3f}") # prints '0.333'`
* 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
- Most exceptions are now based on two new base classes,
FileExceptionBase and FrameExceptionBase.
- All exception classes now export a `py_message()` method
(inherited or defined) which constructs a message for Python
that includes **all** arguments to the exception, not just
the why() text.
- Python's exception handling is updated to catch
openshot::ExceptionBase and display py_message() instead of why()
- (I didn't modify why() because it returns char*; py_message()
returns a std::string.)