Conversation
Member
Author
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepare libopenshot 1.0.1 from the updated develop branch, including reader/writer stability fixes, native Linux camera-mode discovery, and the new logging implementation.
Bump the SO version from 31 to 32 because replacing the exported ZmqLogger class with a Logger alias changes binary compatibility; clients must rebuild. Require OpenShotAudio 1.0.1 to match this release's dependency artifacts.
The release-20260919 branch was pushed to GitHub after libopenshot-audio, at the maintainer's direction. GitLab receives the GitHub mirror and builds the artifacts consumed by openshot-qt. Pipeline verification is being handled by the maintainer; openshot-qt remains unpushed pending that step.
Validation: release version, SO version, and dependency minimum checked; git diff --check passed. Keep this PR in draft during release-candidate testing.