Interactive transform edits repeatedly replace growing X/Y keyframe curves.
Applying each update copied the same JSON data through several layers and
rebuilt keyframe storage from scratch, making edits increasingly expensive
as an animation accumulated points.
Move JSON values that are already owned by the loader through the existing
by-value interfaces instead of copying them again. Clip and effect loading
now share a base-field helper that reads common fields without copying all
of the derived animation data. Parsed SetJson input and nested color/point
values use the same ownership approach.
Keep allocated keyframe capacity across replacements and append sorted
points directly. Unordered input and duplicate frames still use AddPoint,
preserving ordering and replacement behavior. Existing public signatures,
virtual method layout, JSON format, and timeline locking remain unchanged.
Add two optional benchmark cases for a 720p/24fps image clip with 0 or 1,000
existing keyframes per axis. Each performs 100 successive X/Y transform
updates through Timeline::ApplyJsonDiff and reports the median of three
trials. Input preparation stays outside the measurement, and final point
counts and values are checked so a skipped update cannot look faster.
These cases belong to the separate benchmark executable, not normal CTest
runs. Report Ops/s because an operation can now be a JSON edit or a frame.
Document the reproduction commands and local before/after measurements.
The measured cost per update fell from 0.82 to 0.33 ms for the initially
empty curves and from 17.99 to 6.73 ms for curves starting at 1,000 points.
These isolate native JSON application; they do not measure GUI rendering
or guarantee the same performance on other machines.
Add regression coverage for caller-owned JSON, sorted and unordered input,
duplicate and fractional frames, interpolation handles, large curve
replacement, multiple actions in one diff, unchanged properties, and cache
invalidation.
Validation: rebuilt the library, benchmark, and affected test executables;
all 197 KeyFrame, Timeline, Clip, Point, Color, ColorGrade, Mask, and
EffectMask tests passed in 6.2 seconds. Both remaining transform benchmark
cases also completed successfully. The slower 5,000-point benchmark case
is intentionally omitted.
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.
* 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
* change code snippets to have a copy-paste friendly syntax
* use clang++/clang for building libopenshot
* use location provided by brew using --cellar
By using actual Unicode characters for the various ✔️ and ❌ marks
in the table, Doxygen will format it properly.
Also:
- Changed to superscripted numerals, for the various callouts
- Reformatted notes into a corresponding ordered list
- Added invisible spaces after the marks without a callout, to
balance centering
- Added center-alignment markers to appropriate table columns
Also include the documentation MarkDown pages in the Doxygen docs.
These will show up as Related Pages in the interface.
* The formatting of `INSTALL-*.md` had to be changed some:
- Doxygen doesn't support headings in bulleted lists (lines starting
with `* ###`) -- I'm not even sure that's legal markdown. They were
changed to just level 3 headings (lines starting with `###`).
- ALL Windows paths in `INSTALL-WINDOWS.md` were wrapped in backticks,
to prevent Doxygen parsing them as markup commands.
- Level 1 headings were added to the top of the three install docs,
giving them the title "Building libopenshot for ___(OS)___".
Otherwise all three pages were titled "Getting Started".
* Separately, the table at the top of `HW-ACCEL.md` does not
translate well to Doxygen. It will need further polishing. But the
docs are all quite readable now.