thorvg / thorvg

Thor Vector Graphics is a lightweight portable library used for drawing vector-based scenes and animations including SVG and Lottie. It can be freely utilized across various software platforms and applications to visualize graphical contents.

Home Page:https://www.thorvg.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`tvg_set_frame` API returns imprecise frame number in `tvg_get_current_frame` after upgrade to v0.13.3

theashraf opened this issue · comments

When upgrading thorvg from version v0.13.0 to v0.13.3 in dotLottie-rs, we encountered a failing test related to the tvg_set_frame API. When tvg_set_frame is called with a specific frame number and tvg_get_current_frame is subsequently called, the returned frame number occasionally differs slightly from what was originally set, causing the player to render a different frame than expected.

During the dotLottie player's event tests, we observed discrepancies between the frame number set by the user and the frame actually rendered. The mismatch is evident in the recorded events from the test case, shown below:

Recorded Events:

[
    "on_load",
    "on_play",
    "on_frame: 1",
    "on_render: 1",
    "on_frame: 2",
    "on_render: 2",
    "on_frame: 3", // This is when the player calls tvg_set_frame
    "on_render: 3.0000002", // This is when the player triggers a render event with the frame number returned from tvg_get_current_frame()
    "on_frame: 4",
    "on_render: 4",
    "on_frame: 5",
    "on_render: 5",
    "on_frame: 6",
    "on_render: 6.0000005",
    "on_frame: 7",
    "on_render: 7.0000005",
    "on_frame: 8",
    "on_render: 8",
    "on_frame: 9",
    "on_render: 9",
    "on_frame: 10",
    "on_render: 10",
    "on_frame: 11",
    "on_render: 11.000001",
    "on_frame: 12",
    "on_render: 12.000001",
    "on_frame: 13",
    "on_render: 13.000001",
    "on_frame: 14",
    "on_render: 14.000001",
    "on_frame: 15",
    "on_render: 15.000001",
    "on_frame: 16",
    "on_render: 16",
    "on_frame: 17",
    "on_render: 17",
    "on_frame: 18",
    "on_render: 18",
    "on_frame: 19",
    "on_render: 19",
    "on_frame: 20",
    "on_render: 20",
    "on_frame: 21",
    "on_render: 21.000002",
    "on_frame: 22",
    "on_render: 22.000002",
    "on_frame: 23",
    "on_render: 23.000002",
    "on_frame: 24",
    "on_render: 24.000002",
    "on_frame: 25",
    "on_render: 25.000002",
    "on_frame: 26",
    "on_render: 26.000002",
    "on_frame: 27",
    "on_render: 27.000002",
    "on_frame: 28",
    "on_render: 28.000002",
    "on_frame: 29",
    "on_render: 29.000002",
    "on_frame: 30",
    "on_render: 30.000002",
    "on_frame: 31",
    "on_render: 31.000002",
    "on_frame: 32",
    "on_render: 32",
    "on_frame: 33",
    "on_render: 33",
    "on_frame: 34",
    "on_render: 34",
    "on_frame: 35",
    "on_render: 35",
    "on_frame: 36",
    "on_render: 36",
    "on_frame: 37",
    "on_render: 37",
    "on_frame: 38",
    "on_render: 38",
    "on_frame: 39",
    "on_render: 39",
    "on_frame: 40",
    "on_render: 40",
    "on_frame: 41",
    "on_render: 41.000004",
    "on_loop: 1",
    "on_pause",
    "on_stop"
]

relative issue: #2147

@theashraf Hello, I expect this could help with your issue: #2270.

But please keep in mind that basically thorvg will ignore those values below 0.6f decimal point, not guarantee the accurate data.