UNPKG

@omnimedia/omnitool

Version:

open source video processing tools

109 lines 3.97 kB
import { Driver } from "../driver/driver.js"; import { playbackTest } from "./routines/playback-test.js"; import { waveformTest } from "./routines/waveform-test.js"; import { TimelineSchemaTest } from "./routines/timeline-setup.js"; import { filmstripTest } from "./routines/filmstrip-test.js"; import { setupTranscodeTest } from "./routines/transcode-test.js"; const driver = await Driver.setup({ workerUrl: new URL("../driver/driver.worker.bundle.min.js", import.meta.url) }); const transcodeCard = document.querySelector("[data-demo='transcode']"); const filmstripCard = document.querySelector("[data-demo='filmstrip']"); const waveformCard = document.querySelector("[data-demo='waveform']"); const playbackCard = document.querySelector("[data-demo='playback']"); const exportCard = document.querySelector("[data-demo='export']"); const exportButton = exportCard.querySelector("[data-action='export']"); let exportState = null; // hello world test { await driver.thread.work.hello(); if (driver.machina.count === 1) console.log("✅ driver works"); else console.error("❌ FAIL driver call didn't work"); } const setProgress = (card, state) => { const progress = card.querySelector(".progress"); const status = card.querySelector(".status"); if (!progress || !status) return; if (state === "running") { progress.removeAttribute("value"); status.textContent = "running"; } else if (state === "done") { progress.value = 1; status.textContent = "done"; } else { progress.value = 0; status.textContent = "idle"; } }; const bindDemo = (card, run) => { const input = card.querySelector("input[type='file']"); const button = card.querySelector("[data-action='run']"); button.disabled = true; input.addEventListener("input", () => { button.disabled = !input.files?.length; }); button.addEventListener("click", async () => { const file = input.files?.[0]; if (!file) return; button.disabled = true; setProgress(card, "running"); try { await run(file, card); setProgress(card, "done"); } finally { button.disabled = false; } }); }; bindDemo(transcodeCard, async (file, card) => { const preview = card.querySelector(".demo-preview"); const transcode = setupTranscodeTest(driver, file); preview.replaceChildren(transcode.canvas); await transcode.run(); }); bindDemo(filmstripCard, async (file, card) => { await filmstripTest(file, card); }); bindDemo(waveformCard, async (file, card) => { await waveformTest(driver, file, card); }); { const input = playbackCard.querySelector("input[type='file']"); input.addEventListener("input", async () => { const file = input.files?.[0]; if (!file) return; const { timeline, omni } = await TimelineSchemaTest(driver, file); await playbackTest(timeline, omni, playbackCard); }); } { const input = exportCard.querySelector("input[type='file']"); input.addEventListener("input", async () => { const file = input.files?.[0]; if (!file) return; setProgress(exportCard, "running"); const { timeline, omni } = await TimelineSchemaTest(driver, file); exportState = { timeline, omni }; exportButton.disabled = false; const preview = exportCard.querySelector(".demo-preview"); const player = await omni.playback(timeline); await player.seek(0); preview.replaceChildren(player.canvas); setProgress(exportCard, "done"); }); } exportButton.addEventListener("click", async () => { if (!exportState) return; setProgress(exportCard, "running"); await exportState.omni.render(exportState.timeline); setProgress(exportCard, "done"); }); //# sourceMappingURL=demo.bundle.js.map