postMessage({ hasInstalled: true }); let offscreenCanvas; let webgl; this.onmessage = (event) => { const { data } = event; const { cmd } = data; if (cmd === 'init') { const { canvas, options, scripts } = data; self.importScripts(...scripts); const WebGL = self.webgl.default; offscreenCanvas = canvas; webgl = new WebGL(canvas, options); return; } if (cmd === 'render') { const { frame, type, width, height, yLength, uvLength } = data; offscreenCanvas.width = width; offscreenCanvas.height = height; let error; if (type === 'webcodecs') { if (webgl) { webgl.setFrameType('VIDEO_FRAME'); error = webgl.renderFrame(frame, width, height); } else { frame.close(); } } else { if (webgl) { webgl.setFrameType('YUV_FRAME'); error = webgl.renderFrame(frame, width, height, yLength, uvLength); } } if (error) { postMessage({renderError: error}); webgl && webgl.dispose(); this.close(); } } else if (cmd === 'display') { const { options } = data; webgl && webgl.setDisplayInfo(options); } else if (cmd === 'close') { webgl && webgl.dispose(); this.close(); } };