import { test } from 'vitest'; import { Output } from '../../src/output.js'; import { WebMOutputFormat } from '../../src/output-format.js'; import { BufferTarget } from '../../src/target.js'; import { VideoSampleSource } from '../../src/media-source.js'; import { VideoSample } from '../../src/sample.js'; import { QUALITY_MEDIUM } from '../../src/encode.js'; test('VideoSampleSource.close() should be idempotent after finalize()', async () => { const output = new Output({ format: new WebMOutputFormat(), target: new BufferTarget(), }); const videoSource = new VideoSampleSource({ codec: 'vp8', bitrate: QUALITY_MEDIUM, }); output.addVideoTrack(videoSource); await output.start(); const canvas = new OffscreenCanvas(100, 100); const ctx = canvas.getContext('2d')!; ctx.fillStyle = 'red'; ctx.fillRect(0, 0, 100, 100); const sample = new VideoSample(canvas, { timestamp: 0, duration: 1 / 30 }); await videoSource.add(sample); sample.close(); await output.finalize(); videoSource.close(); // This previously threw });