aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2026-03-30 19:38:33 +0200
committerLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2026-03-30 19:38:33 +0200
commit90e17dee9632cecf22608daa82c93cc0f9d0c5c4 (patch)
tree9d70df65519efab7f0fbba6a532ac80cb66cc05b
parent9a3087586633f2eb6d8b30a577b9d8946e7e8af1 (diff)
downloadvideotool-master.tar.gz
videotool-master.tar.bz2
videotool-master.tar.lz
videotool-master.zip

fix: use toBlob to significantly improve performance

HEADmaster

toObjectURL used to use 70-ish % of the render time, toBlob only uses 13%

-rw-r--r--src/lib/Renderer/Renderer.svelte7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/Renderer/Renderer.svelte b/src/lib/Renderer/Renderer.svelte
index e848312..c3223a6 100644
--- a/src/lib/Renderer/Renderer.svelte
+++ b/src/lib/Renderer/Renderer.svelte
@@ -58,7 +58,12 @@
seconds: frame / video.fps
});
// TODO: see if we can pipe this into an active ffmpeg instead of writing a file then running a command after
- const file = await fetchFile(c.toDataURL());
+ const blob = await new Promise<Blob>((rs, rj) =>
+ c.toBlob((blob) => (blob ? rs(blob) : rj(new Error('No blob gotten back'))), 'image/png')
+ );
+ const u = URL.createObjectURL(blob);
+ const file = await fetchFile(u);
+ URL.revokeObjectURL(u);
await ffmpeg.writeFile('frames/f' + frame.toString().padStart(10, '0') + '.png', file);
if (performance.now() > lastAnimationFrame + 33) {
await new Promise((rs) => requestAnimationFrame(rs));