@omnimedia/omnitool
Version:
open source video processing tools
109 lines • 3.97 kB
JavaScript
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