Commit graph

117 commits

Author SHA1 Message Date
Hermet Park
27d85f5861 lottie: Improve feature coverage by correctly handling XOR shapes
XOR when the shape's direction property is set to a value of 2.
Currently, the direction property is expected to have
either 1 for clockwise or 3 for counterclockwise orientation.

Just found out the number 2 use-case...
2024-04-05 17:28:08 +09:00
Hermet Park
3c98cb5828 lottie: Fixed the issue with gradient filling.
Previously, multiple gradients within a single group
couldn't be accounted for during rendering.

This fix addresses the scenario by fragmenting the rendering context.
2024-04-05 17:28:08 +09:00
Hermet Park
5b89479963 lottie: properly capture the stroking context
Each group must determine the stroking rendering contexts
and assess whether context switching has occurred.

Migrate the sequence from the root layer to all groups.
2024-04-05 17:28:08 +09:00
Hermet Park
8b26f8b7ea lottie: Corrected the Time Remapping Range (#1907)
enable exceeding the range of normalized values in time remapping.

the issue came from a misunderstanding of the lottie spec.

issue: https://github.com/thorvg/thorvg/issues/1809
2024-04-05 17:28:08 +09:00
Hermet Park
388631be68 lottie: Newly added support for the text feature.
This enhancement enables embedded glyphs rendering.
The 'fonts' and 'chars' properties are now supported.
2024-04-05 17:28:05 +09:00
Hermet Park
a078f14bb3 loader: code refactoring
Ensure scene data is freed when it's dangled in the loader.
2024-04-05 17:21:18 +09:00
Hermet Park
102414d56f lottie: resolve a thread sanitizer report.
Issue: https://github.com/thorvg/thorvg/issues/1874
2024-01-02 20:34:12 +09:00
Jinny You
92288c8291 updated copyright date (#1866) 2024-01-02 20:34:12 +09:00
Hermet Park
74a7c45214 common: clean up the code. 2024-01-02 20:34:11 +09:00
Vincent Torri
7e438a665c include missing headers for strcmp(), strdup() and realloc() 2024-01-02 20:34:10 +09:00
Hermet Park
bbf3cec2cc common/array: code refactoring.
Use a default constructor with reservation.
2024-01-02 20:34:10 +09:00
Hermet Park
c0a1f82033 renderer/loader: optimization++
removed the internal unique_ptr usage to reduce the binary size(-553)
2024-01-02 20:34:10 +09:00
Jinny You
118516f015 lottie/builder: fix crash by null reference 2024-01-02 20:34:10 +09:00
Hermet Park
221005bb25 lottie/builder: revert the clipper cache.
This ia a buggy,
We will revisit this optimization with a perfect solution.
2024-01-02 20:34:10 +09:00
Hermet Park
f64ee28079 Loaders: Introduced a loader cache.
The loader cache is applied to conserve memory.

If the input data is already present in loaders,
the loader cache will promptly return the active loader.

This results in a lot of memory savings for the duplicated resources.

binary diff: -400 bytes
2024-01-02 20:34:10 +09:00
Hermet Park
815eb23856 lottie/builder: ++size optimization
Replaced std::queue with inlist for optimizing binary size (-1.3kb).
2024-01-02 20:34:10 +09:00
Hermet Park
52a90d54ee lottie/builder: corrected polystar rotation.
There was likely a mistake in the rotation value set;
there was no reason to multiply it by 2.

Issue: https://github.com/thorvg/thorvg/issues/1773
2024-01-02 20:34:10 +09:00
Hermet Park
92d7727c2a Lottie/builder: revert a static cache optimization.
There are some matting masking bugs observed,
Reverted the commit. We will revisit it later.

commit d37c500262
Author: Hermet Park <hermet@lottiefiles.com>
Date:   Wed Oct 25 18:55:05 2023 +0900

    lottie: introduced static layer cache.

    lottie builder doesn't need to rebuild the layer object
    if it has no any animation frame data.

    That case, we can cache the layer scene in order to reuse it.

    Tested on local machine (single thread):
    - Lottie: appx. 2ms enhanced.
    - Binary: +204
2024-01-02 20:34:10 +09:00
Hermet Park
5c2be47e57 lottie/builder: hotfix, invalid stroking scaling.
There is a buggy workaround code that rewinds the stroke scaling.

Issue: https://github.com/thorvg/thorvg/issues/1730
2024-01-02 20:34:10 +09:00
Hermet Park
b87bb2b1a0 lottie/parser: Fix the shapes parsing logic.
Currently, it assumes "ty":"gr" for the related shapes children,
which can be skipped since the children will be in the "it" scope.

Some Lottie data is missing the "ty":"gr" field,
and ThorVG couldn't display the content properly.
It can ignore it with the context understanding.
2023-12-26 18:36:38 +09:00
Hermet Park
5129b05023 lottie/parser: ++ blending options
thorvg blending is quite buggy,
the feature needs a verification.
2023-12-26 18:24:21 +09:00
Hermet Park
965e58806a lottie/builder: Fix a broken animation
The animation couldn't be triggered on a single thread.
Regression bug introduced by 29b5bc372d
2023-12-26 18:23:46 +09:00
Hermet Park
4ba8ff1e11 lottie/loader: Corrected an issue with the return value when loading fails.
Previously, Picture::load(const char* data, uint32_t size, const std::string& mimeType, bool copy = false)
would return 'Success' even when the data is invalid.

This issue only occurred when the number of threads is set to 0.
2023-12-26 18:23:40 +09:00
Hermet Park
58311ee5c3 saver/gif: Fix a clipping issue.
The Lottie loader missed handling the base clipper resizing.
This patch addresses the issue.
2023-12-26 18:18:27 +09:00
Hermet Park
37a01b8735 portability: addressed all compilation warnings from MSVC 2023-12-26 18:05:36 +09:00
Hermet Park
c3d88b18fe lottie: fixed all memory access violations. 2023-12-26 18:05:28 +09:00
Hermet Park
29590b373f lottie/builder: enable layer blending
Issue: https://github.com/thorvg/thorvg/issues/1737
2023-12-26 18:02:12 +09:00
Hermet Park
ab8dd8a9c2 lottie: ++optimization with a caching effect.
reuse clippers if they are available.

Binary: +132
2023-12-26 18:01:51 +09:00
Hermet Park
aa4c186cd2 lottie: introduced static layer cache.
lottie builder doesn't need to rebuild the layer object
if it has no any animation frame data.

That case, we can cache the layer scene in order to reuse it.

Tested on local machine (single thread):
- Lottie: appx. 2ms enhanced.
- Binary: +204
2023-12-26 18:01:30 +09:00
Hermet Park
fce2e404d3 lottie: clean up code
no logical changes, only code clean-up
2023-12-26 17:53:31 +09:00
Hermet Park
0832a188fe animation/lottie: updated the frame count unit.
replace the frame count unit from the int32_t to float
since animations could smoothly interpolate key-frames.

This notificably improve the animation smoothness in Lottie

Beta API changes:
Result Animation::frame(uint32_t no) -> Result Animation::frame(float no)
uint32_t Animation::curFrame() const -> float Animation::curFrame() const
uint32_t Animation::totalFrame() const -> float Animation::totalFrame() const
2023-12-26 17:51:53 +09:00
Hermet Park
1b15233aeb api: enhance the API usage.
Allow users to omit the default type casting for added convenience.
2023-12-26 17:50:36 +09:00
Hermet Park
8af77ba5b1 lottie: Fixed trimpath to support simultaneous trimpath
The previous version omitted support for simultaneous trimpath,
but it is now working as intended.
2023-12-26 17:50:08 +09:00
Hermet Park
244e984df8 lottie/builder: Fix overlapped stroking outlines.
Previously, the builder accumulated the outlines and fills
in one paint to reduce the rendering context.

However, this approach won't work for Lottie
if the resource contains multiple strokes with branched groups.

We should apply the optimization
only when the specified condition is satisfied.
2023-12-26 17:50:02 +09:00
Hermet Park
8a6b5626fc lottie/builder: fix a regression bug.
currently thorvg doesn't support full 3d transformation.
orthogonal projection is mandatory.

Issue: https://github.com/thorvg/thorvg/issues/1698
2023-12-26 17:49:03 +09:00
Hermet Park
e1f1b9656b lottie/builder: revise the render context for saving memory.
Allocate repeater context only when it's valid.
2023-12-26 17:47:53 +09:00
Hermet Park
820547562c Lottie: Fixed handling of multiple strokes in one layer.
Revised the rendering logic of Lottie by creating a new rendering context
using a queue when multiple strokes are requested.

Issue: https://github.com/thorvg/thorvg/issues/1642
2023-12-26 17:47:47 +09:00
Hermet Park
7ec969be29 lottie/builder: Fix incorrect stroke width scaling propagation.
The transform (scale) should be applied to the following drawing elements,
not the previous stroke.
2023-09-26 14:24:52 +09:00
Hermet Park
fdd90605c7 lottie/builder: fix a memory leak.
fixed a memory leak in an exceptional case.
2023-09-26 10:48:33 +09:00
Hermet Park
1819fed033 renderer/paint: fixed a mismatched reference count.
This correction ensures a consistent use of 'ref' and 'unref' for paints to release memory properly.
The memory leak occurred when a picture was not pushed to a valid canvas.

This issue was reported by the unit-test memory sanitizer.
2023-09-26 10:48:33 +09:00
Hermet Park
dc9e14a20f lottie/model: revise the color stop population logic.
The omitted data must be generated with interpolation.
This change supplements that logic.
2023-09-25 11:04:20 +09:00
Hermet Park
3b611e0da9 lottie: fixed data conversion complie warnings 2023-09-22 12:35:13 +09:00
Hermet Park
ec5a32bb73 lottie: enhanced the colorstop feature.
Lottie ColorStop RGB / Alpha can be dealt with individually.
Since thorvg handles this one unified set,
lottie model need to merge the data into one structure.
2023-09-21 22:11:31 +09:00
Hermet Park
e2b7bfc198 lottie model: corrected stroke default value according to the lottie-spec. 2023-09-21 22:11:31 +09:00
Hermet Park
cba2b0f724 lottie/builder: correct a parenting error.
There is a missing case where a layer didn't parent properly,
especially when the parent is the matte target.
2023-09-21 22:11:31 +09:00
Hermet Park
5b8c66f5c8 lottie/builder: fix an invalid matting result.
Previously, it ignored the matte when it was out of frames for the sake of optimization.
However, this led to an incorrect matting result.

It should make the scene invisible when the matting is invisible.
2023-09-21 22:11:31 +09:00
Hermet Park
99609c7968 lottie: fixed an incorrect view clipping problem.
this missing initialization occured an incorrect view clipping.
2023-09-19 21:55:25 +09:00
Hermet Park
2cada9c446 loader/lottie: code refactoring.
migrate transform from the group to the layer.
transformation is not necessary in group but layer.

This helps to reduce the unnecessary assigning of the transformation
in group instances.
2023-09-19 14:03:13 +09:00
Hermet Park
549f4b1308 loader/lottie: properly handle graident opacity attributes.
That property has been missed in the implementation.
2023-09-19 10:33:22 +09:00
Hermet Park
8aa12ca468 taskschduler: fix a regression deadlock issue
This fix introduces a workaround to enforce synchronous tasking on worker threads.
Sometimes, out of threads get stuck in a deadlock condition.

@Issue: https://github.com/thorvg/thorvg/issues/1636
2023-09-18 21:06:01 +09:00