diff options
| author | 2026-03-30 19:38:33 +0200 | |
|---|---|---|
| committer | 2026-03-30 19:38:33 +0200 | |
| commit | 90e17dee9632cecf22608daa82c93cc0f9d0c5c4 (patch) | |
| tree | 9d70df65519efab7f0fbba6a532ac80cb66cc05b /src/lib/Renderer | |
| parent | 9a3087586633f2eb6d8b30a577b9d8946e7e8af1 (diff) | |
| download | videotool-master.tar.gz videotool-master.tar.bz2 videotool-master.tar.lz videotool-master.zip | |
toObjectURL used to use 70-ish % of the render time, toBlob only uses 13%
Diffstat (limited to 'src/lib/Renderer')
| -rw-r--r-- | src/lib/Renderer/Renderer.svelte | 7 |
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)); |