Commit graph

890 commits

Author SHA1 Message Date
Mira Grudzinska
9ebc2045d6 lottie: remove unnecessary cast 2024-07-19 08:35:01 +09:00
Hermet Park
4f2f4dbf26 Revert "Revert "lottie: ++ scene composing optimization""
This reverts commit 8c3586a7c4.
2024-07-19 08:34:25 +09:00
Hermet Park
8c3586a7c4 Revert "lottie: ++ scene composing optimization"
This reverts commit bfdc8e4de7.

hotfix due to a memoy corruption. please see asan test.
2024-07-12 11:28:48 +09:00
Hermet Park
774d366dc2 lottie: clarify shape direction.
There are only two options clockwise or counter-clockwise.
2024-07-12 11:18:56 +09:00
Mira Grudzinska
39bc836eef lottie: apply direction to rect 2024-07-12 11:18:56 +09:00
Hermet Park
3336e85025 lottie: ++ scene composing optimization
retain resuable layer solid paint during animation.
2024-07-12 11:18:56 +09:00
Hermet Park
bfdc8e4de7 lottie: ++ scene composing optimization
retain reusable precomp clipper shapes during animation.
2024-07-12 11:18:56 +09:00
Hermet Park
e1871f79f8 lottie: ++memory access stability
Internal matrix can be null.
This update prevents such cases by using a safer API.
2024-07-12 11:18:56 +09:00
Jinny You
b24e876a67 lottie/text: Support text range selector (Phase 1)
This patch provides initial support for the text range selector. Full support will be added gradually in subsequent steps. This is the first step.

Text range selector with following properties:
1. Text Range Selector (Units)
2. Text Style
- Fill Color
- Fill Opacity
- Stroke Color
- Stroke Width
- Stroke Opacity
- Opacity
- Rotation
- Position
- Scale
2024-07-12 11:18:56 +09:00
Hermet Park
318c76119a common: replace the round() with nearbyint()
nearbyint() is 2x faster than round() in our local test.
2024-07-12 11:18:56 +09:00
Mira Grudzinska
29b06e0d9a lottie: improvement 3d rotation
For rotation around the X and Y axes, the transformation
matrix was incorrectly created - elements e12 and e21
were omitted. Now fixed.
2024-07-12 11:18:56 +09:00
Hermet Park
1c8698ce20 common/math: introduced custom atan2()
the custom atan2 algorithm by Remez.
see: https://en.wikipedia.org/wiki/Remez_algorithm

This improved the Lottie example by ~2ms.
Total atan2 performance time was reduced by 43%
2024-07-12 11:18:56 +09:00
Hermet Park
04dbc5f509 lottie: code refactoring
- _draw() returns boolean whether merging shape is allowed or not.
- renamed some internal variables.
2024-07-12 11:18:56 +09:00
Mira Grudzinska
0e0c25e873 lottie: enhance support for ao: 1
Adding support for auto-orient=true for frames <= first
and >= last, as well as for positions specified without
outer and inner tangent.
2024-07-12 11:18:56 +09:00
Mira Grudzinska
c657e53f48 lottie: add support for image size
The width and height of the image must
be specified in the Lottie file and must
be taken into account during rendering.
2024-07-12 11:18:56 +09:00
Hermet Park
4bd42ec7b1 lottie: ++thread safety.
comp pointer is used for checking if the header is ready.
It can be written in a worker thread and needs a critical
section on the reader side.

This also potentally improve the thread efficiency
from the segment() / marker() function calls.
2024-07-12 11:00:46 +09:00
JunsuChoi
c922eb9d2d svg_loader: Fix incorrect stack.pop() call in loader
loader->stack.pop() at line 3271 is called to remove
the defs node added to the stack due to nested graphics elements.
However, it is called in an inappropriate situation and the loader's node tree is damaged.
Fixes an error where the close tag is recognized as a `line` of the graphics tag when it is `linearGradient`.
ex)
```
    <defs id="def">
        <linearGradient x1="1" y1="2" x2="3" y2="4" id="l"/>
        </linearGradient>
        <rect x="10" y="10" width="10" height="10"  fill="blue" id="r2"/>
    </defs>
```

related issue: https://github.com/thorvg/thorvg/issues/2518
2024-07-12 11:00:38 +09:00
Hermet Park
a328343dc7 common: Fix a compilation failure on VS 2017
issue: https://github.com/thorvg/thorvg/issues/2512
2024-07-05 10:58:04 +09:00
Hermet Park
64a0b84d71 lottie: fix a regression bug of masking
InverseAlphaMasking should be applied as intended,
but it was mistakenly reverted to alpha.

regression in v0.14.0 by: 2c7a83406e
2024-07-05 10:57:56 +09:00
Hermet Park
938d775ae5 lottie: allow image asset sharing among LottiePicture instances
Previously, the Lottie builder didn't account for image asset sharing
among multiple layers. This update rectifies the situation.

issue: https://github.com/thorvg/thorvg/issues/2428
2024-07-05 10:57:09 +09:00
Hermet Park
b8b2478572 lottie/parser: optimization++
Skip the data constructuion if the mask mode
is none. it's not used at all.
2024-07-05 10:55:56 +09:00
Hermet Park
e4cbee61c8 lottie/builder: revise the masking update.
Append the mask shape to the previous one, instead of composition,
when it's able by the condition.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-07-05 10:55:48 +09:00
Hermet Park
10d96b32a0 lottie: remove exception handling
don't stop the parsing when the data type is incorrect.
just let it slide.

issue: https://github.com/thorvg/thorvg/issues/2389
2024-07-05 10:54:54 +09:00
Hermet Park
0874116742 lottie/rapidjson: --assert
Save binary size about 0.8kb
2024-07-05 10:54:46 +09:00
Vincent Torri
98eb16a61e json loader: fix warnings in jerryscript on Windows 2024-07-05 10:54:21 +09:00
Hermet Park
f3469350b9 lottie: fix a data-race problem
make it sync call before accessing the composition data
from marker and segments.

issue: https://github.com/thorvg/thorvg/issues/2462
2024-06-27 14:42:27 +09:00
Hermet Park
933176e309 lottie: hotfix for preventing a crash.
MaskMode=None is not properly addressed,
Prevent the crash from the use-case.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-06-27 14:42:27 +09:00
Hermet Park
a0c6025132 lottie: fix a compile error on MSC with clang.
issue: https://github.com/thorvg/thorvg/issues/2347
2024-06-27 14:42:27 +09:00
Mira Grudzinska
d9326921fa lottie: fix repeater order
Assigning numbers 1 or 2 to a bool always
resulted in true. Now fixed and repeated
shapes are drawn in the proper order.
If the repeater had no elements, iterating
shapes from the end would result in a segf.
This issue is now fixed.
2024-06-24 14:56:31 +09:00
Mira Grudzinska
ec77d8bd89 ttf_loader: support loading from memory
New text API for loading fonts from memory
is introduced. This is necessary to enable
embedded fonts support.
2024-06-24 14:50:13 +09:00
Mira Grudzinska
70c2260cfb svg_loader: handle text node
The text node is handled, but default values
of the font-family and font-size as used in
the user's system are not.
For now font has to be loaded by the user.

@Issue: https://github.com/thorvg/thorvg/issues/2350
2024-06-24 14:44:52 +09:00
Jinny You
8a1a3e54ee lottie: Add exception for lottie doesn't have exported glyph
Added handling logic for missing characters to prevent program hang.
2024-06-24 14:42:33 +09:00
Jinny You
2f26dc33a9 lottie: Fix invalid font match
When Lottie has similar font names, it incorrectly matches fonts due to a logic bug.

This error causes an infinite loop when searching for glyphs.
2024-06-24 14:42:19 +09:00
Mira Grudzinska
e6f4b5a2a8 common: strokeTrim api introduced
New api sets/gets the trim of the stroke
along the defined path segment, allowing
control over which part of the stroke is
visible.

@issue: https://github.com/thorvg/thorvg/issues/2190
2024-06-24 14:37:53 +09:00
Mira Grudzinska
bdd506bbb8 lottie: fix matte layer finding
Layer identifiers do not have to be unique within
the entire file - they are unique within a given
group. Searching the entire composition to find
the referenced matte was an incorrect approach.

Error introduced by 1ee79a6c2a

@Issue: https://github.com/thorvg/thorvg/issues/2349
2024-06-24 14:37:29 +09:00
Martin Capitanio
839ffe40c6 svg_loader: Add embedded webp mime type
Fixes loading _webp_ images embedded in SVG.
2024-06-24 14:37:09 +09:00
Mira Grudzinska
f14be7c33b common: fix typos & remove unused var 2024-06-24 14:36:43 +09:00
Mira Grudzinska
5e9b07ea54 lottie: parsing obj property inside this obj
Shape's property 'direction' should be parsed
together with other properties specific for
the shape. This solves the issue with direction-
it wasn't working.
2024-06-24 14:36:36 +09:00
Hermet Park
d8888923d1 lottie/builder: revise the layer build logic
Promote the text/image updates to the layer level.
2024-06-24 14:36:05 +09:00
Hermet Park
53f2a3f10b lottie: try packing data compactly. 2024-06-24 14:35:40 +09:00
Hermet Park
33883f302d lottie: optimize the internal data
encode the object name with the hash value
to save memory and enable fast data comparison.
2024-06-24 14:35:34 +09:00
Hermet Park
2cc522d9e9 lottie: code refactoring & size reduction
- introduced a pasing logic for duplicates.
- renamed internal varaible, no logical changes.
- removed null checks after memory alloc fails.
- reduced 1kb size.
2024-06-24 14:35:26 +09:00
Hermet Park
37f38c788f lottie: hotfix memory leaks by a regression
A regression bug by a recent change:
1ee79a6c2a
2024-06-24 14:35:09 +09:00
Mira Grudzinska
0e59daafc7 lottie: repeater transformation fix
In the case of a transformation (denoted as T1)
appearing after the repeater, but at the same
level of nesting, the objects to which the repeater
is applied should not consider T1. However,
the transformation of the repeater itself should
take T1 into account.
Also, it is possible to have several consecutive
repeaters, and all of them should be taken into
account. Until now, the last one was overwriting
the previous one.
2024-06-24 14:34:42 +09:00
Mira Grudzinska
b812277a06 lottie: add 'tp' tag support
So far it hasn't been possible to specify
a matte layer - by default, it was the layer
above the calling layer. The 'tp' tag support
has been introduced, enabling referencing any
layer by its index.
In cases where the layer referencing the matte
was the first one, a segmentation fault was
observed. This issue has now been resolved.

@Issue: https://github.com/thorvg/thorvg/issues/2325
2024-06-24 14:34:34 +09:00
Mira Grudzinska
20d3992214 lottie: fix interpolation issue
Handled the case of different numbers
of points in consecutive frames. This
case can occur due to erroneous data
or as a consequence of changing the path
from closed to open and vice versa.

@Issue: https://github.com/thorvg/thorvg/issues/2287
2024-06-24 14:34:27 +09:00
Hermet Park
407fcf69e3 common: code refactoring
Replace the math functions with operator overloading.
This should potentially reduce the code size.
2024-06-24 14:33:49 +09:00
Hermet Park
0e6fa01ac9 math: introduced a custom floating epsilon
Rather than aiming for extremely high accuracy,
a compromise can achieve with better performance.

This modification helps prevent unnecessary image rotation.

issue: https://github.com/thorvg/thorvg/issues/2265
2024-06-24 14:31:01 +09:00
Hermet Park
a71fd6652a lottie: fixed a missing slot overriding update.
the Lottie scene should be updated when the slot overriding
is updated. Previously, it only depended on the frame update.

issue: https://github.com/thorvg/thorvg/issues/2303
2024-06-24 14:30:46 +09:00
Mira Grudzinska
2c162174a8 svg_loader: fix data parsing
Added an additional XML entity to be
omitted while parsing.

@Issue: https://github.com/thorvg/thorvg/issues/2273
2024-06-24 14:30:26 +09:00