use webgl for yuv transform, wasm one not work well for image from mac,

no idea why
This commit is contained in:
rustdesk 2022-04-07 03:21:27 +08:00
parent 620fe81017
commit 6aad58bfe5

View File

@ -48,11 +48,12 @@ export function pushEvent(name, payload) {
events.push(payload); events.push(payload);
} }
let yuvWorker = new Worker("./yuv.js"); let yuvWorker;
/*
let yuvCanvas; let yuvCanvas;
let gl; let gl;
let pixels; let pixels;
let flipPixels;
let oldSize;
if (YUVCanvas.WebGLFrameSink.isAvailable()) { if (YUVCanvas.WebGLFrameSink.isAvailable()) {
var canvas = document.createElement('canvas'); var canvas = document.createElement('canvas');
yuvCanvas = YUVCanvas.attach(canvas, { webGL: true }); yuvCanvas = YUVCanvas.attach(canvas, { webGL: true });
@ -60,21 +61,38 @@ if (YUVCanvas.WebGLFrameSink.isAvailable()) {
} else { } else {
yuvWorker = new Worker("./yuv.js"); yuvWorker = new Worker("./yuv.js");
} }
*/ let testSpeed = [0, 0];
export function draw(frame) { export function draw(frame) {
if (yuvWorker) { if (yuvWorker) {
// frame's (y/u/v).bytes already detached, can not transferrable any more. // frame's (y/u/v).bytes already detached, can not transferrable any more.
yuvWorker.postMessage(frame); yuvWorker.postMessage(frame);
} else { } else {
var now = new Date().getTime(); var tm0 = new Date().getTime();
yuvCanvas.drawFrame(frame); yuvCanvas.drawFrame(frame);
console.log(new Date().getTime() - now); var width = canvas.width;
now = new Date().getTime(); var height = canvas.height;
if (!pixels) pixels = new Uint8Array(canvas.width * canvas.height * 4); var size = width * height * 4;
gl.readPixels(0, 0, canvas.width, canvas.height, gl.RGBA, gl.UNSIGNED_BYTE, pixels); if (size != oldSize) {
console.log(new Date().getTime() - now); pixels = new Uint8Array(size);
flipPixels = new Uint8Array(size);
oldSize = size;
}
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
const row = width * 4;
const end = (height - 1) * row;
for (let i = 0; i < size; i += row) {
flipPixels.set(pixels.subarray(i, i + row), end - i);
}
currentFrame = flipPixels;
testSpeed[1] += new Date().getTime() - tm0;
testSpeed[0] += 1;
if (testSpeed[0] > 30) {
console.log('gl: ' + parseInt('' + testSpeed[1] / testSpeed[0]));
testSpeed = [0, 0];
}
} }
/*
var testCanvas = document.getElementById("test-yuv-decoder-canvas"); var testCanvas = document.getElementById("test-yuv-decoder-canvas");
if (testCanvas && currentFrame) { if (testCanvas && currentFrame) {
var ctx = testCanvas.getContext("2d"); var ctx = testCanvas.getContext("2d");
@ -84,6 +102,7 @@ export function draw(frame) {
img.data.set(currentFrame); img.data.set(currentFrame);
ctx.putImageData(img, 0, 0); ctx.putImageData(img, 0, 0);
} }
*/
} }
export function sendOffCanvas(c) { export function sendOffCanvas(c) {