Stanimir Stamenkov created BATIK-1361: -----------------------------------------
Summary: Few broken animation frames using certain frame rates Key: BATIK-1361 URL: https://issues.apache.org/jira/browse/BATIK-1361 Project: Batik Issue Type: Bug Affects Versions: 1.17 Environment: Batik 1.17; Java 17; Windows 10 Reporter: Stanimir Stamenkov Attachments: SVGAnimTest.java, wait-20fps-046.png, wait-40fps-046.png, wait-40fps-091.png, wait-40fps-106.png, wait-60fps-136.png, wait.svg I have a small (3 sec) SVG animation I'm tryng to render the individual frames of as bitmaps, like: {code:java} import java.nio.file.Path; import org.w3c.dom.Document; import org.apache.batik.transcoder.SVGAbstractTranscoder; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.ImageTranscoder; import org.apache.batik.transcoder.image.PNGTranscoder; Path framesDir; Document svgDoc; ... TranscoderInput svg = new TranscoderInput(svgDoc); final float duration = 3.0f; final float frameRate = 20; ImageTranscoder transcoder = new PNGTranscoder(); transcoder.addTranscodingHint( SVGAbstractTranscoder.KEY_EXECUTE_ONLOAD, true); float animTime = 0; for (int frame = 1; animTime < duration; animTime = frame++ / frameRate) { transcoder.addTranscodingHint( SVGAbstractTranscoder.KEY_SNAPSHOT_TIME, animTime); Path frameFile = framesDir.resolve(BASE_NAME + "-" + frame + ".png"); try (OutputStream fout = Files.newOutputStream(frameFile)) { transcoder.transcode(svg, new TranscoderOutput(fout)); } } {code} I'm noticing with this specific animation ({{wait.svg}}) one of the frames is "broken": || Frame #46 || | !wait-20fps-046.png! | This appears when I'm rendering 20 fps for a total of 60 frames (3 seconds). I've tried 15 fps and 30 fps, and I'm not observing such broken frames. Then I've tried 40 fps and I'm seeing few more broken frames: || Frame #46 || Frame #91 || Frame #106 || | !wait-40fps-046.png! | !wait-40fps-091.png! | !wait-40fps-106.png! | At 45 and 50 fps I'm not observing broken frames. At 60 fps I'm observing one broken frame: || Frame #136 || | !wait-60fps-136.png! | I'm noticing some magic numbers here: {noformat} 46 (1-based) = 45 (0-based) 91 - 46 = 45 136 - 91 = 45 {noformat} Not sure how and if *#106* fits in here... but {{136 - 106 = 20}} - the common 20, 40, 60 (fps) denominator 🤪. *Steps to Reproduce* # Save [^wait.svg] and [^SVGAnimTest.java] into a single directory; # From the same directory execute: {noformat} java -cp <batik-dist>/lib/* SVGAnimTest.java {noformat} # Observe the animation frames in the output {{wait-20fps}} directory. *Actual Results* Frame {{wait-20fps-046.png}} is broken. *Expected Results* All frames should be fine. *Details* To experiment with different frame rates use: {noformat} java -cp <batik-dist>/lib/* SVGAnimTest.java [fps] {noformat} f.e.: {noformat} java -cp <batik-dist>/lib/* SVGAnimTest.java 40 {noformat} --- _Disclaimer:_ The original [wait.svg|https://github.com/ful1e5/Bibata_Cursor/blob/v2.0.4/svg/original/wait.svg] is from the [Bibata_Cursor|https://github.com/ful1e5/Bibata_Cursor] project. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: batik-dev-unsubscr...@xmlgraphics.apache.org For additional commands, e-mail: batik-dev-h...@xmlgraphics.apache.org