KASM-3521 need to support relative pathing for the qoi workers (#44)

KASM-3521 need to support relative pathing for the qoi workers
This commit is contained in:
Ryan Kuba 2022-11-04 12:40:41 -07:00 committed by GitHub
parent a97fa93d84
commit c5350ba2d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 39 deletions

View File

@ -1609,6 +1609,7 @@ const UI = {
break; break;
case 'setvideoquality': case 'setvideoquality':
UI.forceSetting('video_quality', parseInt(event.data.value), false); UI.forceSetting('video_quality', parseInt(event.data.value), false);
UI.forceSetting('enable_qoi', false, false); // QOI controlled via video quality mode when in iframe
UI.updateQuality(); UI.updateQuality();
break; break;
case 'enable_game_mode': case 'enable_game_mode':
@ -2043,7 +2044,7 @@ const UI = {
} }
//force QOI off if mode is below extreme //force QOI off if mode is below extreme
if (present_mode !== 4 && UI.getSetting('enable_qoi')) { if (present_mode < 4 && UI.getSetting('enable_qoi')) {
UI.showStatus("Lossless QOI disabled when not in extreme quality mode."); UI.showStatus("Lossless QOI disabled when not in extreme quality mode.");
UI.forceSetting('enable_qoi', false, false); UI.forceSetting('enable_qoi', false, false);
} }

View File

@ -249,7 +249,7 @@ async function load(module, imports) {
async function init(input) { async function init(input) {
if (typeof input === 'undefined') { if (typeof input === 'undefined') {
input = '/core/decoders/qoi/qoi_viewer_bg.wasm'; input = path + 'core/decoders/qoi/qoi_viewer_bg.wasm';
} }
const imports = {}; const imports = {};
imports.wbg = {}; imports.wbg = {};
@ -296,47 +296,50 @@ async function init(input) {
} }
var arr; var arr;
var path;
async function run() { async function run() {
self.addEventListener('message', function(evt) { self.addEventListener('message', async function(evt) {
try { if (evt.data.path) {
let length = evt.data.length; path = evt.data.path;
let data = new Uint8Array(evt.data.sab.slice(0, length)); await init();
let resultData = decode_qoi(data); //Send message that worker is ready
if (!arr) { self.postMessage({
arr = new Uint8Array(evt.data.sabR); result: 1
})
} else {
try {
let length = evt.data.length;
let data = new Uint8Array(evt.data.sab.slice(0, length));
let resultData = decode_qoi(data);
if (!arr) {
arr = new Uint8Array(evt.data.sabR);
}
let lengthR = resultData.data.length;
arr.set(resultData.data);
let img = {
colorSpace: resultData.colorSpace,
width: resultData.width,
height: resultData.height
};
self.postMessage({
result: 0,
img: img,
length: lengthR,
width: evt.data.width,
height: evt.data.height,
x: evt.data.x,
y: evt.data.y,
frame_id: evt.data.frame_id
});
} catch (err) {
self.postMessage({
result: 2,
error: err
});
} }
let lengthR = resultData.data.length;
arr.set(resultData.data);
let img = {
colorSpace: resultData.colorSpace,
width: resultData.width,
height: resultData.height
};
self.postMessage({
result: 0,
img: img,
length: lengthR,
width: evt.data.width,
height: evt.data.height,
x: evt.data.x,
y: evt.data.y,
frame_id: evt.data.frame_id
});
} catch (err) {
self.postMessage({
result: 2,
error: err
});
} }
}, false); }, false);
await init();
//Send message that worker is ready
self.postMessage({
result: 1
})
} }
run(); run();

View File

@ -398,6 +398,8 @@ export default class TightDecoder {
} }
_enableQOIWorkers() { _enableQOIWorkers() {
let fullPath = window.location.pathname;
let path = fullPath.substring(0, fullPath.lastIndexOf('/')+1);
let sabTest = typeof SharedArrayBuffer; let sabTest = typeof SharedArrayBuffer;
if (sabTest !== 'undefined') { if (sabTest !== 'undefined') {
this._enableQOI = true; this._enableQOI = true;
@ -416,7 +418,7 @@ export default class TightDecoder {
this._qoiRects = []; this._qoiRects = [];
this._rectQlooping = false; this._rectQlooping = false;
for (let i = 0; i < this._threads; i++) { for (let i = 0; i < this._threads; i++) {
this._workers.push(new Worker("/core/decoders/qoi/decoder.js")); this._workers.push(new Worker("core/decoders/qoi/decoder.js"));
this._sabs.push(new SharedArrayBuffer(300000)); this._sabs.push(new SharedArrayBuffer(300000));
this._sabsR.push(new SharedArrayBuffer(400000)); this._sabsR.push(new SharedArrayBuffer(400000));
this._arrs.push(new Uint8Array(this._sabs[i])); this._arrs.push(new Uint8Array(this._sabs[i]));
@ -450,6 +452,9 @@ export default class TightDecoder {
} }
}; };
} }
for (let i = 0; i < this._threads; i++) {
this._workers[i].postMessage({path:path});
}
} else { } else {
this._enableQOI = false; this._enableQOI = false;
Log.Warn("Enabling QOI Failed, client not compatible."); Log.Warn("Enabling QOI Failed, client not compatible.");