aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/Player/Player.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Player/Player.svelte')
-rw-r--r--src/lib/Player/Player.svelte22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/lib/Player/Player.svelte b/src/lib/Player/Player.svelte
index f3b8fb8..a742857 100644
--- a/src/lib/Player/Player.svelte
+++ b/src/lib/Player/Player.svelte
@@ -39,7 +39,9 @@
}
})();
video['_isInit'] = true;
- renderPromise = video.init();
+ renderPromise = video.init({
+ isPreview: true
+ });
await renderPromise;
video['_isInit'] = false;
frameCount = video.length;
@@ -49,6 +51,7 @@
const ourId = ++renderId;
if (renderPromise) await renderPromise;
if (renderId !== ourId) return;
+ if (frame > video.length) frame = video.length;
renderPromise =
video.renderFrame({
frames: frame,
@@ -120,12 +123,19 @@
}
loadedFrameTimestamp = true;
});
- // TODO: implement waitin a few seconds before saving
- $effect(() => {
- if (loadedFrameTimestamp)
+ let nextSaveFrameNumber = 0;
+ let lastSave = 0;
+ const saveFramePosition = async (frame: number) => {
+ nextSaveFrameNumber = frame;
+ await new Promise((rs) => setTimeout(rs, 100));
+ if (frame === nextSaveFrameNumber || performance.now() - lastSave > 500)
try {
+ lastSave = performance.now();
sessionStorage.setItem('timestamp', frame.toString(36));
} catch (_) {}
+ };
+ $effect(() => {
+ if (loadedFrameTimestamp) saveFramePosition(frame);
});
$effect(() => {
if (audio && video && !playing && !playbackFrameOffset) {
@@ -160,7 +170,9 @@
if (canvas && video) {
(async () => {
video['_isInit'] = true;
- renderPromise = await video.init();
+ renderPromise = await video.init({
+ isPreview: true
+ });
video['_isInit'] = false;
renderPreviewFrame(video, frame);
})();